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

如何将Pickle/Joblib预训练ML模型部署至AWS SageMaker端点

刚好我之前做过一模一样的操作,把预训练好的模型直接部署到SageMaker端点,完全不用跑训练流程。下面是一步步的实操指南,亲测有效:

1. 准备SageMaker要求的文件结构

SageMaker部署模型时需要特定的压缩包格式,核心是要包含模型文件和推理处理脚本。

首先本地创建一个临时目录(比如model_dir),把你的model.pkl(可以从S3下载到本地,或者直接用本地已有的)放进去,然后创建一个名为inference.py的推理脚本——这是SageMaker处理预测请求的核心逻辑,必须包含3个关键函数:

import joblib
import numpy as np

def model_fn(model_dir):
    # 加载预训练模型
    model = joblib.load(f"{model_dir}/model.pkl")
    return model

def input_fn(request_body, request_content_type):
    # 解析输入数据(这里假设请求是JSON格式的numpy数组)
    if request_content_type == 'application/json':
        import json
        input_data = json.loads(request_body)
        return np.array(input_data)
    raise ValueError(f"不支持的请求格式: {request_content_type}")

def predict_fn(input_data, model):
    # 执行预测逻辑
    predictions = model.predict(input_data)
    return predictions

def output_fn(prediction, response_content_type):
    # 格式化预测结果返回
    if response_content_type == 'application/json':
        import json
        return json.dumps(prediction.tolist())
    raise ValueError(f"不支持的响应格式: {response_content_type}")

如果你的模型依赖特定版本的库(比如指定版本的scikit-learn、numpy),可以在model_dir里新建requirements.txt,把依赖列进去:

scikit-learn==1.2.1
numpy==1.24.3

最后把目录里的文件打包成model.tar.gz:

cd model_dir
tar -czvf model.tar.gz model.pkl inference.py requirements.txt
2. 把压缩包上传到S3

用AWS CLI或者Python的boto3把打包好的文件传到你的S3桶:

  • CLI方式:
aws s3 cp model.tar.gz s3://myBucketName/model/model.tar.gz
  • Python boto3方式:
import boto3
s3 = boto3.client('s3')
s3.upload_file('model_dir/model.tar.gz', 'myBucketName', 'model/model.tar.gz')
3. 用SageMaker Python SDK部署端点

首先确保安装了必要的库:

pip install sagemaker boto3

然后编写部署代码,分两种模型情况:

情况1:Scikit-learn模型(比如Logistic Regression)

import sagemaker
from sagemaker.sklearn.model import SKLearnModel

# 初始化SageMaker会话,获取执行角色
sess = sagemaker.Session()
role = sagemaker.get_execution_role()

# 创建模型对象
sklearn_model = SKLearnModel(
    model_data='s3://myBucketName/model/model.tar.gz',
    role=role,
    entry_point='inference.py',  # 指定我们写的推理脚本
    framework_version='1.2-1'  # 要和你训练模型时的scikit-learn版本匹配
)

# 部署成预测端点
predictor = sklearn_model.deploy(
    initial_instance_count=1,
    instance_type='ml.t2.medium'  # 根据模型大小和请求量选实例,测试用t2.medium足够
)

情况2:XGBoost模型

如果是XGBoost模型,把SKLearnModel换成XGBoostModel即可,注意框架版本要匹配:

import sagemaker
from sagemaker.xgboost.model import XGBoostModel

sess = sagemaker.Session()
role = sagemaker.get_execution_role()

xgboost_model = XGBoostModel(
    model_data='s3://myBucketName/model/model.tar.gz',
    role=role,
    entry_point='inference.py',
    framework_version='1.7-1'  # 匹配你的XGBoost训练版本
)

predictor = xgboost_model.deploy(
    initial_instance_count=1,
    instance_type='ml.t2.medium'
)
4. 测试预测端点

部署完成后,直接用predictor对象测试:

import numpy as np

# 准备测试数据,和你本地的X_test格式一致
X_test = np.array([[1.2, 3.4, 5.6], [7.8, 9.0, 1.2]])

# 发送预测请求
predictions = predictor.predict(X_test)
print(predictions)

也可以用boto3直接调用端点(适合生产环境的API调用):

import boto3
import json

runtime = boto3.client('sagemaker-runtime')
endpoint_name = 'your-endpoint-name'  # 部署时输出的端点名称

payload = json.dumps(X_test.tolist())
response = runtime.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='application/json',
    Body=payload
)

result = json.loads(response['Body'].read().decode())
print(result)
5. 清理资源(必做!避免不必要的费用)

测试完成后,记得删除端点:

predictor.delete_endpoint()

也可以登录AWS控制台,手动删除端点、模型和终端配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:32:53