Amazon SageMaker测评分享,效果超出预期

Posted 曲鸟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Amazon SageMaker测评分享,效果超出预期相关的知识,希望对你有一定的参考价值。

一、前言

随着科技的进步和社会的发展,人工智能得到了愈加广泛的重视,特别是最近大火的Chatgpt,充分展现了研发通用人工智能助手广阔的研究和应用前景。让越来越多的组织和企业跟风加入到人工智能领域的研究中,

但机器学习的实施是一项极其复杂的工作,不仅需要专业技能,还涉及大量的试错。无论是“专业”,抑或是“试错”,其背后都是高昂的成本。而且,通过传统的方式创建机器学习模型,开发人员需要从高度手动的数据准备过程开始,经过可视化、选择算法、设置框架、训练模型、调整数百万个可能的参数、部署模型并监视其性能,这个过程往往需要重复多次,是非常繁琐且特别耗时的。所以说,究竟有多少公司能够玩得起,想必很多人都会在心里打出一个大大的问号。

最近刚好受邀参与了亚马逊云科技【云上探索实验室】活动,使用了它们推出的 Amazon SageMaker来开展机器学习的工作,体验下来的效果是让我很满意的,无论是在构建,数据标注还是模型训练部署等方面都带来了巨大的效率提升,通过使用它预置的常用算法,以及自动模型调优大大降低了模型构建和训练的难度,让我们更容易的使用ML。另外,Amazon SageMaker与其他亚马逊网络服务(AWS)产品集成,如AWS S3、AWS Glue和AWS Lambda,让我们能够轻松构建端到端的ML工作流程:

下面分享一下我体验官网的一个实验案例,在过程中遇到了什么问题和如何解决的,供大家参考。

二、体验分享

1、数据输入

1)原理

SageMaker Processing job 要求数据的输入和输出都需要在 S3 ,基本原理图如下:

2)实操

步骤1:创建Amazon SageMaker 笔记本实例

Amazon SageMaker 笔记本实例是运行 Jupyter 笔记本应用程序的完全托管的机器学习 (ML) 亚马逊弹性计算云 (Amazon EC2) 计算实例。我们可以使用笔记本实例创建和管理 Jupyter 笔记本来预处理数据,以及训练和部署机器学习模型。

亚马逊 SageMaker 笔记本实例创建好之后会在图中的笔记本实例中新增一条状态为Pending的数据,稍等一会儿,状态会自动变为InService,此时改实例为可使用状态。

步骤2:将数据加载到笔记本实例,并上传到Amazon S3

当实例状态变为InService之后,选择打开 Jupyter,然后在 Jupyter notebook 中,为 New(新建)选择 conda_python3,复制粘贴以下示例上传数据代码并运行:

import sagemaker

sess = sagemaker.Session()
bucket = sess.default_bucket()

!aws s3 sync s3://sagemaker-sample-files/datasets/image/caltech-101/inference/ s3://bucket/ground-truth-demo/images/

print('Copy and paste the below link into a web browser to confirm the ten images were successfully uploaded to your bucket:')
print(f'https://s3.console.aws.amazon.com/s3/buckets/bucket/ground-truth-demo/images/')

print('\\nWhen prompted by Sagemaker to enter the S3 location for input datasets, you can paste in the below S3 URL')

print(f's3://bucket/ground-truth-demo/images/')

print('\\nWhen prompted by Sagemaker to Specify a new location, you can paste in the below S3 URL')

print(f's3://bucket/ground-truth-demo/labeled-data/')

3)使用中遇到的问题及解决方案

1、S3 Bucket创建时需要按照这个命名规则:sagemaker-<your-Region>-<your-aws-account-id>,否则运行上面的示例代码时会报错。

2、示例代码运行的时候遇到access is forbidden报错信息:

这表明权限策略的设置有问题,需要我们去修改存储桶权限、配置存储桶策略以及配置角色策略

2.1:修改存储桶权限——进入编辑“屏蔽公共访问权限(存储桶设置)”位置,把”阻止所有公开访问“复选框标记为未选中状态

2.2:配置存储桶策略——我们可以使用SageMaker自带的策略生成器,正确填写对应信息后一键快捷生成Json策略:

上述步骤点击”Add Statement“按钮后会自动生成如下Json策略


        "Version": "2012-10-17",
        "Id": "Policy1679391476168",
        "Statement": [
                
                        "Sid": "Stmt1679391475056",
                        "Effect": "Allow",
                        "Principal": 
                                "AWS": "arn:aws:iam::692273791570:role/service-role/SageMaker-tt"
                        ,
                        "Action": "s3:*",
                        "Resource": "arn:aws:s3:::sagemaker-eu-north-1-692273791570"
                
        ]

上面的json策略生成成功后,直接复制粘贴到存储桶权限策略中:

2.3:配置角色策略——我们可以在笔记本示例详情中找到配置的IAM角色:

点击进入后,找到下面的策略项就可对存储桶权限策略进行编辑:

提供两种编辑方式,这里建议使用可视化编辑更加的友好:

我这里将资源范围设置为所有S3存储桶(你们也可以指定刚刚创建的存储桶)都放开,然后保存后就会生成json策略,如下所示:


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::*"
        ,
        
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::*/*"
        
    ]

这样我们就把角色权限也配置好了,再次执行示例上传代码就成功了:

在成功运行代码以后,打开 Amazon S3 控制台并导航至 sagemaker-<your-Region>-<your-aws-account-id>/ground-truth-demo/images 位置,可以看到图片已经在你的默认S3存储桶文件列表了:

2、数据处理

1)创建标记任务

打开 SageMaker 控制台。在左侧导航窗格中,选择 Ground TruthLabeling jobs(贴标作业)。然后选择 Create labeling job(创建标记任务)。

在标记任务详细信息页面,按照下图进行配置,图中的两个路径也可以直接从我们早前所运行 Jupyter notebook 的 print 语句里面去复制对应的值,配置成功后,点击”完成数据设置“,就会出现输入数据链接成功的提示。

2)设置标签

Task type(任务类型)部分,为 Task category(任务类别)选择 Image(图像)。对于 Task selection(任务选择),选择 Image Classification (Single Label)(图像分类(单标签)),然后选择 Next(下一步)。

Select workers and configure tool(选择工作人员并配置工具)部分中,对于Worker types(工作人员类型),选择 Amazon Mechanical Turk。

选择 The dataset does not contain adult content(数据集不包含成人内容)。

选择 You understand and agree that the Amazon Mechanical Turk workforce consists of independent contractors located worldwide and that you should not share confidential information, personal information or protected health information with this workforce(您了解并同意 Amazon Mechanical Turk 工作团队由分布在世界各地的独立合约商组成,而且您不得与该工作团队分享机密信息、个人信息或受保护的健康信息。)

Image classification (Single Label) labeling tool(图像分类(单标签)标记工具)部分中,输入以下信息:

对于 brief description of task(任务的简短描述),输入 Please select the label that best matches the image below(请在下方选择与图像最匹配的标签)。您可以为每张图像仅选择 1 个标签。

对于 Select an option(选择选项),在单独的框中输入以下标签:Airplane(飞机)、Car(汽车)、Ferry(渡轮)、Helicopter(直升机)、Motorbike(摩托车)。

展开 Additional instructions(其他说明),添加以下文本到第 3 步:If there are multiple vehicles in a single image, choose the most prominent vehicle in the image(如果一张图像中有多个交通工具,请选择在图像中最突出的交通工具)。

要了解标注人员将看到怎样的标记工具,请选择 Preview(预览)。

选择 Create(创建)。

创建成功后新的标记任务被列在 SageMaker 控制台 Labeling jobs(贴标作业)部分的下方,其 Status(状态)为 In progressTask type(任务类型)为 Image Classification (Single Label)(图像分类(单个标签))。标记任务可能需要几分钟才能完成。 在 Amazon Mechanical Turk 公共工作人员标记数据后,状态变为 Complete

标记任务的创建及参数配置使用相对比较简单,没有像在笔记本实例中使用代码上传数据那样遇到很多权限类的问题。

3)结果查看

在标记任务的详细信息页面上,已标记数据集对象将显示您的数据集图像的缩略图,并以对应标签作为标题。

详细结果可以通过标记任务的摘要部分,打开输出数据集位置链接,选择 manifests(清单)、output(输出)、output.manifest

其中output.manifest 清单包括以下数据:

source-ref:在输入清单文件中指定图像条目的位置。由于您在第 2 步中选择了 Automated data setup(自动数据设置),Amazon SageMaker Ground Truth 已自动创建这些条目以及输入清单文件。

test-biaoji1:使用从 0 开始的编号数值来指定目标标签。针对此示例中的五个图像分类,标签分别为 0、1、2、3、4。

test-biaoji1-metadata:指定标记元数据,如置信度评分、作业名称、标签字符串名称(例如,飞机、汽车、渡轮、直升机和摩托车),以及人工或机器注释(主动学习)。

然后我们就可以在Amazon SageMaker 中使用 output.manifest 文件来进行模型的训练。

3、模型训练

1)训练任务

我们的数据准备好后,就可以在左侧训练菜单栏中创建训练任务:

然后对学习算法、训练集群规范和超参数进行配置:

之后按下图配置好输入数据

之后点击“创建训练作业”按钮即可,该作业就会开始训练:

待训练完成后我们可以点击右上角的创建模型按钮来创建我们的训练模型。

2)超级参数配置

超参数调整可以通过尝试模型的多种变体来提高工作效率。它通过聚焦在您指定范围内最有前途的超参数值组合来自动寻找最佳模型。为了获得良好的结果,您必须选择正确的范围进行探索。

下面列举出了一些可以设置的可选超参数。包含 Amazon SageMaker XGBoost 算法必需或最常用的超参数子集。这些是由用户设置的参数,以便于从数据中评估模型参数。

参数名称

描述

num_class

类的数量。如果设置objective为 m ulti-softmax 或 mu lti-softprob 则为@@ 必填项。有效值:整数

num_round

运行训练的轮数。必填有效值:整数

alpha

权重上的 L1 正则化项。增加此值会使模型更加保守。可选有效值:浮点值默认值:0

base_score

所有实例的初始预测分数,全局偏移。可选有效值:浮点值缩放细节凹凸法线强度。

booster

要使用的助推程序。gbtree 和 dart 值使用基于树的模型,而 gblinear 使用线性函数。可选有效值:字符串. gbtree、gblinear 或 dart。默认值:gbtree

colsample_bylevel

每个级别中每个拆分的列的子样本比率。可选有效值:浮点值。范围:[0,1]。默认值:1

colsample_bynode

每个节点中列的子样本比率。可选有效值:浮点值。范围:(0,1]。默认值:1

colsample_bytree

构造每个树时列的子样本比率。可选有效值:浮点值。范围:[0,1]。默认值:1

csv_weights

启用此标志时,对于 csv 输入,XGBoost 通过获取训练数据中的第二列(标签后的一列)作为实例权重,以此来区分实例的重要性。可选有效值:0 或 1默认值:0

deterministic_histogram

启用此标志后,XGBoost 会确定性地在 GPU 上构建直方图。仅在 tree_method 设置为 gpu_hist 时才会使用。有关有效输入的完整列表,请参阅 XGBoost 参数。可选有效值:字符串. 范围:true 或 false默认值:true

early_stopping_rounds

模型会一直训练直到验证分数停止改善。验证错误需要至少在每个 early_stopping_rounds 减少才能继续训练。 SageMaker 托管使用最佳模型进行推理。可选有效值:整数默认值: -

eta

在更新中用于防止过度适合的步骤大小收缩。在每个提升步骤之后,您可以直接获得新特征的权重。eta 参数实际上缩小了特征权重,使提升过程更加保守。可选有效值:浮点值。范围:[0,1]。默认值:0.3

不是所有的算法都需要走自动超参数调优,需要权衡模型性能(就是指模型效果)与成本。一般来说,对于深度学习模型或者海量数据集的情况下可能做自动超参数调优的时间代价和成本代价太大。因此在实际的 ML 项目中,用户很少对深度学习模型或者海量数据集做自动超参数调优;对于传统的机器学习模型并且在数据集不大的情况下,可以考虑用自动超参数调优来找到可能的最优解。

三、总结

本次的整体使用过程比较愉快,总的来说Amazon SageMaker的使用比较符合大众习惯,框架设计也很简洁,可读性好,类层次清晰,能够把使用者的关注点更集中在训练脚本本身。

而且,Amazon SageMaker针对当前机器学习应用瓶颈做了很多针对性的提升,比如大数据量的监督训练,Amazon SageMaker则采用完全托管的服务模式;训练时间及资源消耗上,Amazon SageMaker则是秉持工具善其事,必先利其器的理念,在训练之前的数据标记上提供了多种方式及算法,让标记数据的准确性大大提高,从而省去重复训练调参等时间;工程实现上,Amazon SageMaker在模型开发全流程上都提供了相应的功能帮助算法工程师们专注于业务和模型本身,提高开发效率。它是基于 container 的设计,相比于业界比较流行的Kubernetes来说,减少了软件依赖和复杂度。相信Amazon SageMaker的落地,将会为更多的企业插上翅膀,让机器学习无处不在,让创新迈入新的时代。

亚马逊最近也在开展相关的活动,给小伙伴们提供了云上探索实验室,大家通过云上探索实验室,可以学习实践云上技术,同时将自己的技术心得分享给其他小伙伴。

云上探索实验室出现的意义就是让广大开发者能够一同创造分享,互助启发,玩转云上技术。所以说,云上探索实验室不仅是体验的空间,更是分享的平台。如果有有兴趣快点击活动链接试试吧:点我访问

20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用

真火!

作为最近一段时间人工智能领域内的顶流之一,AIGC(AI-Generated Content)早已火爆出圈,频登各大互联网平台热搜。

cite: 微软亚洲研究院官方微博

这段时间以来,基于深度学习的内容生成在图像、视频、语音、音乐、文本等生成领域都取得了令人瞩目的成果,也越来越多的身边人在讨论AIGC。但你知道AIGC背后的有哪些技术支持吗?

实际上,最早引爆AIGC话题的是AI作图,它是以Stable Diffusion技术为基础实现的。以前,AI 作图还只是简单的风格迁移、头像生成、磨皮、P图等功能应用,直到Stable Diffusion模型的降临,AI 作图发生了质的变化,人们第一次见识到了生产力AI的力量:画家、设计师不用再绞尽脑汁思考色彩、构图,只要告诉 Stable Diffusion 模型自己想要什么,就能言出法随般地生成高质量图片。

那么我能不能自己实现一个以Stable Diffusion模型为基础的AIGC作画应用呢?

答案是可以的!最近我恰好受邀参与了亚马逊云科技【云上探索实验室】活动,利用Amazon的SageMaker平台搭建了自己的 AIGC 应用,整个过程只用了不到20分钟。

使用 Amazon SageMaker 基于Stable Diffusion模型搭建的AIGC应用

总体而言,在Amazon SageMaker上搭建AIGC应用的体验十分出色,不仅仅是流程清晰,简单易实现。使用者可以直接从Hugging Face上提取预训练的模型,参考Amazon提供的简明教程,使得SageMaker可以很容易地将模型转化为Web应用。

下面是一些图像生成的结果:

感觉还不错,现在我们就来复盘一些怎么利用亚马逊云服务使用Amazon SageMaker在20分钟内搭建一个属于自己的AIGC应用。

我将首先简单说明AIGC是什么以及讲解Stable Diffusion的技术原理。然后介绍Amazon SageMaker是做什么的。之后将基于Amazon SageMaker搭建AIGC应用的整体流程复盘一遍。最后对该应用进行测试和功能评价。

文章目录

1. 什么是Stable Diffusion?

1.1. 人工智能自动生成内容:AIGC介绍

人工智能自动生成内容(AIGC)是一种基于人工智能(AI)技术的内容创作方法,旨在快速、高效地生成高质量、有创意的文本、图像、音频或视频等多种形式的内容。借助先进的深度学习和自然语言处理技术,AIGC能够理解和学习人类语言、语境、知识和创意,从而根据用户需求生成各种类型的内容。这其中尤其以Stable Diffusion为代表性技术和应用,它用于从自然语言描述生成数字图像。

1.2. Stable Diffusion原理解析

Stable Diffusion是一个基于Latent Diffusion Models(潜在扩散模型,LDMs)的文图生成(text-to-image)模型。

它包含三个模块:感知压缩、扩散模型和条件机制。

(1) 图像感知压缩(Perceptual Image Compression)
图像感知压缩通过VAE自编码模型对原图进行处理,忽略掉原图中的高频细节信息,只保留一些重要、基础的特征。该模块并非必要,但是它的加入能够大幅降低训练和采样的计算成本,大大降低了图文生成任务的实现门槛。

基于感知压缩的扩散模型的训练过程有两个阶段:(1)训练一个自编码器;(2)训练扩散模型。在训练自编码器时,为了避免潜在表示空间出现高度的异化,作者使用了两种正则化方法,一种是KL-reg,另一种是VQ-reg,因此在官方发布的一阶段预训练模型中,会看到KL和VQ两种实现。在Stable Diffusion中主要采用AutoencoderKL这种正则化实现。

具体来说,图像感知压缩模型的训练过程如下:给定图像 x ∈ R H × W × 3 x\\in \\mathbbR^H\\times W\\times 3 xRH×W×3,我们先利用一个编码器 ε \\varepsilon ε来将图像从原图编码到潜在表示空间(即提取图像的特征) z = ε ( x ) z=\\varepsilon(x) z=ε(x),其中 z ∈ R h × w × c z\\in \\mathbbR^h\\times w\\times c zRh×w×c。然后,用解码器从潜在表示空间重建图片 x ~ = D ( z ) = D ( ε ( x ) ) \\widetildex=\\mathcalD(z)=\\mathcalD(\\varepsilon(x)) x =D(z)=D(ε(x))。训练的目标是使 x = x ~ x=\\widetildex x=x

(2) 隐扩散模型(Latent Diffusion Models)

扩散模型(DM)从本质上来说,是一个基于马尔科夫过程的去噪器。其反向去噪过程的目标是根据输入的图像 x t x_t xt去预测一个对应去噪后的图像 x t + 1 x_t+1 xt+1,即 x t + 1 = ϵ t ( x t , t ) ,   t = 1 , . . . , T x_t+1=\\epsilon_t(x_t,t),\\ t=1,...,T xt+1=ϵt(xt,t), t=1,...,T。相应的目标函数可以写成如下形式: L D M = E x , ϵ ∼ N ( 0 , 1 ) , t = [ ∣ ∣ ϵ − ϵ θ ( x t , t ) ∣ ∣ 2 2 ] L_DM=\\mathbbE_x,\\epsilon\\sim\\mathcalN(0,1),t=[||\\epsilon-\\epsilon_\\theta(x_t,t)||_2^2] LDM=Ex,ϵN(0,1),t=[∣∣ϵϵθ(xt,t)22]这里默认噪声的分布是高斯分布 N ( 0 , 1 ) \\mathcalN(0,1) N(0,1),这是因为高斯分布可以应用重参数化技巧简化计算;此处的 x x x指的是原图。

而在潜在扩散模型中(LDM),引入了预训练的感知压缩模型,它包括一个编码器 ε \\varepsilon ε 和一个解码器 D \\mathcalD D。这样在训练时就可以利用编码器得到 z t = ε ( x t ) z_t=\\varepsilon(x_t) zt=ε(xt),从而让模型在潜在表示空间中学习,相应的目标函数可以写成如下形式: L L D M = E ε ( x ) , ϵ ∼ N ( 0 , 1 ) , t = [ ∣ ∣ ϵ − ϵ θ ( z t , t ) ∣ ∣ 2 2 ] L_LDM=\\mathbbE_\\varepsilon(x),\\epsilon\\sim\\mathcalN(0,1),t=[||\\epsilon-\\epsilon_\\theta(z_t,t)||_2^2] LLDM=Eε(x),ϵN(0,1),t=[∣∣ϵϵθ(zt,t)22]

(3) 条件机制(Conditioning Mechanisms)
条件机制,指的是通过输入某些参数来控制图像的生成结果。这主要是通过拓展得到一个条件时序去噪自编码器(Conditional Denoising Autoencoder,CDA) ϵ θ ( z t , t , y ) \\epsilon_\\theta(z_t,t,y) ϵθ(zt,t,y)来实现的,这样一来我们就可通过输入参数 y y y 来控制图像生成的过程。

具体来说,论文通过在UNet主干网络上增加cross-attention机制来实现CDA,选用UNet网络是因为实践中Diffusion在UNet网络上效果最好。为了能够从多个不同的模态预处理参数 y y y,论文引入了一个领域专用编码器(Domain Specific Encoder) τ θ \\tau_\\theta τθ,它将 y y y映射为一个中间表示 τ θ ( y ) ∈ R M × d r \\tau_\\theta(y)\\in\\mathbbR^M\\times d_r τθ(y)RM×dr,这样我们就可以很方便的将 y y y设置为各种模态的条件(文本、类别等等)。最终模型就可以通过一个cross-attention层映射将控制信息融入到UNet的中间层,cross-attention层的实现如下: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K ⊤ d ) ⋅ V Attention(Q,K,V)=softmax(\\fracQK^\\top\\sqrtd)\\cdot V Attention(Q,K,V)=softmax(d QK)V Q = W Q ( i ) ⋅ φ i ( z t ) , K = W K ( i ) ⋅ τ θ ( y ) , V = W V ( i ) ⋅ τ θ ( y ) Q=W_Q^(i)\\cdot \\varphi_i(z_t),\\quad K=W_K^(i)\\cdot \\tau_\\theta(y),\\quad V=W_V^(i)\\cdot \\tau_\\theta(y) Q=WQ(i)φi(zt),K=WK(i)τθ(y),V=WV(i)τθ(y)其中 φ i ( z t ) ∈ R N × d ϵ i \\varphi_i(z_t)\\in \\mathbbR^N\\times d_\\epsilon^i φ以上是关于Amazon SageMaker测评分享,效果超出预期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中本地部署 Amazon-SageMaker

AWS DeepRacer 参数调优 Amazon SageMaker 和 Amazon RoboMaker

服务模型时出现 Amazon Sagemaker ModelError

20分钟,使用Amazon SageMaker快速搭建属于自己的AIGC应用

创建 SageMaker 模型时出现 ValidationError

SageMaker实操分享