如何在 Sagemaker 2 中使用序列化器和反序列化器

tkw*_*rgs 5 amazon-web-services python-3.x amazon-sagemaker

我使用conda_python3内核启动了一个 Sagemaker notebook ,并按照Random Cut Forest示例Notebook 进行操作。

在撰写本文时,附带的Sagemaker SDKconda_python3版本为 1.72.0,但我想使用新功能,因此我更新了我的笔记本以使用最新的

%%bash
pip install -U sagemaker
Run Code Online (Sandbox Code Playgroud)

我看到它更新。

print(sagemaker.__version__)

# 2.4.1
Run Code Online (Sandbox Code Playgroud)

从 1.x 版到 2.x 版的变化是序列化器/反序列化器类

以前(在 1.72.0 版中)我会更新我的预测器以使用正确的序列化器/反序列化器,并且可以在我的模型上运行推理

from sagemaker.predictor import csv_serializer, json_deserializer


rcf_inference = rcf.deploy(
    initial_instance_count=1,
    instance_type='ml.m4.xlarge',
)

rcf_inference.content_type = 'text/csv'
rcf_inference.serializer = csv_serializer
rcf_inference.accept = 'application/json'
rcf_inference.deserializer = json_deserializer

results = rcf_inference.predict(some_numpy_array)
Run Code Online (Sandbox Code Playgroud)

(请注意,这一切都来自示例

我尝试使用 sagemaker 2.4.1 像这样复制它

from sagemaker.deserializers import JSONDeserializer
from sagemaker.serializers import CSVSerializer

rcf_inference = rcf.deploy(
    initial_instance_count=1,
    instance_type='ml.m5.xlarge',
    serializer=CSVSerializer,
    deserializer=JSONDeserializer
)

results = rcf_inference.predict(some_numpy_array)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

TypeError: serialize() missing 1 required positional argument: 'data'
Run Code Online (Sandbox Code Playgroud)

我知道我错误地使用了 serliaizer/deserializer,但找不到关于如何使用它的好文档

小智 12

为了使用新的序列化器/反序列化器,您需要初始化它们,例如:

from sagemaker.deserializers import JSONDeserializer
from sagemaker.serializers import CSVSerializer

rcf_inference = rcf.deploy(
    initial_instance_count=1,
    instance_type='ml.m5.xlarge',
    serializer=CSVSerializer(),
    deserializer=JSONDeserializer()
)
Run Code Online (Sandbox Code Playgroud)