GPU

GPU 算力运维面试题

·9 分钟阅读·3380 字

GPU 算力集群运维岗位面试高频题,按知识领域分类整理。

📋 目录

核心命令

nvidia-smi


可查看:显卡卡号、显存、算力(Compute Capability)、温度、功耗、占用进程、驱动版本。

### 2. 驱动、CUDA、cuDNN 三者是什么关系,版本兼容原则是什么

| 组件 | 作用 |

|------|------|

| **显卡驱动** | GPU 底层硬件驱动 |

| **CUDA** | 并行计算开发运行库 |

| **cuDNN** | GPU 加速算法库(深度学习) |

**兼容规则:**

1. CUDA 版本不能超出驱动支持上限

2. cuDNN 绑定对应 CUDA 版本

3. 业务框架(PyTorch/TensorFlow)需匹配对应 CUDA 版本

### 3. 一台服务器多张显卡,如何指定程序运行在特定 GPU 上

```bash

# 环境变量控制

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

3. 容器 & K8s GPU 调度类

1. 普通 Docker 和 nvidia-docker 区别,为什么运行 AI 程序必须用后者

| 对比 | 普通 Docker | nvidia-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 识别可用性


4. 集群调度 & 存储类

1. 日常算力集群常用调度框架有哪些,简单说下 Slurm 工作流程

常用调度框架: Slurm、Volcano(K8s)、YARN

Slurm 工作流程:


用户提交作业 → 调度系统纳入队列 → 筛选空闲 GPU 节点

→ 分配资源启动任务 → 任务结束释放算力资源

2. 训练任务加载模型缓慢,优先排查哪些存储层面问题

  • 分布式存储(Ceph/MinIO)读写性能

  • 磁盘 IO 负载

  • 模型文件分片与挂载状态

  • 网络存储带宽

  • 文件权限与文件损坏问题

3. Ceph 存储在 GPU 集群中主要承担什么作用,常见故障有哪些

作用: 存储模型权重、训练数据集、日志文件

常见故障:

  • 存储挂载断开

  • 读写延迟高

  • 副本异常

  • 磁盘损坏

  • 集群节点掉线

4. 大文件跨节点高速传输有哪些方式

  • rsync、scp 基础工具

  • 集群内部高速文件拷贝工具

  • 依托内网高速网卡传输

  • 挂载共享存储直接读取


5. 故障排查高频面试题

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. 检查网络连通性


6. 实操场景题

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

---

> [!info] 关联文档
> - [[DCGM 完整深度详解]] — GPU 监控
> - [[GPU 容器虚拟化层完整详解]] — GPU 虚拟化
> - [[Kubernetes GPU 调度完整详解]] — K8s GPU 调度
> - [[GPU 计算与 CUDA 编程基础]] — GPU 理论
Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro