大模型面經—如何評估顯卡利用率及顯卡運用優化方法 原創
?本篇總結了顯卡利用率評估方法及顯卡運用優化方法。
本篇來總結一些顯卡優化的經驗,還是按照面經的形式給出,希望能給到大家一些實際訓練效率優化的幫助~
下面是一個快捷目錄。
一、如何評估顯卡利用率?
二、如何優化顯存利用率?
一、如何評估顯卡利用率
使用deepseed時,zero3如果沒有 nvlink,多卡訓練下會變慢很多,下面有三種方法來評估訓練時發揮了多少GPU性能。
1. flops 比值法
采用Nvidia可參考的顯卡峰值計算速度進行計算
gpu 利用率 = 實測的flops/顯卡理論上的峰值flops
實測的flops可以直接用 DeepSpeed Flops Profiler直接得到。
舉例:deepspeed 實測flops 100tflops,而用的是A100卡理論峰值312tflops,可以得到GPU 利用率只有 32.05%
2. throughout 估計法
根據論文中的訓練速度或者吞吐量進行計算,一般論文中會說明 3300 token/s/gpu
gpu 利用率 = 實際吞吐量 / 論文中的吞吐量(假設利用率100%)
舉例:
實測訓練時處理樣本速度為 3 example/s,一共有4卡,max length 2048,則吞吐量為 1536 token/s/gpu ;
根據llama 論文知道,他們訓練7B模型的吞吐量約為 3300 token/s/gpu,那么GPU利用率只有46.54%
3. torch profiler 分析法
利用torch profiler 記錄各個函數的時間,將結果在tensorboard上展示,在gpu kenel視圖下, 可以看到tensor core 的利用率,比如30%。
profiler是一個用于分析訓練的一體化工具。它可以記錄CPU操作時間、CUDA內核計時、內存消耗歷史,只需要將訓練嵌入到分析器上下文中,如下所示:
import torch.autograd.profiler as profiler
with profiler.profile(
activities=[ProfilerActivity.CPU, ProfilerActivity.CUDA],
on_trace_ready=torch.profiler.tensorboard_trace_handler('./logs'),
) as prof:
train(args)
然后就可以啟動tensorboard查看分析軌跡。注意這里需要先安裝torch-tb-profiler。
最推薦的還是方法三,可以比較詳細地監控訓練過程。
二、如何優化顯存利用率
如果發現GPU利用率很低,那么需要采取一些優化措施。以下是一些優化 GPU 性能的方法:
1. 減少日志IO操作頻率
輸出頻率過多非常影響訓練效率,所以一旦開始正式訓練盡量把日志精簡;有必要的話print也盡量少一些。
2. 基于類似于torch profiler 這樣的性能監控方法結合具體的情況分析瓶頸
3. 數據加載效率過低
有可能是數據加載速度慢,導致 GPU 等待 CPU 提供數據。
可以通過下面的方法:
1)增加數據加載線程數, 使用框架(如 PyTorch 或 TensorFlow)中 `DataLoader` 的 `num_workers` 參數增加數據加載的并發。
2)使用數據預緩存,在訓練開始前,將數據轉換為 Tensor 并存儲到高效格式(如 TensorFlow 的 TFRecord 或 PyTorch 的 `.pt` 文件)。
3)啟用異步加載,利用異步數據加載技術,例如 PyTorch 的 `prefetch`。
4)使用更快的存儲設備,如果數據集較大,建議將數據存儲在 NVMe SSD 或 RAMDisk 上。
4. 模型架構優化
可以剪枝,簡化架構,使用 cuDNN 的優化版本或 TensorRT 加速等更高效的算子進行計算。
5. 調整batch大小
有可能batch數過小,可以增大批量大小,盡量增大 batch_size 以提高并行計算效率,但需注意顯存是否足夠;并且進行混合精度訓練, 使用混合精度(float16 + float32)訓練(如 PyTorch 的 `torch.cuda.amp` 或 TensorFlow 的 `mixed_float16`),減少顯存占用,從而支持更大的批量。
6. 學習率和優化器調整
還有一個可能是訓練配置不對,學習率不合理或優化器效率較低。
可以使用合適的學習率策略(如 Warmup、Cosine Annealing);或者使用高效的優化器(如 AdamW)或框架支持的 fused 優化器(如 PyTorch 的 `fused_adam`)。
參考文獻
[1]【DeepSpeed 教程翻譯】三,在 DeepSpeed 中使用 PyTorch Profiler做性能調試和Flops Profiler教程翻譯 - 知乎
[2] 【LLM面試題】顯存問題/評估微調所需顯存_llm微調需要顯存多大-CSDN博客
?
文轉載自公眾號瓦力算法學研所,作者:喜歡瓦力的卷卷
