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 4】核心框架开源贡献其他任务合集 #50663

Closed
cloud2009 opened this issue Feb 20, 2023 · 1 comment
Closed
Assignees

Comments

@cloud2009
Copy link

cloud2009 commented Feb 20, 2023

【PaddlePaddle Hackathon 4】核心框架开源贡献其他任务合集

(此 ISSUE 为 PaddlePaddle Hackathon 第四期活动的任务 ISSUE,更多详见 【PaddlePaddle Hackathon 第四期】任务总览

注:报名参与其他任务的同学可以向 paddle-hack@baidu.com 发邮件,我们会邀请你加入对应的社群参与讨论。开发请参考 贡献指南,任务列表如下:

No.89:清理动态 import语句,解决circle import 问题

  • 任务难度:基础
  • 详细描述:
    • 现状:目前飞桨框架 python 目录下部分模块函数存在动态 import 语句,即 import 语句并未放到文件的最开始地方。这种动态 import 语句存在两个问题:
      • 可能因为存在 circle import 而临时添加的,但不合规范
      • 每次调用函数都会解释执行 import,影响性能
  • 任务提交:
    • 设计文档:在 paddle/community 仓库下新建 RFC,并提供技术设计思路文档
    • 提交 PR 至Paddle代码仓库。在保持 API 不变的情况下,可适当调整函数或文件位置,以实现「分层管理」

No.90:JITLayer C++ 端暴露AnaLysisConfig 给用户,提升易用性

  • 任务难度:进阶
  • 详细描述:
    • 现状:paddle/fluid/jit 目录下的Layer是孵化中的项目,旨在提供一个与Python端nn.Layer相同使用方式的后端数据结构,底层封装了预测执行引擎:AnalysisPredictor——推理部署的核心引擎。目前存在如下问题:
      • jit/engine/predictor_engine.h 里的 PredictorEngine 数据结构并未向用户提供灵活 AnaLysisConfig 选项
      • AnaLysisConfig 选项可用于设置 GPU、CPU、MKLDNN、以及自定义优化策略,对提升 Layer 易用性有重要意义。
  • 任务提交:
    • 设计文档:在 paddle/community 仓库下新建 RFC,并提供技术设计思路文档
    • 提交PR代码至 paddle/fluid/jit 目录下

No.91:TensorHook支持动转静

  • 任务难度:进阶
  • 详细描述:
    • 现状:动态图下 Tensor 提供了 register_hook 方法,支持用户注册一个hook函数自定义反向grad的数据计算逻辑,此接口仅支持动态图,静态图下缺失对 Tensor 的反向grad同等的逻辑实现,属于动静行为不统一。当用户模型代码包含 register_hook 的用法时,动转静会报错。
  • 任务提交:
    • 设计文档:在 paddle/community 仓库下新建 RFC,并提供技术设计思路文档
    • 提交PR代码至 python/paddle/jit 动转静目录下

No.92:ppocr det&rec 全量化模型在 tim-vx(晶晨/瑞芯微) 等设备上的精度提升

  • 技术标签:深度学习,C++、压缩量化
  • 任务难度:进阶
  • 详细描述:
    • PP-OCRv3 rec FP32 精度为 76.87,使用PaddleSlim auto-compress全量化后 CPU 侧 eval 精度为75.43,但 GPU、NPU 等目前精度较低。需要通过调整量化工具参数、微调模型等手段,让 PP-OCRv3 rec 的全量化模型在 NPU 上的精度趋近 FP32,目标精度为70.0。
    • 硬件平台为 tim-vx(晶晨/瑞芯微)等任一芯原NPU,如瑞芯微RV1126、1109、晶晨A311D等,系统 OS 建议使用 Linux。
  • 提交内容:
    • 完成PP-OCRv3 rec的全量化模型提交,提交至 Paddle-Lite-Demo repo下 Paddle-Lite-Demo/ocr/assets/ 目录中,会有 RD 同学整理归档。
    • 中文文档,修改 PaddleSlim auto-compress 的文档,描述对该模型在使用auto-compress量化过程中做了哪些修改(量化配置修改、模型修改等)以达到精度在端侧的提升。提交至 PaddleSlim repo下PaddleSlim/example/auto_compression/ocr/README.md 文档文件。
    • 验收标准:先提交该全量化模型以及模型在 tim-vx(晶晨/瑞芯微) 等任一芯原NPU上的精度结果(开源数据集icdar2015,精度70.0以上),待RD验证通过后,提交 PR 到Paddle-Lite-Demo 和 PaddleSlim 仓库。
  • 技术要求:部署
    • 熟练掌握 C++、Python 开发。
    • 了解 AI 模型及全量化。
    • 了解 OCR 算法。
    • 掌握 PaddleSlim auto-compress量化工具、PP-OCRv3 模型的修改、Paddle-Lite + TIM-VX 芯原 NPU 部署。

No.93:增加 linux 下 cpu tensor file_descriptor 传输方案

  • 技术标签:深度学习,C++
  • 任务难度:基础
  • 详细描述:
    • 背景:Multiprocessing 是支持进程间 Tensor 传输的一种方式。#37302 初步支持了paddle的tensor进程间传输,需要继续完善,可参考 paddle.multiprocessing 设计文档
    • 目前 paddle 支持了 file_system 的 cpu 传输方式,以文档形式存储传输tensor 的中间态。file_descriptor 打开文件句柄之后立即删除,更加安全,不容易发生文件残留。
  • 提交内容:
    • 方案设计文档,并提 PR 至 community repo 的 rfcs 目录;
    • 完成 file_descriptor 的支持。提交到 Paddle 主 repo
    • file_descriptor的功能对齐竞品,全面且完善支持,切换为默认传输方式。
    • 验收标准:
      • 自测传输10000次,不发生文件残留;
      • 传输速度与竞品差距10%内
  • 技术要求:
    • 熟练掌握 C++、Python 开发。

No.94:GPU tensor 全局引用计数

  • 技术标签:深度学习,C++
  • 任务难度:进阶
  • 详细描述:
  • 提交内容:
    • 方案设计文档,并提 PR 至 community repo 的 rfcs 目录;
    • 支持CudaIPCSentDataCudaIPCRefcountedFiles等功能,将ipc 传输后的Tensor与CudaIPCSentData使用UniqueVoidPtr绑定。全局引用计数。
    • 验收标准:
      • 自测传输10000次,不发生文件残留
      • 传输速度与竞品差距10%内
  • 技术要求:
    • 熟练掌握 C++、Python、CUDA 代码编写。

No.95:CPU tensor mac/win32 传输 + 适配 DataLoader

  • 技术标签:深度学习,C++
  • 任务难度:进阶
  • 详细描述:
    • 背景:Multiprocessing 是支持进程间 Tensor 传输的一种方式。#37302 初步支持了paddle的tensor进程间传输,需要继续完善,可参考 paddle.multiprocessing 设计文档
    • 支持 mac/win32 平台上cpu tensor进程间传输,并打通DataLoader支持。
  • 提交内容:
    • 方案设计文档,并提 PR 至 community repo 的 rfcs 目录;
    • 支持 mac/win32 平台上cpu tensor 进程间传输,并打通 DataLoader 支持。
    • 验收标准:
      • 自测传输10000次,不发生文件残留
      • 传输速度与竞品差距10%内
  • 技术要求:
    • 熟练掌握 C++、Python 开发。
    • 熟悉 mac/win 文件系统

No.96:基于 Paddle 的数据并行DataParallel 添加 join 接口,满足数据流的不均衡输入

  • 任务难度:进阶
  • 详细描述:构造上下文管理器,结合 paddle.DataParallel,使得参与的进程使用不均匀的输入进行训练。这个上下文管理器,将跟踪相关的 DP 进程,并通过通信操作来“隐藏”前向和反向计算,以便匹配未加入的 DP 进程。 这将确保每个通信调用,都有一个由已加入的进程进行调用,从而防止在跨进程输入不均匀的情况下,训练时发生 hang等错误。 或者,设置某个环境变量throw_on_early_termination,一旦某个 rank 用完输入数据,所有训练进程都会抛出错误,从而允许程序捕获和处理这些错误。
  • 提交内容
  • 技术要求
    • 熟悉数据并行的计算原理
    • 熟悉掌握 c++、cuda、python
    • 熟悉掌握集合通信的基本原理,使用集合通信方式

No.97:基于 Paddle 实现异构集群数据并行训练自动负载均衡

  • 任务难度:进阶
  • 详细描述:异构集群(P40,K40,V100,A100)的设备有不同的显存大小,算力吞吐。在异构集群上进行分布式数据并行,需要考虑不同硬件的显存和算力,来实现在所有硬件显存不溢出的前提下达到最高的整体训练吞吐。参赛者需要通过 Cost Model 对不同异构硬件的显存和算力、任务模型进行建模,并实现一套负载均衡的算法; 将建模信息作为均衡算法输入,计算出每个设备的上 local batch size 等具体训练参数。评价指标是:任务模型使用均衡算法得到的训练参数,在异构集群上数据并行整体吞吐。
  • 提交内容
    • 方案设计文档,并提 PR 至 community repo 的 rfcs 目录;
    • Cost Model 需要新增的模块提交到 auto_parallel/cost 目录(目录下已有较完备的cost model 基础设施可以直接使用);
    • 负责均衡算法的实现需要新增的模块提交到 auto_parallel/tuner 目录
    • 实际模型负责均衡脚本提交到 PaddleFleetx/example 目录
  • 技术要求
    • 熟悉数据并行的计算原理
    • 熟悉掌握 Cost Model 和 负载均衡
    • 熟悉掌握 c++、cuda、python

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

答疑交流

  • 如果在开发中对于上述任务有任何问题,欢迎在本 ISSUE 和 Discussion下留言交流。
@paddle-bot
Copy link

paddle-bot bot commented Feb 20, 2023

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

@paddle-bot paddle-bot bot added type/others 其他问题 hackathon labels Feb 20, 2023
@cloud2009 cloud2009 changed the title 【PaddlePaddle Hackathon 4】 子任务合集11(2023-02-20公布) 【PaddlePaddle Hackathon 4】核心框架开源贡献其他任务合集 Feb 20, 2023
@luotao1 luotao1 assigned luotao1 and unassigned LemonNoel Feb 20, 2023
@luotao1 luotao1 closed this as completed May 31, 2023
@paddle-bot paddle-bot bot added the status/close 已关闭 label May 31, 2023
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

4 participants