用語集
DNN
SoftNeuroはDNNという専用の保存形式でニューラルネットワークモデルを扱います。
一つのDNNは複数のネットワーク(Net)を持つことができ、
例えばpreprocess, main, postprocess の3つのNetを持つDNNなどがあります。
ファイル保存する場合の拡張子は.dnnです。
なお、.dnn形式のファイルの中にに保存されていないレイヤー・ルーチンのパラメータは、
実行時にデフォルト値が自動的に適用されます。
Net
DNNに複数保存することができるネットワークの保存単位です。
一つのNetは複数のLayerを持つことができ、それによってニューラルネットワークを形成します。
DNNには通常mainという名前のメインネットワークがあり、
その前後に前処理・後処理用のpreprocess, postprocessという名前のネットワークが接続される場合もあります。
Layer(レイヤー)
ニューラルネットワークの各層に相当する概念です。
SoftNeuroの実行時には各LayerにそれぞれRoutineの設定が割り当てられます。
基本的な処理内容はLayerごとに定義されていますが、どのようなアルゴリズムや命令セットで演算が行われるかはRoutineごとに異なります。
Routine(ルーチン)
Layerが行う演算の内部実装を表すものです。
conv2, depthwise_conv2 などの広く使われている処理を行うLayerには複数種類のルーチンが実装されており、
「環境依存の実装だが高速」といった環境ごとに最適なルーチンを利用することで、より高速な処理を実現することができます。
例えば、conv2レイヤーにはCPUで演算を行うcpu系のルーチンの他に、CUDAを利用してGPUで演算を行うcuda系のルーチンなどが用意されています。
Routine descriptor(ルーチンディスクリプタ)
ルーチンディスクリプタは、ルーチンがどのような実装であるかを示すための表記法です。
CLIツールの profile, run コマンドなどによって推論やプロファイリングを実行する際に、
--routineオプションでルーチンを指定する場合はこの表記法に従います。
各レイヤーにどのようなルーチンが実装されているかはroutinesコマンドを利用することで確認することができます。
ルーチンディスクリプタは以下のような要素から成り立っており、使用する際には少なくともDEVICEが指定されている必要があります。
- DEVICE[:DTYPE][:CH][/LEVEL][/AUX]
| 要素名 | 内容 |
|---|---|
| DEVICE | デバイス名。cpu, opencl, cuda, などが指定できます。 |
| DTYPE | 演算を行うデータ型。 float32 (デフォルト), float16, qint8, などが指定できます。 |
| CH | 入力テンソルのチャンネル位置です。 chf(channels-first) と chl (channels-last:デフォルト)が指定できます。 |
| LEVEL | 利用するアルゴリズムレベルを表します。 naive, fast (デフォルト), faster が指定できます。faster に近づくほどより高速になりますが、精度が劣化する可能性があります。 |
| AUX | 補助的な情報を表す要素です。特定のアルゴリズムを指定したい時などに使用します。 デフォルトは空欄('')です。 |
以下に表記法の例を記載します。
- cpu/faster/wg3x3_nxn
DEVICE='cpu', DTYPE='float32', CH='chl', LEVEL='faster', AUX='wg3x3_nxn' - opencl:float16
DEVICE='opencl', DTYPE='float16', CH='chl', LEVEL='fast', AUX='' - cpu:chf/naive
DEVICE='cpu', DTYPE='float32', CH='chf', LEVEL='naive', AUX=''
Plugin libraries(プラグインライブラリ)
SoftNeuroは本体となるlibsoftneuroというライブラリの他に、
特定の環境に依存する命令を利用した実装を内包するライブラリが存在します。
これらのプラグインライブラリは、利用したいものだけをlibsoftneuroと同じディレクトリに配置すると自動的に読み込まれます。
プラグインライブラリの種類と動作するための条件は以下の通りです。
| プラグインライブラリ | 依存環境 |
|---|---|
| plugin_avx2 | Intel CPUのAVX2の命令セットを利用した実装を内包したプラグインライブラリです。 |
| plugin_neon2 | ARM CPUのNEON命令(ARMv8)の命令セットを利用した実装を内包したプラグインライブラリです。 |
| plugin_neon3 | ARM CPUのNEON命令(ARMv8.2)の命令セットを利用した実装を内包したプラグインライブラリです。 |
| plugin_cuda-xx.x_cudnn-y.y | CUDA, 及びcudnnの実装を内包したプラグインライブラリです。対応するバージョンのCUDA及びcudnnが導入された環境で利用できます。 |
| plugin_opencl | OpenCLの実装を内包したプラグインライブラリです。OpenCL(2.0以降)が導入された環境で利用できます。 |