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都救不了你。
选择哪个发行版#
深度学习领域最常见的两个选择是 Debian 和 Ubuntu。两者都是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 |
uv |
|---|---|---|
创建环境 |
|
|
安装依赖 |
|
|
依赖解析 |
无内置,需 |
内置 |
Python版本管理 |
手动安装不同版本 |
|
底层语言 |
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配置前,确保你已经用另一个终端窗口测试过新配置能连上。如果配错了把自己锁在外面,就只能去机房或者找运维帮忙了。测试方法:新开一个终端,用新的配置尝试连接,确认能登录后再关掉旧的窗口。
常用命令速查#
命令 |
作用 |
示例 |
|---|---|---|
|
列出文件(人类可读大小) |
|
|
切换目录 |
|
|
递归复制目录 |
|
|
移动/重命名 |
|
|
删除目录(慎用!) |
|
|
删除文件(慎用!) |
|
|
搜索文本 |
|
|
统计行数 |
|
|
解压 tar.gz |
|
|
下载文件 |
|
|
HTTP请求 |
|
rm -rf 的警告
rm -rf / 会删除你系统上的所有文件。不要在 任何 以 / 开头的路径上运行 rm -rf,除非你100%确定自己在做什么。一个安全习惯:删除前先用 ls 确认路径。
掌握了这些基础操作,你就可以开始配置深度学习环境了。下一节 NVIDIA驱动与CUDA:让GPU真正工作 会带你安装NVIDIA驱动和CUDA,让你的GPU真正派上用场。