使用KTransformer部署DeepSeekR1-671B模型的详细教程
创作时间:
作者:
@小白创作中心
使用KTransformer部署DeepSeekR1-671B模型的详细教程
引用
CSDN
1.
https://blog.csdn.net/qq_26123545/article/details/145757197
本文将详细介绍如何使用KTransformer框架部署DeepSeekR1-671B模型的量化版本,并通过OpenwebUI实现多GPU环境下的模型运行。
ktransformers 是针对预算有限但希望运行大规模模型的用户推出的框架,采用显卡 + CPU 混合推理方案。官方使用双 Xeon ® Gold 6454S(共 64 核)、1TB-D5 内存和 RTX 4090 24GB,实现 671B 4-bit 量化版每秒 13.69 个词令生成速度。ktransformers 采用 Intel AMX 指令扩展,prefill 速度提升明显。
环境配置
- CPU:Intel 61332(40C)
- 内存:256G D4
- 显卡:4090D4
- 存储:2T SSD + 16T HDD
- 操作系统:Ubuntu 22.04
- CUDA版本:12.6
- Python版本:3.11
支持的模型版本
其他版本可能会导致乱码,建议使用DeepSeek-R1-Q2_K_XS版本。
1. 环境准备
1.1 安装CUDA环境变量
编辑 ~/.bashrc
文件,添加以下内容:
# Adding CUDA to PATH
if [ -d "/usr/local/cuda/bin" ]; then
export PATH=$PATH:/usr/local/cuda/bin
fi
if [ -d "/usr/local/cuda/lib64" ]; then
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
# Or you can add it to /etc/ld.so.conf and run ldconfig as root:
# echo "/usr/local/cuda-12.x/lib64" | sudo tee -a /etc/ld.so.conf
# sudo ldconfig
fi
if [ -d "/usr/local/cuda" ]; then
export CUDA_PATH=$CUDA_PATH:/usr/local/cuda
fi
保存并退出。
1.2 安装编译链
sudo apt-get update
sudo apt-get install build-essential cmake ninja-build
1.3 创建conda环境
conda create --name ktransformers python=3.11
conda activate ktransformers # you may need to run ‘conda init’ and reopen shell first
conda install -c conda-forge libstdcxx-ng
strings ~/anaconda3/envs/ktransformers/lib/libstdc++.so.6 | grep GLIBCXX
1.4 安装PyTorch等依赖
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
pip3 install packaging ninja cpufeature numpy
2. 安装ktransformers
2.1 克隆代码并初始化
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
git submodule init
git submodule update
2.2 安装
bash install.sh
如果双插槽CPU,且运行内存大于模型大小的两倍,可以运行:
export USE_NUMA=1
bash install.sh # or `make dev_install`
2.3 安装flashatt
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
pip install flash_attn-2.7.4.post1+cu12torch2.3cxx11abiFALSE-cp311-cp311-linux_x86_64.whl
3. 下载模型文件
从以下地址下载模型文件:
- 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预提示文件:
touch p.txt
运行测试命令:
python ./ktransformers/ktransformers/local_chat.py \
--gguf_path "/data/DeepSeek-R1/DeepSeek-R1-Q2_K_XS/" \
--model_path "/data/DeepSeek-R1/DeepSeek-R1-Q2_K_XS/" \
--prompt_file ./p.txt \
--cpu_infer 38 \
--max_new_tokens 1024 \
--force_think true
如果遇到以下错误:
ImportError: /home/user/anaconda3/envs/ktransformers/bin/…/lib/libstdc++.so.6: version `GLIBCXX_3.4.30’ not found
可以尝试以下两种解决方案:
方法1:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install --only-upgrade libstdc++6
conda install -c conda-forge libstdcxx-ng
方法2:
参考以下链接:
- https://www.cnblogs.com/michaelcjl/p/18432886
- https://blog.csdn.net/goodsirlee/article/details/1062318215d9197002c03e20000000667b71957
5. Web/API运行
运行命令:
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 \
--no_flash_attn false \
--total_context 2048 \
--cache_q4 true
如果需要API:
--port 10002
如果需要直接web运行:
--port 10002
--web True
运行成功后,访问 http://localhost:10002/web/index.html#/chat
6. OpenwebUI连接
6.1 本地curl测试
curl -X 'POST' \
'http://localhost:10002/api/generate' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "DeepSeek-R1-Q2_K_XS",
"prompt": "hello.",
"stream": true
}'
6.2 OpenwebUI配置
在OpenwebUI中添加OpenAI API:
http://host.docker.internal:10002/v1
或
http://127.0.0.1:10002/v1
7. 多GPU运行
参考以下文件:
- https://github.com/kvcache-ai/ktransformers/blob/main/ktransformers/optimize/optimize_rules
- https://github.com/ubergarm/r1-ktransformers-guide
可能需要修改yml文件,具体配置如下:
- match:
name: "^model.embed_tokens"
replace:
class: "default"
kwargs:
generate_device: "cpu"
prefill_device: "cpu"
# GPU 0: layers 0-5
- match:
name: "^model\\.layers\\.([0-5])\\.mlp\\.experts$"
replace:
class: ktransformers.operators.experts.KTransformersExperts
kwargs:
generate_device: "cuda:0"
generate_op: "KExpertsMarlin"
recursive: False
# GPU 1: layers 6-11
- match:
name: "^model\\.layers\\.([6-9]|1[0-1])\\.mlp\\.experts$"
replace:
class: ktransformers.operators.experts.KTransformersExperts
kwargs:
generate_device: "cuda:1"
generate_op: "KExpertsMarlin"
recursive: False
# GPU 2: layers 12-17
- match:
name: "^model\\.layers\\.(1[2-7])\\.mlp\\.experts$"
replace:
class: ktransformers.operators.experts.KTransformersExperts
kwargs:
generate_device: "cuda:2"
generate_op: "KExpertsMarlin"
recursive: False
# GPU 3: layers 18-23
- match:
name: "^model\\.layers\\.(1[8-9]|2[0-3])\\.mlp\\.experts$"
replace:
class: ktransformers.operators.experts.KTransformersExperts
kwargs:
generate_device: "cuda:3"
generate_op: "KExpertsMarlin"
recursive: False
或者使用:
ktransformers/ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat-multi-gpu-4.yaml
运行命令:
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 \
--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实现,请耐心等待后续版本更新。
热门推荐
玄奘:唐代高僧的传奇人生与卓越贡献
玄奘:唐代高僧的传奇人生与卓越贡献
皮蛋可以直接剥开吃吗?松花蛋的4种美味做法
智能手机屏幕调光技术对护眼效果的科学分析与应用
七夕节知识 | 什么是七夕节?起源于何时?有哪些习俗?
河南房地产市场回暖:政策助力与市民购房热情的双重驱动
无主灯磁吸轨道灯一组几个?有几种型号?附离墙最佳尺寸
在温泉度假村中,植物和材料的组合对疗愈效果的影响
创业团队如何协作
全国计算机等级考试三级网络技术考试大纲
辉煌1-5大樱桃品种有何特点?哪种最适合种植?
辣椒的分类与生长(探究辣椒的品种、栽培及保健功效)
边防证常见问题解析
中国传统六大滋补品,你吃过几种
诽谤罪是什么
杨议发视频,聊拜师风波:别跟我提拜师,别叨叨姓刘姓侯,我腻歪
雷军、姚劲波“押宝”的啄木鸟维修,想上市更难了
职业技能证书的获取条件是什么?
揭秘“凡尔赛”梗:你不可不知的网络新潮流
“姜萍事件”:从“天才少女”到真相大白的跌宕起伏
如何轻松查询住房公积金余额,一站式指南
肾病综合征最佳饮食食谱
孟郊写出了“春风得意马蹄疾”,为何却惨遭质疑?
后背骨头突出怎么办
央视《传世古建》,多维度探索拙政园非凡魅力
李猛:传统园林艺术的现代油画表达
甜菠菜不是菠菜 台湾冰花别生吃!一煮法更健康
什么样的转账记录可以要回、追回或追回钱款?
16周岁能独立办理电话卡吗?完整指南
舌头是怎么透露身体状况的