CNTK v2.3 リリース ノート
このリリースのハイライト
- より優れた ONNX サポート。
- 分散トレーニングのパフォーマンスを向上させるために NCCL2 に切り替えます。
- 強化された C# API。
- OpenCV は、CNTKのインストールには必要ありません。Tensorboard イメージ機能とイメージ リーダーにのみ必要です。
- さまざまなパフォーマンスの向上。
- ネットワーク最適化 API を追加します。
- スパースの Adadelta の高速化。
API
C#
- トレーニングと評価のパフォーマンス向上により、C# API が改善されました。
- トレーニングと評価中に、オフセットを持つ単一のマネージド バッファーからデータ バッチを作成できます。 これにより、C# コードでデータを準備する負担が軽減されます。
- 内部的には、データ マーシャリングはリリース 2.2 よりも効率的に行われます。 トレーニングと評価中に、おしゃべりな FloatVector の使用は回避されました。
C++
- エクスポートされた "PreorderTraverse" C++ API: 指定された条件に基づいてグラフを検索するために使用します。
Python と C++
- プリミティブ関数にカスタム属性を追加します。これは、モデルの保存/読み込み時にシリアル化/逆シリアル化されます。
- 一部の使用法:
func = C.plus(a, b)
func.custom_attributes = {'test':'abc', 'dict':{'a':1, 'b':2}, 'list':[1,2,3]}
func.custom_attributes['test2'] = 'def'
頻度指定で有効なデータ単位 (Python)
これで、トレーニング セッションの進行状況の頻度、CrossValidationConfig、チェックポイント構成で、サンプル、ミニバッチ、スイープでデータユニットを指定できるようになりました。例えば
C.training_session(
trainer=t,
mb_source=mbs,
mb_size=C.minibatch_size_schedule(4),
model_inputs_to_streams=input_map,
max_samples=60,
progress_frequency=(5, C.train.DataUnit.minibatch),
checkpoint_config = C.CheckpointConfig(frequency=(1, C.train.DataUnit.sweep), preserve_all=True,
filename=str(tmpdir / "checkpoint_save_all")),
cv_config = C.CrossValidationConfig(mbs1, frequency=(100, C.train.DataUnit.sample), minibatch_size=32),
).train(device)
詳細については、次の情報を参照してください。
データ単位が指定されていない場合、既定のデータ単位はサンプル内にあります。
Netopt モジュール - 高速推論のためのネットワーク最適化
- 近年、DNN Research コミュニティは、推論をより迅速かつコンパクトにする多くの手法を提案しています。 提案された手法には、行列ベクトル積および畳み込み演算、二値化/量子化、スパルシフィケーション、および周波数ドメイン表現の使用が含まれる。
- cntk.contrib.netopt モジュールの目的は、このような最適化を使用してネットワークを高速化または圧縮するための使いやすいインターフェイスCNTKユーザーと、それらをCNTKユーザーにエクスポートするフレームワークの最適化のライターを提供することです。
- netoptの初期リリースでは、高密度CNTK層の因子分解と畳み込み層の1ビット二値化がサポートされています。
Netopt API
- netopt モジュールの使用方法の詳細については、Manual_How_to_use_network_optimizations.ipynb を参照してください。
演算子
グループ畳み込み
- C++ と Python API によって公開される GPU でのグループ畳み込みのサポートが追加されました。
より多くの演算子の Free 静的軸 (FreeDimension) のサポート
- プール (MaxPool、AveragePool)、グローバル プーリング、プール解除、形状変更などの追加の演算子に対して、無料の静的軸のサポートが追加されました。 このサポートが強化されたので、最も一般的な畳み込みパイプライン (CNN) を空き静的軸で実行できる必要があります。
Backcompat
- DiagTimes ノードを使用した v1 モデルの読み込みをサポートします。
[パフォーマンス]
空き静的軸サポートによる畳み込み
- 空き静的軸のサポートで畳み込み操作を使用するモデルのトレーニング パフォーマンスが向上しました。 特定のモデルでは、x5 以上のトレーニング速度が上がっています。
検証のパフォーマンス
- 検証のパフォーマンスを向上させ、不要な検証チェックの多くを削除します。
CPU 畳み込み
- CPU 畳み込みを移動して MKL-ML を使用すると、AlexNet トレーニングで約 4 倍の高速化が実現します。
NCCL2 への移行
- NCCL2 は、Linux GPU ビルドの公式CNTK リリースでは既定で有効になり、分散トレーニングの集計コストが削減されます。 Python ユーザーの場合、NCCL バイナリは Linux Python ホイールに含まれるため、影響はありません。 Linux 上の BrainScript ユーザーの場合、CUDA や CUDNN と同様に、CNTK環境セットアップの一部として NCCL ライブラリをインストールする必要があります。 NCCL は Linux でのみ使用できるため、CPU ビルドとWindows ビルドは影響を受けません。
Adadelta
- グラデーションがスパースの場合、adadelta の更新が高速化されます。 更新の実行時間は、グラデーション内の 0 以外 の要素の数に比例するようになりました。 高次元スパース入力 (約 200 万の機能) を持つフィードフォワード モデルの 1 つの GPU で 5 倍の高速化を確認しました。 メモリ要件は緩やかに増加し、スパース入力機能あたり 4 バイト (前述のネットワークでは約 8 MB) が必要です。
ONNX
- CNTKでの ONNX のサポートが強化されました。
- ONNX を最新の ONNX に更新する https://github.com/onnx/onnx
- Resnet、Inception、VGG などのほとんどのビジョン モデルについて説明します (V2 CNTK形式で保存されたモデルのみ)。
- いくつかのバグを修正しました。
チュートリアル
- シーケンス分類のチュートリアル
- DSSM チュートリアル
- WGAN と LSGAN のチュートリアル
- CNN と GAN を使用した超解像度のチュートリアル
依存関係
コアから OpenCV 依存関係CNTK削除しました。
- CNTK 2.2 では、CNTKを使用するために OpenCV をインストールする必要がありますが、CNTK 2.3 では省略可能です
- OpenCV をインストールする必要があるのは、ImageReader または TensorBoard の Image 機能を使用する予定の場合のみです。
ImageIO を 2.2.0 にアップグレードしました
MKL
- CNTKCustomMKL から Intel MKLML に切り替えました。 MKLML は、 MKL-DNN 用の Intel MKL のトリミングされたバージョンとして Intel MKL-DNN と共にリリースされます。 これを設定するには:
Linux の場合:
sudo mkdir /usr/local/mklml
sudo wget https://github.com/01org/mkl-dnn/releases/download/v0.11/mklml_lnx_2018.0.1.20171007.tgz
sudo tar -xzf mklml_lnx_2018.0.1.20171007.tgz -C /usr/local/mklml
Windows の場合:
Create a directory on your machine to hold MKLML, e.g. mkdir c:\local\mklml
Download the file [mklml_win_2018.0.1.20171007.zip](https://github.com/01org/mkl-dnn/releases/download/v0.11/mklml_win_2018.0.1.20171007.zip).
Unzip it into your MKLML path, creating a versioned sub directory within.
Set the environment variable `MKLML_PATH` to the versioned sub directory, e.g. setx MKLML_PATH c:\local\mklml\mklml_win_2018.0.1.20171007