ANNC:基于 AI 技术的编译器项目

Accelerated Neural Network Compiler.

Branch5Tags4

ANNC (Accelerated Neural Network Compiler)

目录

项目简介

ANNC (Accelerated Neural Network Compiler) 是一个基于 OpenXLA/XLA 框架的 AI 编译器,专注于 CPU 平台的神经网络推理优化。它在提供跨平台通用优化的基础上,特别针对 ARM 架构(尤其是鲲鹏处理器)进行了深度定制和性能调优,通过图融合、算子优化和常量折叠等技术,显著提升模型在目标平台上的推理性能。

主要特性

特性名称 说明 特性启用
TensorFlow图融合 提供TensorFlow模型层面的图融合与图重写功能,并在后端提供自定义融合算子的手动实现 annc-opt -I input_model.pb -O output_dir embed_hash_bucket
export ENABLE_BISHENG_GRAPH_OPT=""
XLA图融合 提供ANNC XLA图融合特性,识别并消除融合后的重复计算 export ANNC_FLAGS="--graph-opt"
算子优化 提供ANNC算子优化特性,将GEMM算子和Softmax算子通过模式匹配接入OpenBLAS和XNNPACK高性能后端 export ANNC_FLAGS="--gemm-opt"
export XLA_FLAGS="--xla_cpu_enable_xnnpack=true"
常量折叠 提供GEMM算子常量折叠优化,消除运行时数据重排开销(详细说明 annc-opt -I input_model.pb -O output_dir layout_matmul
+ export ANNC_FLAGS="--layout-matmul"

构建环境和依赖

  • Bazel: 6.5.0
  • Python: 3.x
  • GCC/G++: 支持 C++17 或更高版本
  • 依赖库:
    • OpenXLA/XLA (commit: 40008cb2c85749ae436be61c40d3279cb24705c7)
    • OpenBLAS
    • XNNPACK

构建与使用

详细的构建和测试流程请参考 ANNC 测试指南

构建指南

构建共享库

bazel --output_user_root=./output build -c opt annc/service/cpu:libannc.so

构建静态库

bazel --output_user_root=./output build -c opt annc/service/cpu:annc

构建测试工具

bazel --output_user_root=./output build -c opt annc/tools/kp-opt:kp-opt
bazel-bin/annc/tools/kp-opt/kp-opt {test_hlo_cluster_file.dat}

调试模式构建

bazel --output_user_root=./output build -c opt --copt="-g" annc/service/cpu:libannc.so

使用本地缓存目录

bazel --output_user_root=./output --distdir=/path/to/proxy build -c opt annc/service/cpu:libannc.so

使用方法

Python API

提供 annc-opt 工具对 PB 模型进行预编译,配合 ANNC 编译优化,实现图优化和常量折叠特性。

annc-opt 工具在模型部署前对 TensorFlow SavedModel 进行预处理,执行模式匹配和图重写操作,将复杂的算子组合融合为高效的自定义算子;同时在编译阶段通过常量折叠技术预先计算静态张量,减少运行时开销,提升推理性能。

# 工具安装
cd /path_to_ANNC/python
python3 setup.py bdist_wheel
python3 -m pip install dist/*.whl --force-reinstall

# 模型转换
# 常量折叠预重排打包
annc-opt -I input_model.pb -O output_dir layout_matmul
# TensorFlow图融合
annc-opt -I input_model.pb -O output_dir embed_hash_bucket

特性开关配置

ANNC 提供了丰富的特性开关,通过环境变量 ANNC_FLAGS 进行配置,可以精细控制各种优化策略的启用。

开关名称 类型 说明 默认值
--gemm-opt 组合标志 启用所有 GEMM_OPT 类型优化(包括 matmul、layout-matmul、disable-tf-matmul-fusion) false
--graph-opt 组合标志 启用所有 GRAPH_OPT 类型优化(包括 sps-emd-2) false
--matmul GEMM_OPT 注册标准 matmul 算子(使用 DNN_CUSTOM_CALL) false
--layout-matmul GEMM_OPT 注册 layout_matmul 算子,支持自定义内存布局(使用 FUSED_OPERATION) false
--disable-tf-matmul-fusion GEMM_OPT 禁用 TensorFlow 层面的 matmul 融合,交由 ANNC 处理 false
--batch-matmul NONE 注册 batch_matmul 算子,支持批量矩阵乘法 false
--matmul-add NONE 注册 matmul_add 融合算子(MatMul + Add) false
--matmul-add-relu NONE 注册 matmul_add_relu 融合算子(MatMul + Add + ReLU) false
--sps-emd-2 GRAPH_OPT 启用 sparse_embedding2 融合优化,优化稀疏嵌入操作 false
--pooling NONE 启用 pooling 融合优化,将多个操作融合为单个 pooling 操作 false
--annc-pass TF_OPT 启用 ANNC 优化器 pass,对 TensorFlow 计算图进行优化 true
使用示例
# 启用所有 GEMM 和图优化
export ANNC_FLAGS="--gemm-opt --graph-opt"

# 启用特定的 GEMM 优化
export ANNC_FLAGS="--layout-matmul --matmul-add-relu"

# 只启用 matmul
export ANNC_FLAGS="--matmul"

版本历史

版本 发布日期 新增特性
v0.0.4 2026-05 常量折叠优化
v0.0.3 2025-11 TensorFlow图融合(9个Embedding融合算子)、算子优化(Kernel Selector智能路由 + XNNPACK集成)
v0.0.2 2025-08 XLA图融合(CPU感知图编译增强、多核搜索系统)、算子优化(ENABLE_ANNC编译控制)
v0.0.1-alpha 2025-05 XLA图融合(XLA/LLVM Patch机制)、算子优化(GEMM/Softmax接入OpenBLAS)

许可证

  • 本项目核心代码采用 Apache License 2.0
  • third_party/kpgemm 采用 BSD 3-Clause License (OpenBLAS)

贡献声明

欢迎大家为社区做贡献,如果使用过程中有任何问题/建议,或者需要反馈特性需求和bug报告,可以提交Issues联系我们,具体贡献方法可参考这里。同时也欢迎大家在讨论专区展开讨论交流。感谢您的支持。

Introduction

Accelerated Neural Network Compiler.

Customize my domain