Azure Machine Learning Serviceを使用したTensorFlowモデルのトレーニング

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は、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ノートブックでこのサービスを学習する方法に関する記事の指示に従って、ノートブックを実行する方法を学習します







追加情報






All Articles