llama.cpp:CPU与GPU、共享VRAM与推理速度

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

NVidia GPU在Windows用户中提供了共享GPU内存功能,允许系统内存用作虚拟VRAM。这可以在GPU的专用视频内存不足时提供帮助,但会对性能产生影响。作者测试了将GPU内存溢出到RAM对LLM训练速度的影响,并发现尽可能填充PC的RAM并使用共享GPU内存没有太大意义。作者还测试了不同的卸载设置,并发现使用50%的GPU和50%的CPU几乎完全填满了VRAM而没有溢出。结果显示,使用50/50的GPU/CPU具有最高的每秒标记数和最快的第一个标记时间。使用100%的GPU卸载会导致更多的系统内存使用。作者得出结论,使用共享VRAM没有太大意义。

🔎

延伸解读

共享显存的实际性能代价

文章测试表明,当显存不足时,Windows 的共享 GPU 内存功能虽能避免程序崩溃,但会严重拖慢推理速度。在 100% GPU 卸载设置下,约一半模型权重被迫留在系统内存,导致每秒仅生成 0.69 个 token,且首 token 时间长达 4.66 秒。这说明共享显存并非免费扩展,而是以显著性能损失为代价。

卸载比例对速度的影响

作者对比了三种卸载设置,发现 50% GPU 与 50% CPU 的组合表现最佳:每秒生成 2.32 个 token,首 token 时间仅 0.42 秒,且几乎完全填满显存而未溢出。相比之下,100% GPU 卸载因溢出到共享内存反而最慢,100% CPU 卸载则居中。这表明合理分配 GPU 和 CPU 负载比单纯依赖 GPU 更高效。

系统内存占用的差异

测试还显示,100% GPU 卸载时系统内存使用量比 50/50 设置多出约 20GB,无论是否启用 use_mlock。这进一步说明,当模型超出显存容量时,强制全部卸载到 GPU 会导致大量数据在系统内存和显存之间交换,不仅降低速度,还增加内存压力。因此,盲目追求 GPU 卸载比例并不可取。

❓

Q&A

共享GPU内存的功能是什么?

共享GPU内存允许系统内存作为虚拟VRAM使用,以帮助在专用视频内存不足时继续运行应用程序。

使用共享VRAM对性能有什么影响?

使用共享VRAM会对性能产生影响,可能导致更高的系统内存使用。

在LLM训练中,GPU内存溢出到RAM的影响是什么?

测试表明,填充PC的RAM并使用共享GPU内存对LLM训练速度没有太大意义。

哪种卸载设置在性能上表现最好?

50%的GPU和50%的CPU设置在每秒标记数和第一个标记时间上表现最好。

使用100% GPU卸载会有什么后果?

使用100% GPU卸载会导致更多的系统内存使用,并可能影响性能。

为什么作者认为使用共享VRAM没有太大意义?

作者认为共享VRAM没有太大意义,因为它对性能的影响和内存使用的增加并不值得。

🏷️

标签

➡️

继续阅读