[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)(ML)范式转变的种子已经存在了几十年,但是随着几乎无限的计算容量随时可用、数据的大量激增以及[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)技术的快速进步,各行各业的客户正在迅速采用和使用[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)技术来实现业务转型。
就在最近,生成式 AI 应用程序吸引了所有人的注意力和想象力。在[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)的广泛采用方面,我们确实正处于一个激动人心的转折点,我们相信,每一种客户体验和应用程序都将通过生成式 AI 得到重塑。
生成式 AI 是一种能够创造新内容和新想法的人工智能,包括对话、故事、图像、视频和音乐。与所有人工智能一样,生成式 AI 由[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型提供支持,这些模型是基于庞大的数据语料库进行预训练的超大型模型,通常称为根基模型(FM)。
根基模型的规模和通用性使其有别于传统的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型,后者通常执行特定任务,如文本情绪分析、图像分类和趋势预测。
![image.png](https://dev-media.amazoncloud.cn/ea53e202c108494da984a8bc775b428b_image.png "image.png")
对于传统的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型,为了完成每项特定任务,您需要收集带标签的数据、训练模型并部署该模型。对于根基模型,您无需为每个模型收集带标签的数据并训练多个模型,而是可以使用相同的预训练根基模型来适应各种任务。您还可以自定义根基模型以执行与您的业务相关的特定领域功能,所使用的数据和计算量仅为从头开始训练模型所需的一小部分。
生成式 AI 有可能通过彻底改变内容的创建和消费方式来颠覆许多行业。原创内容制作、代码生成、客户服务提升和文档摘要是生成式 AI 的典型使用案例。
[Amazon SageMaker JumpStart](https://aws.amazon.com/cn/sagemaker/jumpstart/?trk=cndc-detail) 为各种问题类型提供预训练的开源模型,协助您开始使用[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)。您可以在部署前逐步训练和调整这些模型。JumpStart 还提供用于为常见使用案例设置基础设施的解决方案模板,以及使用 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 进行[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)的可执行的示例 notebook。
JumpStart 提供 600 多个预训练模型,而且每天都在增加,使开发人员能够快速轻松地将尖端的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)技术融入自己的生产工作流程中。您可以通过 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Studio 中的 JumpStart 登录页面访问预训练模型、解决方案模板和示例。您也可以使用 SageMaker Python SDK 访问 JumpStart 模型。有关如何以编程方式使用 JumpStart 模型的信息,请参阅[在预训练模型中使用 SageMaker JumpStart 算法](https://sagemaker.readthedocs.io/en/stable/overview.html#use-built-in-algorithms-with-pre-trained-models-in-sagemaker-python-sdk?trk=cndc-detail)。
2023 年 4 月,亚马逊云科技推出了 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail),这项服务提供了一种通过 AI21 Labs、Anthropic 和 Stability AI 等初创企业的预训练模型构建生成式 AI 驱动应用程序的方法。[Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 还提供对 Titan 根基模型的访问权限,这是由亚马逊云科技内部训练的一系列模型。借助 [Amazon Bedrock](https://aws.amazon.com/cn/bedrock/?trk=cndc-detail) 的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)体验,您可以轻松找到满足自己需求的模型,快速上手,使用自己的数据私人定制根基模型,并使用您熟悉的亚马逊云科技工具和功能(包括与 SageMaker [机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)功能的集成,如用于测试不同模型的 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Experiments 和用于大规模管理根基模型的 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) Pipelines)轻松将这些模型集成并部署到您的应用程序中,而无需管理任何基础设施。
在这篇文章中,我们将展示如何使用 Amazon Cloud Development Kit (Amazon CDK) 从 JumpStart 部署图像和文本生成式 AI 模型。Amazon CDK 是一个开源软件开发框架,用于使用 Python 等熟悉的编程语言定义云应用程序资源。
我们从 JumpStart 的 Hugging Face 中,使用 Stable Diffusion 模型进行图像生成操作,使用 FLAN-T5-XL 模型进行自然语言理解(NLU)和文本生成操作。
### **解决方案概览**
Web 应用程序基于 Streamlit 构建,Streamlit 是一个开源 Python 库,可轻松创建和共享用于[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)和数据科学的完美定制 Web 应用程序。我们使用 [Amazon Elastic Container Service](https://aws.amazon.com/cn/ecs/?trk=cndc-detail)([Amazon ECS](https://aws.amazon.com/cn/ecs/?trk=cndc-detail))和 Amazon Fargate 托管 Web 应用程序,并通过应用程序负载均衡器访问这种应用程序。
Fargate 是一种技术,可与 [Amazon ECS](https://aws.amazon.com/cn/ecs/?trk=cndc-detail) 配合使用,无需管理服务器、集群或虚拟机即可运行容器。生成式 AI 模型端点是从 Amazon Elastic Container Registry(Amazon ECR)中的 JumpStart 映像启动的。模型数据存储在 JumpStart 账户中的 [Amazon Simple Storage Service](https://aws.amazon.com/cn/s3/?trk=cndc-detail)([Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail))上。Web 应用程序通过 [Amazon API Gateway](https://aws.amazon.com/cn/api-gateway/?trk=cndc-detail) 和 Amazon Lambda 函数与模型进行交互,如下图所示。
![image.png](https://dev-media.amazoncloud.cn/5776fd2fbe544221a139ac7e87d74f03_image.png "image.png")
API Gateway 为 Web 应用程序和其他客户端提供标准的 RESTful 接口,同时屏蔽与模型接口的 Lambda 函数。这简化了使用模型的客户端应用程序代码。在此示例中,API Gateway 端点可公开访问,因此可以扩展此架构来实施不同的 API 访问控制并与其他应用程序集成。
在这篇文章中,我们将引导您完成以下步骤:
1、在本地计算机上安装 Amazon 命令行界面(Amazon CLI)和 Amazon CDK v2。
2、克隆并设置 Amazon CDK 应用程序。
3、部署 Amazon CDK 应用程序。
4、使用图像生成人工智能模型。
5、使用文本生成人工智能模型。
6、在亚马逊云科技管理控制台上查看已部署的资源。
我们在这篇文章末尾的附录中概述了这个项目中的代码。
### **先决条件**
您必须具备以下先决条件:
- 亚马逊云科技账户
- Amazon CLI v2
- Python 3.6 或更高版本
- node.js 14.x 或更高版本
- Amazon CDK v2
- Docker v20.10 或更高版本
您可以从本地计算机部署本教程中的基础设施,也可以使用 Amazon Cloud9 作为部署工作站。Amazon Cloud9 预装了 Amazon CLI、Amazon CDK 和 Docker。如果选择 Amazon Cloud9,请从亚马逊云科技控制台创建环境。
假设您让资源运行 8 个小时,完成这篇文章的估计费用为 50 美元。请务必删除在这篇文章中创建的资源,避免持续收费。
### **在本地计算机上安装 Amazon CLI 和 Amazon CDK**
如果本地计算机上还没有 Amazon CLI,请参阅[安装或更新 Amazon CLI 的最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html?trk=cndc-detail)以及[配置 Amazon CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html?trk=cndc-detail)。
使用以下节点软件包管理器命令全局安装 Amazon CDK 工具包:
```js
\$ npm install -g aws-cdk-lib@latest
```
运行以下命令,验证安装是否正确并打印 Amazon CDK 的版本号:
```js
\$ cdk --version
```
确保在本地计算机上安装了 Docker。发出以下命令以验证版本:
```js
\$ docker --version
```
### **克隆并设置 Amazon CDK 应用程序**
在本地计算机上,使用以下命令克隆 Amazon CDK 应用程序:
```js
\$ git clone https://github.com/aws-samples/generative-ai-sagemaker-cdk-demo.git
```
导航到项目文件夹:
```js
\$ cd generative-ai-sagemaker-cdk-demo
```
在部署应用程序之前,让我们回顾一下目录结构:
```js
.
├── LICENSE
├── README.md
├── app.py
├── cdk.json
├── code
│ ├── lambda_txt2img
│ │ └── txt2img.py
│ └── lambda_txt2nlu
│ └── txt2nlu.py
├── construct
│ └── sagemaker_endpoint_construct.py
├── images
│ ├── architecture.png
│ ├── ...
├── requirements-dev.txt
├── requirements.txt
├── source.bat
├── stack
│ ├── __init__.py
│ ├── generative_ai_demo_web_stack.py
│ ├── generative_ai_txt2img_sagemaker_stack.py
│ ├── generative_ai_txt2nlu_sagemaker_stack.py
│ └── generative_ai_vpc_network_stack.py
├── tests
│ ├── __init__.py
│ └── ...
└── web-app
├── Dockerfile
├── Home.py
├── configs.py
├── img
│ └── sagemaker.png
├── pages
│ ├── 2_Image_Generation.py
│ └── 3_Text_Generation.py
└── requirements.txt
```
` stack` 文件夹包含 Amazon CDK 应用程序中每个堆栈的代码。 `code` 文件夹包含 `Lambda` 函数的代码。存储库还包含位于 `web-app` 文件夹下的 Web 应用程序。
`cdk.json` 文件告诉 Amazon CDK 工具包如何运行应用程序。
此应用程序在 `us-east-1` 区域中进行了测试,但此应用程序应适用于任何在 `++app.py++` 中指定了所需服务和推理实例类型 `ml.g4dn.4xlarge` 的区域。
### **设置虚拟环境**
此项目的设置与标准 Python 项目类似。使用以下代码创建 Python 虚拟环境:
```js
\$ python3 -m venv .venv
```
使用以下命令激活虚拟环境:
```js
\$ source .venv/bin/activate
```
如果您使用的是 Windows 平台,请按如下方式激活虚拟环境:
```js
% .venv\\Scripts\\activate.bat
```
激活虚拟环境后,将 pip 升级到最新版本:
```js
\$ python3 -m pip install --upgrade pi
```
安装所需的依赖项:
```js
\$ pip install -r requirements.txt
```
在部署任何 Amazon CDK 应用程序之前,需要在您的账户和要部署到的区域中引导空间。要在默认区域中进行引导,请发出以下命令:
```js
\$ cdk bootstrap
```
如果要部署到特定账户和区域,请发出以下命令:
```js
\$ cdk bootstrap aws://ACCOUNT-NUMBER/REGIO
```
有关此设置的更多信息,请访问 [Amazon CDK 入门](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html?trk=cndc-detail)。
### **Amazon CDK 应用程序堆栈结构**
Amazon CDK 应用程序包含多个堆栈,如下图所示。
![image.png](https://dev-media.amazoncloud.cn/7a668d7672084077a46260f999afe747_image.png "image.png")
可以使用以下命令列出 Amazon CDK 应用程序中的堆栈:
```js
\$ cdk list
GenerativeAiTxt2imgSagemakerStack
GenerativeAiTxt2nluSagemakerStack
GenerativeAiVpcNetworkStack
GenerativeAiDemoWebStack
```
以下是其他有用的 Amazon CDK 命令:
* **cdk ls** – 列出应用程序中的所有堆栈
* **cdk synth** – 发出合成的 Amazon CloudFormation 模板
* **cdk deploy** – 将此堆栈部署到默认亚马逊云科技账户和区域
* **cdk diff** – 将已部署的堆栈与当前状态进行比较
* **cdk docs** – 打开 Amazon CDK 文档
下一节将向您展示如何部署 Amazon CDK 应用程序。
### **部署 Amazon CDK 应用程序**
Amazon CDK 应用程序将根据工作站配置部署到默认区域。如果您想在特定区域强制部署,请相应地设置 `Amazon_DEFAULT_REGION` 环境变量。
此时,您可以部署 Amazon CDK 应用程序。首先启动 VPC 网络堆栈:
```js
\$ cdk deploy GenerativeAiVpcNetworkStack
```
如果出现提示,请输入 `y` 继续部署。您应该会看到堆栈中正在预置的亚马逊云科技资源列表。此步骤大约需要 3 分钟才能完成。
然后启动 Web 应用程序堆栈:
```js
\$ cdk deploy GenerativeAiDemoWebStack
```
分析堆栈后,Amazon CDK 将显示堆栈中的资源列表。输入 y 继续部署。此步骤大约需要 5 分钟。
![image.png](https://dev-media.amazoncloud.cn/3ef7cfc74e394dd59d3870c53bfd0598_image.png "image.png")
记下输出中的 `WebApplicationServiceURL` 以便稍后使用。您也可以在 Amazon CloudFormation 控制台的 `GenerativeAiDemoWebStack` 堆栈输出中进行检索。
现在,启动图像生成人工智能模型端点堆栈:
```js
\$ cdk deploy GenerativeAiTxt2imgSagemakerStac
```
此步骤大约需要 8 分钟。图像生成模型端点已部署,我们现在可以使用此端点。
### **使用图像生成人工智能模型**
第一个示例演示了如何使用 Stable Diffusion,这是一种功能强大的生成式建模技术,可以根据文本提示创建高质量的图像。
**1**、在浏览器中使用 `GenerativeAiDemoWebStack` 输出中的 `WebApplicationServiceURL` 访问 Web 应用程序。
![image.png](https://dev-media.amazoncloud.cn/77cbaff6b4f3458c8ecf05d55701f5b1_image.png "image.png")
**2、**在导航窗格中,选择**图像生成。**
**3、****SageMaker**** 端点名称**和 **API GW Url** 字段将预先填入,但您可以根据需要更改图像描述的提示。
**4、**选择**生成图像**
![image.png](https://dev-media.amazoncloud.cn/0edeb366ca664ab08053104a63bba0ef_image.png "image.png")
**5**、应用程序将调用 SageMaker 端点。这需要几秒钟时间。此时将显示一张具有图像描述中的特征的图片。
![image.png](https://dev-media.amazoncloud.cn/109add59632c43648bde64054710918a_image.png "image.png")
### **使用文本生成人工智能模型**
第二个示例围绕着使用 FLAN-T5-XL 模型(一种根基模型或大型语言模型(LLM))实现文本生成的上下文学习,同时还解决了广泛的自然语言理解(NLU)和自然语言生成(NLG)任务。
某些环境可能会限制一次启动的端点数量。在这种情况下,您可以一次启动一个 SageMaker 端点。要在 Amazon CDK 应用程序中停止 SageMaker 端点,必须先销毁已部署的端点堆栈,然后再启动其他端点堆栈。要关闭图像生成人工智能模型端点,请发出以下命令:
```js
\$ cdk destroy GenerativeAiTxt2imgSagemakerStack
```
然后启动文本生成人工智能模型端点堆栈:
```js
\$ cdk deploy GenerativeAiTxt2nluSagemakerStack
```
在提示符处输入 y 。
启动文本生成模型端点堆栈后,完成以下步骤:
**1、**返回 Web 应用程序,然后在导航窗格中选择**文本生成;**
**2、输入上下文字**段预填充的是客户与座席之间关于客户电话问题的对话,但您也可以根据需要输入自己的上下文;
![image.png](https://dev-media.amazoncloud.cn/7070aa2448f5433aa86139aed4852640_image.png "image.png")
**3**、在上下文下方的下拉菜单中,您可以找到一些预填充的查询。选择一个查询,然后选择**生成响应**。
![image.png](https://dev-media.amazoncloud.cn/9d32ed961c9a437a9608f4abe279dbbf_image.png "image.png")
**4**、您也可以在输入查询字段中输入自己的查询,然后选择**生成响应**。
![image.png](https://dev-media.amazoncloud.cn/de6425c4044f4c7989d42703b33fa1a5_image.png "image.png")
### **在控制台上查看已部署的资源**
在 Amazon CloudFormation 控制台上,选择导航窗格中的**堆栈**以查看部署的堆栈。
![image.png](https://dev-media.amazoncloud.cn/644f14bed23a40ad85f27b1bb5067f08_image.png "image.png")
在 [Amazon ECS](https://aws.amazon.com/cn/ecs/?trk=cndc-detail) 控制台上,您可以在**集群**页面上查看集群。
![image.png](https://dev-media.amazoncloud.cn/dcebd3c617b74828b1df56e35eb04509_image.png "image.png")
在 Amazon Lambda 控制台上,您可以在**函数**页面上查看函数。
![image.png](https://dev-media.amazoncloud.cn/0afa8c5d221d4d6399b97a920f3ca1b3_image.png "image.png")
在 API Gateway 控制台上,您可以在 **API** 页面上查看 API Gateway 端点。
![image.png](https://dev-media.amazoncloud.cn/977f8eacf6bc449f8ccbf69b0179a533_image.png "image.png")
在 **SageMaker** 控制台上,您可以在端点页面上查看已部署的模型端点。
![image.png](https://dev-media.amazoncloud.cn/80397f148bdf4920a45ab83024f60eec_image.png "image.png")
启动堆栈时,会生成一些参数。这些参数存储在 Amazon Systems Manager Parameter Store 中。要查看这些参数,请在 Amazon Systems Manager 控制台的导航窗格中选择 **Parameter Store**。
![image.png](https://dev-media.amazoncloud.cn/8136a657cf084ea79dec985a7638096f_image.png "image.png")
### **清理**
为避免不必要的成本,请在工作站上使用以下命令清理创建的所有基础设施:
```js
\$ cdk destroy --all
```
在提示符处输入 `y` 。此步骤大约需要 10 分钟。检查控制台上的所有资源是否都已删除。同时删除 Amazon CDK 在 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 控制台上创建的资产 S3 存储桶以及 Amazon ECR 上的资产存储库。
### **总结**
如本文所示,您可以使用 Amazon CDK 在 JumpStart 中部署生成式 AI 模型。我们展示了使用由 Streamlit、Lambda 和 API Gateway 提供支持的用户界面的图像生成示例和文本生成示例。
现在,您可以在 JumpStart 中使用预训练的人工智能模型来构建生成式 AI 项目。您还可以扩展此项目,针对自己的使用案例对根基模型进行微调,并控制对 API Gateway 端点的访问。
我们邀请您在 GitHub 上测试解决方案并为此项目做出贡献。请在评论中分享您对本教程的看法!
### **许可证摘要**
此示例代码根据修改后的 MIT 许可证提供。有关更多信息,请参阅 [LICENSE 文件](https://github.com/Hantzley/generative-ai-sagemaker-cdk-demo/blob/main/LICENSE?trk=cndc-detail)。另外,请查看 [Hugging Face 上 stable diffusion](https://huggingface.co/stabilityai/stable-diffusion-2-1-base?trk=cndc-detail) 和 [flan-t5-xl 模型](https://huggingface.co/google/flan-t5-xl?trk=cndc-detail)的相应许可证。
***附录:代码演练***
本节将为您概述此项目中的代码,详情请点击[**这里**](https://aws.amazon.com/cn/blogs/china/deploy-generative-ai-models-from-amazon-sagemaker-jumpstart-using-the-aws-cdk/?trk=cndc-detail)进行参考。
![开发者尾巴.gif](https://dev-media.amazoncloud.cn/0582f309aa6740efbdc12683e05973f0_%E5%BC%80%E5%8F%91%E8%80%85%E5%B0%BE%E5%B7%B4.gif "开发者尾巴.gif")