步骤/目录:
1.背景介绍
2.安装CUDA
    (0)卸载之前的CUDA、驱动
    (1)安装依赖项
    (2)检查PyTorch兼容的CUDA
    (3)安装CUDA
    (4)将CUDA添加到PATH
    (5)安装PyTorch
    (6)初运行Stable Diffusion WebUI
3.SDW的更新
4.安装问题
    (1)无法连接到github
    (2)运行webui.sh时提示没有pip3模块
    (3)运行webui.sh时提示TCMalloc
    (4)SafetensorError
    (5)其它模块

本文首发于个人博客https://lisper517.top/index.php/archives/278/,转载请注明出处。
本文的目的是在ubuntu机器上安装stable diffusion。
本文写作日期为2024年1月5日。系统为 Ubuntu 22.04 LTS ,显卡为 GTX 1050Ti mobile,4G显存。主要参考了 文章一

1.背景介绍

2020年笔者读到了一本深度学习的书:《深度学习入门:基于 Python 的理论与实现》,作者是斋藤康毅,书上介绍的东西简单易懂(比如深度学习界的Hello World-识别手写数字),比较适合入门。后来从一些量化交易的论坛获得了中国股市过去30年每天的开盘、收盘、最高、最低价数据,试图用机器学习找出其中的规律,最后得出结论:股市的数据是完全随机的、或者有其它的隐变量,不适用于机器学习。之前笔者还写过系列文章:《Python,爬虫与深度学习》,但是只介绍完了爬虫,还没有涉及深度学习。2022-2023年stable diffusion、chatgpt如火如荼,今天便重拾这个系列。

Stable Diffusion刚出来时笔者也在windows上进行了尝试,当时用的 AMD RX 5500 XT 大概30s一张图。如果想浅尝,笔者建议用Nvidia的p104显卡(8G显存魔改版),闲鱼只要¥120左右(显卡扩展坞都值4张p104),跑512*512的图大约10s(但是装驱动有点麻烦);目前商用跑图性价比最高的应该是¥3500的 4060Ti 16G ,但是这个价格还是太高了。只生成图片,至少需要4G显存,推荐8G;要训练自己的模型,推荐12G;内存推荐16G;固态硬盘。

接下来笔者将在Ubuntu上安装SD。如果想在Windows上体验,可以下各位大佬的安装包,见 秋葉aaaki ,网盘为 夸克 ;Win + AMD ,则用 这个整合包 ,使用说明见 b站 (A卡跑图性能大概是同价位N卡的一半)。

2.安装CUDA

以下的操作需要切换到有sudo权限的非root用户进行。创建该用户的操作如下(参考 提升树莓派安全性 ):

mkdir /home/SD
useradd -d /home/SD SD -m #SD也将装在该家目录下,建议至少有100GB空间
chown -R SD:SD /home/SD
passwd SD
usermod -aG sudo SD
vim /etc/sudoers.d/SD

加一行:

SD ALL=(ALL) NOPASSWD: NOPASSWD: ALL

(0)卸载之前的CUDA、驱动

如果之前装过CUDA,或者在本次流程装CUDA时出现了意外,可以卸载后重装。

参考 Nvidia官方文档 ,执行以下命令:

sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \
 "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"
sudo apt-get autoremove

(1)安装依赖项

安装一些依赖项:

python3 -V
#如果没有显示python3版本,就apt install python3,或者参考后文
sudo apt install wget git python3-venv

安装python的版本需要注意,由于后文 --xformers 选项,笔者安装的是python-3.10.11。

(2)检查PyTorch兼容的CUDA

PyTorch官网 ,找到下面的 INSTALL PYTORCH 。需要选择以下几项:

PyTorch Build 选 Stable
Your OS 选 Linux
Package 选 Pip
Language 选Python

下面的 Compute Platform 看一下CUDA版本号。本文写作时支持的CUDA为11.8、12.1,选择11.8进行安装(因为后面的 --xformers 选项仅支持CUDA 11.8)。这个网站暂时不要关闭。

(3)安装CUDA

CUDA各版本归档 找对应的版本,小版本号可能无所谓,本文选择11.8.0。修改以下网址

https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_local

中的版本号( cuda-11-8-0 )并访问该网址,有需要的可以自行选择其它参数,值得注意的是这里选择的是下载包到本地安装。最后下面会生成安装需要的命令,本文写作时生成了如下命令:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-11-8

需要注意的是最后一条命令原本是 apt-get -y install cuda ,必须加上版本号,否则会下载最新的CUDA。如果有小版本号,应该也是要加上的。

SD能成功运行后, cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb 这个包可以删掉。

(4)将CUDA添加到PATH

安装好CUDA后,检查一下:

/usr/local/cuda-11.8/bin/nvcc --version

然后把CUDA加入路径:

vim ~/.bashrc

添加:

export PATH="/usr/local/cuda-11.8/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH"

然后打开新的终端,用 which nvcc 检查一下,能找到正确的nvcc。

(5)安装PyTorch

刚才打开的 PyTorch官网 ,复制下面的命令以安装PyTorch:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

需要注意的是,该命令有可能不指定CUDA版本:

pip3 install torch torchvision torchaudio

为了避免装错,应该指定一下:

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118

这里可以先装好PyTorch,节省时间;如果不想打乱本机的python库,这里也可以不装。

最后重启一下,显卡驱动才能被正确调用。

(6)初运行Stable Diffusion WebUI

git clone --branch v1.7.0 https://github.com/AUTOMATIC1111/stable-diffusion-webui

目前最新的版本就是1.7.0,也可以选择1.2.1等老版本。笔者经过与SD的一番搏斗,最终选择了上文提到的 秋葉aaaki整合包 (用前需要 sed -i 's/\r$//' ./*.sh ,因为Windows下的换行符 '/r' 在linux下是多余的),该整合包是1.6.0的,在Ubuntu上安装前先在Windows下解压、打开其中的启动器,通过启动器进行更新,把更新好的整合包复制到Ubuntu。

考虑到更新的便捷性,笔者建议通过Samba将SDW安装文件夹在Windows和Ubuntu之间共享,在Windows上通过启动器管理更新,在Ubuntu上运行。Samba见笔者以前的文章: 树莓派+Samba+frp搭建NAS(网络云存储)

其中的 webui-user.sh 可以修改一些配置:

export COMMANDLINE_ARGS="--xformers --medvram --listen"
export TORCH_COMMAND="pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118" #安装PyTorch的命令。如果用pip3,会提示没有pip3模块

默认 install_dir="/home/$(whoami)" 安装在家目录下(但是笔者实测默认安装在本目录下),可修改安装目录。建议安装硬盘至少100GB空间,且最好是SSD硬盘(否则每次启动都要等5min)。

参数方面, --xformers 可略微加快出图速度;由于笔者的显存为4G,所以加上了 --medvram--listen 允许本机外的电脑访问。其它参数见 SDW选项 ,比较有用的是 --autolaunch ,开机后自动运行SD(如果装模型等原因需要重启SD时,在网页的 扩展 中可以重启)。用 nvidia-smi 可以查看你的显存,同时也检查显卡驱动是否正确。如果没有正确显示,先重启一下以保证驱动应用。

为了避免出现红字 Cannot locate TCMalloc (improves CPU memory usage) ,使用:

sudo apt-get install libgoogle-perftools4 libtcmalloc-minimal4 -y

最后开始初运行。请确保这一步之前、装驱动之后至少重启过一次电脑,并且这里最好全程翻越,否则容易出现各种连接不上:

sudo ufw allow 7860 comment "SD WebUI"
chmod 755 webui-user.sh
bash ./webui-user.sh
bash ./webui.sh

webui.sh 第一次运行时会安装一些依赖项,用时可能数小时,用整合包的话快一点。

最后,到7860端口访问即可。画512*512图测试,使用 watch -d -n 1 nvidia-smi 观察显卡状态,显存占用保持在 3228/4096MiB ,出一张图50s左右。时间可以接受,笔者主要为了给显卡找点事情干。

下一篇文章将讲解SD的使用。

3.SDW的更新

SD内各种插件有时需要更新,在WebUI虽然也能更新,但访问外网太慢了,更建议通过Samba将SDW在Windows和Ubuntu间共享,在Windows上通过整合包的启动器(A绘世启动器.exe)更新(参考 秋葉aaaki ),一定要注意在更新前首先关闭SDW。对于1.6.0版本启动器,在 版本管理 页中可以找到内核(SDW版本)、扩展,右上角有一键更新。

另外,每次更新后都要重新修改 webui-user.sh ,笔者常用:

export COMMANDLINE_ARGS="--xformers --medvram --listen --enable-insecure-extension-access"
export TORCH_COMMAND="pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2 torchtext==0.15.2+cpu torchdata==0.6.1 --index-url https://download.pytorch.org/whl/cu118"

并且 sed -i 's/\r$//' ./*.sh 一下。

4.安装问题

(1)无法连接到github

因为美国不允许我们使用github,所以需要翻越。实际上最好在安装中全程翻越,否则总是遇到奇怪的问题。

(2)运行webui.sh时提示没有pip3模块

No module named pip3 ,因为 webui-user.sh 里, export TORCH_COMMAND="pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118" 的pip写成了pip3。venv里的pip和pip3没有软链。

如果在Win,参考 这个问题 ,把venv文件里的内容删掉以重新创建venv,或者用 python3 -m ensurepip

(3)运行webui.sh时提示TCMalloc

出现红字 Cannot locate TCMalloc (improves CPU memory usage) 。参考 这个问题 ,使用 sudo apt-get install libgoogle-perftools4 libtcmalloc-minimal4 -y ;或者,如果是你的SD找不到TCMalloc,在 webui-user.sh 中加上 PATH=$PATH:/usr/sbin 。OpenSUSE请参考原回答。

笔者的电脑内存为32GB,感觉这个问题不大,但还是装上好一点。

(4)SafetensorError

运行webui.sh时提示:

Loading weights [7912d8218e] from /xxx/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
loading stable diffusion model: SafetensorError
Traceback (most recent call last):
  ···
  ···
  ···
safetensors_rust.SafetensorError: Error while deserializing header: MetadataIncompleteBuffer

根据 这篇文章 ,到 这个网址 手动下载模型 v1-5-pruned-emaonly.safetensors (如果报错是ckpt,则下载ckpt),然后放到 models\Stable-diffusion 下。用整合包时 models\Stable-diffusion 下是其它文件,但是没有这个问题。

(5)xformers

显示如下:

WARNING:xformers:WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. xFormers was built for:
    PyTorch 2.0.1+cu118 with CUDA 1108 (you have 2.1.2+cu118)
    Python  3.10.11 (you have 3.10.12)
  Please reinstall xformers (see https://github.com/facebookresearch/xformers#installing-xformers)
  Memory-efficient attention, SwiGLU, sparse and more won't be available.
  Set XFORMERS_MORE_DETAILS=1 for more details

后面虽然说 Applying attention optimization: xformers... done. ,但是 xformers 可能还是没有生效,需要下载2.0.1的PyTorch、使用3.10.11的python。根据 这个回答 ,首先删除venv:

rm -r venv/*

然后手动创建一下venv环境。由于python3-venv无法创建系统上没有的python版本,所以安装python 3.10.11(这会删除之前的3.10.12):

cd /tmp
wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz
sudo apt install libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev libtk8.6 libgdm-dev libdb4o-cil-dev libpcap-dev #解决pip的TLS/SSL问题
sudo apt-get install libbz2-dev #解决_bz2模块的问题
sudo apt-get install liblzma-dev #_lzma模块
tar -zxvf Python-3.10.11.tgz
cd Python-3.10.11
./configure --enable-optimizations
make && make test
sudo make install
cd ..
pip install lmdb #lmdb库

能够运行SD后,可以删掉python安装包和目录(也可以不删)。如果你有多个python3,可以设置一下优先级,本文并不需要:

update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10.11 1
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10.12 10
update-alternatives --config python3
python3 -V

数值越大越优先。

webui-user.sh 中,把安装PyTorch的命令修改如下(如果报错显示非PyTorch2.0.1,可能不适用):

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
改为
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2 torchtext==0.15.2+cpu torchdata==0.6.1 --index-url https://download.pytorch.org/whl/cu118

重新运行。

(5)其它模块

安装模块后,重装python3,然后重新运行 webui.sh
_bz2:sudo apt-get install libbz2-dev
_lzma:sudo apt-get install liblzma-dev

标签: stable diffusion

添加新评论