gpu_poor 项目介绍
gpu_poor 是一款服务于用户了解其GPU是否能够运行特定大型语言模型(LLM)以及能达到多少token每秒的工具。它能够计算需要的GPU内存和每秒能够处理的token数量,并且支持量化计算和推理框架的分析。
主要功能与特点
1. 计算显存需求 💾
gpu_poor 能够帮助用户确定特定LLM在其GPU上运行所需的显存大小。通过这种计算,用户可以直观地看到每个部分的内存使用情况,包括总显存、KV缓存、模型大小、激活内存等。
2. 计算每秒可处理的token数量 ⏱️
该工具还可以估算在用户的GPU上每秒能够处理的token数量,帮助用户了解其设备的处理能力和潜在的性能瓶颈。
3. 估算微调所需时间 ⌛️
gpu_poor 提供每次前向传播所需的时间,便于用户计划和优化微调过程。
应用场景
这个项目专为需要了解如下信息的用户设计:
- 在特定GPU上每秒可以处理多少token?
- 完成微调需要多少总时间?
- 哪种量化配置适合我的GPU?
- 我的GPU能处理的最大上下文长度和批次大小是多少?
- 选择哪种微调方法? 是全微调、LoRA还是QLoRA?
- GPU内存主要消耗在哪些方面?如何调整模型以适应GPU?
计算详细说明
计算过程综合考虑了模型的大小、KV缓存、激活内存、优化器和梯度内存以及CUDA等开销,以便给出较为精确的内存估算。值得注意的是,模型的具体配置、输入数据和CUDA版本都会影响结果的准确性,不过项目力求将误差控制在500MB以内。
常见问题解答
-
仅凭模型大小来判断性能是否够用行不通
由于推理和训练过程中的KV缓存和激活内存会消耗大量资源,因此仅看模型大小是不够的。例如,llama-2-7b模型的序列长度为1000时,仅KV缓存就会占用1GB的额外内存。
-
计算结果的准确性
尽管影响因素众多,但该工具力求通过优化模型来提供尽可能准确的计算结果。所有数据的误差均控制在500MB内。
待办事项
- 增加对vLLM的支持
- 添加QLoRA的支持
- 添加估算token/s的方法为特定GPU服务
- 改进获取超参数的逻辑(考虑到隐藏层/中间层/层数随尺寸变化)
- 增加AWQ的支持
通过gpu_poor,用户可以更好地规划与优化GPU资源在大型语言模型上的应用,确保性能达到预期水平。工作中的任何疑问或问题可以通过项目链接**https://rahulschand.github.io/gpu_poor/**了解更多信息或提出解决方案。