SageMaker - 快速指南
SageMaker - 简介
Amazon SageMaker 是一种完全托管的机器学习 (ML)服务,可帮助数据科学家和开发人员快速构建、训练和部署 ML 模型到可用于生产的托管环境中。它简化了机器学习生命周期的每个步骤,从数据准备到模型训练和部署。
- SageMaker 提供了一个直观的用户界面 (UI) 来运行 ML 工作流,使其工具可在各种集成开发环境 (IDE) 中使用。
- SageMaker 还支持流行的机器学习框架,如 TensorFlow、PyTorch 和 Scikit-learn。SageMaker 的这一功能使开发人员可以灵活地使用他们需要的工具。
要开始使用 Amazon SageMaker,您需要设置 SageMaker 笔记本实例或使用 SageMaker Studio。然后,您可以上传数据、选择 ML 算法、训练模型并部署它。
使用 Amazon SageMaker 进行机器学习的好处
在本节中,让我们了解使用 Amazon SageMaker 的好处 −
完全托管服务
Amazon SageMaker 是完全托管的,这意味着 AWS 会根据需要设置服务器、管理基础设施和扩展资源。用户可以专注于他们的机器学习任务,而不必担心系统维护或性能问题。
扩展您的 ML 模型
Amazon SageMaker 允许您随着数据和应用程序的扩展扩展您的机器学习模型。它还支持分布式训练,从而缩短处理时间。它还确保即使是复杂的模型也可以有效地进行训练。
成本效率
Amazon SageMaker 使用按需付费模式,这意味着您只需为您使用的内容付费。您无需花钱购买昂贵的硬件。
SageMaker 还提供自动模型调整和优化,帮助您减少计算时间和费用。
轻松的模型部署
借助 SageMaker,您可以轻松地在生产环境中部署机器学习模型。它提供了各种部署选项,例如批量预测、实时推理和 A/B 测试。
内置算法和预处理
用户不需要编写自己的算法,因为 Amazon SageMaker 提供了各种针对性能进行了优化的内置算法。它节省了大量的时间和精力。
SageMaker 提供安全的环境
Amazon SageMaker 提供强大的安全功能来保护您的数据和模型。它与 AWS Identity¬ and Access Management (IAM) 集成,允许您控制用户权限和访问级别。
支持多种框架
Amazon SageMaker 支持各种机器学习框架,如 TensorFlow、PyTorch 和 MXNet。它允许开发人员为他们的项目选择最佳工具。
如何设置 SageMaker?
按照以下步骤设置 Amazon SageMaker −
步骤 1:登录 AWS
设置 Amazon SageMaker 的第一步是登录 AWS 管理控制台。如果您没有 AWS 账户,则必须创建它。您可以在 AWS 网站上免费创建它。
步骤 2:导航到 SageMaker
登录后,在 AWS 控制台中搜索"SageMaker"并选择它。它将打开 Amazon SageMaker 仪表板,您可以在其中管理您的机器学习项目。
步骤 3:创建 SageMaker 笔记本实例
要开始构建机器学习模型,您需要创建一个笔记本实例。单击"笔记本实例"并选择"创建笔记本实例"。
步骤 4:配置笔记本实例
您需要根据您的计算需求选择实例类型。如果您是初学者,可以从较小的实例类型开始,例如 ml.t2.medium。
您还需要为笔记本实例命名。之后,选择具有必要权限的角色。
步骤 5:启动笔记本实例
配置完成后,单击"创建笔记本实例"。实例需要几分钟才能准备就绪。
准备就绪并运行后,单击"打开 Jupyter"以访问 Jupyter Notebook 界面。现在您可以开始编写代码、训练模型和运行实验了。
步骤 6:准备数据
在开始训练模型之前,您需要将数据上传到 Amazon S3 存储桶。
S3 是 AWS 推荐的用于 SageMaker 的存储服务。您可以直接从笔记本环境访问和预处理数据。
配置您的第一个 SageMaker 项目
一旦您的 SageMaker 笔记本实例准备就绪,您就可以开始配置您的第一个项目。请按照以下步骤操作:
步骤 1:选择预构建算法或编写您自己的算法
SageMaker 提供了许多针对性能优化的内置算法,例如 Linear Learner、XGBoost 等。您可以选择其中一种预构建算法,也可以使用 Python 编写自己的算法。
步骤 2:数据准备
数据准备是项目成功的关键。SageMaker 提供了用于清理和转换数据的工具。您可以直接从笔记本访问存储在 Amazon S3 中的数据集。
在将数据输入机器学习模型之前,使用数据准备库来探索、清理和预处理数据。
步骤 3:训练模型
数据准备完成后,下一步是训练模型。在 Jupyter Notebook 中,您可以指定算法、定义超参数并配置训练作业。
步骤 4:调整和优化
Amazon SageMaker 提供自动模型调整功能,可调整超参数以找到最佳模型性能。训练后,您可以查看结果并进一步调整模型以提高准确性。
您还可以使用 SageMaker 的内置优化工具来加快此过程。
步骤 5:部署模型
训练和优化模型后,就可以部署它了。 SageMaker 允许您将模型直接部署到终端节点以进行实时推理。
从 SageMaker 仪表板中选择"创建终端节点"并配置部署设置。部署后,您可以开始使用训练有素的模型进行预测。
第 6 步:监控和扩展
部署模型后,您可以监控其性能。对于监控,您可以使用 SageMaker 的内置工具。它提供实时监控、基于需求的自动扩展和版本控制。
SageMaker - 构建 ML 模型
阅读本章以了解如何使用 SageMaker 中的内置算法构建机器学习 (ML)模型。
在 Amazon SageMaker 中使用内置算法
按照以下步骤操作 −
步骤 1:选择内置算法
首先,您需要选择内置算法。Amazon SageMaker 提供了多种内置算法,例如 Linear Learner(用于分类和回归)、XGBoost(用于分类的提升树)和 K-means(用于聚类)。
步骤 2:准备数据
接下来,您需要将数据上传到 Amazon S3 存储桶。SageMaker 从 S3 读取数据并将其用于训练模型。数据应为 CSV 或 SageMaker 支持的其他格式。
步骤 3:创建 SageMaker 会话
打开您的 Jupyter Notebook。导入必要的库并创建 SageMaker 会话 −
import sagemaker from sagemaker import get_execution_role # 创建 SageMaker 会话 session = sagemaker.Session() # 定义 S3 bucket 和数据路径 bucket = 'your-s3-bucket-name' prefix = 'your-data-prefix' role = get_execution_role()
第 4 步:配置算法和训练作业
创建 SageMaker 会话后,我们需要配置内置的 Linear Learner 算法。
您可以使用 SageMaker 的 LinearLearner estimator。然后,设置超参数并启动训练作业,如下所示 −
from sagemaker.amazon.linear_learner import LinearLearner # 配置 LinearLearner 估算器 linear = LinearLearner(role=role, instance_count=1, instance_type='ml.m4.xlarge', predictor_type='binary_classifier', output_path=f's3://{bucket}/{prefix}/output') # 定义数据通道(训练和验证) train_data = f's3://{bucket}/{prefix}/train/train.csv' validation_data = f's3://{bucket}/{prefix}/validation/validation.csv' data_channels = {'train': train_data, 'validation': validation_data} # 训练模型 linear.fit(inputs=data_channels)
第 5 步:部署模型进行推理
训练后,将模型部署到 SageMaker 端点进行实时预测,如下所示 −
# 部署训练后的模型 predictor = linear.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge') # 进行预测 result = predictor.predict([[1.5, 2.5, 3.0]]) print(result)
将您自己的模型引入 Amazon SageMaker
Amazon SageMaker 还允许您引入自己的预训练模型并进行部署。按照以下步骤将您自己的模型引入 Amazon SageMaker −
步骤 1:保存您的模型
如果您使用 TensorFlow 或 PyTorch 等框架训练了模型,则可以将模型的权重和架构保存到 S3 存储桶中。
查看以下示例−
import torch import boto3 # 在本地保存 PyTorch 模型 torch.save(model.state_dict(), 'model.pth') # 将模型上传到 S3 s3 = boto3.client('s3') s3.upload_file('model.pth', 'your-s3-bucket-name', 'model/model.pth')
第 2 步:创建 SageMaker 模型
接下来,我们需要创建一个模型对象并指定托管模型的容器。您可以使用 SageMaker 的 Model 类来实现这一点。您还可以使用自定义 Docker 映像来为您的模型提供服务,如下所示 −
from sagemaker.model import Model # 定义模型 model = Model(model_data='s3://your-s3-bucket-name/model/model.pth', role=role, image_uri='your-custom-docker-image') # 部署模型 predictor = model.deploy(initial_instance_count=1, instance_type='ml.m4.xlarge')
步骤 3:部署模型
创建模型后,将其部署到 SageMaker 终端节点,使其可用于推理,如下所示 −
# 使用部署的模型执行推理 result = predictor.predict([[1.5, 2.5, 3.0]]) print(result)
SageMaker - 训练 ML 模型
您可以使用 Amazon SageMaker 的完全托管训练服务轻松训练机器学习模型。
要训练ML 模型,您可以使用 SageMaker 的内置算法,也可以使用我们自己的模型。在这两种情况下,SageMaker 都允许您高效地运行训练作业。
如何使用 Amazon SageMaker 训练模型?
让我们了解如何借助下面给出的 Python 程序使用 SageMaker 训练模型 −
步骤 1:准备数据
首先,准备数据并以 CSV 格式或任何其他合适的格式将其存储在 Amazon S3 中。Amazon SageMaker 从 S3 读取数据以进行训练作业。
步骤 2:定义估算器
现在,您需要定义估算器。您可以使用 Estimator 对象来配置训练作业。对于此示例,我们将使用内置 XGBoost 算法训练模型,如下所示 −
import sagemaker from sagemaker import get_execution_role from sagemaker.inputs import TrainingInput # 定义您的 SageMaker 会话和角色 session = sagemaker.Session() role = get_execution_role() # 定义 XGBoost 估算器 xgboost = sagemaker.estimator.Estimator( image_uri=sagemaker.image_uris.retrieve("xgboost", session.boto_region_name), role=role, instance_count=1, instance_type="ml.m4.xlarge", output_path=f"s3://your-bucket/output", sagemaker_session=session, ) # 设置超参数 xgboost.set_hyperparameters(objective="binary:logistic", num_round=100)
步骤 3:指定训练数据
我们需要指定训练数据以供进一步处理。您可以使用 TrainingInput 类指定数据在 S3 中的位置,如下所示 −
# 在 S3 中指定训练数据 train_input = TrainingInput (s3_data="s3://your-bucket/train", content_type="csv") validation_input = TrainingInput (s3_data="s3://your-bucket/validation", content_type="csv")
第 4 步:训练模型
最后,通过调用 fit 方法启动训练作业,如下所示 −
# 训练模型 xgboost.fit({"train": train_input, "validation": validation_input})
训练完成后,SageMaker 将自动配置资源、运行训练作业并将模型输出保存到指定的 S3 位置。
使用 SageMaker 进行分布式训练
Amazon SageMaker 支持分布式训练,使您能够跨多个实例扩展训练。这在处理大型数据集或深度学习模型时非常有用。 SageMaker 提供支持分布式训练的 TensorFlow 和 PyTorch 等框架。
要启用分布式训练,您可以增加 Estimator 对象中的 instance_count 参数。
示例
下面给出了使用 TensorFlow 的示例 −
from sagemaker.tensorflow import TensorFlow # 使用分布式训练定义 TensorFlow 估算器 tensorflow_estimator = TensorFlow( entry_point="train.py", role=role, instance_count=2, instance_type="ml.p3.2xlarge", framework_version="2.3", py_version="py37", ) # 在多个实例上训练模型 tensorflow_estimator.fit({"train": train_input, "validation": validation_input})
在此示例中,SageMaker 使用两个 ml.p3.2xlarge 实例进行分布式训练。它将减少大型模型的训练时间。
SageMaker - 部署 ML 模型
训练模型后,下一步是部署它进行预测。Amazon SageMaker 允许您实时将模型部署到 SageMaker 终端节点或对大型数据集执行批量推理。部署后,您可以轻松地将机器学习模型集成到生产应用程序中。
将模型部署到 SageMaker 终端节点
使用 Amazon SageMaker 部署模型是一项非常简单的任务。训练后,您可以实时将模型部署到终端节点。然后,此终端节点将允许您执行实时预测。让我们看看下面的步骤 −
步骤 1:部署模型
一旦您的模型经过训练,您就可以使用 deploy 方法创建用于实时推理的端点,如下所示 −
# 将模型部署到 SageMaker 端点 predictor = xgboost.deploy(initial_instance_count=1, instance_type="ml.m4.xlarge") # 执行实时推理 result = predictor.predict([[5.1, 3.5, 1.4, 0.2]]) print(result)
在上面的示例中,模型部署到 ml.m4.xlarge 实例。部署后。您可以使用预测方法对新数据进行推理。
第 2 步:监控终端节点
SageMaker 会自动为您管理终端节点。您可以使用 SageMaker 仪表板监控终端节点的性能并根据需要对其进行扩展。SageMaker 还支持根据流量自动扩展。
使用 Amazon SageMaker 进行批量推理
SageMaker 具有批量推理功能,当您需要对不需要实时响应的大型数据集进行预测时,此功能非常有用。在这种情况下,SageMaker 会批量处理数据并将结果输出到 S3 存储桶。
按照下面给出的步骤 −
步骤 1:配置 Transformer
训练后,您可以创建一个 Transformer 对象来执行批量推理,如下所示 −
# 配置转换器 transformer = xgboost.transformer( instance_count=1, instance_type="ml.m4.xlarge", output_path="s3://your-bucket/batch-output" ) # 执行批量推理 transformer.transform(data="s3://your-bucket/batch-input", content_type="text/csv", split_type="Line")
第 2 步:运行批处理作业
SageMaker 将对存储在 S3 中的指定数据集运行批量推理作业。结果将保存到 S3 存储桶中的 output_path。
SageMaker - 监控和优化
监控机器学习模型是确保模型在生产中部署时按预期执行的重要步骤。Amazon SageMaker 提供各种工具来监控模型、跟踪指标并检测性能随时间下降的情况。
SageMaker 模型监控器
SageMaker 模型监控工具持续实时跟踪模型的质量。它会监控传入数据是否存在任何类型的不一致,并在模型的预测与预期不同时向您发出警报。此工具可确保您的模型始终保持准确可靠。
CloudWatch 集成
另一个监控工具是 CloudWatch。Amazon SageMaker 可轻松与 Amazon CloudWatch 集成,以实时收集、跟踪和可视化性能指标。它允许您配置自定义指标,例如准确性或延迟。
自动重新训练
SageMaker 还支持自动重新训练,允许您设置触发器以在满足某些条件时重新训练模型。通过自动重新训练,您可以确保您的模型与最新数据保持同步。
超参数调整和优化
超参数调整在实现 ML 模型的最佳性能方面起着重要作用。 Amazon SageMaker 的超参数优化功能允许您自动搜索模型的最佳超参数组合。
在 SageMaker 中实现超参数调整
SageMaker 的自动超参数调整也称为超参数优化 (HPO)。它通过运行具有不同参数组合的多个训练作业来帮助您识别最佳超参数。
示例
下面给出了 SageMaker 中超参数调整的基本 Python 代码示例 −
from sagemaker.tuner import HyperparameterTuner, ContinuousParameter # 定义需要调整的超参数 hyperparameter_ranges = { 'eta': ContinuousParameter(0.01, 0.2), 'max_depth': ContinuousParameter(3, 10) } # Set up the tuner tuner = HyperparameterTuner( estimator=xgboost_estimator, objective_metric_name='validation:accuracy', hyperparameter_ranges=hyperparameter_ranges, max_jobs=10, max_parallel_jobs=2 ) # 开始调优工作 tuner.fit({"train": train_input, "validation": validation_input})
SageMaker - 定价
Amazon SageMaker 定价基于即用即付模式,这意味着您只需为使用的资源付费。定价取决于机器学习工作流的不同组件。
了解 Amazon SageMaker 定价
SageMaker 的主要定价组件如下所示 −
笔记本实例
当您使用 SageMaker 集成的 Jupyter 笔记本开发机器学习模型时,您需要根据实例类型和使用时间付费。
每种实例类型都有不同的小时费率,具体取决于它提供的 CPU、内存和 GPU 资源。您可以根据需要从多种实例类型中进行选择。
训练作业
对于训练 ML 模型,SageMaker 根据计算资源和训练过程的持续时间收取费用。例如,如果您使用基于 GPU 的实例进行更快的训练,则费用会更高。
另一方面,如果您使用基于 CPU 的实例,则费用会更低。费用还根据您使用的区域和您正在训练的模型类型(ML、DL 或生成式 AI)而有所不同。
SagaMaker 会向您收取训练实例和训练作业期间使用的任何其他服务的费用。这些服务包括数据传输和 S3 存储。
托管/推理端点
SageMaker 还会向您收取托管费用。一旦您的模型经过训练并部署到 SageMaker 端点,托管就开始了。托管费用取决于用于部署的实例类型和活动端点的数量。
与训练作业一样,性能更高的实例(如 GPU)成本高昂。账单按每个端点的小时计算。
S3 存储和数据传输
SageMaker 依赖 Amazon S3 来存储数据集。您将需要为 S3 中的数据存储以及 S3 和 SageMaker 之间的任何数据传输付费。这些成本取决于所使用的数据的大小以及传入和传出云的数据量。
SageMaker 的成本优化技巧
以下是使用 SageMaker 时管理和降低成本的一些方法 −
使用竞价型实例进行训练作业
降低 SageMaker 训练成本的最有效方法之一是使用竞价型实例。竞价型实例允许您以较低的价格使用未使用的 Amazon EC2 容量。
选择正确的实例类型
选择正确的实例类型有助于降低成本。因此,请仅选择那些与您的开发、训练和托管需求的工作负载相匹配的实例类型。
例如,如果您正在进行一项小型实验,则基于 CPU 的实例就足够了。您无需为此使用昂贵的 GPU 实例。
使用 Amazon SageMaker 托管 Spot 训练
在 Amazon SageMaker 中设置训练作业时,您可以启用托管 Spot 训练。此功能会自动使用 Spot 实例将训练作业的成本降低高达 70%。
监控和调整使用情况
您还可以使用 Amazon CloudWatch 和 AWS 预算 来监控您的 SageMaker 使用情况和成本。您还可以在其中设置警报。您还可以经常检查使用情况以终止未使用的端点。
利用免费套餐和 AWS 积分
如果您是 SageMaker 的初学者,AWS 提供免费套餐,其中包括 250 小时免费 t2.medium 笔记本实例和 50 小时 m4.xlarge 实例使用,用于训练作业。