forked from OAID/AutoKernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
45 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,5 @@ | ||
<p align="center"><img width="30%" src="doc/logo.png" /></p> | ||
|
||
# AutoKernel | ||
|
||
## 简介 | ||
|
@@ -20,7 +22,7 @@ AutoKernel是由OPEN AI LAB提出的高性能算子自动优化工具,可以 | |
AutoKernel分为三个模块: | ||
* 算子生成器: | ||
|
||
该模块使用了开源项目[Halide](https://github.com/halide/Halide);Halide是业界广泛使用的自动代码生成项目,它首次提出将计算和调度分离。该模块的输入是和硬件无关的算子计算描述,输出是相应后端的优化汇编代码/目标文件。 | ||
该模块使用了开源项目[Halide](https://github.com/halide/Halide);Halide是业界广泛使用的自动代码生成项目,它首次提出将计算和调度分离。该模块的输入是和硬件无关的算子计算描述,输出是相应后端的优化汇编代码/目标文件; | ||
|
||
* 自动搜索模块: | ||
|
||
|
@@ -39,35 +41,67 @@ docker pull openailab/autokernel | |
# 启动容器,进入开发环境 | ||
docker run -it openailab/autokernel /bin/bash | ||
``` | ||
docker里面提供了安装好的Halide和Tengine | ||
docker里面提供了安装好的Halide和Tengine: | ||
``` | ||
/workspace/Halide # Halide | ||
/workspace/Tengine # Tengine | ||
``` | ||
|
||
克隆AutoKernel项目 | ||
克隆AutoKernel项目: | ||
``` | ||
git clone https://github.com/OAID/AutoKernel.git | ||
``` | ||
一键生成算子汇编代码 | ||
我们首先看看`autokernel_plugin/src/`的文件目录: | ||
``` | ||
autokernel_plugin/src/ | ||
|-- CMakeLists.txt | ||
|-- direct_conv | ||
| |-- build.sh | ||
| |-- direct_conv.cpp | ||
| |-- direct_conv.h | ||
| |-- direct_conv_gen.cc | ||
|-- im2col_conv | ||
| |-- build.sh | ||
| |-- im2col_conv.cpp | ||
| |-- im2col_conv.h | ||
| `-- im2col_conv_gen.cc | ||
`-- plugin_init.cpp | ||
``` | ||
可以看到`src`目录下有两个文件夹,每个文件夹的目录下有: | ||
- xxx_gen.cc, 用Halide语言的算子描述(algorithm)和调度策略(schedule) | ||
- build.sh 用于编译xxx_gen | ||
- xxx.h 和 xxx.cpp是用Tengine算子接口封装的算子实现 | ||
|
||
一键生成算子汇编代码: | ||
``` | ||
cd AutoKernel/autokernel_plugin | ||
chmod +x -R . | ||
./scripts/generate.sh #自动生成算子汇编文件 | ||
``` | ||
一键编译 `libAutoKernel.so` | ||
运行完这一步,可以看到原来的目录下多了两个自动生成的文件: | ||
``` | ||
|-- im2col_conv | ||
| |-- halide_im2col_conv.h | ||
| |-- halide_im2col_conv.s | ||
|-- direct_conv | ||
| |-- halide_direct_conv.h | ||
| `-- halide_direct_conv.s | ||
``` | ||
接下来使用自动生成的文件,把Autokernel注册进tengine,一键编译 `libAutoKernel.so`: | ||
``` | ||
mkdir build | ||
cd build | ||
cmake .. | ||
make -j4 | ||
``` | ||
运行测试 | ||
生成的库在`/workspace/AutoKernel/autokernel_plugin/build/src/libautokernel.so` | ||
|
||
运行测试,在测试代码中调用`load_tengine_plugin()`: | ||
``` | ||
cd AutoKernel/autokernel_plugin | ||
./build/tests/tm_classification -n squeezenet | ||
``` | ||
运行结果: | ||
分类网络的运行结果如下: | ||
|
||
``` | ||
AutoKernel plugin inited | ||
|
@@ -86,13 +120,15 @@ max time is 55.932 ms, min time is 55.932 ms | |
-------------------------------------- | ||
ALL TEST DONE | ||
``` | ||
可以看到,输出结果显示调用了`AutoKernel plugin`里的函数。 | ||
|
||
## 开发者指南 | ||
|
||
* 如何快速开发一个自动优化的新算子:[doc/how_to_add_op.md](doc/how_to_add_op.md) | ||
* AutoKernel教程:[doc/tutorials](doc/tutorials/readme.md) | ||
|
||
|
||
## Roadmap | ||
- [Road map](doc/roadmap.md) | ||
|
||
## License | ||
|
||
|
@@ -103,4 +139,4 @@ ALL TEST DONE | |
- Github issues | ||
- QQ 群: 829565581 | ||
- Email: [email protected] | ||
- Tengine 社区: https://www.tengine.org.cn | ||
- 微信公众号: Tengine开发者社区 |