从ACI迁移至AKS部署的最简方法及代码适配咨询
好问题!从ACI(测试环境)迁移到AKS(生产环境)确实有几个关键细节需要调整,但完全可以基于你现有的ACI代码做最小改动来实现。让我给你拆解清楚:
从ACI迁移到AKS的最简代码改动
首先,先给你基于现有ACI代码的最小修改版本——核心就是复用你已经创建好的镜像,只需要补充AKS集群的关联和部署参数:
步骤1:导入AKS相关依赖
在原有导入的基础上,添加AKS计算目标的类:
from azureml.core.webservice import Webservice, AciWebservice, AksWebservice from azureml.core.image import ContainerImage from azureml.core.compute import AksCompute, ComputeTarget # 新增这行
步骤2:创建或获取AKS集群
AKS是生产级Kubernetes集群,需要预先创建(不像ACI是临时自动生成的),所以先检查集群是否存在,不存在则创建:
aks_cluster_name = "my-aks-cluster" # 自定义你的集群名称 try: # 尝试获取现有集群 aks_target = ComputeTarget(workspace=ws, name=aks_cluster_name) print(f"已找到现有AKS集群:{aks_cluster_name}") except ComputeTargetException: # 集群不存在则创建,可根据需求调整vm_size和agent_count print(f"正在创建AKS集群:{aks_cluster_name}") aks_provision_config = AksCompute.provisioning_configuration( vm_size="Standard_DS3_v2", agent_count=3 ) aks_target = ComputeTarget.create(ws, aks_cluster_name, aks_provision_config) aks_target.wait_for_completion(show_output=True)
步骤3:修改部署配置与执行部署
把原来的ACI部署配置换成AKS的,然后在deploy_from_image中添加deployment_target参数指向AKS集群——这是ACI部署没有的关键参数:
# 替换ACI配置为AKS部署配置(参数和ACI基本一致,可按需调整) aks_deploy_config = AksWebservice.deploy_configuration( cpu_cores=1, memory_gb=8, tags={"data": "text", "method" : "NB"}, description='Predict something' ) # 复用你已经创建好的image(和ACI代码里的image完全一样) service_name = 'scorer-aks-svc' # 给AKS服务起个新名称 service = Webservice.deploy_from_image( deployment_config=aks_deploy_config, image=image, name=service_name, workspace=ws, deployment_target=aks_target # 新增:指定AKS集群作为部署目标 ) service.wait_for_deployment(show_output=True) print(f"AKS服务部署状态:{service.state}")
更简洁的现代方式:用InferenceConfig替代ContainerImage
如果你还没创建镜像,或者想简化代码流程,可以用InferenceConfig替代原来的ContainerImage.create步骤,直接从模型部署到AKS,减少中间环节:
from azureml.core.webservice import AksWebservice from azureml.core.compute import AksCompute, ComputeTarget from azureml.core.model import InferenceConfig, Model # 用InferenceConfig替代ContainerImage # 1. 定义推理配置(对应原来的image_config参数) inference_config = InferenceConfig( execution_script="score.py", docker_file="Dockerfile", runtime="python", conda_file="myenv.yml" ) # 2. 创建/获取AKS集群(和上面步骤一样) aks_cluster_name = "my-aks-cluster" try: aks_target = ComputeTarget(workspace=ws, name=aks_cluster_name) except ComputeTargetException: aks_provision_config = AksCompute.provisioning_configuration(vm_size="Standard_DS3_v2", agent_count=3) aks_target = ComputeTarget.create(ws, aks_cluster_name, aks_provision_config) aks_target.wait_for_completion(show_output=True) # 3. AKS部署配置 aks_deploy_config = AksWebservice.deploy_configuration( cpu_cores=1, memory_gb=8, tags={"data": "text", "method" : "NB"}, description='Predict something' ) # 4. 直接从模型部署,无需单独创建image service_name = 'scorer-aks-svc' service = Model.deploy( workspace=ws, name=service_name, models=[model], inference_config=inference_config, deployment_config=aks_deploy_config, deployment_target=aks_target ) service.wait_for_deployment(show_output=True)
解答你的疑问
- 为什么AKS需要额外配置?
AKS是生产级的Kubernetes集群,需要预先创建并关联到你的Azure ML工作区(不像ACI是临时的无服务器实例),所以必须指定deployment_target参数。 - AKS支持
deploy_from_image吗?
当然支持!你之前误以为不支持,只是因为ACI部署不需要指定目标集群,而AKS需要多传一个deployment_target参数而已。 - 最简迁移方式是什么?
如果你已经有了ACI的镜像,最简方式就是复用该镜像,只需要添加AKS集群的关联代码和deployment_target参数,其余代码几乎和ACI一致;如果还没创建镜像,用InferenceConfig直接部署更高效。
内容的提问来源于stack exchange,提问作者Davide Fiocco
相关产品推荐
相关产品推荐

