Description
(此 ISSUE 为 PaddlePaddle Hackathon 第三期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第三期】任务总览)
每个框架都有自己的模型和算子表达。OpenVINO 对 PaddlePaddle 的支持需要从 Paddle 的算子映射转换到 OpenVINO 的算子。在这个过程中,我们将熟悉深度学习神经网络的算子表达和计算。开发请参考 贡献指南,任务列表如下:
No.95:为 OpenVINO 实现 Paddle 算子 box_coder 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:进阶
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 box_coder 转换。box_coder 全称是 Bounding Box Coder,用于编码/解码带有先验框信息的目标边界框,算子说明可参考 box_coder。该任务中的算子难度较高,只需要实现其 decode 模式即可。Paddle2ONNX 展示了如何将 box_coder 映射到 ONNX 的算子,我们也可以用同样的方式将其映射到 OpenVINO 的算子。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.96:为 OpenVINO 实现 Paddle 算子 group_norm 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:进阶
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 group_norm 转换。 group_norm 组归一化是将 channels 分为很多组,对每组求均值和方差,然后对每组进行归一化。算子说明可参考 group-norm。该任务中的算子难度较高。Paddle2ONNX 展示了如何将 group_norm 映射到ONNX的算子,我们也可以用同样的方式将其映射到 OpenVINO 的算子。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.97:为 OpenVINO 实现 Paddle 算子 p_norm 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:进阶
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 p_norm 转换,该算子在 paddle 中的具体实现可参考 p_norm transfer to phi kernels #40819 。该任务中的算子难度较高。Paddle2ONNX 展示了如何将 p_norm 映射到ONNX的算子,我们也可以用同样的方式将其映射到 OpenVINO 的算子。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.98:为 OpenVINO 实现 Paddle 算子 tile 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 tile 转换,该算子根据参数 repeat_times 对输入 x 的各维度进行复制。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.99:为 OpenVINO 实现 Paddle 算子 ceil 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 ceil 转换,ceil 为向上取整运算函数。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.100:为 OpenVINO 实现 Paddle 算子 gather_nd 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 gather_nd 转换,该 OP 是 gather 的高维推广,并且支持多轴同时索引。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.101:为 OpenVINO 实现 Paddle 算子 sum 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 sum 转换,该 OP 用于对输入的一至多个 Tensor 或 LoDTensor 求和。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.102:为 OpenVINO 实现 Paddle 算子 elementwise_floordiv 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 elementwise_floordiv 转换,该 OP 是逐元素整除算子,输入 x 与输入 y 逐元素整除,并将各个位置的输出元素保存到返回结果中,算子说明可以参考 elementwise-floordiv。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.103:为 OpenVINO 实现 Paddle 算子 elementwise_mod 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 elementwise_mod 转换,该 OP 是逐元素取模算子,输入 x 与输入 y 逐元素取模,并将各个位置的输出元素保存到返回结果中,算子说明可以参考 elementwise-mod。具体做法请参考Top k v2 openvinotoolkit/openvino#11731
No.104:为 OpenVINO 实现 Paddle 算子 where_index 转换
- 技术标签:深度学习框架,C++,Python,OpenVINO
- 任务难度:基础
- 详细描述:在这个任务中,你需要为 OpenVINO 实现 Paddle 算子 where_index 转换,具体实现可以参考 [PHI] Migrate where_index op #40255 具体做法请参考Top k v2 openvinotoolkit/openvino#11731
提交内容
提交地址:https://github.com/openvinotoolkit/openvino
- 在https://github.com/openvinotoolkit/openvino/tree/master/src/frontends/paddle/src/op 添加算子映射的实现
- 在https://github.com/openvinotoolkit/openvino/blob/master/src/frontends/paddle/src/op_table.cpp 中注册该算子映射
- 在https://github.com/openvinotoolkit/openvino/tree/master/src/core/tests/frontend/paddle/test_models/gen_scripts 添加该算子的单测实例生成脚本
- 在https://github.com/openvinotoolkit/openvino/blob/master/src/core/tests/frontend/paddle/op_fuzzy.cpp 注册单测实例
- PR 中需附上该7算子在 Paddle 中算子说明或者参考实现,例如:
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/topk_cn.html#topk - 提交时需附上单测结果的截图
- 提交PR时需在PR标题加上【PaddlePaddle Hackathon 3】字样
技术要求
- 熟练掌握 C++
- 了解OpenVINO和PaddlePaddle相关深度学习计算算子
- 了解OpenVINO推理引擎相关技术背景
参考文档
OpenVINO算子库文档:
https://github.com/openvinotoolkit/openvino/blob/master/docs/ops/opset9.md
OpenVINO算子参考实现:
https://github.com/openvinotoolkit/openvino/tree/master/src/core/reference/include/ngraph/runtime/reference
PaddlePaddle算子库文档:
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/index_cn.html
PaddlePaddle算子参考实现:
https://github.com/PaddlePaddle/Paddle/tree/develop/python/paddle/fluid/tests/unittests
Paddle2ONNX算子映射参考代码
https://github.com/PaddlePaddle/Paddle2ONNX/tree/develop/paddle2onnx/legacy/op_mapper
https://github.com/PaddlePaddle/Paddle2ONNX/tree/develop/paddle2onnx/mapper
可以先生成测试模型用Paddle VisualDL查看paddle算子的输入输出以及属性: https://www.paddlepaddle.org.cn/paddle/visualdl/demo/graph
OpenVINO源码编译方法:
参考:https://github.com/openvinotoolkit/openvino/wiki
$ git clone https://github.com/openvinotoolkit/openvino.git
$ cd openvino
$ git submodule update --init --recursive
$ chmod +x install_build_dependencies.sh
$./install_build_dependencies.sh
$ export OPENVINO_BASEDIR=`pwd`
$ mkdir build
$ cd build
$ cmake \
-DCMAKE_BUILD_TYPE= Release -DCMAKE_INSTALL_PREFIX="${OPENVINO_BASEDIR}/openvino_dist" \
-DPYTHON_EXECUTABLE=$(which python3) \
-DENABLE_MYRIAD=OFF \
-DENABLE_VPU=OFF \
-DENABLE_PYTHON=ON \
-DNGRAPH_PYTHON_BUILD_ENABLE=ON \
-DENABLE_DEBUG_CAPS=ON \
-DENABLE_CPU_DEBUG_CAPS=ON \
-DENABLE_TESTS=ON \
..
$ make -j$(nproc); make install
单测测试方法:
$ cd bin/intel64/Release
$ ./paddle_tests --gtest_filter=PaddleFuzzyOpTest/FrontEndFuzzyOpTest.testOpFuzzy/*