Linux基础:为什么炼丹用Linux#

你刚拿到一台深度学习服务器,装好了系统(或者商家预装了),打开终端后看见一个黑乎乎的界面——然后呢?

在开始配置驱动、安装CUDA之前,先回答一个根本问题:为什么整个深度学习生态都建在Linux上?

为什么是Linux#

三大桌面系统的深度学习支持对比#

维度

Linux (Debian/Ubuntu)

Windows

macOS

驱动支持

官方驱动,内核级集成

依赖系统更新,时有兼容问题

Apple Silicon MPS 表现不错

GPU加速

NVIDIA CUDA 完整生态

CUDA 支持,Docker 透传麻烦

MPS 后端可用,性能可观

包管理

apt一键装全家桶

手动下载安装包

brew,但生态不如Linux

无头运行

不需要图形界面,SSH就能管

需要远程桌面,带宽消耗大

可以但别扭

生产环境

95%以上服务器用Linux

极少用于生产

几乎不用

适合场景

训练+部署全链路

入门学习

开发调试+轻量训练

Linux在深度学习领域的统治地位不是偶然的。NVIDIA的CUDA生态在Linux上最成熟,Docker容器化部署在Linux上是原生体验,大多数深度学习框架的CI/CD只针对Linux和macOS做测试。简单说:你用Linux,遇到问题Google一下就有答案;你不用Linux,遇到问题可能连Google都救不了你。

选择哪个发行版#

深度学习领域最常见的两个选择是 DebianUbuntu。两者都是Debian系,用同一个包管理器(apt),命令完全兼容。

特性

Debian

Ubuntu

稳定性

极其稳定,包版本较旧

较新,但可能不稳定

CUDA支持

需要手动添加non-free源

官方APT源直接支持

社区资源

深度学习相关内容较少

教程最多,遇到问题好搜

推荐场景

生产服务器

开发/学习用机器

推荐选择

如果你拿不准,选 Ubuntu LTS(如22.04或24.04)。这是深度学习领域事实上的标准系统,NVIDIA的文档和教程都以它为例。等你熟悉了Linux再换Debian不迟。

包管理基础#

Debian系用 apt 管理软件包。以下命令能覆盖90%的日常需求:

# 更新软件源(换源后或首次使用必须执行)
sudo apt update

# 升级所有已安装的包
sudo apt upgrade

# 安装软件(以安装Python为例)
sudo apt install python3 python3-pip

# 卸载软件
sudo apt remove python3

# 搜索软件
apt search nvidia-driver

# 查看已安装的包
apt list --installed | grep nvidia

为什么要 sudo?

普通用户没有权限安装系统级软件。sudo 让你临时以root身份执行命令(用户和权限会详细讲用户和权限)。首次使用 sudo 时需要输入当前用户的密码——注意:终端输入密码时不会显示任何字符(不回显)。 这是正常行为,输完按回车就行。

一个常见的陷阱:不要用 sudo pip install。这会把Python包装到系统目录,和apt管理的包冲突。正确的做法是用虚拟环境隔离项目依赖。

uv:现代Python包管理#

传统上Python用 pip 装包、venv 管环境、pip-tools 管依赖锁定——三个工具各管一事。uv 是一个用Rust写的Python包管理器,把这套东西全包了,而且快了一个数量级:

# 安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 创建虚拟环境并激活
uv venv
source .venv/bin/activate

# 安装包(自动创建虚拟环境,无需手动 venv + activate)
uv pip install torch torchvision

# 从 requirements.txt 安装
uv pip install -r requirements.txt

# 锁定依赖版本(生成 uv.lock)
uv pip compile requirements.txt -o requirements.txt.lock

# 根据 lock 文件安装(保证团队环境一致)
uv pip sync requirements.txt.lock
pip + venv vs uv#

操作

pip + venv

uv

创建环境

python3 -m venv .venv && source .venv/bin/activate

uv venv(自动激活)

安装依赖

pip install -r requirements.txt

uv pip install -r requirements.txt(快10-100倍)

依赖解析

无内置,需 pip-tools

内置 uv pip compile

Python版本管理

手动安装不同版本

uv python install 3.12

底层语言

Python

Rust(无GIL,全局解释器锁问题)

最重要的优势是速度确定性uv pip compile 会解析出完整的依赖树并锁定版本,你和队友拿到同一个 lock 文件安装出来的环境完全一致,不会出现"我机器上能跑你机器上报错"的情况。

uv 和 conda 的关系

uv 不管理非Python包(如CUDA驱动、系统库)。如果你需要 conda 那种跨语言包管理(Python + C++库 + 系统工具),可以继续用 conda 或 mamba。但纯Python依赖管理,uv 是更好的选择。

系统管理基础#

systemd:管理服务#

深度学习服务器上,很多组件(SSH、Docker、监控)都是作为系统服务运行的。systemd是管理这些服务的标准工具:

# 查看服务状态
systemctl status sshd

# 启动/停止/重启服务
sudo systemctl start sshd
sudo systemctl stop sshd
sudo systemctl restart sshd

# 设置开机自启
sudo systemctl enable sshd

用户和权限#

# 创建新用户
sudo adduser alice

# 给用户sudo权限
sudo usermod -aG sudo alice

# 切换用户
su - alice

# 修改文件/目录所有者
sudo chown alice:alice /data/datasets

# 修改权限(r=4, w=2, x=1)
chmod 755 script.sh    # 所有者可读写执行,其他人可读执行
chmod 600 id_rsa       # 私钥文件必须600权限,否则SSH会报错

磁盘和存储#

训练数据集动辄几十GB,了解磁盘使用情况是常备技能:

# 查看磁盘分区和使用情况
df -h

# 查看当前目录下各子目录的大小
du -sh *

# 查看当前目录总大小
du -sh .

# 挂载新硬盘
sudo mount /dev/sdb1 /mnt/data

# 开机自动挂载(编辑 /etc/fstab)
# UUID=xxxx-xxxx  /mnt/data  ext4  defaults  0  2

进程管理#

训练一个模型通常要跑几小时甚至几天,掌握进程管理能帮你避免"训练跑了一半终端关了"的惨案:

# 查看所有进程
ps aux

# 按CPU或内存排序
ps aux --sort=-%cpu
ps aux --sort=-%mem

# 实时监控(类似任务管理器)
htop

# 终止进程
kill -9 PID

# 让进程在退出终端后继续运行
nohup python train.py > train.log 2>&1 &

nohup 和 tmux 的选择

nohup 是最简单的后台运行方式,但管理多个进程不方便。生产环境建议用 tmux(tmux:终端"续命"神器会详细介绍),它让你能创建多个终端会话,随时断开和重新连接。

SSH:远程连接服务器#

深度学习服务器很少在你手边——可能在机房,可能在云上。SSH是你和服务器之间的桥梁。本节讲基础配置,把远程服务"拉"到本地来会深入到端口转发等高级用法。

密钥认证(推荐,不要用密码)#

# 在本地机器上生成密钥对
# -t rsa: 算法类型
# -b 4096: 密钥长度
# -C "注释,通常是邮箱"
ssh-keygen -t rsa -b 4096 -C "your@email.com"

# 查看公钥内容(把这个给服务器管理员)
cat ~/.ssh/id_rsa.pub

# 将公钥复制到服务器(如果有密码权限)
ssh-copy-id user@your-server-ip

为什么要用密钥而不是密码?

密码认证有两个大问题:一是弱密码容易被暴力破解(服务器放在公网上半小时内就会收到扫描);二是每次登录都要输入密码。密钥认证用一对公钥-私钥文件代替了密码输入,私钥存在本地,别人拿不到就不可能登录你的服务器。

SSH配置文件#

~/.ssh/config 可以让你不用每次都输入完整的连接信息:

# ~/.ssh/config
Host gpu-server
    HostName 123.123.123.123
    User anson
    Port 22
    IdentityFile ~/.ssh/id_rsa

Host lab-machine
    HostName 192.168.1.100
    User alice
    Port 2222

# 配置好后就可以用短名称连接了
# ssh gpu-server   # 等价于 ssh anson@123.123.123.123 -p 22 -i ~/.ssh/id_rsa

安全加固#

服务器放在公网上不需要太多配置,但以下几个措施值得做:

# 1. 禁止root直接登录
# 编辑 /etc/ssh/sshd_config
PermitRootLogin no

# 2. 禁止密码认证
PasswordAuthentication no

# 3. 修改默认端口(减少被扫描的概率)
Port 2222

# 修改后重启SSH服务
sudo systemctl restart sshd

警告

修改SSH配置前,确保你已经用另一个终端窗口测试过新配置能连上。如果配错了把自己锁在外面,就只能去机房或者找运维帮忙了。测试方法:新开一个终端,用新的配置尝试连接,确认能登录后再关掉旧的窗口。

常用命令速查#

命令

作用

示例

ls -lh

列出文件(人类可读大小)

ls -lh /data

cd

切换目录

cd /mnt/data/datasets

cp -r

递归复制目录

cp -r /data/raw /data/backup

mv

移动/重命名

mv old_name new_name

rm -r

删除目录(慎用!)

rm -r /tmp/cache

rm

删除文件(慎用!)

rm -r file_path

grep

搜索文本

grep "error" train.log

wc -l

统计行数

wc -l dataset.csv

tar -xzf

解压 tar.gz

tar -xzf imagenet.tar.gz

wget

下载文件

wget https://example.com/file.zip

curl

HTTP请求

curl http://localhost:8080/health

rm -rf 的警告

rm -rf / 会删除你系统上的所有文件。不要在 任何/ 开头的路径上运行 rm -rf,除非你100%确定自己在做什么。一个安全习惯:删除前先用 ls 确认路径。


掌握了这些基础操作,你就可以开始配置深度学习环境了。下一节 NVIDIA驱动与CUDA:让GPU真正工作 会带你安装NVIDIA驱动和CUDA,让你的GPU真正派上用场。

贡献者与修订历史

查看详细修订记录
  • c71cb87 2026-04-29 - Heyan Zhu: docs(appendix): add environment setup guide for GPU servers