我是看九天老师的公开课,尝试使用单卡5090D+512G运行内存去跑一遍DeepSeek。以下是我使用最新显卡部署时踩得坑。模型为:R1 Q4_K_M
1.Ktransformer全称(Quick Transformers)可以在模型运行过程中灵活的将专家模型加载到CPU上,同时将MLA/KVCache卸载到GPU上。
2.Unsloth动态量化,通过内存分担显存的方法保证R1 Q4_K_M的运行,并且执行不同任务时将激活的专家加载到GPU上,从而压缩模型运行所需硬件条件。
服务器配置:GPU:单卡RTX 5090D CPU:8358P 内存:512G 硬盘:4T
第一次试错时深度学习的环境:cuda:12.8 cudnn:9.8.0 pytorch:2.7.0 python:3.11
然后接下来都是按照九天老师的步骤一步步走,其余一切顺利。直到安装flash-attn遇到了问题,原因为flash-attn只支持torch2.6版本,截至3月13。找不到所支持pytorch对应的flash-attn。
那么现在的问题是cuda版本太高,以及pytorch版本也高,那么我退回cuda12.4的版本,尽量与九天老师公开课所使用的环境一致。
第二次试错时深度学习环境:cuda:12.4 cudnn:8.9.7 pytorch:2.6.0 python:3.11
新建了一个conda环境,再次重新将该有的依赖包装上,走到flash-attn时,顺利安装
接着就是安装libstdc,也很顺利。初始化、运行安装脚本依赖都顺利。安装好之后查看一下安装情况:pip show ktransformers
现在所有需要安装的依赖都完成了,准备执行运行脚本时,又出现报错:
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/workspace/ktransformers/ktransformers/local_chat.py", line 25, in
from ktransformers.optimize.optimize import optimize_and_load_gguf
File "/workspace/ktransformers/ktransformers/optimize/optimize.py", line 15, in
from ktransformers.util.custom_gguf import GGUFLoader, translate_name_to_gguf
File "/workspace/ktransformers/ktransformers/util/custom_gguf.py", line 27, in
import KTransformersOps
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /opt/conda/lib/python3.11/site-packages/KTransformersOps.cpython-311-x86_64-linux-gnu.so)
此原因是gcc版本低了,升级gcc到GLIBCXX_3.4.32,没有再报错GLIBCXX_3.4.32的错。
但是又报错:
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/workspace/ktransformers/ktransformers/local_chat.py", line 25, in
from ktransformers.optimize.optimize import optimize_and_load_gguf
File "/workspace/ktransformers/ktransformers/optimize/optimize.py", line 15, in
from ktransformers.util.custom_gguf import GGUFLoader, translate_name_to_gguf
File "/workspace/ktransformers/ktransformers/util/custom_gguf.py", line 27, in
import KTransformersOps
ImportError: /opt/conda/lib/python3.11/site-packages/KTransformersOps.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN3c106detail23torchInternalAssertFailEPKcS2_jS2_RKSs
好家伙,这个报错花费我6-7个小时都没头绪,最后在GitHub上找到了跟我相同的报错,解决了。此报错原因是缺少了编译的KTransformersOps文件,以下是解决办法:
找到ktransformers_ext中的cuda:cd ktransformers/ktransformers/ktransformers_ext/cuda/ 运行setup.py这个文件:python setup.py develop
然后将KTransformersOps这个文件从指定的共享库文件链接到Conda环境的Python库目录中:
ln -sf ktransformers/ktransformers/ktransformers_ext/cuda/KTransformersOps.cpython-311-x86_64-linux-gnu.so $YOURCONDAPATH/home/anaconda3/env/python3.11/site-packages/KTransformersOps.cpython-311-x86_64-linux-gnu.so
就是这个文件,一定要放在你当前环境目录下的site-packages文件夹当中,接下来执行运行脚本
可以看到60个模型都加载出来了,但是接着错误又来了
此报错大体意思就是:cuda内核与GPU架构不兼容,no kernel image is available通常表示当前GPU的计算能力没有被编译到cuda内核当中。如若使用较新的GPU,他Ktransformers编译时未包含对应架构的支持。
具体的我查看pytorch的功能,使用print(torch.cuda.get_device_capability())输出看下结果:
这里的pytorch与对应的cuda支持sm_50 sm_60 sm_70 sm_75 sm_80 sm_86 sm_90,如果想将5090与pytorch一起使用,那么这个需要达到sm_120才可以使用,而这个sm_120只要最新的pytorch2.7.0才能符合。