使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能进行增量培训。 垂直搜索。 哎。

使用 Amazon SageMaker JumpStart 进行增量培训

十二月2020, AWS 宣布全面推出 Amazon SageMaker JumpStart, 的能力 亚马逊SageMaker 帮助您快速轻松地开始使用机器学习 (ML)。 SageMaker 快速启动 提供跨流行 ML 任务的各种预训练模型的一键式微调和部署,以及解决常见业务问题的端到端解决方案的选择。 这些功能消除了 ML 流程每个步骤的繁重工作,从而更容易开发高质量模型并缩短部署时间。

所有 JumpStart 内容以前只能通过 亚马逊SageMaker Studio,它提供了一个 用户友好的图形界面 与功能进行交互。 最近,我们也 宣布推出 易于使用的 JumpStart API 作为 SageMaker Python SDK 的扩展,允许您在自己的数据集上以编程方式部署和微调大量 JumpStart 支持的预训练模型。 此次发布解锁了 JumpStart 功能在您的代码工作流、MLOps 管道以及您通过 SDK 与 SageMaker 交互的任何其他地方的使用。

在这篇文章中,我们很高兴地宣布所有可训练的 JumpStart 模型现在都支持增量训练。 增量训练允许您使用扩展数据集训练已经微调的模型,该扩展数据集包含先前微调运行中未考虑的基础模式,这会导致模型性能不佳。 增量训练可以节省时间和资源,因为您不需要从头开始重新训练模型。 如果你想直接跳转到我们在这篇文章中解释的 JumpStart API 代码,你可以参考 样本笔记本.

JumpStart 概述

JumpStart 是一款多方面的产品,包含不同的功能,可帮助您在 SageMaker 上快速开始使用 ML。 在撰写本文时,JumpStart 使您能够执行以下操作:

  • 为常见的 ML 任务部署预训练模型 – JumpStart 通过提供在大型、公开可用的数据集上预训练的模型的简单部署,使您无需开发工作即可解决常见的 ML 任务。 ML 研究社区投入了大量精力,使大多数最近开发的模型可供公众使用。 JumpStart 托管了 300 多个模型的集合,涵盖了 15 个最流行的 ML 任务,例如对象检测、文本分类和文本生成,使初学者可以轻松使用它们。 这些模型取自流行的模型中心,例如 TensorFlow、PyTorch、Hugging Face 和 MXNet Hub。
  • 微调预训练模型 – JumpStart 允许您微调预训练模型,而无需编写自己的训练算法。 在 ML 中,将在一个领域学到的知识转移到另一个领域的能力称为 转移学习. 您可以使用迁移学习在较小的数据集上生成准确的模型,其训练成本比训练原始模型所涉及的成本低得多。 JumpStart 还包括基于 LightGBM、CatBoost、XGBoost 和 Scikit-learn 的流行训练算法,您可以从头开始训练以进行表格回归和分类。
  • 使用预先构建的解决方案 – JumpStart 为常见的 ML 用例(例如需求预测以及工业和金融应用程序)提供了一组 17 个解决方案,您只需单击几下即可部署这些解决方案。 解决方案是端到端的 ML 应用程序,将各种 AWS 服务组合在一起以解决特定的业务用例。 他们使用 AWS CloudFormation 用于快速部署的模板和参考架构,这意味着它们是完全可定制的。
  • 使用 SageMaker 算法的笔记本示例 – SageMaker 提供了一套内置算法来帮助数据科学家和机器学习从业者快速开始训练和部署机器学习模型。 JumpStart 提供了可用于快速应用这些算法的示例笔记本。
  • 查看培训视频和博客 – JumpStart 还提供大量博客文章和视频,教您如何使用 SageMaker 中的不同功能。

JumpStart 接受自定义 VPC 设置和 AWS密钥管理服务 (AWS KMS) 加密密钥,因此您可以在企业环境中安全地使用可用的模型和解决方案。 您可以在 Studio 中或通过 SageMaker Python SDK 将您的安全设置传递给 JumpStart。

图像分类

图像分类是指将图像分类到训练数据集中的一类标签中。 您可以将模型微调到包含属于任意数量类的图像的任何给定数据集。 JumpStart 上可用于微调的模型将分类层附加到相应的特征提取器模型,并将层参数初始化为随机值。 分类层的输出维度是根据输入数据中的类数确定的。 微调步骤调整分类层参数,同时保持特征提取器模型的参数冻结,并返回微调后的模型。 目标是最小化输入数据的预测误差。

对于我们的数据集,输入是一个目录,其子目录与类的数量一样多。 每个子目录都应该有属于该类的 .jpg 格式的图像。 如果训练数据包含来自两个类的图像,则输入目录应类似于以下层次结构: rosesdandelion:

input_directory |--roses |--abc.jpg |--def.jpg |--dandelion |--ghi.jpg |--jkl.jpg

文件夹名、类名和 .jpg 文件名可以是任何名称。

我们提供 tf_flowers1 dataset 作为微调模型的默认数据集。 该数据集包含五种花卉的图像。 数据集已从 TensorFlow.

演练概述

以下部分提供了通过 Studio UI 和 JumpStart API 使用 JumpStart 执行图像分类的分步演示。

我们执行以下步骤:

  1. 通过 Studio UI 访问 JumpStart:
    1. 微调预训练模型。
    2. 部署微调模型。
    3. 增量训练微调模型并重新部署。
  2. 通过 SageMaker Python SDK 以编程方式使用 JumpStart:
    1. 微调预训练模型。
    2. 部署微调模型。
    3. 增量训练微调模型并重新部署。

通过 Studio UI 访问 JumpStart

在本节中,我们将演示如何通过 Studio UI 微调和部署 JumpStart 模型。 此外,我们还展示了如何增量训练您之前微调过的模型。

微调预训练模型

以下视频向您展示了如何在 JumpStart 上找到预训练的图像分类模型并对其进行微调。 模型页面包含有关模型的有价值信息、如何使用它、预期的数据格式以及一些微调细节。

出于演示目的,我们使用默认提供的数据集对模型进行微调,即 tf_flowers 数据集,由不同品种的花组成。 对您自己的数据集进行微调涉及采用正确的数据格式(如模型页面所述),将其上传到 亚马逊简单存储服务 (Amazon S3),并在数据源配置中指定其位置。

我们使用默认设置的相同超参数值(时期数、学习率和批量大小)。 我们还使用 GPU 支持的 ml.p3.2xlarge 实例作为 SageMaker 训练实例。

您可以直接在 Studio 控制台上监控您的训练作业,并在完成后收到通知。

部署微调模型

训练完成后,您可以从包含训练作业详细信息的同一页面部署微调模型。 为了部署我们的模型,我们选择了一个不同的实例类型 ml.p2.xlarge。 它仍然提供低推理延迟所需的 GPU 加速,但价格更低。 配置 SageMaker 托管实例后,选择 部署. 可能需要 5-10 分钟,直到您的持久端点启动并运行。

然后您的端点就可以运行并准备好响应推理请求了!

为了加快推理时间,JumpStart 提供了一个示例笔记本,向您展示如何在新部署的端点上运行推理。 选择 打开笔记本使用端点 从工作室。

增量训练微调模型并部署

微调完成后,您可以进一步训练模型以提高性能。 这一步与初始微调过程非常相似,只是我们使用已经微调的模型作为起点。 您可以使用新数据,但数据集格式必须相同(相同的类集)。

通过 SageMaker SDK 以编程方式使用 JumpStart

在前面的部分中,我们展示了如何使用 JumpStart UI 以交互方式微调、部署和增量训练模型,只需单击几下即可。 您还可以通过使用集成到 SageMaker SDK 中的 API 以编程方式使用 JumpStart 的模型和轻松的微调。 我们现在通过一个快速示例来说明如何复制前面的过程。 此演示中的所有步骤都可以在随附的笔记本中找到 JumpStart 简介 – 图像分类.

微调预训练模型

要微调选定的模型,我们需要获取该模型的 URI,以及用于训练的训练脚本和容器映像的 URI。 幸运的是,这三个输入仅取决于模型名称、版本(有关可用模型的列表,请参阅 JumpStart 可用型号表),以及要训练的实例类型。 下面的代码片段演示了这一点:

from sagemaker import image_uris, model_uris, script_uris model_id, model_version = "pytorch-ic-mobilenet-v2", "1.0.0"
training_instance_type = "ml.p3.2xlarge" # Retrieve the docker image
train_image_uri = image_uris.retrieve( region=None, framework=None, model_id=model_id, model_version=model_version, image_scope="training", instance_type=training_instance_type,
) # Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training") # Retrieve the pre-trained model tarball to further fine-tune
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

我们检索 model_id 对应于我们之前使用的相同模型。 标识符中的 ic 对应于图像分类。

您现在可以使用 SageMaker SDK 在您自己的自定义数据集上微调此 JumpStart 模型。 我们使用相同的 tf_flowers 公开托管在 Amazon S3 上的数据集,方便地专注于情绪分析。 如上一节所述,您的数据集应结构化以进行微调。 请参阅以下示例代码:

# URI of your training dataset
training_dataset_s3_path = "s3://jumpstart-cache-prod-us-west-2/training-datasets/tf_flowers/"
training_job_name = name_from_base(f"jumpstart-example-{model_id}-transfer-learning") # Create SageMaker Estimator instance
ic_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=train_model_uri, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=s3_output_location,
) # Launch a SageMaker Training job by passing s3 path of the training data
ic_estimator.fit({"training": training_dataset_s3_path}, logs=True)

我们为我们选择的模型获得了与我们在上一节中看到的相同的默认超参数,使用 sagemaker.hyperparameters.retrieve_default(). 然后我们实例化一个 SageMaker 估计器并调用 .fit 方法开始微调我们的模型,将 Amazon S3 URI 传递给我们的训练数据。 如您所见, entry_point 提供的脚本被命名 transfer_learning.py (其他任务和模型相同),输入数据通道传递给 .fit 必须命名 training.

部署微调模型

训练完成后,您可以部署经过微调的模型。 为此,我们只需要获取推理脚本 URI(确定模型在部署后如何用于推理的代码)和推理容器映像 URI,其中包括一个适当的模型服务器来托管我们选择的模型。 请参阅以下代码:

# Retrieve the inference docker container uri
deploy_image_uri = image_uris.retrieve( region=None, framework=None, image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,
)
# Retrieve the inference script uri
deploy_source_uri = script_uris.retrieve( model_id=model_id, model_version=model_version, script_scope="inference"
) endpoint_name = name_from_base(f"jumpstart-example-FT-{model_id}-") # Use the estimator from the previous step to deploy to a SageMaker endpoint
finetuned_predictor = ic_estimator.deploy( initial_instance_count=1, instance_type=inference_instance_type, entry_point="inference.py", image_uri=deploy_image_uri, source_dir=deploy_source_uri, endpoint_name=endpoint_name,
)

几分钟后,我们的模型就部署好了,我们可以实时从中得到预测!

接下来,我们调用端点来预测示例图像中存在什么类型的花。 我们使用 query_endpointparse_response 辅助函数,在随附的 笔记本.

query_response = finetuned_predictor.predict( img, {"ContentType": "application/x-image", "Accept": "application/json;verbose"} )
model_predictions = json.loads(query_response)
predicted_label = model_predictions["predicted_label"]
display( HTML( f'<img src={image_filename} alt={image_filename} align="left" style="width: 250px;"/>' f"<figcaption>Predicted Label: {predicted_label}</figcaption>" )
)

增量训练微调模型并重新部署

我们可以通过在新图像上进一步训练来提高微调模型的性能。 您可以为此使用任意数量的新图像或旧图像,但是数据集格式必须保持不变(相同的类集)。 增量训练步骤类似于微调过程,但有一个重要区别:在初始微调中,我们从预训练模型开始,而在增量训练中,我们从现有微调模型开始。 请参阅以下代码:

last_trained_model_path = f"{s3_output_location}/{last_training_job_name}/output/model.tar.gz"
incremental_s3_output_location = f"s3://{output_bucket}/{incremental_output_prefix}/output"incremental_train_estimator = Estimator( role=aws_role, image_uri=train_image_uri, source_dir=train_source_uri, model_uri=last_trained_model_path, entry_point="transfer_learning.py", instance_count=1, instance_type=training_instance_type, max_run=360000, hyperparameters=hyperparameters, output_path=incremental_s3_output_location, base_job_name=incremental_training_job_name,
) incremental_train_estimator.fit({"training": training_dataset_s3_path}, logs=True)

训练完成后,我们可以使用与上一节中描述的步骤相同的步骤来部署模型。

结论

JumpStart 是 SageMaker 中的一项功能,可让您快速开始使用 ML。 JumpStart 使用开源预训练模型来解决常见的 ML 问题,例如图像分类、对象检测、文本分类、句子对分类和问答。

在这篇文章中,我们向您展示了如何微调和部署预训练的图像分类模型。 我们还展示了如何增量训练用于图像分类的微调模型。 使用 JumpStart,您无需编写代码即可轻松执行此过程。 自行尝试解决方案,并在评论中告诉我们它是如何进行的。 要了解有关 JumpStart 的更多信息,请查看 AWS re:Invent 2020 视频 借助 Amazon SageMaker JumpStart 在几分钟内开始使用 ML.

参考资料

  1. TensorFlow 团队, 2019

作者简介

使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能进行增量培训。 垂直搜索。 哎。Vivek Madan 博士 是 Amazon SageMaker JumpStart 团队的一名应用科学家。 他获得了博士学位。 来自伊利诺伊大学厄巴纳-香槟分校,曾是佐治亚理工学院的博士后研究员。 他是机器学习和算法设计方面的活跃研究员,并在 EMNLP、ICLR、COLT、FOCS 和 SODA 会议上发表过论文。

使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能进行增量培训。 垂直搜索。 哎。若昂·莫拉 是 Amazon Web Services 的 AI/ML 专家解决方案架构师。 他主要专注于 NLP 用例并帮助客户优化深度学习模型训练和部署。 他还是低代码 ML 解决方案和 ML 专用硬件的积极支持者。

使用 Amazon SageMaker JumpStart PlatoBlockchain 数据智能进行增量培训。 垂直搜索。 哎。Ashish Khetan 博士 是一名高级应用科学家 亚马逊SageMaker JumpStartAmazon SageMaker 内置算法 并帮助开发机器学习算法。 他是机器学习和统计推断领域的活跃研究员,在 NeurIPS、ICML、ICLR、JMLR、ACL 和 EMNLP 会议上发表了多篇论文。

时间戳记:

更多来自 AWS机器学习