Amazon Web Services ブログ

AWS、Apache MXNet の ディープラーニングエンジンのマイルストーンである 1.0 のリリースに対し新しいモデル提供機能の追加を含む貢献

AWS は Apache MXNet ディープラーニングエンジンのマイルストーンとなる 1.0 のリリースへの貢献と、MXNet 向けの新しいモデル提供機能の導入を発表しました。これらの新機能により、(1) ディープラーニングモデルのトレーニングとデプロイが簡素化され、(2) 最先端のパフォーマンス強化の実装が可能になり、また (3) ディープラーニングフレームワーク間の相互運用性が簡単になります。

このブログ記事では、本日導入された主な機能それぞれの開始方法を説明します。

シンプルで使用が容易

Apache MXNet 向けモデルサーバー: モデルサーバーは、わずか数行のコードを使用するだけで、ディープラーニングモデルを数秒でパッケージ化、実行、提供します。これにより API エンドポイント経由でインターネットを使用してアクセスすることができます。その後、アプリケーションからこのエンドポイントを呼び出して予測を行うことができます。また、モデルサーバーには 10 個の事前トレーニング済みモデルを備えた model zoo が含まれています。モデルを自分でトレーニングする必要はなく、簡単にデプロイできます。モデルサーバーによって、ウェブ、モバイル、IoT アプリケーション内への AI 機能のデプロイが簡素化されます。

Apache MXNet 向けモデルサーバーの使用を開始するには、以下のコマンドを使用してライブラリをインストールします。

pip install mxnet-model-server

モデルサーバーのライブラリには、SqueezeNet v1.1 オブジェクト分類モデルが含まれています。次のコマンドを使用して SqueezeNet モデルの提供を開始できます。

mxnet-model-server --models squeezenet=https://s3.amazonaws.com/model-server/models/squeezenet_v1.1/squeezenet_v1.1.model 

モデルサーバーの詳細とソースコード、リファレンスサンプル、チュートリアルの表示方法については、こちらを参照してください。

アドバンスドインデックス作成: 1.0 リリースには、アドバンスドインデックス作成機能が含まれています。これにより、Python NumPy ライブラリ内の ndarray 配列オブジェクトクラスの既存の知識を活用して、より直感的な方法でテンソル演算を実行できます。この機能によりより効率的な方法でインデックスにアクセスできるため、開発者の時間と手間を節約できます。以下は、MXNet の新しいアドバンスドインデックス作成機能の例です。

  • 整数のリストをインデックスとしてサポート:
    x = nd.array([[1, 2], [3, 4], [5, 6]], dtype = ‘int32’)
    print(x[[0, 1, 0]])
    [[1, 2] [3, 4]  [1, 0]] # the row index is [0, 1, 0] and print the corresponding row of matrix 
  • 正方行列から対角要素を取得:
    • アドバンスドインデックス作成機能を使用しない場合は 3 行のコードを作成する必要があります:
      a = [[0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]]
      index = mx.nd.array([0, 1, 2, 3], dtype=’int32’)
      index = mx.nd.stack(index, index)
      diag = mx.nd.gather_nd(a, index) 
    • アドバンスドインデックス作成のサポートを使用すると、1 行のコードでジョブを実行できます:
      diag = a[[0, 1, 2, 3], [0, 1, 2, 3]] 

アドバンスドインデックス作成の詳細については、こちらをご覧ください。

高性能

1.0 リリースには、ディープラーニング分野におけるモデルトレーニングおよび推論の最適化に関する最新の研究成果に基づいた機能が実装されています。

グラデーション圧縮: 分散トレーニングでは、各マシンがモデルパラメータを更新し、それにより、単一モデルを集合的に構築するために、頻繁に他のマシンと通信する必要があります。そのためネットワークトラフィックが高くなり、しばしばトレーニング速度とパフォーマンスに悪影響を及ぼします。グラデーション圧縮により、各インスタンスで通信されるモデルの変更を圧縮することで、集束率または精度を失うことなく、最大 5 倍高速にモデルをトレーニングできます。グラデーション圧縮は、しきい値を下回るウェイトの更新の同期を遅延させる方法を使用します。VGGNet や AlexNet などのアーキテクチャは、通信と比較して低コンピューティングを使用しているため、トレーニング速度に目覚ましい改善を見せることができます。

次の例では、しきい値が 2 に設定されている場合に、2 ビットグラデーション圧縮がどのようにグラデーションを圧縮するかを示しています。緑の要素はしきい値に一致しているため、量子化された形式で 2 つのビット「11」と表されます。青色の要素の負の値はしきい値に一致しているため、別の 2 つのビット「10」で表されます。絶対値がしきい値未満の残りの値は、「00」で表されます。グラデーション圧縮では、通信されるグラデーションを、各グラデーション値に 2 ビットのみを使用して圧縮します。実際のグラデーションと展開されたグラデーションの差異は残余として保存され、次回のイテレーションで量子化の前に加算されます。

グラデーション圧縮はランタイム設定パラメータであり、次のように Gluon API を使用して有効にできます。グラデーション圧縮の詳細についてはこちらをご覧ください。

trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .1}, compression_params={'type’:'2bit', 'threshold':0.5})

NVIDIA Collective Communication Library (NCCL): NCCL は、NVIDIA GPU に対してパフォーマンスが最適化されたマルチ GPU およびマルチノードの集合的な通信プリミティブを実装しています。NCCL は、マルチ GPU 間の通信で高い帯域幅を達成するよう最適化された通信ルーチンを提供します。MXNet は、単一ノードマルチ GPU システムでの NCCL をサポートするため、トレーニング速度が約 20% 増加します。これには、ライブラリをインストールし、次のように kvstore のタイプのランタイム設定パラメータを渡す必要があります。

trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': .1}, kvstore = ‘nccl’)

NCCL の詳細についてはこちらをご覧ください。

相互運用が容易

MXNet に、Caffe フレームワークで記述されたニューラルネットワークコードを MXNet コードに変換するためのツールが含まれました。MXNet のスケーラビリティとパフォーマンスをより簡単に活用できます。Caffe トランスレータはトレーニング/検証 prototxt およびソルバー prototxt を入力として受け取り、MXNet Python コードを出力として生成します。変換された Python コードは、MXNet シンボルおよびモジュール API を使用したネットワークの構築、LMDB ファイルからのデータの読み取り、トレーニングの実行、および MXNet モジュール API を使用したトレーニング済みモデルの保存を行います。MXNet 向け Caffe トランスレータの使用を開始するには、実効可能な JAR ファイルを Apache maven からダウンロードします。

train_val.prototxt および solver.prototxt を MXNet Python コードに変換するには、次のコマンドを実行します。

java -jar caffe-translator-<version>.jar --training-prototxt <train_val.prototxt_path> \
    --solver <solver.prototxt_path> \ --output-file <output_file_path>

変換されたコードを実行するには、MXNet インターフェイス搭載の Caffe または Caffe プラグイン搭載の MXNet のいずれかを使用する必要があります。変換された Python コードは単純に、他の Python コードと同様に次のように実行できます。

python translated_code.py

Caffe Translator の詳細についてはこちらをご覧ください。

MXNet の開始方法

Apache MXNet の使用を開始するには、以下のコマンドを使用して pip のインストールを実行します。

pip install mxnet==1.0.0

Gluon インターフェイスとディープラーニングの詳細については、この包括的な一連のチュートリアルを参照できます。これらのチュートリアルでは、ディープラーニングの概要から最先端のニュートラルネットワークモデルを実装する方法まで紹介しています。


今回のブログの投稿者について

Sukwon Kim は AWS Deep Learning のシニアプロダクトマネージャーです。 特にオープンソースの Apache MXNet エンジンに注目し、ディープラーニングエンジンを使いやすくする製品を担当しています。余暇にはハイキングや旅行を楽しんでいます。