GPU的运维与管理

1 XID 错误事件

XID 是 NVIDIA 的错误码,可以通过命令:

dmesg -T | grep -i "NVRM: Xid"

根据 XID 可以定位故障,下面是一些常见的 XID 事件:

XID    说明
13    Graphics Engine Exception。通常是数组越界、指令错误,小概率是硬件问题。
31    GPU memory page fault。通常是应用程序的非法地址访问,极小概率是驱动或者硬件问题。
43    GPU stopped processing。通常是用户应用自身错误而非硬件问题。
45    Preemptive cleanup, due to previous errors – Most likely to see when running multiple cuda applications and hitting a DBE。通常是用户手动退出或者其他故障(硬件、资源限制等)导致 GPU 应用退出,Xid 45 只是一个结果,通常需要分析日志。
68    NVDEC0 Exception。通常是硬件或驱动问题。
32    Invalid or corrupted push buffer stream。事件由 PCIE 总线上管理 NVIDIA 驱动和 GPU 之间通信的 DMA 控制器上报,通常是 PCI 质量问题导致,而非用户程序产生。
38    Driver firmware error。通常是驱动固件错误而非硬件问题。
48    Double Bit ECC Error(DBE)。当 GPU 发生不可纠正的错误时,会上报 Xid48 事件。该错误也会同时反馈给用户的应用程序。通常需要重置 GPU 或重启节点来清除这个错误。
61    Internal micro-controller breakpoint/warning。GPU 内部引擎停止工作,客户业务已经受到影响。
62    Internal micro-controller halt。与 Xid61 的触发场景类似。
63    ECC page retirement or row remapping recording event。当应用程序遭遇到 GPU 显存硬件错误时,NVIDIA 自纠错机制会将错误的内存区域 retire 或者 remap,retirement 和 remapped 信息需要记录到 infoROM 中才能永久生效。Volt 架构:记录 ECC page retirement 事件到 infoROM 成功。Ampere 架构:记录 row remapping 事件到 infoROM 成功
64    ECC page retirement or row remapper recording failure。与 Xid63 的触发场景类似,只是 Xid63 代表 retirement 和 remapped 信息成功记录到了 infoROM,Xid64 代表该记录操作失败。
74    NVLINK Error。NVLink 硬件错误产生的 Xid,收到此事件说明 GPU 已经出现严重硬件故障,需要下线维修。
79    GPU has fallen off the bus。GPU 硬件检测到掉卡,无法从总线上检测到,收到此事件说明 GPU 已经出现严重硬件故障,需要下线维修。
92    High single-bit ECC error rate。硬件或驱动故障。
94    Contained ECC error。当应用程序遭遇到 GPU 不可纠正的显存 ECC 错误时,NVIDIA 错误抑制机制会尝试将错误抑制在踩到硬件故障的应用程序,而不会让错误导致 GPU 上的所有应用程序受到影响。当抑制机制成功抑制错误时,会产生 Xid 94 事件,仅影响遭遇了不可纠正 ECC 错误的应用程序。
95    Uncontained ECC error。与 Xid94 的触发场景类似。只是 Xid94 代表抑制成功,而 Xid95 代表抑制失败,此时表明运行在该 GPU 上的所有应用程序都已受到影响。

GPU 过高

通常 GPU 温度应该在 85°C 以下,超过时会出现锁频性能下降的问题。执行以下命令,能直接看到 GPU 编号及温度。

nvidia-smi --query-gpu=index,temperature.gpu --format=csv,noheader
 
0, 28
1, 40
2, 44
3, 30
4, 27
5, 27
6, 31
7, 32

解决方案:

除了一些物理的方法,从纯软件层考虑,可以直接将温度超过阈值的 GPU 上面的应用程序杀掉,使其更换到其他的 GPU 上。

3 重启掉卡,nvswitch 报错

systemctl status nvidia-fabricmanager.service

或者

less /var/log/fabricmanager.log | grep error

看到有 NVlink、NVSwitch 报错,或者报nvidia-smi 找不到 device handle,Unknown Error 错误,或者重启之后少卡。

解决方案:

启用 nvidia-persistenced 持久模式,让驱动程序保持加载状态,可以很大幅度的缓解这个问题。

4 Pod 中 nvidia-smi 报错 Function not Found
在 Pod 中执行命令报错:

nvidia-smi
 
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.129.03             Driver Version: 535.129.03   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA TITAN X (Pascal)        On  | 00000000:03:00.0 Off |                  N/A |
| 23%   26C    P8               8W / 250W | Function Not Found   |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

因为 Pod 中的 cuda 版本过低,与节点上的 cuda 版本不匹配。

解决办法:

加上环境变量,重启应用:

 

LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/lib/x86_64-linux-gnu:/usr/local/nvidia/lib

5 显存无法释放

执行命令:

nvidia-smi
 
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05             Driver Version: 535.104.05   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA A800-SXM4-80GB          On  | 00000000:10:00.0 Off |                    0 |
| N/A   32C    P0              68W / 400W |  42058MiB / 81920MiB |      0%      Default |
|                                         |                      |             Disabled |
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+

会看到没有进程使用显卡,但是显存依然被大量占用。

同时可以发现有一批杀不死的僵尸进程。

ps aux | grep -E '\<defunct\>'
root      966461  0.0  0.0   6432  2488 pts/0    S+   11:30   0:00 grep --color=auto -E \<defunct\>
root     2215172  0.0  0.0      0     0 ?        Zl   Apr04   1:10 [python] <defunct>
root     2215428  0.0  0.0      0     0 ?        Zl   Apr04   0:00 [python] <defunct>
root     2215442  0.0  0.0      0     0 ?        Zl   Apr04   0:00 [python] <defunct>

解决办法:

依次尝试重启 Kubelet、Docker、主机,即可释放显存资源。

6 Docker Hang 住,节点 NotReady


在 Kubelet 中看到 PLEG is not healthy 相关错误日志。在 Docker 中没有异常日志。

可能是 runc hang 住了,因为 pipe 默认大小只有 64 MB,对于高性能计算场景不够用。

解决办法:

设置为 1GB,这里设置的是 262144 * 4K = 1GB。

echo "fs.pipe-user-pages-soft=262144" >> /etc/sysctl.conf && sysctl -p

7 df/ls命令hang 住, 无法响应

查看 hang 住的进程

strace df -h
 
stat("/data/kubelet/pods/af4c411c-bafa-4322-9a21-e5c60ab1658e/volumes/kubernetes.io~nfs/workspace-pv",

找到相关的 mount point

mount | grep mmt-10289-v2-1-4
 
1.1.1.1:/cfs-fSfmHNQjNA/workspace on /data/kubelet/pods/af4c411c-bafa-4322-9a21-e5c60ab1658e/volumes/kubernetes.io~nfs/workspace-pv type nfs (ro,relatime,vers=3,rsize=131072,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.8.254.230,mountvers=3,mountport=300,mountproto=tcp,local_lock=none,addr=10.8.254.230)

确认目录已经不可使用:

ls /data/kubelet/pods/af4c411c-bafa-4322-9a21-e5c60ab1658e/volumes/kubernetes.io~nfs/workspace-pv

此时应该 hang 住无法响应。通常是远端服务 1.1.1.1 已经无法访问,但挂载的客户端未清理导致。

强行卸载目录:

umount -f /data/kubelet/pods/af4c411c-bafa-4322-9a21-e5c60ab1658e/volumes/kubernetes.io~nfs/workspace-pv

 

 

<think>好的,用户之前问过如何为不同部门的公司网络划分网段和实现高可用性,现在又转向询问GPU服务器的运维包括哪些方面。这说明用户可能是在负责公司的基础设施建设,或者正在规划IT架构,需要全面了解不同方面的运维知识。 首先,我需要明确GPU服务器运维的核心内容。用户可能想知道从硬件到软件,再到监控和优化,具体要关注哪些点。他们可能担心如何确保GPU服务器的稳定性、性能以及安全性,尤其是在高负载或长时间运行的情况下。 考虑到用户之前的网络规划问题,他们可能对高可用性、冗余设计有特别关注。所以在回答GPU服务器运维时,可能需要强调硬件冗余、散热、电源管理这些方面,因为这些直接影响服务器的可用性。同时,软件层面的驱动和固件更新、任务调度、容灾备份也是关键点。 另外,用户可能对成本优化感兴趣,比如如何合理分配GPU资源,避免浪费,或者如何监控使用情况来调整资源分配。需要提到资源监控工具和策略,比如Prometheus、Grafana等。 安全性方面,用户可能担心数据泄露或未经授权的访问,尤其是在处理敏感数据时。所以需要包括物理安全、网络安全、权限控制等内容。 用户还可能想知道具体的运维工具和最佳实践,比如使用Kubernetes进行容器编排,或者Ansible进行自动化部署。这些工具能帮助他们高效管理GPU服务器集群。 最后,应该考虑用户的实际应用场景,比如是否用于机器学习训练、推理、高性能计算等,不同场景下的运维重点可能有所不同。需要给出通用性的建议,同时提示根据具体业务调整策略。 总结下来,回答需要结构清晰,涵盖硬件、软件、监控、安全、优化等方面,并且结合用户之前的关注点,比如高可用性和网络架构,来提供全面的运维指南。</think>--- ### 一、GPU服务器运维核心目标 - **稳定性**:确保7×24小时持续运行(尤其是训练/推理任务) - **性能优化**:最大化GPU利用率(避免显存/算力闲置) - **安全保障**:防止数据泄露算力滥用 --- ### 二、硬件运维 #### 1. **物理环境管理** - **散热要求**:GPU密集场景需强制水冷(建议机柜温度≤25℃) - **电源冗余**:双路PDU供电 + UPS(按GPU功耗预留20%余量) - 示例:NVIDIA A100单卡功耗250W,8卡服务器需至少2500W电源 - **硬件监控**:通过IPMI/iDRAC/iLO实时查看: - GPU温度(阈值设置:≤85℃报警) - 风扇转速、ECC内存错误计数 #### 2. **故障处理** - **常见故障**: - GPU显存报错(需执行`nvidia-smi --gpu-reset`) - PCIe通道降速(检查金手指氧化或接触不良) - **备件策略**:至少保留10%的GPU卡、电源模块作为热备 --- ### 三、软件驱动管理 #### 1. **基础环境** - **驱动版本**:严格匹配CUDA Toolkit版本(如NVIDIA驱动470.x对应CUDA 11.4) - **依赖隔离**:推荐使用Docker/Kubernetes部署(避免库冲突) - 基础镜像示例:`nvidia/cuda:11.8.0-base-ubuntu22.04` #### 2. **任务调度** - **资源分配**:通过Kubernetes Device Plugin或Slurm集群管理: ```bash # Slurm提交GPU任务示例 sbatch --gres=gpu:tesla_v100:2 train.sh ``` - **抢占策略**:为高优先级任务预留GPU(通过`nvidia-smi -c 3`独占模式) --- ### 四、监控性能调优 #### 1. **监控指标** | 指标 | 工具 | 报警阈值 | |---------------------|--------------------------|---------------------| | GPU利用率 | DCGM Exporter + Prometheus | <10%持续1小时 | | 显存占用率 | nvidia-smi | >90%持续10分钟 | | PCIe带宽 | gpustat --debug | 持续降速至x8模式 | #### 2. **性能优化手段** - **计算优化**:启用TensorCore(`TF_ENABLE_CUBLAS_TENSOR_OP_MATH=1`) - **显存压缩**:使用NVIDIA A100的Memory P2P特性 - **IO瓶颈缓解**: - 共享存储:部署GPUDirect RDMA(InfiniBand网络) - 本地缓存:用NVMe SSD构建RAID0作为临时存储 --- ### 五、安全容灾 #### 1. **访问控制** - **物理安全**:BIOS/UEFI禁用USB启动 + 机柜指纹锁 - **权限分级**: - 普通用户:仅能通过JupyterLab提交任务 - 管理员:SSH密钥登录 + 二次验证 #### 2. **数据保护** - **加密传输**:NVIDIA GPUDirect Storage(启用AES-256加密) - **容灾方案**: - 实时备份:对训练checkpoint启用S3对象存储同步 - 断点续训:通过Horovod Elastic自动恢复任务 --- ### 六、典型运维场景 #### 场景1:多用户资源争用 **解决方案**: - 部署vGPU(如NVIDIA vComputeServer) - 配置Kubernetes ResourceQuota: ```yaml resources: limits: nvidia.com/gpu: 2 ``` #### 场景2:驱动版本冲突 **处理流程**: 1. 创建驱动隔离环境:`sudo apt-mark hold cuda-drivers` 2. 使用容器化部署:`docker run --gpus all --cgroup-parent=/gpuserver nvidia/cuda:11.8.0` --- ### 七、运维工具链推荐 | 类型 | 工具 | 用途 | |------------|------------------------|-------------------------------| | 监控 | Grafana + DCGM Exporter | 可视化GPU集群状态 | | 部署 | Ansible GPU Playbook | 批量安装驱动/CUDA | | 日志 | ELK Stack | 分析NVIDIA驱动内核日志 | | 自动化测试 | NVIDIA DGXtest | 验证GPU硬件稳定性 | > **注**:对于大规模集群(≥32台GPU服务器),建议部署NVIDIA Base Command Manager实现集中运维
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值