3. Linux基础与系统初始化

说实话,很多做AI训练的朋友,一开始都栽在Linux环境上。我见过太多人,模型写得漂亮,结果连个SSH都连不上,或者权限配错了,训练跑到一半报错。嗯,这一章咱们就把这些基础打牢。

3.1 Ubuntu Server 22.04 安装要点

我个人习惯用Ubuntu Server 22.04 LTS做训练节点。为什么?稳定,驱动支持好,社区活跃。你想想看,要是装个系统三天两头出问题,哪还有心思调模型?

安装时注意几个关键点:

  • 磁盘分区:建议用LVM逻辑卷管理。我在项目中遇到过,一开始分区给小了,后来数据盘不够用,只能停机扩容。用LVM的话,在线就能加空间。
  • 网络配置:装完系统第一件事,配静态IP。别用DHCP,训练节点IP变了,整个集群都得跟着改配置,太折腾。
  • 软件源:换成国内镜像,比如清华或阿里云。不然apt update能等半小时,急性子受不了。
我的小技巧:安装时勾选「OpenSSH server」选项,省得后面手动装。这一步很多人会忘,结果装完发现连不上机器,还得插显示器去配。

3.2 SSH 配置与安全加固

SSH是咱们运维的命根子。集群里几十台机器,全靠它来管。配置不好,要么连不上,要么被黑客盯上。

先看看基本配置,编辑 /etc/ssh/sshd_config:

# 我一般这样配
Port 2222                    # 改掉默认22端口,减少被扫描的概率
PermitRootLogin no           # 禁止root直接登录,用普通用户+sudo
PubkeyAuthentication yes     # 开启密钥登录
PasswordAuthentication no    # 关掉密码登录,只用密钥
MaxAuthTries 3               # 最多试3次,防暴力破解
ClientAliveInterval 60       # 每60秒发一次心跳,防止连接断开
ClientAliveCountMax 3        # 心跳超时3次就断开

改完配置记得重启服务:sudo systemctl restart sshd

注意:改端口前,先确保新端口没被占用。我曾经手一抖配了个冲突端口,结果自己都连不上了,只能跑机房去改。嗯,尴尬。

密钥登录怎么配?我习惯用ed25519算法,比RSA快,也更安全:

# 在本地生成密钥对
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "your_email@example.com"

# 把公钥传到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@server_ip

3.3 用户与权限管理

集群训练环境,用户管理特别重要。你不能让所有人都用root跑训练,万一有人误操作删了数据,哭都来不及。

我一般这样建用户:

# 创建训练专用用户
sudo useradd -m -s /bin/bash trainuser
sudo passwd trainuser

# 加到sudo组,方便临时提权
sudo usermod -aG sudo trainuser

# 设置umask,默认创建的文件不让其他人写
echo "umask 0022" >> /home/trainuser/.bashrc

权限这块,记住一个原则:最小权限原则。训练数据目录,只有训练用户和运维组能读;模型输出目录,只有训练用户能写。

目录 用途 推荐权限
/data/training 训练数据集 755 (drwxr-xr-x)
/data/models 模型输出 700 (drwx------)
/data/logs 训练日志 755 (drwxr-xr-x)
避坑指南:我曾经遇到过,训练脚本用root跑,结果生成的模型文件其他用户删不掉。后来排查半天,发现是umask设置不对。所以,训练进程一定要用普通用户跑。

3.4 关闭防火墙与SELinux

这个标题可能让安全工程师看了皱眉。但说实话,在集群训练环境里,防火墙和SELinux经常是「好心办坏事」。

为什么关?因为训练节点之间需要大量通信:

  • NFS挂载数据
  • MPI/RDMA通信
  • 分布式训练框架(如DeepSpeed、Megatron)的节点间通信
  • 监控系统采集指标

这些端口动辄几十个,防火墙规则配起来非常麻烦。而且SELinux的上下文配置,稍有不慎就导致进程无法访问文件。我见过一个团队,排查了两天训练报错,最后发现是SELinux拦了NFS挂载。

关闭方法很简单:

# 关闭防火墙
sudo ufw disable
sudo systemctl stop ufw
sudo systemctl disable ufw

# 关闭SELinux(临时)
sudo setenforce 0

# 永久关闭SELinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
重要提醒:关防火墙的前提是,你的训练网络是隔离的内网。如果节点暴露在公网上,千万别关!我建议用硬件防火墙或者云平台的安全组来做边界防护,内部节点之间全放通。

3.5 本章知识体系

下面这张图,是我梳理的本章核心逻辑。你看一遍,基本就知道初始化一台训练节点要做什么了。

Linux系统初始化核心流程 1. Ubuntu安装 LVM分区 + 静态IP + 国内源 2. SSH安全加固 改端口 + 密钥登录 + 禁root 3. 用户与权限 最小权限原则 4. 关闭防火墙与SELinux 内网环境全放通,边界用硬件防护 5. 验证与测试 SSH连接 + 权限检查 + 网络连通 初始化完成标志 ✓ 系统安装完成,网络可达 ✓ SSH密钥登录正常,安全加固到位

嗯,这一套流程走下来,你的训练节点就算初始化好了。别嫌麻烦,基础打牢了,后面集群搭建才顺风顺水。我当年第一次搭集群,就是图省事跳过了这些步骤,结果后面补坑补了三天。