低成本使用满血版DeepSeek R1!基于KTransformer框架的DeepSeek R1 671B本地部署教程

一、简介

清华大学 KVCache.AI 团队(同时也是 Mooncake PD 分离推理框架的开发团队)与趋境科技于 2 月 10 日推出了 KTransformers 开源项目,通过一系列创新技术,使得只需一块 24G 显存的 4090D 显卡便能在本地运行全参数的 DeepSeek-R1,并实现了 286 tokens/s 的 Prefill 速度和 14tokens/s 的生成速度。

我们先简单了解下 KTransformers 这个项目。

Github 代码 仓库:

image.png

KTransformers(发音为 Quick Transformers)旨在通过先进的内核优化、设备放置及并行策略,为 Transformers 体验提供增强支持。

KTransformers 是一个以 Python 为中心的灵活框架,其核心设计强调可扩展性。用户仅需一行代码即可实现并注入优化模块,便可获得与 Transformers 兼容的接口。

KTransformers 的核心之一在于应用了异构计算策略,利用 DeepSeek 混合专家(MoE)架构的稀疏性和计算复杂度低的特点,将 MoE 部分放在内存并由 CPU 完成计算,而计算复杂度较高但相对更省显存的 MLA 部分继续留在 GPU 显存并由 GPU 完成计算,大幅降低了显存需求。

此外,采用的 4bit 量化技术和 MarlinGPU 算子配合,也使得推理效率得到了显著提升,推理速度提高了近四倍。CUDAGraph 加速技术通过优化 CPU/GPU 的通信效率,显著减少了延迟和资源消耗。

二、部署过程

基础环境最低要求说明:

环境名称版本信息1
Ubuntu22.04.4 LTS
CudaV12.1.105
Python3.10.15
NVIDIA CorporationRTX 4090 * 4

1. 更新基础软件包

查看系统版本信息

# 查看系统版本信息,包括ID(如ubuntu、centos等)、版本号、名称、版本号ID等
cat /etc/os-release

1726627581255_image.png

配置 apt 国内源

# 更新软件包列表
apt-get update

这个命令用于更新本地软件包索引。它会从所有配置的源中检索最新的软件包列表信息,但不会安装或升级任何软件包。这是安装新软件包或进行软件包升级之前的推荐步骤,因为它确保了您获取的是最新版本的软件包。

# 安装 Vim 编辑器
apt-get install -y vim

这个命令用于安装 Vim 文本编辑器。-y 选项表示自动回答所有的提示为“是”,这样在安装过程中就不需要手动确认。Vim 是一个非常强大的文本编辑器,广泛用于编程和配置文件的编辑。

为了安全起见,先备份当前的 sources.list 文件之后,再进行修改:

# 备份现有的软件源列表
cp /etc/apt/sources.list /etc/apt/sources.list.bak

这个命令将当前的 sources.list 文件复制为一个名为 sources.list.bak 的备份文件。这是一个好习惯,因为编辑 sources.list 文件时可能会出错,导致无法安装或更新软件包。有了备份,如果出现问题,您可以轻松地恢复原始的文件。

# 编辑软件源列表文件
vim /etc/apt/sources.list

这个命令使用 Vim 编辑器打开 sources.list 文件,以便您可以编辑它。这个文件包含了 APT(Advanced Package Tool)用于安装和更新软件包的软件源列表。通过编辑这个文件,您可以添加新的软件源、更改现有软件源的优先级或禁用某些软件源。

在 Vim 中,您可以使用方向键来移动光标,i 键进入插入模式(可以开始编辑文本),Esc 键退出插入模式,:wq 命令保存更改并退出 Vim,或 :q! 命令不保存更改并退出 Vim。

编辑 sources.list 文件时,请确保您了解自己在做什么,特别是如果您正在添加新的软件源。错误的源可能会导致软件包安装失败或系统安全问题。如果您不确定,最好先搜索并找到可靠的源信息,或者咨询有经验的 Linux 用户。

1726627632814_image.png

使用 Vim 编辑器打开 sources.list 文件,复制以下代码替换 sources.list里面的全部代码,配置 apt 国内阿里源。

deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

1726627649314_image.png

安装常用软件和工具

# 更新源列表,输入以下命令:
apt-get update

# 更新系统软件包,输入以下命令:
apt-get upgrade

# 安装常用软件和工具,输入以下命令:
apt-get -y install vim wget git git-lfs unzip lsof net-tools gcc cmake build-essential

出现以下页面,说明国内apt源已替换成功,且能正常安装apt软件和工具

1726627670779_image.png

2. 安装 NVIDIA CUDA Toolkit 12.1

  • 下载 CUDA Keyring :
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb

这个命令用于下载 CUDA 的 GPG 密钥环,它用于验证 CUDA 软件包的签名。这是确保软件包安全性的一个重要步骤。

  • 安装 CUDA Keyring :
dpkg -i cuda-keyring_1.0-1_all.deb

使用 dpkg 安装下载的密钥环。这是必要的,以便 apt 能够验证从 NVIDIA 仓库下载的软件包的签名。

1726627689852_image.png

  • 删除旧的 apt 密钥(如果必要) :
apt-key del 7fa2af80

这一步可能不是必需的,除非您知道 7fa2af80 是与 CUDA 相关的旧密钥,并且您想从系统中删除它以避免混淆。通常情况下,如果您只是安装 CUDA 并使用 NVIDIA 提供的最新密钥环,这一步可以跳过。

  • 更新 apt 包列表 :
apt-get update

更新 apt 的软件包列表,以便包括刚刚通过 cuda-keyring 添加的 NVIDIA 仓库中的软件包。

  • 安装 CUDA Toolkit :
apt-get -y install cuda-toolkit-12-1

1726627724243_image.png

出现以下页面,说明 NVIDIA CUDA Toolkit 12.1 安装成功

1726627736357_image.png

注意:这里可能有一个问题。NVIDIA 官方 Ubuntu 仓库中可能不包含直接名为 cuda-toolkit-12-1 的包。通常,您会安装一个名为 cuda 或 cuda-12-1 的元包,它会作为依赖项拉入 CUDA Toolkit 的所有组件。请检查 NVIDIA 的官方文档或仓库,以确认正确的包名。

如果您正在寻找安装特定版本的 CUDA Toolkit,您可能需要安装类似 cuda-12-1 的包(如果可用),或者从 NVIDIA 的官方网站下载 CUDA Toolkit 的 .run 安装程序进行手动安装。

请确保您查看 NVIDIA 的官方文档或 Ubuntu 的 NVIDIA CUDA 仓库以获取最准确的包名和安装指令。

1726627761880_image.png

  • 出现以上情况,需要配置 NVIDIA CUDA Toolkit 12.1 系统环境变量

编辑 ~/.bashrc 文件

# 编辑 ~/.bashrc 文件
vim ~/.bashrc

插入以下环境变量

# 插入以下环境变量
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH

1726627785017_image.png

激活 ~/.bashrc 文件

# 激活 ~/.bashrc 文件
source ~/.bashrc

查看cuda系统环境变量

which nvcc
nvcc -V

1726627797367_image.png

3. 安装 Miniconda

  • 下载 Miniconda 安装脚本 :
    • 使用 wget 命令从 Anaconda 的官方仓库下载 Miniconda 的安装脚本。Miniconda 是一个更小的 Anaconda 发行版,包含了 Anaconda 的核心组件,用于安装和管理 Python 包。
  • 运行 Miniconda 安装脚本 :
    • 使用 bash 命令运行下载的 Miniconda 安装脚本。这将启动 Miniconda 的安装过程。
# 下载 Miniconda 安装脚本
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

# 运行 Miniconda 安装脚本
bash Miniconda3-latest-Linux-x86_64.sh

# 初次安装需要激活 base 环境
source ~/.bashrc

按下回车键(enter)

1726627823409_image.png

输入yes

1726627835177_image.png

输入yes

1726627844297_image.png

安装成功如下图所示

1726627852297_image.png

pip配置清华源加速

# 编辑 /etc/pip.conf 文件
vim  /etc/pip.conf

加入以下代码

[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple

注意事项:

  • 请确保您的系统是 Linux x86_64 架构,因为下载的 Miniconda 版本是为该架构设计的。
  • 在运行安装脚本之前,您可能需要使用 chmod +x Miniconda3-latest-Linux-x86_64.sh 命令给予脚本执行权限。
  • 安装过程中,您将被提示是否同意许可协议,以及是否将 Miniconda 初始化。通常选择 "yes" 以完成安装和初始化。
  • 安装完成后,您可以使用 conda 命令来管理 Python 环境和包。
  • 如果链接无法访问或解析失败,可能是因为网络问题或链接本身的问题。请检查网络连接,并确保链接是最新的和有效的。如果问题依旧,请访问 Anaconda 的官方网站获取最新的下载链接。

4. 从 github 仓库 克隆项目

  • 克隆存储库:
# 克隆项目
git clone https://github.com/kvcache-ai/ktransformers.git
cd ktransformers
git submodule init
git submodule update

请注意,如果 git clone https://github.com/kvcache-ai/ktransformers.git 这个链接不存在或者无效,git clone 命令将不会成功克隆项目,并且会报错。确保链接是有效的,并且您有足够的权限访问该存储库。

5. 创建虚拟环境

  • CUDA 12.1 及以上版本,如果您还没有,您可以从这里安装。
# Adding CUDA to 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
  • 带有 gcc、g++ 和 cmake 的 Linux-x86_64
    sudo apt-get update
    sudo apt-get install gcc g++ cmake ninja-build
    
  • 我们建议使用Conda创建一个 Python=3.11 的虚拟环境来运行我们的程序。
    # 创建一个名为 ktransformers 的新虚拟环境,并指定 Python 版本为 3.11
    conda create --name ktransformers python=3.11
    conda activate ktransformers
    
  • 确保已安装 PyTorch、packaging、ninja
    pip install torch packaging ninja cpufeature numpy
    

6. 安装模型依赖库

  1. 使用 Docker 映像,请参阅Docker 文档

  2. 您可以使用 Pypi (适用于 Linux) 安装:

    pip install ktransformers --no-build-isolation
    

    对于 Windows,我们在 ktransformers-0.2.0+cu125torch24avx2-cp312-cp312-win_amd64.whl上准备了一个预编译的 whl 包,它需要 cuda-12.5、torch-2.4、python-3.11,更多预编译包正在制作中。

  3. 或者你可以下载源代码并编译:

    • 初始化源代码
      git clone https://github.com/kvcache-ai/ktransformers.git
      cd ktransformers
      git submodule init
      git submodule update
      
    • [可选] 如果要使用网站运行,请在执行前编译网站 bash install.sh
    • 编译并安装(适用于 Linux)
      bash install.sh
      
    • 编译并安装(适用于 Windows)
      install.bat
      
  4. 如果你是开发者,你可以使用 makefile 来编译和格式化代码。makefile
    的详细用法在这里

7. 下载预训练模型

  • 安装 huggingface_hub 依赖包
pip install huggingface_hub hf_transfer
  • 新建下载文件并执行
vim huggingface_hub_download.py
  • 插入以下代码
from huggingface_hub import snapshot_download
snapshot_download(
repo_id = "unsloth/DeepSeek-R1-GGUF",  # 指定Hugging Face仓库
local_dir = "DeepSeek-R1-GGUF",         # 指定本地存储目录
allow_patterns = ["Q4_K_M"],        # 仅下载 Q4 量化版本
)

8. 启动 ktransformers api 服务:

ktransformers \
  --model_path /root/sj-tmp/DeepSeek-R1 \
  --gguf_path DeepSeek-R1-Q4_K_M \
  --host 0.0.0.0 \
  --port 10002 \
  --cpu_infer 65 \
  --max_new_tokens 8192

其中 --model_path 需要指向原版权重(671B, FP8)所在目录,主要用到其中的 config 和 tokenizer,--gguf_path 指向 Q4 量化模型所在目录。--cpu_infer 65 表示使用 65 个 CPU 核心做 MoE 部分计算,--max_new_tokens 8192 表示最大生成 8192 个 token,如果显存和内存充足可以继续增加。

image.png

9. 运行 Open WebUI

通过 Python pip 🐍 安装 Open WebUI 可以使用 Python 包安装程序 pip 进行安装。在继续之前,请确保您使用的是 Python 3.11 以避免兼容性问题。

  • 安装 Open WebUI: 打开终端并运行以下命令以安装 Open WebUI:
pip install open-webui
  • 运行 Open WebUI: 安装后,您可以通过执行以下命令来启动 Open WebUI:
open-webui serve
  • 等待服务启动之后,可以看到出现 0.0.0.0:8080 的地址,这时我们只需在平台开放端口即可进行访问 open webui 界面

image.png

三、网页演示

出现以下 Gradio 页面,即是模型已搭建完成。

image.png

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值