当前位置: 首页 > news >正文

记录一下安装腾讯混元文生图模型的艰辛历程

文章目录

    • 基础环境安装
    • flash-attention安装
      • 解决无nvcc问题
      • 解决编译慢问题
      • 解决编译报错问题
      • 解决导入报错问题
      • 解决环境位置错误问题
    • 模型文件下载
    • 图片生成

基础环境安装

根据HunyuanDiT【github】的指引,完成以下步骤:

  • 下载项目:git clone https://github.com/Tencent/HunyuanDiT
  • 创建虚拟环境(我这里需要进入超级用户才能安):conda env create -f environment.yml
  • 切换虚拟环境:conda activate HunyuanDiT
  • 安装pip依赖:python -m pip install -r requirements.txt

这几步一般不会有什么问题,接下来就是重头戏,flash-attention的安装。

flash-attention安装

解决无nvcc问题

尝试直接运行官方推荐的命令

python -m pip install git+https://github.com/Dao-AILab/flash-attention.git@v2.1.2.post3

报了这样一个错误

FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/cuda-11.8/lib64/bin/nvcc'

尝试运行nvcc确实没有反应,于是使用sudo apt install nvidia-cuda-toolkit安装。

安装完之后还是报这个错误,使用which nvcc查看,发现是路径不对

在这里插入图片描述
经过一番排查发现是root权限的问题,切换到普通用户之后解决。

解决编译慢问题

接下来再次执行上面的命令,倒是没有报错,但是卡在了building wheel for flash attn setup py这里好几个小时,经过一番查询,是要先提前下好编译的包,也就是

pip install packaing
pip install ninja

解决编译报错问题

再次执行安装命令,这次又报了编译错误的问题,干脆直接去flash-attention【github】下了版本对应的包离线安装。

FLASH_ATTENTION_FORCE_BUILD=TRUE python -m pip install flash_attn-2.1.2.post3+cu118torch1.13cxx11abiTRUE-cp38-cp38-linux_x86_64.whl

在这里插入图片描述

解决导入报错问题

尝试在python环境中import flash_attn2,结果直接报错。

/flash_attn_2_cuda.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN3c105ErrorC2ENS_14SourceLocationENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

这个错误跟flash_attn_2_cuda 报错:undefined symbol这篇文章里面提到的一模一样,他是安了没用C++ ABI编译的包错了,改成编译的就好了。但我现在安的就是他推荐的,然后我试着去反向解决,安他会报错的那个包,也就是

 FLASH_ATTENTION_FORCE_BUILD=TRUE pip install flash_attn-2.1.2.post3+cu118torch1.13cxx11abiFALSE-cp38-cp38-linux_x86_64.whl

成功解决
在这里插入图片描述

解决环境位置错误问题

在我终于安好之后,kk突然说他本来用得好好的flash_attn报错了,
在这里插入图片描述
可以看到报错的包位于.local里面,而我前面的安装截图里面,也可以看出是在.local里面安的,所以我相当于是把他的版本覆盖掉了。

kk把.local文件删了之后重装,顺利解决了问题,但我不管怎么安,都会把ninja安到.local里面。
在这里插入图片描述
最后kk终于发现了上面被红框框起来的那句话,原来是因为我的虚拟环境是用su模式装的,所以常规模式下无法安装进去,强行给我装到了外面。

之后我让Claude给我写了段sh脚本修改虚拟环境目录权限:

#!/bin/bash# 设置环境变量
CONDA_ENV_PATH="/home/df1500/anaconda3/envs/HunyuanDiT"
NEW_OWNER="df1500"
NEW_GROUP="df1500"# 检查目录是否存在
if [ ! -d "$CONDA_ENV_PATH" ]; thenecho "错误:目录 $CONDA_ENV_PATH 不存在。"exit 1
fi# 更改文件夹及其内容的所有者
sudo chown -R $NEW_OWNER:$NEW_GROUP "$CONDA_ENV_PATH"# 设置目录权限为755
sudo find "$CONDA_ENV_PATH" -type d -exec chmod 755 {} +# 设置文件权限为644,保持可执行文件的755权限
sudo find "$CONDA_ENV_PATH" -type f -exec chmod 644 {} +
sudo find "$CONDA_ENV_PATH" -type f -executable -exec chmod 755 {} +echo "所有权更改完成。请验证更改并测试Anaconda环境。"

但这样会导致Python无法运行,于是又打了一段补丁

#!/bin/bashCONDA_ENV_PATH="/home/df1500/anaconda3/envs/HunyuanDiT"
PYTHON_EXECUTABLE="$CONDA_ENV_PATH/bin/python"
USER="df1500"
GROUP="df1500"echo "正在检查 Python 可执行文件的权限..."# 检查文件是否存在
if [ ! -f "$PYTHON_EXECUTABLE" ]; thenecho "错误:Python 可执行文件不存在于 $PYTHON_EXECUTABLE"exit 1
fi# 显示当前权限
echo "当前权限:"
ls -l "$PYTHON_EXECUTABLE"# 更改所有权
sudo chown $USER:$GROUP "$PYTHON_EXECUTABLE"# 设置正确的权限
sudo chmod 755 "$PYTHON_EXECUTABLE"echo "权限已更新。新的权限:"
ls -l "$PYTHON_EXECUTABLE"echo "尝试运行 Python..."
"$PYTHON_EXECUTABLE" --versionecho "如果上面没有显示 Python 版本,可能还有其他问题需要解决。"

终于对了
在这里插入图片描述

模型文件下载

git lfs install
git clone https://www.modelscope.cn/modelscope/HunyuanDiT.git
mv HunyuanDiT ckpts

如遇下载中断,进入文件夹执行git lfs pull即可,如执行完后遇下面的报错,把文件删了再执行这个命令。
在这里插入图片描述

图片生成

在上述命令都完成之后,执行下面的命令生成图片:

python sample_t2i.py --prompt "坤坤打篮球" --no-enhance

遇到了下面的报错
在这里插入图片描述
修改如下

python sample_t2i.py --prompt "坤坤打篮球" --no-enhance --use-style-cond --size-cond 1024 1024 --beta-end 0.03

在这里插入图片描述
在这里插入图片描述
其实上面的问题是安装1.1版本的模型导致的,可以用下面的命令安装1.2模型

python -m pip install "huggingface_hub[cli]"
mkdir ckpts
HF_ENDPOINT=https://hf-mirror.com huggingface-cli download Tencent-Hunyuan/HunyuanDiT-v1.2 --local-dir ./ckpts

http://www.mrgr.cn/news/18982.html

相关文章:

  • 新版某数字壳脱壳,过frida检测,及重打包
  • 全网都在学,2024最新大模型畅销的三本书!千言万语,尽在书中
  • KAN 学习 Day2 —— utils.py及spline.py 代码解读及测试
  • ES6 URL对象
  • java和js计算文件的SHA-256哈希值
  • 鼎曼高品质老白茶,在时光的声色里芬芳隽永
  • RDP最小化之后仍然保持UI渲染的方法
  • 【计算机网络】socket编程 --- 实现简易TCP网络程序
  • C++进阶面试题
  • 九月最新蜘蛛池|泛码网的SEO工具怎么样?
  • 【C++】---STL之用哈希桶模拟实现:unordered_set和unordered_map
  • EEPROM 扫盲
  • 十分钟让你彻底明白正则表达式
  • AI模型:追求全能还是专精?-- 之3:“智能”符号学诠释的程序逻辑分析
  • C++ ─── List的模拟实现
  • 牛心包瓣类医用生物瓣膜厚度无损检测
  • 暴力破解和撞库攻击有什么区别,怎么防御暴力破解和撞库攻击
  • 【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收
  • 5款文案自动生成器,高质量创意文案一键为你生成
  • Python控制流:循环控制(break, continue, pass)③