SageMaker部署HuggingFace模型报错:找不到config.json文件
问题分析与解决方案
核心错误原因
- 环境变量冲突:你设置了
HF_TASK='text-generation',这会触发SageMaker HuggingFace容器的自动模型加载逻辑,而非执行你自定义的inference.py。容器自动加载时的默认逻辑会导致模型文件路径识别异常,即便config.json实际存在也会报错。 - inference.py变量作用域错误:全局变量
pipeline在model_fn中被重新定义为局部变量,导致transform_fn调用时pipeline仍为None;同时代码未处理输入输出的格式解析,不符合SageMaker推理脚本的规范。
具体修复步骤
1. 修改部署代码,移除冲突环境变量
删除HF_TASK环境变量,让容器优先使用你的自定义推理脚本:
from sagemaker.huggingface.model import HuggingFaceModel huggingface_model = HuggingFaceModel( model_data="s3://my_model_bucket/model.tar.gz", role=role, transformers_version="4.28", pytorch_version="2.0", py_version='py310', ) # 部署端点 predictor = huggingface_model.deploy( initial_instance_count=1, instance_type="ml.g5.xlarge" )
2. 修复inference.py的变量作用域与格式处理
调整变量作用域,同时完善输入输出的格式解析逻辑:
import torch import json from transformers import AutoTokenizer, AutoModelForCausalLM from pipeline import MyCustomPipeline # 全局pipeline变量 pipeline = None def model_fn(model_dir): global pipeline # 声明使用全局变量,避免局部变量覆盖 print(f"Loading model from: {model_dir}") tokenizer = AutoTokenizer.from_pretrained( model_dir, local_files_only=True, ) model = AutoModelForCausalLM.from_pretrained( model_dir, local_files_only=True, device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True, ) # 初始化自定义pipeline并赋值给全局变量 pipeline = MyCustomPipeline(model, tokenizer) return pipeline def transform_fn(model, input_data, content_type, accept): # 解析输入数据(适配常见的JSON格式) if content_type == "application/json": input_dict = json.loads(input_data) result = pipeline(input_dict["text"]) else: # 兼容纯文本输入 result = pipeline(input_data) # 根据请求头返回对应格式的结果 if accept == "application/json": return json.dumps({"result": result}), accept else: return str(result), accept
3. 验证模型包结构
你的model.tar.gz结构是正确的:根目录包含config.json、模型权重文件,code目录包含推理相关脚本,无需调整。
额外注意事项
- 确保
requirements.txt中包含所有依赖,比如transformers、torch的版本需与部署时指定的版本匹配; - 若自定义
MyCustomPipeline需要额外依赖,需将其添加到requirements.txt中; - 部署后可通过SageMaker控制台查看端点日志,排查其他潜在问题。
内容的提问来源于stack exchange,提问作者Baiqing
相关产品推荐
相关产品推荐

