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()
Extensionモジュールの API¶
すべてのExtensionモジュールは以下の関数を持つ必要があります。
-
nnabla.ext_utils.context(*kw)¶ Extensionモジュールのデフォルトのcontext記述子を返します。本メソッドはExtensionによって異なるオプションとなる引数を取りえます。例えば、
cudnnExtensionでは、計算処理を実行する GPU を指定するためintとしてdevice_idを取ります。
-
nnabla.ext_utils.device_synchronize(*kw)¶ ホストスレッドに対してデバイス実行ストリームを同期するために本メソッドを使います。例えば CUDA では、カーネル実行をストリームのキューに追加し、ホストスレッドとは非同期に実行します。本関数は、そのような機能を使うデバイス内でのみ有効です。CPU 実装では、本メソッドはダミー関数として実装され、そのため本関数を呼び出しても無視されます。
cudnnExtensionにある本関数は、オプションの引数として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 ページへのリンク