ApacheMXNet-はじめに

この章では、Apache MXNetの機能に焦点を当て、このディープラーニングソフトウェアフレームワークの最新バージョンについて説明します。

MXNetとは何ですか?

Apache MXNetは、開発者がディープラーニングモデルを構築、トレーニング、およびデプロイするのに役立つ強力なオープンソースのディープラーニングソフトウェアフレームワーク機器です。過去数年間、ヘルスケアから輸送、製造に至るまで、そして実際、私たちの日常生活のあらゆる側面において、ディープラーニングの影響は広範囲に及んでいます。今日、ディープラーニングは、顔認識、オブジェクト検出、光学式文字認識(OCR)、音声認識、機械翻訳などのいくつかの難しい問題を解決するために企業によって求められています。

これが、ApacheMXNetがサポートされている理由です。

  • Intel、Baidu、Microsoft、WolframResearchなどの大企業。

  • アマゾンウェブサービス(AWS)、MicrosoftAzureなどのパブリッククラウドプロバイダー

  • カーネギーメロン大学、MIT、ワシントン大学、香港科技大学などのいくつかの大きな研究機関。

なぜApacheMXNetなのか?

Torch7、Caffe、Theano、TensorFlow、Keras、Microsoft Cognitive Toolkitなど、さまざまなディープラーニングプラットフォームが存在するのに、なぜApacheMXNetなのか疑問に思われるかもしれません。その背後にあるいくつかの理由を確認しましょう:

  • Apache MXNetは、既存のディープラーニングプラットフォームの最大の問題の1つを解決します。問題は、ディープラーニングプラットフォームを使用するには、異なるプログラミングフレーバーの別のシステムを学習する必要があるということです。

  • Apache MXNetの助けを借りて、開発者はGPUとクラウドコンピューティングの全機能を活用できます。

  • Apache MXNetは、あらゆる数値計算を高速化し、大規模DNN(ディープニューラルネットワーク)の開発と展開の高速化に特に重点を置いています。

  • これは、命令型プログラミングとシンボリックプログラミングの両方の機能をユーザーに提供します。

さまざまな機能

最先端のディープラーニング研究を迅速に開発するための柔軟なディープラーニングライブラリ、または本番ワークロードをプッシュするための堅牢なプラットフォームを探している場合、検索はApacheMXNetで終了します。これは、次の機能によるものです。

分散トレーニング

マルチGPUまたはほぼ線形のスケーリング効率を備えたマルチホストトレーニングのいずれであっても、Apache MXNetを使用すると、開発者はハードウェアを最大限に活用できます。MXNetは、Uberで作成されたオープンソースの分散型ディープラーニングフレームワークであるHorovodとの統合もサポートしています。

この統合のために、Horovodで定義されている一般的な分散APIのいくつかを以下に示します。

  • horovod.broadcast()

  • horovod.allgather()

  • horovod.allgather()

この点で、MXNetは次の機能を提供します。

  • Device Placement − MXNetを使用すると、各データ構造(DS)を簡単に指定できます。

  • Automatic Differentiation − Apache MXNetは、微分、つまり微分計算を自動化します。

  • Multi-GPU training − MXNetを使用すると、使用可能なGPUの数でスケーリング効率を実現できます。

  • Optimized Predefined Layers − MXNetで独自のレイヤーをコーディングできるだけでなく、速度を上げるために事前定義されたレイヤーを最適化することもできます。

ハイブリダイゼーション。

Apache MXNetは、ユーザーにハイブリッドフロントエンドを提供します。Gluon Python APIの助けを借りて、命令型機能とシンボリック機能の間のギャップを埋めることができます。これは、ハイブリッド化機能と呼ぶことで実行できます。

より高速な計算

数十または数百の行列乗算のような線形演算は、ディープニューラルネットの計算上のボトルネックです。このボトルネックを解決するために、MXNetは次の機能を提供します。

  • GPU用に最適化された数値計算

  • 分散型エコシステム向けに最適化された数値計算

  • 標準のNNを簡単に表現できる一般的なワークフローの自動化。

言語バインディング

MXNetは、PythonやRなどの高級言語に深く統合されています。また、次のような他のプログラミング言語もサポートしています。

  • Scala

  • Julia

  • Clojure

  • Java

  • C/C++

  • Perl

新しいプログラミング言語を学ぶ必要はありません。代わりに、MXNetをハイブリダイゼーション機能と組み合わせることで、Pythonから選択したプログラミング言語での展開への非常にスムーズな移行が可能になります。

最新バージョンMXNet1.6.0

Apache Software Foundation(ASF)は、2020年2月21日にApache License2.0の下でApacheMXNetの安定バージョン1.6.0をリリースしました。MXNetコミュニティが今後のリリースでPython2のサポートを終了することを決定したため、これはPython2をサポートする最後のMXNetリリースです。このリリースがユーザーにもたらす新機能のいくつかをチェックしてみましょう。

NumPy-互換性のあるインターフェース

NumPyは、その柔軟性と一般性により、機械学習の実践者、科学者、学生に広く使用されています。しかし、私たちが知っているように、グラフィックプロセッシングユニット(GPU)のような最近のハードウェアアクセラレータは、さまざまな機械学習(ML)ツールキットにますます同化されており、NumPyユーザーはGPUの速度を利用するために、新しいフレームワークに切り替える必要があります異なる構文で。

MXNet 1.6.0では、ApacheMXNetはNumPy互換のプログラミングエクスペリエンスに移行しています。新しいインターフェースは、NumPy構文に精通している実践者に同等の使いやすさと表現力を提供します。これに加えて、MXNet 1.6.0では、既存のNumpyシステムでGPUなどのハードウェアアクセラレータを利用して、大規模な計算を高速化することもできます。

ApacheTVMとの統合

CPU、GPU、特殊なアクセラレータなどのハードウェアバックエンド向けのオープンソースのエンドツーエンドディープラーニングコンパイラスタックであるApache TVMは、生産性重視のディープラーニングフレームワークとパフォーマンス指向のハードウェアバックエンドの間のギャップを埋めることを目的としています。 。最新リリースのMXNet1.6.0では、ユーザーはApache(インキュベーション)TVMを活用して、Pythonプログラミング言語で高性能のオペレーターカーネルを実装できます。この新機能の2つの主な利点は次のとおりです。

  • 以前のC ++ベースの開発プロセスを簡素化します。

  • CPU、GPUなどの複数のハードウェアバックエンド間で同じ実装を共有できるようにします。

既存の機能の改善

MXNet 1.6.0の上記の機能とは別に、既存の機能に比べていくつかの改善点もあります。改善点は次のとおりです-

GPUの要素ごとの操作のグループ化

要素ごとの操作のパフォーマンスはメモリ帯域幅であることがわかっているため、このような操作を連鎖させると、全体的なパフォーマンスが低下する可能性があります。Apache MXNet 1.6.0は、要素ごとの操作の融合を実行します。これにより、可能な場合は、ジャストインタイムの融合操作が実際に生成されます。このような要素ごとの操作の融合により、ストレージの必要性が減り、全体的なパフォーマンスが向上します。

一般的な表現の簡素化

MXNet 1.6.0は、冗長な式を排除し、一般的な式を簡素化します。このような機能強化により、メモリ使用量と合計実行時間も改善されます。

最適化

MXNet 1.6.0は、既存の機能と演算子に次のようなさまざまな最適化も提供します。

  • 自動混合精度

  • Gluon Fit API

  • MKL-DNN

  • 大規模テンソルサポート

  • TensorRT 統合

  • 高次勾配のサポート

  • Operators

  • オペレーターパフォーマンスプロファイラー

  • ONNXのインポート/エクスポート

  • GluonAPIの改善

  • シンボルAPIの改善

  • 100以上のバグ修正