赞
踩
本篇文章是亚马逊云科技【云上探索实验室】活动的开发者体验分享。通过云上探索实验室,开发者可以用技术实验、产品体验、案例应用等方式,与其他开发者小伙伴一同创造、互助启发,玩转云上技术,为技术实践提供无限可能。云上探索实验室不仅是体验的空间,更是分享的平台,欢迎各位加入!
本篇作者
墨理学 AI
CSDN 博客专家,全网读者粉丝10万+,曾任算法工程师和 AIGC 部署开发工程师,专注于 AI 领域前沿技术学习实战分享。
01
前言—浅谈 AIGC 模型部署
随着人工智能技术的发展与完善,AI Generated Content (AIGC,人工智能自动生成内容) 在内容的创作上为人们的工作和生活带来前所未有的帮助,具体表现在能够帮助人类提高内容生产的效率,丰富内容生产的多样性、提供更加动态且可交互的内容。AIGC 相关技术可以在创意、表现力、迭代、传播、个性化等方面,充分发挥技术优势,打造新的数字内容生成与交互形态。在这两年 AIGC 在 AI 作画、AI 作曲、AI 作诗、AI 写作、AI 视频生成、 AI 语音合成等领域持续大放异彩;尤其是近段时间火遍全网的 AI 绘画,作为用户的我们只要简单输入几个关键词几秒钟之内一幅画作就能诞生。
最近我们迎来了 ChatGPT 系列技术带给我们一波又一波的 AI 盛宴,而在计算机视觉领域,AI 绘画正在逐渐走向图像生成舞台的中央。
文本生成图像(AI 绘画)是根据文本生成图像的新型生产方式,相比于人类创作者,文本生成图像展现出了创作成本低、速度快且易于批量化生产的优势。
近一年来,该领域迅猛发展,国内外科技巨头和初创企业争相涌入,出现了不少文本生成图像的技术产品。这些产品背后主要使用基于扩散生成算法的 dall-e-2 和 Stable Diffusion 等模型。
尤其是2022年 Stable Diffusion 2.0 版本的发布,再次点燃了无数创作者使用 AI 文本图像生成技术来生成高质量创意图像的热情 ,如下图所示,Stable Diffusion 相关代码仓库,gitHub star 数量正在飞速增长:
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 ,如下图所示:
这里我们创建一个笔记本编程实例。
我这里选择的配置如下:
选择角色,其他的默认即可。
大概5分钟左右,实例就创建成功了。
▌复制并搜索链接,下载代码:
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
上传刚刚下载的代码。
直接打开这个代码。
选择合适的 conda 环境。
2、一键运行所有代码
这里我们直接一键运行运所有代码即可,代码执行过程中会依次完成 Stable Diffusion 模型相关类和函数的代码定义、推理测试,并打包代码和模型,然后部署模型至 Sagemaker 推理终端节点 (PS:这里的所有代码运行完毕大概需要5到10分钟左右)
对上面运行代码进行分析如下
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 下载代码和模型文件
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服务面板即可。
点击创建环境。
我这里的设置如下。
其他部分配置保持默认,在页面底部点击橙色的 Create 按钮创建环境。环境的创建将花费1-2分钟的时间。
创建成功之后,点击 open 进入服务控制台。
粘贴左侧的代码,复制到控制台 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
左滑查看更多
运行启动 web 服务,输入想要生成的
图像参数和提示词调用推理服务
依赖的环境安装好之后,就可以运行这个服务代码。
服务启动成功之后,访问 127.0.0.1:8080 即可访问本地服务;设定 width 和 Length 参数,以及想要生成的图片描述,然后点击提交。
等待几秒钟之后,就得到了上面输入的两个提示词对应生成的图像,看得出来效果还是非常不错的;
▌经测试发现,即使每次输入的提示词是同一个,模型生成得到的输出也是不固定的;
▌输入的提示词语越精准,生成的图像效果会容易越好;
▌基于 Amazon SageMaker 服务平台,如此快速(不到一个小时)就能搭建好一套 AI 模型的 web 端在线推理调用,果然好的技术就是第一生产力。
为大家展示一些我的生成示例(这图像生成效果我觉得还是蛮惊艳的)。
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 技术进行探索与实践。
▌亚马逊云科技之云上探索实验室活动:从实践中探索机器学习边界
率先完成学习打卡小伙伴,还有丰厚奖品可以领取。
听说,点完下面4个按钮
就不会碰到bug了!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。