メインコンテンツまでスキップ

チートシート

基本セットアップ#

ワークスペースへの接続#

from azureml.core import Workspace
ws = Workspace.from_config()

この Workspace オブジェクトは Azure ML 操作における基本的なオブジェクトで、一連のコードを通して共有されます。(wsという変数名で参照されることが多いです。)

ワークスペースの詳細: ワークスペース

コンピューティングターゲットへの接続#

compute_target = ws.compute_targets['<compute-target-name>']

使用例

compute_target = ws.compute_targets['powerful-gpu']
config = ScriptRunConfig(
compute_target=compute_target, # train.py スクリプトを実行するために使用されるコンピューティングターゲット
source_directory='.',
script='train.py',
)

コンピューティングターゲットの詳細: コンピューティングターゲット

Python 環境の準備#

pip のrequirements.txtファイルや Conda のenv.ymlファイルを使い、コンピューティング環境の Python 環境を Environment オブジェクトとして定義することができます。

from azureml.core import Environment
# 選択肢 1: pip
environment = Environment.from_pip_requirements('<env-name>', '<path/to/requirements.txt>')
# 選択肢 2: Conda
environment = Environment.from_conda_specification('<env-name>', '<path/to/env.yml>')

docker イメージを使って環境を準備することもできます。

使用例

environment = Environment.from_pip_requirements('<env-name>', '<path/to/requirements.txt>')
config = ScriptRunConfig(
environment=environment, # Python 環境を設定する
source_directory='.',
script='train.py',
)

環境の詳細: 環境

コードをサブミットする#

Azure ML 上でコードを実行するためには:

  1. エントリーポイントとなるコードのパス、コードを実行するコンピューティングターゲット、そしてコードを実行する Python 環境の設定情報を作成します。
  2. Azure ML の実験を新規作成または再利用してサブミットします。

ScriptRunConfig#

典型的なディレクトリ構成例:

source_directory/
script.py # エントリーポイントとなるコード
module1.py # script.py により呼ばれるモジュール
...

リモートコンピューティングクラスターtarget: ComputeTarget上の、Python 環境env: Environmentで、$ (env) python <path/to/code>/script.py [arguments]を実行するには、 ScriptRunConfigクラスを使用します。

from azureml.core import ScriptRunConfig
config = ScriptRunConfig(
source_directory='<path/to/code>', # 相対パスでも OK
script='script.py',
compute_target=compute_target,
environment=environment,
arguments=arguments,
)

ScriptRunConfig の引数の詳細: コマンドライン引数

info
  • compute_target: もし引数が与えられなかった場合は、スクリプトはローカルマシン上で実行されます。
  • environment: もし引数が与えられなかった場合、Azure ML のデフォルトPython 環境が使用されます。環境の詳細: Environment

コマンド#

もしも明示的なコマンドを与える場合。

command = 'echo cool && python script.py'.split()
config = ScriptRunConfig(
source_directory='<path/to/code>', # 相対パスも OK
command=command,
compute_target=compute_target,
environment=environment,
arguments=arguments,
)

コマンドの詳細: コマンド

実験#

コードをサブミットするには実験を作成します。実験は、サブミットされた一連のコードをグルーピングしてコードの実行履歴を追跡する軽量のコンテナです。 (参照: Run History).

exp = Experiment(ws, '<experiment-name>')
run = exp.submit(config)
print(run.get_portal_url())

上記コードで返される Azure ML Studio へのリンクにより、実験の実行をモニタリングすることができます。

詳細: クラウド上でコードを実行する

使用例#

以下はコマンドラインから Conda 環境を使ってトレーニングスクリプトtrain.pyをローカルマシン上で実行する典型的な例です。

$ conda env create -f env.yml # pythorch という名前の conda env を作成
$ conda activate pytorch
(pytorch) $ cd <path/to/code>
(pytorch) $ python train.py --learning_rate 0.001 --momentum 0.9

このスクリプトを Azure 上の GPU を使って実行したいと仮定します。

ws = Workspace.from_config()
compute_target = ws.compute_targets['powerful-gpu']
environment = Environment.from_conda_specification('pytorch', 'env.yml')
config = ScriptRunConfig(
source_directory='<path/to/code>',
script='train.py',
environment=environment,
arguments=['--learning_rate', 0.001, '--momentum', 0.9],
)
run = Experiment(ws, 'PyTorch model training').submit(config)

分散 GPU 学習#

分散 GPU 学習を有効にするためにScriptRunConfigを変更します。

from azureml.core import Workspace, Experiment, ScriptRunConfig
from azureml.core import Environment
from azureml.core.runconfig import MpiConfiguration
ws = Workspace.from_config()
compute_target = ws.compute_targets['powerful-gpu']
environment = Environment.from_conda_specification('pytorch', 'env.yml')
environment.docker.enabled = True
environment.docker.base_image = 'mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04'
# それぞれ 4 つの GPU を搭載した 2 つのノード上でトレーニングを行う
mpiconfig = MpiConfiguration(process_count_per_node=4, node_count=2)
config = ScriptRunConfig(
source_directory='<path/to/code>', # train.py が含まれるディレクトリ
script='train.py',
environment=environment,
arguments=['--learning_rate', 0.001, '--momentum', 0.9],
distributed_job_config=mpiconfig, # 分散学習のための設定を追加
)
run = Experiment(ws, 'PyTorch model training').submit(config)
info
  • mcr.microsoft.com/azureml/openmpi3.1.2-cuda10.1-cudnn7-ubuntu18.04は OpenMPI の docker イメージです。このイメージは Azure ML 上で分散学習を実行する際に必要となります。
  • MpiConfigurationはトレーニングを行うノード数とノードあたりの GPU 数を指定するために使います。

詳細: 分散 GPU トレーニング

データへの接続#

ワークスペースwsのデフォルトデータストアにあるデータをトレーニングスクリプトから扱うためには:

datastore = ws.get_default_datastore()
dataset = Dataset.File.from_files(path=(datastore, '<path/on/datastore>'))

詳細: データ

コマンドライン引数に以下を渡すことで上記のdatasetを使用できます。

arguments=['--data', dataset.as_mount()]