Azure Machine Learning で Python スクリプトを実行してみる
この記事の内容
- Azure Machine Learning のチュートリアル第2回として、Python スクリプトをクラウドで実行する手順を紹介します
- ノートブック上でフォルダ・ファイルを作成し、シンプルな
hello.pyスクリプトを用意します - Azure ML SDK v2 を使ったコントロールスクリプトを作成し、コンピューティングクラスターにジョブを投げる方法を解説します
- SDK のインストールエラーへの対処法も実際のトラブルシューティング経験を交えて説明します
- ジョブの監視方法と、出力結果の確認方法についても触れます
前提条件
前回の動画(第1回)では、Azure Machine Learning のワークスペースとコンピューティングインスタンスを作成しました。今回はその環境を前提として進めます。
また、Azure Machine Learning Python SDK v2(プレビュー版)がインストールされている必要があります。コンピューティングインスタンスを作成している場合は、SDK が自動的にインストールされる想定です。ローカル環境で実行する場合は、pip install で別途インストールが必要になります。
フォルダとファイルの準備
まず、Azure Machine Learning Studio のノートブック画面を開きます。
作業用のフォルダを以下の構成で作成します。
ノートブックの画面から「新しいフォルダーの作成」を選択し、get-started フォルダを作成します。次に、その中に src フォルダを作成します。
hello.py の作成
src フォルダの中に新しいファイルを作成します。ファイル名は hello.py とし、ファイルの種類は「ノートブック」ではなく「Python スクリプト」を選択してください。
ファイルに以下のコードを記述します。
# hello world スクリプト
print("Hello World")
非常にシンプルなスクリプトです。まずはこれをコンピューティングインスタンス上でローカル実行して動作確認します。
ローカル実行の確認
スクリプトを保存した後、ターミナルから実行します。
python hello.py
実行結果として Hello World が出力されれば、スクリプト自体は正常に動いています。
コントロールスクリプトの作成
次に、先ほどの hello.py をコンピューティングクラスター上で実行するための「コントロールスクリプト」を作成します。
コントロールスクリプトを使うことで、機械学習コードをどのように・どこで実行するかを制御できます。
get-started フォルダの直下に run.py という名前で新しいファイルを作成し、以下のようなコードを記述します。
from azure.ai.ml import MLClient, command
from azure.ai.ml.entities import Environment
from azure.identity import DefaultAzureCredential
# ワークスペースへの接続
credential = DefaultAzureCredential()
ws = MLClient.from_config(credential=credential)
# コンピューティングクラスターの名前を定義
cpu_cluster_name = "cpu-cluster"
# ジョブの構成
job = command(
code="./src",
command="python hello.py",
environment="AzureML-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
compute=cpu_cluster_name,
display_name="hello-world",
)
# ジョブの送信
returned_job = ws.jobs.create_or_update(job)
# 結果を確認する URL
studio_url = returned_job.studio_url
print(studio_url)
コードの解説
このスクリプトでは主に以下の処理を行っています。
- モジュールのインポート: Azure AI ML の SDK や認証ライブラリをインポートします
- ワークスペースへの接続:
MLClient.from_config()で現在の Azure ML ワークスペースの設定を読み込み、接続します - 認証情報の取得:
DefaultAzureCredentialを使い、サブスクリプション ID やリソースグループ名などの情報を取得します - コンピューティングクラスターの指定: 実行先のクラスター名を定義します(例:
cpu-cluster) - ジョブの構成: 実行するスクリプト・コマンド・環境・コンピューターを指定してジョブを定義します
- ジョブの送信:
create_or_update()でジョブをクラウドに送信します - 監視 URL の取得: ジョブの状況を確認できる Studio の URL を取得して出力します
SDK インストールエラーへの対処
run.py を実行したところ、以下のようなエラーが発生することがあります。
これは Azure ML の SDK がインストールされていない場合に発生します。コンピューティングインスタンスに自動インストールされる想定でしたが、うまくいかないケースもあります。
このような場合は、ターミナルで以下のコマンドを実行して手動でインストールします。
pip install azure-ai-ml
インストール完了後、再度 run.py を実行します。
ジョブの実行と監視
コントロールスクリプトが正常に実行されると、Azure ML Studio 上にジョブが登録されます。スクリプトが出力した URL にアクセスするか、Studio の「ジョブ」画面から対象のジョブを確認できます。
初回実行に時間がかかる理由
初回の実行は 5〜10分程度かかります。Hello World を表示するだけの処理自体は一瞬ですが、クラウド側で以下の準備が必要なためです。
- コンピューティングクラスターのノード数が 0 から 1 に増加する
- Docker イメージ(Ubuntu ベースの ML 環境イメージ)がコンピューティングにダウンロードされる
- コンテナが起動してスクリプトが実行される
2回目以降は Docker イメージがキャッシュされるため、起動時間が短縮されます。
ジョブの状態確認
ジョブの画面では以下のような状態遷移を確認できます。
- 登録済み: ジョブが送信されてキューに入っている状態
- 実行中: クラスターが起動してスクリプトを実行中
- 完了: 処理が正常に終了した状態
出力結果の確認
ジョブが完了したら、「出力 + ログ」タブを開くと実行結果を確認できます。今回のスクリプトでは、以下の出力が表示されます。
まとめ
今回は Azure Machine Learning のチュートリアル第2回として、Python スクリプトをクラウドのコンピューティングクラスター上で実行する方法を紹介しました。
手順を振り返ると、まず hello.py という単純なスクリプトを作成し、コンピューティングインスタンス上でローカル実行して動作確認しました。次に Azure ML SDK v2 を使ったコントロールスクリプト run.py を作成し、ジョブとしてクラウドに投げることで、コンピューティングクラスター上でスクリプトを実行できました。
今回はあくまで「Hello World」という最小限の例でしたが、この仕組みを応用することで、重い機械学習の処理をスケーラブルなクラウドリソース上で実行できるようになります。コントロールスクリプトにより「何を・どこで・どのように実行するか」をコードで制御できる点が Azure Machine Learning の大きな特徴です。
次回は Azure Machine Learning のモデルのトレーニングに関するチュートリアルへと進んでいきます。