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

MLflow无法从模型仓库加载模型:S3路径404错误求助

解决MLflow加载注册模型时S3路径404的问题

针对你遇到的问题——明明S3中模型文件存在,加载时却返回404,大概率是以下几个原因,对应解决方案如下:

1. S3不支持相对路径../解析

错误信息里的路径包含artifacts/../saved-model/model20/,但S3是扁平结构的对象存储,不会像本地文件系统那样解析../这类相对路径。MLflow构造的这个路径会被直接传给S3客户端,导致请求的是一个包含../的无效对象路径,自然返回404。

解决方法:

  • 先通过MLflow命令行查看注册模型的实际源路径:
    mlflow models get-latest-versions --name sample-ann-1
    
    查看输出的source字段,确认是否包含../。如果是,说明模型注册时的路径记录有误。
  • 重新注册模型:保存模型时使用绝对路径,避免相对路径引用。比如保存时指定mlflow.pyfunc.log_model(model, artifact_path="saved-model"),确保artifact路径是绝对的。
  • 临时应急:跳过模型注册表,直接用S3绝对路径加载模型:
    loaded_model = mlflow.pyfunc.load_model("s3://{bucket}/saved-model/model20/")
    

2. IAM权限范围不足

你通过S3浏览器能看到文件,但程序使用的AWS凭证(IAM角色/用户)可能没有访问saved-model/model20/路径的权限——比如权限只授权了artifacts/下的资源,没覆盖上级的saved-model/路径。

解决方法:

  • 检查程序使用的IAM权限策略,确保包含以下权限(替换为你的实际bucket和路径):
    {
        "Effect": "Allow",
        "Action": ["s3:GetObject", "s3:ListBucket"],
        "Resource": [
            "arn:aws:s3:::{bucket}",
            "arn:aws:s3:::{bucket}/saved-model/model20/*"
        ]
    }
    
  • 用相同凭证在命令行测试访问:
    aws s3 ls s3://{bucket}/saved-model/model20/
    
    如果命令返回403,说明确实是权限问题,需要调整IAM策略。

3. MLflow模型元数据错误

模型注册时,MLflow可能错误记录了模型的存储路径,导致加载时指向了错误的位置(比如关联的run_id、版本对应的路径有误)。

解决方法:

  • 查看对应MLflow run的artifact路径:找到模型注册时关联的run,在MLflow UI里查看该run的artifact,确认模型实际存储的路径和注册模型的source是否一致。
  • 如果元数据错误,可以重新注册模型,确保注册时关联的是正确的run和artifact路径。

4. 路径大小写不匹配

S3的对象路径是区分大小写的,比如Model20和model20是两个完全不同的路径。检查错误信息里的路径和S3浏览器里的实际路径大小写是否完全一致。

内容的提问来源于stack exchange,提问作者Henry Bai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:20:43