Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【PaddlePaddle Hackathon 3】OpenVINO 项目贡献任务合集 #44253

Closed
Ligoml opened this issue Jul 12, 2022 · 0 comments
Closed

【PaddlePaddle Hackathon 3】OpenVINO 项目贡献任务合集 #44253

Ligoml opened this issue Jul 12, 2022 · 0 comments

Comments

@Ligoml
Copy link
Contributor

Ligoml commented Jul 12, 2022

(此 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 转换

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 转换

提交内容

提交地址:https://github.com/openvinotoolkit/openvino

  1. https://github.com/openvinotoolkit/openvino/tree/master/src/frontends/paddle/src/op 添加算子映射的实现
  2. https://github.com/openvinotoolkit/openvino/blob/master/src/frontends/paddle/src/op_table.cpp 中注册该算子映射
  3. https://github.com/openvinotoolkit/openvino/tree/master/src/core/tests/frontend/paddle/test_models/gen_scripts 添加该算子的单测实例生成脚本
  4. https://github.com/openvinotoolkit/openvino/blob/master/src/core/tests/frontend/paddle/op_fuzzy.cpp 注册单测实例
  5. PR 中需附上该7算子在 Paddle 中算子说明或者参考实现,例如:
    https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/topk_cn.html#topk
  6. 提交时需附上单测结果的截图
  7. 提交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/*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants