Skip to content

codeHui/llm-performance-evaluation-script

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

本文目的主要是个人学习记录,请见谅不够详细和存在错字(打字太快,没详细检查)。
下面是我们来自康奈尔大学的暑期实习生撰写的英文报告(学术报告风格,更多图表),是其实习的一个工作学习总结,感兴趣可以查看:
English Report (by our Summer Intern).pdf
背景:该测试分析是在2024年,当时网上未搜到相关的评估数据,所以我们自己设计做了这个脚本实验测试,下面是测试的细节和结果分析。

硬件

1张Nvidia A100 80G

部署模型

Llama3.1 70b 4bit 4bit是指quantization,4bit是最小的(代表精度最低(模型大小最小),但性能最好,ollama只支持4bit)。

硬件性能监控工具

GPU监控工具

  • 开源可视化工具nvitop 安装命令:pip install nvitop 运行命令:nvitop nvitop.png
  • Nvidia自带监控
    watch -n 1 nvidia-smi

CPU和系统内存监控工具

Linux的top命令(top后再按1,可以查看多核cpu每个核心的占用)

部署框架

https://github.com/ollama/ollama

命令

ollama pull llama3.1:70b
ollama run llama3.1:70b

测试脚本与结果

本次测试的最重要的结果是平均每个线程的每秒token生成数(生成的总token数 / 响应总时间),因为chatgpt是流式生成token(感兴趣的可以看ChatGPT流式显示单词的技术实现 )的, 所以 tokens/second是直接影响用户体验的数据,衡量了llm的文字生成速度(一个token约等于一个文字)

输出定量token测试

prompt

tell a story in " + str(world_count) + " words:

脚本

70b_output-stream.py

Test Result

Number of Requests Output Word Count Average Tokens Average Time (s) Average Speed (tokens/s)
1 25 28 1.22156 22.9214
1 50 63 2.49925 25.2076
1 100 119 4.68078 25.4231
1 400 456 18.0439 25.2717
1 800 821 32.9355 24.9275
2 25 31 1.4789 20.9615
2 50 60.5 2.84061 21.2983
2 100 125 5.59961 22.323
2 400 460.5 21.3357 21.5835
2 800 877 42.0024 20.8798
4 25 30.5 2.0107 15.1689
4 50 66.5 4.21136 15.7906
4 100 122.75 7.56207 16.232
4 400 478.25 31.1035 15.3761
4 800 1066.75 76.1915 14.0009

输入定量token测试

prompt

"give a title for below text in 10 words: " + text (text has 484 words)

脚本

70b_input-stream.py

Test Result

Number of Requests Output Word Count Average Tokens Average Time (s) Average Speed (tokens/s)
1 10 16 2.27796 7.02383
2 10 19 2.63539 7.20955
4 10 16.75 4.58825 3.65063

性能分析

系统内存和GPU内存占用变化分析

系统内存和GPU内存占用变化

gpu.png

系统内存总结

  • 如果部署40G的llm, 系统内存大于40G肯定行(小于不确定,没测过),系统会先将llm加载到系统内存中(比较慢,感觉1秒1G的速度),然后瞬间将40G的llm加载到GPU的内存。
  • 之后并发请求测试也基本完全不会用到系统内存。
  • if the system memory is very big (220G, much bigger than the Llama3.1 70b(40G))
  • when execute ollama pull, the system memory will cache the llm file(40G)
  • when execute ollama run, the system memory will cache the llm file(40G) if not cached yet, once done, the llm file will be copied to GPU memory(VRAM) immediately
  • once the llm is running, there is no need for system memory to cache LLM

GPU内存总结

  • 在并发测试中,GPU内存一直保持42G,并无增加,所以GPU内存大于LLM应该就行 同时我测了如果用

  • 如果有两个A100 80G的话,ollama 也只会使用一个GPU(这里不多讨论多GPU的方案,也有很多细节)

系统CPU占用分析

我测试了,不管单个还是并发访问下,也只有一个CPU core接近满载80~100%运行(不确定为什么只会利用一个core的CPU,以及CPU在做什么计算工作?有知道的话麻烦评论告知我,谢谢) 由于只占用一个core,所以cpu肯定不是瓶颈

GPU分析

  • 问llm问题时,GPU基本满载,可以确定GPU决定了响应速度
  • Llama最多会并发处理4个请求,超过的会先放到队列里,所以该设计能防止out of memory(把脚本改成8个并发,从响应时间可以看出超过4个的会放到队列里)

其他分析总结

  1. 由上面两个测试可以看出,虽然input和output都占用总token,但output的生成更慢 (所以可以解释到GPT-4o 的收费,也是output tokens比input tokens 贵)

其他考虑因素

Context window

Llama3.1的context window是128k, 但我测试了“让llm生成3000字的故事”,实际只会返回1000多字的答案。 所以我上面只测试了1000以下的token数(一般用户场景够),但如果真的是用满了128k的context window,是否系统内存和gpu内存会有比较明显的提升,我也不敢确定(因为没测过,有测过的也可以share下)

About

Llama 70B 4-bit Performance Evaluation on NVIDIA A100 80G

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages