(KTransformers) RTX4090单卡运行 DeepSeek-R1 671B

安装环境为:ubuntu 22.04 x86_64

下载模型

编辑文件vim url.list 写入如下内容

https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00001-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00002-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00003-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00004-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00005-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00006-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00007-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00008-of-00009.gguf 
https://modelscope.cn/models/unsloth/DeepSeek-R1-GGUF/resolve/master/DeepSeek-R1-Q4_K_M/DeepSeek-R1-Q4_K_M-00009-of-00009.gguf
#下载 wget -i url.list -P /data/model/DeepSeek-R1 
#也可以用 aria2 并行下载 
sudo apt-get install aria2 
aria2c -i url.list -d /data/model/DeepSeek-R1 --log=aria2.log

前期准备

前置条件:

CUDA 12.1 及更高版本 官网:CUDA Toolkit 12.8 Downloads | NVIDIA Developer

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb 
sudo dpkg -i cuda-keyring_1.1-1_all.deb 
sudo apt-get update 
sudo apt-get -y install cuda-toolkit-12-8

添加环境变量 

# 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

安装 gcc、g++ 和 cmake

sudo apt-get install build-essential cmake ninja-build

切换root用户 sudo -i

#创建python虚拟环境
conda create --name ktransformers python=3.11

#进入环境:
conda activate ktransformers

#安装程序包:
conda install -c conda-forge libstdcxx-ng

#您应该确保 Anaconda 使用的 GNU C++ 标准库的版本标识符包括~/anaconda3 GLIBCXX-3.4.32
strings ~/anaconda3/envs/ktransformers/lib/libstdc++.so.6 | grep GLIBCXX

确保已安装 PyTorch、packaging、ninja

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
pip3 install packaging ninja cpufeature numpy

同时,您应该从 Releases · Dao-AILab/flash-attention · GitHub 下载并安装相应版本的 flash-attention

#确认自己的pyTorch与cuda
python3 -c "import torch; print(torch.__version__)"
2.6.0+cu126
#确认python版本
python3 --version
Python 3.11.11
#确认PyTorch是否开启 C++11 ABI  输出包含:-D_GLIBCXX_USE_CXX11_ABI=1 为开启
python -c "import torch; print(torch.__config__.show())" |grep enable-cxx11-abi



#根据输出需要安装与这个版本兼容的 Flash-Attention。
# - 当前安装的 PyTorch 版本是 2.6.0+cu126,这表示它支持 CUDA 12.6 选择cu12torch2.6版本
# - C++11 ABI为开启,选择xx11abiTRUE版本
# - python版本为3.11.11 选择cp311版本

#下载Flash-Attention 
wget https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.4.post1/flash_attn-2.7.4.post1+cu12torch2.6cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

#安装 Flash-Attention
pip install flash_attn-2.7.4.post1+cu12torch2.6cxx11abiTRUE-cp311-cp311-linux_x86_64.whl

开始安装

下载源码并编译:

init 源代码

git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
git submodule init
git submodule update

linux 简单安装

bash install.sh

#如果计算机是两颗CPU 对于拥有两个 CPU 和 1T(1TB)RAM 的用户
export USE_NUMA=1
bash install.sh

命令行运行模型

python -m ktransformers.local_chat --model_path /home/ubuntu/.cache/modelscope/hub/models/deepseek-ai/DeepSeek-R1 --gguf_path /data/model/DeepSeek-R1 --cpu_infer 62 --optimize_config_path ./ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat.yaml
  • --model_path(必填):模型的名称(例如“deepseek-ai/DeepSeek-V2-Lite-Chat”,它将自动从 Hugging Face 下载配置)。或者,如果您已经有本地文件,则可以直接使用该路径来初始化模型。
  • 注意:目录中不需要 .safetensors 文件。我们只需要配置文件来构建 model 和 tokenizer。
  • --gguf_path(必需):包含 GGUF 文件的目录路径,可以从 Hugging Face 下载。请注意,该目录应仅包含当前模型的 GGUF,这意味着每个模型需要一个单独的目录。
  • --optimize_config_path(Qwen2Moe 和 DeepSeek-V2 除外是必需的):包含优化规则的 YAML 文件的路径。在 ktransformers/optimize/optimize_rules 目录中预先编写了两个规则文件,用于优化 DeepSeek-V2 和 Qwen2-57B-A14,这两个 SOTA MoE 模型。
  • --max_new_tokens: Int (默认值 = 1000)。要生成的最大新令牌数。
  • --cpu_infer: Int (默认值 = 10)。用于推理的 CPU 数量。理想情况下,应设置为 (内核总数 - 2)。

成功运行

由于每个人硬件环境不同,受限于内存速度,显卡性能,cpu性能等 生成的tokens/s速度差别较大

遇到问题

问题:Turing 架构 Volta 架构显卡 默认配置不兼容

如果有人遇到类似 已经进入到对话界面,但一说话就报如下内容

RuntimeError: CUDA error: invalid device function CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1 Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.

该问题是Turing 架构 Volta 架构显卡 默认配置不兼容导致的。

解决办法:

1.git下载最新的源码

2.修改源码中的yaml文件,例如本次用到的:./ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat.yaml 将里面所有的KLinearMarlin换成KLinearTorch

3.从ktransformer的源码进行编译,直到在本机编译成功。

4.修改local_chat.py,将里面所有的flash_attention_2换成eager。

5.然后重新执行运行命令

<think>好的,我现在需要帮助用户解决在单机Docker环境中使用KTransformers部署DeepSeek模型的问题。首先,我要回顾用户提供的引用内容,特别是引用[1]和[3],里面提到了具体的部署步骤和可能遇到的问题。 用户的问题集中在如何部署,所以需要分步骤说明。首先,用户需要准备环境,包括Docker和NVIDIA驱动,这部分在引用[1]中有提到加载镜像和运行容器的命令。接下来是模型文件的准备,用户需要下载GGUF格式的模型,并按照目录结构存放,引用[1]和[3]都提到了这一点。 然后,启动Docker容器时要注意挂载模型目录,并映射端口。这里需要确保命令中的路径和端口正确,用户可能会在这里遇到问题,比如路径错误或权限问题,可能需要提醒用户检查路径是否正确,并确认模型文件的位置。 接下来是配置和验证服务,这部分引用[3]提到了可能的配置问题,比如batch size的设置导致shape mismatch的错误,需要提醒用户在启动时注意参数设置,特别是如果遇到类似错误,应该检查batch size是否设置为1。此外,测试服务是否正常运行可能需要使用curl命令或编写测试脚本,用户可能需要示例代码来验证部署是否成功。 最后,用户可能会遇到的一些常见问题,比如模型加载失败或性能问题,需要根据引用内容中的信息提供解决方法,例如使用正确的镜像版本,调整参数等。同时,用户可能需要了解如何优化部署,比如使用量化模型减少显存占用,这也是引用[3]提到的内容。 在整理步骤时,要确保逻辑清晰,每个步骤都有对应的命令和解释,让用户能够一步步跟随操作。同时,注意引用中的信息,比如加载镜像的命令、容器运行的参数,以及可能出现的错误和解决方法,都要在回答中体现出来,确保用户能够顺利部署并解决问题。</think>### 分步指南:使用KTransformers部署DeepSeek-R1模型 #### 一、环境准备 1. **安装NVIDIA驱动与Docker** - 确认服务器已安装NVIDIA驱动(版本≥470.x)和nvidia-container-toolkit - 执行命令验证驱动状态: ```bash nvidia-smi docker --version ``` 2. **获取KTransformers镜像** - 加载预构建的Docker镜像(需提前获取镜像文件): ```bash docker load -i ktransformers-0.2.2.tar ``` 镜像版本建议选择0.2.2及以上[^3] #### 二、模型部署 1. **准备模型文件** - 创建模型目录结构: ```bash mkdir -p /DeepSeek/{config,models} ``` - 将下载的GGUF模型文件(如`deepseek-r1-671b-q4_k_m.gguf`)放入`/DeepSeek/models` - 配置文件`config.json`需包含以下关键参数: ```json { "model_type": "deepseek-r1", "quantization": "q4_k_m", "max_seq_len": 4096 } ``` 2. **启动容器** ```bash docker run --gpus all \ -v /DeepSeek/:/models \ -p 10012:10012 \ --name deepseek \ -itd ktransformers:0.2.2 \ --model /models/deepseek-r1-671b-q4_k_m.gguf \ --config /models/config.json \ --batch_size 1 # 必须设置为1以避免张量形状错误[^3] ``` #### 三、服务验证 1. **测试API接口** ```bash curl -X POST http://localhost:10012/v1/completions \ -H "Content-Type: application/json" \ -d '{ "prompt": "解释量子计的基本原理", "max_tokens": 200, "temperature": 0.7 }' ``` 2. **Python客户端示例** ```python from openai import OpenAI client = OpenAI(base_url="http://localhost:10012/v1") response = client.chat.completions.create( model="deepseek-r1", messages=[{"role": "user", "content": "编写快速排序的Python实现"}] ) print(response.choices[0].message.content) ``` #### 四、常见问题解决 1. **张量形状不匹配错误** - 现象:`RuntimeError: shape mismatch...` - 解决方法: - 确认启动参数包含`--batch_size 1` - 检查GGUF模型与配置文件的对应关系[^3] 2. **显存不足问题** - 671B量化版建议配置: - 单卡至少24GB显存(如RTX 4090/A100) - 使用`q4_k_m`量化策略减少显存占用[^3] 3. **模型响应速度优化** ```bash # 启动时添加性能参数 --context_size 2048 --stream_interval 50 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不仙520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值