主要观点总结
本文主要探讨了模型推理时在GTX 4090上是否应开启CUDA Graph的问题。通过一系列实验观察,发现在不同模型和配置下,CUDA Graph对性能的影响不尽相同。文章总结了在哪种情况下应开启CUDA Graph,以及背后的可能原因。
关键观点总结
关键观点1: GTX 4090上的模型推理性能与CUDA Graph的开启与否有关。
作者在GTX 4090上使用了VLLM、HuggingFace和SGLang等推理框架,并测试了不同模型在不同配置下的性能。发现对于某些模型和配置,开启CUDA Graph对性能无影响,而对于其他模型和配置,开启CUDA Graph能显著提高性能。
关键观点2: 特定情况下需要开启CUDA Graph。
作者在实验中观察到,在GTX 4090上,对于某些特定的模型配置(如TP4或TP8),需要开启CUDA Graph来保持高性能。而对于其他配置(如TP1/TP2),开启CUDA Graph对性能没有明显影响。
关键观点3: 实验结果可能与底层kernel launch的实现有关。
作者猜测开启与否的背后原因可能与底层kernel launch的实现有关。他提到在不同配置下,开启CUDA Graph可能会影响kernel launch的时间,从而影响推理性能。
文章预览
0x0. 前言 今天聊一个最近有趣的发现,那就是模型推理时是否应该在 GTX 4090 上开启 cuda graph ?在 GTX 4090 上用推理框架如VLLM/SGLang等,什么情况下才应该开启 CUDA Graph?目前只能说一下我的观察过程和结论,背后可能的原因也请大佬不吝赐教。 0x1. 问题发生的背景 某天,我想看一下在 GTX 4090 单卡情况下使用VLLM和Qwen2-7B时离线推理一个 prompt 的时候相比于 HuggingFace 原始的推理有多大的性能提升。 这里主要关注decoding过程中每个iter的速度,因为prefill只有一次,且 VLLM/SGLang 都不会通过 cuda-graph 来加速prefill过程,并且decoding会触发频繁的 cuda kernel launch。 然后,我写了下面2个脚本,分别用于测试VLLM和HuggingFace Qwen2-7B的推理性能,我使用nsight system来profile,脚本开头是profile的指令。 vllm 推理脚本 # /opt/nvidia/nsight-systems/2024.5.1/bin/nsys profile --trace-fork-before-exec
………………………………