GPU 算力运维面试题
GPU 算力运维面试题
GPU 算力集群运维岗位面试高频题,按知识领域分类整理。
一、Linux & 网络基础类
1. 简述日常排查服务器负载过高的排查步骤
先用 top/htop 查看 CPU、内存占用;定位高负载进程,分析进程用途;查看磁盘 IO、网络带宽;核对定时任务、后台程序;结合日志判断异常原因,按需终止异常进程或扩容资源。
2. 如何查看服务器端口监听状态、排查端口不通问题
# 查看监听端口
netstat -ntlp
ss -ntlp
# 本地连通性测试
telnet <ip> <port>
nc -zv <ip> <port>
# 路由追踪
traceroute <ip>
排查方向:防火墙、安全组策略、路由追踪、网卡状态。
3. 磁盘使用率爆满怎么处理?
df -h # 查看爆满分区
du -sh * # 逐级定位大文件
处理方案:清理日志、过期镜像、无用模型文件;检查日志轮转配置;必要时扩容磁盘,优化文件存储策略。
4. 解释 TCP 三次握手和四次挥手,集群多卡通信异常会从哪些网络维度排查
TCP 三次握手: SYN → SYN-ACK → ACK TCP 四次挥手: FIN → ACK → FIN → ACK
多卡通信排查方向:
- 网卡状态(
ip link,ethtool) - IB/RoCE 网络状态
- 交换机配置
- 防火墙规则
- MTU 值一致性
- 网段互通性
- 网卡 bond 聚合状态
二、GPU 硬件 & 驱动环境类
1. 说出常用 GPU 型号,怎么查看显卡硬件信息、运行状态
常用型号: A10、A100、H100、RTX 4090、V100
# 核心命令
nvidia-smi
可查看:显卡卡号、显存、算力(Compute Capability)、温度、功耗、占用进程、驱动版本。
2. 驱动、CUDA、cuDNN 三者是什么关系,版本兼容原则是什么
| 组件 | 作用 |
|---|---|
| 显卡驱动 | GPU 底层硬件驱动 |
| CUDA | 并行计算开发运行库 |
| cuDNN | GPU 加速算法库(深度学习) |
兼容规则:
- CUDA 版本不能超出驱动支持上限
- cuDNN 绑定对应 CUDA 版本
- 业务框架(PyTorch/TensorFlow)需匹配对应 CUDA 版本
3. 一台服务器多张显卡,如何指定程序运行在特定 GPU 上
# 环境变量控制
export CUDA_VISIBLE_DEVICES=0,1
# 容器启动参数
docker run --gpus '"device=0,1"' ...
# 代码层面
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
4. 什么是 MIG 技术,作用是什么
MIG(Multi-Instance GPU):NVIDIA 显卡虚拟化拆分技术。
可将一张物理 GPU 切分成多个独立算力实例,拆分显存与核心,实现多任务隔离复用,提升算力利用率。
支持 MIG 的显卡:A100、H100 等。
5. nvcc 命令作用是什么,如何查看 CUDA 版本
# nvcc:CUDA 编译器
nvcc -V
# nvidia-smi 也可查看支持的 CUDA 版本
nvidia-smi
三、容器 & K8s GPU 调度类
1. 普通 Docker 和 nvidia-docker 区别,为什么运行 AI 程序必须用后者
| 对比 | 普通 Docker | nvidia-docker |
|---|---|---|
| GPU 识别 | ❌ 无法识别 | ✅ 打通 GPU 调用通道 |
| CUDA 库 | ❌ 不包含 | ✅ 封装显卡驱动与 CUDA 库 |
| 算力映射 | ❌ 不支持 | ✅ 支持 GPU 资源映射 |
2. K8s 中如何调度 GPU 资源,Pod 怎么挂载使用显卡
- 节点预先安装 GPU 驱动 + NVIDIA Device Plugin
- Pod YAML 声明
resources.limits.nvidia.com/gpu - 设置节点标签、污点容忍,调度器匹配 GPU 节点
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: cuda-container
image: nvidia/cuda:12.0-runtime
resources:
limits:
nvidia.com/gpu: 1
3. K8s 中 GPU 资源配额限制的目的是什么
- 防止单任务独占全部显卡资源
- 隔离业务任务,避免互相抢占
- 合理分配集群算力,保障多任务稳定运行
4. 简述 GPU 镜像制作的注意事项
- 匹配业务所需的 CUDA 版本与系统版本
- 预装依赖库与深度学习框架
- 精简镜像体积
- 配置显卡调用权限
- 测试镜像内 GPU 识别可用性
四、集群调度 & 存储类
1. 日常算力集群常用调度框架有哪些,简单说下 Slurm 工作流程
常用调度框架: Slurm、Volcano(K8s)、YARN
Slurm 工作流程:
用户提交作业 → 调度系统纳入队列 → 筛选空闲 GPU 节点
→ 分配资源启动任务 → 任务结束释放算力资源
2. 训练任务加载模型缓慢,优先排查哪些存储层面问题
- 分布式存储(Ceph/MinIO)读写性能
- 磁盘 IO 负载
- 模型文件分片与挂载状态
- 网络存储带宽
- 文件权限与文件损坏问题
3. Ceph 存储在 GPU 集群中主要承担什么作用,常见故障有哪些
作用: 存储模型权重、训练数据集、日志文件
常见故障:
- 存储挂载断开
- 读写延迟高
- 副本异常
- 磁盘损坏
- 集群节点掉线
4. 大文件跨节点高速传输有哪些方式
rsync、scp基础工具- 集群内部高速文件拷贝工具
- 依托内网高速网卡传输
- 挂载共享存储直接读取
五、故障排查高频面试题
1. 业务运行时报错 CUDA out of memory,原因和解决办法
原因:
- 模型过大
- Batch size 太高
- 显存泄漏
- 多任务抢占显存
解决:
- 减小 batch size
- 优化模型结构
- 释放无用显存进程(
fuser -v /dev/nvidia*) - 扩容显卡显存
- 拆分任务分布式运行
2. 显卡莫名掉卡、nvidia-smi 偶尔识别不到显卡,排查思路
- 检查服务器硬件供电、散热温度
- 重启显卡驱动、重启节点
- 检查 PCIe 插槽与硬件线路
- 排查驱动稳定性、系统内核兼容性
- 查看硬件告警日志
3. 容器内执行 nvidia-smi 提示命令不存在,怎么排查
- 确认容器运行时使用 nvidia-container-runtime
- 确认宿主机已安装 NVIDIA 驱动
- 检查容器镜像是否包含 CUDA 工具包
4. 简述 GPU 显存泄漏的排查思路
- 使用
nvidia-smi监控显存变化 - 定位显存占用异常的进程 PID
- 使用
fuser -v /dev/nvidia*查看占用进程 - 检查代码中是否存在显存未释放的路径
5. Kubernetes 中 node 节点 NotReady,GPU 节点如何排查
kubectl describe node <node-name>查看 Condition- 检查 kubelet 状态:
systemctl status kubelet - 检查 nvidia-device-plugin 是否正常运行
- 检查节点资源是否耗尽(CPU/内存/磁盘)
- 检查网络连通性
六、实操场景题
1. 口述查询所有 GPU 占用进程,批量杀死异常显存进程的操作
# 查看所有 GPU 占用进程
nvidia-smi
# 批量杀死所有 GPU 进程(谨慎使用)
fuser -v /dev/nvidia* | awk "{print \$2}" | xargs kill -9
# 或按 PID 逐个清理
kill -9 <PID>
2. 口述一台新 GPU 服务器,从装机到能运行业务的部署流程
- 安装操作系统 + 基础配置(网络、防火墙、SSH)
- 安装 NVIDIA 显卡驱动
- 安装 CUDA Toolkit + cuDNN
- 安装容器运行时(Docker + nvidia-container-runtime)
- 部署 K8s 组件(kubelet + kube-proxy)
- 部署 NVIDIA Device Plugin
- 加入集群并打上 GPU 标签
- 验证:部署测试 Pod 运行
nvidia-smi
3. 口述如何排查集群节点之间网络不通问题
# 逐层排查
ping <target-ip> # 基础连通性
telnet <target-ip> <port> # 端口连通性
traceroute <target-ip> # 路由路径
ip route show # 路由表
iptables -L -n # 防火墙规则
ip link show # 网卡状态
ethtool <interface> # 网卡协商速率
4. 口述编写简单脚本,定时巡检显卡温度并记录日志
#!/bin/bash
# GPU 温度巡检脚本
LOG_FILE="/var/log/gpu_temp_monitor.log"
while true; do
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
nvidia-smi --query-gpu=index,name,temperature.gpu,utilization.gpu,memory.used --format=csv \
| tail -n +2 \
| while IFS= read -r line; do
echo "[$TIMESTAMP] $line" >> $LOG_FILE
done
sleep 300 # 每 5 分钟采集一次
done
关联文档
- GPU 计算与 CUDA 编程基础 — GPU 与 CUDA 理论
- ../../kubernetes/core/K8s 核心概念 — K8s 基础
- ../../linux/system/Linux — Linux 运维
- ../../linux/故障排查/服务器 IO 过高排查流程 — 服务器负载排查
- ../../network/网络 — 网络排查基础
- ../GPU 计算与 CUDA 编程基础 — GPU 与 CUDA 理论
- GPU 调度与 cgroup 问题(文档待创建) — K8s GPU 调度
- ../../kubernetes/core/K8s 核心概念 — K8s 基础
- ../../linux/system/Linux — Linux 运维
关联文档
- GPU 计算与 CUDA 编程基础 — GPU 理论
- ../../kubernetes/core/K8s 核心概念 — K8s 调度
- ../../linux/system/Linux — Linux 运维