
简介这份PDF面向需要在Linux环境下部署DeepSeek的开发者与深度学习爱好者系统梳理了从环境准备到模型运行的手动部署流程适合具备一定Linux与Python基础、希望独立完成本地部署的中级用户参考。资源包共1个文件为215KB的PDF文档内容紧凑、结构清晰便于按章节查阅。文档围绕系统要求、Python虚拟环境创建、代码库克隆、依赖包安装、配置文件修改以及训练与推理命令等环节展开并针对依赖冲突、GPU未被识别、内存不足、文件权限等常见问题给出排查思路与解决建议。目前已有794人学习下载读者可借此快速掌握DeepSeek在Linux下的完整部署路径减少环境配置中的试错成本尤其适合需要GPU加速与稳定运行环境的深度学习任务场景。1. 从一台裸机到能跑推理这份 PDF 到底值不值得照着做上周有个做算法的朋友在群里吐槽说他照着某份部署文档在 Ubuntu 上折腾了一整天最后卡在pip install -r requirements.txt报了一屏的版本冲突气得直接重装了系统。我看了一眼他发来的文档截图发现里面把虚拟环境创建和依赖安装的顺序写反了——先装依赖再建 venv这不翻车才怪。这份《DeepSeek 在 Linux 系统下的手动部署步骤与注意事项.pdf》我仔细拆了一遍它的价值不在于教你“DeepSeek 是什么”而在于把 Linux 下从零部署一个深度学习项目的完整链路——系统依赖、Python 虚拟环境、CUDA 环境变量、依赖包管理、配置文件修改、训练与推理入口——串成了一条可复现的路径。适合谁看手里有 Linux 机器、想自己搭一套推理或微调环境、又不想被各种“一键脚本”黑匣子坑到的开发者。如果你只是想在网页上聊两句那这份文档对你没用但如果你需要把模型跑在自己的显卡上、控制数据不出本地那接下来的内容值得你花二十分钟看完。2. 环境准备别急着敲命令先把这四层依赖理清楚2.1 系统层Ubuntu 20.04 是底线不是随便选的文档里写的是 Ubuntu 20.04 LTS 或更高版本这个“或更高”其实有讲究。20.04 自带的是 Python 3.8而 DeepSeek 依赖的不少包在 3.8 上兼容性最好。如果你用 22.04默认 Python 是 3.10某些老版本的 CUDA 绑定库可能会在编译时找不到对应的 wheel。我一般会先确认三件事lsb_release -a看发行版版本uname -r看内核版本lscpu | grep avx确认 CPU 支持 AVX 指令集。最后这条容易被忽略——有些云厂商的入门级实例用的是阉割版 CPU不支持 AVX 的话TensorFlow 跑起来会直接抛Illegal instruction连报错都来不及看就崩了。内存方面文档建议 16GB 起步这是保守说法。如果你打算做 7B 级别模型的推理纯 CPU 模式下 16GB 勉强能跑但很吃力要是做微调32GB 是及格线。存储空间 20GB 只够装环境和代码模型权重文件动辄十几个 GB建议单独挂一块数据盘别把/home撑爆了。2.2 Python 层venv 和 conda 怎么选什么时候不该用 venv文档推荐用 venv这没错但有个前提你的系统 Python 版本得和项目要求匹配。如果系统自带的是 Python 3.10而requirements.txt里某个包只支持到 3.9那 venv 建出来的环境照样装不上。这时候 conda 的优势就出来了——它可以独立拉一个指定版本的 Python 解释器不依赖系统自带的。我一般的做法是先看requirements.txt里有没有tensorflow、torch这类对 Python 版本敏感的包如果有且系统 Python 版本不匹配直接上 conda如果都是纯 Python 包或者版本兼容venv 足够轻量。# 查看系统 Python 版本 python3 --version # 如果版本不匹配用 conda 创建指定版本环境 conda create -n deepseek_env python3.8 -y conda activate deepseek_env # 如果版本匹配venv 更干净 python3 -m venv deepseek_env source deepseek_env/bin/activate激活之后终端提示符前面会出现(deepseek_env)这时候你敲的pip和python都是虚拟环境里的不会污染系统环境。有个血泪经验不要在激活 venv 之前用sudo pip install装任何东西否则系统 Python 的 site-packages 会被污染后面 venv 里再装同名包会优先读到系统的那份版本冲突查起来非常痛苦。2.3 GPU 层CUDA 和 cuDNN 的版本对齐是门玄学文档里把 CUDA 和 cuDNN 的安装放在“可选”里但如果你有 NVIDIA 显卡这一步基本绕不开。关键不是装不装而是版本对齐。TensorFlow 2.x 对 CUDA 版本有硬性要求比如 TF 2.10 要求 CUDA 11.2 cuDNN 8.1你装个 CUDA 12 上去tf.config.list_physical_devices(GPU)返回空列表连个像样的报错都不给。# 查看显卡驱动支持的 CUDA 版本上限 nvidia-smi # 输出右上角会显示 CUDA Version: 12.2 之类的字样 # 这表示驱动最高支持到 12.2你装的 CUDA Toolkit 不能超过这个版本 # 安装 CUDA Toolkit以 11.8 为例 wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run sudo sh cuda_11.8.0_520.61.05_linux.run # 安装 cuDNN需要 NVIDIA 开发者账号下载对应版本 # 解压后复制到 CUDA 目录 sudo cp cudnn-*-linux-x64-v8.x.x.x/cuda/include/cudnn*.h /usr/local/cuda/include sudo cp cudnn-*-linux-x64-v8.x.x.x/cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*环境变量这块文档给了export PATH和export LD_LIBRARY_PATH但只写在当前终端里关掉就没了。我一般会写进~/.bashrc或者虚拟环境的激活脚本里这样每次激活环境自动生效。注意LD_LIBRARY_PATH里如果有多条路径用冒号隔开别用逗号否则动态链接器找不到库。2.4 依赖层requirements.txt 不是圣旨该改就得改pip install -r requirements.txt这条命令看起来简单但实际执行时大概率会遇到版本冲突。文档在注意事项里提了“使用 --upgrade 选项”和“创建新虚拟环境”但没展开说怎么定位冲突源。我的习惯是先把requirements.txt里的包按类型分组框架类tensorflow、torch、工具类numpy、pandas、项目特有类。先装框架类再装工具类最后装项目特有的。如果中间报错pip会告诉你哪个包和哪个包冲突这时候不要急着--upgrade先看是不是某个包的版本范围写死了。# 分步安装便于定位冲突 pip install tensorflow2.10.0 pip install numpy pandas scipy pip install -r requirements.txt --no-deps # 只装项目特有包不重复装依赖 # 如果报错用 pip check 查看冲突详情 pip check--no-deps这个参数很实用它让 pip 只装requirements.txt里列出的包本身不去管它们的依赖关系。前提是你已经手动把主要依赖装好了这样能避免 pip 反复解析依赖树导致的版本回退。3. 从克隆到跑通代码库结构、配置修改与两个入口脚本3.1 克隆代码库后先别急着装依赖花五分钟看目录git clone之后进入项目目录先ls -la看一眼结构。典型的深度学习项目会有这几个目录src/或models/放模型定义configs/或根目录放配置文件data/放数据占位scripts/放训练和推理脚本。文档里提到的train.py和infer.py一般在根目录或者scripts/下。如果根目录没有用find . -name train.py找一下。git clone https://github.com/deepseek-ai/deepseek.git cd deepseek ls -la find . -maxdepth 2 -name *.py | head -20 find . -maxdepth 2 -name *.yaml -o -name *.yml -o -name *.json这一步的目的是确认配置文件的位置和格式。文档说“通常包含一个配置文件如 config.yaml”但实际项目里可能是configs/base.yaml加configs/model/deepseek.yaml这种分层结构。找到之后用cat看一眼内容重点关注data_path、model_name_or_path、batch_size、max_length这几个字段。3.2 配置文件修改路径、批次大小和精度设置配置文件里最容易出问题的是路径。相对路径是相对于你执行python train.py时的当前工作目录不是相对于脚本所在目录。如果你在项目根目录执行data/train.json没问题如果你在scripts/目录下执行就得写../data/train.json。我一般会把所有路径改成绝对路径省得后面来回切换目录时搞混。批次大小batch size的设置和显存直接挂钩。文档在“内存不足”那节提了“减少批量大小”但没说具体怎么估。一个粗略的公式模型参数量 × 4 字节fp32× 3前向激活 反向梯度 优化器状态≈ 显存占用。比如 1B 参数的模型fp32 训练大概需要 12GB 显存。如果你用 fp16 混合精度可以砍掉将近一半。配置文件里通常有fp16: true/false或者precision: fp16这样的字段打开之前先确认你的显卡支持——图灵架构之后的 NVIDIA 显卡都支持Pascal 架构如 GTX 1080不支持 fp16 加速开了反而更慢。# config.yaml 示例片段 data: train_path: /absolute/path/to/train.json valid_path: /absolute/path/to/valid.json max_length: 512 model: name_or_path: /absolute/path/to/pretrained_weights dropout: 0.1 training: batch_size: 4 # 根据显存调整8GB 显存建议 2-4 learning_rate: 2e-5 fp16: true # 图灵架构及以上设为 true gradient_accumulation_steps: 4 # 显存不够时用梯度累积模拟大 batchgradient_accumulation_steps这个参数值得单独说。它让模型在多次前向传播后才更新一次参数等效于把 batch size 放大了 N 倍但显存占用不变。代价是训练速度会慢一些因为每次更新之间的计算不能并行。如果你显存不够又不想牺牲 batch size这是个折中方案。3.3 训练与推理入口参数覆盖和日志重定向python train.py和python infer.py是最基本的用法但实际跑的时候通常需要传参覆盖配置文件里的值。常见的做法是用argparse或者hydra这类配置管理库。你可以先python train.py --help看看支持哪些参数。# 查看可用参数 python train.py --help # 覆盖配置文件中的 batch_size 和 learning_rate python train.py --config config.yaml --batch_size 2 --learning_rate 1e-5 # 推理时指定模型路径和输入文件 python infer.py --model_path ./output/checkpoint-1000 --input_file ./data/test.json # 把日志同时输出到文件和终端 python train.py 21 | tee train_$(date %Y%m%d_%H%M%S).log21 | tee这个组合是运维老手的基本功。21把标准错误重定向到标准输出tee同时写到文件和屏幕。训练跑起来之后你不可能一直盯着终端出了错回头翻日志的时候有完整记录和只有屏幕滚动是两回事。日志文件名带上时间戳避免多次运行覆盖。推理脚本通常比训练脚本简单但要注意infer.py可能默认加载配置文件里指定的模型路径而不是你--model_path传的那个。如果发现推理结果和预期不符先确认模型加载路径是否正确。可以在脚本里加一行print(fLoading model from {model_path})来验证。4. 避坑排查部署 DeepSeek 时最容易翻车的五个地方4.1 现象pip install卡在Building wheel for tokenizers不动原因tokenizers这个包依赖 Rust 编译器pip 默认从源码编译而你的系统没装 Rust 或者版本太老。解决要么装 Rustcurl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh要么直接装预编译的 wheel——pip install tokenizers --only-binary :all:。后者更快但前提是有对应 Python 版本和平台的 wheel 包。4.2 现象tf.config.list_physical_devices(GPU)返回空列表原因三种可能——CUDA 版本和 TensorFlow 不匹配、LD_LIBRARY_PATH没包含 CUDA 的lib64目录、或者 cuDNN 没装对版本。解决先nvidia-smi确认驱动正常再nvcc --version确认 CUDA Toolkit 版本然后查 TensorFlow 官方文档的版本对应表。如果都对上了还是不行在 Python 里执行import tensorflow as tf; tf.test.is_built_with_cuda()返回False说明你装的 TensorFlow 是 CPU 版本需要卸载重装 GPU 版本。4.3 现象训练到一半报CUDA out of memory但nvidia-smi显示显存没满原因PyTorch 或 TensorFlow 的显存分配器会预留缓存nvidia-smi看到的是预留后的占用不是实际使用量。真正的 OOM 可能发生在某个中间层激活值膨胀的时候。解决减小batch_size或者开启梯度检查点gradient_checkpointing: true用计算时间换显存空间。另外检查是不是max_length设太大了512 和 1024 的显存占用差一倍。4.4 现象python train.py报FileNotFoundError: config.yaml原因当前工作目录不对。train.py里写的是相对路径config.yaml但你在别的目录下执行了python /path/to/train.py。解决要么cd到项目根目录再执行要么在命令里指定绝对路径python /path/to/train.py --config /path/to/config.yaml。我一般会在脚本开头加一行os.chdir(os.path.dirname(os.path.abspath(__file__)))强制把工作目录切到脚本所在目录一劳永逸。4.5 现象推理结果全是乱码或者重复 token原因模型权重没加载对或者 tokenizer 的vocab文件和模型不匹配。解决检查model_name_or_path指向的目录里是否有config.json、pytorch_model.bin或tf_model.h5、tokenizer.json或vocab.txt。如果是从 Hugging Face 下载的模型确认下载完整——有时候网络中断会导致文件不完整但没报错。用ls -lh看文件大小和官方页面标注的对比一下。5. 进阶技巧用 systemd 托管服务与显存监控脚本部署跑通只是第一步真正在生产环境用起来你得让服务在后台稳定运行还得能随时看到显存和 GPU 利用率。我一般会写一个简单的 systemd unit 文件来托管推理服务再用一个 Python 脚本定时采集显存数据。# /etc/systemd/system/deepseek-infer.service [Unit] DescriptionDeepSeek Inference Service Afternetwork.target [Service] Typesimple Useryour_username WorkingDirectory/home/your_username/deepseek EnvironmentPATH/home/your_username/deepseek_env/bin:/usr/local/cuda/bin:/usr/bin EnvironmentLD_LIBRARY_PATH/usr/local/cuda/lib64 ExecStart/home/your_username/deepseek_env/bin/python infer.py --model_path ./output/checkpoint-1000 Restarton-failure RestartSec10 [Install] WantedBymulti-user.target写完systemctl daemon-reload然后systemctl enable --now deepseek-infer服务就会开机自启挂了自动重启。Environment那两行是关键systemd 不会自动加载你的~/.bashrc所以 CUDA 路径和虚拟环境路径必须显式写进去。显存监控脚本更简单用pynvml库读 GPU 信息每 30 秒写一条日志import pynvml import time from datetime import datetime pynvml.nvmlInit() handle pynvml.nvmlDeviceGetHandleByIndex(0) while True: info pynvml.nvmlDeviceGetMemoryInfo(handle) util pynvml.nvmlDeviceGetUtilizationRates(handle) ts datetime.now().strftime(%Y-%m-%d %H:%M:%S) print(f{ts} | mem: {info.used/1024**2:.0f}MB / {info.total/1024**2:.0f}MB | gpu: {util.gpu}%) time.sleep(30)这个脚本跑起来之后你可以用python monitor.py gpu.log 丢到后台回头tail -f gpu.log就能看到显存变化曲线。如果发现显存持续增长不释放大概率是推理循环里没有torch.no_grad()或者 TensorFlow 的tf.function没加reduce_retracingTrue导致计算图越积越多。从那以后我每次部署新环境都会先把nvidia-smi、nvcc --version、python -c import tensorflow as tf; print(tf.__version__)这三条命令跑一遍确认版本对齐了再往下走。希望帮到你。本文还有配套的精品资源点击获取