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

TensorFlow使用したディープニューラルネットワーク(DNN)トレーニングのために、Azure Machine LearningはTensorFlowユーザークラスのEstimator評価ツールを提供します。 Azure SDKのTensorFlow評価TensorFlowtf.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_paramsentry_scriptトレーニングentry_scriptコマンドライン引数をペア<コマンドライン引数、値>として指定する辞書。
compute_targetトレーニングスクリプトが実行されるリモート計算ターゲット。 私たちの場合、これはAzure Machine Learning Computing Environment( AmlCompute )のクラスターです。
entry_scriptリモートコンピューティングリソースで実行されるトレーニングスクリプトのファイルへのパス( source_directory相対的)。 このファイルとそれが依存する追加フ​​ァイルは、このフォルダーに配置する必要があります。
conda_packagescondaを使用してトレーニングスクリプトをインストールするために必要なPythonパッケージのリスト。 この場合、トレーニングスクリプトはsklearnを使用してデータをダウンロードするため、このパッケージをインストール用に指定する必要があります。 コンストラクターのpip_packagesパラメーターは、必要なすべてのpipパッケージに使用できます。
use_gpuGPUをトレーニングに使用するには、このフラグを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_backendMPI評価ツールによって提供される、分散学習を実行するためのサーバー側。 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ノートブックでこのサービスを学習する方法に関する記事の指示に従って、ノートブックを実行する方法を学習します


追加情報




Source: https://habr.com/ru/post/J442120/


All Articles