TensorFlowModel部署失败:requirements.txt依赖未安装问题排查
问题分析与解决方案
问题根源
SageMaker官方TensorFlow推理容器默认不会自动解析并安装requirements.txt中的依赖——dependencies参数仅负责将文件复制到容器的/opt/ml/code/dependencies目录,不会触发安装流程。即便你在requirements.txt中声明了numpy,容器也不会自动执行pip install操作。
解决方法
方法1:使用source_dir参数(推荐)
将inference.py和requirements.txt放在同一个本地目录下,通过source_dir指定该目录。SageMaker会自动检测目录下的requirements.txt并在容器启动时完成依赖安装。
修改后的代码示例:
from sagemaker.tensorflow import TensorFlowModel # 假设inference.py和requirements.txt都在当前目录下的src文件夹中 model = TensorFlowModel( entry_point='inference.py', source_dir='./src', # 指定包含脚本和依赖文件的目录 model_data='s3://mybucket/model.tar.gz', role='MySageMakerRole', framework_version='2.3' ) predictor = model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')
方法2:在inference.py中手动安装依赖
如果不想调整目录结构,可以在inference.py的开头添加手动安装依赖的代码,确保在导入模块前完成依赖安装:
import subprocess import sys def install_package(package): subprocess.check_call([sys.executable, "-m", "pip", "install", package]) # 安装依赖(建议指定版本,与容器的TensorFlow版本匹配) install_package("numpy") install_package("tensorflow==2.3") # 后续导入所需模块 import numpy as np import tensorflow as tf # 你的后处理逻辑...
额外注意事项
- SageMaker TensorFlow 2.3官方容器其实默认已包含
numpy,若仍报错,可能是模型包(model.tar.gz)中的内容覆盖了原有环境,或容器初始化时出现异常。此时优先用方法1重置依赖安装流程。 - 确保
requirements.txt中依赖版本与容器的TensorFlow版本兼容,避免版本冲突导致部署失败。
内容的提问来源于stack exchange,提问作者Abdeelrahman Hassanein
相关产品推荐
相关产品推荐

