A tool for ONNX model:
- 构建LLM模型
- 解析ONNX模型并且编辑: 常量层折叠, Ops fusion.
- 模型分析:Tensor形状推理,每个Op的MACs统计
- Compute Graph 和 Shape Engine.
- 内存压缩:激活Tenosr的内存压缩和权重的内存压缩
- 支持量化模型和稀疏模型.
支持的模型有:
- NLP: BERT, T5, GPT, LLaMa, MPT(TransformerModel)
- Diffusion: Stable Diffusion(TextEncoder, VAE, UNET)
- CV: Detic, BEVFormer, SSD300_VGG16, ...
- Audio: sovits, LPCNet
在1秒内快速分析10个hugging face模型. 将模型保存为和llama.cpp一样简单的ONNX格式. code ref
model name(1k input) | MACs(G) | Parameters(G) | KV Cache(G) |
---|---|---|---|
gpt-j-6b | 6277 | 6.05049 | 0.234881 |
yi-1.5-34B | 35862 | 34.3889 | 0.125829 |
microsoft/phi-2 | 2948 | 2.77944 | 0.167772 |
Phi-3-mini-4k | 4083 | 3.82108 | 0.201327 |
Phi-3-small-8k-instruct | 7912 | 7.80167 | 0.0671089 |
Phi-3-medium-4k-instruct | 14665 | 13.9602 | 0.104858 |
Llama3-8B | 8029 | 8.03026 | 0.0671089 |
Llama-3.1-70B-Japanese-Instruct-2407 | 72888 | 70.5537 | 0.167772 |
QWen-7B | 7509 | 7.61562 | 0.0293601 |
Qwen2_72B_Instruct | 74895 | 72.7062 | 0.167772 |
通过硬件参数快速获取每个模型的第一个token延时和后续token延时
model_type_4bit_kv16bit | memory_size(GB) | Ultra-155H_first_latency | Ultra-155H_next_latency | Arc-A770_first_latency | Arc-A770_next_latency | H100-PCIe_first_latency | H100-PCIe_next_latency |
---|---|---|---|---|---|---|---|
gpt-j-6b | 3.75678 | 1.0947 | 0.041742 | 0.0916882 | 0.00670853 | 0.0164015 | 0.00187839 |
yi-1.5-34B | 19.3369 | 5.77095 | 0.214854 | 0.45344 | 0.0345302 | 0.0747854 | 0.00966844 |
microsoft/phi-2 | 1.82485 | 0.58361 | 0.0202761 | 0.0529628 | 0.00325866 | 0.010338 | 0.000912425 |
Phi-3-mini-4k | 2.49649 | 0.811173 | 0.0277388 | 0.0745356 | 0.00445802 | 0.0147274 | 0.00124825 |
Phi-3-small-8k-instruct | 4.2913 | 1.38985 | 0.0476811 | 0.117512 | 0.00766303 | 0.0212535 | 0.00214565 |
Phi-3-medium-4k-instruct | 7.96977 | 2.4463 | 0.088553 | 0.198249 | 0.0142317 | 0.0340576 | 0.00398489 |
Llama3-8B | 4.35559 | 1.4354 | 0.0483954 | 0.123333 | 0.00777784 | 0.0227182 | 0.00217779 |
Llama-3.1-70B-Japanese-Instruct-2407 | 39.4303 | 11.3541 | 0.438114 | 0.868475 | 0.0704112 | 0.137901 | 0.0197151 |
QWen-7B | 4.03576 | 1.34983 | 0.0448417 | 0.11722 | 0.00720671 | 0.0218461 | 0.00201788 |
Qwen2_72B_Instruct | 40.5309 | 11.6534 | 0.450343 | 0.890816 | 0.0723766 | 0.14132 | 0.0202654 |
你可以用onnx_tool.Model类去加载任意ONNX模型,变成易于编辑的python类实例,你可以:
用onnx_tool.Graph类去改变图结构;
用onnx_tool.Node类去改变每个Op的属性和输入输出Tensor;
用onnx_tool.Tensor改变任意Tensor的数据类型和数据内容.
修改完成后,只需要调用Graph或者Model类的save_model接口可以保存所有的修改内容到新的ONNX模型.
每个模型分析报告需要基于某个特定的输入Tensor的形状。所以在分析模型之前要先进行一次形状推理。
浮点乘加数(等于2倍的浮点操作数), 内存占用(字节数), 参数量(参数个数)稀疏的块的形状, 稀疏块的稀疏率(全为0的稀疏块的稀疏率), 参数的稀疏率(数值为0的稀疏率)
how to use: data/Profile.md.
pytorch usage: data/PytorchUsage.md.
tensorflow
usage: data/TensorflowUsage.md.
examples: benchmark/examples.py.
移除了所有的Tensor形状计算op, 更新动态Tensor的形状可以用Shape Engine来替代。推理引擎只需要负责计算图的计算,不需要考虑Tensor的形状更新。
examples:
benchmark/shape_regress.py.
benchmark/examples.py.
如何集成 Compute Graph 和 Shape Engine 到cpp推理引擎中: data/inference_engine.md
MHA and Layernorm Fusion for Transformers
Resnet18 fusionhow to use: data/Subgraph.md.
BERT examples: benchmark/examples.py.
Pattern fusion: benchmark/do_fusion.py.
可以帮助实现model parallel。
how to use: data/Subgraph.md.
对于LLM和高分辨CV模型, 激活内存的压缩可以帮助节省整个模型的内存使用.
压缩方法可以在大多数模型上实现 5% 内存压缩率.
例如:
model | Native Memory Size(MB) | Compressed Memory Size(MB) | Compression Ratio(%) |
---|---|---|---|
StableDiffusion(VAE_encoder) | 14,245 | 540 | 3.7 |
StableDiffusion(VAE_decoder) | 25,417 | 1,140 | 4.48 |
StableDiffusion(Text_encoder) | 215 | 5 | 2.5 |
StableDiffusion(UNet) | 36,135 | 2,232 | 6.2 |
GPT2 | 40 | 2 | 6.9 |
BERT | 2,170 | 27 | 1.25 |
code example: benchmark/compression.py
pip install onnx-tool
OR
pip install --upgrade git+https://github.com/ThanatosShinji/onnx-tool.git
python>=3.6
If pip install onnx-tool
failed by onnx's installation, you may try pip install onnx==1.8.1
(a lower version like this) first.
Then pip install onnx-tool
again.
- Loop op is not supported
Results of ONNX Model Zoo and SOTA models
注意对于支持动态输入形状的模型,模型的MACs随输入形状的改变而改变。下表中的MACs数据是基于data/public/config.py中的配置输入形状得到。 带有所有Tensor形状的模型和分析报告可以从下面的网盘中下载: baidu drive(code: p91k) google drive
|
|