步骤/目录:
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

附录-显卡厂商的区别

作者:申宏宇
链接:https://www.zhihu.com/question/652729281/answer/3473132108
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

显卡品牌大概可以分为一二三线,就是按照产品力、品牌影响力和售后几大方面打分,如果三项得分全都名列前茅,可以称之为一线品牌,如果只有两项突出,可以被评为二线品牌;如果只有一项可以,就被称为三线。(评价区建议插一句,为什么显卡有那么多的品牌,还有各品牌与英伟达的关系。)英伟达为华硕提供GPU,而华硕或其他品牌则生产实际的显卡产品。英伟达负责设计显卡芯片,并将其交给如台积电这样的芯片代工厂生产。随后华硕等AIC厂商(即英伟达的亲密合作伙伴)会向英伟达购买芯片,并为这些芯片设计专属的PCB电路、散热器, 最终组装成我们看到的显卡。

我说的显卡做工以及用料等级,指的便是显卡的外观、散热、PCB电路板这些外部因素,而非型号区别。显卡的做工和用料按等级划分可以分为旗舰卡、次旗舰、中端、入门、低端几个档次。从高到低来,先说一线。

1.一线厂商

一般约定俗成的一线厂商有:华硕、微星、技嘉、七彩虹,这四家里华硕算老大,微星万年老二,技嘉和七彩虹争夺老三的位置。

(1)华硕

华硕算是认可度最高的了,毫无争议的第一,售后很好,支持三年个人送保,牌子也大,你要送礼可以首选华硕。华硕从高端到低端的系列有:ROG猛禽、TUF电竞特工、雪豹和巨齿鲨。

ROG猛禽无疑的当代卡皇,猛禽又分为OC版和普通版,OC就是厂商预超频版的意思,你可以简单理解为性能更强了。一般情况下OC版的芯片体质更好,极限频率比普通版高,单纯从外观来说OC和普通猛禽没区别。
TUF电竞特工是次旗舰级别的卡,用料不错,外观没有猛禽好看,并且没有败家之眼的信仰加成。华硕的信仰加成全在这个眼睛图标上了,没这个图标B格砍一半,不差钱还是建议直接ROG。
再往下的雪豹和巨齿鲨是入门级的卡,产品用料对比旗舰卡缩水不少,但是胜在售后可以,并非不能选。

(2)微星

微星和华硕主要差在品牌影响力上,其他方面并不差,基本可以做到保二争一,所以万年老二。微星显卡从高端到低端的有:超龙、魔龙、万图师。

超龙是对标ROG猛禽系列的卡,做工用料和华硕不相上下。
魔龙是次旗舰的卡,4090魔龙表现一般,但是我感觉魔龙的外观比TUF电竞特工好看,你想送微星的卡可以选这个。
万图师是纯纯低端卡,用料极其缩水,等级要略低于华硕的雪豹。

(3)技嘉

技嘉显卡也就那么回事,这牌子素有拒保嘉的称号,因为他家的售后电商渠道不保,其他渠道三年个人送保,还经常拒绝保修,单纯从售后层面就差了一层。技嘉从高端到低端分别是:雕系列、魔鹰、猎鹰。

雕系列是旗舰卡,对标猛禽和超龙的,但是产品力在三家里面垫底。
魔鹰是次旗舰卡,跟魔龙和华硕TUF平替,三个系列平起平坐。
猎鹰是中端卡,做工和散热要高于雪豹和万图师,但是猎鹰价格也不便宜,算是三个系列中最贵的。

技嘉我不推荐你买,因为这个品牌很垃圾,号称御三家之耻。

(4)七彩虹

七彩虹是一个专注做显卡的厂商,除了显卡都不行,他家的显卡在众多品牌中能站稳一线,在国内销量很高,比华硕卖的显卡还多。而且七彩虹的售后也不错,支持三年个人送保,服务点也多,我感觉从售后方面七彩虹要强过微星一些。七彩虹显卡从高端到低端分别是:火神、Advance、ultra、战斧系列。

火神是旗舰卡,对标其他三家的旗舰卡,火神的外观有些特色,带一个可以反转的LED屏幕,基本可以平替ROG猛禽和微星超龙。
Advance是次旗舰,比较舍得用料,属于接近旗舰级的次旗舰卡,还是很有水平的。
ultra是中端卡,对标技嘉猎鹰;
战斧豪华版是入门卡,对标华硕雪豹;
战斧是低端卡,对标微星万图师。

七彩虹是一挑三,产品线分的很细,对每家都有针对的卡。

2.二线厂商

一线基本说完了,说说二线。二线目前就是索泰、影驰、耕升、映众、铭瑄、盈通。

(1)索泰

索泰号称堆料泰,意思就是舍得下料,就好像同样是做珍珠奶茶的店,索泰家做的奶茶珍珠多放一点,但是实际喝起来没啥差别。索泰从高端到低端分别是:AMP、天启、X-Gaming、毁灭者。

AMP是旗舰卡,天启是次旗舰卡,但是天启的纸面规格接近AMP,性价比更高。所以选天启的人多一点。
X-Gaming是入门卡,比中端略差。
毁灭者是低端卡,和万图师差不多。

送礼想选索泰,看看天启系列就差不多了。

(2)影驰

影驰从高端到低端分别为:名人堂、星耀、金属大师、将系列。

名人堂是对标微星超龙和ROG猛禽的系列,属于旗舰卡,但是因为是二线品牌,终归差了一点意思。
星耀是次旗舰,几乎和七彩虹Advance平齐,素质还不错。
金属大师是中端卡。
将系列是低端卡。

影驰和耕升算是兄弟关系,所以他俩很多显卡都是互相换皮,影驰显卡的外形和宣传比耕升强一些,于是慢慢超过耕升了,本质上他俩还是差不多的品牌。

(3)耕升

耕升算是老牌厂商,挺有实力的,就是名字起的不咋地,感觉听着像杂牌。做工和用料跟影驰差不多,因为他俩都是一家代工厂生产的,不过个人觉得外形方面影驰更好看。耕升从高到低分别是:炫光、星极、追风。

耕升的星极和影驰的星耀基本就是换皮,他俩的PCB板基本都差不多,只是外观和散热略有不同。
追风和金属大师也是如此。

因为散热和外观差别,耕升的显卡比影驰的低半级。

(4)映众

映众和索泰是一个厂家生产的,但是用料没有索泰豪华,甚至近几年越来越寒酸了。映众从高端到低端分别是:冰龙、电竞判客。

冰龙属于次旗舰级别的卡,距离旗舰卡还有一定的距离。
电竞判客属于入门级别,比微星万图师略强。

(5)铭瑄

铭瑄号称丐帮帮主,是二线里面价格比较实惠的品牌,主打二次元外观。铭瑄从高端到低端分别是:电竞之心、瑷珈、终结者。

电竞之心和瑷珈用料几乎差不多,瑷珈走的是二次元风格,电竞之心就是传统造型的,喜欢萌妹风格的可以看看瑷珈。电竞之心属于中端卡,大概相当于影驰的金属大师级别,但是却有着近乎低端卡的售价,因为性价比极高,也被大家戏称丐帮帮主。
终结者就是低端卡,不过价格卖的也很低,质量也还行,算是比较良心的品牌。

(6)盈通

盈通也是主打二次元的品牌,基本和铭瑄瑷珈一个路子。盈通从高端到低端分别是:樱瞳花嫁、六道兵甲、大地之神。

樱瞳花嫁属于中端卡,六道兵甲属于入门卡,大地之神属于低端卡。

盈通整体实力不如铭瑄,如果让我从铭瑄和盈通里面选一个,我可能会选铭瑄。不过盈通显卡的背板还不错,很好看。

标签: stable diffusion

添加新评论