
上周帮一个朋友做GPU运维岗的模拟面试他Linux基础很扎实K8s也用过结果被一道“nvidia-smi显示显卡正常但容器里跑不了CUDA程序”的问题卡了整整十分钟。后来我翻了翻他投的那份JD发现里面其实写得很清楚——GPU运维根本不是“会重启、会看日志”的传统运维而是横跨硬件、驱动、容器调度、AI运行环境四层体系的一个复合岗位。这篇文章我就用一份典型的GPU运维JD做样本把里面的每句话拆开揉碎对应整理出30多道面试高频题并附上答题思路和现场避坑建议希望能帮准备这类岗位的朋友少走弯路。1. 拆JD岗位描述里藏着的四个能力域我先把一份比较有代表性的GPU运维JD贴在下面网上搜“GPU运维”岗位十有八九是类似的写法。你别看它只有五六条每一条背后都对应着一整块知识体系。岗位职责负责GPU集群的日常运维、监控告警和容量管理负责AI训练/推理环境搭建、部署与优化负责GPU硬件、驱动、CUDA运行库、容器调度相关故障排查编写运维脚本建设自动化运维与监控平台配合算法团队进行多机多卡训练的环境支持与性能调优。这五条看起来很常规但面试官问起来几乎全部会往深处钻。1.1 “GPU集群日常运维、监控告警和容量管理”——考的是监控设计能力这句话听起来像废话但面试官真正想问的是你用什么指标衡量GPU集群健康不光会看nvidia-smi的利用率你还要知道DCGMNVIDIA Data Center GPU Manager这套东西能采集温度、功耗、PCIe带宽、ECC错误、SM时钟降频等细粒度指标。更进一步GPU利用率在AI训练里其实经常是“假忙”——有算力但显存带宽吃满、SM利用率低或者数据加载瓶颈导致GPU空转这些都是容量管理要解决的问题。1.2 “AI训练/推理环境搭建、部署与优化”——考的是对深度学习技术栈的熟悉度面试官听到你说“我会装CUDA”一定会追问CUDA、cuDNN、显卡驱动三者到底什么关系TensorFlow和PyTorch各自要求的CUDA版本怎么匹配conda环境里的CUDA和系统CUDA有什么区别为什么torch.cuda.is_available()返回False而nvcc -V却正常这些都是最常见的追问方向。大模型时代还会问Ollama、vLLM、DeepSpeed这类推理/训练框架以及怎么给算法团队配置多机多卡环境。1.3 “GPU硬件、驱动、CUDA运行库、容器调度故障排查”——考的是完整排障链路这一条是GPU运维和普通运维拉开差距的地方。普通运维遇到“显卡挂了”大概率是重启GPU运维要能分层排查硬件层nvidia-smi -q -d ECC查看显存ECC错误nvidia-smi -q -d TEMPERATURE看温度、驱动层dmesg | grep -i nvidia查内核日志NVRM报错、运行库层ldd看CUDA库链接、容器层nvidia-container-toolkit配置是否正确。面试时你至少要能说清这条排查路径。1.4 “自动化运维与平台建设”——考的是工程化能力JD里写“编写脚本、建设平台”潜台词是你不仅要会修问题还要会用代码减少问题。GitLab CI/CD、Ansible批量部署驱动、Prometheus Grafana监控、告警通知这些是基础。稍微进阶一点还要会写K8s Operator或调度器扩展把GPU虚拟化、显存配额、任务优先级管起来。这一块面试官主要看你的项目经验够不够真实。2. 硬件与驱动层最容易翻车的面试开头很多面试者开场就被问住是因为没搞懂GPU运维和传统运维在“硬件观”上的差异。传统服务器看CPU、内存、磁盘GPU服务器多了张卡但这张卡比CPU复杂得多。2.1 一张GPU卡上到底有什么可监控的东西面试官如果问“你怎么判断一块GPU快坏了”绝大多数人只会说看日志。实际上用nvidia-smi -q -d ECC能看到显存单比特/双比特纠错计数这个数值持续增长基本说明显存颗粒有隐患nvidia-smi -q -d PAGE_RETIREMENT能看到显存页是否被退役nvidia-smi -q -d CLOCK能看到当前实际频率与最大频率的差距如果GPU在重负载下频率被压得很低那大概率是供电或散热问题。还有一个容易被忽略的是nvidia-smi -q -d SUPPORTED_CLOCKS它会列出当前驱动支持的最大内存频率和GPU频率组合。有时候你感觉某张卡“算得慢”一查发现它运行在低功耗P8状态压根没进P0满血状态这就不是“玄学”而是电源管理策略或nvlink配置的问题。2.2 驱动、CUDA、cuDNN的版本关系必须张口就来驱动版本向下兼容CUDA版本而CUDA版本又决定了你能装哪个版本的PyTorch/TensorFlow。这个链条必须背熟驱动版本决定最高支持的CUDA版本nvidia-smi右上角显示的CUDA Version是驱动支持的最高版本不是系统里实际装的版本实际运行的是运行库版本可能是conda环境里自带的CUDA Toolkit不一定和系统驱动完全对应cuDNN是深度学习框架调用底层CUDA计算的加速库PyTorch安装时会自带匹配的cuDNN但如果你手动编译TensorFlow就得手动装对应版本的cuDNN。面试问答时还有一个经典坑nvcc -V显示CUDA 12.1nvidia-smi显示CUDA Version 11.4。很多新手以为环境坏了其实完全正常——前者是Toolkit编译器的版本后者是驱动支持的上限版本两者没有必然相等关系。这个点如果你能主动讲出来面试官会立刻觉得你是真跑过环境的。2.3 掉驱动和“d3d设备已移除”这类故障的排查思路Windows环境下常见的“GPU发生崩溃或d3d设备已移除”Linux下对应的就是NVRM报错、驱动挂掉导致Xorg或CUDA程序崩溃。这两种现象背后原因类似驱动与GPU硬件/内核版本不匹配、显存访问越界、供电不稳、温度过高。Linux下面排查第一步是dmesg -T | grep -i nvidia看有没有NVRM: Xid这样的错误码。Xid是NVIDIA驱动的错误码体系比如Xid 79是GPU fell off the bus通常是硬件掉卡或PCIe链路问题Xid 43是显存ECC错误触发停GPUXid 63是GPU正在被其他进程占用导致的冲突。能把Xid错误码认全绝对是很唬人的加分项。再往下就是压力测试。GPU-Burn是面试里会提到的工具它用CUDA的稠密矩阵乘法把GPU负载拉满跑半小时看会不会报错。配合nvidia-smi dmon -s pc可以实时看PCIe读写带宽和电源功耗判断降频和供电抖动。很多人只看nvidia-smi利用率不看dmon这就是业余和专业的差别。3. 容器和K8s层GPU是怎么被“分配”出去的现在的AI任务基本都跑在容器里纯物理机装驱动玩深度学习的环境已经很少了。所以容器和K8s层的GPU调度问题在面试中占比极高。3.1 容器里怎么“看见”GPU早期Docker想用GPU得手动挂--device /dev/nvidia0:/dev/nvidia0和一堆/dev/nvidia-uvm、/dev/nvidiactl设备还要把驱动目录和ldconfig配置同步进容器。这套手动方案很脆弱跑一个PyTorch训练经常提示CUDA error: no kernel image is available或者libcudart.so: cannot open shared object file。现在主流的解法是NVIDIA Container Toolkit它通过nvidia-container-cli在容器启动时自动注入GPU设备和驱动库。Docker侧只需要加--gpus allK8s侧由kubelet调用Device Manager再通过Device Plugin把GPU以扩展资源的形式上报给调度器。这个链路在面试里至少要能从头到尾说一遍kubelet - device plugin - nvidia-container-runtime - nvidia-container-toolkit - GPU驱动。3.2 K8s里GPU是怎么调度的K8s本身不认识GPU它只认CPU和内存。NVIDIA/k8s-device-plugin这个DaemonSet会通过gRPC跟kubelet通信告诉调度器“这台节点上有8张A100”。调度器再把GPU以nvidia.com/gpu这种扩展资源的形式分配给Pod。但这里有几个很深的坑如果Pod没声明limits: nvidia.com/gpu: 1调度器不会分配GPU如果你的GPU不是MIG模式或支持vGPU那么最小调度单位是一整张卡一个Pod哪怕只用1GB显存也会占掉整张卡导致其他Pod没法再用nvidia.com/gpu和nvidia.com/gpumem这种扩展资源不是K8s默认支持的要靠NVIDIA的调度扩展器实现显存隔离。这些点面试官特别喜欢往深处问因为很多人停留在“能调度”的层面一问“如何限制Pod占用显存”就露馅。MIGMulti-Instance GPU是硬件的算力/显存切分方案把一张A100切成多个实例每个实例有独立的显存和计算单元HAMI则是另一种开源GPU虚拟化方案它通过拦截CUDA调用做显存和算力的软隔离。面试时提到这两个词观感会完全不一样。3.3 为什么会出现“GPU在节点上但调度不上去”这道题几乎是必考题。现象kubectl get nodes显示节点Ready但创建GPU Pod一直Pending。可能原因包括Device Plugin没启动或崩溃了导致节点没有上报nvidia.com/gpu资源——用kubectl describe node node看Capabilities里有没有资源节点GPU被其他Pod占满——检查Allocatable和Allocated有污点/Taint没有容忍——检查kubectl describe node | grep TaintsDevice Plugin报错比如驱动不匹配或文件权限问题——看device-plugin的日志。如果面试官再追问“怎么定位”你就要说出kubectl describe pod pod看Events里的调度失败信息再kubectl logs -n kube-system device-plugin-pod去查插件日志。这套两步走是最基础的定位能力。4. AI训练与推理场景大模型时代的必答环节现在的GPU运维岗十有八九在支撑AI团队。不懂深度学习环境的运维很难通过面试。4.1 PyTorch/TensorFlow环境配置的关键细节面试官问你“怎么给算法同学装一套PyTorch GPU环境”你要意识到他不是真的让你“装”而是考你的隔离意识和排错能力。正确做法是先建conda虚拟环境再根据显卡驱动版本去PyTorch官网选对应的安装命令。比如驱动支持CUDA 12.1就可以装pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121。但是要注意装完后必须在Python里验证import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.device_count()) print(torch.cuda.get_device_name(0))torch.cuda.is_available()返回False是最常见的面试场景。排查思路先看驱动是否正常nvidia-smi再看python -c import torch; print(torch.backends.cudnn.enabled)如果驱动正常但PyTorch检测不到GPU大概率是PyTorch版本和CUDA版本不匹配或者是以CPU-only模式装的。4.2 显存不够、OOM、算力不匹配问题的标准答案“CUDA error: out of memory”在AI环境里实在太常见了。面试官问这个问题不是要听你装个watch -n 1 nvidia-smi看显存而是想知道你会不会完整定位先nvidia-smi看显存被谁占用fuser -v /dev/nvidia*查对应进程区分“其他任务占显存”和“当前任务分配失败”当前任务OOM可能是batch size太大、模型太大、或者数据加载内存膨胀需要调整多卡任务还需要看CUDA_VISIBLE_DEVICES是否能隔离进程视角。还有一个很经典的问题“CUDA error: no kernel image is available for execution on the device”。这通常对应热词里的requires device with capability (9, 0) but your GPU has capability (12, 0)意思是程序编译时的SM架构兼容上限低于当前GPU的算力。比如你拿一块新出的Blackwell架构显卡去跑一个为老架构编译的CUDA程序就可能报这个错。解决方向是升级CUDA Toolkit或重新编译程序并对齐GPU的compute capability。这个问题在面试里可以引出你对GPU架构、SM版本的理解妥妥的加分点。4.3 大模型推理和微调场景里的运维新知识大模型时代GPU运维的知识半径又大了一圈。面试可能涉及Ollama这种本地推理工具怎么部署模型文件怎么管理CPU和GPU如何协同DeepSpeed和分布式训练需要什么网络条件NVLink、InfiniBand、TCP/RDMA的区别在哪里DeepMD-Kit这类科学计算软件怎么做GPU版和CPU版的性能对比为什么GPU加速效果不如预期昇腾这类国产GPU的驱动、算子库和CUDA生态的区别在国内信创环境下怎么适配。这些内容不用每个都精通但至少要知道它们在生态里的位置。比如提到foldseek在GPU上部署你至少要能说出它是蛋白质结构比对工具GPU版本比CPU版本快很多部署时要注意CUDA运行时库和显卡算力匹配——这才叫“懂业务”。5. 高频问题30道按类别整理的面试真题清单下面是核心干货。我从JD和实际面试经验出发按类别整理了一份高频问题清单每一道后面都标注了面试官真正想考察的点。你不用背答案但要把每道题的“意图”吃透。5.1 硬件与驱动类序号高频问题考的是什么1一张GPU服务器上有哪些关键硬件部件是否真正拆过机了解电源、风扇、PCIe、NVLink等2nvidia-smi的输出字段每个都代表什么是否熟悉GPU利用率、显存、温度、功耗、P状态、ECC等3驱动和CUDA版本有什么关系是否理解驱动的兼容上限和Toolkit的关系4CUDA、cuDNN、PyTorch之间的关系是什么是否理解深度学习软件栈的层次5如何判断一张GPU卡是否快坏了ECC错误计数、PAGE RETIREMENT、Xid错误码、压力测试6GPU-Burn是什么怎么使用是否做过稳定性测试能否设计GPU测试方案7常见的NVRM Xid错误码你知道哪些排障经验是否丰富8Windows报“d3d设备已移除”可能是什么原因是否接触过Windows GPU工作站能否跨平台排查5.2 Linux系统与驱动管理类序号高频问题考的是什么9Linux下安装NVIDIA驱动的步骤是什么是否熟悉DKMS、nouveau禁用、runfile包安装10升级驱动后系统无法进入图形界面怎么解决故障恢复能力是否知道initramfs和nouveau冲突11怎么看GPU相关内核日志dmesg、journalctl使用熟练度12多张GPU卡的PCIe拓扑怎么查看是否能判断NVLink和PCIe互联关系影响多卡训练13设备文件/dev/nvidia0、/dev/nvidia-uvm的作用是什么是否理解GPU设备驱动的基本模型14如何在服务器上做GPU直通GPU Passthrough虚拟化经验IOMMU、VFIO概念5.3 容器与K8s类序号高频问题考的是什么15Docker容器里如何使用GPUnvidia-container-toolkit配置是否清楚16K8s如何调度GPU扩展资源、Device Plugin机制是否理解17GPU Pod一直Pending可能的原因有哪些能否有步骤地排查调度问题18如何限制一个Pod的GPU显存用量是否了解MIG、HAMI、GPU显存扩展资源19GPU虚拟化有哪些方案怎么选型是否能结合业务场景选技术方案20kubelet重启后GPU资源上报异常怎么办是否熟悉Device Plugin的重启与节点恢复流程21如果一张物理GPU想分给多个Pod用有哪些办法MIG切片、vGPU、CUDA显存虚拟化三类方案的理解22如何查看节点上GPU资源总量和已分配量kubectl describe node资源字段是否熟练5.4 AI训练与推理环境类序号高频问题考的是什么23在Linux上部署GPU版PyTorch你怎么操作环境搭建流程是否懂得验证24torch.cuda.is_available()返回False你怎么排查分层排查思想驱动→运行库→Python包25CUDA Out of Memory的常见原因和解决思路是什么是否会看进程、调batch、查显存分配26多机多卡训练需要哪些网络条件RoCE、InfiniBand、NVLink理解程度27请说说Ollama部署大模型推理的基本流程。是否接触过主流推理工具28DeepSpeed训练报错你会从哪里入手分布式框架的排障路径日志、端口、显存29你知道compute capability是什么意思吗新显卡跑不了旧程序怎么办对GPU架构和CUDA兼容性的理解30用GPU跑一个科学计算软件怎么评估加速效果是否会做基准测试理解CPU/GPU带宽瓶颈5.5 监控、告警与自动化运维类序号高频问题考的是什么31怎么监控GPU集群的温度和功耗是否会用DCGM、Prometheus exporter32GPU利用率高但训练速度慢可能是什么原因是否理解数据加载、CPU、存储带来的瓶颈33你会如何设计GPU集群的告警规则是否有全局监控设计经验34如何批量给几十台GPU服务器安装驱动并验证Ansible脚本能力和版本管理意识35如何做一个GPU坏卡自动发现并通知的机制自动化运维思维36日志集中收集用什么方案GPU日志有什么特殊之处ELK/Loki、GPU事件和Xid日志接入5.6 项目经验与软技能类序号高频问题考的是什么37讲一个你处理过最复杂的GPU故障。是否真的实操过处理过程是否结构化38算法团队说“训练比以前慢”你怎么响应跨团队沟通、优先级判断、问题收敛能力39如果让你从零建一个GPU集群你会怎么规划方案设计能力兼顾性能、成本、可运维性40你能接受7x24小时排班处理GPU故障吗岗位意愿加班和压力承受度41你对国产GPU生态有什么了解是否关注行业趋势昇腾、海光、寒武纪等42你平时怎么学习GPU相关的新知识自学能力和信息获取渠道6. 现场发挥怎么把一次GPU故障排查讲成面试加分项问题清单背得再熟现场表达不行也白搭。这一节我说两个真实的面试场景一个反面、一个正面你看完就明白差距在哪。6.1 反面示范只讲结论不讲链路面试官问“遇到过GPU掉驱动吗怎么处理的”反面回答“遇到过一般是把驱动重装一下就好了。”完了这个回答的问题在于面试官无法判断你是真的排查过还是只会重启。重装驱动只是动作你没有展示判断依据——你凭什么认为是驱动问题而不是硬件问题你重装之前做了哪些验证重装之后用什么手段确认确实解决了6.2 正面示范用STAR结构讲排查链路正面回答可以这样说“有一次训练集群里有两张卡频繁报Xid 79错误现象是GPU从总线掉线任务中断。我先用dmesg -T确认错误码再查看nvidia-smi -q -d ECC发现其中一张卡ECC计数异常增长另一张卡的PCIe链路降级了。初步判断不是驱动版本问题而是硬件链路问题。于是我做了三步验证第一把疑似坏卡和另外一台正常机器的卡互换看错误是否跟着走第二在故障机器上跑GPU-Burn压力测试发现掉卡概率明显提升第三检查服务器日志发现供电单元曾经有过一次电压异常记录。最后结论是电源供电不稳定导致GPU掉卡不是驱动问题。处理方案是调整供电策略、更换电源模块重新跑48小时压测和AI训练任务验证。之后还加了一个Xid错误码的告警规则方便下次自动发现。”这套回答好在哪它有原因假设、有验证步骤、有技术工具dmesg、ECC、GPU-Burn、有最终结论、有复盘沉淀。面试官听完大概率会点头因为你展示了一个“会思考的运维”而不是“会执行的运维”。6.3 一个覆盖考点很全的故障案例脚本我再帮你拆一个“容器里用不了GPU”的案例你可以把这个案例的排查链路完整背下来面试时尽量在叙述中带出知识点。现象开发反馈新起的K8s Pod里跑PyTorch报错torch.cuda.is_available()是False。排查链路先在节点上执行nvidia-smi确认物理卡和驱动正常kubectl describe pod看到容器资源里没有nvidia.com/gpu发现YAML忘了配limits加上limits后重启仍然报错看device-plugin日志发现nvidia-container-cli初始化失败提示library nvidia-ml.so not found检查/etc/docker/daemon.json的nvidia运行时配置发现nvidia-container-toolkit没装好重装后恢复进容器执行nvidia-smi确认正常再跑PyTorch通过。这个案例里面覆盖了K8s调度、容器运行时、驱动库、PyTorch环境四层知识几乎是一串必考点的完整串联。你在面试中提到“先分物理层、再查资源层、再查运行时层”这种分层排查思维比单纯背命令有效得多。6.4 反问环节怎么问才显专业面试最后面试官一般会问“你有什么想问我的”。很多人问薪资、加班这没错但如果你想展示专业性可以问这几个方向“咱们这边GPU集群的规模大概是多大调度用的是原生的K8s还是有自研平台”“训练任务主要跑的是大模型微调还是CV/NLP传统模型对显存和算力的压力点不太一样我想了解一下。”“目前GPU故障的告警和自动化处理流程做到什么程度了这是我很感兴趣的方向。”这几个问题既体现了你对业务的关心又显得你对技术细节有判断力。比干巴巴地问“公司福利怎么样”要强很多。6.5 最后提醒几个心态层面的坑第一不要背答案。面试官追着问两句背的和真会的一听就能分辨。第二遇到不会的问题最忌讳的是强行编。可以说“这个场景我没实际碰过但基于我的理解我会先这样排查……”——既诚实又展示思路。第三GPU运维通常需要跟算法团队协作面试官很在意你的沟通表达方式回答时不要过多甩专业名词要让人觉得你能把技术方案讲给非运维同事听。我个人这些年带GPU集群最大的体会是这个岗位的面试本质上不是在考你“知道多少命令”而是在考你“遇到没见过的故障时有没有一套靠谱的思考框架”。把硬件、驱动、容器、AI环境四条线在脑子里搭成一个坐标系不管面试官从哪个点切入你都能往上下游延展。这才是这篇文章真正想帮你建立的底层能力。