大家好,前面在介绍腾讯开源的混元-DiT文生图大模型时立过一个Flag:就是出一篇部署教程,因为我的显卡是16G,正好能满足最低的显存要求,之前也有朋友留言对这个比较感兴趣,所以今天,它来了!
需要注意的是本次部署要求的电脑显卡必须达到显存11G以上,如果你想体验多轮对话的话显存需32G以上。
本次教程也不再赘述显卡驱动以及Cuda的安装,感兴趣的可以阅读我之前的文章:
《Ubuntu22.04 安装NVIDIA驱动(吐血版)》
《Ubuntu22.04 安装CUDA 和cuDNN》
另外就是本篇教程是基于Linux系统(Ubuntu)测试的,所以如果你是Windows或者Mac系统,里面有些命令可能是不太适用的,需要个人进行调整。如果你只想看最后的效果,可以直接拉到文章末尾。
项目环境:
- Python:3.8
- GPU:NVIDIA 4060Ti 16G
- GPU Driver:535.154.05
- Cuda:12.2
一、搭建环境及安装依赖
1、克隆项目
$ git clone https://github.com/tencent/HunyuanDiT
$ cd HunyuanDiT
2、新建 conda 环境
$ conda env create -f environment.yml
这个项目是通过conda来安装依赖的,对应的配置文件是 environment.yml,如果之前没安装过 conda 的朋友,可以通过miniconda官方教程[1]安装
如果你在执行上面的命令之后报了下面的错误,那大概率是因为你使用的是conda默认的源,然后这个在国内访问较慢导致超时失败(如果你安装依赖正常则可以跳过下面的步骤到第3步)
可以通过 conda config 命令查看配置
$ conda config --show
...
channel_alias: https://conda.anaconda.org
channel_priority: flexible
channel_settings: []
channels:
- defaults
client_ssl_cert: None
client_ssl_cert_key: None
custom_channels:
pkgs/main: https://repo.anaconda.com
pkgs/r: https://repo.anaconda.com
pkgs/pro: https://repo.anaconda.com
# 默认源
custom_multichannels:
defaults:
- https://repo.anaconda.com/pkgs/main
- https://repo.anaconda.com/pkgs/r
local:
debug: False
default_channels:
- https://repo.anaconda.com/pkgs/main
- https://repo.anaconda.com/pkgs/r
default_python: 3.11
ssl_verify: True
...
修改源有两种方式,第一种是通过 conda config 命令修改,比如:
# 需替换为对应源地址
conda config --add channels https://mirrors.xxx
第二种就是修改 ~/.condarc 文件,但如果你之前没设置过镜像源,有可能是没有这份文件的,需要通过这个命令生成
$ conda config --set show_channel_urls yes
我使用的是第二种方法,生成后配置文件内容只有 show_channel_urls: true 这一行,需要替换为以下内容:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
接着再执行这条命令清除索引缓存,保证用的是新镜像源即可
$ conda clean -i
Will remove 1 index cache(s).
Proceed ([y]/n)? y
最后执行最开始的命令即可
$ conda env create -f environment.yml
3、激活 conda 环境
$ conda activate HunyuanDiT
4、安装依赖
刚装的 conda 环境其实只有比较基础的依赖,并不是项目所需的依赖
$ pip list
Package Version
----------------- -------
pip 24.0
setuptools 69.5.1
torch 1.13.1
typing_extensions 4.11.0
wheel 0.43.0
所以我们还需要通过 pip 命令安装项目依赖
$ pip install -r requirements.txt
官方还提到可以安装 flash attention 来加速,但要求CUDA的版本11.6及以上(这个如果嫌麻烦的可以不安装,因为感觉没啥效果,下面有提到)
$ pip install git+https://github.com/Dao-AILab/flash-attention.git@v2.1.2.post3
二、下载模型
在下载模型之前,首先需要安装 huggingface-cli[2]
$ pip install "huggingface_hub[cli]"
然后在项目根目录下创建一个 ckpts 的文件夹,这就是我们存放模型的目录,并使用上面的 huggingface-cli 下载模型
$ mkdir ckpts
$ huggingface-cli download Tencent-Hunyuan/HunyuanDiT --local-dir ./ckpts
正在下载中的模型
注:如果在下载的过程中遇到这个报错:No such file or directory: 'ckpts/.huggingface/.gitignore.lock’ ,可以忽略这个错误并重新执行上面的下载命令
虽然我没遇到上面的错误,但是我遇到了下面的错误:ChunkedEncodingError,如下图
这其实就是要下载的模型太大,下载到一半连接中断了,我看了一下,混元-DiT所需的模型大小一共是41G,简直头皮发麻。
我这边也在网上搜了一些方法,比如换源(hf-mirror),但效果并不明显,最终采取的做法就还是用 huggingface-cli 慢慢下,因为这个工具支持断点续传,也就是中途下载失败了,还能从原来的进度恢复,大概下了几个小时吧
网上查的方法(仅供参考):https://padeoe.com/huggingface-large-models-downloader/
镜像站地址:https://hf-mirror.com/
三、启动UI界面
原以为下载模型就已经够艰难了,没想到启动它的UI界面程序也同样坎坷。
如果你有用Sock代理的话,可能会提示你缺少依赖,报错及解决办法如下:
$ python app/hydit_app.py
...
raise ImportError(
ImportError: Using SOCKS proxy, but the 'socksio' package is not installed. Make sure to install httpx using `pip install httpx[socks]`
# 注意要加上冒号
$ pip install "httpx[socks]"
第二个报错如下:
这是因为显卡的工作模式变成了独占模式,独占模式是一种GPU的工作模式,它允许单个计算进程独占一个GPU资源,从而提高计算效率,也就是其他程序无法抢占GPU了(猜测是之前跑其他程序被修改了)
通过这条命令恢复默认模式:
$ nvidia-smi -g 0 -c 0
Compute mode is already set to DEFAULT for GPU 00000000:01:00.0.
All done.
第三个报错就是端口冲突
看了下源码,是因为代码写死了443端口,我这边的做法是直接改代码,比如改成8099,因为试过设置环境变量,但是没有效果(建议share也设置为False,这样不会在网上公开)
最后就是胜利女神终于向我招手了!
四、文生图体验
虽然上面已经能够看到UI界面了,但是文生图这块也遇到了几个问题:
4.1 Cuda不可用
在没部署前我的电脑是可以识别Cuda的,也就是输入 torch.cuda.is_available() 返回True,但这次突然就识别不了了
>>> import torch
>>> torch.cuda.is_available()
/home/xxx/miniconda3/envs/HunyuanDiT/lib/python3.8/site-packages/torch/cuda/__init__.py:88: UserWarning: CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero. (Triggered internally at /opt/conda/conda-bld/pytorch_1670525541702/work/c10/cuda/CUDAFunctions.cpp:109.)
return torch._C._cuda_getDeviceCount() > 0
False
因为这个问题导致文生图的时候报了这个错
RuntimeError: CUDA unknown error - this may be due to an incorrectly set up environment, e.g. changing env variable CUDA_VISIBLE_DEVICES after program start. Setting the available devices to be zero.
后面就各种折腾,但都不行,最后是重启电脑之后莫名好了
4.2 显存超限制
报错信息如下:
这是因为默认开启了DialogGen,一个提示词增强模型,但是使用这个模型,需要的显存至少是32G,所以我的显存就爆了
解决办法:
# 不启用
python app/hydit_app.py --no-enhance
4.3 安装 flash-attention
我其实一开始是没安装的,但发现文生图的速度巨慢!一张图要226秒!
然后我就想着是不是可以安装 flash-attention 提升下速度,但是安装的时候又报错了
这个是因为我之前并没有安装Cuda Tookit,所以也就没有配置 CUDA_HOME 这个环境变量,后续是通过 runfile 的方式安装
# 需要替换为适合你的版本
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
如果你像我一样之前已经安装好显卡驱动了,记得取消驱动安装的勾选
最后配置下环境变量
export PATH=/usr/local/cuda-12.2/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-12.2
经过大概半小时的时间才 build 成功
五、文生图效果
1、提示词:画一只穿着西装的猪
2、提示词:现实主义风格,画面主要描述一个巴洛克风格的花瓶,带有金色的装饰边框,花瓶上盛开着各种色彩鲜艳的花,白色背景
3、提示词:请将“杞人忧天”的样子画出来(感觉抽卡失败)
4、请画出“忽如一夜春风来 千树万树梨花开”
5、提示词:一只长靴猫手持亮银色的宝剑,身着铠甲,眼神坚毅,站在一堆金币上,背景是暗色调的洞穴,图像上有金币的光影点缀。
6、提示词:一张细致的照片捕捉到了一尊雕像的形象,这尊雕像酷似一位古代法老,头上出人意料地戴着一副青铜蒸汽朋克护目镜。这座雕像穿着复古时髦,一件清爽的白色T恤和一件合身的黑色皮夹克,与传统的头饰形成鲜明对比。背景是简单的纯色,突出了雕像的非传统服装和蒸汽朋克眼镜的复杂细节
7、提示词:一位可爱的女孩,有着蓝色的头发,眼睛是红色的,腰上绑着子弹,手里拿着枪
大家觉得混元-DiT的文生图效果如何呢?
六、小小总结
本次混元-DiT的部署过程比我想得要复杂得多,大概花了一天多的时间,比较占时间的就是模型的下载,以及莫名其妙 Cuda 不可用。虽然混元-DiT生成的图片看起来效果还行,但是它的生成速度实在令人失望,在同等显卡配置下,Stable diffusion生成一张图片仅需要5-15秒,而混元-DiT每一张都需要220秒左右,不知道我哪里安装有问题,还是它本身就这么慢,有部署的朋友也可以说下你们的跑图时间。
如果你觉得本次教程对你有所帮助,还请多多点赞支持,你的点赞是我不断更新的动力!
参考资料
[1]miniconda官方教程: https://docs.anaconda.com/free/miniconda/index.html
[2]huggingface-cli: https://huggingface.co/docs/huggingface_hub/guides/cli