適用対象:Azure Machine Learning SDK v1 for Python
重要
この記事では、Azure Machine Learning SDK v1 の使用に関する情報を提供します。 SDK v1 は 2025 年 3 月 31 日の時点で非推奨となり、サポートは 2026 年 6 月 30 日に終了します。 SDK v1 は、その日付までインストールして使用できます。
2026 年 6 月 30 日より前に SDK v2 に移行することをお勧めします。 SDK v2 の詳細については、「 Azure Machine Learning Python SDK v2 と SDK v2 リファレンスとは」を参照してください。
この記事では、モデルをトレーニングするために Azure Machine Learning のジョブを構成して送信する方法について説明します。 コード スニペットでは、トレーニング スクリプトの構成と送信の主要な部分について説明します。 その後、ノートブックの例のいずれかを使用して、完全なエンドツーエンドの作業例を見つけます。
トレーニングでは、ローカル コンピューターから開始してから、後でクラウドベースのクラスターにスケールアウトするのが一般的です。 Azure Machine Learning では、トレーニング スクリプトを変更しなくても、さまざまなコンピューティング先でスクリプトを実行できます。
必要なのは、スクリプト ジョブ構成内で各コンピューティング先の環境を定義することだけです。 その後、異なるコンピューティング先でトレーニング実験を実行するときは、そのコンピューティングのジョブ構成を指定します。
前提条件
- Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning を試してください
- Azure Machine Learning SDK for Python (v1) (>= 1.13.0)
- Azure Machine Learning ワークスペース、
ws
- コンピューティング先、
my_compute_target
。 コンピューティング先を作成する
スクリプト実行構成とは
ScriptRunConfig は、トレーニング ジョブを実験の一部として送信するのに必要な情報を構成するために使用されます。
ScriptRunConfig オブジェクトを使用して、トレーニング実験を送信します。 このオブジェクトには以下のものが含まれます。
- source_directory: トレーニング スクリプトが格納されているソース ディレクトリ
- script: 実行するトレーニング スクリプト
- compute_target: 実行が行われるコンピューティング先
- environment: スクリプトを実行する場合に使用する環境
- その他の構成可能なオプション (詳細については 、リファレンス ドキュメント を参照してください)
モデルをトレーニングする
トレーニング ジョブを送信するためのコード パターンは、すべての種類のコンピューティング先について同じです。
- 実行する実験を作成する
- スクリプトが実行される環境を作成する
- コンピューティング先と環境を指定する ScriptRunConfig を作成する
- ジョブを送信する
- ジョブが完了するのを待つ
または、次のことができます。
- ハイパーパラメーターのチューニング用の HyperDrive 実行を送信します。
- VS Code 拡張機能を介して実験を送信します。
コンピューティング先を選択する
トレーニング スクリプトを実行するコンピューティング先を選択します。 ScriptRunConfig でコンピューティング先が指定されていない場合、または compute_target='local'
である場合は、Azure Machine Learning によってスクリプトがローカルで実行されます。
この記事のコード例では、「前提条件」セクションのコンピューティング先 my_compute_target
が既に作成されていることを前提としています。
注意
- Azure Databricks は、モデル トレーニングのコンピューティング ターゲットとしてサポートされていません。 データ準備およびデプロイのタスクには Azure Databricks を使用できます。
- Azure Arc 対応 Kubernetes クラスターにトレーニング用のコンピューティング先を作成してアタッチするには、「Azure Arc 対応機械学習を構成する」を参照してください
環境の作成
Azure Machine Learning 環境は、機械学習トレーニングが行われる環境をカプセル化したものです。 そこでは、トレーニングとスコアリングのスクリプトに関連する、Python パッケージ、Docker イメージ、環境変数、およびソフトウェア設定が指定されます。 また、実行時間 (Python、Spark、または Docker) も指定されます。
独自の環境を定義することも、Azure Machine Learning のキュレーションされた環境を使用することもできます。 キュレーションされた環境とは、ワークスペース内で既定で使用できる定義済みの環境です。 これらの環境は、ジョブの準備コストを下げるキャッシュされた Docker イメージでバックアップされます。 利用可能なキュレーション環境の完全な一覧については、「Azure Machine Learning のキュレーションされた環境」を参照してください。
リモート コンピューティング先の場合は、一般的なキュレーション環境のいずれかを使用して開始できます。
適用対象:Azure Machine Learning SDK v1 for Python
from azureml.core import Workspace, Environment
ws = Workspace.from_config()
myenv = Environment.get(workspace=ws, name="AzureML-Minimal")
環境の詳細については、「Azure Machine Learning でソフトウェア環境を作成して使用する」をご覧ください。
ローカル コンピューティング先
コンピューティング先がローカル コンピューターである場合は、スクリプトが実行される Python 環境で、必要なすべてのパッケージが使用できることをユーザー自身で確認する必要があります。 python.user_managed_dependencies
を使用すると、現在の Python 環境 (または指定したパス上の Python) を使用できます。
適用対象:Azure Machine Learning SDK v1 for Python
from azureml.core import Environment
myenv = Environment("user-managed-env")
myenv.python.user_managed_dependencies = True
# You can choose a specific Python environment by pointing to a Python path
# myenv.python.interpreter_path = '/home/johndoe/miniconda3/envs/myenv/bin/python'
実験の作成
ご自分のワークスペース内に実験を作成します。 実験は、ジョブの送信を整理したり、コードを追跡したりするのに役立つ軽量のコンテナーです。
適用対象:Azure Machine Learning SDK v1 for Python
from azureml.core import Experiment
experiment_name = 'my_experiment'
experiment = Experiment(workspace=ws, name=experiment_name)
スクリプトのジョブ構成を作成する
コンピューティング先 (my_compute_target
、「前提条件」を参照) と環境 (myenv
、「環境の作成」を参照) が用意できたので、project_folder
ディレクトリにあるトレーニング スクリプト (train.py
) を実行するスクリプト ジョブ構成を作成します。
適用対象:Azure Machine Learning SDK v1 for Python
from azureml.core import ScriptRunConfig
src = ScriptRunConfig(source_directory=project_folder,
script='train.py',
compute_target=my_compute_target,
environment=myenv)
環境を指定しない場合は、既定の環境が作成されます。
トレーニング スクリプトに渡したいコマンドライン引数を用意している場合は、ScriptRunConfig コンストラクターの arguments
パラメーター (arguments=['--arg1', arg1_val, '--arg2', arg2_val]
など) を使用してそれらを指定することができます。
ジョブに対する既定の最大許容時間をオーバーライドしたい場合は、max_run_duration_seconds
パラメーターを使用してそれを行うことができます。 この値よりも時間がかかる場合は、システムによって自動的にジョブのキャンセルが試みられます。
分散ジョブの構成を指定する
分散トレーニング ジョブを実行する場合は、分散ジョブ固有の構成を distributed_job_config
パラメーターに指定します。 サポートされている構成の種類には、MpiConfiguration、TensorflowConfiguration、および PyTorchConfiguration があります。
Horovod、TensorFlow、PyTorch の各分散ジョブの実行の詳細と例については、以下を参照してください。
実験を送信する
適用対象:Azure Machine Learning SDK v1 for Python
run = experiment.submit(config=src)
run.wait_for_completion(show_output=True)
重要
トレーニング ジョブを送信すると、トレーニング スクリプトを含むディレクトリのスナップショットが作成され、コンピューティング 先に送信されます。 また、実験の一部としてワークスペースに格納されます。 ファイルを変更してジョブをもう一度送信すると、変更されたファイルのみがアップロードされます。
不要なファイルがスナップショットに含まれないようにするには、無視ファイル (.gitignore
または .amlignore
) を作成します。 除外するファイルとディレクトリをこのファイルに追加します。 このファイル内で使用する構文の詳細については、.gitignore
の構文とパターンを参照してください。 .amlignore
ファイルでは同じ構文を使用します。 両方のファイルが存在する場合は、.amlignore
ファイルが使用され、.gitignore
ファイルは使用されません。
スナップショットの詳細については、「スナップショット」をご覧ください。
重要
特殊フォルダー outputs および logs の 2 つのフォルダーは、Azure Machine Learning によって特別に扱われます。 トレーニング中に、ルート ディレクトリ (それぞれと) に関連する./outputs
と./logs
という名前のフォルダーにファイルを書き込むと、ジョブが完了するとファイルがジョブ履歴に自動的にアップロードされ、それらにアクセスできるようになります。
トレーニング中に成果物 (モデル ファイル、チェックポイント、データ ファイル、プロットされたイメージなど) を作成するには、 ./outputs
フォルダーに書き込みます。
同様に、トレーニング ジョブのログを ./logs
フォルダーに書き込むこともできます。 Azure Machine Learning の TensorBoard 統合を利用するには、必ず TensorBoard ログをこのフォルダーに書き込みます。 ジョブの進行中は、TensorBoard を起動し、これらのログをストリーミングできます。 後で、前のジョブからログを復元することもできます。
たとえば、リモート トレーニング ジョブの後、outputs フォルダーに書き込まれたファイルをローカル コンピューターにダウンロードする場合は、run.download_file(name='outputs/my_output_file', output_file_path='my_destination_path')
を実行します。
Git の追跡と統合
ソース ディレクトリがローカル Git リポジトリであるトレーニング ジョブを開始すると、リポジトリに関する情報がジョブ履歴に格納されます。 詳細については、「Azure Machine Learning との Git 統合」を参照してください。
ノートブックの例
さまざまなトレーニング シナリオでのジョブの構成例については、次のノートブックを参照してください。
ノートブックの実行方法については、Jupyter Notebook を使用してこのサービスを探索する方法に関するページを参照してください。
トラブルシューティング
AttributeError: 'RoundTripLoader' オブジェクトに属性 'comment_handling' はありません: このエラーは、
ruamel-yaml
の新しいバージョン (v0.17.5) から発生します。これはazureml-core
の依存関係であり、azureml-core
に対する破壊的変更を導入するものです。 このエラーを修正するには、pip uninstall ruamel-yaml
を実行し、別のバージョンのruamel-yaml
をインストールすることで、ruamel-yaml
をアンインストールします。サポートされているバージョンは v0.15.35 から v0.17.4 (両方を含みます) です。 これを行うには、pip install "ruamel-yaml>=0.15.35,<0.17.5"
を実行します。ジョブが
jwt.exceptions.DecodeError
で失敗する: 正確なエラー メッセージ:jwt.exceptions.DecodeError: It is required that you pass in a value for the "algorithms" argument when calling decode()
。最新バージョンの azureml-core へのアップグレードを検討してください:
pip install -U azureml-core
。ローカル ジョブでこの問題が発生した場合は、お使いの環境にインストールされている PyJWT のバージョンを確認してください。 ジョブを開始する環境にインストールされている PyJWT のバージョンを確認してください。 サポートされている PyJWT のバージョンは、2.0.0 より前です。 バージョンが 2.0.0 以降の場合は、環境から PyJWT をアンインストールします。 PyJWT のバージョンを確認し、アンインストールして適切なバージョンをインストールするには、次のようにします。
- コマンド シェルを起動し、azureml-core がインストールされている Conda 環境をアクティブにします。
- 「
pip freeze
」と入力してPyJWT
を探します。見つかった場合は、表示されるバージョンは 2.0.0 未満になるはずです。 - 一覧のバージョンがサポートされているバージョンでない場合は、コマンド シェルで
pip uninstall PyJWT
し、「y」と入力して確認します。 pip install 'PyJWT<2.0.0'
を使用してインストールする
ジョブでユーザーが作成した環境を送信する場合は、その環境で最新バージョンの azureml-core を使用することを検討してください。 azureml-core バージョン 1.18.0 以降では、既に PyJWT < 2.0.0 が固定されています。 送信する環境で 1.18.0 より前のバージョンの azureml-core を使用する必要がある場合は、pip 依存関係に PyJWT < 2.0.0 を必ず指定してください。
ModuleErrors (モジュール名が指定されていない): Azure Machine Learning で実験を送信する際に ModuleErrors が発生した場合、トレーニング スクリプトではパッケージがインストールされていることを期待しているのに、それが追加されていません。 パッケージ名を指定すると、Azure Machine Learning により、トレーニング ジョブに使用される環境にパッケージがインストールされます。
Estimator を使用して実験を送信する場合は、パッケージをインストールするソースに基づいて、
pip_packages
またはconda_packages
パラメーターを使用して、エスティメーターでパッケージ名を指定できます。 また、conda_dependencies_file
を使用してすべての依存関係を含む yml ファイルを指定したり、pip_requirements_file
パラメーターを使用して txt ファイル内のすべての pip 要件を一覧表示したりすることも可能です。 Estimator で使用される既定のイメージをオーバーライドする独自の Azure Machine Learning 環境オブジェクトがある場合は、Estimator コンストラクターのenvironment
パラメーターを使用してその環境を指定できます。Azure Machine Learning によって保守される docker イメージとそのコンテンツは、Azure Machine Learning のコンテナー内で確認できます。 フレームワーク固有の依存関係は、それぞれのフレームワークのドキュメントに示されています。
注意
特定のパッケージが Azure Machine Learning によって保守されるイメージと環境に追加できるほど十分に一般的だと考えられる場合は、Azure Machine Learning のコンテナーに関するページで、GitHub のイシューを作成してください。
NameError (名前が定義されていない)、AttributeError (オブジェクトに属性がない): この例外は、トレーニング スクリプトに起因しているはずです。 Azure portal からログ ファイルを参照して、定義されていない特定の名前または属性エラーに関する詳細情報を取得できます。 SDK から、
run.get_details()
を使用して、エラー メッセージを確認できます。 これにより、ジョブに対して生成されたすべてのログ ファイルも一覧表示されます。 ジョブを再送信する前に、トレーニング スクリプトを確認し、エラーを修正してください。ジョブまたは実験の削除: 実験をアーカイブするには、Experiment.archive メソッドを使用するか、[実験のアーカイブ] ボタンを介して Azure Machine Learning スタジオ クライアントの [実験] タブ ビューから行います。 この操作により、実験はリスト クエリおよびビューに表示されなくなりますが、削除はされません。
個々の実験またはジョブを完全に削除することは現在サポートされていません。 ワークスペース アセットの削除の詳細については、「Machine Learning service のワークスペース データをエクスポートまたは削除する」を参照してください。
メトリック ドキュメントが大きすぎる: Azure Machine Learning には、トレーニング ジョブから一度にログに記録できるメトリック オブジェクトのサイズに関する内部制限があります。 リスト値メトリックのログ記録時に "Metric Document is too large (メトリック ドキュメントが大きすぎます)" エラーが発生した場合は、次の例のように、リストを小さいチャンクに分割してみてください。
run.log_list("my metric name", my_metric[:N]) run.log_list("my metric name", my_metric[N:])
内部的には、Azure Machine Learning は同じメトリック名を持つブロックを連続したリストへと連結します。
コンピューティング先の起動に時間がかかる: コンピューティング先の Docker イメージは、Azure Container Registry (ACR) から読み込まれます。 既定では、Azure Machine Learning により、basic サービス レベルを使用する ACR が作成されます。 ワークスペースの ACR を standard または premium レベルに変更すると、イメージの構築と読み込みにかかる時間が短縮される場合があります。 詳細については、「Azure Container Registry サービス階層」を参照してください。
次のステップ
- チュートリアル: モデルのトレーニングとデプロイに関する記事では、マネージド コンピューティング先を使用してモデルをトレーニングします。
- Scikit-learn、TensorFlow、PyTorch など、特定の ML フレームワークを使用してモデルをトレーニングする方法を参照してください。
- より優れたモデルを構築するために、ハイパーパラメーターを効率的に調整する方法を学習します。
- モデルのトレーニングが済んだら、モデルをデプロイする方法と場所を確認します。
- ScriptRunConfig クラス SDK リファレンスを表示します。
- Azure Machine Learning と Azure Virtual Network を使用する