32、优化预测成本与性能:SageMaker的实用技巧

SageMaker优化预测成本与性能技巧

优化预测成本与性能:SageMaker的实用技巧

在机器学习项目中,成本优化和性能提升是至关重要的。本文将介绍如何使用Amazon SageMaker Neo编译模型,以及如何在不同设备上部署模型,同时提供一份成本优化清单。

探索用Neo编译的模型

通过查看传递给 compile_model() API的输出位置,我们可以看到Neo生成的模型工件:

$ aws s3 ls s3://sagemaker-eu-west-1-123456789012/dogscats/output-neo/
model-ml_c5.tar.gz

将其复制到本地并解压后,我们发现它包含原始模型及其编译版本:

$ aws s3 cp s3://sagemaker-eu-west-1-123456789012/dogscats/output-neo/model-ml_c5.tar.gz .
$ tar xvfz model-ml_c5.tar.gz
compiled.meta
model-shapes.json
compiled.params
compiled_model.json
compiled.so

特别地, compiled.so 文件是一个包含模型运算符硬件优化版本的原生文件:

$ file compiled.so
compiled.so: ELF 64-bit LSB shared object, x86-64
$ nm compiled.so | grep conv | head -3
0000000000005880 T fused_nn_contrib_conv2d_NCHWc
00000000000347a0 T fused_nn_contrib_conv2d_NCHWc_1
0000000000032630 T fused_nn_contrib_conv2d_NCHWc_2
在树莓派上部署图像分类模型

树莓派是一款出色的设备,尽管其计算和内存能力有限,但它能够使用复杂的深度学习模型进行图像预测。以下是在树莓派上部署模型的步骤:
1. 在SageMaker笔记本中,为树莓派编译模型:

output_path = 's3://{}/{}/output-neo/'.format(bucket, prefix)
ic_neo_model = ic.compile_model(
    target_instance_family='rasp3b',
    input_shape={'data':[1, 3, 224, 224]},
    role=role,
    framework='mxnet',
    framework_version='1.5.1',
    output_path=output_path)
  1. 在本地机器上,从S3获取编译好的模型工件并复制到树莓派:
$ aws s3 cp s3://sagemaker-eu-west-1-123456789012/dogscats/output-neo/model-rasp3b.tar.gz .
$ scp model-rasp3b.tar.gz pi@raspberrypi:~
  1. 在树莓派上,将编译好的模型解压到 resnet50 目录:
$ mkdir resnet50
$ tar xvfz model-rasp3b.tar.gz -C resnet50
  1. 安装DLR:
$ wget https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.9.0/rasp3b/dlr-1.9.0-py3-none-any.whl 
$ pip3 install dlr-1.9.0-py3-none-any.whl
  1. 编写一个函数来处理图像:
import numpy as np
from PIL import Image

def process_image(filename):
    image = Image.open(filename)
    image = image.resize((224,224))   
    image = np.asarray(image)         # (224,224,3)
    image = np.moveaxis(image, 2, 0)  # (3,224,224)
    image = image[np.newaxis, :]      # (1,3,224,224)
    return image
  1. 导入DLR并加载编译好的模型:
from dlr import DLRModel
model = DLRModel('resnet50')
  1. 加载图像:
image = process_image('dog.jpg')
#image = process_image('cat.png')
input_data = {'data': image}
  1. 对图像进行100次预测:
import time
total = 0
for i in range(0,100):
    tick = time.time()
    out = model.run(input_data)
    print(out[0])
    tock = time.time()
    total += tock - tick
print(total)

狗和猫的图像分别被预测为 [2.554065e-09 1.000000e+00] [9.9967313e-01 3.2689856e-04] ,考虑到模型约84%的验证准确率,这是非常不错的结果。预测时间约为每张图像1.2秒,相比原始模型的6 - 7秒有了显著提升。

在AWS Inferentia上部署模型

AWS Inferentia是一款专门为高吞吐量和低成本预测而设计的定制芯片。Inferentia芯片托管在EC2 inf1实例上,这些实例有不同的规格,包含1、4或16个芯片。每个芯片包含四个NeuronCores,实现了高性能矩阵乘法引擎,可加速典型的深度学习操作,如卷积。NeuronCores还包含大缓存,可减少外部内存访问。

要在Inferentia上运行模型,需要使用Neuron SDK进行编译和部署。该SDK支持TensorFlow、PyTorch和Apache MXNet模型。你可以在EC2实例上使用Neuron SDK自行编译和部署模型,SageMaker也简化了整个过程,因为inf1实例是Neo可以编译模型的目标架构之一。示例代码可参考: https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker_neo_compilation_jobs/deploy_tensorflow_model_on_Inf1_instance

成本优化清单

在机器学习项目的各个阶段,都应该关注成本。以下是一份成本优化清单:
1. 数据准备阶段
- 避免构建临时ETL工具 :使用托管服务,如Amazon Glue、Amazon Athena或Amazon SageMaker Data Wrangler,避免自行搭建基于实例的ETL工具。如果使用Amazon EMR,应避免运行长期低使用率的集群,尽量使用临时集群和Spot实例。相关信息可参考:
- https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-longrunning-transient.html
- https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-instance-purchasing-options.html
- 使用SageMaker Ground Truth和自动标注 :对于大型非结构化数据集的标注,启用SageMaker Ground Truth的自动标注功能可以节省大量时间和金钱。详情可参考: https://docs.aws.amazon.com/sagemaker/latest/dg/sms-automated-labeling.html
2. 实验阶段
- 不一定要使用SageMaker Studio :可以在本地机器或本地开发服务器上使用SageMaker Python SDK进行开发。
- 停用不需要的Studio实例 :及时停用闲置的实例,避免不必要的费用。
- 小规模实验并选择合适的实例 :在实验初期,使用数据集的一小部分进行实验,选择较小的笔记本实例。例如,5名开发人员每天工作10小时,使用 ml.c5.2xlarge 实例的每日成本为$27.85,而使用 ml.t3.xlarge 实例的每日成本可降至$11.65,每月可节省$486。
- 使用本地模式 :在实验阶段,使用本地模式可以避免启动AWS云托管基础设施,快速迭代且无需成本。
3. 模型训练阶段
- 不在Studio实例上训练 :应在托管实例上运行训练作业,避免在笔记本中使用大型实例进行训练,训练完成后实例会自动终止,避免过度付费。
- 将数据集打包成RecordIO/TFRecord文件 :这样可以更轻松、快速地移动和分发数据集。
- 使用管道模式 :管道模式可将数据集直接从Amazon S3流式传输到训练实例,无需复制,节省启动时间。
- 选择合适的训练实例 :可通过CloudWatch指标来选择合适的训练实例。
- 使用托管Spot训练 :托管Spot训练应作为默认设置,可显著降低训练成本。
- 使用AWS提供的深度学习库版本 :AWS团队会对深度学习库进行优化,使用官方版本可获得更好的性能。相关信息可参考:
- https://aws.amazon.com/blogs/machine-learning/faster-training-with-optimized-tensorflow-1-6-on-amazon-ec2-c5-and-p3-instances/
- https://aws.amazon.com/about-aws/whats-new/2018/11/tensorflow-scalability-to-256-gpus/
- https://aws.amazon.com/blogs/machine-learning/amazon-web-services-aSchieves-fastest-training-times-for-bert-and-mask-r-cnn/
4. 模型部署阶段
- 使用批量转换 :如果不需要在线预测,可使用批量转换,批量作业完成后,底层实例会自动终止,避免过度付费。
- 删除不必要的端点 :及时删除不再使用的端点,避免不必要的费用。
- 选择合适的端点并使用自动扩展 :根据实际需求选择合适的端点,并使用自动扩展功能来优化成本。
- 使用多模型端点 :将多个模型整合到一个端点上,减少资源使用。
- 使用Amazon Neo编译模型 :编译模型可减少硬件资源的使用。
- 大规模部署时使用AWS Inferentia :在大规模部署时,使用AWS Inferentia代替GPU实例可降低成本。
- 自动化一切 :自动化机器学习工作流程可以提高效率,降低成本。
- 购买Savings Plans :Savings Plans是一种灵活的定价模式,可提供低价格的AWS使用方案,根据使用期限和承诺,可节省高达72%的基于实例的SageMaker成本。详情可参考: https://aws.amazon.com/blogs/aws/slash-your-machine-learning-costs-with-instance-price-reductions-and-savings-plans-for-amazon-sagemaker/

通过遵循这份成本优化清单,你不仅可以大幅削减机器学习预算,还能构建更强大、更灵活的工作流程。希望这些技巧能帮助你在机器学习项目中取得更好的成果!

优化预测成本与性能:SageMaker的实用技巧

成本优化技巧技术点分析

为了更直观地理解各个阶段的成本优化技巧,下面通过表格形式对每个阶段的技巧及其优势进行分析:
|阶段|技巧|优势|
| ---- | ---- | ---- |
|数据准备|避免构建临时ETL工具|使用托管服务无需自行搭建基础设施,按需付费;使用临时集群和Spot实例可降低成本|
|数据准备|使用SageMaker Ground Truth和自动标注|节省大型非结构化数据集标注的时间和金钱|
|实验|不一定要使用SageMaker Studio|可在本地开发,降低成本|
|实验|停用不需要的Studio实例|避免闲置实例产生费用|
|实验|小规模实验并选择合适的实例|减少资源浪费,降低成本|
|实验|使用本地模式|无需启动AWS云托管基础设施,快速迭代且无成本|
|模型训练|不在Studio实例上训练|训练完成后实例自动终止,避免过度付费|
|模型训练|将数据集打包成RecordIO/TFRecord文件|方便移动和分发数据集|
|模型训练|使用管道模式|节省数据集传输的启动时间|
|模型训练|选择合适的训练实例|根据实际需求选择,避免资源浪费|
|模型训练|使用托管Spot训练|显著降低训练成本|
|模型训练|使用AWS提供的深度学习库版本|获得更好的性能|
|模型部署|使用批量转换|批量作业完成后实例自动终止,避免过度付费|
|模型部署|删除不必要的端点|避免不必要的费用|
|模型部署|选择合适的端点并使用自动扩展|根据需求优化成本|
|模型部署|使用多模型端点|整合模型,减少资源使用|
|模型部署|使用Amazon Neo编译模型|减少硬件资源使用|
|模型部署|大规模部署时使用AWS Inferentia|降低大规模部署成本|
|模型部署|自动化一切|提高效率,降低成本|
|模型部署|购买Savings Plans|提供低价格的AWS使用方案,节省成本|

不同阶段成本优化流程

下面通过mermaid格式的流程图展示不同阶段成本优化的流程:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px

    A(数据准备阶段):::process --> A1(避免构建临时ETL工具):::process
    A --> A2(使用SageMaker Ground Truth和自动标注):::process
    B(实验阶段):::process --> B1(不一定要使用SageMaker Studio):::process
    B --> B2(停用不需要的Studio实例):::process
    B --> B3(小规模实验并选择合适的实例):::process
    B --> B4(使用本地模式):::process
    C(模型训练阶段):::process --> C1(不在Studio实例上训练):::process
    C --> C2(将数据集打包成RecordIO/TFRecord文件):::process
    C --> C3(使用管道模式):::process
    C --> C4(选择合适的训练实例):::process
    C --> C5(使用托管Spot训练):::process
    C --> C6(使用AWS提供的深度学习库版本):::process
    D(模型部署阶段):::process --> D1(使用批量转换):::process
    D --> D2(删除不必要的端点):::process
    D --> D3(选择合适的端点并使用自动扩展):::process
    D --> D4(使用多模型端点):::process
    D --> D5(使用Amazon Neo编译模型):::process
    D --> D6(大规模部署时使用AWS Inferentia):::process
    D --> D7(自动化一切):::process
    D --> D8(购买Savings Plans):::process
总结

在机器学习项目中,成本优化和性能提升是关键目标。通过使用Amazon SageMaker Neo编译模型,我们可以在不同设备上高效部署模型。在树莓派上部署模型时,通过一系列步骤可以显著提升预测性能;在AWS Inferentia上部署模型则能利用其定制芯片的优势实现高吞吐量和低成本预测。

同时,遵循成本优化清单,在数据准备、实验、模型训练和模型部署的各个阶段采取相应的优化技巧,可以大幅削减机器学习预算,构建更强大、更灵活的工作流程。希望这些实用技巧能帮助你在机器学习项目中取得更好的成果,合理利用资源,实现成本与性能的平衡。

在实际应用中,你可以根据项目的具体需求和特点,有针对性地选择和应用这些技巧。并且不断尝试和实践,结合实际情况进行调整和优化,以达到最佳的成本效益。祝你在机器学习的道路上取得成功!

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制轨迹跟踪。此外,文章还提到了多种优化控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究对比分析; 阅读建议:建议读者结合文中提到的Matlab代码仿真模型,动手实践飞行器建模控制流程,重点关注动力学方程的实现控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值