Sagemaker脚本模式(本地)下,修改inference.py后如何快速更新端点?
快速更新SageMaker本地模式推理端点(无需重建容器)
首次部署(仅执行一次)
先按原有流程完成首次部署,确保容器启动并安装好所有依赖:
from sagemaker.pytorch import PyTorchModel from sagemaker.serializers import JSONSerializer from sagemaker.deserializers import JSONDeserializer # 首次创建模型并部署 model_instance = PyTorchModel( model_data=model_tar_path, role=role, source_dir="code", entry_point="inference.py", framework_version="1.8", py_version="py3" ) predictor = model_instance.deploy( initial_instance_count=1, endpoint_name='some_name', instance_type=instance_type, serializer=JSONSerializer(), deserializer=JSONDeserializer() )
修改推理脚本后的快速更新
当你修改inference.py或code目录下的其他文件后,无需重新构建容器,只需执行以下步骤:
- 创建新的PyTorchModel实例(指向更新后的代码)
- 调用
update_endpoint方法复用现有容器更新端点
代码示例:
# 创建新的模型实例(仅更新代码部分,模型数据不变) updated_model = PyTorchModel( model_data=model_tar_path, # 复用原模型数据,无需重新打包 role=role, source_dir="code", # 指向修改后的代码目录 entry_point="inference.py", # 修改后的入口脚本 framework_version="1.8", py_version="py3" ) # 更新端点,复用现有容器 predictor = updated_model.update_endpoint( endpoint_name='some_name', initial_instance_count=1, instance_type=instance_type )
关键注意事项
- 模型数据复用:保持
model_data路径不变,SageMaker只会更新推理代码,不会重新处理模型文件 - 本地容器缓存:本地模式下Docker容器会保留已安装的依赖,更新时仅同步新代码到容器内,避免重复安装依赖
- 端点名称一致:必须使用和首次部署相同的
endpoint_name,才能覆盖现有端点 - 验证更新:更新后调用一次预测请求,确认新的推理逻辑生效
额外优化:本地代码热加载(可选)
若想实现实时修改实时生效,可直接将本地修改的文件同步到运行中的Docker容器:
- 查看运行中的SageMaker推理容器ID:
docker ps - 将修改后的文件复制到容器内的代码目录(默认路径为
/opt/ml/model/code/):
docker cp ./code/inference.py <container_id>:/opt/ml/model/code/
- 若服务未自动生效,重启容器内的推理服务:
docker exec <container_id> sudo service nginx restart docker exec <container_id> sudo supervisorctl restart sagemaker-inference
内容的提问来源于stack exchange,提问作者andyk
相关产品推荐
相关产品推荐

