You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需Docker与ECR,将自定义Python推荐代码部署至AWS SageMaker端点

可行的SageMaker无Docker部署方案(仅依赖Notebook)

核心方案:利用SageMaker预构建镜像 + Script Mode

SageMaker提供了预构建的Python基础镜像(内置numpy、pandas等常用依赖),你可以通过Script Mode直接部署自定义代码,无需自行构建Docker镜像或使用ECR。

步骤1:准备模型与推理脚本

1.1 模型代码文件(recommender_model.py)

将你的推荐模型类封装到该文件中,示例:

import numpy as np
import pandas as pd

class CustomRecommender:
    def __init__(self):
        # 初始化逻辑,比如加载预训练权重(如果有)
        self.weights = np.load("model_weights.npy") if os.path.exists("model_weights.npy") else None
        pass
    
    def recommend(self, user_input):
        # 核心推荐逻辑,接收输入并返回结果
        processed_data = self._preprocess(user_input)
        recs = self._calculate_recommendations(processed_data)
        return {"recommended_items": recs}
    
    def _preprocess(self, input_data):
        # 输入预处理逻辑,比如转成DataFrame
        return pd.DataFrame(input_data)
    
    def _calculate_recommendations(self, data):
        # 自定义推荐计算逻辑
        return ["item_001", "item_005", "item_012"]

1.2 推理脚本(inference.py)

必须实现SageMaker要求的4个核心函数,平台会自动调用这些函数处理请求:

import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from recommender_model import CustomRecommender

def model_fn(model_dir):
    # 加载模型,model_dir是SageMaker挂载的模型包路径
    model = CustomRecommender()
    # 若有权重文件,从model_dir加载:
    # model.weights = np.load(os.path.join(model_dir, "model_weights.npy"))
    return model

def input_fn(request_body, request_content_type):
    # 解析输入请求,支持JSON格式
    if request_content_type == "application/json":
        import json
        return json.loads(request_body)
    raise ValueError(f"Unsupported content type: {request_content_type}")

def predict_fn(input_data, model):
    # 调用模型生成推荐结果
    return model.recommend(input_data)

def output_fn(prediction, response_content_type):
    # 格式化输出为JSON
    if response_content_type == "application/json":
        import json
        return json.dumps(prediction)
    raise ValueError(f"Unsupported content type: {response_content_type}")

1.3 打包模型文件

将recommender_model.py、inference.py(以及权重文件如果有)打包成model.tar.gz:

tar -czvf model.tar.gz recommender_model.py inference.py

将打包后的文件上传到你的S3存储桶(例如s3://your-bucket/model-artifacts/model.tar.gz)。

步骤2:在SageMaker Notebook中部署端点

使用SageMaker Python SDK完成部署,示例代码:

import sagemaker
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from sagemaker.serializers import JSONSerializer
from sagemaker.deserializers import JSONDeserializer

# 初始化会话与角色
sess = sagemaker.Session()
role = sagemaker.get_execution_role()

# 指定预构建Python镜像(以us-east-1区域为例,其他区域替换对应账号ID)
image_uri = "763104351884.dkr.ecr.us-east-1.amazonaws.com/python:3.9-sagemaker"

# 创建Model对象
model = Model(
    image_uri=image_uri,
    model_data="s3://your-bucket/model-artifacts/model.tar.gz",
    role=role,
    # 若需额外依赖,可指定requirements.txt路径(可选)
    # dependencies=["requirements.txt"]
)

# 部署端点
predictor = model.deploy(
    initial_instance_count=1,
    instance_type="ml.t2.medium",  # 根据需求选择实例类型
    predictor_cls=lambda endpoint_name, sess: Predictor(
        endpoint_name,
        sagemaker_session=sess,
        serializer=JSONSerializer(),
        deserializer=JSONDeserializer()
    )
)

# 测试端点
test_input = {"user_id": "u_1001", "user_features": [0.3, 0.7, 0.2]}
response = predictor.predict(test_input)
print(response)

官方文档指引

  • Script Mode自定义推理:SageMaker官方文档中关于自定义推理脚本的详细规范,包括函数参数、执行流程等。
  • 预构建镜像列表:不同区域、Python版本的预构建镜像URI清单,可根据你的环境选择适配的镜像。
  • SageMaker Python SDK部署指南:关于Model类、deploy方法的参数说明与最佳实践。

注:如果你的numpy/pandas版本与预构建镜像中的版本不兼容,可在requirements.txt中指定具体版本,将其打包到model.tar.gz中,SageMaker会自动安装依赖。

内容的提问来源于stack exchange,提问作者Stanislav Nevyazhsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:32:37