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

使用MLflow和Docker在Sagemaker部署模型时ECR仓库存在却报错

解决MLflow 2.2.2部署到Sagemaker时ECR仓库不存在的报错

问题根源

你的报错核心是MLflow 2.x版本对Sagemaker部署的API参数要求与1.18.0版本不一致,同时代码存在参数遗漏,导致MLflow无法正确识别ECR注册表。

具体修复步骤

1. 补全create_deployment的config参数

你已经定义了config字典,但调用create_deployment时没有传入该参数,这会导致MLflow无法获取ECR镜像的访问权限和区域信息。修改代码如下:

client.create_deployment(name=app_name, model_uri=model_uri, config=config)

2. 确保AWS区域与凭证配置正确

报错中注册表ID为空,说明MLflow没有正确识别AWS区域:

  • 检查环境变量是否设置了AWS_REGION,或者在代码中显式指定区域:
    import os
    os.environ["AWS_REGION"] = region  # 替换为你的region值
    
  • 确认本地AWS凭证(~/.aws/credentials)或IAM角色权限足够,能访问目标ECR仓库和Sagemaker服务。

3. 适配MLflow 2.x的Sagemaker部署逻辑

MLflow 2.x对Sagemaker部署的客户端初始化有更严格的要求,建议显式指定Sagemaker客户端的区域:

client = get_deploy_client(f"sagemaker://{region}")

4. 验证镜像URL与ECR仓库的一致性

  • 确认image_url中的tag_id(2.2.2)与ECR中镜像的tag完全匹配,包括大小写。
  • 检查ECR仓库的权限,确保Sagemaker执行角色(execution_role_arn对应的ARN)有ecr:GetDownloadUrlForLayer、ecr:BatchGetImage等权限。

修改后的完整代码示例

import mlflow.sagemaker as mfs
from mlflow.deployments import get_deploy_client
import os

experiment_id = ''
run_id = ''
region = ''
aws_id = ''
arn = ''
app_name = 'btcprediction'
model_uri = f'mlruns/{experiment_id}/{run_id}/artifacts/rnn-btc-forecast'
tag_id = '2.2.2'

# 设置AWS区域环境变量
os.environ["AWS_REGION"] = region

image_url = f"{aws_id}.dkr.ecr.{region}.amazonaws.com/mlflow-pyfunc:{tag_id}"
config = dict(execution_role_arn=arn, image_url=image_url)

# 显式指定区域初始化客户端
client = get_deploy_client(f"sagemaker://{region}")
# 传入config参数创建部署
client.create_deployment(name=app_name, model_uri=model_uri, config=config)

内容的提问来源于stack exchange,提问作者99_zz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:18:18