ローカルでモデルをデプロイする
Azure Machine Learning を使用して Azure Machine Learning コンピューティング インスタンス にモデルを Web サービスとしてデプロイする方法を説明します。 次のいずれかの条件に当てはまる場合はコンピューティング インスタンスを使用します。
- モデルを迅速にデプロイおよび検証する必要があります。
- 開発中のモデルをテストします。
ヒント
コンピューティング インスタンスの Jupyter Notebook から、同じ VM 上の Web サービスへのモデルのデプロイは、"ローカル デプロイ" です。 この場合、"ローカル" コンピューターはコンピューティング インスタンスです。
注意
Azure Machine Learning のエンドポイント (v2) では、デプロイが改善され、シンプルになります。 エンドポイントは、リアルタイム シナリオとバッチ推論の両方をサポートします。 エンドポイントは、複数のコンピューティングの種類にわたってモデル デプロイを起動および管理するための統一インターフェイスを提供します。 「Azure Machine Learning エンドポイントとは」を参照してください。
前提条件
- コンピューティング インスタンスが実行されている Azure Machine Learning のワークスペース。 詳細については、「作業を開始するために必要なリソースを作成する」を参照してください。
コンピューティング インスタンスへデプロイする
ローカル デプロイを示すノートブックの例がコンピューティング インスタンスに含まれています。 次の手順を使用してノートブックを読み込み、モデルを Web サービスとして VM にデプロイします。
Azure Machine Learning スタジオで、[ノートブック] を選択し、[サンプル ノートブック] の下にある [how-to-use-azureml/deployment/deploy-to-local/register-model-deploy-local.ipynb] を選択します。 このノートブックをユーザー フォルダーに複製します。
手順 1 で複製したノートブックを見つけて、このノートブックを実行するコンピューティング インスタンスを選択または作成します。
ノートブックには、サービスが実行されている URL とポートが表示されます。 たとえば、「
https://localhost:6789
」のように入力します。 また、print('Local service port: {}'.format(local_service.port))
を含むセルを実行して、ポートを表示することもできます。コンピューティング インスタンスからサービスをテストするには、URL
https://localhost:<local_service.port>
を使用します。 リモート クライアントからテストするには、コンピューティング インスタンスで実行されているサービスのパブリック URL を取得します。 パブリック URL は、次の形式を使用して決定できます。- ノートブック VM:
https://<vm_name>-<local_service_port>.<azure_region_of_workspace>.notebooks.azureml.net/score
- コンピューティング インスタンス:
https://<vm_name>-<local_service_port>.<azure_region_of_workspace>.instances.azureml.net/score
たとえば、次のように入力します。
- ノートブック VM:
https://vm-name-6789.northcentralus.notebooks.azureml.net/score
- コンピューティング インスタンス:
https://vm-name-6789.northcentralus.instances.azureml.net/score
- ノートブック VM:
サービスをテストする
実行中のサービスにサンプル データを送信するには、次のコードを使用します。 値 service_url
を、前の手順で取得した URL に置き換えます。
Note
コンピューティング インスタンスでのデプロイに対して認証を行う場合、認証は Microsoft Entra ID を使用して行われます。 コード例の interactive_auth.get_authentication_header()
を呼び出すと、Microsoft Entra ID を使用してあなたが認証され、コンピューティング インスタンスでのサービスに対する認証に使用できるヘッダーが返されます。 詳細については、「Azure Machine Learning のリソースとワークフローの認証を設定する」を参照してください。
Azure Kubernetes Service または Azure Container Instances でのデプロイに対して認証を行う場合は、別の認証方法が使用されます。 詳細については、「Web サービスとしてデプロイされた Azure Machine モデルの認証を構成する」を参照してください。
import requests
import json
from azureml.core.authentication import InteractiveLoginAuthentication
# Get a token to authenticate to the compute instance from remote
interactive_auth = InteractiveLoginAuthentication()
auth_header = interactive_auth.get_authentication_header()
# Create and submit a request using the auth header
headers = auth_header
# Add content type header
headers.update({'Content-Type':'application/json'})
# Sample data to send to the service
test_sample = json.dumps({'data': [
[1,2,3,4,5,6,7,8,9,10],
[10,9,8,7,6,5,4,3,2,1]
]})
test_sample = bytes(test_sample,encoding = 'utf8')
# Replace with the URL for your compute instance, as determined from the previous section
service_url = "https://vm-name-6789.northcentralus.notebooks.azureml.net/score"
# for a compute instance, the url would be https://vm-name-6789.northcentralus.instances.azureml.net/score
resp = requests.post(service_url, test_sample, headers=headers)
print("prediction:", resp.text)