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

SageMaker部署PyTorch模型时inference.py找不到与model_fn未识别问题

错误根源
  1. 压缩包目录层级错误:你大概率是直接对外层my_model文件夹执行的压缩操作,导致tar.gz解压后第一层目录为my_model,SageMaker默认从压缩包根目录检索code文件夹和模型文件,找不到对应路径自然报inference.py不存在。
  2. 参数配置逻辑错误:
  • 未指定source_dir时,SageMaker默认从model_data对应压缩包根目录的code文件夹下查找entry_point指定的文件,打包层级错误会直接触发文件找不到的报错。
  • 你后续将source_dir设为模型tar包的S3路径时,SageMaker会将该压缩包单独作为代码目录解压,此时你写的model_fn无法被识别,是因为inference.py存放在压缩包的code子目录下,entry_point='inference.py'的配置无法检索到子目录内的文件,自然识别不到你定义的函数。
正确的模型制品打包规则

特别注意:不要在打包时包含外层的my_model目录,这是90%以上同类部署问题的诱因
打包时需要进入my_model文件夹内部执行压缩命令,确保压缩包解压后根目录直接存在model.pth和code文件夹,正确解压后的目录结构如下:

.
├── model.pth
└── code
    ├── inference.py
    └── requirements.txt

Linux/macOS下打包命令示例:

cd my_model
tar -czvf my-model.tar.gz *

将生成的my-model.tar.gz上传到S3即可。

正确的参数配置方案

根据代码存储方式不同,分为两种常用配置方案:

场景1:代码和模型一起打包在model.tar.gz中(你的场景)

无需额外指定source_dir参数,SageMaker会自动读取压缩包根目录下code文件夹内的入口文件,配置如下:

pytorch_model = PyTorchModel(
    model_data='s3://{bucket_name}/my_path/my-model.tar.gz',
    framework_version="1.8.1", 
    py_version="py3",
    role=role, 
    entry_point='inference.py'
)

该配置下你在inference.py中定义的model_fn会被正常识别加载。

场景2:推理代码与模型文件分开存储

如果你的推理代码没有和模型打包在一起,才需要指定source_dir参数:

  • 若source_dir为本地代码目录路径:直接填写本地code文件夹的相对/绝对路径,entry_point='inference.py'即可,SDK会自动将代码目录打包上传到S3。
  • 若source_dir为S3上的代码压缩包路径:entry_point需要填写压缩包内inference.py的相对路径,比如inference.py在压缩包的code子目录下,就配置为entry_point='code/inference.py'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 17:24:03