TensorFlow
使用したディープニューラルネットワーク(DNN)トレーニングのために、Azure Machine LearningはTensorFlow
ユーザークラスのEstimator
評価ツールを提供します。 Azure SDKのTensorFlow
評価TensorFlow
( tf.estimator.Estimator
クラスと混同しないでください)を使用すると、Azureコンピューティングリソースの単一ノードおよび分散実行のTensorFlowトレーニングジョブを簡単に送信できます。

単一サイトのトレーニング
TensorFlow
Assessment TensorFlow
を使用した学習TensorFlow
Estimator
使用に似ているため、最初にハウツー記事を読んで概念を学習してください。
TensorFlowタスクを完了するには、 TensorFlow
オブジェクトを作成する必要があります。 ターゲットの計算リソースの compute_target
オブジェクトはすでに作成されているはずです 。
from azureml.train.dnn import TensorFlow script_params = { '--batch-size': 50, '--learning-rate': 0.01, } tf_est = TensorFlow(source_directory='./my-tf-proj', script_params=script_params, compute_target=compute_target, entry_script='train.py', conda_packages=['scikit-learn'], use_gpu=True)
TensorFlowコンストラクターで次のパラメーターを指定します。
パラメータ | 記述 |
---|---|
source_directory
| トレーニングを完了するために必要なすべてのコードを含むローカルディレクトリ。 このフォルダーは、ローカルコンピューターからリモートコンピューティングリソースにコピーされます。 |
script_params
| entry_script
トレーニング entry_script
コマンドライン引数をペア<コマンドライン引数、値>として指定する辞書。 |
compute_target
| トレーニングスクリプトが実行されるリモート計算ターゲット。 私たちの場合、これはAzure Machine Learning Computing Environment( AmlCompute )のクラスターです。 |
entry_script
| リモートコンピューティングリソースで実行されるトレーニングスクリプトのファイルへのパス( source_directory
相対的)。 このファイルとそれが依存する追加ファイルは、このフォルダーに配置する必要があります。 |
conda_packages
| condaを使用してトレーニングスクリプトをインストールするために必要なPythonパッケージのリスト。 この場合、トレーニングスクリプトはsklearn
を使用してデータをダウンロードするため、このパッケージをインストール用に指定する必要があります。 コンストラクターの pip_packages
パラメーターは、必要なすべてのpipパッケージに使用できます。 |
use_gpu
| GPUをトレーニングに使用するには、このフラグをTrue
に設定します。 デフォルトは False
です。 |
TensorFlow評価ツールを使用しているため、トレーニングに使用されるコンテナには、デフォルトでTensorFlowパッケージと、CPUおよびGPUでのトレーニングに必要な関連する依存関係が含まれます。
次に、TensorFlowジョブを送信します。
run = exp.submit(tf_est)
分散トレーニング
TensorFlow Evaluation Toolを使用すると、Azure仮想マシンのCPUおよびGPUクラスターでモデルをトレーニングすることもできます。 TensorFlow分散トレーニングは、これらのワークロードを完了するために必要なインフラストラクチャとオーケストレーション機能を管理するバックグラウンドのAzure Machine Learningサービスを使用して、いくつかのAPI呼び出しを通じて提供されます。
Azure Machine Learning Servicesは、TensorFlowの2つの分散学習方法をサポートしています。
- Horovodプラットフォームを使用したMPIベースの分散学習。
- パラメーターサーバーメソッドを使用したTensorFlowネイティブ分散トレーニング 。
ホロヴォード
Horovodは、Uberによって開発されたオープンソースの分散学習ベースのリング総和アルゴリズムです。
Horovodプラットフォームを使用してTensorFlow分散トレーニングを実行するには、次のようにTensorFlowオブジェクトを作成します。
from azureml.train.dnn import TensorFlow tf_est = TensorFlow(source_directory='./my-tf-proj', script_params={}, compute_target=compute_target, entry_script='train.py', node_count=2, process_count_per_node=1, distributed_backend='mpi', use_gpu=True)
上記のコードは、TensorFlowコンストラクターの次の新しいオプションを示しています。
パラメータ | 記述 | デフォルト値 |
---|---|---|
node_count
| トレーニングタスクに使用されるノードの数。 | 1
|
process_count_per_node
| 各ノードで実行されているプロセス(または作業ロール)の数。 | 1
|
distributed_backend
| MPI評価ツールによって提供される、分散学習を実行するためのサーバー側。 MPI(およびHorovod)を使用して並列または分散トレーニング(たとえば、 node_count
> 1または process_count_per_node
> 1、または両方)を実行するには、 distributed_backend='mpi'
設定します。AzureMachine LearningはMPI Open MPI実装を使用します。 | None
|
上記の例では、2つの作業ロール(各ノードに1つの作業ロール)を使用して分散トレーニングが実行されます。
Horovodとその依存関係は自動的にインストールされるため、次のように単純にtrain.py
トレーニングtrain.py
インポートできます。
import tensorflow as tf import horovod
最後に、TensorFlowジョブを送信します。
run = exp.submit(tf_est)
パラメータサーバー
パラメーターサーバーモデルを使用する独自のTensorFlow分散トレーニングを実行することもできます 。 この方法では、パラメーターサーバーと作業ロールのクラスターでトレーニングが行われます。 トレーニング中に、ワーカーロールが勾配を計算し、パラメーターサーバーが勾配の統計処理を実行します。
TensorFlowオブジェクトを作成します。
from azureml.train.dnn import TensorFlow tf_est = TensorFlow(source_directory='./my-tf-proj', script_params={}, compute_target=compute_target, entry_script='train.py', node_count=2, worker_count=2, parameter_server_count=1, distributed_backend='ps', use_gpu=True)
上記のコードのTensorFlowコンストラクターの次のパラメーターに注意してください。
パラメータ | 記述 | デフォルト値 |
---|---|---|
worker_count
| 仕事の役割の数。 | 1
|
parameter_server_count
| パラメータサーバーの数。 | 1
|
distributed_backend
| 分散トレーニングに使用されるサーバー部分パラメーターサーバーを使用して分散トレーニングを実行するには、値distributed_backend='ps'
設定します。 | None
|
TF_CONFIG
に関する注意
また、 tf.train.ClusterSpec
クラスターネットワークアドレスとポートがtf.train.ClusterSpec
になるため、Azure Machine LearningサービスはTF_CONFIG
環境TF_CONFIG
自動的に設定しTF_CONFIG
。
TF_CONFIG
環境TF_CONFIG
はJSON文字列です。 以下は、パラメーターサーバーの変数の例です。
TF_CONFIG='{ "cluster": { "ps": ["host0:2222", "host1:2222"], "worker": ["host2:2222", "host3:2222", "host4:2222"], }, "task": {"type": "ps", "index": 0}, "environment": "cloud" }'
tf.estimator
TensorFlow高レベルAPIを使用する場合、 tf.estimator
はこのTF_CONFIG
変数を解析し、クラスター仕様を形成します。
トレーニングに低レベルAPIを使用する場合、 TF_CONFIG
変数をTF_CONFIG
分析し、トレーニングコードにtf.train.ClusterSpec
を作成する必要があります。 この例では、これらのアクションは次のようにトレーニングスクリプトで実行されます。
import os, json import tensorflow as tf tf_config = os.environ.get('TF_CONFIG') if not tf_config or tf_config == "": raise ValueError("TF_CONFIG not found.") tf_config_json = json.loads(tf_config) cluster_spec = tf.train.ClusterSpec(cluster)
トレーニングスクリプトの作成とTensorFlowオブジェクトの作成が完了したら、トレーニングタスクを送信します。
run = exp.submit(tf_est)
例
分散型深層学習ノートブックについては、GitHubリポジトリのセクションをご覧ください
Jupyterノートブックでこのサービスを学習する方法に関する記事の指示に従って、ノートブックを実行する方法を学習します 。