用語集
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以降)が導入された環境で利用できます。 |