Azure Machine Learning AutoMLでAI-900演習がsetup_wrapperエラーで失敗する原因と対処法

AI-900のMicrosoft Learn演習「Bike rentals」で、手順どおりにAutoMLジョブを実行したのに毎回失敗してしまう——そんな状況に陥ると「自分の操作が間違っているのでは?」と不安になります。本記事では、このときログに出てくる「setup_wrapper が見つからない」エラーの正体を分解し、なぜ受講者側では直せないのか、そして学習をスムーズに続けるための具体的な対処案を詳しく解説します。

目次

AI-900「Bike rentals」で発生するAutoMLエラーの概要

AI-900のMicrosoft Learn演習1「Bike rentals」では、Azure Machine Learning Studio の 自動 ML(AutoML) を使ってバイクのレンタル数を予測するモデルを作成します。

多くの受講者が、演習の手順どおりに設定しても、数分後にジョブが失敗し、標準ログに次のようなメッセージが出力される事象に遭遇しています。

Importing plotly failed. Interactive plots will not work.
WARNING  [_remote_script.py:17] Encountered exception when importing one or more remote wrappers.
v2 driver import failed with exception:
  cannot import name 'setup_wrapper' from 'azureml.train.automl._remote_script'
  (.../site-packages/azureml/train/automl/_remote_script.py)
Falling back to v1 driver.

Traceback (most recent call last):
  File "setup_xxx.py", line 11, in <module>
    from azureml.train.automl._remote_script import setup_wrapper
ImportError: cannot import name 'setup_wrapper' from 'azureml.train.automl._remote_script'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "setup_xxx.py", line 26, in <module>
    from azureml.train.automl import fit_pipeline
ImportError: cannot import name 'fit_pipeline' from 'azureml.train.automl'

このメッセージは、Microsoft Q&AでもAI-900受講中の受講者から報告されており、公式回答でも「受講者の操作ミスではなく、ラボ側の実行環境の問題」であることが明言されています。

どんな操作で再現するか

典型的な再現パターンは次のような流れです。

  1. Microsoft Learn の AI-900 学習パスを開き、該当演習を「サンドボックス」で起動する。
  2. 案内どおりに Azure Machine Learning Studio を開く。
  3. 「自動 ML」から新しいジョブを作成し、データセットを「Bike rentals」で選択。
  4. タスクを回帰に設定し、ターゲット列などを手順どおりに指定して実行。
  5. 数分待つとステータスが「失敗」に変わり、上記のような ImportError がログに記録される。

ここで重要なのは、手順通りに設定しても同じエラーが出る点です。モデル設定やデータの指定が多少変わっても、根本的なエラー内容は変わりません。

ログメッセージを一つずつ読み解く

エラーの意味を理解するには、ログに出てくるメッセージを分解して見るのが早道です。代表的なメッセージと意味をまとめると、次のようになります。

ログメッセージ意味ジョブ失敗への影響
Importing plotly failed. Interactive plots will not work.グラフ描画用ライブラリ plotly がインポートできていない。可視化に影響するだけで、学習自体の失敗原因ではない。
v2 driver import failed ... Falling back to v1 driverAutoMLのv2ドライバの読み込みに失敗し、旧v1ドライバに切り替えようとしている。まだ警告レベル。ただし後続の致命的エラーの前兆。
cannot import name 'setup_wrapper'azureml.train.automl._remote_script から setup_wrapper という関数を探したが、モジュール内に存在しない。致命的。ここでプロセスが止まりジョブが失敗する。
cannot import name 'fit_pipeline'フォールバック先として参照した fit_pipeline という関数も見つからない。上記エラーが連鎖し、最終的にステータスコード1で終了。

つまり、plotly に関する警告は「インタラクティブなグラフを出せない」というだけで、今回の本質的な問題ではありません。本丸は、AutoMLの内部で使われている v1 SDK 用の関数が、実行環境に存在しないことです。

「setup_wrapper」と「fit_pipeline」とは何者か

ログに登場する setup_wrapper や fit_pipeline は、Azure Machine Learning の旧SDK(v1)で AutoML を動かすための内部的なヘルパー関数です。

  • azureml.train.automl … SDK v1系のAutoMLモジュール
  • setup_wrapper … リモート環境でAutoML実験を立ち上げるための内部ラッパー関数
  • fit_pipeline … 構築されたパイプラインを実際にフィット(学習)させる内部API

しかし現在の Azure Machine Learning では、Python SDK v2(azure-ai-ml)を中心とした新しいAPIが主流で、AutoMLも azure.ai.ml.automl パッケージとして提供されています。

そのため、v2世代の実行環境に v1専用の内部関数を無理やり呼び出そうとすると、モジュール内に該当関数が存在せず ImportError が発生する、というわけです。

根本原因:サンドボックス環境のSDKバージョン不整合

では、なぜAI-900のMicrosoft Learnサンドボックスでだけ、このような「v1関数が見つからない」エラーが出てしまうのでしょうか。

ポイントを整理すると次の通りです。

  • ラボ用サンドボックスでは、Azureサブスクリプションやワークスペース、実行環境(DockerイメージやPythonパッケージ)はMicrosoft側が事前に構成したものが使われる。
  • 最近のアップデートにより、AutoMLのバックエンドが新しいランタイム(v2ドライバ)に切り替わる途中段階になっていた。
  • ところが、そのフォールバック処理の中で既に削除された v1専用の内部API(setup_wrapper / fit_pipeline)を参照してしまうコードが残っていた。
  • 実行環境側にはその関数が入っていないため、ImportError が発生し、ジョブ全体が失敗してしまう。

Microsoft Q&Aの回答でも、AI-900ラボで同じエラーが出ている受講者に対して、次のような趣旨の説明がなされています。

  • エラーはラボ環境が古いAutoMLコンポーネントを参照していることが原因であり、受講者の操作ミスではない。
  • Microsoft Learn のサンドボックスでは、受講者側ではSDKやイメージを変更できないため、その場で確実に直す方法はない。
  • 問題はラボを提供している側(Microsoft Learn / Azure ML チーム)が修正すべきものである。

また、別のスレッドでは、AutoMLの実行環境バージョンが AzureML-ai-ml-automl:22 のときは成功する一方で、:30 のような新しいビルドでは同様の ImportError によって失敗する、という報告もあります。つまり、バックエンドのイメージ更新によって、一時的に互換性問題が発生した可能性が高いと考えられます。

なぜ受講者の操作ミスではないのか

AI-900のラボでは、基本的に次のものはすべて Microsoft Learn 側で用意・管理されています。

  • Azure サブスクリプション(学習用の一時サブスクリプション)
  • Azure Machine Learning ワークスペース
  • AutoMLで使用するコンピュート(CPUクラスターなど)
  • 実行環境(Dockerイメージ / Conda 環境 / SDKバージョン)

受講者が自由に変更できるのは、せいぜい次の部分だけです。

  • どのデータセットを選ぶか
  • AutoMLのタスク種別(回帰 / 分類 など)
  • ターゲット列・評価指標・実行時間上限などの設定

しかし今回のエラーは、これらの設定にかかわらず同じImportErrorが発生することが特徴です。AutoMLの内部ドライバが azureml.train.automl の削除済み関数を参照してしまっているため、どれだけ設定を変えても状況は改善しません。

公式Q&Aでも「You have done nothing wrong.(あなたは何も間違っていません)」と明記されており、完全にプラットフォーム側の問題と認識されていることが分かります。

サンドボックス上で「自力で直す」ことが難しい理由

では、「じゃあ古いSDKをインストールし直せばいいのでは?」という発想が浮かびますが、サンドボックス環境では次の理由から現実的ではありません。

やりたいことなぜ難しいか
v1 SDK(azureml-train-automl系)をpipで追加するラボ環境のコンテナは事前ビルド済みであり、ユーザー側で永続的なパッケージ追加ができない。仮に追加しても、AutoMLの内部スクリプトとバージョンがずれ、別の非互換が発生する可能性が高い。
AutoMLジョブの実行イメージを指定して固定するサンドボックスのUIからは、AutoMLバックエンドの内部イメージを選択するオプションが公開されていない。
SDK v2専用のコードに書き換えて実行するAI-900はノーコードUIによる体験を目的としているため、ラボ指示をSDK v2コードに読み替えると、教材の趣旨から外れてしまう。

つまり、学習者に与えられている権限の範囲では、このエラーを根本的に解決できないのです。

必ず実施したいアクション:Microsoft Learn へのフィードバック送信

環境不整合に起因するこうした不具合は、コース提供側が気付いて修正するまで継続的に発生してしまいます。そのため、再現性のある形でMicrosoft Learn に不具合を報告することが非常に重要です。

フィードバック送信の手順

  1. 該当するAI-900演習のページ(「Bike rentals」)を開く。
  2. ページ最下部までスクロールし、「このページはお役に立ちましたか?」のセクションを探す。
  3. 「いいえ」を選択すると、詳細なフィードバック入力欄が開く。
  4. 以下のような情報を日本語でも英語でもよいので記載して送信する。
・コース名: AI-900: Microsoft Azure AI Fundamentals
・演習名: Exercise - Train a model with Azure Machine Learning (Bike rentals)
・問題: AutoML ジョブが ImportError で毎回失敗する

・エラーメッセージ(抜粋):
  ImportError: cannot import name 'setup_wrapper' from 'azureml.train.automl._remote_script'
  ImportError: cannot import name 'fit_pipeline' from 'azureml.train.automl'

・実行日時と使用したリージョン(わかれば)
・Workspace 名や Compute 名(個人情報が気になる場合は伏せても可)

公式回答でも、同様の事象が起きた際にはMicrosoft Learnのフィードバック機能から報告することが推奨されています。これにより、コース担当チームがラボ環境のイメージやSDKバージョンを更新し、後続の受講者が同じ問題に遭遇しないように対応できます。

今すぐ学習を進めたい人向け:自分のサブスクリプションで演習を再現する

「修正を待っている間も、AutoMLの流れだけでも体験しておきたい」という場合は、自分のAzureサブスクリプションで同等の実験を構築する方法があります。

大まかなステップは次の通りです。

  1. (必要なら)Azure 無料アカウントを作成する。
  2. 自分のサブスクリプション内にリソースグループを作成する。
  3. Azure Machine Learning ワークスペースを新規作成する。
  4. Azure Machine Learning Studio を開き、「自動 ML」を選択する。
  5. AI-900の演習と同様の形式のデータセット(Bike rentals相当)をアップロードする。
  6. タスクを「回帰」、ターゲット列をレンタル数の列に設定してジョブを実行する。

Microsoft公式ドキュメントでも、SDK v2とAzure Machine Learning Studioを使ったAutoMLジョブの構成手順が解説されており、同じ考え方で演習のシナリオを再現できます。

自分の環境で実験する際のポイント

項目推奨設定補足
コンピュートタイプCPU クラスター(例: STANDARD_DS11_v2)AI-900レベルならCPUで十分。AutoMLが自動でスケール。
タスク回帰Bike rentalsはレンタル数という連続値を予測するため回帰タスク。
ターゲット列rentals などレンタル数を表す列演習データと同じ列名でなくても良いが、意味が分かりやすい名前にする。
主な評価指標r2_score や normalized_root_mean_squared_error など精度と直感的な解釈のしやすさのバランスを見て選ぶ。
最大試行時間30〜60分程度無料枠やコストを意識しつつ、十分な試行回数を確保。

ノートブック派向け:SDK v2(azure-ai-ml)で同等のAutoMLジョブを試す

「どうせならコードベースでもAutoMLを触ってみたい」という方は、SDK v2(azure-ai-ml)を使って、UIと同等のAutoML回帰ジョブを送信してみるのもおすすめです。

ざっくりとしたイメージコードは次のようになります(AI-900の範囲をやや超えますが、雰囲気をつかむ用です)。

from azure.identity import DefaultAzureCredential
from azure.ai.ml import MLClient, Input
from azure.ai.ml import automl

# 認証とワークスペース接続
credential = DefaultAzureCredential()
ml_client = MLClient.from_config(credential)

# 事前に登録しておいた MLTable データセットを参照
train_data = Input(
    type="mltable",
    path="azureml:bikerentals-mltable:1"  # 例: 自分で登録したデータセット名
)

# AutoML 回帰ジョブの定義
regression_job = automl.regression(
    compute="cpu-cluster",
    experiment_name="bikerentals-automl-v2",
    training_data=train_data,
    target_column_name="rentals",
    primary_metric="r2_score",
    n_cross_validations=5,
)

# ジョブ送信
returned_job = ml_client.jobs.create_or_update(regression_job)
print("Job URL:", returned_job.studio_url)

SDK v2では、AutoMLジョブをPythonコードから柔軟に定義できる一方で、内部で利用されるのは azure-ai-ml.automl であり、問題の azureml.train.automl とは別物です。そのため、今回のような setup_wrapper や fit_pipeline に関するエラーは発生しません。

類似のAutoMLエラーが出たときの切り分けポイント

今回のAI-900ラボに限らず、将来自分のプロジェクトでAutoMLを使うときにも、似たようなエラーに遭遇する可能性があります。その際に役立つ一般的なチェックポイントをまとめておきます。

1. ログに v1 SDK のパスが出ていないか

  • azureml.train.automl というパスが登場している場合は、v1 SDK由来のコードや環境が混入しているサインです。
  • 新規に構築した環境では、基本的に azure-ai-ml(v2)を利用することが推奨されます。

2. 実行環境(イメージ)のバージョンを確認する

Azure Machine Learning Studio のジョブ詳細画面では、「環境」や「イメージ」の欄に AzureML-ai-ml-automl:22 のようなバージョン番号が表示されます。

  • あるバージョン(例: :30)でのみ失敗し、別バージョン(例: :22)では成功する場合、特定ビルドのイメージに問題がある可能性が高いです。
  • その場合は、ジョブログを添えてサポートやQ&Aに報告すると、イメージのパッチやロールバックが行われることがあります。

3. データ起因のエラーとの見分け方

AutoMLでは、データの前処理や型変換の段階でエラーが起きることもよくあります。しかし今回のように「setup_wrapper が見つからない」「fit_pipeline が見つからない」といったモジュールのImportErrorは、明らかに環境・SDK側の問題です。

  • データ起因のエラーでは、ValueError や TypeError、日付型変換のエラーなど、データ内容に紐づいたメッセージが出る傾向があります。
  • 一方で、環境起因のエラーは、今回のように ImportError や ModuleNotFoundError といった形で現れます。

AI-900受講者としての「ベストプラクティス」

AI-900は入門レベルの資格であり、本来は「AutoMLを使うとこういう流れでモデルができる」という体験ができれば十分です。その観点から、今回のような環境不具合に遭遇したときにおすすめしたい対応方針をまとめます。

状況おすすめの対応
サンドボックスのAutoMLジョブが毎回同じImportErrorで失敗するまずは演習ページからフィードバックを送信しておく。 その演習の「手順を読んで理解する」部分だけでも先に進めておく。
自分のペースで深く学びたい自分のAzureサブスクリプションにワークスペースを作成し、同等のAutoML実験を構築する。 余裕があれば、SDK v2(azure-ai-ml)でのAutoMLジョブ作成も試してみる。
本番向けのAutoML運用を検討している最初からSDK v2ベースで構築し、実行環境(Dockerイメージ・パッケージ)をバージョン管理する。 重要なワークロードでは、AutoML実行前にテスト用の小さなジョブで環境を検証する。

まとめ:今回のエラーをどう捉え、どう動くべきか

最後に、本記事で扱ったポイントをコンパクトに整理します。

  • 「setup_wrapper が見つからない」「fit_pipeline が見つからない」エラーは、受講者の操作ミスではなく、サンドボックス環境のSDK不整合が原因です。
  • AutoMLが内部で旧SDK v1 の azureml.train.automl モジュールを参照しようとする一方で、現行の実行環境にはその内部APIが存在しないため ImportError が発生しています。
  • Microsoft Learn のサンドボックスでは、実行環境やSDKバージョンを受講者側から変更できないため、その場で確実に直す自己解決策はありません。
  • できることは、
    • 演習ページ下部のフィードバック機能から不具合を報告すること
    • 修正・更新後に同じ演習を再試行すること
    • 急ぎたい場合は、自分のAzureサブスクリプションやSDK v2を使って、演習相当の実験を再現すること
  • AutoML利用時には、ログに登場するモジュールパスや環境バージョン(AzureML-ai-ml-automl:xx など)を確認することで、「データ起因のエラー」と「環境起因のエラー」を切り分けられるようになります。

エラーそのものはやっかいに見えますが、「プラットフォーム側の更新と互換性の問題で、受講者は悪くない」と分かっていれば、精神的なダメージはかなり軽くなります。落ち着いてログを読み、しかるべき窓口にフィードバックを送りつつ、自分でできる範囲(自前のワークスペース構築やSDK v2の体験)で学習を続けていきましょう。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次