指定要部署以用于联机终结点的模型

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

在本文中,你将了解用于指定要在联机部署中使用的模型的不同方法。 将模型部署到 Azure 机器学习联机终结点时,需要通过以下两种方式之一指定模型:

  • 提供本地计算机上的模型位置的路径
  • 提供对已在工作区中注册的版本控制模型的引用。

如何为联机终结点的部署指定模型取决于模型存储位置。 在 Azure 机器学习中创建部署后,环境变量 AZUREML_MODEL_DIR 将指向 Azure 中存储模型的存储位置。

本地存储的模型的部署

本部分使用本地文件夹结构的此示例来演示如何指定要在联机部署中使用的模型:

显示包含多个模型的本地文件夹结构的屏幕截图。

单个本地模型的部署

要使用部署中本地计算机上的单个模型,请在部署 YAML 配置文件中将 path 指定为 model。 以下代码是部署 YAML 的一个示例,其中包含本地路径 /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl

$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 机器学习中创建到联机终结点的部署后,环境变量 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 和其他客户端工具支持你在部署定义中为每个部署仅指定一个模型,但仍可以通过将包含所有模型的模型文件夹注册为文件或子目录,在部署中使用多个模型。 有关注册资产(如模型)以便可以在部署期间指定其注册名称和版本的详细信息,请参阅注册模型和环境

在示例本地文件夹结构中,你会注意到 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) 

有关如何将多个模型部署到一个部署的示例,请参阅将多个模型部署到一个部署(CLI 示例)将多个模型部署到一个部署(SDK 示例)

提示

如果要注册超过 1500 个文件,请考虑在注册模型时将文件或子目录压缩为 .tar.gz。 要使用模型,可以解压缩评分脚本 init() 函数中的文件或子目录。 也可以在注册模型时将 azureml.unpack 属性设置为 True,以自动解压缩文件或子目录。 无论哪种情况,都会在初始化期间解压缩文件。

部署在工作区中注册的模型

可以通过在部署 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 机器学习工作室中的“模型”选项卡查看

文件夹结构的屏幕截图,其中显示了已注册模型的模型项目。

创建部署后,环境变量 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 用于部署。

部署组织注册表中提供的模型

组织注册表中的每个模型都有一个模型 ID,其格式为 azureml://registries/{registry_name}/models/{model_name}/versions/{model_version}。 还可以选择使用在同一注册表中注册的环境。