快来玩AI画图!StableDiffusion模型搭建与使用入门~
前言
最近AI很火,先是AI画图,然后就ChatGPT,后者我已经用了一段时间了,用来写作文挺不错的,但OpenAI屏蔽了中国IP,加上用户太多啥的,用起来没那么爽,但没办法全球只此一家,只能捏着鼻子用。而AI画图就不一样了,全是开源的,自己部署一下可以玩个爽~
正好我们这有台2080Ti的工作站,之前用来训练模型的,现在部署个画图应该轻轻松松,于是就开始了折腾之路~
效果
先看看我生成出来的一些图片
汉服 | COSER |
---|---|
大海 | 2B小姐姐 |
Stable Diffusion
AI画图有 Novel AI 、Disco Diffusion、Stable Diffusion 等模型,为了快速上手,我选择了最简单的 Stable Diffusion ~
Stable Diffusion 是一个「文本到图像」的人工智能模型(AI 绘图工具),开源且能部署在家用电脑(对硬件要求不高)上。使用 Stable Diffusion,你可以在拥有 6GB 显存显卡,16GB 内存或只依赖 CPU 的电脑上生成图像,并且仅需几秒钟的时间,无需进行预处理或后处理。
GitHub上有个项目可以快速将 Stable Diffusion 用 docker 跑起来,还附带了 UI 界面,方便得很,本文用的就是这个项目。
项目地址: https://github.com/AbdBarho/stable-diffusion-webui-docker
前置条件
- Linux系统(炼丹绕不开的,推荐Ubuntu系;Windows可以借助WSL,但折腾)
- NVIDIA显卡,6G以上显存(当然AMD显卡或者没显卡用CPU跑也行,但不在本文讨论范围)
- CUDA版本 11.6 以上
- 通畅的网络(能够正常访问GitHub、下载模型)
配置docker网络
安装这个 Stable Diffusion 模型,需要下载很多模型,单纯基础模型和数据就得十几个GB,这些都是要从国外的服务器下载,所以为了安装顺利,先来配置一下docker的代理。
Dockerd 代理
在执行docker pull时,是由守护进程dockerd来执行。因此,代理需要配在dockerd的环境中。而这个环境,则是受systemd所管控,因此实际是systemd的配置。
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf
在这个 proxy.conf
文件(可以是任意 *.conf
的形式)中,添加以下内容:
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080/"
Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"
其中,proxy.example.com:8080
要换成可用的免密代理。
Container 代理
在容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json
。以下配置,只在Docker 17.07及以上版本生效。
{
"proxies": {
"default": {
"httpProxy": "http://proxy.example.com:8080",
"httpsProxy": "http://proxy.example.com:8080",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}
这个是用户级的配置,除了 proxies,docker login 等相关信息也会在其中。
Docker Build 代理
虽然 docker build 的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。在构建时,需要注入 http_proxy 等参数。
如果是通过 docker
命令启动的容器,可以使用以下命令
docker build . \
--build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
--build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t your/image:tag
不过我们一般使用 docker compose 工具,所以接着看看 compose 的配置方式
version: '3.9'
services:
app:
build: ./services/AUTOMATIC1111
image: sd-auto:49
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
改成
version: '3.9'
services:
app:
build:
context: ./services/AUTOMATIC1111
args:
- HTTP_PROXY=http://proxy.example.com:8080/
- HTTPS_PROXY=http://proxy.example.com:8080/
image: sd-auto:49
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
这样就搞定了~
Tips
配置完记得重启 docker daemon
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:无论是 docker run 还是 docker build,默认是网络隔绝的。如果代理使用的是
localhost:1234
这类,则会无效。
CUDA
推荐使用 LinuxMint/Ubuntu 系统自带的驱动管理器安装最新的显卡驱动。
系统方面之前用的是 LinuxMint18(基于Ubuntu16.04) ,看了下 NVIDIA 的官方网站,这系统太老了,已经没办法用上新版驱动和CUDA了,所以我又花了一下午时间把系统升级到 LinuxMint21(基于Ubuntu22.04),然后装上驱动,Ubuntu系装驱动真是方便,一键搞定,没有任何波折,而且驱动附带的 CUDA 也装上了,不用额外折腾,舒服了。
用 nvidia-smi
看看驱动信息
Thu Mar 30 21:39:45 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.89.02 Driver Version: 525.89.02 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:C1:00.0 Off | N/A |
| 0% 30C P8 26W / 300W | 1350MiB / 11264MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 1394 G /usr/lib/xorg/Xorg 114MiB |
| 0 N/A N/A 3198 G cinnamon 38MiB |
| 0 N/A N/A 508973 C python 1192MiB |
+-----------------------------------------------------------------------------+
CUDA版本是12,完美~
搭建步骤
终于要开始搞了
先把代码 clone 下来
git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git
build step 1: 下载模型,需要十几个G的模型
(只要网络通畅,一次搞定没问题的)
cd stable-diffusion-webui-docker
docker compose --profile download up --build
build step 2: 运行本体
这里是选择一套 UI 来启动,这个 auto
就是 UI 的名称,除了这个,还有 auto-cpu
(没显卡用的)、 invoke
、sygil
这几个,我试了之后还是 auto
最好,功能最多。
invoke
的界面比较简洁,似乎速度也比较快,但很多模型和LORA之类的都没法用了~
直接 auto
吧,不要纠结
docker compose --profile auto up --build
驱动、网络没问题的话,等它构建完可以看到类似的信息
stable-diffusion-webui-docker-auto-1 | Creating model from config: /stable-diffusion-webui/configs/v1-inference.yaml
stable-diffusion-webui-docker-auto-1 | LatentDiffusion: Running in eps-prediction mode
stable-diffusion-webui-docker-auto-1 | DiffusionWrapper has 859.52 M params.
stable-diffusion-webui-docker-auto-1 | Applying xformers cross attention optimization.
stable-diffusion-webui-docker-auto-1 | Textual inversion embeddings loaded(1): pureerosface_v1
stable-diffusion-webui-docker-auto-1 | Model loaded in 41.4s (calculate hash: 38.2s, load weights from disk: 1.6s, create model: 0.3s, apply weights to model: 0.3s, apply half(): 0.2s, load VAE: 0.8s).
stable-diffusion-webui-docker-auto-1 | Running on local URL: http://0.0.0.0:7860
然后浏览器打开 http://ip:7860
就可以看到这个界面
输入 prompt 就可以画图了,这里我用了一个风光图的模型,画一幅风景画
如果跑不起来也没事,可以看看后面的「疑难解答」部分。
如何使用
刚开始肯定一脸懵逼,咋画不出高大上的效果啊?
- prompt
- 模型
首先,得学会使用 prompt,也就是生成图片的描述,Stable Diffusion 通过英文文字内容来描述场景或物体,以此来决定生成的图像中会出现什么。文字描述是决定图像生成质量的关键因素。具体如何写 prompt 不在本文讨论范围,请自行搜索相关文章,网上很多。
模型是个统称,其中包含了Checkpoints、LORA、Texture之类的,不细说了,按照模型网站上的教程安装使用就行。
这几个网站可以按提示组合生成 prompt:
- https://promptomania.com/stable-diffusion-prompt-builder/
- https://weirdwonderfulai.art/resources/disco-diffusion-modifiers/
这几个网站有很多人分享的成品图和描述文案:
然后模型的话,可以去这几个网站下载:
疑难解答
failed to solve: rpc error:
报错信息
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to solve with frontend gateway.v0: rpc error: code = Unknown desc = dockerfile parse error on line 8: unknown instruction: cat (did you mean cmd?)
解决方案
https://github.com/AbdBarho/stable-diffusion-webui-docker/issues/190
修改 stable-diffusion-webui-docker/services/AUTOMATIC1111/Dockerfile
将第一行
# syntax=docker/dockerfile:1
改为
# syntax=docker/dockerfile:1.3-labs
然后加上 DOCKER_BUILDKIT=1
参数进行 build
DOCKER_BUILDKIT=1 docker compose --profile auto up --build
pip依赖安装失败
网络问题,虽然前面已经配置好了 docker 的代理,但 build 过程中不会走配置好的代理,需要添加 build args 再配置一次。
在 docker compose 配置中添加 build args 配置代理服务器。
参考文档: https://docs.docker.com/compose/compose-file/compose-file-v3/
修改 docker-compose.yml
文件
auto: &automatic
<<: *base_service
profiles: ["auto"]
build: ./services/AUTOMATIC1111
image: sd-auto:49
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
改为
auto: &automatic
<<: *base_service
profiles: ["auto"]
build:
context: ./services/AUTOMATIC1111
args:
- HTTP_PROXY=http://host:port/
- HTTPS_PROXY=http://host:port/
image: sd-auto:49
environment:
- CLI_ARGS=--allow-code --medvram --xformers --enable-insecure-extension-access --api
显卡驱动问题
报错信息
Error response from daemon: could not select device driver "nvidia" with capabilities: [[gpu]]
需要安装 NVIDIA Container Toolkit
注意这个东西要求 cuda 版本 11.6 以上,如果没有请先更新 cuda 版本。
添加软件源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
注意如果是使用 LinuxMint 之类的 Ubuntu 衍生版,请手动指定 distribution
环境变量为对应的 Ubuntu 发行版,比如我现在用的 Mint 21 相当于 Ubuntu 22.04,所以需要设置 distribution=ubuntu22.04
安装
sudo apt install -y nvidia-container-toolkit
配置
sudo nvidia-ctk runtime configure --runtime=docker
重启 docker daemon
sudo systemctl restart docker
参考资料
- 项目地址 - https://github.com/AbdBarho/stable-diffusion-webui-docker
- 基础入门博客 - https://newzone.top/posts/2022-09-05-stable_diffusion_ai_painting.html
快来玩AI画图!StableDiffusion模型搭建与使用入门~的更多相关文章
- 《Machine Learning in Action》—— 小朋友,快来玩啊,决策树呦
<Machine Learning in Action>-- 小朋友,快来玩啊,决策树呦 在上篇文章中,<Machine Learning in Action>-- Taoye ...
- Darknet_Yolov3模型搭建
Darknet_Yolov3模型搭建 YOLO(You only look once)是目前流行的目标检测模型之一,目前最新已经发展到V3版本了,在业界的应用也很广泛.YOLO的特点就是"快 ...
- 只需3步,快来用AI预测你爱的球队下一场能赢吗?
摘要:作为球迷,我们有时候希望自己拥有预测未来的能力. 本文分享自华为云社区<用 AI 预测球赛结果只需三步,看看你爱的球队下一场能赢吗?>,作者:HWCloudAI. 还记得今年夏天的欧 ...
- 一周总结:AutoEncoder、Inception 、模型搭建及下周计划
一周总结:AutoEncoder.Inception .模型搭建及下周计划 1.AutoEncoder: AutoEncoder: 自动编码器就是一种尽可能复现输入信号的神经网络:自动编码器必须捕 ...
- 玩转 SpringBoot 2 快速搭建 | RESTful Api 篇
概述 RESTful 是一种架构风格,任何符合 RESTful 风格的架构,我们都可以称之为 RESTful 架构.我们常说的 RESTful Api 是符合 RESTful 原则和约束的 HTTP ...
- 入门项目数字手写体识别:使用Keras完成CNN模型搭建(重要)
摘要: 本文是通过Keras实现深度学习入门项目——数字手写体识别,整个流程介绍比较详细,适合初学者上手实践. 对于图像分类任务而言,卷积神经网络(CNN)是目前最优的网络结构,没有之一.在面部识别. ...
- keras搭建神经网络快速入门笔记
之前学习了tensorflow2.0的小伙伴可能会遇到一些问题,就是在读论文中的代码和一些实战项目往往使用keras+tensorflow1.0搭建, 所以本次和大家一起分享keras如何搭建神经网络 ...
- 安卓自动化测试(2)Robotium环境搭建与新手入门教程
Robotium环境搭建与新手入门教程 准备工具:Robotium资料下载 知识准备: java基础知识,如基本的数据结构.语法结构.类.继承等 对Android系统较为熟悉,了解四大组件,会编写简单 ...
- 使用 gulp 搭建前端环境入门篇(转载)
本文转载自: 使用 gulp 搭建前端环境入门篇
- vue-cli脚手架搭建项目简单入门一
搭建系统: Windows系统 简单了解Node.js.npm,安装Node.js,下载网址:http://nodejs.cn/download/ 查看node,npm安装成功与否.打开cmd命令行, ...
随机推荐
- 利用expect交互批量修改普通用户过期密码
利用expect交互批量修改普通用户过期密码 因为公司接了一个密码托管的活,有10000多台机器,系统有 openSUSE,SUSE,Ubuntu,centos,Oracle-Linux, 而且什么版 ...
- 根据id 删除树结构中的数据
根据id 删除树结构中的数据 filterHandle(data, id) { var newData = data.filter(x => x ...
- 鸿蒙hi3861V100开发板问题记录
1.引脚复用 2.引脚复用方法: 1.看业务代码使用的是uart几,如使用的是uart2(实测可用uart1 tx为GPIO6, rx为GPIO5:uart2 tx为GPIO11,rx为GPIO12) ...
- Logtxt
public static void SSOAuthenLog(string msg, bool isRemoteAuthen = true) { #region ...
- 搭建sftp服务器
sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1. 创建sftp组 # groupadd sftp 创建完成之后使用ca ...
- sql学习笔记 - 1 数据库简介
数据库简介 """ 本学习笔记来自哔哩哔哩--老男孩Python全栈开发29期全套 https://www.bilibili.com/video/BV1QE41147hU ...
- 字节码 看 new String("abc")创建了几个对象
感谢博主分享:https://www.cnblogs.com/zhaideyou/p/5875175.html 但是如果代码是这样子的: String str1 = "abc"; ...
- Vue+SSM+Element-Ui实现前后端分离(1)
前言:最近学习vue,就突发奇想,小菜鸟的我是时候锻炼锻炼自己.闲话不说,整起 <-_-> 整体规划:先搭建前端,接下来后端,最后整合. 一.创建vue项目 1.安装nodejs( 傻瓜式 ...
- vue-cli简介
1.定义:vue-cli(俗称:vue 脚手架)是 vue 官方提供的.快速生成 vue 工程化项目的工具,提供了终端里的 vue 命令.它可以通过 vue create 快速搭建一个新项目: 特点: ...
- IT工具知识-11:一种安卓投屏到Win10失败的解决方法
软硬件平台 电脑:WIN10 LTSC 手机:红米K30Pro/MIUI 11.0.26 投屏软件:安卓端-自带投屏,WIN10-自带投屏(连接) 故障描述 之前还能用的,但是在换了个路由器之后就不能 ...