Extension

NNabla には、開発者が新規デバイスをかんたんに拡張できる機能があります。NNabla Python パッケージは、公式に cudnn 拡張機能をサポートしており、cuDNN 計算機プリミティブが備わった NVIDIA CUDA GPU を活用することにより、劇的に計算処理が加速されます。

以下のように手動でExtensionをインポートできます:

import nnabla_ext.cudnn

See :ref:`python-package-installation` to install the CUDA extension.

Extensionユーティリティ

NNabla Extensionのためのユーティリティ。

nnabla.ext_utils.list_extensions()[ソース]

利用可能なExtensionをリストアップします。

注釈

名前空間パッケージのディレクトリ構成に依存しているため、あるプラットフォームや環境によっては正しく動作しない可能性があります。

戻り値: str のリスト

利用可能なExtension名のリスト。

nnabla.ext_utils.import_extension_module(ext_name)[ソース]

Extensionモジュールの名称でインポートします。

Extensionモジュールは、 nnabla_ext パッケージの下に名前空間パッケージとしてインストールされます。 すべてのExtensionモジュールは、統一した API セットを提供します。

パラメータ

ext_name (str) -- Extension名。例: ‘cpu’, ‘cuda’, ‘cudnn’ 等。

戻り値: module

特定の NNabla Extensionの Python モジュール。

サンプル

ext = import_extension_module('cudnn')
available_devices = ext.get_devices()
print(available_devices)
ext.device_synchronize(available_devices[0])
ext.clear_memory_cache()
nnabla.ext_utils.get_extension_context(ext_name, **kw)[ソース]

指定されたExtensionのContextを取得します。

すべてのExtensionモジュールは context(**kw) 関数を提供する必要があります。

パラメータ
  • ext_name (str) -- nnabla_ext への相対的なモジュールパス

  • kw (dict) -- Extensionモジュールにあるcontext関数への追加のキーワード引数。

戻り値

現在のExtensionのcontext

戻り値の型

nnabla.Context

サンプル

ctx = get_extension_context('cudnn', device_id='0', type_config='half')
nn.set_default_context(ctx)

Extensionモジュールの API

すべてのExtensionモジュールは以下の関数を持つ必要があります。

nnabla.ext_utils.context(*kw)

Extensionモジュールのデフォルトのcontext記述子を返します。本メソッドはExtensionによって異なるオプションとなる引数を取りえます。例えば、 cudnn Extensionでは、計算処理を実行する GPU を指定するため int として device_id を取ります。

nnabla.ext_utils.device_synchronize(*kw)

ホストスレッドに対してデバイス実行ストリームを同期するために本メソッドを使います。例えば CUDA では、カーネル実行をストリームのキューに追加し、ホストスレッドとは非同期に実行します。本関数は、そのような機能を使うデバイス内でのみ有効です。CPU 実装では、本メソッドはダミー関数として実装され、そのため本関数を呼び出しても無視されます。 cudnn Extensionにある本関数は、オプションの引数として device_id を取りますが、これによって同期させたいデバイスを指定できます。

nnabla.ext_utils.get_device_count()

TODO: 要記入

nnabla.ext_utils.get_devices()

TODO: 要記入

nnabla.ext_utils.clear_memory_cache()

TODO: 要記入

Extensionの実装

TODO: how to create a new extension ページへのリンク