训练大模型或跑推理服务时,开通GPU实例通常只是第一步。接下来常见的情况是:显卡没被识别,数据盘找不到,训练脚本读路径时报错。这些问题大多出在GPU云服务器挂载的顺序上,而且显卡和存储混在一起排查,越查越乱。

先分清两条线
GPU云服务器挂载其实是两件事。一件是GPU设备:云平台把物理显卡或虚拟显卡分给实例,操作系统再通过驱动把它识别出来。另一件是存储挂载:把云硬盘、文件存储或对象存储接入实例的目录树,让训练数据和模型文件可以读写。两者互不依赖,出问题时分开看,排查效率会高很多。
GPU设备一般由云厂商在开通实例时分配,多数情况下用户不用动手。你需要做的是确认驱动版本和CUDA版本对得上,并检查设备是否可见。存储则要自己操作,格式化、挂载、开机自动挂载都得配置。
挂载前先看三样东西
- 规格:在实例详情页确认GPU型号、显存大小,以及镜像里是否已经预装驱动。预装驱动的镜像能省掉不少麻烦。
- 存放规划:训练数据集和模型权重分开放。数据集适合放在吞吐较高的文件存储上,临时检查点写到本地NVMe盘就够用。
- 盘号:格式化之前再核对一次目标盘。系统盘被误当成数据盘格式化,损失会很大。
案例一:给训练任务挂一块新数据盘
某视觉团队在一台8卡GPU实例上训练图像分类模型,数据集约1.2TB,最初直接放在系统盘上,没过多久磁盘就写满了。团队另买了一块3TB云硬盘,按下面的步骤挂上去。
- 在云控制台把云硬盘绑定到实例,然后执行 lsblk 找到新盘。设备名通常是 vdb,也可能是 nvme1n1。
- 用 parted 创建分区,再用 mkfs.ext4 格式化。格式化会清空盘上数据,执行前请再确认一次盘号。
- 创建挂载点,比如 /data,然后执行 mount 把分区挂上去。
- 用 blkid 查出分区的UUID,写入 /etc/fstab,这样重启后会自动挂载。写完执行一次 mount -a,没有报错才算配置成功。
挂好之后,团队把数据集从系统盘搬到 /data,训练脚本的读取路径也一并改掉。系统盘占用从97%降到42%,训练也不会再因为磁盘写满而中途断掉。
案例二:四台实例共用同一份数据集
一家做语音识别的公司有4台GPU实例同时训练,每台都要读同一份语音语料。逐台复制既慢又费空间。团队选了文件存储,创建NFS共享,再在每台实例上挂载到同一路径 /mnt/corpus。
每台实例先安装NFS客户端,再执行挂载。在 /etc/fstab 中加入 hard 和 timeo 参数后,网络偶尔抖动时读写会重试,而不是直接失败。上线第一周,团队测得单节点读取速度约1.6GB/s,足够支撑数据加载。训练结束后,四台实例只需卸载共享目录,语料本身不受影响。
确认GPU真的能用
存储挂载完成后,还要确认系统和框架都能调用GPU,建议按三步检查:
- 执行 nvidia-smi,查看驱动版本、显卡型号和显存总量。如果没有任何输出,基本可以判断驱动没有正确安装。
- 在Python中运行 torch.cuda.is_available()。返回 True,说明框架能识别显卡。
- 跑一次大矩阵乘法,确认计算过程不报错,同时观察显存占用是否随计算上升。
常见报错怎么查
- nvidia-smi 无输出:多半是驱动没装,或者驱动版本与内核不匹配。按CUDA版本重装对应驱动,然后重启实例。
- 重启后挂载消失:通常是 /etc/fstab 没有写入,或者写的是设备名而不是UUID。多块盘的情况下设备名可能变化,统一使用UUID更稳妥。
- mount 报 wrong fs type:分区可能没有格式化,也可能是类型填错了。先用 blkid 确认实际文件系统类型。
- 训练读取慢:先确认数据是否放在网络存储上且没有做缓存。小文件特别多时,可以先打包成大文件,或者同步到本地NVMe盘再训练。
小结
GPU云服务器挂载的关键是把显卡和存储分开查。显卡由平台分配,驱动和设备可见性逐项确认即可。存储靠格式化、挂载点和fstab三步完成,最后用 mount -a 验证。两个案例里的团队都先定位了当前瓶颈,再按步骤操作,因此避免了反复返工。