llama.cpp:CPU与GPU、共享VRAM与推理速度
内容提要
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没有太大意义,因为它对性能的影响和内存使用的增加并不值得。