You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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)

解答你的疑问
  1. 为什么AKS需要额外配置?
    AKS是生产级的Kubernetes集群,需要预先创建并关联到你的Azure ML工作区(不像ACI是临时的无服务器实例),所以必须指定deployment_target参数。
  2. AKS支持deploy_from_image吗?
    当然支持!你之前误以为不支持,只是因为ACI部署不需要指定目标集群,而AKS需要多传一个deployment_target参数而已。
  3. 最简迁移方式是什么?
    如果你已经有了ACI的镜像,最简方式就是复用该镜像,只需要添加AKS集群的关联代码和deployment_target参数,其余代码几乎和ACI一致;如果还没创建镜像,用InferenceConfig直接部署更高效。

内容的提问来源于stack exchange,提问作者Davide Fiocco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:39:15