Code前端首页关于Code前端联系我们

Amazon SageMaker进行稳定扩散模型的在线服务分发

terry 2年前 (2023-09-28) 阅读数 62 #未命名

前言-浅谈AIGC

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

AIGC-引领人工智能走向春天

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

人工智能绘画绽放春天

AIGC最近带来生产力巨大提升的风潮一直在不断进化升级,竞相出现。我们欢迎 ChatGPT 技术套件为我们带来的人工智能派对浪潮。在计算机视觉领域,AI绘画近两年逐渐走向图像生成阶段的中期。

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署 文本生成图像(AI绘画)是一种基于文本生成图像的新型制作方式。与人类创作者相比,文本生成图像显示出制作成本低、速度快、易于批量生产的优势。

AI绘画稳定扩散2.0来了

过去的一年,AI绘画领域发展迅速。国内外科技巨头和初创企业纷纷涌入,不少文本生成图像技术产品涌现。这些产品的背后主要是dall-e-2以及基于扩散生成算法的稳定扩散等模型。

2022年Stable Diffusion 2.0的发布,再次激发了无数创作者利用AI文本图像生成技术生成高品质创意图像的热情。如下图所示,Stable Diffusion 相关代码仓库和 gitHub star 数量正在快速增长:

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

与之前版本的 Stable Diffusion 相比,Stable Diffusion 2.0 取得了更好的图像生成效果。具体表现如下:

  1. 通过在模型架构中引入交叉注意力层,将扩散模型转变为强大的模型。灵活的生成器用于文本或边界框等通用条件输入,并以卷积方式实现高分辨率图像生成;
  2. 基于潜在扩散模型(LDM),在图像修复和基于类别的图像合成方面已经实现。当前最先进的分数;
  3. 在多项任务上实现了极具竞争力的性能,包括无条件图像生成、文本到图像合成和超分辨率;
  4. ,同时与基于像素的扩散模型方法竞争。它显着降低了计算要求,并大大提高了推理速度。

每个人都有机会成为前沿技术探索者

Stable Diffusion 2.0、chatGPT等系列模型在计算机视觉和自然语言处理两大AI应用领域的出色表现引起了人们的极大兴趣学术界和工业界轰动一时,人工智能的发展迎来了新的春天。

众所周知,随着AI任务复杂度和应用范围的增加,高精度模型不断大规模出现,AI模型的训练和推理对算力的要求越来越高。对于中小企业和个人开发者来说,如果想要训练或部署稍大一点的AI模型,就必须面临购买大量计算资源和高额投资的风险。然而,拥有高计算资源的公司或许有机会抓住各种神奇技术的历史机遇。

我们普通的创业者、开发者有机会在我们看好的领域培养和推行AIGC模式吗?答案是肯定的。在当前的云服务时代,每个人都有机会成为前沿科技的探索者。

最近受邀参加亚马逊云技术“云探索实验室”的一系列活动,实践云技术。我通过Amazon SageMaker平台快速完成了AIGC模型推理服务的在线部署,这给了我很多启发和惊喜。事实证明,在AI模型中,云端的推理分发也可以如此简单、优雅、流畅。在参加这次活动的实践过程中,我也学到了很多有用的知识和技能。下面的博文将带您经历我的AIGC模型(Stable Diffusion 2.0)Web服务实施之旅,体验如何在云端部署服务。前往实施 AI 模型服务:

基于 Amazon SageMaker 的稳定扩散模型实施

了解 Amazon SageMaker

Amazon SageMaker 是 Sage 提供的完全托管的机器学习服务。研究人员和开发人员可以快速轻松地构建和训练机器学习模型,然后直接部署到生产就绪的主机环境。 SageMaker 涵盖了整个 ML 工作流程,包括标记和准备数据、选择算法、训练模型、调整和优化模型以进行分发、预测和执行。

经过一周多的学习和实践体验,我发现这个平台简直就是为我们创业者和个人开发者量身定制的实现AI服务的工具。 对于很多AI工程项目,我们只需要构建自己的训练集和测试集,Amazon SageMaker就可以帮助我们轻松完成剩下的模型训练、推理和部署。

对于本篇博文分享的Stable Diffusion 2.0,通过参考官方技术文档,我只花了大约20分钟就在Amazon SageMaker上成功搭建了一个稳定的AI绘画在线服务。那么接下来就让我们一起来揭晓这个秘密吧。

使用Amazon SageMaker进行环境搭建和模型推理

1.创建jupyter Notebook运行时

  • 点击链接登录亚马逊云技术管理控制台

在搜索框中搜索SageMaker,如下图

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

这里我们创建一个Notebook编程示例

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

我这里选择的配置如下:

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

选择角色,其他保持默认

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

大约5分钟后,实例将被创建

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

  • 点击链接下载代码

你刚才的代码下载完

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

直接打开此代码

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

选择合适的conda环境

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

2.一键运行所有代码

这里我们可以一键运行所有代码。代码执行过程中,将依次完成稳定扩散模型相关类和函数的代码定义和推理测试,将代码和模型打包,然后将模型部署到Sagemaker推理终端节点(PS :这里所有代码运行起来大概需要5到10分钟。)

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

关键代码分析如下

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

检查当前pyTorch版本

!nvcc --version
!pip list | grep torch

安装稳定的扩散代码运行多个依赖库,网速很快

!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

下载代码和模型文件,只需下载Hugging提供的代码和模型面对这里

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

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

直接调用函数加载模型

import torch
import datetime
from diffusers import StableDiffusionPipeline
# Load stable diffusion 
pipe = StableDiffusionPipeline.from_pretrained(SD_MODEL, torch_dtype=torch.float16)

在Cuda上进行模型推理,这里是稳定的传播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内存不足,可以尝试以下三种方法解决问题

  1. 尝试生成较低分辨率的图像
  2. 减少生成图像的数量
  3. 升级模型并选择更强大的 GPU 服务器

3 。将模型部署到Sagemaker推理终端节点

这里我们直接使用AWS的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=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}")
  • 创建 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 response
    return {"generated_images": encoded_images}

在 Amazon Cloud 上创建前端和后端 Web 应用程序❙AW S Cloud❝是一个基于云的集成开发环境 (IDE),仅需要 Web 浏览器即可编写、运行和调试代码。包括代码编辑器、调试器和终端,并预装了 JavaScript、Python、PHP 等常见编程语言的基本工具,因此您无需安装文件或配置开发计算机即可启动新项目。
  • 这里我直接参考官方手册,按照说明完成Web服务的部署

1。创建云服务实例并安装Web环境

这里尝试了Cloud9云服务,搜索服务搜索Cloud9,点击进入Cloud9服务面板

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

点击创建环境

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

我的设置在这里如下

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

其他配置保持默认即可。单击页面底部的橙色“创建”按钮以创建环境。创建环境需要 1-2 分钟。

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

创建成功后,点击打开进入服务控制台

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

粘贴左侧代码,复制到控制台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

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

2。运行启动Web服务,输入需要的生成图片参数和提示词,调用推理服务

依赖环境安装好后,就可以运行服务代码了

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

服务启动后,访问127.0.0.1 0.1:8080访问本地服务;输入宽度和长度参数,以及想要生成的图片描述,然后点击发送

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

,等待几秒后,你就会得到上面指定的两个提示对应的生成图片。可以看到效果还是很好的;

  • 经过测试,发现虽然每次提示的输入都一样,但是模型生成的输出并不是固定生成的
  • 基于Amazon SageMaker服务平台,可以构建一个Web基于人工智能模型的推理会话如此之快(熟练后不到半小时)。果然,好的技术就是第一生产力

亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

3。文本图像生成示例

这里给出3组文本图像生成示例供参考:

疑问词生成图像示例1生成图像示例2ab领航船无人驾驶汽车飞驰穿过沙漠亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署
雪山顶上迪士尼风格的小木屋,artstation亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

4。 Stable Diffusion 2.0模型效果优缺点分析

目前业界已经推出了很多文本图像生成服务和模型。总的来说,我认为Stable Diffusion 2.0的图像生成效果还是相当惊人的。优点很明显:

  1. 可以直接支持512x512像素和768x768像素的图像生成。生成图像的整体质量和局部细节得到了显着改善。二、Stable Diffusion 2.0 i 在超分辨率高阶扩散模型的支持下,可以进一步生成分辨率在2K以上的高分辨率图像。
  2. 文本词汇分析比较准确,推理速度较之前版本有很大提升。总体而言,它非常高效且稳健,超越了当今行业中的许多型号。

缺点:Stable Diffusion 2.0对于太短和太长的短信文字会生成截然不同的图像,这意味着有时候如果你想生成更接近我们期望的图像,你需要对专业有了解文本消息词汇表使输入文本(例如查询词)更加准确且更易于模型理解。 作者:墨家AI
来源:稀土掘金

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门