使用KTransformer部署DeepSeekR1-671B满血量化版+ OpenwebUI 及多GPU(多卡) ...

打印 上一主题 下一主题

主题 900|帖子 900|积分 2700

ktransformers 是针对预算低但是想跑 671B Deepseek推出的框架 ,是基于显卡 + CPU 混合推理方案。官方使用双 Xeon ® Gold 6454S(共 64 核)、1TB-D5 内存和 RTX 4090 24GB,实现 671B 4-bit 量化版每秒 13.69 个词令天生速度。ktransformers 采用 Intel AMX 指令扩展,prefill 速度提拔明显。
我的环境:Intel 61332(40C)+ 256G D4 + 4090D4 + 2T SSD + 16T HDD \ Ubuntu22.04 \ CUDA12.6 \ Python3.11
注:停止25.2.21,官方现在支持的模型如下

其他版本装上去会乱码,我背面用的DeepSeek-R1-Q2_K_XS,读者需要根据最新版本的支持情况进行修改
1.预预备

详细步骤见 https://kvcache-ai.github.io/ktransformers/index.html
这里简朴说一下:
首先需要CUDA12.1及以上,V0.3好像要12.5,只管装最新吧
1.添加CUDA环境变量
vim ~/.bashrc ,末尾添加
  1. # Adding CUDA to PATH
  2. if [ -d "/usr/local/cuda/bin" ]; then
  3.     export PATH=$PATH:/usr/local/cuda/bin
  4. fi
  5. if [ -d "/usr/local/cuda/lib64" ]; then
  6.     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
  7.     # Or you can add it to /etc/ld.so.conf and run ldconfig as root:
  8.     # echo "/usr/local/cuda-12.x/lib64" | sudo tee -a /etc/ld.so.conf
  9.     # sudo ldconfig
  10. fi
  11. if [ -d "/usr/local/cuda" ]; then
  12.     export CUDA_PATH=$CUDA_PATH:/usr/local/cuda
  13. fi
复制代码
然后wq保存,退出
2.安装编译链
  1. sudo apt-get update
  2. sudo apt-get install build-essential cmake ninja-build
复制代码
3.创建conda环境
conda安装教程自己去找一下,网上很多
  1. conda create --name ktransformers python=3.11
  2. conda activate ktransformers # you may need to run ‘conda init’ and reopen shell first
  3. conda install -c conda-forge libstdcxx-ng # Anaconda provides a package called `libstdcxx-ng` that includes a newer version of `libstdc++`, which can be installed via `conda-forge`.
  4. strings ~/anaconda3/envs/ktransformers/lib/libstdc++.so.6 | grep GLIBCXX
复制代码
4.安装pytorch等
  1. pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
  2. pip3 install packaging ninja cpufeature numpy
复制代码
2.安装 最新正式版

1.克隆代码并初始化
  1. git clone https://github.com/kvcache-ai/ktransformers.git
  2. cd ktransformers
  3. git submodule init
  4. git submodule update
复制代码
2.安装
  1. bash install.sh
复制代码
注:如果双插槽CPU,且你的运行内存大于模型大小的两倍,则运行:
  1. # Make sure your system has dual sockets and double size RAM than the model's size (e.g. 1T RAM for 512G model)
  2. export USE_NUMA=1
复制代码
这个命令的作用是利用两个CPU,但运行的时候要把模型加载两份,所以如果内存小于模型的两倍大小,就不运行这段命令,否则反而会让速度非常慢
然后运行:
  1. bash install.sh
  2. # or `make dev_install`
复制代码
这一步可能需要较长时间,甚至报错…

  • 安装flashatt
  1. wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.4.post1/flash_attn-2.7.4.post1+cu12torch2.3cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
  2. pip install flash_attn-2.7.4.post1+cu12torch2.3cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
复制代码
2. 安装 V0.3预览版(需要AMX支持)

这里由于CPU需要至强支持AMX指令集,因以后续以0.2.1版本进行
这个指令集需要至强3代 Xeon Scalable及4、5代
  1. wget https://github.com/kvcache-ai/ktransformers/releases/download/v0.1.4/ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
  2. pip install ./ktransformers-0.3.0rc0+cu126torch26fancy-cp311-cp311-linux_x86_64.whl
  3. python -m ktransformers.local_chat --model_path <your model path> --gguf_path <your gguf path>  --prompt_file <your prompt txt file>  --cpu_infer 40 --max_new_tokens 1000
  4. <when you see chat, then press enter to load the text prompt_file>
复制代码
3.从huggingface下载模型文件

例如从
https://hf-mirror.com/unsloth/DeepSeek-R1-GGUF/tree/main/DeepSeek-R1-Q2_K_XS

https://www.modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/files
下载文件到某个目录
然后将
https://github.com/ubergarm/r1-ktransformers-guide
这里面的文件全部放到谁人目录里去

4.测试运行

创建一个prompt预提示文件:
  1. touch p.txt
复制代码
路径改为自己的,CPU-infer改为略小于自己CPU总核数的值
  1. python ./ktransformers/ktransformers/local_chat.py \
  2.     --gguf_path "/data/DeepSeek-R1/DeepSeek-R1-Q2_K_XS/" \
  3.     --model_path "/data/DeepSeek-R1/DeepSeek-R1-Q2_K_XS/" \
  4.     --prompt_file ./p.txt \
  5.     --cpu_infer 38 \
  6.     --max_new_tokens 1024 \
  7.     --force_think true
复制代码
这时候可能会报错:
   ImportError: /home/user/anaconda3/envs/ktransformers/bin/…/lib/libstdc++.so.6: version `GLIBCXX_3.4.30’ not found (required by /home/user/anaconda3/envs/ktransformers/lib/python3.11/site-packages/cpuinfer_ext.cpython-311-x86_64-linux-gnu.so)
  解决:
方法1:
  1. sudo add-apt-repository ppa:ubuntu-toolchain-r/test
  2. sudo apt-get update
  3. sudo apt-get install --only-upgrade libstdc++6
  4. conda install -c conda-forge libstdcxx-ng
复制代码
方法2:
https://www.cnblogs.com/michaelcjl/p/18432886
https://blog.csdn.net/goodsirlee/article/details/1062318215d9197002c03e20000000667b71957
加载后可看到chat:的提示

5.WEB\API运行

  1. ktransformers  \
  2.     --gguf_path "/home/user/r1_gguf/DeepSeek-R1-Q2_K_XS" \
  3.     --model_path "/home/user/r1_gguf/DeepSeek-R1-Q2_K_XS" \
  4.     --cpu_infer 38 \
  5.    --no_flash_attn false \
  6.    --total_context 2048 \
  7.    --cache_q4 true \
复制代码
如果需要API:
添加
  1.     --port 10002
复制代码
如果需要直接web运行:
  1.         --port 10002
  2.         --web True
复制代码
运行成功后可以看到:

访问 http://localhost:10002/web/index.html#/chat
6.OpenwebUI连接

首先在本地用curl测试
  1. curl -X 'POST' \
  2.   'http://localhost:10002/api/generate' \
  3.   -H 'accept: application/json' \
  4.   -H 'Content-Type: application/json' \
  5.   -d '{
  6.   "model": "DeepSeek-R1-Q2_K_XS",
  7.   "prompt": "hello.",
  8.   "stream": true
  9. }'
复制代码
有数据返回即可
防火墙记得开一下端口。
openweb安装教程可见:https://blog.csdn.net/qq_26123545/article/details/145723607
然后openwebui:

这里添加OpenAI API,填写
  1. http://host.docker.internal:10002/v1
  2. http://127.0.0.1:10002/v1
复制代码
即可。
随后即可看到刚才添加的模型:

另外记得在这里取消掉标题标签天生,大概改为轻量模型,要不然回答完一个问题后,会多次哀求模型天生标题、标签,让模型思考一些不相干的内容,占用大量资源 (我这里改为了使用1.5b模型来天生)

5.多GPU运行

多GPU需要参考这下面的文件:
https://github.com/kvcache-ai/ktransformers/blob/main/ktransformers/optimize/optimize_rules
https://github.com/ubergarm/r1-ktransformers-guide
可能需要自己修改yml文件,这里详细的官方没有做过多说明
我临时是配的KExpertsMarlin,但是好像会报错:
  1. - match:
  2.     name: "^model.embed_tokens"
  3.   replace:
  4.     class: "default"
  5.     kwargs:
  6.       generate_device: "cpu"
  7.       prefill_device: "cpu"
  8. # GPU 0: layers 0-5
  9. - match:
  10.     name: "^model\\.layers\\.([0-5])\\.mlp\\.experts$"
  11.   replace:
  12.     class: ktransformers.operators.experts.KTransformersExperts
  13.     kwargs:
  14.       generate_device: "cuda:0"
  15.       generate_op: "KExpertsMarlin"
  16.   recursive: False
  17. # GPU 1: layers 6-11
  18. - match:
  19.     name: "^model\\.layers\\.([6-9]|1[0-1])\\.mlp\\.experts$"
  20.   replace:
  21.     class: ktransformers.operators.experts.KTransformersExperts
  22.     kwargs:
  23.       generate_device: "cuda:1"
  24.       generate_op: "KExpertsMarlin"
  25.   recursive: False
  26. # GPU 2: layers 12-17
  27. - match:
  28.     name: "^model\\.layers\\.(1[2-7])\\.mlp\\.experts$"
  29.   replace:
  30.     class: ktransformers.operators.experts.KTransformersExperts
  31.     kwargs:
  32.       generate_device: "cuda:2"
  33.       generate_op: "KExpertsMarlin"
  34.   recursive: False
  35. # GPU 3: layers 18-23
  36. - match:
  37.     name: "^model\\.layers\\.(1[8-9]|2[0-3])\\.mlp\\.experts$"
  38.   replace:
  39.     class: ktransformers.operators.experts.KTransformersExperts
  40.     kwargs:
  41.       generate_device: "cuda:3"
  42.       generate_op: "KExpertsMarlin"
  43.   recursive: False
复制代码
大概用
  1. ktransformers/ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat-multi-gpu-4.yaml
复制代码
目录下的文件
然后运行:
  1. ktransformers  \    --gguf_path "/home/user/r1_gguf/DeepSeek-R1-Q2_K_XS" \    --model_path "/home/user/r1_gguf/DeepSeek-R1-Q2_K_XS" \    --cpu_infer 38 \    --port 10002
  2. \   --no_flash_attn false \   --total_context 2048 \   --cache_q4 true \    --optimize_config_path  /home/user/r1_gguf/DeepSeek-R1-Q2_K_XS/custom-multi-gpu-4.yaml
复制代码
注:此功能现在还不完善,官方现在正在努力优化多GPU实现,请耐心等候后续版本大概本文的后续更新

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表