AI运维工程师技术教程之Linux环境下部署Deepseek

引言

DeepSeek(深度求索)是国内优质的开源大模型系列,涵盖代码生成(DeepSeek-Coder)、通用对话(DeepSeek-LLM)等多个场景,支持在 Linux 服务器本地化部署,满足企业级私有化需求。本文以DeepSeek-LLM-7B-Chat(轻量通用对话模型)为例,基于 Ubuntu 22.04 LTS 系统,详细讲解从环境搭建到模型启动的完整流程,同时适配 CentOS 等其他 Linux 发行版。

一、部署前准备:明确核心依赖与服务器要求

在部署前需确认服务器硬件与软件环境,避免因资源不足或依赖缺失导致部署失败。

  1. 硬件要求(关键指标)
    DeepSeek 模型对算力要求较高,不同参数规模模型的最低配置参考:
    模型规格
    显存要求
    CPU 要求
    内存要求
    适用场景
    DeepSeek-7B
    ≥10GB
    8 核及以上(x86_64)
    ≥16GB
    轻量对话、小规模推理
    DeepSeek-13B
    ≥20GB
    16 核及以上
    ≥32GB
    中规模对话、复杂任务推理
    DeepSeek-67B
    ≥60GB
    32 核及以上
    ≥64GB
    企业级大规模推理

注:若服务器无 GPU(仅 CPU 推理),需将模型转为 INT4/INT8 量化版本,且推理速度会显著降低,建议优先使用 NVIDIA GPU(支持 CUDA 11.7+)。

  1. 软件依赖清单

Linux 环境需提前安装以下基础软件,所有操作均以root用户或 sudo 权限执行:

操作系统:Ubuntu 20.04+/CentOS 8+/Debian 11+(本文以 Ubuntu 为例,CentOS 差异处会标注)

包管理器:apt(Ubuntu)/yum(CentOS)

基础工具:git(代码克隆)、python3.10+(推荐 3.10,适配多数 AI 库)、pip(Python 包管理)

GPU 依赖(可选):NVIDIA 驱动(≥515.43.04)、CUDA Toolkit 11.7/12.1、cuDNN 8.5+

二、环境搭建:从基础依赖到 GPU 配置

  1. 更新系统与安装基础工具
    Ubuntu 系统执行:

更新系统软件包

sudo apt update && sudo apt upgrade -y

安装基础工具(git、python3、pip等)

sudo apt install -y git python3 python3-pip python3-venv build-essential libssl-dev libffi-dev

CentOS 系统执行:

安装EPEL源(避免依赖缺失)

sudo dnf install -y epel-release

更新并安装基础工具

sudo dnf update -y && sudo dnf install -y git python3 python3-pip python3-devel gcc gcc-c++

  1. 配置 Python 虚拟环境(推荐)
    为避免 Python 包版本冲突,使用venv创建独立虚拟环境:

创建虚拟环境目录(如~/deepseek-env)

python3 -m venv ~/deepseek-env

激活虚拟环境(Ubuntu/CentOS通用)

source ~/deepseek-env/bin/activate

激活后终端前缀会显示(deepseek-env),表示环境生效

  1. GPU 环境配置(有 GPU 时必做)
    若服务器搭载 NVIDIA GPU,需安装驱动、CUDA 与 cuDNN,确保 PyTorch 能调用 GPU:
    步骤 1:安装 NVIDIA 驱动

查看GPU型号,确认支持的驱动版本

lspci | grep -i nvidia

Ubuntu自动安装推荐驱动(CentOS需手动下载.run文件)

sudo ubuntu-drivers autoinstall

重启服务器使驱动生效

sudo reboot

重启后执行nvidia-smi,若显示 GPU 信息(含 CUDA Version),说明驱动安装成功。

步骤 2:安装 CUDA Toolkit(以 11.8 为例)

下载CUDA 11.8安装脚本(Ubuntu 22.04)

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run

执行安装(仅安装CUDA Toolkit,不重复安装驱动)

sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent --override

配置CUDA环境变量(写入~/.bashrc)

echo 'export PATH=/usr/local/cuda-11.8/bin:PATH′>> /.bashrcecho′exportLDLIBRARYPATH=/usr/local/cuda−11.8/lib64:PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:PATH′>> /.bashrcecho′exportLDLIBRARYPATH=/usr/local/cuda−11.8/lib64:LD_LIBRARY_PATH' >> ~/.bashrc

生效环境变量

source ~/.bashrc

验证CUDA安装:输出CUDA版本即成功

nvcc -V

步骤 3:安装 cuDNN(需注册 NVIDIA 账号)

访问NVIDIA cuDNN 下载页,选择与 CUDA 11.8 匹配的 cuDNN 版本(如 cuDNN 8.9.7 for CUDA 11.x)。

下载cuDNN Library for Linux x86_64(.tar.xz 格式),上传至服务器并解压:

解压cuDNN压缩包

tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11.x.tar.xz

将cuDNN文件复制到CUDA目录

sudo cp cudnn--linux-x86_64/include/cudnn .h /usr/local/cuda-11.8/include/

sudo cp -P cudnn--linux-x86_64/lib/libcudnn /usr/local/cuda-11.8/lib64/

赋予权限

sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

三、模型部署:从获取到启动(两种主流方式)

DeepSeek 模型部署支持Hugging Face Transformers(通用框架)和vLLM(高性能推理框架),前者兼容性强,后者推理速度更快,按需选择。

方式 1:基于 Hugging Face Transformers 部署(入门首选)

步骤 1:安装依赖库

在激活的 Python 虚拟环境中安装所需库:

安装PyTorch(GPU版本,对应CUDA 11.8)

pip3 install torch2.1.0 torchvision0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

安装Transformers、加速库与对话工具

pip3 install transformers4.35.2 accelerate0.24.1 sentencepiece0.1.99 tokenizers0.14.1

若仅 CPU 推理,将 PyTorch 改为 CPU 版本:pip3 install torch==2.1.0 --index-url https://download.pytorch.org/whl/cpu

步骤 2:获取 DeepSeek 模型(两种途径)

DeepSeek 模型开源托管于 Hugging Face,可通过git克隆或直接在代码中自动下载。

途径 1:git 克隆模型(推荐,避免重复下载)

创建模型存储目录

mkdir -p ~/deepseek-models && cd ~/deepseek-models

克隆DeepSeek-LLM-7B-Chat模型(需Hugging Face账号,提前登录)

git lfs install # 启用Git LFS(大文件存储)

git clone https://huggingface.co/deepseek-ai/DeepSeek-LLM-7B-Chat

克隆完成后,模型文件位于~/deepseek-models/DeepSeek-LLM-7B-Chat

注:若提示 "git lfs 未安装",Ubuntu 执行sudo apt install git-lfs,CentOS 执行sudo dnf install git-lfs。

途径 2:代码自动下载(首次运行时触发,需联网)

无需提前克隆,在启动代码中指定模型路径,Transformers 会自动下载至~/.cache/huggingface/hub。

步骤 3:编写启动脚本(对话交互模式)

创建deepseek_chat.py脚本,实现命令行对话功能:

from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig

import torch

1. 加载模型与Tokenizer(模型路径替换为实际路径)

model_path = "~/deepseek-models/DeepSeek-LLM-7B-Chat" # 本地克隆路径

若未克隆,直接用"Hugging Face模型名":model_path = "deepseek-ai/DeepSeek-LLM-7B-Chat"

tokenizer = AutoTokenizer.from_pretrained(

model_path,

trust_remote_code=True,

padding_side="right" # 避免生成时警告

)

model = AutoModelForCausalLM.from_pretrained(

model_path,

trust_remote_code=True,

torch_dtype=torch.float16, # GPU用float16,CPU用float32

device_map="auto" # 自动分配设备(优先GPU)

).eval() # 推理模式,禁用Dropout

2. 配置生成参数(控制输出长度、随机性等)

generation_config = GenerationConfig(

temperature=0.7, # 随机性:0~1,越低越确定

top_p=0.95,

top_k=40,

max_new_tokens=1024, # 最大生成 tokens 数

eos_token_id=tokenizer.eos_token_id,

pad_token_id=tokenizer.pad_token_id

)

3. 命令行对话交互

print("DeepSeek-LLM-7B-Chat 启动成功,输入'quit'退出对话!")

while True:

user_input = input("\n用户:")

if user_input.lower() == "quit":

print("对话结束!")

break

复制代码
# 构建对话模板(遵循DeepSeek格式)
prompt = f"### User: {user_input}\n### Assistant:"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

# 生成响应(禁用梯度计算,提升速度)
with torch.no_grad():
    outputs = model.generate(
        **inputs,
        generation_config=generation_config
    )

# 解码输出(跳过输入部分)
response = tokenizer.decode(outputs[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
print(f"DeepSeek:{response}")

步骤 4:启动模型并测试

确保虚拟环境已激活,执行脚本

python3 deepseek_chat.py

测试对话(示例)

用户:请解释Linux中"sudo"命令的作用

DeepSeek:"sudo"是Linux系统中的一个命令,全称为"superuser do",用于允许普通用户在输入自身密码后,以超级用户(root)的权限执行指定命令...

若能正常输出响应,说明基于 Transformers 的部署成功。

方式 2:基于 vLLM 部署(高性能推理,推荐生产环境)

vLLM 是专为大模型设计的高性能推理框架,支持动态批处理、PagedAttention 等优化,推理速度比 Transformers 快 3~10 倍,适合高并发场景。

步骤 1:安装 vLLM(需匹配 CUDA 版本)

CUDA 11.8版本安装vLLM

pip3 install vllm==0.2.7

若CUDA 12.1,安装对应版本:pip3 install vllm==0.2.7 --extra-index-url https://download.pytorch.org/whl/cu121

步骤 2:启动 vLLM 服务(支持 API 调用)

通过vllm.entrypoints.api_server启动 HTTP 服务,支持多用户并发请求:

启动服务(模型路径替换为实际路径)

python3 -m vllm.entrypoints.api_server

--model ~/deepseek-models/DeepSeek-LLM-7B-Chat

--tensor-parallel-size 1 \ # 显卡数量(单GPU设为1)

--port 8000 \ # 服务端口

--trust-remote-code

--dtype float16 # GPU用float16,CPU用float32

启动成功后,终端会显示:Uvicorn running on http://0.0.0.0:8000(服务监听所有网卡的 8000 端口)。

步骤 3:测试 API 服务(两种方式)

方式 1:curl 命令测试(简单验证)

curl http://localhost:8000/v1/completions

-H "Content-Type: application/json"

-d '{

"model": "DeepSeek-LLM-7B-Chat",

"prompt": "### User: 如何在Linux中查看进程?### Assistant:",

"max_tokens": 512,

"temperature": 0.7

}'

若返回含"choices"的 JSON 结果,说明 API 服务正常。

方式 2:Python 脚本测试(模拟多轮对话)

创建test_vllm_api.py:

import requests

import json

API地址

url = "http://localhost:8000/v1/completions"

headers = {"Content-Type": "application/json"}

请求参数

data = {

"model": "DeepSeek-LLM-7B-Chat",

"prompt": "### User: 请写一个Linux脚本监控CPU使用率,超过80%时报警### Assistant:",

"max_tokens": 1024,

"temperature": 0.6,

"top_p": 0.95

}

发送请求

response = requests.post(url, headers=headers, data=json.dumps(data))

result = response.json()

提取并打印响应

if "choices" in result:

print("DeepSeek响应:", result["choices"][0]["text"].strip())

else:

print("请求失败:", result)

执行脚本:python3 test_vllm_api.py,会输出监控脚本代码,验证服务可用性。

四、部署优化:后台运行与端口开放

  1. 后台运行模型服务(避免终端关闭后停止)
    使用nohup或screen让服务在后台运行,以 vLLM 服务为例:

方式1:nohup后台运行(输出日志到deepseek.log)

nohup python3 -m vllm.entrypoints.api_server

--model ~/deepseek-models/DeepSeek-LLM-7B-Chat

--port 8000

--dtype float16 > deepseek.log 2>&1 &

查看服务是否运行

ps aux | grep vllm.entrypoints.api_server

停止服务(根据PID)

kill -9 <服务PID>

方式2:screen创建会话(支持重新连接)

安装screen(Ubuntu:sudo apt install screen;CentOS:sudo dnf install screen)

screen -S deepseek # 创建名为deepseek的会话

在会话中启动服务(同步骤2)

python3 -m vllm.entrypoints.api_server --model ~/deepseek-models/DeepSeek-LLM-7B-Chat --port 8000

按Ctrl+A+D退出会话(服务后台运行)

重新连接会话:screen -r deepseek

关闭会话:screen -S deepseek -X quit

  1. 开放端口(允许外部访问)
    若需从其他机器访问 Linux 服务器上的 DeepSeek 服务,需开放对应端口(如 8000):
    Ubuntu(ufw 防火墙):

开放8000端口

sudo ufw allow 8000/tcp

查看防火墙状态(确认8000端口已开放)

sudo ufw status

CentOS(firewalld 防火墙):

开放8000端口

sudo firewall-cmd --add-port=8000/tcp --permanent

重启防火墙生效

sudo firewall-cmd --reload

查看开放端口

sudo firewall-cmd --list-ports

五、常见问题排查

相关推荐
cvyoutian1 小时前
解决 PyTorch 大型 wheel 下载慢、超时和反复重下的问题
人工智能·pytorch·python
qq_251616191 小时前
ubuntu nginx文件服务器
linux·服务器·网络
JuiceFS1 小时前
JuiceFS + MinIO:Ariste AI 量化投资高性能存储实践
运维·后端
oliveray1 小时前
解决开放世界目标检测问题——Grounding DINO
人工智能·目标检测·计算机视觉
ejinxian1 小时前
WindFlow - 通过多个AI增强您的自动化工作流程
运维·自动化·ai工作流程
子非鱼9211 小时前
3 传统序列模型——RNN
人工智能·rnn·深度学习
万俟淋曦1 小时前
【论文速递】2025年第33周(Aug-10-16)(Robotics/Embodied AI/LLM)
人工智能·深度学习·ai·机器人·论文·robotics·具身智能
kblj55551 小时前
学习Linux——学习工具——DNS--BIND工具
linux·运维·学习
晚风吹长发1 小时前
初步了解Linux中文件描述符-fd
linux·运维·服务器·c++·开发·文件