简介:这份PDF面向需要在Linux环境下部署DeepSeek的开发者与深度学习爱好者,系统梳理了从环境准备到模型运行的手动部署流程,适合具备一定Linux操作基础、希望独立完成本地部署的中级用户参考。资源包共1个PDF文件,大小约215KB,内容以文字步骤与命令示例为主,便于随时查阅与对照操作。文档围绕系统要求、Python虚拟环境创建、代码库克隆、依赖包安装、配置文件修改以及训练与推理命令展开,并针对依赖冲突、GPU未被识别、内存不足、文件权限等常见问题给出排查思路与解决建议,尤其强调CUDA与cuDNN版本兼容性及虚拟环境隔离的重要性。目前已有794人学习,可帮助读者在部署前理清硬件与软件门槛,减少反复试错的时间成本,快速搭建可用的DeepSeek运行环境。
1. 为什么我建议你手动部署 DeepSeek 而不是一键脚本
上周有个做 NLP 的朋友找我,说他在 Ubuntu 上跑 DeepSeek 的推理服务,用了一键安装脚本,结果训练到一半显存爆了,日志里全是 CUDA out of memory,重启之后连 Python 环境都乱了。我问他装了什么版本、CUDA 怎么配的,他一问三不知。这不是个例——很多开发者拿到一个 AI 工具,第一反应是找一键脚本,省事是省事,但出了问题连排查的入口都没有。
这份《DeepSeek 在 Linux 系统下的手动部署步骤与注意事项》就是来解决这个问题的。它不讲花哨的自动化,而是把环境准备、虚拟环境隔离、依赖安装、GPU 检测、配置修改、训练与推理运行这整条链路拆开,让你每一步都知道自己在干什么。适合谁?适合那些需要在 Linux 服务器上稳定跑 DeepSeek 的开发者,尤其是手里有 NVIDIA 显卡、想用 GPU 加速但被 CUDA 版本和依赖冲突折磨过的人。手动部署不是自找麻烦,而是给自己留一条能回滚、能定位、能优化的路。
2. 环境准备:从系统要求到 CUDA 环境变量
2.1 系统要求与硬件底线
在动手之前,先确认你的机器能不能跑。这份文档给出的底线是 Ubuntu 20.04 LTS 或更高版本,其他基于 Debian 的发行版也可以,但 Ubuntu 的兼容性最好。CPU 至少 4 核,并且要支持 AVX 指令集——这一点很多人忽略,结果装完 TensorFlow 一跑就报 Illegal instruction。你可以用下面这条命令确认:
grep -o 'avx[^ ]*' /proc/cpuinfo | sort -u如果输出里有 avx、avx2 之类的字样,说明 CPU 支持。内存至少 8GB,但我的经验是 16GB 起步,因为 DeepSeek 在加载模型和预处理数据时内存占用会飙升,8GB 很容易触发 OOM Killer。存储至少 20GB 可用空间,如果你要下载预训练权重和数据集,建议预留 50GB 以上。显卡方面,支持 CUDA 的 NVIDIA 显卡是可选但强烈推荐的,没有 GPU 也能跑,但训练速度会慢到让你怀疑人生。
2.2 安装 Python、Git 与虚拟环境工具
系统要求确认之后,先把基础软件装好。Python 建议 3.8 或更高版本,Ubuntu 20.04 自带的 Python 3.8 就够用。Git 用来克隆代码库,venv 用来做环境隔离。三条命令一次搞定:
sudo apt update sudo apt install python3 python3-pip git python3-venv -y这里有个细节:python3-venv在部分 Ubuntu 最小化安装的镜像里是没有的,如果你跳过这一步,后面创建虚拟环境时会报ensurepip is not available。装完之后用python3 --version和git --version确认一下版本,避免出现 Python 3.6 这种老版本还在默认路径里的情况。
2.3 CUDA 与 cuDNN 的版本匹配逻辑
如果你有 NVIDIA 显卡,CUDA 和 cuDNN 的安装是最容易翻车的地方。文档里没有指定具体版本号,但根据 TensorFlow 的兼容性矩阵,CUDA 11.2 到 11.8 之间是比较稳妥的选择,cuDNN 对应 8.x 版本。安装方式有两种:用 NVIDIA 官方 runfile 安装,或者用 apt 仓库安装。我一般推荐 apt 方式,因为卸载和升级更干净:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt update sudo apt install cuda-toolkit-11-8 -y装完 CUDA 之后,必须把路径写进环境变量,否则 TensorFlow 找不到 libcudart.so。在~/.bashrc末尾追加:
export PATH=/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH然后source ~/.bashrc生效。cuDNN 的安装稍微麻烦一点,需要从 NVIDIA 开发者页面下载对应版本的压缩包,解压后把头文件和库文件复制到 CUDA 目录下。这一步的坑在于:cuDNN 的版本必须和 CUDA 严格对应,比如 CUDA 11.8 配 cuDNN 8.6,配错了会在运行时报libcudnn.so.8: cannot open shared object file。
注意:如果你不确定显卡驱动是否支持所选 CUDA 版本,先用
nvidia-smi看一下 Driver Version,再对照 CUDA 的 Release Notes 确认兼容性。驱动版本太低的话,先升级驱动再装 CUDA。
3. 虚拟环境与代码库:隔离依赖,克隆项目
3.1 创建并激活 Python 虚拟环境
依赖冲突是 DeepSeek 部署中最常见的问题之一。系统 Python 里可能已经装了各种包,直接pip install会把环境搞得一团糟。所以第二步就是创建独立的虚拟环境:
python3 -m venv deepseek_env source deepseek_env/bin/activate第一行在当前目录下创建了一个名为deepseek_env的文件夹,里面包含独立的 Python 解释器和 pip。第二行激活这个环境,激活后终端提示符前面会出现(deepseek_env)字样。这里有个血泪经验:虚拟环境的路径不要放在/tmp或者有中文的目录下,否则某些包在编译时会因为路径编码问题失败。另外,如果你用的是 conda,也可以用conda create -n deepseek_env python=3.8代替,逻辑是一样的。
3.2 克隆代码库与目录结构确认
虚拟环境激活之后,从 GitHub 克隆 DeepSeek 的代码库:
git clone https://github.com/deepseek-ai/deepseek.git cd deepseek克隆完成后,用ls -la看一下目录结构。通常会有requirements.txt、train.py、infer.py以及一个configs或config目录。如果你看到的文件结构和文档描述不一致,可能是分支不对,用git branch -a查看所有分支,切换到稳定版分支再继续。这一步的坑在于:有些代码库的默认分支是开发版,依赖文件可能不完整,切换到 release 分支能省掉很多麻烦。
3.3 安装依赖包与 GPU 版 TensorFlow
进入项目目录后,先安装基础依赖:
pip install -r requirements.txt这个命令会读取requirements.txt里的包列表并逐个安装。如果遇到某个包编译失败,常见原因是缺少系统级的开发库,比如libhdf5-dev或者python3-dev。可以先sudo apt install python3-dev libhdf5-dev -y再重试。如果你要用 GPU 加速,还需要额外安装 GPU 版 TensorFlow:
pip install tensorflow-gpu装完之后,用一段 Python 代码验证 GPU 是否被识别:
import tensorflow as tf print(tf.config.list_physical_devices('GPU'))如果输出是一个包含 GPU 设备的列表,比如[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')],说明 GPU 支持已启用。如果输出是空列表[],说明 TensorFlow 没找到 GPU,需要回头检查 CUDA 和 cuDNN 的路径是否正确、版本是否匹配。
提示:
tensorflow-gpu这个包名在 TensorFlow 2.11 之后已经合并到主包tensorflow里了。如果你装的是较新版本,直接pip install tensorflow就会自动带 GPU 支持,不需要单独装tensorflow-gpu。
4. 配置与运行:从 config.yaml 到 train.py
4.1 修改配置文件的关键参数
DeepSeek 通常包含一个config.yaml或类似的配置文件,用来设置模型参数、数据路径、批次大小等。用文本编辑器打开它,重点看几个字段:
model: name: deepseek-base hidden_size: 768 num_layers: 12 training: batch_size: 32 learning_rate: 0.0001 epochs: 10 data: train_path: /data/train.jsonl valid_path: /data/valid.jsonlbatch_size是最需要根据显存调整的参数。如果你用的是 8GB 显存的显卡,batch_size设成 32 很可能直接 OOM,建议从 8 或 16 开始试。learning_rate和epochs根据你的数据集规模来定,数据集小就调小学习率、减少轮次,避免过拟合。train_path和valid_path必须指向实际存在的数据文件,路径写错的话程序会在加载数据时报FileNotFoundError。
4.2 数据准备与路径校验
配置文件改好之后,确认数据文件已经放在指定路径下。数据格式通常是 JSONL,每行一个 JSON 对象,包含输入和输出字段。你可以用下面这条命令快速检查文件行数和格式:
wc -l /data/train.jsonl head -n 1 /data/train.jsonl | python3 -m json.tool第一条命令统计行数,第二条命令把第一行格式化输出,确认 JSON 结构是否正确。如果json.tool报解析错误,说明文件里有非法 JSON,需要先清洗数据。这一步的坑在于:有些数据集用 UTF-8 BOM 编码,Python 读取时会在第一个键名前面多一个\ufeff,导致 KeyError。用sed -i '1s/^\xEF\xBB\xBF//' /data/train.jsonl去掉 BOM 头即可。
4.3 启动训练与推理任务
一切就绪后,运行训练脚本:
python train.py --config config.yaml如果你的代码库支持命令行参数覆盖配置文件,可以用--batch_size 16这种方式临时调整参数,不用改文件。训练过程中,终端会输出 loss 和 accuracy 等指标,同时日志会写入logs/目录。如果训练中途中断,检查日志最后几行,通常是 OOM 或者数据加载错误。
推理任务用另一个脚本:
python infer.py --model_path ./checkpoints/best_model --input "你的输入文本"--model_path指向训练好的模型检查点目录,--input是你要推理的文本。推理时如果报CUDA out of memory,同样降低batch_size或者用--device cpu强制走 CPU。CPU 推理速度慢,但至少能跑通,适合调试阶段。
5. 避坑指南:依赖冲突、GPU 未识别与内存不足
5.1 依赖包冲突:现象、原因与解决
现象:pip install -r requirements.txt执行到一半报错,提示某个包版本不兼容,比如numpy version 1.24.0 is incompatible with tensorflow 2.10.0。
原因:requirements.txt里的包版本范围可能比较宽松,pip 在解析依赖时选了最新版,但最新版和 TensorFlow 要求的版本冲突。或者系统 Python 里已经装了旧版本的包,虚拟环境没有完全隔离。
解决:先确认虚拟环境已激活,然后pip list查看已安装的包。如果冲突包不多,用pip install numpy==1.23.5手动指定版本。如果冲突严重,删掉虚拟环境重建:deactivate && rm -rf deepseek_env && python3 -m venv deepseek_env,然后重新安装。我一般会在requirements.txt里把关键包的版本用==锁死,避免每次安装都抽奖。
5.2 GPU 未检测到:从驱动到环境变量的排查链
现象:tf.config.list_physical_devices('GPU')返回空列表,或者训练时日志显示No GPU found, using CPU。
原因:可能是 NVIDIA 驱动没装、CUDA 版本和 TensorFlow 不匹配、LD_LIBRARY_PATH没包含 CUDA 的 lib64 目录,或者 cuDNN 版本不对。
解决:按顺序排查。第一步nvidia-smi确认驱动正常,能看到显卡型号和驱动版本。第二步nvcc --version确认 CUDA 编译器可用。第三步echo $LD_LIBRARY_PATH确认包含/usr/local/cuda/lib64。第四步检查 TensorFlow 版本和 CUDA 版本的兼容性,比如 TensorFlow 2.10 需要 CUDA 11.2 和 cuDNN 8.1。如果版本对不上,要么升级 TensorFlow,要么降级 CUDA。
5.3 内存不足:batch size 与 swap 的取舍
现象:训练过程中程序被 killed,dmesg | tail显示Out of memory: Killed process。
原因:系统物理内存不够,或者 GPU 显存不够。前者是 RAM 问题,后者是 VRAM 问题,报错信息不同。
解决:如果是 RAM 不足,先降低batch_size,再考虑减少数据加载的并发线程数(num_workers)。如果还是不够,可以临时增加 swap 空间:sudo fallocate -l 8G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile。但 swap 只是缓兵之计,长期方案还是加内存。如果是 VRAM 不足,除了降batch_size,还可以开启混合精度训练(mixed_precision),能省不少显存。
5.4 文件权限问题:从项目目录到数据路径
现象:运行train.py时报PermissionError: [Errno 13] Permission denied,或者无法写入日志文件。
原因:项目目录或数据文件的属主不是当前用户,或者权限位设置得太严格。比如用sudo git clone克隆的代码库,普通用户没有写权限。
解决:用ls -la查看文件和目录的属主与权限。如果是属主问题,用sudo chown -R $USER:$USER /path/to/deepseek把所有权改回当前用户。如果是权限位问题,用chmod -R u+rwX给当前用户加上读写和执行权限。数据文件如果放在/data这类系统目录下,也要确保当前用户有读取权限。
5.5 训练中断后的恢复策略
现象:训练跑了几个小时,突然因为网络波动或者误触 Ctrl+C 中断,重新运行train.py又从第一个 epoch 开始。
原因:默认配置没有开启检查点自动保存,或者保存间隔太长。
解决:在config.yaml里找到checkpoint相关配置,把save_steps设小一点,比如每 500 步保存一次。同时开启resume_from_checkpoint选项,指向最近一次保存的检查点目录。这样即使中断,重新运行时会从最近的检查点继续,不用从头再来。我一般还会把logs/目录挂载到单独的磁盘分区,避免日志写满根分区导致系统卡死。
6. 进阶技巧:用 screen 保持训练会话与显存监控
手动部署 DeepSeek 的最后一步,是让训练任务在 SSH 断开后还能继续跑。很多人用nohup,但nohup的输出重定向和会话管理不如screen灵活。我的习惯是每个训练任务开一个screen会话:
screen -S deepseek_train source deepseek_env/bin/activate python train.py --config config.yaml按Ctrl+A再按D可以 detach 会话,训练任务在后台继续。需要回来看进度时,用screen -r deepseek_train重新 attach。如果忘了会话名,screen -ls列出所有会话。这个习惯让我在多次服务器维护和网络抖动中保住了训练进度,比nohup加&靠谱得多。
显存监控方面,nvidia-smi是最常用的工具,但它默认只显示瞬时状态。我一般用watch -n 1 nvidia-smi每秒刷新一次,观察显存占用的变化趋势。如果显存占用持续上涨不回落,很可能是数据加载器有内存泄漏,需要检查DataLoader的num_workers和pin_memory设置。另一个技巧是用nvidia-smi --query-gpu=memory.used,memory.total --format=csv输出 CSV 格式,方便重定向到文件做后续分析。
还有一个容易被忽略的点:训练结束后,Python 进程可能不会立即释放显存。如果你要连续跑多个实验,在脚本末尾加tf.keras.backend.clear_session()和gc.collect(),能减少显存碎片。如果显存还是被占着,用fuser -v /dev/nvidia*找到占用进程,确认无用后 kill 掉。
从那以后我每次部署 DeepSeek 都强制走一遍完整的手动流程,从nvidia-smi确认驱动,到screen里跑训练,再到watch监控显存,一步都不省。这套流程看起来繁琐,但出问题时你能精确知道是哪一步的哪个参数导致的,而不是对着一键脚本的黑匣子干瞪眼。希望帮到你。
本文还有配套的精品资源,点击获取