Deltann Graph Compiler Stack

August 7, 2020 · View on GitHub

Deltann Graph Compiler Stack 推理架构基于 tensorflow 进行深度定制,依赖 tensorflow 本身的 grappler 以及custom ops 机制完成高性能的图匹配逻辑和高性能算子库,Deltann Graph Compiler Stack可以方便使用户在tensorflow 内部完成大规模复杂子图替换,并采用已提供的高性能算子库支持模型在各个平台的高性能计算。

Deltann Graph Compiler Stack 核心依赖用户安装的tensorflow环境,用户并不需要从源码安装 tensorflow,可以极大的减少使用成本。模型部署时,用户只需要把动态链接库一起发布即可。

Deltann Graph Compiler Stack包含两部分核心组件:

算法子图搜索引擎 的核心逻辑是做子图匹配和替换,其支持用户使用任意tf语法定义的复杂算法结构,并根据用户训练好的模型,自动匹配这部分已定义算法并做替换,替换成用户设置的具体算子,最终完成大规模tensorflow子图结构的替换,从而极大的提升计算密集型和访存开销,为进一步性能提升打下坚实基础。

为了配合算法子图搜索引擎,Deltann Graph Compiler Stack 还提供了***高性能的算子库*** delta_infer/custom_ops, 高性算子库可以同时支持GPU、X86的高性能算子(未来可以扩展更多支持),目前核心支持transformer模型的若干实现,核心支持硬件NV GPU平台 x86 后续会逐步添加

编译

编译custom_ops & delta_infer高性能库

$ conda activate tf-2.2.0 # 也就是说,需要安装tf 2.2.0(或者其它版本) 的环境下完成编译
$ mkdir build & cd build
$
$ cmake .. -DBUILD_DELTA_INFER_CUSTOM_OPS=ON -DBUILD_GPU=ON -DBUILD_WITH_EXAMPLE=ON
$ make -j$(nproc)
$ ls delta_infer/ # 生成插件库地址
libdelta_infer.so 
$ ls delta_infer/custom_ops/  # 高性能算子库
libcustom_ops.so
$ cd example/c++/ # 测试目录

Python API

Delta Inference Lib 主要提供算法子图搜索引擎的Python API,安装方式如下;

####Install pybind11

$ cd ${DELTA_PROJECT_ROOT_DIR}/tools && make pybind11.done

直接安装

$ cd delta_infer/python
$ python setup.py install 

wheel 打包

$ cd delta_infer/python
$ python setup.py bdist_wheel
$ pip install dist/delta_infer-0.0.1-cp36-cp36m-linux_x86_64.whl

Note

  1. Test under TF version 2.2.0 and GCC version 7.4.0.
  2. 高性能算子库目前支持transformer模型,提供GPU高性能实现
  3. 高性算子库部分代码参考了Fast Transformer
  4. 目前已知的一个问题,公版的 tf2.0 wheel 安装包是有问题的,包内部缺少tensorflow/core/protobuf的内部cpp文件内容, 最终会导致undefined连接错误。而我们按照wheel包的编译方式从源码重新编译发现,没有上述问题,所以有理由怀疑是开源版本的安装包在安装过程中剪裁了部分内容。