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-sstracr/theedl/lo.py

ノートブックの画面から「新しいフォルダーの作成」を選択し、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)

コードの解説

このスクリプトでは主に以下の処理を行っています。

  1. モジュールのインポート: Azure AI ML の SDK や認証ライブラリをインポートします
  2. ワークスペースへの接続: MLClient.from_config() で現在の Azure ML ワークスペースの設定を読み込み、接続します
  3. 認証情報の取得: DefaultAzureCredential を使い、サブスクリプション ID やリソースグループ名などの情報を取得します
  4. コンピューティングクラスターの指定: 実行先のクラスター名を定義します(例: cpu-cluster
  5. ジョブの構成: 実行するスクリプト・コマンド・環境・コンピューターを指定してジョブを定義します
  6. ジョブの送信: create_or_update() でジョブをクラウドに送信します
  7. 監視 URL の取得: ジョブの状況を確認できる Studio の URL を取得して出力します

SDK インストールエラーへの対処

run.py を実行したところ、以下のようなエラーが発生することがあります。

Nomodulenamed'azure.ai'

これは Azure ML の SDK がインストールされていない場合に発生します。コンピューティングインスタンスに自動インストールされる想定でしたが、うまくいかないケースもあります。

このような場合は、ターミナルで以下のコマンドを実行して手動でインストールします。

pip install azure-ai-ml

インストール完了後、再度 run.py を実行します。


ジョブの実行と監視

コントロールスクリプトが正常に実行されると、Azure ML Studio 上にジョブが登録されます。スクリプトが出力した URL にアクセスするか、Studio の「ジョブ」画面から対象のジョブを確認できます。

初回実行に時間がかかる理由

初回の実行は 5〜10分程度かかります。Hello World を表示するだけの処理自体は一瞬ですが、クラウド側で以下の準備が必要なためです。

  1. コンピューティングクラスターのノード数が 0 から 1 に増加する
  2. Docker イメージ(Ubuntu ベースの ML 環境イメージ)がコンピューティングにダウンロードされる
  3. コンテナが起動してスクリプトが実行される

2回目以降は Docker イメージがキャッシュされるため、起動時間が短縮されます。

ジョブの状態確認

ジョブの画面では以下のような状態遷移を確認できます。

  • 登録済み: ジョブが送信されてキューに入っている状態
  • 実行中: クラスターが起動してスクリプトを実行中
  • 完了: 処理が正常に終了した状態

出力結果の確認

ジョブが完了したら、「出力 + ログ」タブを開くと実行結果を確認できます。今回のスクリプトでは、以下の出力が表示されます。

HelloWorld

まとめ

今回は Azure Machine Learning のチュートリアル第2回として、Python スクリプトをクラウドのコンピューティングクラスター上で実行する方法を紹介しました。

手順を振り返ると、まず hello.py という単純なスクリプトを作成し、コンピューティングインスタンス上でローカル実行して動作確認しました。次に Azure ML SDK v2 を使ったコントロールスクリプト run.py を作成し、ジョブとしてクラウドに投げることで、コンピューティングクラスター上でスクリプトを実行できました。

今回はあくまで「Hello World」という最小限の例でしたが、この仕組みを応用することで、重い機械学習の処理をスケーラブルなクラウドリソース上で実行できるようになります。コントロールスクリプトにより「何を・どこで・どのように実行するか」をコードで制御できる点が Azure Machine Learning の大きな特徴です。

次回は Azure Machine Learning のモデルのトレーニングに関するチュートリアルへと進んでいきます。