这张图片是 nvidia-smi
(NVIDIA System Management Interface)的输出,显示了 两块 NVIDIA A10 GPU 的状态信息。以下是关键数据的解析:
📌 GPU 总览
GPU ID | 型号 | 总显存 | 已用显存 | 剩余显存 | GPU 利用率 | 功耗 | 温度 |
---|---|---|---|---|---|---|---|
0 | NVIDIA A10 | 23.02 GiB | 19.81 GiB | 3.21 GiB | 100% | 114W / 150W | 63°C |
1 | NVIDIA A10 | 23.02 GiB | 10.24 GiB | 12.78 GiB | 100% | 79W / 150W | 58°C |
🔹 关键点分析
- 两块 GPU 都在使用(计算负载 100%),说明你的任务已经分配到了 两块 GPU 进行计算。
- GPU 0(显存占用 19.81 GiB)比 GPU 1(10.24 GiB)占用更多,可能是 模型分配不均匀,建议优化多 GPU 负载均衡。
- 显存几乎耗尽(GPU 0 只剩 3.21 GiB),如果继续运行大模型推理可能会触发
CUDA Out of Memory (OOM)
错误。
📌 运行的进程
在 Processes 部分,显示了 一个 Python 进程(PID: 35388) 在两块 GPU 上运行:
/miniconda3/envs/python310/bin/python
→ 说明 Python 代码运行在 Miniconda 虚拟环境(Python 3.10) 中。- GPU 0:19.81 GiB
- GPU 1:10.24 GiB
- 这个 Python 进程同时占用了 两块 GPU,但是显存分配不均匀。
📌 可能的问题
-
显存不足(GPU 0 已接近满载)
- 你可能会遇到
CUDA Out of Memory
错误。 - 解决方案:
- 减小 batch size(
batch_size=8
→batch_size=4
) - 启用
torch.cuda.empty_cache()
释放缓存 - 手动分配 GPU 负载更均匀
- 减小 batch size(
- 你可能会遇到
-
模型分布不均
- GPU 0 的显存占用 比 GPU 1 高出近 10GB,可能是
device_map="auto"
没有合理分配。 - 解决方案:
- 手动调整层分配(前 50% 层到 GPU 0,后 50% 层到 GPU 1)
- 使用
DataParallel
或DistributedDataParallel
更均匀地分布计算。
- GPU 0 的显存占用 比 GPU 1 高出近 10GB,可能是
📌 解决方案
1️⃣ 释放 GPU 显存
如果你的任务报 CUDA OOM
,尝试杀掉占用 GPU 的进程:
kill -9 35388 # 终止 PID 35388 进程
或者一次性清理所有 Python 进程:
kill -9 $(nvidia-smi | grep python | awk '{print $5}')
2️⃣ 让 PyTorch 释放缓存
在 Python 代码中:
import torch
torch.cuda.empty_cache()
3️⃣ 优化 GPU 负载
如果你的 transformers
模型占用 GPU 0 过多,可以手动分配:
from transformers import AutoModelForCausalLMMODEL_NAME = "你的模型名称"
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, trust_remote_code=True, device_map={"transformer.h.0-11": 0, "transformer.h.12-23": 1}
)
这样 前 12 层在 GPU 0,后 12 层在 GPU 1,让负载更均匀。
🔥 总结
- 你当前在两块 NVIDIA A10 GPU 上运行 Python 代码
- GPU 0 负载比 GPU 1 高很多,可能会导致
CUDA OOM
- 优化建议
- 降低 batch size
- 释放显存
- 手动分配 GPU 负载
- 使用
DataParallel
或DistributedDataParallel
如果你遇到 CUDA Out of Memory
,可以尝试 释放显存 或 优化模型部署策略。你当前是在训练还是推理?需要帮助调整 batch size
或 DataParallel
吗? 🚀