Skip to content

Commit

Permalink
8th_hackathon task (#1047)
Browse files Browse the repository at this point in the history
* add

* fix
  • Loading branch information
sunzhongkai588 authored Jan 8, 2025
1 parent 7fa12e1 commit 5b9dbb7
Show file tree
Hide file tree
Showing 4 changed files with 321 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
此文档展示 **PaddlePaddle Hackathon 第八期活动——开源贡献个人挑战赛套件开发方向任务** 详细介绍

## 【开源贡献个人挑战赛-套件开发】任务详情

### NO.5 在 PaddleSpeech 中复现 DAC 模型

**详细描述:**

- 在 PaddleSpeech 套件中实现并对齐 Descript-Audio-Codec 的分布式训练、推理和评估流程。
- 相关论文:https://arxiv.org/abs/2306.06546
- 参考:https://github.com/descriptinc/descript-audio-codec

**验收标准**

- 复现的性能指标需要与论文预期一致
- 需上传完整的训练代码和训练脚本以及模型
- 代码相关文档和注释完备

**技术要求:**

- 了解 DAC 模型
- 熟练掌握 Python 语言
- 熟悉 PaddleSpeech 框架及其数据处理流程

### NO.6 在 PaddleSpeech 中实现 Whisper 的 Finetune

**详细描述:**

- 相关论文:https://arxiv.org/pdf/2212.04356
- 参考:https://huggingface.co/blog/fine-tune-whisper
- 数据:https://huggingface.co/datasets/mozilla-foundation/common_voice_11_0
- 尽量复用已有推理代码:paddlespeech/s2t/models/whisper/whipser.py

**验收标准**

- 复现的性能指标需要与原始仓库效果相当
- 需上传完整的训练代码和训练脚本
- 训练后的模型支持 command line 方式推理
- 支持原生 whisper large v3 通过 command line 方式推理
- 代码相关文档和注释完备

**技术要求:**

- 了解 Whisper 模型
- 熟练掌握 Python 语言
- 熟悉 PaddleSpeech 框架及其数据处理流程

### NO.7 PaddleSpeech 新 Python 版本适配

**详细描述:**

- 适配 python3.9-3.12 版本,梳理套件依赖库

**验收标准:**

- 尽可能清理依赖库,有风险的依赖库固定版本
- 能够在多个 python 版本上使用 pip 成功安装 paddlespeech
- 安装成功后 demo 和 example 目录下的模型能够正常跑通

**技术要求:**

- 熟练掌握 Python 语言
- 熟悉 PaddleSpeech 框架及其数据处理流程

### NO.8

**详细描述:**

- 在 PaddleSpeech 套件中实现并对齐 CosyVoice 的组网和模型推理
- 参考:https://github.com/FunAudioLLM/CosyVoice

**验收标准**

- 复现的性能指标需要与原始仓库效果相当
- 需上传完整的训练代码和训练脚本
- 训练后的模型支持 command line 方式推理
- 代码相关文档和注释完备

**技术要求:**

- 了解 Whisper 模型
- 熟练掌握 Python 语言
- 熟悉 PaddleSpeech 框架及其数据处理流程
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
此文档展示 **PaddlePaddle Hackathon 第八期活动——开源贡献个人挑战赛框架开发方向任务** 详细介绍

## 【开源贡献个人挑战赛-API 开发】任务详情

注:为飞桨框架新增一系列 API,提交流程请参考 [新增 API 开发&提交流程](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_contributing_guides_cn.html),开发请参考 [贡献指南](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/index_cn.html),任务列表如下,其他说明事项:

- 合入标准
-[API 设计规范](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_design_guidelines_standard_cn.html) 完成 API 设计文档;需要在设计文档中说明支持哪些数据类型(默认都要支持 fp16/bf16/complex64/complex128),对不支持的要给出理由
-[API 验收标准](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_accpetance_criteria_cn.html) 完成 API 功能实现、单测、API 文档;
-[API 映射关系-格式规范](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/api_difference/pytorch_api_mapping_format_cn.md) 完成 **_API 映射关系文档_** 的编写,文件统一提交到 [convert_from_pytorch/api_difference](https://github.com/PaddlePaddle/docs/tree/develop/docs/guides/model_convert/convert_from_pytorch/api_difference/) 中相应目录,需详细描述与竞品(Pytorch)的差异之处,对差异之处需要在 **_API 设计文档_** 中阐述理由;
- 参考内容
- [新增 API 开发&提交流程](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_contributing_guides_cn.html)
- [新增 API 设计模板](https://github.com/PaddlePaddle/community/blob/master/rfcs/APIs/api_design_template.md)
- [飞桨 API Python 端开发指南](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/new_python_api_cn.html)
- [C++ 算子开发指南](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/new_cpp_op_cn.html)
- [飞桨 API 文档书写规范](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_docs_guidelines_cn.html)
- [API 映射关系-格式规范](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/api_difference/pytorch_api_mapping_format_cn.md)
- [API 单测开发及验收规范](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/dev_guides/api_contributing_guides/api_accpetance_criteria_cn.html)
- 复数数据类型相关资料:
- [On the Computation of Complex-valued Gradients with Application to Statistically Optimum Beamforming](https://arxiv.org/abs/1701.00392)
- [复数梯度推导计算](https://github.com/PaddlePaddle/community/tree/master/pfcc/paddle-code-reading/complex_autograd)
- [paddlepaddle 支持复数任务](https://github.com/PaddlePaddle/Paddle/issues/61975)

### NO.1 为 Paddle 新增 lu_solve API

**详细描述:**

使用 LU 分解 来求解线性方程组 AX=B,A 为 1 个或多个矩阵,A.shape=[m, n] or [batch, m, n],B.shape=[m, k] or [batch, m, k],A 和 B 已知,通过 LU 分解方阵 A 来加速求解 X。需要满足 LU, pivots, info =paddle.linalg.lu(A); X = paddle.linalg.lu_solve(B, LU, pivots) 与 使用 X=paddle.linalg.solve(A, B) 直接求解线性方程组的结果一样。此任务的目标是在 Paddle 框架中,新增 lu_solve API,调用路径为:paddle.linalg.lu_solve 和 Tensor.lu_solve

**提交内容:**

- API 的设计文档,并提 PR 至 PaddlePaddle/community 的 rfcs/APIs 目录
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的[python/paddle/tensor/linalg.py](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/tensor/math.py)文件。并在[python/paddle/tensor/**init**.py](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/tensor/__init__.py#L274)中,添加 lu_solve API,以支持 Tensor.lu_solve 的调用方式;
- C ++ 实现代码,在 Paddle repo 放置。其中头文件在 Paddle repo 的[paddle/phi/kernels](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/phi/kernels)目录,cc 文件在[paddle/phi/kernels/cpu](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/phi/kernels/cpu)目录 和 cu 文件在[paddle/phi/kernels/gpu](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/phi/kernels/gpu)目录;
- 单测代码,在 Paddle repo 的 [test/](https://github.com/PaddlePaddle/Paddle/tree/develop/test)目录
- 中文 API 文档,在 docs repo 的[docs/api/paddle](https://github.com/PaddlePaddle/docs/tree/develop/docs/api/paddle)目录
- API 映射文档:描述 Paddle API 与 Pytorch API 之间的映射关系,请在 [API 映射文档目录](https://github.com/PaddlePaddle/docs/tree/develop/docs/guides/model_convert/convert_from_pytorch/api_difference) 中为每个 API 新增对应的 映射关系 文件,请务必遵守 [《API 映射关系-格式规范》](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_format_cn.md),提交到 [Docs Repo](https://github.com/PaddlePaddle/docs)

**技术要求:**

- 熟悉矩阵 LU 分解原理,了解当前 paddle.linalg.lu 的逻辑;
- 熟悉 lapack/cublas 库;
- 熟练掌握 Python。

### NO.2 为 Paddle 新增 baddbmm API

**详细描述:**

为 Paddle 新增 baddbmm API,以实现 β∗input+α(A@B)的功能。

此任务的目标是在 Paddle 框架中,新增 baddbmm API,调用路径为:paddle.baddbmm 和 Tensor.baddbmm

**提交内容:**

- API 的设计文档,并提 PR 至 [PaddlePaddle/community](https://github.com/PaddlePaddle/community) 的 rfcs/APIs 目录
- Python 实现代码 & 英文 API 文档,在 Paddle repo 的 [python/paddle/tensor/math.py](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/tensor/math.py) 目录下新建文件
- 并在[python/paddle/tensor/**init**.py](https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/tensor/__init__.py#L274)中,添加 API,以支持 Tensor.baddbmm 的调用方式
- C++ 实现代码,在 Paddle repo 放置。头文件在 Paddle repo 的[paddle/phi/kernels](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/phi/kernels)目录,cc 文件在[paddle/phi/kernels/cpu](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/phi/kernels/cpu)目录 和 cu 文件在[paddle/phi/kernels/gpu](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/phi/kernels/gpu)目录
- 单测代码,在 Paddle repo 的[ python/paddle/test/legacy_test](https://github.com/PaddlePaddle/Paddle/tree/develop/test/legacy_test) 目录
- 中文 API 文档,在 docs repo 的 [docs/api/paddle](https://github.com/PaddlePaddle/docs/tree/develop/docs/api/paddle) 目录
- API 映射文档:描述 Paddle API 与 Pytorch API 之间的映射关系,请在 [API 映射文档目录](https://github.com/PaddlePaddle/docs/tree/develop/docs/guides/model_convert/convert_from_pytorch/api_difference) 中为每个 API 新增对应的 映射关系 文件,请务必遵守[《API 映射关系-格式规范》](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_format_cn.md),提交到 [Docs Repo](https://github.com/PaddlePaddle/docs)

**技术要求:**

- 熟悉 Paddle 的参数初始化方式
- 熟练掌握 C++, CUDA, Python

---

## 【开源贡献个人挑战赛-分布式方向】任务详情

### NO.3 分布式训练自动并行与通信相关的老 IR 逻辑清理

**详细描述:**

- 分布式训练在老通信算子退场时,还清理相关的单测、框架代码。
- 这些单测是带有 deprecated 后缀的,在老通信库算子退场时遇到的报错单测。

**验收说明:**

- Paddle 自动并行通信库老 IR 相关单测删除
- 与上述单测相关的框架代码逻辑清理

**技术要求**

- 熟悉 Paddle 分布式通信库代码逻辑
- 熟练掌握 Python C++ 语言

### NO.4 Paddle 旧通信库和 FleetExecutor 退场

**详细描述:**

- Paddle 框架中目前存在新旧通信库两套代码,当前已默认用新通信库,旧通信库相关的模块和代码逻辑需要清理掉。新通信库 FLAG: FLAGS_dynamic_static_unified_comm=1
- 移除 FLAGS_dynamic_static_unified_comm != 1 的代码逻辑
- 移除与上述相关联的模块
- Paddle 框架中目前存在新旧执行器两套代码,FleetExecutor 已废弃,需要清理掉相关代码。
- 移除 FleetExecutor、以及派生出的相关执行器
- 移除与上述执行器相关联的模块
- 移除与 FleetExecutor 相关的 Python 端类、单测

**验收说明:**

- Paddle 框架无旧通信库相关类、函数和代码判断逻辑
- Paddle 框架无旧执行器关类、函数和单测
- 上下游关联模块同步删除,CMakeLists.txt 删除对应编译依赖

**技术要求**

- 熟悉 Paddle 分布式通信库代码逻辑
- 了解执行器模块代码
- 熟练掌握 Python C++ 语言
- 熟悉 Pybind 的使用
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## 框架开发任务

| 序号 | 难度 | 任务标题 | 是否需要提交 RFC |
| :--: | :-------: | -------------------------------------------- | :--------------: |
| 1 | ⭐️⭐️ | 为 Paddle 新增 lu_solve API ||
| 2 | ⭐️⭐️ | 为 Paddle 新增 baddbmm API ||
| 3 | ⭐️⭐️ | 分布式训练自动并行与通信相关的老 IR 逻辑清理 ||
| 4 | ⭐️⭐️⭐️ | Paddle 旧通信库和 FleetExecutor 退场 ||

## 套件开发任务

| 序号 | 难度 | 任务标题 | 是否需要提交 RFC |
| :--: | :-------: | ------------------------------------------ | :--------------: |
| 5 | ⭐⭐️⭐ | 在 PaddleSpeech 中复现 DAC 模型 ||
| 6 | ⭐️⭐️⭐️ | 在 PaddleSpeech 中实现 Whisper 的 Finetune ||
| 7 | ⭐️⭐️ | PaddleSpeech 新 Python 版本适配 ||
| 8 | ⭐⭐⭐️ | 在 PaddleSpeech 中实现 CosyVoice 模型推理 ||
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
此文档展示 **PaddlePaddle Hackathon 第八期活动——飞桨护航计划集训营(提前批)** 项目的详细介绍

## 赛题详情

### 项目一:框架 API 易用性提升

#### 项目介绍:

飞桨框架 API 中 **功能缺失、功能 Bug** 等地方,都将成为 Pytorch 代码转换的堵点,为了扫清**框架 API 转换**的堵点,**降低模型迁移的成本**,需要对框架 API 的易用性进行提升。

每一个 API 任务包括:问题描述 + 建议方案,其中 **问题描述** 会给出该 API 存在的不合理问题,**建议方案** 会给出该 API 的建议修改思路(例如 功能增强、Bug 修复、实现优化、新增 API 等),你需要参考**建议方案** ,完成该 API 的增强或新增工作。

除了对框架 API 本身的修改外,还需要完成 [PaConvert 代码转换](https://github.com/PaddlePaddle/PaConvert)[API 映射文档](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_format_cn.md) 的开发。因此你需要额外熟悉 [PaConvert](https://github.com/PaddlePaddle/PaConvert) 仓库,保证 API 转换的单测可以成功运行。

每一个 API 任务总计包括如下开发内容:(注意逐个核对是否完成)

1. **API 本身修改**:代码提交至 [Paddle 仓库](https://github.com/PaddlePaddle/Paddle)
2. **API 英文、中文文档修改**:代码分别提交至 [Paddle 仓库](https://github.com/PaddlePaddle/Paddle)[docs 仓库](https://github.com/PaddlePaddle/docs)
3. **API 映射文档修改**:代码提交至 [映射文档目录](https://github.com/PaddlePaddle/docs/tree/develop/docs/guides/model_convert/convert_from_pytorch/api_difference/)
4. **PaConvert 转换规则修改**:代码提交至 [PaConvert 仓库](https://github.com/PaddlePaddle/PaConvert)
5. **PaConvert 单测修改**:代码提交至 [PaConvert 单侧目录](https://github.com/PaddlePaddle/PaConvert/tree/master/tests)

具体待升级的 API 任务名单,以内部实际发布为准,在结营时要求完成 10~20 个 API 升级任务。

#### 营员要求(1-2 人):

- 熟悉 Python
- 熟悉 C++、CUDA
- 熟悉飞桨 API 算子开发,有新增 API 经验者优先
- 熟悉 Pytorch 框架的使用,有论文复现与模型迁移经验优先

### 项目二:模型迁移工具建设

#### 项目介绍:

为了实现高效的将 PyTorch 代码自动化的转写成 Paddle 代码,从而提升模型迁移的效率,我们建设了[**PaConvert 代码自动转换工具**](https://github.com/PaddlePaddle/PaConvert): **Pa**ddlePaddle Code **Convert** Toolkits。目前已支持约 1400 个 Pytorch API 的自动转换与 90+%的代码转换率,但在 新增 API 转写策略、转换机制优化、辅助函数优化、CI 维护与优化 等方面,仍然有很多可持续完善的地方。

本课题的工作任务包括转换工具建设的以下内容:

1. 新增 API 转写策略(约 150 个)
2. 转换机制优化(解耦 import 分析,从而支持 Comate 中任意选中代码的转换)
3. 辅助函数优化
4. CI 维护与优化(日常修复 CI 问题,增强存量问题的 CI 拦截)

#### 营员要求(1 人):

- 熟悉 Python
- 熟悉 Pytorch 框架的使用,有论文复现与模型迁移经验优先

### 项目三:自动并行切分转换和专家并行机制完善

#### 项目介绍:

自动并行可在用户仅标记了模型中部分张量在不同进程上的分布情况后,自动实现高效的分布式训练。用户在使用时只需对部分张量进行标记,无需实现模型并行时的通信等流程,因此可以大幅简化分布式训练的开发流程。Paddle 的自动并行机制可以支持多种常见的分布式训练策略,但对于混合专家模型的专家并行策略还有待完善。

本课题包括以下内容:

1. 完善自动并行中的切分转换机制,更好地支持专家并行以及其他分布式策略。
2. 完善专家并行机制,提升框架在专家并行中的易用性,并在相关开源模型上验证。

#### 营员要求(1 人):

- 熟悉 Python、C/C++
- 熟悉深度学习框架中的动态图和静态图
- 熟悉自动并行相关基础概念

### 项目四:静态图流水并行功能增强和性能优化

#### 项目介绍:

### 项目五:动转静性能优化专项

#### 项目介绍:

Paddle 自 2.6 版本发布了新一代动转静技术 SOT(Symbolic Opcode Translator),通过自适应子图打断实现了极高成功率的动静转换,使用户能够只需要添加装饰器 `@to_static` 即可享受动转静带来的加速效果。但在实际模型场景中,SOT 仍然存在一些性能优化点,比如动态 shape 场景符号推导优化、NumPy 组网支持、异常支持、Guard 性能优化等。希望藉由本次护航计划,与社区同学一起探索 SOT 的性能优化,提升 SOT 的性能和稳定性,为编译器、自动并行等场景提供更加完备的转静基础设施。

#### 营员要求(2 人):

- 精通 Python
- 熟悉 C/C++
- 了解深度学习框架动态图和静态图机制
- 熟悉 JIT 及相关编译技术(加分项)

### 项目六:PIR-TRT 算子 Converter 及单测开发

#### 项目介绍:

Paddle 推理在新的架构下集成了新的高性能推理引擎 PIR-TRT,使用该引擎的一个基本条件是需要能够将 paddle 算子映射为对应的 TRT 算子,当前依然有部分 Paddle 算子未开发对应的映射 Converter,为了能够支持全场景使用新的 PIR-TRT 推理引擎,需要将全部 Converter 开发完毕并且完成单测开发适配来保证 Converter 开发质量。

#### 营员要求(1 人):

- 熟悉 Python
- 熟悉 PIR-TRT 基本执行情况,TensorRT 组网流程

### 项目七:大语言模型推理&服务化易用性提升专项

#### 项目介绍:

随着众多基于大模型重构的产品逐渐落地到我们的生活中,业界对大模型的推理部署的需求呈井喷式增长,2024 年是大模型推理方向飞速发展的一年,Paddle 支持大模型推理优化以来,迭代了一版又一版推理方案,推理性能逐渐走到了行业前列。但由于过去的野蛮生长、迭代,我们一定程度上忽视了推理框架的易用性、易开发性。本项目致力于提升大语言模型推理&服务化框架的易用性,具体的工作包括但不限于:

1. 全面清理历史旧代码;
2. 采用模块化组网方式全面升级组网方案;
3. 打通推理、服务化一键式部署流程。

#### 营员要求(1 人):

- 熟悉 Python
- 熟悉流行大语言模型网络架构、了解大模型推理常用优化手段
- 熟悉 vLLM、TensorRT-LLM 等大模型推理框架实现优先

0 comments on commit 5b9dbb7

Please sign in to comment.