一、分类说明
整理所读到论文中经常使用的内存分析工作负载。
按照特点可以分为延迟敏感型、带宽密集型;按照作用可以分为AI、HPC、Database等
博客用于内存性能评估的workload中整理了常见的workloads,但是主要还是重在基本介绍,没有对其访存特征等镜像介绍。
本文借鉴这篇博客,自己分析、运行相关workloads。
二、LLM inference
1.llama.cpp
轻量化的大模型推理框架、适用于嵌入型系统、边缘节点上进行大模型推理。
访存特征:
- 模型权重加载阶段:采用大块连续内存、或者可选
mmap()
映射模型参数。具有较好的空间局部性、较差的时间局部性(一次加载一次使用) - 推理阶段:主要是KV-Cache需要大量内存访问,读写频繁、更新频繁、各个层中存在一些张量操作也需要访存。高读密集型
内存需求:
同其他大模型推理需求相似,内存需求量主要来自模型权重与KV-cache。模型权重内存使用量与精读有关、KV-Cache与依赖层数有关。一个qwen-7b在llama.cpp的内存占用量约为14~16B
其他:
llama.cpp的内存管理采用统一预分配内存池,使用offset二次分配与访问,最后集中释放的方式进行内存管理。其ggml内存中有对内存的一次性malloc(ggml_init)ggml_new_tensor、ggml_new_tensor_1d进行内存内存二次分配、ggml_free进行内存释放。Arena 分配器(“批发内存,零售指针,整单清场”)