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

如何从Sagemaker模型注册表/模型组获取最新已批准模型的名称?

获取SageMaker模型组中最新已批准模型的ModelName

问题背景

调用CreateTransformJob接口时需要传入ModelName(即SageMaker Model资源的名称),该名称不同于模型注册表/模型组名称、模型包名称。现有场景为已有现成模型,仅需通过模型组名称获取对应最新已批准模型的ModelName,无需通过流水线重新构建。

替代解析S3路径的可靠方案

之前通过解析模型包S3路径的方式存在脆弱性(路径格式可能随SageMaker更新变化),推荐以下两种更可靠的方法:

方法1:通过模型包标签关联查找Model资源

如果模型由SageMaker Pipeline创建,流水线通常会自动给Model资源和对应模型包添加关联标签(比如SageMakerPipelineExecutionArn或自定义标识标签),可利用标签过滤查找:

import boto3

sm_client = boto3.client("sagemaker")

# 1. 获取模型组中最新已批准的模型包
model_packages = sm_client.list_model_packages(
    ModelPackageGroupName="model-group-name",
    SortBy="CreationTime",
    SortOrder="Descending"
)
approved_pk = next(
    pk for pk in model_packages["ModelPackageSummaryList"] 
    if pk["ModelApprovalStatus"] == "Approved"
)
model_package_arn = approved_pk["ModelPackageArn"]

# 2. 获取模型包的流水线执行ARN标签
model_package_tags = sm_client.list_tags(ResourceArn=model_package_arn)["Tags"]
pipeline_execution_arn = next(
    tag["Value"] for tag in model_package_tags 
    if tag["Key"] == "SageMakerPipelineExecutionArn"
)

# 3. 通过标签过滤查找对应的Model资源
models = sm_client.list_models(
    NameContains="pipelines-",
    TagFilters=[{"Key": "SageMakerPipelineExecutionArn", "Value": pipeline_execution_arn}]
)
# 取最新创建的Model
latest_model = sorted(
    models["Models"], 
    key=lambda x: x["CreationTime"], 
    reverse=True
)[0]
model_name = latest_model["ModelName"]

方法2:直接从模型包创建临时Model(适合无关联Model资源的场景)

如果模型包没有关联的Model资源,可直接用模型包创建临时Model,获取名称后可按需删除:

import boto3
import uuid

sm_client = boto3.client("sagemaker")

# 1. 获取最新已批准模型包
model_packages = sm_client.list_model_packages(
    ModelPackageGroupName="model-group-name",
    SortBy="CreationTime",
    SortOrder="Descending"
)
approved_pk = next(
    pk for pk in model_packages["ModelPackageSummaryList"] 
    if pk["ModelApprovalStatus"] == "Approved"
)
model_package_arn = approved_pk["ModelPackageArn"]

# 2. 创建临时Model
temp_model_name = f"temp-transform-model-{uuid.uuid4().hex[:8]}"
sm_client.create_model(
    ModelName=temp_model_name,
    ExecutionRoleArn="你的SageMaker执行角色ARN",
    PrimaryContainer={
        "ModelPackageName": model_package_arn
    }
)

# 3. 获取可用的ModelName
model_name = temp_model_name

# (可选)TransformJob完成后删除临时Model
# sm_client.delete_model(ModelName=temp_model_name)

对原有解析S3路径方法的说明

原有方法通过拆分模型包的ModelDataUrl提取模型名,在流水线生成模型的场景下暂时可用,但依赖S3路径的固定格式,一旦SageMaker调整路径结构就会失效,不建议长期使用。

内容的提问来源于stack exchange,提问作者Dawid Laszuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:37