| 作者介绍:墨理学 AI,CSDN博客专家,全网读者粉丝10万+,曾任算法工程师和AIGC部署开发工程师,专注于AI领域前沿技术学习实战分享。微信公众号:墨理学AI | |
| --- | --- |
# 前言 - 浅谈 AIGC 模型部署
![image.png](https://dev-media.amazoncloud.cn/628318d81449441e85c1a1bc5204da03_image.png "image.png")
随着人工智能技术的发展与完善,AI Generated Content (AIGC,人工智能自动生成内容) 在内容的创作上为人们的工作和生活带来前所未有的帮助,具体表现在能够帮助人类提高内容生产的效率,丰富内容生产的多样性、提供更加动态且可交互的内容。AIGC 相关技术可以在创意、表现力、迭代、传播、个性化等方面,充分发挥技术优势,打造新的数字内容生成与交互形态。在这两年AIGC在AI作画、AI 作曲、AI 作诗、AI写作、AI视频生成、 AI语音合成等领域持续大放异彩;尤其是近段时间火遍全网的AI绘画,作为用户的我们只要简单输入几个关键词几秒钟之内一幅画作就能诞生。
> 最近我们迎来了 ChatGPT 系列技术带给我们一波又一波的 AI 盛宴,而在计算机视觉领域,AI 绘画正在逐渐走向图像生成舞台的中央。
![image.png](https://dev-media.amazoncloud.cn/b9ceaa6e85c9415e9fd2d54c10629936_image.png "image.png")
文本生成图像(AI 绘画)是根据文本生成图像的的新型生产方式,相比于人类创作者,文本生成图像展现出了创作成本低、速度快且易于批量化生产的优势。
近一年来,该领域迅猛发展,国内外科技巨头和初创企业争相涌入,出现了不少文本生成图像的技术产品。这些产品背后主要使用基于扩散生成算法的 dall-e-2 和 stable diffusion 等模型。
> 尤其是2022年 Stable Diffusion 2.0 版本的发布,再次点燃了无数创作者使用 AI 文本图像生成技术来生成高质量创意图像的热情 ,如下图所示,Stable Diffusion相关代码仓库,gitHub star 数量正在飞速增长:
![image.png](https://dev-media.amazoncloud.cn/69428ec317324953b820403b53682dc4_image.png "image.png")
> Stable Diffusion 2.0 能够取得很大关注的原因除了通过在模型体系结构中引入交叉注意力层使得生成图像质量得到提升,另一个主要原因就是与 pixel-based 扩散模型方法相比显著降低了计算要求,使得它的推理速度大大提升。众所周知,随着 AI 任务复杂性和应用范围增加,高精度大规模不断涌现,AI模型的训练和推理对算力的要求越来越高,对于中小企业和个人开发者而言,如果想训练或者部署稍微大的AI模型就不得不面对购买大量算力资源高投入的风险,而具备高算力资源的企业则能够有机会把握住各种神奇AIGC技术全面开花落地的历史机遇。
>
> 我们普通的创业者和开发者,有没有机会去训练和部署我们所看好领域的 AIGC 模型呢,答案是肯定的,在当下这个云服务时代,人人都有机会成为前沿的技术探索者。 最近受邀参加了亚马逊云科技 『云上探索实验室』实践云上技术的系列活动,通过 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 平台快速完成 AIGC 模型推理服务在线 web 部署,带给我很多启发和惊喜,原来在云端进行 AI 模型推理部署可以如此简洁,优雅、流畅。在参加这次活动实践的过程中,我也学到了很多有益的知识和技能, 接下来的博文就会以我的一次 AIGC 模型(Stable Diffusion 2.0 )web 服务部署之旅带大家一起体验如何在云端去落地 AI 模型服务
- 传送门:亚马逊云科技之云上探索实验室活动:[从实践中探索机器学习边界](https://dev.amazoncloud.cn/experience?trk=cndc-detail)
# 如何在Amaozn SageMaker 进行 Stable Diffusion 模型部署?
[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 是一项完全托管的[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)服务:借助 SageMaker 的多种功能,数据科学家和开发人员可以快速轻松地构建和训练[机器学习](https://aws.amazon.com/cn/machine-learning/?trk=cndc-detail)模型,然后直接部署至生产环境就绪的托管环境。SageMaker 涵盖了ML 的整个工作流,可以标记和准备数据、选择算法、训练模型、调整和优化模型以便部署、预测和执行操作。经过这一周多的学习和实践体验,我发现这个平台简直就是为我们这些创业者和个人开发者量身打造的 AI 服务落地利器。许多 AI 工程项目,我们只需去构造好自己的训练集和测试集,其余的模型训练、推理、部署,[Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 都能够帮我们轻松完成。
## 在SageMaker中进行环境搭建
### 1、创建 jupyter notebook 运行环境
- 点击链接登录至[亚马逊云科技管理控制台](https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1#)
> 在搜索框中搜索 SageMaker ,如下图所示
![image.png](https://dev-media.amazoncloud.cn/914a7c71c424439a95913b6537354de8_image.png "image.png")
> 这里我们创建一个笔记本编程实例
![image.png](https://dev-media.amazoncloud.cn/7938ae9cdd6746f1960e37ff55d8fc76_image.png "image.png")
> 我这里选择的配置如下:
![image.png](https://dev-media.amazoncloud.cn/37c3458414e849ec8c292a7fe051d350_image.png "image.png")
> 选择角色,其他的默认即可
![image.png](https://dev-media.amazoncloud.cn/7d436d3d3f7e46a3a36b8cae7ba4696c_image.png "image.png")
> 大概5分钟左右,实例就创建成功啦
![image.png](https://dev-media.amazoncloud.cn/8f211e46a09f454794db336a91d5ed0b_image.png "image.png")
- [点击链接,下载代码](https://static.us-east-1.prod.workshops.aws/public/73ea3a9f-37c8-4d01-ae4e-07cf6313adac/static/code/notebook-stable-diffusion-ssh-inference.ipynb?trk=cndc-detail)
> 上传刚刚下载的代码
![image.png](https://dev-media.amazoncloud.cn/c0305d4d2c364daeb7b6f451b44cdef4_image.png "image.png")
> 直接打开这个代码
![image.png](https://dev-media.amazoncloud.cn/69fff2bda9ee4842993d4142239fca26_image.png "image.png")
> 选择合适的 conda 环境
![image.png](https://dev-media.amazoncloud.cn/60e43a547cc3418da2e6d03b4fc3e3e6_image.png "image.png")
### 2、一键运行所有代码
> 这里我们直接一键运行运行所有代码即可,代码执行过程中会依次完成 Stable Diffusion 模型相关类和函数的代码定义、推理测试,并打包代码和模型,然后部署模型至 Sagemaker 推理终端节点 (PS:这里的所有代码运行完毕大概需要5到10分钟左右)
![image.png](https://dev-media.amazoncloud.cn/2de233e666d443b48bfddadd3bb16359_image.png "image.png")
## 对上面运行代码进行分析如下
### 1.环境准备,代码模型下载
> 检查当前 pyTorch 版本
```js
!nvcc --version
!pip list | grep torch
```
> 安装 Stable Diffusion 代码运行额外需要的依赖库,这网速飞快
```js
!sudo yum -y install pigz
!pip install -U pip
!pip install -U transformers==4.26.1 diffusers==0.13.1 ftfy accelerate
!pip install -U torch==1.13.1+cu117 -f https://download.pytorch.org/whl/torch_stable.html
!pip install -U sagemaker
!pip list | grep torch
```
#### 1.2 下载代码和模型文件
![image.png](https://dev-media.amazoncloud.cn/2474498f3d7f4d1e9da561c2abf5cc80_image.png "image.png")
### 2.在 Notebook 中配置并使用模型
> 直接调用 函数进行模型加载
```js
import torch
import datetime
from diffusers import StableDiffusionPipeline
# Load stable diffusion
pipe = StableDiffusionPipeline.from_pretrained(SD_MODEL, torch_dtype=torch.float16)
```
> 在 Cuda 上进行模型的推理,这里 Stable Diffusion V2 能够支持的最大图像尺寸为 768 * 768
```js
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 =["Eiffel tower landing on the Mars",
"a photograph of an astronaut riding a horse,van Gogh style",
]
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)
```
> 友情提示 :如果报错,遇到推理时 GPU 内存不够,则可以尝试以下三种方式进行解决
1. 试一试分辨率小一点的图片
2. 减少生成图片的数量
3. 升级机型
### 3.部署模型至 Sagemaker 推理终端节点
> 我们这里直接使用亚马逊云科技的 SageMaker Python 开发工具包部署模型刚刚已经验证能够运行成功的模型和打包好的代码。
- 编写初始化的 Sagemaker 代码用于部署推理终端节点
```js
import sagemaker
import boto3
'''
# 创建 Session
'''
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=Noneif 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}")
```
- 创建 inference.py 脚本,进行模型的加载和推理
```js
%%writefile ./\$SD_MODEL/code/inference.py
import base64
import torch
from io import BytesIO
from diffusers import StableDiffusionPipeline
'''
# 加载模型到CUDA
'''def model_fn(model_dir):# Load stable diffusion and move it to the GPU
pipe = StableDiffusionPipeline.from_pretrained(model_dir, torch_dtype=torch.float16)
pipe = pipe.to("cuda")return pipe
'''
# 推理方法
'''def predict_fn(data, pipe):# 解析参数 get prompt & parameters
prompt = data.pop("prompt", "")# set valid HP for stable diffusion
height = data.pop("height", 512)
width = data.pop("width", 512)
num_inference_steps = data.pop("num_inference_steps", 50)
guidance_scale = data.pop("guidance_scale", 7.5)
num_images_per_prompt = data.pop("num_images_per_prompt", 1)# 传入参数,调用推理 run generation with parameters
generated_images = pipe(
prompt=prompt,
height=height,
width=width,
num_inference_steps=num_inference_steps,
guidance_scale=guidance_scale,
num_images_per_prompt=num_images_per_prompt,)["images"]# create response
encoded_images = []for image in generated_images:
buffered = BytesIO()
image.save(buffered, format="JPEG")
encoded_images.append(base64.b64encode(buffered.getvalue()).decode())# create responsereturn {"generated_images": encoded_images}
```
# 在 Amazon Cloud9 创建前后端 Web 应用
**Amazon Cloud9 是一种基于云的集成开发环境 (IDE),只需要一个浏览器,即可编写、运行和调试代码。包括一个代码编辑器、调试程序和终端,并且预封装了适用于 JavaScript、Python、PHP 等常见编程语言的基本工具,无需安装文件或配置开发计算机,即可开始新的项目。**
- 这里我直接参考官方提供的手册,跟着操作即可完成 Web 服务的部署
## 创建云服务实例,并进行 web 环境安装
> 这里我试用了 Cloud9 云服务,在查找服务处搜索 Cloud9,并点击进入Cloud9服务面板即可
![image.png](https://dev-media.amazoncloud.cn/449ed76fd4ca4e8597c6b3d2c93241b8_image.png "image.png")
> 点击创建环境
![image.png](https://dev-media.amazoncloud.cn/87300762d6aa40f1b2bc42d22a7cffbc_image.png "image.png")
> 我这里的设置如下
![image.png](https://dev-media.amazoncloud.cn/b1870a2e63c54b1a8d867c07c19856d9_image.png "image.png")
> 其他部分配置保持默认,在页面底部点击橙色的 Create 按钮创建环境。 环境的创建将花费1-2分钟的时间。
![image.png](https://dev-media.amazoncloud.cn/cfb2a7c38d4e4e80a1be1d5878686237_image.png "image.png")
> 创建成功之后,点击 open 进入服务控制台
![image.png](https://dev-media.amazoncloud.cn/4413a64159bb4a7399c1d0c3a6d6b9b8_image.png "image.png")
> 粘贴左侧的代码,复制到控制台bash窗口进行运行,会自动下载和解压代码
```js
cd ~/environment
wget https://static.us-east-1.prod.workshops.aws/public/73ea3a9f-37c8-4d01-ae4e-07cf6313adac/static/code/SampleWebApp.zip
unzip SampleWebApp.zip
# 在 AWS Cloud9 上安装 Flask 和 boto3
pip3 install Flask
pip3 install boto3
```
![image.png](https://dev-media.amazoncloud.cn/bddecce23cce4298b90ccae3abb13879_image.png "image.png")
## 运行启动 web 服务,输入想要生成的图像参数和提示词,调用推理服务
> 依赖的环境安装好之后,就可以运行这个服务代码
![image.png](https://dev-media.amazoncloud.cn/0ed3aa54e8c9452585dac228baf4b4fa_image.png "image.png")
> 服务启动成功之后,访问 127.0.0.1:8080 即可访问本地服务;设定 width和Length 参数,以及想要生成的图片描述,然后点击提交
![image.png](https://dev-media.amazoncloud.cn/668ec3851baa479b9fd0d2dd3eaa755e_image.png "image.png")
> 等待 几秒钟之后,就得到了上面输入的两个 提示词对应生成的图像,看得出来效果还是非常不错的;
- 经测试发现,即使每次输入的提示词是同一个,模型生成得到的输出也是不固定的
- 输入的提示词语越精准,生成的图像效果会容易越好
- 基于 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 服务平台,如此快速(不到一个小时)就能搭建好一套 AI 模型的 web 端在线推理调用,果然好的技术就是第一生产力
![image.png](https://dev-media.amazoncloud.cn/a72efbef4bbb4c7e9c599bc79b8c70c1_image.png "image.png")
> 为大家展示一些我的生成示例(这图像生成效果我觉得还是蛮惊艳的)
| | A | B | C |
| --- | --- |--- |--- |
| 1 | 提示词 | 生成图像示例1 | 生成图像示例2 |
| 2 | A rabbit is piloting a spaceship | | |
| 3 | Driverless car speeds through the desert | | |
| 4 | A small cabin on top of a snowy mountain in the style of Disney, artstation | | |
# 更多有趣 AI 创意图像的生成,有待大家一起去探索
这次有幸受邀参加亚马逊云科技【云上探索实验室】活动,跟着亚马逊云科技技术团队提供的系列非常详尽的 AI 模型云上推理部署实战文档和视频教程一步步进行真实的云上服务部署操作,让我再次认识到 AI 在各个领域技术突破所带来的强大生产力,而通过借助 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 平台进行 AI 模型服务部署大大简化我们普通开发者进行 AI 模型部署服务的难度,使得对于中小企业和个人开发者而言,AI 服务的快速落地也不再是一件难事。
- 教程链接,小伙伴们有兴趣的话,也可以参考 SageMaker 平台提供的 [AIGC 模型部署官方文档](https://catalog.us-east-1.prod.workshops.aws/workshops/3b86fa89-da3a-4e5f-8e77-b45fb11adf4a/zh-CN/1-create-notebook?trk=cndc-detail)和我这里的博客进行尝试,部署自己的 AIGC 模型
通过使用 [Amazon SageMaker](https://aws.amazon.com/cn/sagemaker/?trk=cndc-detail) 服务平台,我们只需要一个浏览器,即可编写、运行和调试各种代码,无需进行复杂的机器适配和环境搭建,能够快速完成 AI 模型的推理、测试、验证部署工作。
如果你也想亲身感受最新、最热门的亚马逊云科技开发者工具与服务,那么只需点击下方链接,即可跟着亚马逊云科技团队工程师一起对更多有趣的 AI 技术进行探索与实践。
- 亚马逊云科技之云上探索实验室活动:[从实践中探索机器学习边界](https://dev.amazoncloud.cn/experience?trk=cndc-detail)
![image.png](https://dev-media.amazoncloud.cn/e420b4f9744a41d48989a6564864d21b_image.png "image.png")
> 率先完成学习打卡小伙伴,还有丰厚奖品可以领取哟
![image.png](https://dev-media.amazoncloud.cn/39617092794a4ed794c586f71c330820_image.png "image.png")
*该动手实验方案由亚马逊云科技解决方案架构师团队提供-点击查看[实验手册内容]( https://catalog.us-east-1.prod.workshops.aws/workshops/3b86fa89-da3a-4e5f-8e77-b45fb11adf4a/zh-CN?trk=cndc-detail)*