オンライン エンドポイントで使用するためにデプロイするモデルを指定する
適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)
この記事では、オンライン デプロイで使うモデルを指定する異なる方法について説明します。 Azure Machine Learning オンライン エンドポイントにモデルをデプロイするときは、2 つの方法のいずれかでモデルを指定する必要があります。
- ローカル コンピューター上のモデルの場所へのパスを指定する
- ワークスペースに既に登録されているバージョン管理されたモデルへの参照を指定する。
オンライン エンドポイントのデプロイ用のモデルを指定する方法は、モデルが格納されている場所によって異なります。
Azure Machine Learning では、デプロイを作成した後で、環境変数 AZUREML_MODEL_DIR
は、モデルが格納されている Azure 内の保存場所を指すようになります。
ローカル環境に格納されているモデルのデプロイ
このセクションでは、次のローカル フォルダー構造の例を使って、オンライン デプロイで使用するモデルの指定方法を示します。
1 つのローカル モデルのデプロイ
ローカル コンピューターにある単一のモデルをデプロイで使うには、デプロイ YAML 構成ファイルで model
への path
を指定します。 次のコードは、ローカル パス /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl
を含むデプロイ YAML の例です。
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
Azure Machine Learning では、オンライン エンドポイントへのデプロイを作成した後、環境変数 AZUREML_MODEL_DIR
は、モデルが格納されている Azure 内の保存場所を指すようになります。 たとえば、/var/azureml-app/azureml-models/aaa-aaa-aaa-aaa-aaa/1
にはモデル sample_m1.pkl
が含まれるようになります。
スコアリング スクリプト (score.py
) 内では、スクリプトの init()
関数でモデル (この例では sample_m1.pkl
) を読み込むことができます。
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl")
model = joblib.load(model_path)
複数のローカル モデルのデプロイ
Azure CLI、Python SDK、その他のクライアント ツールでは、配置定義で 1 回のデプロイあたり 1 つのモデルのみを指定できますが、すべてのモデルをファイルまたはサブディレクトリとして含むモデル フォルダーを登録することで、1 回のデプロイで複数のモデルを引き続き使用できます。 デプロイ時にモデルなどの資産の登録名とバージョンを指定できるように、それを登録する方法について詳しくは、「モデルと環境を登録する」をご覧ください。
ローカル フォルダー構造の例では、models
フォルダーに複数のモデルがあることがわかります。 これらのモデルを使うには、デプロイ YAML で、models
フォルダーへのパスを次のように指定します。
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: /Downloads/multi-models-sample/models/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
デプロイを作成した後で、環境変数 AZUREML_MODEL_DIR
は、モデルが格納されている Azure 内の保存場所を指すようになります。 たとえば、/var/azureml-app/azureml-models/bbb-bbb-bbb-bbb-bbb/1
にはモデルとファイル構造が含まれるようになります。
この例では、AZUREML_MODEL_DIR
フォルダーの内容は次のようになります。
スコアリング スクリプト (score.py
) 内で、init()
関数でモデルを読み込むことができます。 sample_m1.pkl
モデルを読み込むコードを次に示します。
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ")
model = joblib.load(model_path)
1 つのデプロイに複数のモデルをデプロイする方法の例については、1 つのデプロイへの複数のモデルのデプロイ (CLI の例) と 1 つのデプロイへの複数のモデルのデプロイ (SDK の例) に関するページを参照してください。
ヒント
登録するファイルが 1500 を超える場合は、モデルの登録時にファイルまたはサブディレクトリを .tar.gz として圧縮することを検討してください。 モデルを使うには、スコアリング スクリプトの init()
関数でファイルまたはサブディレクトリをアンパックします。 または、モデルを登録するときに、azureml.unpack
プロパティを True
に設定すると、ファイルやサブディレクトリが自動的にアンパックされます。 この場合、ファイルのアンパックは初期化ステージで 1 回行われます。
ワークスペースに登録されているモデルのデプロイ
デプロイ定義で登録済みモデルを使うには、デプロイ YAML でその名前を参照します。 たとえば、次のデプロイ YAML 構成で登録された model
の名前を azureml:local-multimodel:3
と指定します。
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model: azureml:local-multimodel:3
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
この例では、local-multimodel:3
に Azure Machine Learning スタジオの [モデル] タブから表示できる次のモデルの成果物が含まれることを考慮してください。
デプロイを作成した後で、環境変数 AZUREML_MODEL_DIR
は、モデルが格納されている Azure 内の保存場所を指すようになります。 たとえば、/var/azureml-app/azureml-models/local-multimodel/3
にはモデルとファイル構造が含まれます。 AZUREML_MODEL_DIR
は、モデル成果物のルートを含むフォルダーを指します。 この例を基にすると、AZUREML_MODEL_DIR
フォルダーの内容は次のようになります。
スコアリング スクリプト (score.py
) 内で、init()
関数でモデルを読み込むことができます。 たとえば、次の diabetes.sav
モデルを読み込みます。
def init():
model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav")
model = joblib.load(model_path)
モデル カタログで使用できるモデルのデプロイ
モデル カタログに含まれるモデルについては、Azure OpenAI コレクション内のモデルを除き、モデルのカードに表示されているモデル ID をデプロイに使用できます。 モデル ID は、azureml://registries/{registry_name}/models/{model_name}/versions/{model_version}
という形式です。 たとえば、Meta Llama 3-8 B Instruct モデルのモデル ID は azureml://registries/azureml-meta/models/Meta-Llama-3-8B-Instruct/versions/2
です。
一部のモデル カードには、そのモデル ID をデプロイに使う方法を示すノートブックの例が含まれています。
組織のレジストリで使用できるモデルのデプロイ
組織のレジストリ内の各モデルは、azureml://registries/{registry_name}/models/{model_name}/versions/{model_version}
という形式のモデル ID を持っています。 同じレジストリに登録されている複数の環境を使うこともできます。