如何在 Amazon SageMaker 进行 Stable Diffusion 模型在线服务部署

6a54e3de8e5cc357a59261d38e6f26be.gif

本篇文章是亚马逊云科技【云上探索实验室】活动的开发者体验分享。通过云上探索实验室,开发者可以用技术实验、产品体验、案例应用等方式,与其他开发者小伙伴一同创造、互助启发,玩转云上技术,为技术实践提供无限可能。云上探索实验室不仅是体验的空间,更是分享的平台,欢迎各位加入!

本篇作者

墨理学 AI

CSDN 博客专家,全网读者粉丝10万+,曾任算法工程师和 AIGC 部署开发工程师,专注于 AI 领域前沿技术学习实战分享。

01

前言—浅谈 AIGC 模型部署

随着人工智能技术的发展与完善,AI Generated Content (AIGC,人工智能自动生成内容) 在内容的创作上为人们的工作和生活带来前所未有的帮助,具体表现在能够帮助人类提高内容生产的效率,丰富内容生产的多样性、提供更加动态且可交互的内容。AIGC 相关技术可以在创意、表现力、迭代、传播、个性化等方面,充分发挥技术优势,打造新的数字内容生成与交互形态。在这两年 AIGC 在 AI 作画、AI 作曲、AI 作诗、AI 写作、AI 视频生成、 AI 语音合成等领域持续大放异彩;尤其是近段时间火遍全网的 AI 绘画,作为用户的我们只要简单输入几个关键词几秒钟之内一幅画作就能诞生。

b4eb38aade0f103165def3d70fc1992e.png

最近我们迎来了 ChatGPT 系列技术带给我们一波又一波的 AI 盛宴,而在计算机视觉领域,AI 绘画正在逐渐走向图像生成舞台的中央。

文本生成图像(AI 绘画)是根据文本生成图像的新型生产方式,相比于人类创作者,文本生成图像展现出了创作成本低、速度快且易于批量化生产的优势。

近一年来,该领域迅猛发展,国内外科技巨头和初创企业争相涌入,出现了不少文本生成图像的技术产品。这些产品背后主要使用基于扩散生成算法的 dall-e-2 和 Stable Diffusion 等模型。

7a2e359c0676a122547d3883185792bd.png

尤其是2022年 Stable Diffusion 2.0 版本的发布,再次点燃了无数创作者使用 AI 文本图像生成技术来生成高质量创意图像的热情 ,如下图所示,Stable Diffusion 相关代码仓库,gitHub star 数量正在飞速增长:

cd8aef6c7cd971c7eb3d9c68b5d506e8.png

Stable Diffusion 2.0 能够取得很大关注的原因除了通过在模型体系结构中引入交叉注意力层使得生成图像质量得到提升,另一个主要原因就是与 pixel-based 扩散模型方法相比显著降低了计算要求,使得它的推理速度大大提升。众所周知,随着 AI 任务复杂性和应用范围增加,高精度大规模不断涌现,AI 模型的训练和推理对算力的要求越来越高,对于中小企业和个人开发者而言,如果想训练或者部署稍微大的 AI 模型就不得不面对购买大量算力资源高投入的风险,而具备高算力资源的企业则能够有机会把握住各种神奇 AIGC 技术全面开花落地的历史机遇。

我们普通的创业者和开发者,有没有机会去训练和部署我们所看好领域的 AIGC 模型呢,答案是肯定的,在当下这个云服务时代,人人都有机会成为前沿的技术探索者。最近受邀参加了亚马逊云科技 「云上探索实验室」实践云上技术的系列活动,通过 Amazon SageMaker 平台快速完成 AIGC 模型推理服务在线 web 部署,带给我很多启发和惊喜,原来在云端进行 AI 模型推理部署可以如此简洁,优雅、流畅。在参加这次活动实践的过程中,我也学到了很多有益的知识和技能, 接下来的博文就会以我的一次 AIGC 模型(Stable Diffusion 2.0 )web 服务部署之旅带大家一起体验如何在云端去落地 AI 模型服务。

02

如何在 Amazon SageMaker

进行 Stable Diffusion 模型部署?

Amazon SageMaker 是一项完全托管的机器学习服务:借助 SageMaker 的多种功能,数据科学家和开发人员可以快速轻松地构建和训练机器学习模型,然后直接部署至生产环境就绪的托管环境。SageMaker 涵盖了 ML 的整个工作流,可以标记和准备数据、选择算法、训练模型、调整和优化模型以便部署、预测和执行操作。经过这一周多的学习和实践体验,我发现这个平台简直就是为我们这些创业者和个人开发者量身打造的 AI 服务落地利器。许多 AI 工程项目,我们只需去构造好自己的训练集和测试集,其余的模型训练、推理、部署,Amazon SageMaker 都能够帮我们轻松完成。

在 SageMaker 中进行环境搭建

1、创建 jupyter notebook 运行环境

▌复制链接并搜索,登录至亚马逊云科技管理控制台

https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1#

在搜索框中搜索 SageMaker ,如下图所示:

937459b12262771fadd1235021a2700a.jpeg

这里我们创建一个笔记本编程实例。

2ef3d80fd5ff823ae10b775450f77d75.png

我这里选择的配置如下:

2482a756133f8dc622ad7321e1599d3b.png

选择角色,其他的默认即可。

7ce0c898117eaca0a5474c88e9bb38c8.png

大概5分钟左右,实例就创建成功了。

f4161e4fc039f310945e09efe641c2ae.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

上传刚刚下载的代码。

f93c1798b77c10b130f97964242f7765.png

直接打开这个代码。

fe303caadf34f09a88caf57f057504c9.png

选择合适的 conda 环境。

0353164fb637daa88f342b213a2670d9.png

2、一键运行所有代码

这里我们直接一键运行运所有代码即可,代码执行过程中会依次完成 Stable Diffusion 模型相关类和函数的代码定义、推理测试,并打包代码和模型,然后部署模型至 Sagemaker 推理终端节点 (PS:这里的所有代码运行完毕大概需要5到10分钟左右)

485ab944d2cecd272787e4c690162b50.png

对上面运行代码进行分析如下

1、环境准备,代码模型下载

检查当前 pyTorch 版本。

!nvcc --version
!pip list | grep torch

左滑查看更多

安装 Stable Diffusion 代码运行额外需要的依赖库,这网速飞快。

!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 下载代码和模型文件

84a71800caab4858b7cc3784ba768f63.png

2、在 Notebook 中配置并使用模型

直接调用 函数进行模型加载。

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。

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 内存不够,则可以尝试以下三种方式进行解决。

▌试一试分辨率小一点的图片;

▌减少生成图片的数量;

▌升级机型。

3、部署模型至 Sagemaker 推理终端节点

我们这里直接使用亚马逊云科技的 SageMaker Python 开发工具包部署模型刚刚已经验证能够运行成功的模型和打包好的代码。

● 编写初始化的 Sagemaker 代码用于部署推理终端节点。

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 脚本,进行模型的加载和推理。

%%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}

左滑查看更多

03

在 Amazon Cloud9 创建

前后端 Web 应用

Amazon Cloud9 是一种基于云的集成开发环境 (IDE),只需要一个浏览器,即可编写、运行和调试代码。包括一个代码编辑器、调试程序和终端,并且预封装了适用于 JavaScript、Python、PHP 等常见编程语言的基本工具,无需安装文件或配置开发计算机,即可开始新的项目。

● 这里我直接参考官方提供的手册,跟着操作即可完成 Web 服务的部署

创建云服务实例,并进行 web 环境安装

这里我试用了 Cloud9 云服务,在查找服务处搜索 Cloud9,并点击进入Cloud9服务面板即可。

3a6896b747c5864d1ef6da62ec2da44f.jpeg

点击创建环境。

b7089c2d26d1f82147d76f02aa08c04c.jpeg

我这里的设置如下。

b75851327fb124182dfad8ac153c303f.png

其他部分配置保持默认,在页面底部点击橙色的 Create 按钮创建环境。环境的创建将花费1-2分钟的时间。

e54a81e52cffd00e6b29550ea7e375d8.jpeg

创建成功之后,点击 open 进入服务控制台。

e0941a1effb30cea46b53c080ea8029b.jpeg

粘贴左侧的代码,复制到控制台 bash 窗口进行运行,会自动下载和解压代码。

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

左滑查看更多

a1b6a5f41ccd71588926529faaf7f6ee.jpeg

运行启动 web 服务,输入想要生成的

图像参数和提示词调用推理服务

依赖的环境安装好之后,就可以运行这个服务代码。

6715b8a50d5d7bf8bb77a059f7657e43.jpeg

服务启动成功之后,访问 127.0.0.1:8080 即可访问本地服务;设定 width 和 Length 参数,以及想要生成的图片描述,然后点击提交。

9449e19b9d4d5a51e391a453f46e164a.png

等待几秒钟之后,就得到了上面输入的两个提示词对应生成的图像,看得出来效果还是非常不错的;

▌经测试发现,即使每次输入的提示词是同一个,模型生成得到的输出也是不固定的;

▌输入的提示词语越精准,生成的图像效果会容易越好;

▌基于 Amazon SageMaker 服务平台,如此快速(不到一个小时)就能搭建好一套 AI 模型的 web 端在线推理调用,果然好的技术就是第一生产力。

e4a0aebea22c773255a3091b41a92acb.png

为大家展示一些我的生成示例(这图像生成效果我觉得还是蛮惊艳的)。

b290581c8d0c68ebb5273e83e85b18fd.png

04

更多有趣 AI 创意图像的生成

有待大家一起去探索

这次有幸受邀参加亚马逊云科技【云上探索实验室】活动,跟着亚马逊云科技技术团队提供的系列非常详尽的 AI 模型云上推理部署实战文档和视频教程一步步进行真实的云上服务部署操作,让我再次认识到 AI 在各个领域技术突破所带来的强大生产力,而通过借助 Amazon SageMaker 平台进行 AI 模型服务部署大大简化我们普通开发者进行 AI 模型部署服务的难度,使得对于中小企业和个人开发者而言,AI 服务的快速落地也不再是一件难事。

小伙伴们有兴趣的话,也可以参考 SageMaker 平台提供的 AIGC 模型部署官方文档和我这里的博客进行尝试,部署自己的 AIGC 模型:

https://catalog.us-east-1.prod.workshops.aws/workshops/3b86fa89-da3a-4e5f-8e77-b45fb11adf4a/zh-CN/1-create-notebook?trk=cndc-detail

通过使用 Amazon SageMaker 服务平台,我们只需要一个浏览器,即可编写、运行和调试各种代码,无需进行复杂的机器适配和环境搭建,能够快速完成 AI 模型的推理、测试、验证部署工作。

如果你也想亲身感受最新、最热门的亚马逊云科技开发者工具与服务,那么只需扫描下方二维码,即可跟着亚马逊云科技团队工程师一起对更多有趣的 AI 技术进行探索与实践。

▌亚马逊云科技之云上探索实验室活动:从实践中探索机器学习边界

8019259c1913ac97bdb520593386ed62.jpeg

率先完成学习打卡小伙伴,还有丰厚奖品可以领取。

cbafba989eb30bcd94e49f5336d0105e.png

83f3de7a8ecff8e5aaba372abdbb8faa.gif

a1477c93badeb64668eeaab42e7dada3.gif

听说,点完下面4个按钮

就不会碰到bug了!

30f4578329bd60b107700540d9bd0386.gif

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值