gpu-computing

·12 分钟阅读·4416 字
📋 目录

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并行计算开发运行库
cuDNNGPU 加速算法库(深度学习)

兼容规则:

  1. CUDA 版本不能超出驱动支持上限
  2. cuDNN 绑定对应 CUDA 版本
  3. 业务框架(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 程序必须用后者

对比普通 Dockernvidia-docker
GPU 识别❌ 无法识别✅ 打通 GPU 调用通道
CUDA 库❌ 不包含✅ 封装显卡驱动与 CUDA 库
算力映射❌ 不支持✅ 支持 GPU 资源映射

2. K8s 中如何调度 GPU 资源,Pod 怎么挂载使用显卡

  1. 节点预先安装 GPU 驱动 + NVIDIA Device Plugin
  2. Pod YAML 声明 resources.limits.nvidia.com/gpu
  3. 设置节点标签、污点容忍,调度器匹配 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. 大文件跨节点高速传输有哪些方式

  • rsyncscp 基础工具
  • 集群内部高速文件拷贝工具
  • 依托内网高速网卡传输
  • 挂载共享存储直接读取

五、故障排查高频面试题

1. 业务运行时报错 CUDA out of memory,原因和解决办法

原因:

  • 模型过大
  • Batch size 太高
  • 显存泄漏
  • 多任务抢占显存

解决:

  • 减小 batch size
  • 优化模型结构
  • 释放无用显存进程(fuser -v /dev/nvidia*
  • 扩容显卡显存
  • 拆分任务分布式运行

2. 显卡莫名掉卡、nvidia-smi 偶尔识别不到显卡,排查思路

  1. 检查服务器硬件供电、散热温度
  2. 重启显卡驱动、重启节点
  3. 检查 PCIe 插槽与硬件线路
  4. 排查驱动稳定性、系统内核兼容性
  5. 查看硬件告警日志

3. 容器内执行 nvidia-smi 提示命令不存在,怎么排查

  1. 确认容器运行时使用 nvidia-container-runtime
  2. 确认宿主机已安装 NVIDIA 驱动
  3. 检查容器镜像是否包含 CUDA 工具包

4. 简述 GPU 显存泄漏的排查思路

  1. 使用 nvidia-smi 监控显存变化
  2. 定位显存占用异常的进程 PID
  3. 使用 fuser -v /dev/nvidia* 查看占用进程
  4. 检查代码中是否存在显存未释放的路径

5. Kubernetes 中 node 节点 NotReady,GPU 节点如何排查

  1. kubectl describe node <node-name> 查看 Condition
  2. 检查 kubelet 状态:systemctl status kubelet
  3. 检查 nvidia-device-plugin 是否正常运行
  4. 检查节点资源是否耗尽(CPU/内存/磁盘)
  5. 检查网络连通性

六、实操场景题

1. 口述查询所有 GPU 占用进程,批量杀死异常显存进程的操作

# 查看所有 GPU 占用进程
nvidia-smi

# 批量杀死所有 GPU 进程(谨慎使用)
fuser -v /dev/nvidia* | awk "{print \$2}" | xargs kill -9

# 或按 PID 逐个清理
kill -9 <PID>

2. 口述一台新 GPU 服务器,从装机到能运行业务的部署流程

  1. 安装操作系统 + 基础配置(网络、防火墙、SSH)
  2. 安装 NVIDIA 显卡驱动
  3. 安装 CUDA Toolkit + cuDNN
  4. 安装容器运行时(Docker + nvidia-container-runtime)
  5. 部署 K8s 组件(kubelet + kube-proxy)
  6. 部署 NVIDIA Device Plugin
  7. 加入集群并打上 GPU 标签
  8. 验证:部署测试 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 运维

关联文档