大模型私有化部署实践(十二):KTransformers部署满血671B的DeepSeek R1

687 阅读4分钟

专栏

KTransformers

  • 当前,无论是在国内还是海外市场,DeepSeek-R1的部署正掀起一股热潮,众多用户热衷于在自己的本地环境中尝试搭建完整的DeepSeek-R1系统。然而,想要在本地成功部署一个全功能的DeepSeek-R1,往往需要高达16张A800显卡的支持,这随之带来了大约200万元人民币的高昂成本。长久以来,671B大模型的高昂部署成本一直是业界关注的焦点难题,业界迫切寻求一种更为经济高效的部署方案。

  • 在此,我们向各位介绍一款创新的框架——KTransformers。该框架能够在仅需单张24GB VRAM的GPU或多GPU配置,以及382G DRAM的平台上,成功支持全功能DeepSeek-R1的部署。更令人振奋的是,KTransformers还能实现3至28倍的性能提升。这无疑为解决众多用户长久以来的部署难题提供了一个极具吸引力的选项。

  • 地址

  • 部署详情

机器配置

CPU型号

  • Intel(R) Xeon(R) Platinum 8168 CPU @ 2.70GHz
  • 64核 一个插槽

内存

  • 总共256G, 有16个插槽,每个插槽16G

硬盘

  • SSD 1T

GPU

  • 两块A10 24G实际上只要一块就行,最终占用14G

实践

  • 我的cpu是支持avx命令的,但不支持amx, 我这边是通过whl文件安装的,并且不是安装0.3版本而是安装0.2版本,因为看的git上面的issue如果不支持amx指令,还是使用0.2版本更合适

前置

  • python我使用的是3.10
Python 3.10.12
  • 操作系统是ubuntu 22.04
  • 模型下载,因为内存和cpu硬件资源有限我下载的Q2量化版本,大家可以自行选择国内模型下载地址, 因为非常大所以下载时间比较久推荐nohup python xxx.py &后台下载
from huggingface_hub import snapshot_download

# 设置自定义缓存目录
custom_cache_dir = "/mnt/big_model/DeepSeek-R1-Q2_K_L"

# 使用 hf-mirror.com
mirror_url = "https://hf-mirror.com"

snapshot_download(
    repo_id="unsloth/DeepSeek-R1-GGUF",
    local_dir="DeepSeek-R1-GGUF",
    allow_patterns=["*Q2_K_L*"],  
    cache_dir=custom_cache_dir,  # 设置自定义缓存目录
    endpoint=mirror_url  # 使用 hf-mirror.com
)

mdoel.png

  • 先升级libstdc++6, 这里我尝试使用conda环境升级但是失败了就没用conda
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install --only-upgrade libstdc++6
  • 安装flash-attn
pip install flash-attn
  • 下载whl文件,我的cpu不支持fancy所以我下载的是avx版本的whl, 具体下载地址是0.2版本KTransformers
wget https://github.com/kvcache-ai/ktransformers/releases/download/v0.2.1.post1/ktransformers-0.2.1.post1+cu121torch23avx2-cp310-cp310-linux_x86_64.whl
  • 安装
pip3 install ./ktransformers-0.2.1.post1+cu121torch23avx2-cp310-cp310-linux_x86_64.whl

安装.png

  • 启动,机器上是有多快GPU所以我使用多快gpu启动方式, 只有一块GPU的话可以去掉--optimize_config_path配置
export USE_NUMA=1
nohup ktransformers \
--model_path deepseek-ai/DeepSeek-R1 \
--gguf_path /mnt/big_model/DeepSeek-R1-GGUF/DeepSeek-R1-Q2_K_L \
--cpu_infer 65 \
--optimize_config_path ktransformers/optimize/optimize_rules/DeepSeek-V3-Chat-multi-gpu.yaml \
--port 6006 \
--force_think true \
--max_new_tokens 6666 &
  • 启动一个简单web界面, xxxx改成你的ip地址
# web.py

import streamlit as st
import requests
import json
from sseclient import SSEClient

# 设置远程服务器地址
REMOTE_URL = "http://xxxx:6006/v1/chat/completions"

st.title("大模型对话界面")

# 创建一个文本输入框
user_input = st.text_input("请输入您的问题:")

if st.button("发送"):
    if user_input:
        # 创建请求头
        headers = {
            "Content-Type": "application/json",
        }

        # 创建请求体
        data = {
            "model": "ktransformers-model",  # 根据实际情况修改模型名称
            "messages": [{"role": "user", "content": user_input}],
            "stream": True
        }

        # 创建一个空的占位符用于显示输出
        output_placeholder = st.empty()

        try:
            # 发送POST请求并获取SSE流
            with requests.post(REMOTE_URL, headers=headers, json=data, stream=True, timeout=1800) as response:
                client = SSEClient(response)
                full_response = ""
                for event in client.events():
                    if event.data != "[DONE]":
                        try:
                            chunk = json.loads(event.data)
                            content = chunk['choices'][0]['delta'].get('content', '')
                            full_response += content
                            output_placeholder.markdown(full_response)
                        except json.JSONDecodeError:
                            pass
        except requests.exceptions.RequestException as e:
            st.error(f"发生错误: {e}")

  • 然后启动 web.py界面脚本
streamlit run web.py --server.port 8889启动
  • 效果,可以看到有R1的思维链思考过程

think.png

存放目录.png

参考文章