使用 Amazon SageMaker 进行云训练和部署

Open In Colab Open In SageMaker Studio Lab

为了帮助 AutoGluon 模型训练和部署,AWS 开发了一套训练和推理深度学习容器。这些容器可用于在 CPU 和 GPU 实例上训练模型,并可部署为 SageMaker 端点或用作批量转换作业。

完整的端到端示例可在amazon-sagemaker-examples仓库中找到。

训练其他类型的预测器

这些示例主要关注 TabularPredictor。对于训练其他类型的 AutoGluon 预测器,例如 MultiModalPredictor,您提供的训练脚本将与上面的类似。您需要将 TabularPredictor 替换为 MultiModalPredictor

为确保容器可以在没有外部网络访问的情况下加载模型(SageMaker 容器可能无法从 HuggingFace 获取模型),MultiModalPredictor 类型的模型 artifacts 需要使用 standalone=True 保存:predictor.save(path='MY_PATH', standalone=True)

请记住,您想要训练的特定预测器类型可能不支持与 TabularPredictor 相同的功能集。例如,并非所有预测器都存在 leaderboard 功能。

关于图像模态的注意事项

要在图像模态上进行推理,您需要将图像信息(例如以字节形式)嵌入到测试数据的某一列中。然后在推理容器中,如果您使用的是 MultiModalPredictor,您只需解码上述图像列并将测试数据馈送到其中即可。

例如,编码图像

def read_image_bytes_and_encode(image_path):
    image_obj = open(image_path, 'rb')
    image_bytes = image_obj.read()
    image_obj.close()
    b85_image = base64.b85encode(image_bytes).decode("utf-8")

    return b85_image


def convert_image_path_to_encoded_bytes_in_dataframe(dataframe, image_column):
    assert image_column in dataframe, 'Please specify a valid image column name'
    dataframe[image_column] = [read_image_bytes_and_encode(path) for path in dataframe[image_column]]

    return dataframe

test_data_image_column = "YOUR_COLUMN_CONTAINING_IMAGE_PATH"
test_data = convert_image_path_to_encoded_bytes_in_dataframe(test_data, test_data_image_column)

解码图像

test_data[image_column] = [base64.b85decode(bytes) for bytes in test_data[image_column]]

请注意,如果您使用的是 TabularPredictor,您需要将图像保存到磁盘,并相应地使用图像路径更新测试数据。

例如,在推理容器中解码图像并保存到磁盘

image_index = 0


def _save_image_and_update_dataframe_column(bytes):
    global image_index
    im = Image.open(BytesIO(base64.b85decode(bytes)))
    im_name = f'Image_{image_index}.png'
    im.save(im_name)
    image_index += 1

    return im_name


test_data[image_column] = [_save_image_and_update_dataframe_column(bytes) for bytes in test_data[image_column]]