[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 是一种[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)服务,帮助开发人员快速准备、构建、训练和部署高质量的[机器学习模型](https://so.csdn.net/so/search?q=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E6%A8%A1%E5%9E%8B&spm=1001.2101.3001.7020?trk=cndc-detail)。本文主要讲解了 SageMaker 的五项新功能,并使用 Sagemaker 部署模型并进行推理,最后对数据处理。新功能给 SageMaker 的使用带来极大的便利,期待未来有更多的创新应用。
![1.png](https://dev-media.amazoncloud.cn/9426ab97ffcf41308f18d43bbfbf5914_1.png "1.png")
### SageMaker 五项新功能
近日,亚马逊云科技 re:Invent 大会宣布了 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 中的五项新功能,这些新功能将使用户能够更轻松地构建、训练和部署生成[人工智能模型](https://so.csdn.net/so/search?q=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E6%A8%A1%E5%9E%8B&spm=1001.2101.3001.7020?trk=cndc-detail)。随着模型不断改变各行业的客户体验,SageMaker 使组织能够更轻松、更快速地构建、训练和部署[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail) (ML) 模型,为各种生成式 AI 使用案例提供支持。然而,为了成功使用模型,客户需要先进的功能来有效管理模型开发、使用和性能,这些新功能具体如下:
1、**SageMaker HyperPod** 使客户能够自动将训练工作负载分配到数百或数千个加速器上,从而通过**缩短模型训练时间**来进一步增强 SageMaker 的模型扩展能力。
2、**SageMaker Inference** 允许多个模型部署到同一个实例(虚拟服务器),通过**降低模型的部署成本和延迟**来优化托管 ML 基础设施操作。
3、**SageMaker Clarify** 可以**更轻松地根据支持负责任地使用 AI 的质量参数选择正确的模型。**
4、为了帮助客户跨组织应用这些模型,亚马逊云科技还在 **SageMaker Canvas** 中引入了新的**无代码功能**,使客户可以使用自然语言指令更快、更轻松地准备数据。
5、**SageMaker Canvas** 使客户能够**更轻松地使用模型来提取见解、进行预测以及使用组织的专有数据生成内容**,从而继续实现模型构建和定制的民主化。
这些新的突破建立在 SageMaker 广泛的功能之上,帮助用户利用ML进行大规模创新,详细可以访问 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 官网:[amazon.com/sagemaker](https://cts.businesswire.com/ct/CT?id=smartlink,https://aws.amazon.com/sagemaker?trk=cndc-detail)。
### SageMaker 进行模型训练
模型训练采用 Stable Diffusion 模型,简单地根据文本输入来生成文本和图像,帮助你创建逼真的 AIGC 应用程序。
#### 1、创建 notebook 实例
创建笔记本实例
![2.png](https://dev-media.amazoncloud.cn/8e4093bcddfd4a7f961883913c8e4104_2.png "2.png")
填写笔记本实例的详细信息
![3.png](https://dev-media.amazoncloud.cn/39ab1532da0143328a463dbb609f81ff_3.png "3.png")
创建角色,没有的话点击`使用角色创建向导创建角色`
![4.png](https://dev-media.amazoncloud.cn/7c8f778b935f42269dde840acdcd72a8_4.png "4.png")
![5.png](https://dev-media.amazoncloud.cn/f7d2126a04704ba7b577eddd70cc5106_5.png "5.png")
在创建笔记本实例时候,提示实例名称不合规范
![6.png](https://dev-media.amazoncloud.cn/029db7f7a8f1483e8af2cf3739ad545b_6.png "6.png")
因此,修改笔记本实例名称为`stable-diffusion`
![7.png](https://dev-media.amazoncloud.cn/c382a32865c046f189ae9e0d7be9d42a_7.png "7.png")
创建成功,此时实例正在创建中,如图中的`Pending`状态,需要等大概5分钟左右。
![8.png](https://dev-media.amazoncloud.cn/07b6ff4775254396bfda770e447a7f27_8.png "8.png")
此时实例已经创建成功,状态变成`InService`,然后点击`打开Jupyter`
![9.png](https://dev-media.amazoncloud.cn/9146e188c3e64c33b1a0214f5aa862db_9.png "9.png")
2、使用 Sagemaker Notebook Instance 部署模型并进行推理
Stable Diffusion 是一种文本生成图像模式,给它一个文本提示( prompt ),它将返回与文本匹配的图像。本文将在 Sagemaker Notebook Instance 中运行Stable Diffusion 模型,并使用 Sagemaker Notebook Instance 部署模型进行推理。到达 Jupyter 主界面后,点击 NEW 下面的 Terminal 启动终端。
![10.png](https://dev-media.amazoncloud.cn/123a7de662024b3a8e5aeba94269cd53_10.png "10.png")
然后在终端中输入下面命令,下载数据集并解压。或者直接拿 https 链接在浏览器中下载后上传。
```
wget https://static.us-east-1.prod.workshops.aws/public/648e1f0c-f5e0-40eb-87b1-7f3638dba539/static/code/notebook-stable-diffusion.ipynb
```
此时实验代码已经下载完成,然后点击打开文件。
![11.png](https://dev-media.amazoncloud.cn/908b95569dd648bbaf8ae44211d57db6_11.png "11.png")
打开文件会有下面提示,选择`conda_pytorch_p310`
[notebook-stable-diffusion.ipynb](https://diffusion-av4g.notebook.us-east-1.sagemaker.aws/notebooks/notebook-stable-diffusion.ipynb?trk=cndc-detail)
![12.png](https://dev-media.amazoncloud.cn/6f70186c72df4d11b23b417e358276ad_12.png "12.png")
在使用模型生成时,通常会有以下步骤:
#### []()[]()(1)设定模型版本的环境变量
<!--EndFragment-->
```
#Clone the Stable Diffusion model from HuggingFace
Stable Diffusion V1
SD_SPACE="runwayml/"
SD_MODEL = "stable-diffusion-v1-5"
SD_EXCLUDE_MODEL="!v1-5-pruned.ckpt"
Stable Diffusion V2
SD_SPACE="stabilityai/"
SD_MODEL = "stable-diffusion-2-1"
SD_EXCLUDE_MODEL="!v2-1_768-nonema-pruned.ckpt"
```
#### (2)在Notebook中配置并使用模型
pytorch训练绘图部分代码,我们修改提示词,描述要生成的图片,比如我修改 prompts 为[ `` "A white cat sleeping in nature", `` "A Husky, wearing a mask, singing at a KTV" ``],意思是:*一只白色猫,在大自然中睡觉。一只哈士奇,带着口罩,在 KTV 唱歌。*
```
# move Model to the GPU
torch.cuda.empty_cache()
pipe = pipe.to("cuda")
V1 Max-H:512,Max-W:512
V2 Max-H:768,Max-W:768
print(datetime.datetime.now())
prompts =[
"A white cat sleeping in nature",
"A Husky, wearing a mask, singing at a KTV"
]
generated_images = pipe(
prompt=prompts,
height=512,
width=512,
num_images_per_prompt=1
).images # image here is in [PIL format](https://pillow.readthedocs.io/en/stable/)
print(f"Prompts: {prompts}\\n")
print(datetime.datetime.now())
for image in generated_images:
display(image)
```
为模型设定输入参数,可使用的部分参数如下:
- prompt (str or List[str]): 引导图像生成的文本提示或文本列表
- height (int, optional, 默认为 V1模型可支持到512像素,V2模型可支持到768像素): 生成图像的高度(以像素为单位)
- width (int, optional, 默认为 V1模型可支持到512像素,V2模型可支持到768像素): 生成图像的宽度(以像素为单位)
- num_inference_steps (int, optional, defaults to 50): 降噪步数。更多的去噪步骤通常会以较慢的推理为代价获得更高质量的图像
- guidance_scale (float, optional, defaults to 7.5): 较高的指导比例会导致图像与提示密切相关,但会牺牲图像质量。 如果指定,它必须是一个浮点数。 guidance_scale<=1 被忽略。
- negative_prompt (str or List[str], optional): 不引导图像生成的文本或文本列表。不使用时忽略,必须与prompt类型一致(如果 guidance_scale 小于 1 则忽略)
- num_images_per_prompt (int, optional, defaults to 1): 每个提示生成的图像数量
#### (3)编写初始化的 Sagemaker 代码用于部署推理终端节点
使用 SageMaker 托管服务部署模型有多种选择。 你可以使用 亚马逊云科技开发工具包(例如,Python 开发工具包 (Boto3))、SageMaker Python 开发工具包、 亚马逊云科技 CLI 以编程方式部署模型, 或者您可以使用 SageMaker 控制台以交互方式部署模型。并且 SageMaker Inference 允许多个模型部署到同一个实例。
使用 SageMaker 托管服务部署模型是一个三步过程(如果您使用的是适用于 Python (Boto3)、 亚马逊云科技 CLI 或 SageMaker 控制台的 亚马逊云科技开发工具包):
1、在 SageMaker 中创建 SageMaker 模型。
2、为 HTTPS 端点创建端点配置。
3、创建 HTTPS 端点。
使用 SageMaker Python 开发工具包部署模型不需要您创建终端节点配置。 因此,这是一个两步过程:
1、从创建模型对象 Model 可以部署到 HTTPS 端点的类。
2、使用模型对象的预构建创建 HTTPS 端点 deploy()方法。
编写初始化的 Sagemaker 代码用于部署推理终端节点,具体代码如下:
```
import sagemaker
import boto3
sess = sagemaker.Session()
sagemaker session bucket -> used for uploading data, models and logs
sagemaker will automatically create this bucket if it not exists
sagemaker_session_bucket=None
if sagemaker_session_bucket is None and sess is not None:
# set to default bucket if a bucket name is not given
sagemaker_session_bucket = sess.default_bucket()
try:
role = sagemaker.get_execution_role()
except ValueError:
iam = boto3.client('iam')
role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']
sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)
print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")
```
#### (4)基于推理终端节点生成自定义图片
<!--EndFragment-->
```
from PIL import Image
from io import BytesIO
import base64
helper decoder
def decode_base64_image(image_string):
base64_image = base64.b64decode(image_string)
buffer = BytesIO(base64_image)
return Image.open(buffer)
```
<!--StartFragment-->
#### (5)Run
之后点击`Cell`中的`Run All`去执行代码。
![13.png](https://dev-media.amazoncloud.cn/c4c3337b360542599c6a29f6a57304b1_13.png "13.png")
最终生成下图,爱了爱了。
![14.png](https://dev-media.amazoncloud.cn/d7da26af57534f74b3b38b81d2edddb9_14.png "14.png")
![15.png](https://dev-media.amazoncloud.cn/7078c6e1f47a4495ae7b8d4b59c74cfe_15.png "15.png")
#### 3、下载数据集
浏览器打开下载下面资源,然后上传到`Jupyter`中的`Files`。
```
https://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank-additional.zip
```
上传完成如下图所示:
![16.png](https://dev-media.amazoncloud.cn/938141e7d330423184e43bc76db164ef_16.png "16.png")
接下来通过`pandas`展示数据集。使用 bank-additional-full.csv 数据集文件,将其通过 pandas 读入并展示。点击`NEW`中的`conda_pytorch_p310`,然后输入下面代码。
![17.png](https://dev-media.amazoncloud.cn/befc933dab95439f822e32e0d8069bbf_17.png "17.png")
```
import numpy as np # For matrix operations and numerical processing
import pandas as pd # For munging tabular data
import os
data = pd.read_csv("./bank-additional-full.csv", sep=";")
pd.set_option("display.max_columns", 500) # Make sure we can see all of the columns
pd.set_option("display.max_rows", 50) # Keep the output on one page
data
```
结果如下:
![18.png](https://dev-media.amazoncloud.cn/33103e235cda483495b4e405f402c53c_18.png "18.png")
#### 4、数据预处理
将数据集进行数据清洗,将分类类型数据通过独热编码转换为数字。
![19.png](https://dev-media.amazoncloud.cn/75dad9ac6a214c9db3355d78586ab4a1_19.png "19.png")
通过 `drop` 方法删除不需要的列,简化模型的输入数据。
```
model_data = model_data.drop(
["duration", "emp.var.rate", "cons.price.idx", "cons.conf.idx", "euribor3m", "nr.employed"], axis=1)
model_data = model_data.drop(["y_no"], axis=1)
model_data
```
![20.png](https://dev-media.amazoncloud.cn/b4bc5e122c0d4fb5b3b7d2fc16fec856_20.png "20.png")
#### SageMaker HyperPod
SageMaker HyperPod 通过为大规模分布式训练提供专门构建的基础设施,有助于减少训练基础模型 (FM) 的时间。 他还能够主动监控集群运行状况,并通过替换故障节点并从检查点恢复模型训练来提供自动化节点和作业弹性。
在 SageMaker 控制台中的左侧菜单中选择 HyperPod 集群下的集群管理,点击右侧的创建集群按钮
![21.png](https://dev-media.amazoncloud.cn/ec4cf119f92f4fa08dab14f744fe95cc_21.png "21.png")
输入`集群名称`,然后下一步
![22.png](https://dev-media.amazoncloud.cn/5f4cf5841e8d4919a294620c8c7aa527_22.png "22.png")
点击`创建实例组`
![23.png](https://dev-media.amazoncloud.cn/6a1b8c59fe0240f69edc9dea7e9e0812_23.png "23.png")
创建实例需要填写下面的基本信息,另外准备一个或多个生命周期脚本并将其上传到 [Amazon Simple Storage Service (Amazon S3)](https://aws.amazon.com/s3/?trk=cndc-detail)存储桶,以便在集群创建期间在每个实例组中运行。
![24.png](https://dev-media.amazoncloud.cn/eeef715762214a55a10c21da10a0c719_24.png "24.png")
使用亚马逊云科技 CLI 创建和管理集群,选择 JSON 文件中指定集群配置。这里选择创建两个实例组,一个用于集群控制器节点,另一个用于集群工作节点。下面的例子中,在 demo-cluster.json 文件中创建了 controller-group 以及worker-group 两个实例。
```
// demo-cluster.json
[
{
"InstanceGroupName": "controller-group",
"InstanceType": "ml.m5.xlarge",
"InstanceCount": 1,
"LifeCycleConfig": {
"SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",
"OnCreate": "on_create.sh"
},
"ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",
"ThreadsPerCore": 1
},
{
"InstanceGroupName": "worker-group",
"InstanceType": "ml.trn1.32xlarge",
"InstanceCount": 4,
"LifeCycleConfig": {
"SourceS3Uri": "s3://<your-s3-bucket>/<lifecycle-script-directory>/",
"OnCreate": "on_create.sh"
},
"ExecutionRole": "arn:aws:iam::111122223333:role/my-role-for-cluster",
"ThreadsPerCore": 1
}
]
```
接下来就开始创建集群
```
aws sagemaker create-cluster \\
--cluster-name antje-demo-cluster \\
--instance-groups file://demo-cluster.json
```
创建之后,可以使用 Amazon sagemaker describe-cluster和aws sagemaker list-cluster-nodes 查看集群和节点详细信息。记下控制器节点的集群 ID 和实例 ID,需要这些信息才能连接到集群。接下来就可以设置集群环境,准备模型、分词器和数据集,然后在集群上启动作业。
#### SageMaker Canvas
Amazon SageMaker Canvas **无代码界面**,可以访问现成的 FM 和预测模型或创建自定义模型,只需几分钟就可以从成千上万的文档、图像和文本行中提取信息并生成预测。这些即用型模型包括情绪分析、语言检测、实体提取、个人信息检测、图像中的对象和文本检测、发票和收据的费用分析、身份证件分析以及更通用的文档和表单分析。**要开始使用现成的模型,只需选择模型、上传数据,然后单击即可生成模型输出**,具体使用如下:
在 Amazon SageMaker 控制台中选择域,然后点击右侧创建域。
![25.png](https://dev-media.amazoncloud.cn/6e81700146034c7ca5da6729b8b7f092_25.png "25.png")
点击创建之后,第一次设置需要等待5-8分钟。
![26.png](https://dev-media.amazoncloud.cn/caca8fcae7164209af4f717c1931dd54_26.png "26.png")
域创建完成,会有下面的提示:`SageMaker域已准备就绪`。
![27.png](https://dev-media.amazoncloud.cn/c33ccc755283437ca3d08f09adc4b6c8_27.png "27.png")
接下来点击`启动`按钮中`Canvas`按钮,到 Amazon SageMaker Canvas 页面。
![28.png](https://dev-media.amazoncloud.cn/de71034fba23427ca2eb4937b782cc40_28.png "28.png")
第一次进入加载时间比较慢,需要等5-8分钟。
![29.png](https://dev-media.amazoncloud.cn/471d7586092e4bbe9147a0cd266515df_29.png "29.png")
进去之后主页如下图所示。
![30.png](https://dev-media.amazoncloud.cn/5ffee8e5cee846c991c3c3f0d256286c_30.png "30.png")
接下来,我们来体验下图像中的文本检测功能。选择左侧第二个菜单之后。选择`Text detection in images`(图像中的文本检测)
![31.png](https://dev-media.amazoncloud.cn/46a06524deeb4e72805b3bb3e763a36b_31.png "31.png")
点击`Upload Image`进行上传图片
![32.png](https://dev-media.amazoncloud.cn/3b1536ab1ef54df68b9b6d8d612bfaa9_32.png "32.png")
上传之后,对图片中的文本进行检测,检测结果如下所示(该功能对中文支持做的特别好,主要识别英文)。
![33.png](https://dev-media.amazoncloud.cn/45cb8b23ae00411ea0dc7db287f7789e_33.png "33.png")
[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Canvas 还有其他许多功能,你可以亲自尝试一下。官网:https://aws.amazon.com/cn/sagemaker/canvas?trk=cndc-detail/
### 总结
[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 的功能创新让我深切感受到[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)这条道路越来越顺畅,案例构建、训练以及部署 ML 模型更加便利,并且在性能上有很大的提升,速度越来越快。从创建 notebook 实例到推理终端节点生成自定义图片,之后又下载数据集并对数据进行处理,这个过程让我真切体会到了 Inference 部署扩展能力,又详细探讨了 HyperPod 、Clarify 、Canvas 等功能,让我感受良多。
1、在使用 SageMaker 进行自定义图片生成以及数据处理过程中,速度非常快,并且允许多个模型部署到同一个实例,非常 nice
2、分布式训练的模式能在很大程度上减少模型训练时间,并且在过程中可以监控集群的状态,为模型训练稳定进行保驾护航
3、不用怕模型训练存在偏差,Clarify 提供了多种方式以及在不同时间对数据进行检测,保证了训练结果准确性。
4、如果用户不知道如何选择哪个模型,它还能根据用户选择的参数评估、比较,帮助用户适合其特定用例的最佳模型,以支持组织负责任地使用 AI 。
5、Canvas 功能非常多,尤其是无代码的可视化操作,对新手非常友好,大大减少[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)成本。并且提供了各种常见的模型应用,方便我们上手操作,直接使用模型来进行预测,提取数据。
6、SageMaker 提供的这些扩展功能对用户来说非常友好,更重要是对模型训练的整体性能有很多提升,灵活度也更大,不仅可以自己去进行模型训练,还能直接拿现成的应用操作。
总而言之,SageMaker 应用案例十分广泛,并且能够实现任何用途的高性能、低成本[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail),用户也能够更轻松地构建、训练和部署生成人工智能模型,[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)优势十分显著,推荐大家也快来体验一波。