DeepSeek本地无显卡安装R1

2025/2/20 AI大语言模型

主机配置清单

  • CPU i9 14900HX 24核32线程 睿频5.8G
  • 显卡 Intel® UHD Graphics超强核显
  • 主板 英特尔 ERYING Z790-PLUS DDR5 顶配主板
  • 内存 玖合 忆界马甲条32G(16G*2) 6000MHz DDR5
  • 硬盘 七彩虹 战戟 1TB M.2 NVMe超高速固态硬盘
  • 散热 金河田 龙鳞360三水排RGB一体式水冷散热器
  • 电源 战电 额定700W宽幅电源
  • windows10系统,在vmware workstation 安装Ubuntu 22.04系统 要求:
  • 推荐使用参数的模型是不是7B?
  • 根据推荐参数的模型,给出本地部署DeepSeek-R1详细步骤
  • 通过Java调用DeepSeek的API进行对话

好的,我需要帮用户解决他们的问题。首先,用户提供了一台主机的配置清单,然后在VMware里安装了Ubuntu 22.04。
他们有三个主要的问题:推荐使用参数的模型是不是7B?根据推荐参数的模型,
给出本地部署DeepSeek-R1的详细步骤,以及通过Java调用DeepSeek的API进行对话。

首先,关于模型参数推荐是否为7B的问题。用户的主机配置看起来挺不错的,
尤其是i9 14900HX有24核32线程,内存32GB DDR5,不过显卡是Intel的集成显卡。
通常,大语言模型如LLAMA或DeepSeek的模型,如果是7B参数的话,在CPU上运行可能会比较吃力,
但内存方面32GB应该足够。不过要注意的是,如果没有独立显卡如NVIDIA的GPU,
就无法使用CUDA加速,只能依赖CPU进行计算,这会导致推理速度较慢。
所以7B模型可能在CPU上勉强能运行,但可能体验不佳。用户需要确认DeepSeek-R1是否有针对CPU优化的版本,
或者是否支持使用像GGML这样的量化格式,这样可以在CPU上更高效地运行。

接下来是本地部署DeepSeek-R1的步骤。首先需要明确DeepSeek-R1是否开源,
是否有公开的模型权重和部署指南。假设用户已经获得了模型文件,
可能需要使用像Hugging Face的Transformers库或者llama.cpp这样的工具来加载和运行模型。
步骤可能包括安装Python环境,安装必要的库,下载模型文件,编写推理脚本等。
另外,考虑到用户是在Ubuntu虚拟机里运行,可能需要分配足够的资源,比如内存和CPU核心,
确保模型能够顺利加载。如果使用llama.cpp,需要编译支持AVX指令集的版本,因为Intel的CPU支持这些指令集,可以加速推理。

第三个问题是通过Java调用DeepSeek的API。这里需要明确是调用本地部署的模型API还是云端提供的API。
如果是本地部署,可能需要模型服务化,比如使用Flask或FastAPI创建一个REST API,
然后Java通过HTTP客户端发送请求。如果是云端的API,则需要获取API密钥,并按照文档进行调用。
用户需要确认DeepSeek是否有现成的API接口,或者是否需要自己搭建服务层。
Java部分可能需要使用Apache HttpClient或OkHttp来发送POST请求,处理JSON数据。

在思考过程中,还需要考虑用户可能遇到的一些问题。
例如,虚拟机中的Ubuntu是否分配了足够的资源,比如内存是否足够加载7B模型(通常需要至少16GB以上)。
另外,Intel的集成显卡是否支持某些加速库,比如OpenCL,但通常这类模型在CPU上运行较多。
另外,用户是否已经获取了DeepSeek-R1的模型文件,因为有些模型可能需要申请权限才能下载。

另外,需要确认DeepSeek-R1的具体情况,比如是否类似于DeepSeek的其他开源模型,
例如DeepSeek-7B,如果是的话,部署步骤可能与常见的LLAMA部署类似。
可能还需要考虑模型量化,比如使用4-bit或8-bit量化来减少内存占用,从而在CPU上更高效地运行。

总结一下,回答的结构应该是:

1. 关于7B模型是否适合用户的配置:分析CPU和内存是否足够,指出集成显卡的限制,建议可能的优化方法如量化。

2. 部署步骤:安装依赖,下载模型,使用Transformers或llama.cpp,编写示例代码,启动服务。

3. Java调用API:搭建本地API服务,或用云API,Java代码示例使用HttpClient发送请求。

需要确保步骤详细,适合Ubuntu环境,并考虑到用户可能在Windows主机下的VMware中运行Ubuntu,
注意资源分配的问题。可能还需要提醒用户,如果模型太大,在虚拟机中运行可能会有性能问题,建议直接安装在宿主机或者分配更多资源。

# 一、关于模型参数推荐(7B 是否适用?)

根据您的配置(i9 14900HX + 32GB DDR5 + 无独立显卡),推荐使用 7B 参数的模型,原因如下:

  1. 内存需求
    7B 模型在 FP16 精度下约需 14GB 显存,但若使用 CPU + 内存运行(无 GPU),配合量化技术(如 GGML/GGUF 4-bit),内存占用可降至约 6-8GB,32GB 内存完全足够。

  2. 性能瓶颈

    • 优势: 您的 CPU 多核性能强,适合多线程推理(如使用 llama.cpp 的 CPU 优化)。
    • 劣势: 核显无法加速计算,纯 CPU 推理速度较慢(约 1-3 token/s),但对话场景尚可接受。
  3. 更高参数模型风险
    13B 及以上模型在 CPU 上运行易出现内存不足或速度极慢的问题。

建议选择 7B 量化版本(如 deepseek-7b-chat-gguf 的 Q4_K_M 格式)。


# 二、本地部署 DeepSeek-R1 详细步骤(以 llama.cpp 为例)

# 1. 环境准备(Ubuntu 22.04)

# 安装基础依赖
sudo apt update && sudo apt install -y build-essential cmake python3-pip

# 克隆 llama.cpp 仓库
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make clean && make -j4
1
2
3
4
5
6

# 2. 下载模型文件

  • 从 Hugging Face 下载 DeepSeek-R1 的 GGUF 格式文件(如 deepseek-r1-7b.Q4_K_M.gguf)。
  • 假设保存路径为 ~/models/deepseek-r1-7b.Q4_K_M.gguf

# 3. 启动本地推理服务

# 进入 llama.cpp 目录
cd ~/llama.cpp

# 启动服务(启用多线程,调整线程数 -t 根据 CPU 核心数)
./server -m ~/models/deepseek-r1-7b.Q4_K_M.gguf \
  --host 0.0.0.0 --port 8080 \
  -t 24 -c 2048 --mlock
1
2
3
4
5
6
7

参数说明

  • -t 24: 使用 24 线程(根据 i9 核心数调整)。
  • --mlock: 锁定内存防止交换。
  • -c 2048: 上下文长度。

# 4. 验证服务

curl http://localhost:8080/completion \
  -H "Content-Type: application/json" \
  -d '{"prompt": "你好", "n_predict": 128}'
1
2
3

# 三、Java 调用 API 示例

# 1. 添加依赖(Maven)

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
1
2
3
4
5
6
7
8
9
10

# 2. Java 调用代码

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.google.gson.JsonObject;

public class DeepSeekClient {
    public static void main(String[] args) {
        String apiUrl = "http://localhost:8080/completion";
        
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(apiUrl);
            httpPost.setHeader("Content-Type", "application/json");

            JsonObject payload = new JsonObject();
            payload.addProperty("prompt", "Java 如何连接 MySQL?");
            payload.addProperty("n_predict", 256);
            payload.addProperty("temperature", 0.7);

            httpPost.setEntity(new StringEntity(payload.toString()));
            
            try (CloseableHttpResponse response = client.execute(httpPost)) {
                String responseBody = EntityUtils.toString(response.getEntity());
                System.out.println("Response: " + responseBody);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 四、关键注意事项

  1. 虚拟机资源分配

    • 为 Ubuntu 分配至少 24GB 内存 + 8 核 CPU(VMware 设置中调整)。
    • 启用 嵌套虚拟化(如需使用某些加速指令)。
  2. 性能优化

    • llama.cpp 编译时添加 -DLLAMA_AVX2=ON 启用 AVX2 指令集。
    • 尝试更高量化等级(如 Q3_K_M)进一步降低内存占用。
  3. 替代方案
    若需更高性能,可考虑:

    • 在 Windows 宿主机直接部署(避免虚拟机开销)。
    • 使用 DeepSeek 官方 API(需网络连接,非本地运行)。
Last Updated: 2025/2/20 11:58:14