菜单

Administrator
发布于 2026-05-19 / 1 阅读
0
0

云 GPU 主机上的一些常用操作

云GPU主机上的一些常用操作

本文整理自 Amos H’s Blog 及相关资料,涵盖云 GPU 服务器的常用操作与运维技巧。


目录

  1. SSH 连接与基础配置
  2. 持久化终端会话(Byobu / Tmux)
  3. NVIDIA 驱动与 CUDA 环境安装
  4. cuDNN 安装与配置
  5. Docker 环境配置
  6. GPU 监控与管理
  7. Python / Conda 环境管理
  8. 深度学习框架配置
  9. 文件传输与数据管理
  10. 常用运维命令速查
  11. 常见问题与排错

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

推荐使用 Runfiledeb 方式安装。以下以 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 中关于 GPU 云服务器操作的相关内容,并结合实际运维经验补充整理。


评论