Python,爬虫与深度学习(18)——Ubuntu下安装stable diffusion
步骤/目录:
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