最近帮一个朋友部署本地的671b版本的deepseek r1,需求是要完全本地部署,但是又不想花太高的成本,没有并发要求,我一想,用ktransformers框架来部署完全合适。
关于机器配置,在挑挑拣拣评比之后,设备选择如下,最终选择的是其中的服务器配置。
这套设备下来总成本不到10万,相比如动辄几百万的满血版deepseek R1或者花个五六十万买个deepseek 70b的一体机要值当的多,且不说70b并不是真正的deepseek r1,效果还不如32b的QWQ,就光说一体机的升级也是个麻烦事,买了机器基本就和模型绑定了,以后新模型出来后想升级就难了。
说起这个,我上个月去给政府某部门培训大模型时,还听到一个八卦,说有个公司,花了几百万让某个大厂私有化部署了一套定制的模型,但是deepseek r1出来后,直接弃用了,又去买了一套deepseek一体机。
而且这些公司买了一体机后,也还是不知道怎么用,就是搞个接口和页面,让员工来问下问题,就没了其他用途了。只能说,公司是真有钱。
基础配置
先说结论,使用Ktransformers框架,在上述图片的服务器配置上,速度能达到5token/s, 考虑到Ktransformers目前还并不支持并发,本地私有化部署给少数人使用,这个速度还是勉强可以接受。
ktransformers官网文档的安装方式我之前已经写过一篇文章,ktransformers部署详细笔记。此处不再赘述。
这里我介绍一个这次我安装时发现的一个新的教程 r1-ktransformers-guide,提供了基于uv的预编译的环境,可以避免很多环境的依赖的报错。
同时要注意ubuntu版本要使用ubuntu22及以上,python版本为3.11。
NVIDIA驱动版本570.86.1x , CUDA版本12.8
然后Ktransfomers要使用0.2.2版本,目前最新版本0.3还存在很多的bug
复制git clone https://github.com/kvcache-ai/ktransformers.git cd ktransformers git submodule init git submodule update git checkout 7a19f3b git rev-parse --short HEAD #应显示 7a19f3b
注意的是,git submodule update 主要是为了更新third_party中的项目
如果网络不好,可以直接github中下载这些项目并放到到third_party文件夹中
复制[submodule "third_party/llama.cpp"] path = third_party/llama.cpp url = https://github.com/ggerganov/llama.cpp.git [submodule "third_party/pybind11"] path = third_party/pybind11 url = https://github.com/pybind/pybind11.git
下载模型
然后下载量化后的deepseek r1模型,这里我下载的是int4量化版本,因为网络问题,使用阿里的魔塔下载模型
复制modelscope download unsloth/DeepSeek-R1-GGUF --include "DeepSeek-R1-Q4_K_M/*" --cache_dir /home/user/new/models
--cache_dir /home/user/new/models 是制定模型下载路径的位置
uv安装
uv是一个用Rust语言编写的现代Python包管理工具,被称为"Python的Cargo",它是pip、pip-tools和virtualenv等传统工具的高速替代品。速度比pip更快,而且还支持可编辑安装、git依赖、本地依赖、源代码分发等pip的高级功能。
安装uv工具链
复制curl -LsSf https://astral.sh/uv/install.sh | sh
创建虚拟环境
复制uv venv ./venv --python 3.11 --python-preference=only-managedsource venv/bin/activate
然后我们就可以按照教程中的使用uv工具进行安装。
uv安装预编译版本
flashinfer-python是一个专为大型语言模型(LLM)推理服务设计的高性能GPU加速库。它主要提供以下功能:
复制$ uv pip install flashinfer-python
这是安装ktransformers库的预编译版本:
复制$ export TORCH_CUDA_ARCH_LIST="8.6" uv pip install https://github.com/ubergarm/ktransformers/releases/download/7a19f3b/ktransformers-0.2.2rc1+cu120torch26fancy.amd.ubergarm.7a19f3b.flashinfer-cp311-cp311-linux_x86_64.whl
这是安装flash_attn库的预编译版本:
复制uv pip install https://github.com/mjun0812/flash-attention-prebuild-wheels/releases/download/v0.0.5/flash_attn-2.6.3+cu124torch2.6-cp311-cp311-linux_x86_64.whl
这里的预编译版本其实是这个文档的作者直接编译好的,虽然这个教程说明中提到仅适合RTX 3090Ti 24GB显存 + 96GB DDR5-6400内存 + Ryzen 9950X处理器 。
但是我使用4090 24显存 + 500 DDR5-4800内存 ,使用这个预编译版本也可以安装成功的。如果这个预编译版本可以安装成功的话,很多潜在的因为版本不对造成的报错都可以避免掉了。
源码运行ktransformers
如果上面的预编译版本运行不了的话,又不想接着安装ktransfomers,其实也可以直接用源码来跑的,命令如下:
复制支持多GPU配置及通过 `--optimize_config_path` 进行更细粒度的显存卸载设置 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True python3 ktransformers/server/main.py --gguf_path /mnt/ai/models/unsloth/DeepSeek-R1-GGUF/DeepSeek-R1-UD-Q2_K_XL/ --model_path deepseek-ai/DeepSeek-R1 --model_name unsloth/DeepSeek-R1-UD-Q2_K_XL --cpu_infer 16 --max_new_tokens 8192 --cache_lens 32768 --total_context 32768 --cache_q4 true --temperature 0.6 --top_p 0.95 --optimize_config_path ktransformers/optimize/optimize_rules/DeepSeek-R1-Chat.yaml --force_think --use_cuda_graph --host 127.0.0.1 --port 8080
是的,其实即使不编译ktransfomers,也是可以跑起来的。直接把项目下好,运行上面的命令,准备好相应的文件,就能正常运行了。
如果要继续编译ktransfomers的话,则可以按照下面的流程进行操作:
复制# 安装额外编译依赖项,包括CUDA工具链等,例如: # sudo apt-get install build-essential cmake ... source venv/bin/activate uv pip install -r requirements-local_chat.txt uv pip install setuptools wheel packaging # 建议跳过可选网站应用,使用`open-webui`或`litellm`等替代方案 cd ktransformers/website/ npm install @vue/cli npm run build cd ../.. # 如果拥有充足的CPU核心和内存资源,可显著提升构建速度 # $ export MAX_JOBS=8 # $ export CMAKE_BUILD_PARALLEL_LEVEL=8 # 安装flash_attn uv pip install flash_attn --no-build-isolation # 可选实验性使用flashinfer替代triton # 除非您是已经成功上手的进阶用户,否则暂不建议使用 # 使用以下命令安装: # $ uv pip install flashinfer-python # 仅适用于以下情况: # 配备Intel双路CPU且内存>1TB可容纳两份完整模型内存副本(每路CPU一份副本) # AMD EPYC NPS0双路平台可能无需此配置? # $ export USE_NUMA=1 # 安装ktransformers KTRANSFORMERS_FORCE_BUILD=TRUE uv pip install . --no-build-isolation
如果想自己编译好后供其他环境使用的,则可以使用下面的命令进行环境编译。
复制KTRANSFORMERS_FORCE_BUILD=TRUE uv build
然后把生成的文件移动到其他环境安装则输入下面命令即可
复制uv pip install ./dist/ktransformers-0.2.2rc1+cu120torch26fancy-cp311-cp311-linux_x86_64.whl
ktransformers运行
接口运行命令
复制ktransformers --model_path /home/user/new/ktran0.2.2/ktransformers/models/deepseek-ai/DeepSeek-R1 --gguf_path /home/user/new/models/unsloth/DeepSeek-R1-GGUF/DeepSeek-R1-Q4_K_M --port 8080
如果想运行网页版本,则再最后增加 --web True参数即可。
其他问题
如果使用了不支持amx的cpu, 可能会遇到下面的报错
复制/tmp/cc8uoJt1.s:23667: Error: no such instruction: `vpdpbusd %ymm3,%ymm15,%ymm1' 的报错, File "<string>", line 327, in build_extension File "/usr/local/python3/lib/python3.11/subprocess.py", line 571, in run raise CalledProcessError(retcode, process.args, subprocess.CalledProcessError: Command '['cmake', '--build', '.', '--verbose', '--parallel=128']' returned non-zero exit status 1. [end of output]
这是因为CPU架构不支持这些指令:编译时使用了-march=native参数,这会让编译器生成针对当前CPU优化的代码,包括使用特定的指令集。但如果当前CPU不支持AVX-VNNI指令集,就会出现这个错误。
解决方案:在CMake配置中添加以下选项:
复制-DLLAMA_NATIVE=OFF -DLLAMA_AVX=ON -DLLAMA_AVX2=ON -DLLAMA_AVX512=OFF -DLLAMA_AVXVNNI=OFF
就可以让cpu不使用amx指令集,从而避免这个报错了。
另外,如果需要我环境的requirements.txt, 可以在后台回复330获取。
写在最后
2025年的今天,AI创新已经喷井,几乎每天都有新的技术出现。作为亲历三次AI浪潮的技术人,我坚信AI不是替代人类,而是让我们从重复工作中解放出来,专注于更有创造性的事情,关注我们公众号口袋大数据,一起探索大模型落地的无限可能!