【案例共创】昇腾NPU部署SDXL文生图模型

案例内容

本案例由开发者:于东提供

一、概述

1. 案例介绍

SDXL (Stable Diffusion XL) 是Stable Diffusion系列中最先进的文生图(text-to-image)模型,其主要特点是:模型规模更大、图像质量更高、文本理解能力更强。

2. 适用对象

  • 个人开发者
  • 高校学生

3. 案例时间

本案例总时长预计30分钟。

4. 案例流程

4cfa6f033babe4889028cc75cb7261ae.png

说明:

  1. 用户进入开发者空间配置Notebook环境;
  2. 启动Notebook,编写代码,进行文生图推理体验;

5. 资源总览

本案例预计花费0元。

资源名称规格单价(元)时长(分钟)
开发者空间-NotebookNPU basic · 1 * NPU 910B · 8v CPU · 24GB euler2.9-py310-torch2.1.0-cann8.0-openmind0.9.1-notebook030

二、环境配置

1. 开发者空间配置

面向广大开发者群体,华为开发者空间提供免费昇腾NPU资源的Notebook,方便开发者学习昇腾相关的专业知识以及配套实验。

开发者可以直接进入华为开发者空间工作台界面,找到右侧AI Notebook,点击立即前往> 立即启动>查看Notebook,进去到Notebook界面。

41ba330eb857a30da37eec778fc70dba.PNG

预制镜像:euler2.9-py310-torch2.1.0-cann8.0-openmind0.9.1-notebook;

关联模型:stable-diffusion-xl-base-1_0;

1bcb4f46b1aa6ef1da4eb1af42857154.PNG

立即启动:

98f4240ed91eab97253d9ef130b165cc.PNG

启动中,请耐心等待:

bbab570bc8c1692159a6f499da6cb12b.PNG

查看Notebook:

91c684026022dcd66a10d819e705e62b.PNG

三、使用Diffusers运行SDXL模型

1. 运行环境更新

进入Notebook后,点击终端:

103fa79baa6e9b72f0c12b94b829f235.PNG

打开终端窗口:

495d2873b6b6ca37020a3992908dfe68.PNG

根据当前环境的pytorch版本更新Diffusers等框架的版本。

在终端输入以下命令行:

pip install --upgrade diffusers[torch]

pip install --upgrade transformers[torch]

8264ef440380e2c1d23ab308b2086f3c.PNG

当安装完成后,如下图通过pip list查看所有安装的三方库:

9acd7e9795e6112b8566bb35112926e3.PNG

b50ad8d910829c6fa002b9c0a2e3d609.PNG

2. 文生图推理

回到Notebook首页,点击笔记本下方的Python3:

b51be7d68339348311009eb64553fd00.PNG

将以下代码复制到单元格中:

import torch
from diffusers import DiffusionPipeline

# 推理配置
# 模型地址如果是单独下载的请在模型目录执行pwd命令查看具体的路径
# 预置路径:model/stable-diffusion-xl-base-1_0
model_path = "model/stable-diffusion-xl-base-1_0"
device="npu"
# 此处的文生图提示词是我让deepseek帮我写的:我正在使用sdxl-base-1.0模型进行文生图创作,需要生成一张三体太空电梯的图片,请帮忙写提示词,提示词要小于70个tokens
prompt = "Space elevator from Earth's equator to space, anchored by ocean base. Translucent nanotube cable extending to orbital station. Glowing climbers ascending, starry cosmos background. Three-Body sci-fi aesthetic, volumetric lighting --ar 4:3"

# 加载模型
pipe = DiffusionPipeline.from_pretrained(model_path, torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to(device)

# if using torch < 2.0
# pipe.enable_xformers_memory_efficient_attention()

# 推理
image = pipe(prompt=prompt).images[0]
# 保存图片
image.save("output1.png")

# 显示图片
import matplotlib.pyplot as plt
plt.axis("off")
plt.imshow(image)

注意:本案例使用的昇腾专区的Notebook已经预置了sdxl-base模型,预置路径:model/stable-diffusion-xl-base-1_0

fe49be07b200b94f86f72f59c9985444.PNG

使用stable-diffusion-xl-base-1_0模型推理,文本生成图片,生成一张三体太空电梯的图片。

点击左上角运行按钮,运行单元格中的代码:37206eaa1897b48b393dc5ab4bfe9ac6.PNG

运行成功后,生成太空电梯图片:

68aef7bdea626717dbbf51fdc89c2f93.PNG

output1.png

2e7e0dd2b0e3622909d43023c730aba1.png

成功生成一张三体太空电梯的图片!

3. 验证文生图推理

生成一张中国古风美女的图片:

提示词:唐朝优雅女子,穿着丝绸汉服,凤凰发簪,瓷白肌肤。桃花背景,月光照耀,水墨风格,飘逸优雅。

# 更换提示词重新生成,deepseek联网+深度思考:我正在使用sdxl-base-1.0模型进行文生图创作,需要生成一张中国古风美女的图片,请帮忙写提示词,提示词要小于70个tokens
prompt="Elegant Tang dynasty lady in silk hanfu, phoenix hairpin, porcelain skin. Peach blossoms background, moonlight glow, ink-wash style, ethereal grace --ar 4:3"

将以下完整代码复制到单元格中:

import torch
from diffusers import DiffusionPipeline

# 推理配置
# 模型地址如果是单独下载的请在模型目录执行pwd命令查看具体的路径
# 预置路径:model/stable-diffusion-xl-base-1_0
model_path = "model/stable-diffusion-xl-base-1_0"
device="npu"
# 更换提示词重新生成,deepseek联网+深度思考:我正在使用sdxl-base-1.0模型进行文生图创作,需要生成一张中国古风美女的图片,请帮忙写提示词,提示词要小于70个tokens
prompt="Elegant Tang dynasty lady in silk hanfu, phoenix hairpin, porcelain skin. Peach blossoms background, moonlight glow, ink-wash style, ethereal grace --ar 4:3"

# 加载模型
pipe = DiffusionPipeline.from_pretrained(model_path, torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to(device)

# if using torch < 2.0
# pipe.enable_xformers_memory_efficient_attention()

# 推理
image = pipe(prompt=prompt).images[0]
# 保存图片
image.save("output2.png")

# 显示图片
import matplotlib.pyplot as plt
plt.axis("off")
plt.imshow(image)

点击左上角运行按钮,运行单元格中的代码:

5078e07b145a33c2d95d32fc070b6cb8.PNG

运行成功后,生成中国古风美女图片:

9fb7a902f100d6e49bf1466762603de3.PNG

output2.png

b19dc23638d30ee7e9d7792129ab42ea.png

生成一张蒙古草原景色的图片:

提示词: 宁静的蒙古草原景观,清澈的蓝天下的广阔绿色平原,散落的野花,远处的传统蒙古包,放牧的马匹,柔和的阳光,宁静的气氛,高度详细,4K摄影,现实主义风格。

# 更换提示词重新生成,deepseek联网+深度思考:我正在使用sdxl-base-1.0模型进行文生图创作,需要生成一张蒙古草原景色图片,请帮忙写提示词,提示词要小于70个tokens
prompt="Serene Mongolian grassland landscape, vast green plains under clear blue sky, scattered wildflowers, traditional yurts in distance, grazing horses, soft sunlight, peaceful atmosphere, highly detailed, 4K photography, realistic style --ar 4:3"

将以下完整代码复制到单元格中:

import torch
from diffusers import DiffusionPipeline

# 推理配置
# 模型地址如果是单独下载的请在模型目录执行pwd命令查看具体的路径
# 预置路径:model/stable-diffusion-xl-base-1_0
model_path = "model/stable-diffusion-xl-base-1_0"
device="npu"
# 更换提示词重新生成,deepseek联网+深度思考:我正在使用sdxl-base-1.0模型进行文生图创作,需要生成一张蒙古草原景色图片,请帮忙写提示词,提示词要小于70个tokens
prompt="Serene Mongolian grassland landscape, vast green plains under clear blue sky, scattered wildflowers, traditional yurts in distance, grazing horses, soft sunlight, peaceful atmosphere, highly detailed, 4K photography, realistic style --ar 4:3"

# 加载模型
pipe = DiffusionPipeline.from_pretrained(model_path, torch_dtype=torch.float16, use_safetensors=True, variant="fp16")
pipe.to(device)

# if using torch < 2.0
# pipe.enable_xformers_memory_efficient_attention()

# 推理
image = pipe(prompt=prompt).images[0]
# 保存图片
image.save("output3.png")

# 显示图片
import matplotlib.pyplot as plt
plt.axis("off")
plt.imshow(image)

点击左上角运行按钮,运行单元格中的代码:

c12bc12ab3fb35b71e30de12ff4296a2.PNG

运行成功后,生成蒙古草原图片:

694a097eb857b6d7d4bced9d331e0640.PNG

output3.png

887e76c95d9a38ae2d1da16952800ccd.png

至此,昇腾NPU部署SDXL文生图模型的案例内容已全部完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值