Azure ML 上での開発
本ガイドでは、Azure ML 上でのコード開発をするためのポイントを紹介します。典型的なシナリオとしては、分散学習のコードのテストやローカルの開発環境での再現が難しいものを対象にします。
これらのシナリオの共通のペインポイントは、特に VM 上での開発と比較して、Azure ML での繰り返し作業が遅く感じられる点です。
本ガイドの目的. Azure ML 上での開発体験をベアメタルの VM と同等もしくはそれ以上に改善することこと。
#
🚧 ハードルAzure ML での開発が遅く感じられる主な理由は 2 つあります。
- Python 環境の変更には Docker イメージの再構築が必須となり、通常 5 分以上かかる。
- 計算リソースはイテレーションの間に 解放される ために、(Docker イメージの Pull などの) ウォームアップの待機時間が発生する。
下記にてこれらの問題に対応するためのいくつかのテクニックと、Azure ML Compute を直接利用するメリットを紹介します。またこれらのテクニックを応用した 例 もいくつか提供します。
#
🕰️ 開発用計算環境の準備コンピューティングインスタンス / コンピューティングクラスター を作成するときに、何点か設定事項がありますj。 :
SSH の有効化
SSH は、コンピューティングインスタンス と コンピューティングクラスター の両方でサポートされています。VM のように操作することが出来るようになります。
VS Code Remote Extension.
VS Code の remote extension は SSH 経由で Azure ML への計算リソースへの接続ができます。クラウド上で直接開発できるようになります。
"スケールダウンする前のアイドル時間 (秒)" の増加
コンピューティングクラスターはこのパラメータを例えば 30 分に増やすことができます。これは開発のイテレーションをしている間に計算環境がリリースされないようにするためです。
warning
開発のイテレーション終了後に元に戻すことを忘れないようにしてください。
#
🏃♀️ コマンド通常 コードは以下のような ScriptRunConfig
を利用して Azure ML へ送信されます :
info
コードを送信するのに利用する ScriptRunConfig
に関するより詳細な情報は クラウド上でコードを実行する を参照ください。
コマンド
の引数を用いることでアジリティを向上することができます。以下のように、コマンドを用いて複数のステップを連結されることができます :
他の例として下記のようなセットアップスクリプトを含めることもできます :
を作成し、コマンドで呼び出します。
この方法であれば、Azure ML は追加分について Docker Image をリビルドする必要がありません。
#
メリットVM 上での開発ができるだけでなく、Azure ML の計算環境を直接利用することによるメリットもあります。
- 本番にすぐに展開可能. Azure ML 上で直接開発することで、VM で開発したコードを Azure ML に移植する手間を削減できます。これは本番コードを Azure ML 上で稼働される場合に該当します。
- データアクセス. 学習スクリプトが Azure 上のデータを利用する際、Azure ML Python SDK を用いることができます (例としては データ を参照のこと)。それ以外の方法となるとユーザ自身で、開発している VM 上でデータが取得できる方法を探す必要があります。
- ノートブック. Azure ML の コンピューティングインスタンス は Jupyter notebook を提供しており、クイックにデバッグすることできます。加えて、ノートブックは異なる計算基盤に対して実行できますし、コラボレーションの機能も提供しています。
#
例ここでは、簡易的なデモンストレーションで上記の仕組みを説明します。次のような設定を考えます。:
Azure ML Python SDK を用いて、ローカル端末からクラウド上でコマンドを実行できます。
Python 環境の更新が必要な場合は、setup.sh
にコマンドを追加するだけです。:
Docker イメージを再構築する必要はありません。