基于AWS SAM部署FastAI模型时遇UnicodeDecodeError问题求助
解决FastAI模型在AWS Lambda本地测试的UnicodeDecodeError问题
关键修复步骤
1. 修正模型加载方式
FastAI的.pth是二进制文件,别直接用torch.load读取,优先用FastAI原生加载方法,或者指定二进制模式打开文件再加载:
# 若模型是用learn.export导出的,用FastAI原生加载 from fastai.learner import load_learner learn = load_learner("test-fastai-project.pth") # 用Torch加载时,必须以二进制模式打开文件 with open("test-fastai-project.pth", "rb") as f: model = torch.load(f, map_location=torch.device('cpu'))
注意:训练模型时的FastAI、Torch版本,要和Lambda环境里的版本完全一致,版本不匹配大概率会触发解析错误。
2. 彻底清理SAM与Docker缓存
Windows环境下SAM的缓存不止存于Docker镜像,需全链路清理:
- 删除SAM本地缓存:执行
sam local delete - 清理Docker所有闲置资源:
docker system prune -a(会删除所有未使用的镜像、容器、卷) - 删除项目目录下的
.aws-sam文件夹 - 启动SAM时强制重新构建镜像:
sam local start-api --build
3. 强制设置Lambda环境编码
在Dockerfile中添加编码环境变量,确保运行环境编码统一:
ENV LANG=C.UTF-8 ENV LC_ALL=C.UTF-8
如果使用Python 2,在Lambda入口文件最顶部补充编码声明:
import sys sys.setdefaultencoding('utf-8')
4. 验证模型文件完整性
重新导出模型,避免导出方式错误:
- FastAI标准导出:
learn.export("test-fastai-project.pth") - Torch权重导出:
torch.save(learn.model.state_dict(), "test-fastai-project.pth")
导出后先在本地单独测试加载逻辑,确认无错误再部署到SAM环境:
# 本地测试脚本 from fastai.learner import load_learner try: learn = load_learner("test-fastai-project.pth") print("模型加载成功") except Exception as e: print(f"加载错误: {str(e)}")
内容的提问来源于stack exchange,提问作者AbelAI
相关产品推荐
相关产品推荐

