DeepSeek-R1:使用KTransformers部署(保姆级教程)

1. 引言

KTransformers作为一个开源框架,专门为优化大规模语言模型的推理过程而设计。它支持GPU/CPU异构计算,并针对MoE架构的稀疏性进行了特别优化,可以有效降低硬件要求,允许用户在有限的资源下运行像DeepSeek-R1这样庞大的模型。KTransformers实现了强大的CPU+DDR5+24GB显存环境下本地运行DeepSeek-R1满血版的能力,大大降低了部署成本和技术门槛。

2. 实践环境描述
  • 硬件配置
    • CPU: 使用的是Intel Xeon Silver 4310 CPU @ 2.10GHz,拥有24个物理核心(每个插槽12个核心),支持超线程技术,总共有48个逻辑处理器。
    • 内存: 系统配备了1T的DDR4内存,频率为3200MHz。
    • GPU: NVIDIA GeForce RTX 3090,显存为24GB。
  • 软件环境
    • 操作系统版本:Ubuntu 22.04
    • CUDA版本:12.1
    • 软件框架: KTransformers v0.2.1,支持DeepSeek-R1模型的本地推理。
  • 模型参数:DeepSeek-R1-Q4_K_M
2. 环境准备与资源下载
3. 实践过程
  • 步骤一:环境搭建
  1. CUDA 12.1及以上版本

    • 如果您还没有安装CUDA,可以从这里下载并安装。
    • 添加CUDA到PATH环境变量:
      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
      export CUDA_PATH=/usr/local/cuda
      
  2. Linux-x86_64 系统,带有 gcc, g++ 和 cmake

    • 更新包列表并安装必要的工具:
      sudo apt-get update
      sudo apt-get install gcc g++ cmake ninja-build
      
  3. 使用 Conda 创建虚拟环境

    • 我们建议使用Conda来创建一个Python=3.11的虚拟环境来运行程序:
      conda create --name ktransformers python=3.11
      conda activate ktransformers  # 您可能需要先运行 `conda init` 并重新打开shell
      
    • 确保安装了 PyTorch、packaging、ninja 等依赖项:
      pip install torch packaging ninja cpufeature numpy
      
    • 或者直接拉取已经构建好的docker镜像(推荐):docker pull approachingai/ktransformers:0.2.1
  4. 下载源代码并编译

本地聊天测试命令如下:

numactl -N 1 -m 1 python ./ktransformers/local_chat.py --model_path <your model path> --gguf_path <your gguf path> --cpu_infer 33 --max_new_tokens 1000
参数说明
  1. numactl -N 1 -m 1

    • 使用numactl工具来绑定CPU核心和内存节点。这里的-N 1表示使用第1号CPU核心,-m 1表示使用第1号内存节点。这有助于提高多核系统的性能。
  2. python ./ktransformers/local_chat.py

    • 运行KTransformers的本地聊天Python脚本。
  3. --model_path <your model path>

    • 指定模型路径。可以是本地路径或在线Hugging Face路径(如deepseek-ai/DeepSeek-V3)。如果在线连接有问题,可以尝试使用镜像站点(如hf-mirror.com)。
  4. --gguf_path <your gguf path>

    • 指定GGUF格式的模型路径。由于GGUF文件较大,建议您下载到本地并根据需要进行量化处理。注意这里是指向包含GGUF文件的目录路径。
  5. --cpu_infer 33

    • 设置用于推理的CPU线程数。这里设置为33,可以根据您的硬件配置调整这个数值。
  6. --max_new_tokens 1000

    • 设置最大输出token长度。默认值为1000,如果您发现生成的答案被截断了,可以增加这个数值以生成更长的回答。但请注意,增加这个数值可能会导致内存不足(OOM),并且会降低生成速度。
示例

(以博主目录结构假设)模型路径为/root/DeepSeek-R1-GGUF,GGUF路径为/root/DeepSeek-R1-GGUF/DeepSeek-R1-Q4_K_M,那么完整的命令应如下所示:

numactl -N 1 -m 1 python ./ktransformers/local_chat.py --model_path /root/DeepSeek-R1-GGUF --gguf_path /root/DeepSeek-R1-GGUF/DeepSeek-R1-Q4_K_M  --cpu_infer 33 --max_new_tokens 1000
  • 部分加载日志
  • 首次加载时间较长在这里插入图片描述
  • 步骤三:推理与测试
    在这里插入图片描述

4. 实践结果

在复现KTransformers部署满血版DeepSeek-R1的过程中,我们遇到了一些性能上的差异。尽管已经按照官方指南进行了配置和优化,但最终的推理速度和效率并未达到预期水平。以下是具体的实践结果及分析。

测试结果

经过多次测试,我们得到了5.2 tokens/s的生成速度。

这些数据显示,在我们的实验环境中,模型的推理速度显著低于官方宣称14 tokens/s的生成速度。

分析原因

通过对比实验配置与官方推荐的最佳实践,我们发现以下几个关键因素可能导致了性能差异:

  1. CPU性能:

    • 我们的测试平台使用的是Intel Xeon Silver 4310 CPU,而官方文档中提到的理想配置包括第四代至强可扩展处理器,这类处理器集成了高级矩阵扩展指令集(AMX),能够大幅提升计算密集型任务的执行效率。相比之下,Silver系列的处理器在处理能力上存在差距,特别是在需要大量矩阵运算的任务中表现不佳。
  2. 内存类型:

    • 在内存方面,我们使用的DDR4内存虽然提供了足够的带宽和容量,但是与最新的DDR5内存相比,在读写速度上有明显的劣势。根据相关测试,DDR5内存的读写速度比DDR4内存高出约2000MB/s,提升幅度在35%~41%之间。这种速度上的差异可能影响到数据加载和处理的速度,进而影响整体的推理效率。
  3. GPU型号:

    • 虽然NVIDIA GeForce RTX 3090是一款高性能显卡,但在处理极其庞大的模型时,其24GB的显存限制可能成为瓶颈。相比之下,RTX 4090采用了更先进的架构,能够在相同条件下提供更高的计算能力和更好的能效比。这可能是导致我们在实际测试中未能达到理想推理速率的一个重要原因。
结论与建议

综上所述,为了进一步提升DeepSeek-R1模型在本地部署时的推理性能,建议考虑升级硬件配置,特别是选择支持AMX指令集的CPU、采用DDR5内存以及选用更高性能的GPU。

### 关于 DeepSeek R1KTransformers 的技术文档及相关信息 #### DeepSeek R1 技术概述 DeepSeek-R1 是由 DeepSeek 发布的一系列先进的人工智能模型之一,在2025年1月下旬推出,因其卓越的推理能力和较低的训练成本而受到广泛关注。该模型采用了强化学习技术来提升性能,从而实现了高效的推理而不必承担高昂的计算费用[^3]。 #### 创建和配置 DeepSeek-R1 使用说明 为了创建并运行基于 DeepSeek-R1 的应用实例,可以使用特定命令行工具 ollama 来完成初始化设置工作。具体操作如下所示: ```bash ollama create DeepSeek-R1-UD-IQ1_M -f /path/to/DeepSeek-R1_Q_ModelFile ``` 上述指令中的 `-f` 参数用于指定模型文件的具体位置,确保提供的是实际存在的绝对路径[^1]。 #### 部署指南——KTransformers 实现细节 对于希望深入了解如何部署 DeepSeek-R1 模型的应用开发者来说,官方提供了详细的保姆教程指导整个流程。特别是提到可以通过 KTransformers 库来进行有效的集成和支持。关于 KTransformers 更多的技术背景以及安装步骤可以从 GitHub 项目页面获取更多信息;同时也有专门针对此库编写的在线手册帮助用户顺利完成环境搭建[^2]。 #### 示例代码片段展示如何加载预训练好的 DeepSeek-R1 模型并与之交互 下面是一个简单的 Python 脚本例子,演示了怎样借助 KTransformers 加载预先训练完毕的 DeepSeek-R1 并执行基本的任务处理逻辑: ```python from ktransformers import TransformerModel, Tokenizer # 初始化 tokenizer 和 transformer model 对象 tokenizer = Tokenizer.from_pretrained('deepseek-r1') model = TransformerModel.from_pretrained('deepseek-r1') def predict(text_input): inputs = tokenizer.encode_plus( text=text_input, add_special_tokens=True, return_tensors="pt" ) outputs = model(**inputs) predictions = outputs.logits.argmax(dim=-1) decoded_output = tokenizer.decode(predictions.tolist()[0]) return decoded_output.strip() if __name__ == "__main__": user_query = input("请输入查询语句:") result = predict(user_query) print(f"预测结果:{result}") ```
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

趋吉避凶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值