不使用SageMaker SDK如何为自建SageMaker模型创建端点?
不依赖SageMaker开发包部署自定义模型供Lambda调用的实操方法
完全不用绑定SageMaker SDK做部署,本质只要把你自写的推理逻辑封装成可被调用的服务,配好权限就能给Lambda触发,两个可直接落地的方案按需选:
方案1:直接将模型打包进Lambda(适配小体积、低资源消耗的模型)
适合总大小(含依赖)不超过10G、单推理耗时不超过15分钟、内存需求不超过10G的场景,全程不用碰SageMaker相关服务:
- 导出你训练好的模型权重文件,和自写的推理逻辑代码放在同一目录,只保留推理必需的依赖(比如numpy、pytorch、xgboost这类实际用到的库),不要引入任何sagemaker相关包
- 适配Lambda运行环境:如果依赖包含二进制编译文件,不要直接在本地Windows/macOS环境下打包依赖,用和Lambda运行时一致的Amazon Linux 2环境安装依赖后再打包,或者直接用公开的对应公共Lambda层,避免运行时报动态库缺失错误
- 写Lambda入口 handler:把模型加载逻辑写在handler函数外部,利用Lambda执行环境的热复用特性,避免每次请求都重新加载模型拖慢速度;handler内部逻辑只做三件事:解析事件里传入的推理参数、调用你自己写的推理循环、将结果序列化成JSON返回
- 部署包如果小于250M可以直接在Lambda控制台上传,超过250M就先传到S3,再指定S3路径部署;根据实际推理耗时调整Lambda的内存、超时配置,留20%左右的冗余即可
- 给Lambda绑定基础执行角色,后续需要触发推理直接调用这个Lambda就行,完全不需要创建SageMaker端点。
注意:如果你的模型单文件超过10G、单推理需要15分钟以上运行时间,或者需要固定低延迟,选下面的容器化部署方案。
方案2:容器化部署独立推理服务(适配大模型、高自定义度场景)
全程不需要遵循SageMaker对推理容器的路径、接口规范,完全按你自己的逻辑写服务:
- 用你熟悉的轻量Web框架(FastAPI/Flask都可以)写推理接口,不需要特意写SageMaker要求的
/ping//invocations路由,只要实现一个接收推理参数、返回推理结果的POST接口即可,本地先测通逻辑 - 写Dockerfile把模型权重、推理代码、所有依赖都打进镜像,本地启动容器验证:发POST请求能正常返回推理结果就算合格
- 把构建好的镜像推到AWS ECR仓库,根据需求选部署载体:
- 想要Serverless按调用量付费,就直接用Lambda的容器镜像模式部署,逻辑和ZIP包部署一致,最大支持10G镜像
- 需要长驻实例、毫秒级延迟,就用ECS Fargate或者EC2部署容器,部署完成后拿到服务的私有访问地址
- 权限配置:ECS/EC2部署的服务要放在私有VPC内,不要把推理接口暴露在公网;给调用端Lambda配置对应VPC的访问权限,避免未授权访问
- 最后写调用端Lambda逻辑:直接发HTTP POST请求到你部署好的推理服务地址,传入推理参数,拿到返回结果做后续处理即可。
实操避坑点
- 不要硬编码模型路径、配置项,统一通过环境变量传入,后续换模型、改参数不需要重新打包
- 不管用哪种部署方式,模型一定要做全局缓存加载,不要每次请求都重新读权重文件,否则延迟会升高数倍
- 推理接口加基础的入参校验,避免非法参数把服务打挂
内容的提问来源于stack exchange,提问作者sam.hay
相关产品推荐
相关产品推荐

