云GPU主机上的一些常用操作
本文整理自 Amos H’s Blog 及相关资料,涵盖云 GPU 服务器的常用操作与运维技巧。
目录
- SSH 连接与基础配置
- 持久化终端会话(Byobu / Tmux)
- NVIDIA 驱动与 CUDA 环境安装
- cuDNN 安装与配置
- Docker 环境配置
- GPU 监控与管理
- Python / Conda 环境管理
- 深度学习框架配置
- 文件传输与数据管理
- 常用运维命令速查
- 常见问题与排错
1. SSH 连接与基础配置
1.1 基本连接
ssh root@<公网IP> -p 22
如果使用密钥对登录:
ssh -i ~/.ssh/your_key.pem root@<公网IP>
1.2 SSH 免中断配置
为防止 SSH 连接因长时间空闲而断开,修改 /etc/ssh/sshd_config:
vim /etc/ssh/sshd_config
# 修改以下参数
ClientAliveInterval 60 # 每 60 秒发送心跳包
ClientAliveCountMax 3 # 最多 3 次无响应后断开
重启 SSH 服务:
systemctl restart sshd
1.3 安装基础工具
apt update && apt install -y git vim curl wget htop net-tools
2. 持久化终端会话(Byobu / Tmux)
在 GPU 服务器上运行长时间的训练任务时,终端复用器是必备工具。它能确保即使 SSH 连接断开,训练任务也不会中断。
2.1 Byobu(Amos H 推荐)
Byobu 是基于 Tmux 或 Screen 的增强版终端复用器,开箱即用,快捷键更友好。
安装
sudo apt-get install byobu
启动
byobu
常用快捷键(前缀键:Ctrl-a)
| 快捷键 | 功能 |
|---|---|
Ctrl-a, c |
创建新窗口(shell) |
Ctrl-a, d |
分离会话(进程继续运行) |
Ctrl-a, D |
分离并登出 |
Ctrl-a, n |
下一个窗口 |
Ctrl-a, p |
上一个窗口 |
Ctrl-a, 1-9 |
切换到指定编号窗口 |
Ctrl-a, w |
列出所有窗口 |
Ctrl-a, k |
关闭当前窗口 |
Ctrl-a, A |
重命名当前窗口 |
Ctrl-a, " |
显示窗口列表并选择 |
Ctrl-a, esc |
进入复制模式(vi 风格移动) |
Ctrl-a, [ |
选择复制(空格开始/结束) |
Ctrl-a, ] |
粘贴缓冲区内容 |
Ctrl-a, : |
进入命令行模式(输入 exit 退出) |
典型使用场景
# 启动 byobu
byobu
# 在 byobu 中启动训练脚本
python train.py --epochs 100
# 按 Ctrl-a, d 分离会话,关闭终端
# 下次登录后重新连接
byobu
要点:Byobu 会话中的进程在分离后继续运行,适合长时间训练、大数据处理等场景。
重新连接到已有会话
# 列出所有会话
byobu list-sessions
# 重新连接(如果只有一个会话,直接运行 byobu 即可)
tmux attach -t <session-name>
2.2 Tmux(替代方案)
Tmux 是目前最流行的终端复用器,比 Byobu 更底层,灵活度更高。
安装
sudo apt-get install tmux
常用快捷键(前缀键:Ctrl-b)
| 快捷键 | 功能 |
|---|---|
Ctrl-b, d |
分离当前会话(后台运行) |
Ctrl-b, c |
创建新窗口 |
Ctrl-b, , |
重命名窗口 |
Ctrl-b, n / p |
下一个 / 上一个窗口 |
Ctrl-b, % |
垂直分割窗格 |
Ctrl-b, " |
水平分割窗格 |
Ctrl-b, 方向键 |
在窗格间移动 |
Ctrl-b, z |
放大 / 恢复当前窗格 |
Ctrl-b, [ |
进入滚动模式(PgUp/PgDn 翻页) |
常用命令
tmux new -s mytrain # 创建新会话
tmux ls # 列出所有会话
tmux attach -t mytrain # 重新连接
tmux kill-session -t mytrain # 杀死会话
典型训练监控布局脚本
#!/bin/bash
# 一键创建 GPU 训练监控布局
tmux new-session -d -s gpu-mon
# 左侧:nvidia-smi 实时监控
tmux send-keys -t gpu-mon "watch -n 1 nvidia-smi" C-m
# 右侧:训练日志
tmux split-window -h -t gpu-mon
tmux send-keys -t gpu-mon "tail -f train.log" C-m
# 左下:系统资源
tmux split-window -v -t gpu-mon
tmux send-keys -t gpu-mon "htop" C-m
tmux attach -t gpu-mon
3. NVIDIA 驱动与 CUDA 环境安装
来源:Amos H’s Blog — TensorFlow Development Environment with Docker
3.1 安装 NVIDIA 显卡驱动
方法一:通过 PPA 安装
# 添加显卡驱动 PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
# 查看可用驱动版本
ubuntu-drivers devices
# 安装推荐版本
sudo apt-get install nvidia-driver-<version> # 如 nvidia-driver-535
# 或直接安装自动推荐版本
sudo ubuntu-drivers autoinstall
# 重启生效
sudo reboot
方法二:从 NVIDIA 官网下载
# 查看 GPU 型号
lspci | grep -i nvidia
# 从 https://www.nvidia.com/drivers 下载对应驱动后:
chmod +x NVIDIA-Linux-*.run
sudo ./NVIDIA-Linux-*.run
验证驱动安装
cat /proc/driver/nvidia/version
nvidia-smi
卸载驱动:
sudo apt-get purge nvidia-*
3.2 安装 CUDA Toolkit
推荐使用 Runfile 或 deb 方式安装。以下以 CUDA 11.8 为例:
# 通过 deb 包安装
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-11-8-local_11.8.0-520.61.05-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
配置环境变量
将以下内容添加到 ~/.bashrc:
# CUDA
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
使环境变量生效:
source ~/.bashrc
验证 CUDA 安装
nvcc --version
# 或
nvcc -V
安装 CUDA 命令行工具
sudo apt-get install cuda-command-line-tools
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+${LD_LIBRARY_PATH}:}/usr/local/cuda/extras/CUPTI/lib64
4. cuDNN 安装与配置
来源:Amos H’s Blog
cuDNN 是 NVIDIA 的深度学习 GPU 加速库。需要先在 NVIDIA Developer 注册并下载。
安装步骤(deb 包方式)
# 下载以下文件(需登录 NVIDIA 开发者网站):
# libcudnn8_<version>_amd64.deb # Runtime
# libcudnn8-dev_<version>_amd64.deb # Developer
# libcudnn8-doc_<version>_amd64.deb # Docs(可选)
# 安装 Runtime 库
sudo dpkg -i libcudnn8_8.9.7.29-1+cuda11.8_amd64.deb
# 安装 Developer 库
sudo dpkg -i libcudnn8-dev_8.9.7.29-1+cuda11.8_amd64.deb
# 安装文档和示例(可选)
sudo dpkg -i libcudnn8-doc_8.9.7.29-1+cuda11.8_amd64.deb
验证 cuDNN 安装
# 复制并运行示例程序
cp -r /usr/src/cudnn_samples_v8/ $HOME
cd $HOME/cudnn_samples_v8/mnistCUDNN
make clean && make
./mnistCUDNN
# 成功输出示例:
# Test passed!
5. Docker 环境配置
来源:Amos H’s Blog — 原创内容整理
Docker 是 GPU 云主机上最常用的环境隔离工具,尤其适合深度学习框架的快速部署。
5.1 安装 Docker CE
# 1. 更新包索引并安装依赖
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# 2. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 3. 添加 Docker 仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 4. 安装 Docker CE
sudo apt-get update
sudo apt-get install -y docker-ce
# 5. 将当前用户加入 docker 组(避免每次加 sudo)
sudo groupadd docker
sudo usermod -aG docker $USER
# 重新登录后生效
# 6. 设置 Docker 开机自启
sudo systemctl enable docker
# 7. 验证安装
docker run hello-world
docker version
5.2 安装 NVIDIA Container Toolkit
为了让 Docker 容器访问 GPU:
# 添加 NVIDIA 容器工具包仓库
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
# 重启 Docker 服务
sudo systemctl restart docker
5.3 测试 GPU Docker 容器
docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi
输出应显示 GPU 信息。
5.4 常用 Docker 操作
# 拉取深度学习镜像
docker pull pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
# 运行容器并挂载数据
docker run --gpus all -it --rm \
-v /path/to/data:/workspace/data \
-v /path/to/code:/workspace/code \
pytorch/pytorch:2.1.0-cuda11.8-cudnn8-runtime
# 查看运行中的容器
docker ps
# 进入运行中的容器
docker exec -it <container_id> bash
# 清理所有停止的容器
docker container prune
6. GPU 监控与管理
6.1 nvidia-smi(基础监控)
查看 GPU 基本状态:
nvidia-smi
常用参数:
nvidia-smi -L # 列出所有 GPU
nvidia-smi -i 0 -q # 查询指定 GPU 详细信息
nvidia-smi --query-gpu=index,name,temperature.gpu,utilization.gpu,memory.used,memory.total --format=csv
nvidia-smi dmon # 实时设备监控(1 秒刷新)
nvidia-smi pmon # 实时进程监控
nvidia-smi -pm 1 # 启用持久化模式
nvidia-smi -e 1 # 启用 ECC
持续监控(每 N 秒刷新):
watch -n 1 nvidia-smi
6.2 gpustat(简洁监控)
pip install gpustat
gpustat # 简洁单次输出
watch -n 1 gpustat # 持续监控
6.3 nvitop(交互式监控)
pip install nvitop
nvitop # 交互式界面
nvitop -1 # 单次输出(类似 nvidia-smi)
nvitop 功能:
- 实时 GPU 资源监控
- 进程排序(按 GPU/显存/PID)
- 进程过滤(按用户/名称)
- 发送信号(SIGINT/SIGTERM/SIGKILL)
- 树状视图查看进程层级
- 查看进程环境变量
6.4 htop(系统资源监控)
htop # 交互式 CPU/内存监控
6.5 磁盘使用情况
df -h # 查看磁盘空间
du -sh * # 查看当前目录下各文件/目录大小
7. Python / Conda 环境管理
7.1 安装 Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 按提示完成安装,最后选择 yes 初始化 conda
source ~/.bashrc
7.2 Conda 常用操作
# 创建环境
conda create -n myenv python=3.10
# 激活环境
conda activate myenv
# 安装包
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
# 查看环境列表
conda env list
# 导出环境
conda env export > environment.yaml
# 根据配置文件创建环境
conda env create -f environment.yaml
# 删除环境
conda remove -n myenv --all
7.3 配置国内 pip 镜像(加速下载)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
8. 深度学习框架配置
8.1 PyTorch
# CUDA 11.8 版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 验证 GPU 可用
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.device_count()); print(torch.cuda.get_device_name(0))"
8.2 TensorFlow
pip install tensorflow
# 验证 GPU 可用
python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"
8.3 Jupyter Lab / Notebook
pip install jupyterlab
# 启动(指定端口和 IP)
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root
# 建议同时挂载 tmux 会话中运行
9. 文件传输与数据管理
9.1 scp 传输
# 本地 → 云主机
scp -P 22 local_file root@<IP>:/remote/path/
# 云主机 → 本地
scp -P 22 root@<IP>:/remote/path/file local_path/
# 传输目录
scp -r local_dir root@<IP>:/remote/path/
9.2 rsync(增量同步,推荐)
# 同步到云主机
rsync -avzP --progress /local/data/ root@<IP>:/remote/data/
# 从云主机同步到本地
rsync -avzP --progress root@<IP>:/remote/data/ /local/data/
# 排除某些文件
rsync -avzP --exclude='*.tmp' --exclude='__pycache__' /local/ root@<IP>:/remote/
9.3 网盘 / 对象存储
许多云 GPU 平台提供内置的对象存储,可通过 CLI 工具管理:
# 以阿里云 OSS 为例
ossutil cp local_file oss://bucket/path/
ossutil cp oss://bucket/path/remote_file local_path/
10. 常用运维命令速查
GPU 相关
nvidia-smi # GPU 状态总览
nvidia-smi -L # 列出所有 GPU
nvidia-smi -q -i 0 # GPU 0 详细信息
nvidia-smi --format=csv --query-gpu=name,index,memory.total,memory.used,utilization.gpu,temperature.gpu
nvidia-smi dmon -s pucvmet # 详细实时监控
nvidia-smi pmon -s puc # 进程级别监控
nvidia-smi --loop=1 # 每秒持续输出
系统相关
htop # 系统资源监控
df -h # 磁盘空间
du -sh /path # 目录大小
free -h # 内存使用
lscpu # CPU 信息
lsb_release -a # 系统版本
uname -a # 内核版本
进程管理
ps aux | grep python # 查找 Python 进程
kill -9 <PID> # 强制结束进程
pkill -f python # 结束所有匹配进程
nvidia-smi | grep python # 查看 GPU 上的进程
kill -9 <PID> # 结合以上输出杀死 GPU 进程
网络相关
curl ip.sb # 查看公网 IP
ping -c 4 <host> # 网络连通性测试
ss -tuln # 查看监听端口
11. 常见问题与排错
11.1 CUDA 版本不匹配
现象:CUDA error: no kernel image is available for execution on the device
解决:
# 检查 GPU 支持的 CUDA 版本
nvidia-smi --query-gpu=name,compute_cap --format=csv
# 检查当前 CUDA 版本
nvcc --version
# 根据 Compute Capability 选择合适框架版本
# 例如:GTX 1080 (CC 6.1) 支持 CUDA 9.0+
# RTX 3090 (CC 8.6) 支持 CUDA 11.0+
11.2 Docker 无法访问 GPU
现象:docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
解决:
# 确认已安装 nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
# 确认 Docker 默认运行时已配置
# 检查 /etc/docker/daemon.json 是否包含 "runtimes" 配置
11.3 SSH 连接超时
解决:
# 检查安全组是否开放 22 端口
# 修改 SSH 配置
vim /etc/ssh/sshd_config
# 添加或修改:
ClientAliveInterval 60
ClientAliveCountMax 3
systemctl restart sshd
11.4 GPU 显存不足
解决思路:
# 1. 查看显存占用
nvidia-smi
# 2. 杀死占用进程
kill -9 <PID>
# 3. 使用梯度累积减少显存峰值
# 4. 使用混合精度训练 (AMP)
# 5. 降低 batch size
# 6. 使用模型并行或张量并行
11.5 磁盘空间不足
# 查看空间占用
df -h
du -sh /home/*
# 清理 Docker 缓存
docker system prune -a
# 清理 apt 缓存
sudo apt-get clean
# 清理 pip 缓存
rm -rf ~/.cache/pip
# 清理 conda 缓存
conda clean -a
参考
- Amos H’s Blog (amosground.blogspot.com) — Byobu & TensorFlow Docker 开发环境
- NVIDIA CUDA 安装指南
- NVIDIA Container Toolkit
- Docker 官方文档
- PyTorch 官方安装指南
本文整合自网络公开资料,主要参考 Amos H’s Blog 中关于 GPU 云服务器操作的相关内容,并结合实际运维经验补充整理。