Linux部署deepseek

160 阅读2分钟

本文目标

在一台Ubuntu服务器上部署deepseek,并测试token生成速度

机器配置

CPU:Intel(R) Core(TM) i9-14900K GPU:NVIDIA GeForce RTX 5090 内存:64G 硬盘:1T

前置步骤

因为有GPU,所以采用CPU+GPU混合运行的模式,需要先安装 NVIDIA驱动 和 CUDA Toolkit:链接

步骤

1. 安装ollama
curl -fsSL https://ollama.com/install.sh | sh
2. 配置ollama对外服务

配置

#编辑
vi ~/.bashrc
#末尾添加下面两行
export OLLAMA_HOST=0.0.0.0:11434
export OLLAMA_ORIGINS=*

#生效
source ~/.bashrc

#重启
systemctl daemon-reload  
systemctl restart ollama

浏览器访问 IP:11434 ,验证是否配置成功

3.拉取模型
#基础命令
ollama pull deepseek-r1

#进阶1-选择指定模型版本
ollama pull deepseek-r1:70b

#进阶2-后台运行(因为模型都比较大,为了防止拉取过程中ssh工具与服务器断开连接导致拉取终止,所以放到后台执行)
nohup ollama pull deepseek-r1:70b >> 70b.log 2>&1 &
4. 运行
ollama run deepseek-r1:70b

运行之后就可以提问了,也可以按ctrl+D退出提问模式

5.验证
ollama ps

上面的命令可以查看大模型使用GPU和CPU的比例

6.token生成速度测试

使用这个python可以测试大模型的token生成速度 注意修改IP和模型名称

import requests
import time

# ollama 的 API 地址
OLLAMA_API_URL = "http://10.100.95.165:11434/api/generate"

# 请求参数
payload = {
    "model": "deepseek-r1:32b",  # 替换为你的模型名称
    "prompt": "目标检测的具体含义是什么?",  # 替换为你的输入文本
    "stream": False,  # 设置为 False,一次性返回完整结果
    "max_tokens": 100  # 设置生成的最大 token 数量
}

# 打印 model 和 prompt 信息
print(f"使用的模型: {payload['model']}")
print(f"输入的问题: {payload['prompt']}")

# 记录开始时间
start_time = time.time()
print(f"开始时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start_time))}")

# 发送请求
response = requests.post(OLLAMA_API_URL, json=payload)

# 记录结束时间
end_time = time.time()
print(f"结束时间: {time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end_time))}")

# 解析响应
if response.status_code == 200:
    result = response.json()
    # print(result)
    generated_text = result.get("response", "")
    generated_tokens = result.get("eval_count", 0)  # 获取生成的 token 数量
    elapsed_time = end_time - start_time

    # 计算每秒生成的 token 数量
    tokens_per_second = generated_tokens / elapsed_time

    print(f"模型回答: {generated_text}")
    print(f"生成时间: {elapsed_time:.2f}秒")
    print(f"生成 token 数量: {generated_tokens}")
    print(f"每秒生成 token 数量: {tokens_per_second:.2f}")
else:
    print(f"请求失败,状态码: {response.status_code}")
    print(f"错误信息: {response.text}")

性能测试数据
deepseek r1 70b

生成时间: 205.42秒

生成 token 数量: 878

每秒生成 token 数量: 4.27

deepseel r1 32b

生成时间: 12.05秒

生成 token 数量: 722

每秒生成 token 数量: 59.93

结论

RTX 5090适合跑32b模型,70b模型比较吃力