チャット | Windowsのビルドステータス | Linuxのビルドステータス |
---|---|---|
Microsoft Cognitive Toolkit (https://cntk.ai) は、有向グラフを介してニューラル ネットワークを一連の計算ステップとして記述する統合ディープ ラーニング ツールキットです。この有向グラフでは、リーフ ノードは入力値またはネットワーク パラメーターを表し、他のノードは入力に対する行列演算を表します。 CNTK を使用すると、ユーザーはフィードフォワード DNN、畳み込みネット (CNN)、リカレント ネットワーク (RNN/LSTM) などの一般的なモデル タイプを簡単に実現し、組み合わせることができます。複数の GPU とサーバーにわたる自動微分および並列化による確率的勾配降下 (SGD、誤差逆伝播) 学習を実装します。 CNTK は、2015 年 4 月からオープンソース ライセンスの下で利用可能になりました。私たちは、コミュニティが CNTK を利用して、オープンソースの実用的なコードの交換を通じてアイデアをより迅速に共有できることを願っています。
マスターからの最新の CNTK ビットを使用したい場合は、CNTK ナイトリー パッケージのいずれかを使用します。
CNTK の使用と CNTK への貢献について詳しくは、次のリソースをご覧ください。
親愛なるコミュニティの皆様
ONNX と ONNX ランタイムへの継続的な貢献により、AI フレームワーク エコシステム内での相互運用が容易になり、従来の ML モデルとディープ ニューラル ネットワークの両方で高性能のクロスプラットフォーム推論機能にアクセスできるようになりました。ここ数年、当社は Microsoft Cognitive Toolkit などの主要なオープンソース機械学習プロジェクトを開発する機会に恵まれてきました。これにより、ユーザーは深層学習における業界全体の進歩を大規模に活用できるようになりました。
本日の 2.7 リリースは、CNTK の最後のメイン リリースとなります。今後、バグ修正のためのマイナー リリースがいくつかリリースされる可能性がありますが、それらはケースバイケースで評価されます。このリリース後に新機能を開発する計画はありません。
CNTK 2.7 リリースでは ONNX 1.4.1 が完全にサポートされており、CNTK モデルの運用を検討しているユーザーには ONNX と ONNX ランタイムを活用することをお勧めします。今後も、ユーザーは、それをサポートする多数のフレームワークを通じて、進化する ONNX イノベーションを引き続き活用できます。たとえば、ユーザーは ONNX モデルを PyTorch からネイティブにエクスポートしたり、TensorFlow-ONNX コンバーターを使用して TensorFlow モデルを ONNX に変換したりできます。
CNTK の最初のオープンソース リリース以来、長年にわたって貢献者やユーザーから受けてきたすべてのサポートに、私たちは非常に感謝しています。 CNTK により、Microsoft チームと外部ユーザーの両方が、フレームワークの創始者である Microsoft Speech 研究者によって達成された音声認識の歴史的な進歩など、あらゆる種類の深層学習アプリケーションで複雑で大規模なワークロードを実行できるようになりました。
Bing や Office などのマイクロソフト製品全体で使用されるサービス モデルに ONNX が採用されることが増えているため、私たちは研究から得たイノベーションと生産の厳しい要求を統合してエコシステムを前進させることに専念しています。
何よりも、私たちの目標は、ソフトウェアおよびハードウェア スタック全体にわたるディープ ラーニングのイノベーションを可能な限りオープンでアクセスしやすくすることです。私たちは、CNTK の既存の強みと新しい最先端の研究の両方を他のオープンソース プロジェクトに導入し、そのようなテクノロジーの適用範囲を真に拡大するために懸命に取り組んでいきます。
感謝の気持ちを込めて、
-- CNTK チーム
このプロジェクトはマイクロソフトのオープンソース行動規範を採用しています。詳細については、行動規範に関する FAQ を参照するか、追加の質問やコメントがあれば [email protected] までお問い合わせください。
公式プロジェクト フィードで詳細なニュースを見つけることができます
2019年3月29日。 CNTK 2.7.0
Windows でビルド環境とランタイム環境をセットアップするには:
Docker を使用して Linux 上でビルド環境とランタイム環境をセットアップするには、ここで Dockerfiles を使用して Unbuntu 16.04 Docker イメージをビルドしてください。他の Linux システムの場合は、Dockerfile を参照して CNTK の依存ライブラリをセットアップしてください。
再帰ループを含む CNTK モデルは、スキャン操作を使用して ONNX モデルにエクスポートできます。
2 GB を超えるモデルを ONNX 形式でエクスポートするには、cntk.Function API: save(self, filename, format=ModelFormat.CNTKv2, use_external_files_to_store_parameters=False) を、「format」を ModelFormat.ONNX に設定し、use_external_files_to_store_parameters を True に設定して使用します。この場合、モデルパラメータは外部ファイルに保存されます。エクスポートされたモデルは、onnxruntime でモデル評価を行うときに外部パラメーター ファイルとともに使用されます。
2018年11月26日。
Netron は、CNTK v1 および CNTK v2 .model
ファイルの視覚化をサポートするようになりました。
2018年9月17日。 CNTK 2.6.0
CNTK のグループ畳み込みの実装が更新されました。更新された実装では、グループ畳み込み用のサブグラフの作成 (スライスとスプライシングを使用) が廃止され、代わりに cuDNN7 および MKL2017 API が直接使用されます。これにより、パフォーマンスとモデル サイズの両方の点でエクスペリエンスが向上します。
例として、次の属性を持つ単一のグループ畳み込み演算の場合:
この単一ノードの比較数値は次のとおりです。
最初のヘッダー | GPU実行。時間 (ミリ秒、1000 回の実行平均) | CPU幹部。時間 (ミリ秒、1000 回の実行平均) | モデル サイズ (KB、CNTK 形式) |
---|---|---|---|
古い実装 | 9.349 | 41.921 | 38 |
新しい実装 | 6.581 | 9.963 | 5 |
高速化/節約 | 30%程度 | 約65~75% | 87% |
CNTK の逐次畳み込みの実装が更新されました。更新された実装では、個別の逐次畳み込み層が作成されます。通常の畳み込み層とは異なり、この演算は動的軸(シーケンス)上でも畳み込み、その軸にfilter_shape[0]が適用されます。更新された実装では、シーケンス軸のストライド > 1 など、より広範なケースがサポートされます。
たとえば、1 チャネルの白黒画像のバッチに対する逐次畳み込みです。画像の高さは同じ 640 に固定されていますが、それぞれの幅は可変長です。幅は連続軸で表されます。パディングが有効になっており、幅と高さのストライドは両方とも 2 です。
>>> f = SequentialConvolution((3,3), reduction_rank=0, pad=True, strides=(2,2), activation=C.relu)
>>> x = C.input_variable(**Sequence[Tensor[640]])
>>> x.shape
(640,)
>>> h = f(x)
>>> h.shape
(320,)
>>> f.W.shape
(1, 1, 3, 3)
Depth_to_space 演算子とspace_to_ Depth演算子に重大な変更があります。これらは ONNX 仕様に一致するように更新され、特に深さ次元を空間次元のブロックとして配置する方法、およびその逆の配置方法が変更されました。変更を確認するには、これら 2 つの操作の更新されたドキュメントの例を参照してください。
三角関数Tan
およびAtan
のサポートが追加されました。
ELU 演算にalpha
属性のサポートが追加されました。
最終的な畳み込み出力値に影響を与えることなく、CPU 上でベスト エフォートで対称的なパディングを生成するために、 Convolution
の自動パディング アルゴリズムが更新されました。このアップデートにより、MKL API でカバーできるケースの範囲が広がり、ResNet50 などのパフォーマンスが向上します。
CNTK Python API の引数プロパティに重大な変更があります。デフォルトの動作が更新され、C++ の順序ではなく Python の順序で引数を返すようになりました。こうすることで、ops に入力されたのと同じ順序で引数が返されます。 C++ の順序で引数を取得したい場合は、グローバル オプションをオーバーライドするだけです。この変更は、Times、TransposeTimes、および Gemm(internal) の操作にのみ影響します。
LogSoftMax
更新しました。BatchNormalization
オペレーションのエクスポート/インポートを最新の仕様に更新しました。DepthToSpace
およびSpaceToDepth
演算を更新しました。ELU
ONNX オペレーションでのalpha
属性のエクスポートのサポートを追加しました。Convolution
とPooling
エクスポートに対する大幅な見直し。以前とは異なり、これらの操作はいかなる状況でも明示的なPad
操作をエクスポートしません。ConvolutionTranspose
エクスポートとインポートに対する大幅な見直し。 output_shape
、 output_padding
、 pads
などの属性は完全にサポートされています。StopGradient
のサポートを no-op として追加しました。Hardmax
/ Softmax
/ LogSoftmax
のインポート/エクスポートを修正しました。Select
操作のエクスポートのサポートが追加されました。MatMul
オペレーションの CNTK サポートを更新しました。Gemm
オペレーションの CNTK サポートを更新しました。MeanVarianceNormalization
オペレーションのエクスポート/インポートを最新の仕様に更新しました。LayerNormalization
オペレーションのエクスポート/インポートを最新の仕様に更新しました。PRelu
op エクスポート/インポートを最新の仕様に更新しました。Gather
オペレーションのエクスポート/インポートを最新の仕様に更新しました。ImageScaler
オペレーションのエクスポート/インポートを最新の仕様に更新しました。Reduce
オペレーションのエクスポート/インポートを最新の仕様に更新しました。Flatten
オペレーションのエクスポート/インポートを最新の仕様に更新しました。Unsqueeze
オペレーションの CNTK サポートを追加しました。size
属性が半径ではなく直径のセマンティクスを持つ ONNX 1.2 仕様に一致するように LRN 演算を更新しました。 LRN カーネル サイズがチャネル サイズより大きい場合の検証を追加しました。Min
/ Max
インポート実装を更新しました。Cntk.Core.Managed ライブラリは正式に .Net Standard に変換され、Windows と Linux の両方で .Net Core および .Net Framework アプリケーションをサポートします。このリリース以降、.Net 開発者は、パッケージ管理形式が PackageReference に設定された新しい .Net SDK スタイルのプロジェクト ファイルを使用して、CNTK Nuget パッケージを復元できるようになります。
次の C# コードは Windows と Linux の両方で動作するようになりました。
>>> var weightParameterName = "weight";
>>> var biasParameterName = "bias";
>>> var inputName = "input";
>>> var outputDim = 2;
>>> var inputDim = 3;
>>> Variable inputVariable = Variable.InputVariable(new int[] { inputDim }, DataType.Float, inputName);
>>> var weightParameter = new Parameter(new int[] { outputDim, inputDim }, DataType.Float, 1, device, weightParameterName);
>>> var biasParameter = new Parameter(new int[] { outputDim }, DataType.Float, 0, device, biasParameterName);
>>>
>>> Function modelFunc = CNTKLib.Times(weightParameter, inputVariable) + biasParameter;
たとえば、.Net Core アプリケーションの .csproj ファイルに単に ItemGroup 句を追加するだけで十分です。 >>> >>> >>> >>> netcoreapp2.1 >>> x64 >>> >>> >>> >>> >>> >>> >>>
2018年4月16日。 CNTK 2.5.1
バンドルに含まれるサードパーティ ライブラリを使用して CNTK 2.5 を再パックします (Python ホイール パッケージ)
2018年3月15日。 CNTK2.5
プロファイラ詳細の出力形式をchrome://tracing
に変更します
ノードごとのタイミングを有効にします。動作例はこちら
import cntk as C
C . debugging . debug . set_node_timing ( True )
C . debugging . start_profiler () # optional
C . debugging . enable_profiler () # optional
#<trainer|evaluator|function> executions
< trainer | evaluator | function > . print_node_timing ()
C . debugging . stop_profiler ()
chrome://tracing
でのプロファイラーの詳細ビューの例
MKL を使用した CPU 推論パフォーマンスの向上
cntk.cntk_py.enable_cpueval_optimization()/cntk.cntk_py.disable_cpueval_optimization()
でON/OFF可能1BitSGDをCNTKに組み込む
1BitSGD
ソース コードはSource/1BitSGD/
で CNTK ライセンス (MIT ライセンス) で利用できるようになりました。1bitsgd
ビルド ターゲットが既存の GPU ターゲットにマージされました新しい損失関数: 階層型ソフトマックス
複数の学習者による分散型トレーニング
オペレーター
MeanVarianceNormalization
演算子を追加しました。バグ修正
CNTKBinaryFormat
デシリアライザーのクラッシュを修正しましたmpi=no
の場合のビルドのバグを修正しましたmisc.converter.py
のcntk.convert
API のバグを修正しました。ONNX
ONNX.checker
に準拠するようになりました。OptimizedRNNStack
オペレーターに対する ONNX サポートを追加しました (LSTM のみ)。MeanVarianceNormalization
のサポートが追加されました。Identity
のサポートが追加されました。MeanVarianceNormalization
演算を使用した CNTK のLayerNormalization
レイヤーのエクスポートのサポートが追加されました。Concat
オペレーターではオプションです。LeakyReLu
の下位互換性バグ修正 (引数 'alpha' が double 型に戻りました)。その他
find_by_uid()
cntk.logging.graph
の下に追加しました。2018年2月28日。 CNTK は夜間ビルドをサポートします
マスターからの最新の CNTK ビットを使用したい場合は、CNTK nightly パッケージのいずれかを使用してください。
あるいは、対応するビルド バッジをクリックして夜間ビルド ページに移動することもできます。
2018年1月31日。 CNTK 2.4
ハイライト:
OP
top_k
操作: フォワード パスで、指定された軸に沿った上位 (最大) k の値と対応するインデックスを計算します。逆方向パスでは、勾配は上位 k 個の要素に分散されます (上位 k にない要素は勾配がゼロになります)。gather
操作で軸引数がサポートされるようになりましたsqueeze
およびexpand_dims
操作zeros_like
およびones_like
操作。多くの状況では、単純な 0 または 1 を正しくブロードキャストする CNTK に依存するだけで済みますが、実際のテンソルが必要になる場合もあります。depth_to_space
: 入力テンソルの要素を深さ次元から空間ブロックに再配置します。この操作の一般的な使用法は、一部の画像超解像度モデルのサブピクセル畳み込みを実装することです。space_to_depth
: 入力テンソルの要素を空間次元から深さ次元に再配置します。これは主に DepthToSpace の逆です。sum
演算: 入力テンソルの要素ごとの合計を計算する新しい Function インスタンスを作成します。softsign
演算: 入力テンソルの要素ごとのソフトサインを計算する新しい Function インスタンスを作成します。asinh
操作: 入力テンソルの要素ごとの asinh を計算する新しい Function インスタンスを作成します。log_softmax
オペレーション: 入力テンソルの logsoftmax 正規化値を計算する新しい Function インスタンスを作成します。hard_sigmoid
操作: 入力テンソルのhard_sigmoid 正規化値を計算する新しい Function インスタンスを作成します。element_and
、 element_not
、 element_or
、 element_xor
要素ごとの論理演算reduce_l1
操作: 指定された軸に沿って入力テンソル要素の L1 ノルムを計算します。reduce_l2
操作: 指定された軸に沿って入力テンソルの要素の L2 ノルムを計算します。reduce_sum_square
演算: 指定された軸に沿って入力テンソルの要素の二乗和を計算します。image_scaler
操作: 個々の値をスケーリングすることによる画像の変更。ONNX
InferredDimension
処理するために ONNX Reshape
オペレーションを更新しました。producer_name
とproducer_version
フィールドを ONNX モデルに追加します。Conv
op でauto_pad
属性もpads
属性も指定されていない場合の処理。Pooling
操作シリアル化のバグを修正しましたInputVariable
を作成するバグを修正しました。Transpose
演算の実装の更新。Conv
、 ConvTranspose
、およびPooling
演算の実装を更新しました。オペレーター
Convolution
演算の出力は、グループ > 1 に対して変更されます。次のリリースでは、グループ畳み込みのより最適化された実装が期待されています。Convolution
層のグループ畳み込みのエラー レポートが改善されました。ハロゲン化物バイナリ畳み込み
netopt
モジュールで使用できるCntk.BinaryConvolution.so/dll
ライブラリをビルドできるようになりました。このライブラリには、Python ベースの 2 値化畳み込み演算子よりも優れたパフォーマンスを発揮する、最適化された 2 値畳み込み演算子が含まれています。ビルドで Halide を有効にするには、ビルドを開始する前に Halide リリースをダウンロードし、 HALIDE_PATH
環境変数を設定してください。 Linux では、 ./configure --with-halide[=directory]
使用して有効にできます。この機能の使用方法の詳細については、ネットワーク最適化の使用方法を参照してください。詳細については、リリース ノートを参照してください。 CNTK リリース ページからリリースを取得します。