BEACHSIDE BLOG

Azure と GitHub と C# が好きなエンジニアの個人メモ ( ・ㅂ・)و ̑̑

Azure Machine Learning の Workspace アクセス時に認証エラー

Azure Machine Learning ( ml.azure.com ) では、Workspace で NotebookVM を作りそのVM上で Jupyter Notebook を起動できます。


ちなみに Azure AI Advent Calendar 初日の投稿です!まだ空きがありますよ! qiita.com


一応説明しておくと、Azure Machine Learning ( ml.azure.com ) は、リニューアルされた Azure Machine Learning Studio であり、チームで ML の作業や履歴を共有できる場所です。モデルのトレーニングに使ったデータやその履歴、作ったモデルのバージョン管理、API としてデプロイするまでのライフサイクルを管理できます。
昔から似たようなやつがあった記憶がある方もいるかもしれませんが、完全に新しく、いい感じに生まれ変わりました♪

f:id:beachside:20191130093752p:plain

ここで作った NotebookVM 上で jupyter で以下のコードを書くだけで、データセットやモデル、デプロイ先のエンドポイントが管理されている Workspace にアクセスできます。

ws = Workspace.from_config()

これは、NotebookVM のJupyter が必要なパッケージをインストール済みで、Wokspace に必要な情報(サブスクリプションID、リソースグループ名、Workspace名)を自分で準備しなくても、NotebookVM のルートにある config.json ファイルの中に書いてあって読み込んでくれるからです。
(ローカル環境でも、自身で azureml のパッケージと config.json を用意すれば同じようにできます。)

エラー: テナントにログインできない

本題の今回私がエラーに直面したシチュエーションの話に進みます。

この Azure Machine Learning の Workspace は、チームで ML の情報を共有するため、その Azure ML が属しているテナントの Azure AD に ゲストユーザーを招待して利用することもあります。

その招待したゲストユーザーが、上記のコードで Workspace にアクセスしようとすると認証エラーが起きました。エラーメッセージはこんな感じ。(tenant id とかのシークレットは適当な数字に変えてます)


Message: You are currently logged-in to 12345-12345-4242-a4e9-e5c434ds3b78 tenant. You don't have access to 1bld5-138d-4kdo3n-8b9c-945ec46fh4yb subscription, please check if it is in this tenant. All the subscriptions that you have access to in this tenant are = [SubscriptionInfo(subscription_name='Sample subscription', subscription_id='4567ujhgf-041d-4dab-76tghj-r5678okmnhy')]. Please refer to aka.ms/aml-notebook-auth for different authentication mechanisms in azureml-sdk.


対処

ゲストユーザーの場合、認証にほんの少しコードを加える必要があるようです。Workspace にアクセスする際のコードにちょっと変えるだけ解決できます。

その際 tenant-id という値が必要になります。これは、Azure Portal > Azure Active Directory > プロパティ を開いて表示される ディレクトリ ID の値になりますので取得しておきましょう。

f:id:beachside:20191126104753p:plain

あとは、Workspace を取得する先ほどのシンプルなコードを、以下のように変えます。

from azureml.core import Workspace
from azureml.core.authentication import InteractiveLoginAuthentication

interactive_auth = InteractiveLoginAuthentication(tenant_id="my-tenant-id")

# サブスクリプションIDやリソースグループ名、ワークスペース名は、config.jsonを覗くとか Azure Portal で確認するとかでよしなにとって来てください
ws = Workspace(subscription_id="my-subscription-id",
               resource_group="my-ml-rg",
               workspace_name="my-ml-workspace",
               auth=interactive_auth)

このコードを実行すると、初回はいつものように https://microsoft.com/devicelogin へのアクセスとコードの入力が求められるので(実行したコードのすぐ下に出るメッセージの通りですね)、そこで認証すれば完了し、普通に Workspace にアクセスできるようになります。

f:id:beachside:20191126105546p:plain

これで幸せに Azure ML ライフ、MLOps ライフが送れます♪

参考

認証関連で困ったら、以下のリンクに一通りの認証方法が書いてます。

MachineLearningNotebooks/authentication-in-azureml.ipynb at master · Azure/MachineLearningNotebooks · GitHub