Skip to content

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

Closed
@Ligoml

Description

@Ligoml

(此 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/*

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions