减少将模型部署到 Amazon SageMaker 以测试 PlatoBlockchain 数据智能所需的时间。 垂直搜索。 人工智能。

减少将模型部署到 Amazon SageMaker 进行测试所需的时间

数据科学家经常在本地训练他们的模型并寻找合适的托管服务来部署他们的模型。 不幸的是,没有一套机制或指南可以将预训练模型部署到云端。 在这篇文章中,我们着眼于部署经过训练的模型 亚马逊SageMaker 托管以减少您的部署时间。

SageMaker 是一项完全托管的机器学习 (ML) 服务。 使用 SageMaker,您可以快速构建和训练 ML 模型,并将它们直接部署到生产就绪的托管环境中。 此外,您不需要管理服务器。 您将获得一个集成的 Jupyter 笔记本环境,可以轻松访问您的数据源。 您可以使用自己的算法执行数据分析、训练模型和测试它们,或者使用 SageMaker 提供的 ML 算法,这些算法经过优化,可以有效地针对分布在多台机器上的大型数据集运行。 培训和托管按使用分钟数计费,没有最低费用,也没有前期承诺。

解决方案概述

数据科学家有时会使用他们的 IDE 在本地训练模型,然后将这些模型发送给 ML 工程团队进行部署,或者只是在功能强大的机器上本地运行预测。 在这篇文章中,我们介绍了一个 Python 库,它简化了将模型部署到 SageMaker 的过程 托管 在实时或无服务器端点上。

这个 Python 库为数据科学家提供了一个简单的界面,可以快速开始使用 SageMaker,而无需了解任何低级 SageMaker 功能。

如果您有使用首选 IDE 在本地训练的模型并希望从云的规模中受益,则可以使用此库将模型部署到 SageMaker。 使用 SageMaker,除了基于云的 ML 平台的所有扩展优势之外,您还可以访问专用的训练工具(分布式训练、超参数调整)、实验管理、模型管理、偏差检测、模型可解释性等可以在 ML 生命周期的任何方面为您提供帮助的功能。 您可以从三个最流行的 ML 框架中进行选择:Scikit-learn、PyTorch 和 TensorFlow,并且可以选择您想要的计算类型。 沿途提供默认值,因此该库的用户可以部署他们的模型,而无需做出复杂的决策或学习新概念。 在这篇文章中,我们将向您展示如何开始使用此库并优化在 SageMaker 托管上部署您的 ML 模型。

图书馆可以在 GitHub存储库.

SageMaker 迁移工具包

SageMakerMigration 类可通过发布到 GitHub 的 Python 库获得。 存储库中提供了安装此库的说明; 确保您按照自述文件正确设置您的环境。 安装此库后,本文的其余部分将讨论如何使用它。

SageMakerMigration 类包含对 SageMaker API 的高级抽象,可显着减少将模型部署到 SageMaker 所需的步骤,如下图所示。 这旨在用于实验,以便开发人员可以快速开始并测试 SageMaker。 它不适用于生产迁移。

对于 Scikit-learn、PyTorch 和 TensorFlow 模型,该库支持将经过训练的模型部署到 SageMaker 实时端点或无服务器端点。 要了解有关 SageMaker 中推理选项的更多信息,请参阅 部署模型进行推理.

实时与无服务器端点

实时推理非常适合具有实时、交互式、低延迟要求的推理工作负载。 您可以将模型部署到 SageMaker 托管服务并获取可用于推理的端点。 这些端点是完全托管的并支持自动缩放。

SageMaker Serverless Inference 是一种专门构建的推理选项,可让您轻松部署和扩展 ML 模型。 无服务器推理非常适合在流量激增之间具有空闲期并且可以容忍冷启动的工作负载。 无服务器端点会根据流量自动启动计算资源并对其进行扩展和扩展,从而无需选择实例类型或管理扩展策略。 这消除了选择和管理服务器的无差别繁重工作。

根据您的使用案例,您可能希望在 SageMaker 上快速托管您的模型,而无需实际始终打开实例并产生成本,在这种情况下,无服务器端点是一个很好的解决方案。

准备训练好的模型和推理脚本

确定要在 SageMaker 上部署的模型后,您必须确保模型以正确的格式呈现给 SageMaker。 SageMaker 端点通常由两个组件组成:经过训练的模型工件(.pth、.pkl 等)和推理脚本。 推理脚本并不总是强制性的,但如果未提供,则会应用您正在使用的服务容器的默认处理程序。 如果您需要自定义输入/输出功能以进行推理,则必须提供此脚本。

经过训练的模型工件只是一个保存的 Scikit-learn、PyTorch 或 TensorFlow 模型。 对于 Scikit-learn,这通常是一个 pickle 文件,对于 PyTorch,这是一个 .pt 或 .pth 文件,对于 TensorFlow,这是一个包含资产、.pb 文件和其他变量的文件夹。

通常,您需要能够控制模型处理输入和执行推理的方式,并控制响应的输出格式。 使用 SageMaker,您可以提供 推理脚本 添加此自定义。 SageMaker 使用的任何推理脚本都必须具有以下四个处理函数中的一个或多个: model_fn, input_fn, predict_fnoutput_fn.

请注意,这四个功能适用于 PyTorchScikit学习 特别是容器。 TensorFlow 的处理程序略有不同,因为它集成了 TensorFlow服务. 对于使用 TensorFlow 的推理脚本,您有两个 模型处理程序:输入处理程序和输出处理程序。 同样,它们具有您可以使用的相同预处理和后处理目的,但它们的配置略有不同以集成 TensorFlow服务. 对于 PyTorch 模型,model_fn 是推理脚本中的强制函数。

模型_fn

这是您调用 SageMaker 终端节点时首先调用的函数。 这是您编写代码以加载模型的地方。 例如:

def model_fn(model_dir):
    model = Your_Model()
    with open(os.path.join(model_dir, 'model.pth'), 'rb') as f:
        model.load_state_dict(torch.load(f))
    return model

根据模型的框架和类型,此代码可能会发生变化,但函数必须返回一个已初始化的模型。

输入_fn

这是调用端点时调用的第二个函数。 该函数将发送到端点的数据用于推理,并将其解析为模型生成预测所需的格式。 例如:

def input_fn(request_body, request_content_type):
    """An input_fn that loads a pickled tensor"""
    if request_content_type == 'application/python-pickle':
        return torch.load(BytesIO(request_body))
    else:
        # Handle other content-types here or raise an Exception
        # if the content type is not supported.
        pass

request_body 包含要用于从模型生成推理的数据,并在此函数中进行解析,使其具有所需的格式。

预测函数

这是调用模型时调用的第三个函数。 此函数采用从返回的预处理输入数据 input_fn 并使用从返回的模型 model_fn 做出预测。 例如:

def predict_fn(input_data, model):
    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    model.to(device)
    model.eval()
    with torch.no_grad():
        return model(input_data.to(device))

您可以选择添加 output_fn 解析输出 predict_fn 在返回给客户之前。 函数签名是 def output_fn(prediction, content_type).

将您的预训练模型移至 SageMaker

拥有经过训练的模型文件和推理脚本后,您必须将这些文件放在一个文件夹中,如下所示:

#SKLearn Model

model_folder/
    model.pkl
    inference.py
    
# Tensorflow Model
model_folder/
    0000001/
        assets/
        variables/
        keras_metadata.pb
        saved_model.pb
    inference.py
    
# PyTorch Model
model_folder/
    model.pth
    inference.py

准备好模型和推理脚本并将其保存在此文件夹结构中后,您的模型就可以在 SageMaker 上部署了。 请参阅以下代码:

from sagemaker_migration import frameworks as fwk

if __name__ == "__main__":
    ''' '''
    sk_model = fwk.SKLearnModel(
        version = "0.23-1", 
        model_data = 'model.joblib',
        inference_option = 'real-time',
        inference = 'inference.py',
        instance_type = 'ml.m5.xlarge'
    )
    sk_model.deploy_to_sagemaker()

部署终端节点后,确保通过 SageMaker 控制台或通过 删除端点 Boto3 API 调用。

结论

SageMaker 迁移工具包项目的目标是让数据科学家能够轻松地将他们的模型载入 SageMaker,以利用基于云的推理。 该存储库将继续发展并支持更多将工作负载迁移到 SageMaker 的选项。 该代码是开源的,我们欢迎社区通过拉取请求和问题进行贡献。

查询 GitHub存储库 探索有关使用 SageMaker 迁移工具包的更多信息,并随时提供示例或功能请求以添加到项目中!


关于作者

减少将模型部署到 Amazon SageMaker 以测试 PlatoBlockchain 数据智能所需的时间。 垂直搜索。 人工智能。基里特·达达卡 是在 Amazon SageMaker Service SA 团队工作的 ML 解决方案架构师。 在加入 AWS 之前,Kirit 曾在早期的 AI 初创公司工作,随后在 AI 研究、MLOps 和技术领导方面担任过各种咨询工作。

减少将模型部署到 Amazon SageMaker 以测试 PlatoBlockchain 数据智能所需的时间。 垂直搜索。 人工智能。拉姆·维吉拉茹 是 SageMaker 服务团队的 ML 架构师。 他专注于帮助客户在 Amazon SageMaker 上构建和优化他们的 AI/ML 解决方案。 在业余时间,他喜欢旅行和写作。

时间戳记:

更多来自 AWS机器学习