チュートリアル: Azure Machine Learning で Python スクリプトを使ってみる (SDK v1、パート 1/3)

適用対象:Python SDK azureml v1

このチュートリアルでは、Azure Machine Learning を使用して、初めての Python スクリプトをクラウドで実行します。 このチュートリアルは、2 部構成のチュートリアル シリーズのパート 1 です

このチュートリアルでは、機械学習モデルのトレーニングの複雑さを回避しています。 クラウドで、"Hello World" Python スクリプトを実行します。 Azure Machine Learning で実行を構成して作成するために、コントロール スクリプトを使用する方法について説明します。

このチュートリアルでは、次のことについて説明します。

  • "Hello world!" Python スクリプトを作成して実行する。
  • Azure Machine Learning に "Hello world!" を送信する Python コントロール スクリプトを作成する。
  • コントロール スクリプトでの Azure Machine Learning の概念を理解する。
  • "Hello World!" スクリプトを送信して実行する。
  • クラウドでのコード出力を表示する。

前提条件

Python スクリプトを作成して実行する

このチュートリアルでは、コンピューティング インスタンスを開発用コンピューターとして使用します。 まず、いくつかのフォルダーとスクリプトを作成します。

  1. Azure Machine Learning スタジオにサインインし、確認を求められたら、ご使用のワークスペースを選択します。
  2. 左側にある [ノートブック] を選択します
  3. [ファイル] ツール バーの []+ を選択し、 [新しいフォルダーの作成] を選択します。 ツール バーの [新しいフォルダーの作成] ツールを示すスクリーンショット。
  4. このフォルダーに get-started という名前を付けます。
  5. フォルダー名の右側にある [...] を使用して、get-started に別のフォルダーを作成します。 サブフォルダーの作成メニューを示すスクリーンショット。
  6. 新しいフォルダーに src という名前を付けます。 ファイルの場所が正しくない場合は、[場所の編集] リンクを使用します。
  7. src フォルダーの右側にある [...] を使用して、src フォルダーに新しいファイルを作成します。
  8. そのファイルに hello.py という名前を付けます。 [ファイルの種類]Python ( .py)* に切り替えます。

このコードをファイルにコピーします。

# src/hello.py
print("Hello world!")

プロジェクトのフォルダー構造は次のようになります。

src サブフォルダー内の hello.py を示すフォルダー構造。

スクリプトをテストする

コードはローカル (このケースではコンピューティング インスタンス) で実行することができます。 コードのローカル実行には、コードの対話型デバッグができるというメリットがあります。

既にコンピューティング インスタンスを停止してある場合は、[コンピューティング] ドロップダウンの右側にある [コンピューティングの開始] ツールを使用して起動してください。 "実行中" の状態に変わるまで 1 分ほど待ちます。

停止しているコンピューティング インスタンスを起動する画面のスクリーンショット

[Save and run script in terminal](スクリプトを保存してターミナルで実行する) を選択してスクリプトを実行します。

ツール バーの [Save and run script in terminal]\(スクリプトを保存してターミナルで実行する\) ツールを示すスクリーンショット

表示されたターミナル ウィンドウにスクリプトの出力が表示されます。 タブを閉じ、 [終了] を選択してセッションを終了します。

コントロール スクリプトを作成する

"コントロール スクリプト" を使用すると、hello.py スクリプトを別のコンピューティング リソースで実行することができます。 コントロール スクリプトを使用すると、機械学習コードを実行する方法と場所を制御できます。

[get-started] フォルダーの末尾にある [...] を選択して新しいファイルを作成します。 run-hello.py という Python ファイルを作成し、次のコードをコピーしてそのファイルに貼り付けます。

# get-started/run-hello.py
from azureml.core import Workspace, Experiment, Environment, ScriptRunConfig

ws = Workspace.from_config()
experiment = Experiment(workspace=ws, name='day1-experiment-hello')

config = ScriptRunConfig(source_directory='./src', script='hello.py', compute_target='cpu-cluster')

run = experiment.submit(config)
aml_url = run.get_portal_url()
print(aml_url)

ヒント

コンピューティング クラスターの作成時に別の名前を使用した場合は、compute_target='cpu-cluster' コード内の名前も調整してください。

コードの理解

ここでは、コントロール スクリプトのしくみについて説明します。

ws = Workspace.from_config()

Workspace は Azure Machine Learning ワークスペースに接続して、Azure Machine Learning リソースと通信できるようにします。

experiment = Experiment( ... )

Experiment は、複数のジョブを 1 つの名前で整理する簡単な方法を提供します。 後で実験を使用して、多数のジョブの間でメトリックを簡単に比較する方法を確認できます。

config = ScriptRunConfig( ... )

ScriptRunConfig は、hello.py コードをラップしてワークスペースに渡します。 名前に示されているように、このクラスを使用して、Azure Machine Learning でスクリプト実行する方法を構成できます。 スクリプトを実行するコンピューティング ターゲットも指定します。 このコードでは、ターゲットはセットアップ チュートリアルで作成したコンピューティング クラスターです。

run = experiment.submit(config)

スクリプトを送信します。 この送信は実行と呼ばれます。 v2 では、ジョブに名前が変更されました。 実行/ジョブには、コードの 1 回の実行がカプセル化されています。 ジョブを使用して、スクリプトの進行状況を監視したり、出力をキャプチャしたり、結果を分析したり、メトリックを視覚化したりすることができます。

aml_url = run.get_portal_url()

run オブジェクトは、コードの実行に対するハンドルを提供します。 Python スクリプトから出力された URL を使用して、進行状況を Azure Machine Learning スタジオから監視します。

クラウドでコードを送信して実行する

  1. [Save and run script in terminal](スクリプトを保存してターミナルで実行する) を選択してコントロール スクリプトを実行すると、セットアップ チュートリアルで作成したコンピューティング クラスターで hello.py が実行されます。

  2. ターミナルで、認証のためにサインインを求められる場合があります。 コードをコピーし、リンクをクリックしてこの手順を完了してください。

  3. 認証されると、ターミナルにリンクが表示されます。 リンクを選択してジョブを表示します。

スタジオを使用してクラウドでコードを監視する

スクリプトからの出力には、https://ml.azure.com/experiments/hello-world/runs/<run-id>?wsid=/subscriptions/<subscription-id>/resourcegroups/<resource-group>/workspaces/<workspace-name> のようなスタジオへのリンクが含まれています。

リンク先に移動します。 最初は、状態が [キューに挿入済み] または [準備中] と表示されます。 最初の実行が完了するまでに 5 から 10 分かかります。 これは、以下のことが行われるためです。

  • クラウドで Docker イメージが構築されます
  • コンピューティング クラスターのサイズが 0 ノードから 1 ノードに変更されます
  • Docker イメージがコンピューティングにダウンロードされます。

Docker イメージがコンピューティングにキャッシュされるため、それ以降のジョブにかかる時間は短縮されます (最大 15 秒)。 これをテストするには、最初のジョブが完了した後に、以下のコードを再送信します。

10 分ほどお待ちください。 ジョブが完了したことを示すメッセージが表示されます。 その後、 [Refresh](最新の情報に更新) を使用すると、状態が "Completed (完了) " に変わることがわかります。 ジョブが完了したら、[出力 + ログ] タブに移動します。user_logs フォルダーに std_log.txt ファイルがあることを確認できます。 スクリプトの出力はこのファイルにあります。

azureml-logs および system-logs フォルダーには、クラウドでのリモート ジョブをデバッグするときに役立つファイルが含まれます。

次のステップ

このチュートリアルでは、単純な "Hello world!" スクリプトを作成し、Azure で実行しました。 Azure Machine Learning ワークスペースに接続し、実験を作成して、hello.py コードをクラウドに送信する方法について説明しました。

次のチュートリアルでは、print("Hello world!") よりも興味深いものを実行して、これまでの学習をさらに発展させます。

注意

チュートリアル シリーズをここで終了し、次の手順に進まない場合は、必ずリソースをクリーンアップしてください。