使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版

这篇具有很好参考价值的文章主要介绍了使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章,我们聊聊如何使用 Docker 来本地部署使用 Stability AI 刚刚推出的 SDXL 1.0,新一代的开源图片生成模型,以及在当前如何高效的使用显卡进行推理。

写在前面

好久没有写 Stable Diffusion 相关的内容了,趁着 SDXL 刚刚推出,写一篇如何使用 Docker 快速上手的教程吧。

这篇文章应该是目前网络上不多的详细的实践内容了,包含如何绕开目前开源组件中的各种坑,快速上手的经验。

相关的代码,我已经上传到了 GitHub。

使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版,为了不折腾而去折腾的那些事,docker,人工智能,stable diffusion,SDXL,Python

开源项目地址是:soulteary/docker-sdxl 和以往一样,同样欢迎“一键三连”~

其实,关于 Stable Diffusion 的文章,我之前写过三篇了:《在搭载 M1 及 M2 芯片 MacBook设备上玩 Stable Diffusion 模型》、《使用 Docker 来快速上手中文 Stable Diffusion 模型:太乙》、《八十行代码实现开源的 Midjourney、Stable Diffusion “咒语”作图工具》。最后一篇文章中的开源项目 soulteary/docker-prompt-generator,在上半年微博、Twitter,还有对我来说更重要的同好交流平台 GitHub 上都火了一段时间,上了热榜。感兴趣的同学,也可以自行翻阅,试试看。

本篇文章,我们先聊聊使用显卡来玩 SDXL,CPU 推理和运行优化,我们在后续的文章中再聊。

准备工作

准备工作部分,我们还是只需要做两个工作:准备模型文件和模型运行环境。

关于模型运行环境,我们在之前的文章《基于 Docker 的深度学习环境:入门篇》中聊过,就不赘述了,还不熟悉的同学可以阅读参考。

只要你安装好 Docker 环境,配置好能够在 Docker 容器中调用显卡的基础环境,就可以进行下一步啦。

下载 SDXL 的运行环境代码

模型运行环境和相关的代码,我已经上传到 soulteary/docker-sdxl 项目中了,我们直接下载就好:

# 使用 Git 下载
git clone https://github.com/soulteary/docker-sdxl.git

# 或者,下载 Zip 代码包
wget https://github.com/soulteary/docker-sdxl/archive/refs/heads/main.zip
# 解压缩压缩包
unzip main.zip
# 重命名目录
mv docker-sdxl-main docker-sdxl

代码下载完毕,切换工作目录到 docker-sdxl 中,待后续使用。

# 切换工作目录
cd docker-sdxl

下载模型文件

官方发布的模型文件在 HuggingFace,就基础使用而言,我们可以主要关心下面三个模型:

  • 基础模型:stabilityai/stable-diffusion-xl-base-1.0
  • 精炼模型:stabilityai/stable-diffusion-xl-refiner-1.0
  • 超分模型:stabilityai/sd-x2-latent-upscaler
# 确认你已经安装过 Git LFS https://git-lfs.com

git lfs install
# 下载基础模型
git clone https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0

# 下载精炼模型
git clone https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0

# 下载超分模型
git clone https://huggingface.co/stabilityai/sd-x2-latent-upscaler

如果你下载遇到困难,可以访问项目 soulteary/docker-sdxl 首页,使用网盘地址(网盘地址如果失效,前往 GitHub 提 issue 更新地址)。

当我们下载完毕下面三个模型后,整理下目录结构,将 stabilityai 模型目录放置到上文中的 docker-sdxl 里,准备工作就完成啦。

目录结构类似下面这样:

├── docker
├── LICENSE
├── README.md
├── scripts
│   ├── make-sdxl-base.sh
│   ├── make-sdxl-one-click.sh
│   └── make-sdxl-runtime.sh
├── src
└── stabilityai
    ├── sd-x2-latent-upscaler
    ├── stable-diffusion-xl-base-1.0
    └── stable-diffusion-xl-refiner-1.0

使用 Docker 容器使用 SDXL

如果你不熟悉也不太想折腾容器构建,可以使用预先构建好的运行环境镜像。

预构建的 SDXL 运行镜像

镜像文件包含了 Nvidia PyTorch 镜像,所以尺寸比较大,大概 20GB 左右。

目录中包含两种镜像,Nvidia PyTorch 镜像和公版 PyTorch 搭配 xformers 的镜像,选择其中一个就行,个人推荐前者。

下载地址:网盘地址(网盘地址如果失效,前往 GitHub 提 issue 更新地址)

完成镜像下载之后,我们使用下面的命令导入镜像,然后可以跳转到 “使用 Docker 运行 SDXL 文章小节”:

docker load -i sdxl-runtime.tar
# 或
docker load -i sdxl-runtime-xformers.tar

成功执行命令后,我们能够看到类似下面的提示:

Loaded image: soulteary/sdxl:runtime
# 或
Loaded image: soulteary/sdxl:runtime-xformers

构建 SDXL 模型应用程序

构建模型的基础应用,我们依旧选择 Nvidia 官方镜像,版本选择最新的稳定版:nvidia/pytorch:23.07-py3。

确保我们的工作目录在 docker-sdxl 中后,分别执行:

# 构建基础镜像
bash scripts/make-sdxl-base.sh
# 构建运行时镜像
bash scripts/make-sdxl-runtime.sh

命令执行后,需要耐心等待一段时间,构建脚本会自动从 Nvidia 下载基础镜像,并完成关键的 PyTorch 生态依赖的安装。

完成后,我们执行 docker images 能够找到类似下面两个镜像文件:

REPOSITORY           TAG                      SIZE
soulteary/sdxl       runtime-xformers         25.1GB
soulteary/sdxl       runtime                  20.2GB

虽然我们会看到还有两个 20G 左右的文件,这里可能有同学会有存储恐慌,但大可不必。

因为Docker 使用分层存储,实际上不会有重复的 4 个 20G 的文件,而是基于一个相同的 20G 文件,4个镜像有各自的增量存储内容。

使用 Docker 运行 SDXL 1.0 正式版

上文中我们构建了运行镜像,也准备好了模型文件,就可以通过 Docker 命令,快速进入可以玩 SDXL 的容器内的交互式命令行啦:

docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --rm -it -v `pwd`/stabilityai/:/app/stabilityai -p 7860:7860 soulteary/sdxl:runtime

进入终端后,我们有三种玩法(三个 python 程序和一个模型目录):

# ls
basic.py  refiner-low-vram.py  refiner.py  stabilityai

只使用基础模型:python basic.py,默认启动将消耗 7.6G 显存,峰值使用 11G 显存,提供基础的 SDXL 绘图能力。

使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版,为了不折腾而去折腾的那些事,docker,人工智能,stable diffusion,SDXL,Python

使用 SDXL 全家桶:python refiner.py,默认启动使用 14G 显存,不启用超分辨率,峰值消耗 18G 显存,如果启用超分辩率(upscale),则需要消耗 20G 显存,提供图片绘制、精炼优化、分辨率提升三种能力。

使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版,为了不折腾而去折腾的那些事,docker,人工智能,stable diffusion,SDXL,Python

使用节约内存版程序:python refiner-low-vram.py,默认启动 500MB 显存占用,当我们不启用超分时,最多时显存占用 8G,启用超分辨率,则会最多消耗 16GB 显存。当然,省显存的代价就是需要不停的从硬盘或内存中读取模型到显存,存在数据交换的成本,生成图片的时间比前两种方案要长一些。

不论你选择哪一种方式运行 SDXL ,当你看到终端日志输出内容中有类似下面的内容时:

Running on local URL:  http://0.0.0.0:7860

To create a public link, set `share=True` in `launch()`.

打开浏览器,访问 http://localhost:7860 或者 http://你的IP:7860,就可以开始玩啦。

默认的容器版本,我选择了 Nvidia PyTorch 版本,而 HuggingFace 的 SDXL 依赖 xformers 和“公版” Pytorch,你可以根据自己的喜好选择使用,想使用后者的话,也很简单,只需要调整 Docker 命令种中的镜像名称即可:

docker run --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --rm -it -v `pwd`/stabilityai/:/app/stabilityai -p 7860:7860 soulteary/sdxl:runtime-xformers

好了,基础的环境准备、镜像构建和镜像运行我们就聊到这里。

SDXL 开源社区踩坑和脱困

在 SDXL 发布几天后,不少开源软件的 Bugs 都有改观,所以这篇文章需要描述和解释的内容少了不少。

不过,依旧存在一些有趣的细节。

提升 Diffusion Pipeline 执行效率

不少开源项目都会将 Diffusion Pipeline 放到 imagine 这类绘图函数中:

def imagine(prompt, negative_prompt, width, height, scale, steps, seed, upscaler):
    pipe = DiffusionPipeline.from_pretrained(
        "stabilityai/stable-diffusion-xl-base-1.0",
        torch_dtype=torch.float16,
        variant="fp16",
        use_safetensors=True,
        local_files_only=True,
    ).to("cuda")
...

除非搭配 gc 类功能一起使用,起到小内存使用多种模型的作用外,一般来说弊大于利:

  • 需要更长时间来进行推理,使用体验不是那么好。
  • 模型尺寸一般都比较大,反复读取硬盘,对于质量不是那么好的硬盘,大概率会有一些使用寿命损失。

所以,在实现模型推理程序时,我们可以考虑将 Diffusion Pipeline 缓存在显存内,避免重复加载,以及提升“推理前准备工作的速度”:

def get_base_pipeline():
    pipe = DiffusionPipeline.from_pretrained(
        "stabilityai/stable-diffusion-xl-base-1.0",
        torch_dtype=torch.float16,
        variant="fp16",
        use_safetensors=True,
        local_files_only=True,
    ).to("cuda")
    return pipe

base_pipeline = get_base_pipeline()

def imagine(prompt, negative_prompt, width, height, scale, steps, seed, upscaler):
    base_image = get_base_image(prompt, negative_prompt, width, height, scale, steps, seed)
    refiner_image = refiner_pipeline(prompt=prompt, negative_prompt=negative_prompt, image=base_image).images[0]
...

当然,如果你内存比较大,把模型文件扔内存中,或者做一个简单的 ramdisk (过往文章有提)也问题不大。

xformers 带来的暂时性性能劣化

在之前使用 SD 1.0、1.5、2.x 的时候,我们一般会安装 xformers 来进行推理速度提升。

在 Stable diffusion XL 文档中,HuggingFace 的同学,有提醒如果 Torch 版本在 2.0 以下,需要安装 xformers 来启用 xformers attention 来加速推理。

但是漏了提醒,如果使用大于 2.0 版本的 Torch,将会带来性能劣化,默认安装之后,会进行本地编译构建,完成安装后会提醒我们有一些组件版本不兼容:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
torch-tensorrt 1.5.0.dev0 requires torch<2.2,>=2.1.dev, but you have torch 2.0.1 which is incompatible.
torchdata 0.7.0a0 requires torch==2.1.0a0+b5021ba, but you have torch 2.0.1 which is incompatible.
torchtext 0.16.0a0 requires torch==2.1.0a0+b5021ba, but you have torch 2.0.1 which is incompatible.
torchvision 0.16.0a0 requires torch==2.1.0a0+b5021ba, but you have torch 2.0.1 which is incompatible.

所以,我们还需要进一步执行命令,安装剩余的依赖:

pip install torchvision torchtext torchdata torch-tensorrt

但即使完成依赖修正,推理速度也会停留在 6.98it/s 左右。而如果使用 Nvidia PyTorch 镜像中的 Torch 版本,则至少能够达到 12.84it/s 左右,性能差距接近一倍。

所以,暂时最好不要安装 xformers

额外的,如果选择继续使用 xformers ,在执行程序的时候,会看到类似下面的错误提醒:

Traceback (most recent call last):
...
...
    import transformer_engine_extensions as tex
ImportError: /usr/local/lib/python3.10/dist-packages/transformer_engine_extensions.cpython-310-x86_64-linux-gnu.so: undefined symbol: _ZN3c10ltERKNS_6SymIntE

目前唯一靠谱的解决方案是参考 microsoft/TaskMatrix/issues/116,卸载掉 transformer-engine

# pip uninstall transformer-engine -y

Found existing installation: transformer-engine 0.9.0
Uninstalling transformer-engine-0.9.0:
  Successfully uninstalled transformer-engine-0.9.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

最后

接下来几篇和 SD 相关的内容,我会试着展开聊聊如何低成本进行 finetune,以及更有效率的执行模型。

作为 Midjourney 用户、身边有非常多小伙伴在用 “SD” 创业折腾,看到 Stable Diffusion 在不断进化,感触还是蛮深的:开源世界的技术在真真切切的、快速的推进着这个领域的软件生态、产品形态持续快速进化。

未来一定会有越来越多的人都认可的新技术带来的价值,并投身其中,非常期待更热闹的开源社区和更繁荣的 AI 应用生态。

–EOF


我们有一个小小的折腾群,里面聚集了一些喜欢折腾、彼此坦诚相待的小伙伴。

我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术资料。

喜欢折腾的小伙伴,欢迎阅读下面的内容,扫码添加好友。

关于“交友”的一些建议和看法

添加好友时,请备注实名和公司或学校、注明来源和目的,珍惜彼此的时间 😄

苏洋:关于折腾群入群的那些事


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2023年07月29日
统计字数: 8600字
阅读时间: 18分钟阅读
本文链接: https://soulteary.com/2023/07/29/get-started-with-stability-ai-sdxl-1-0-release-using-docker.html文章来源地址https://www.toymoban.com/news/detail-620234.html

到了这里,关于使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker快速上手:使用Docker部署Drupal并实现公网访问

    Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它的学习曲线可能相对较陡,但一旦熟悉了它的工作方式,用户就能够充分利用其功能和灵活性。在本文中,我们将介绍如何使用Docker快速部署Drupal,并且结合cpolar内网穿透工具实现公

    2024年02月08日
    浏览(46)
  • 从零开始的Docker Desktop使用,Docker快速上手 ( ̄︶ ̄)↗ Docker介绍和基础使用

    文章目录 Docker简介和安装和基础配置 Docker简介 安装Docker Desktop 换源 Docker基础使用 对Docker操作 对镜像的基础操作 获取当时所有镜像(docker images) 拉去镜像(docker pull) 删除镜像(docker rmi) 加载镜像(docker run) 使用交互式容器 查看容器(docker ps) 启动和关闭容器 操作后台容器 删除容

    2024年02月15日
    浏览(40)
  • 使用 Docker 快速上手官方版 LLaMA2 开源大模型

    本篇文章,我们聊聊如何使用 Docker 容器快速上手 Meta AI 出品的 LLaMA2 开源大模型。 昨天特别忙,早晨申请完 LLaMA2 模型下载权限后,直到晚上才顾上折腾了一个 Docker 容器运行方案,都没来得及写文章来聊聊这个容器怎么回事,以及怎么使用。 所以,现在就来聊聊如何快速上

    2024年02月16日
    浏览(39)
  • 使用 Docker 快速上手中文版 LLaMA2 开源大模型

    本篇文章,我们聊聊如何使用 Docker 容器快速上手朋友团队出品的中文版 LLaMA2 开源大模型,国内第一个真正开源,可以运行、下载、私有部署,并且支持商业使用。 感慨于昨天 Meta LLaMA2 模型开放下载之后,GitHub 上出现了许多“只有 Readme 文档” 的开源模型项目,并一时间在

    2024年02月16日
    浏览(50)
  • uni-app 经验分享,从入门到离职(一)——初始 uni-app,快速上手(文末送书福利1.0)

    本篇文章是我的 uni-app 专栏的第一篇文章,这个专栏主要是分享和介绍从零到一学习和使用的 uni-app 的笔记和个人经验。通过个人的学习经验和工作经验来给大家分享关于 uni-app 开发的技巧,以及快速入门的诀窍等等。 本篇文章是我的 uni-app 专栏的第二篇文章,这个专栏主要

    2024年02月15日
    浏览(45)
  • Stable Diffusion 开源模型 SDXL 1.0 发布

    关于 SDXL 模型,之前写过两篇: Stable Diffusion即将发布全新版本 Stable Diffusion XL 带来哪些新东西? 一晃四个月的时间过去了,Stability AI 团队终于发布了 SDXL 1.0。当然在这中间发布过几个中间版本,分别是 SDXL beta 和 SDXL 0.9。相较于 SDXL 0.9 的仅供研究的版本,这次的完整版本进

    2024年02月15日
    浏览(47)
  • 使用 Docker 和 Diffusers 快速上手 Stable Video Diffusion 图生视频大模型

    本篇文章聊聊,如何快速上手 Stable Video Diffusion (SVD) 图生视频大模型。 月底计划在机器之心的“AI技术论坛”做关于使用开源模型 “Stable Diffusion 模型” 做有趣视频的实战分享。 因为会议分享时间有限,和之前一样,比较简单的部分,就用博客文章的形式来做补充分享吧。

    2024年01月24日
    浏览(79)
  • Stable Diffusion - Stable Diffusion WebUI 支持 SDXL 1.0 模型的环境配置

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132056980 SDXL 1.0 版本 是 Stable Diffusion 的最新版本,是基于潜在扩散模型的文本到图像生成技术,能够根据输入的任何文本生成高分辨率、高质量、高多样性的图像,具有以下特点: 更好的成

    2024年02月14日
    浏览(49)
  • Stable Diffusion - SDXL 1.0 全部样式设计与艺术家风格的配置与提示词

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132072482 来源于 Anna Dittmann 安娜·迪特曼,艺术家风格的图像,融合幻想、数字艺术、纹理等样式。 SDXL 是 Stable Diffusion 的最新版本,是潜在扩散模型,能够从文本描述中生成高分辨率、高质

    2024年02月14日
    浏览(50)
  • Stable Diffusion 免费升级 SDXL 1.0,哪些新特性值得关注?体验如何?5 分钟带你体验!

    7 月 26 日,Stability AI 发布了 SDXL 1.0,号称目前为止,最厉害的开放式图像生成大模型。 它到底有没有网上说的那么炸裂?真的已经实现了像 midjourney 一样 靠嘴出图 的功能吗?相对于之前的版本,增加了哪些新特性? 今天体验了一把,一起来看看! 大家都知道,目前的绘画

    2024年02月05日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包