AWS SageMaker部署LLM调用端点遇offload_folder及CUDA错误求助
问题解决方案:SageMaker多模型部署与推理错误排查
一、offload_folder参数无效问题
SageMaker多模型容器的offload_folder要求指定实例本地路径,而非S3路径——模型卸载是在实例本地磁盘完成的,S3路径无法被容器直接调用。
解决步骤:
- 修改推理脚本(
inference.py)的model_fn函数,在加载模型时指定本地临时存储目录(如/tmp/offload,ml.g5系列实例的/tmp目录有100GB左右空间,足够满足卸载需求) - 无需在
InvokeEndpoint的请求payload中传递offload_folder参数,所有卸载配置统一在模型加载阶段完成
示例代码:
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer import torch def model_fn(model_dir): tokenizer = AutoTokenizer.from_pretrained(model_dir) # 配置自动设备映射与本地卸载目录 model = AutoModelForSeq2SeqLM.from_pretrained( model_dir, device_map="auto", offload_folder="/tmp/offload", torch_dtype=torch.bfloat16 ) return model, tokenizer
二、ml.g5.4xlarge无法同时部署两个模型
ml.g5.4xlarge仅配备1张24GB显存的A10G GPU,而huggingface-text2text-flan-t5-xxl(11B参数)在bfloat16精度下就占用约22GB显存,两个模型同时加载会超出显存上限。
解决思路:
- 启用SageMaker多模型端点(MME)的动态模型加载:默认情况下MME只会在收到对应模型的推理请求时加载模型,推理完成后自动卸载,无需同时加载所有模型。需确保创建端点时设置
ModelDataDownloadTimeoutInSeconds和ContainerStartupHealthCheckTimeoutInSeconds为300秒以上,给模型加载留足时间 - 若必须同时加载两个模型,需升级到更大显存的实例(如ml.g5.12xlarge,配备4张A10G GPU,总显存96GB),但会带来更高成本
三、单独部署flan-t5-xxl的CUDA设备不匹配错误
该错误源于模型加载时部分参数分配在CPU、部分在GPU,推理时输入张量与模型参数设备不一致。
解决步骤:
- 加载模型时使用
device_map="auto",让Transformers库自动分配设备,避免手动指定设备导致的不匹配 - 在
predict_fn函数中,确保输入张量被转移到模型所在设备
示例代码:
def predict_fn(input_data, model_and_tokenizer): model, tokenizer = model_and_tokenizer # 将输入张量转移到模型所在设备 inputs = tokenizer(input_data["text"], return_tensors="pt").to(model.device) outputs = model.generate(**inputs) return tokenizer.decode(outputs[0], skip_special_tokens=True)
- 使用SageMaker官方HuggingFace容器,其预配置的CUDA、PyTorch、Transformers版本已做兼容性适配,避免手动环境配置导致的问题
内容的提问来源于stack exchange,提问作者Mustapha Unubi Momoh
相关产品推荐
相关产品推荐

