Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/PFCCLab/Camp into lishuai-9…
Browse files Browse the repository at this point in the history
…7/WeeklyReport
  • Loading branch information
lishuai-97 committed May 12, 2024
2 parents 4aee96b + b964864 commit e481b57
Show file tree
Hide file tree
Showing 24 changed files with 785 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
### 姓名
朱新明
### 实习项目
PIR 算子补全与兼容机制建设
### 本周工作
#### 分析mean API动转静执行的问题
`paddle.mean`API在动转静时翻译失败。主要原因是现在的ProgramTranslato没有支持`VarDesc*`。在OpTranslator中适配从`mutable_attributes`
得到`VarDesc*`,进而得到VarName,从`param_map`得到对应的`value`。这里从`param_map`中的到`value`的前提是该`VarDesc*`已经被前述Op定义。但是在
动转静时没有插入对应的data_op。尝试进行插入,在实际执行时发现在`scope`中的Tensor对应的`holder_`为空,所以动转静时在新IR和就IR下都会失败。
ProgramTranslator对`VarDesc*`的支持已经进行了适配。
#### 分析fake_quantize_range_abs_max执行时OutScale的holder_为null问题
`fake_quantize_range_abs_max`的参数`is_test``True`时,`OutScale``holder_``null`。因为当输入`x`的dtype为`float16`时,会选择在GPU上的Kernel执行。中间框架会插入`memcpy_d2h`算子,该算子负责将数据从GPU拷贝会主机。但是当`is_test``True`时,Kernel中并没有为`OutScale`中分配显存,所以会执行失败。
目前的解决方法是当`is_test``True`时,将输出`OutScale``OutScales`加入到no_check_set中,在no_check_set中的属性不会通过`fetch`算子取出,所以一九不会
涉及插入`memcpy_d2h`算子。
#### review分布式算子注册issue相关PR
在review `pull_gpups_sparse`算子注册时发现TestOpWithBackwardTranslator中并不会成功插入反向算子,原因是out的`stop_gradient`的属性值默认为`True`
现在已经修正。

### 下周工作
1. 推进分布式算子注册issue的合入,完成该issue中的内容
2. review算子单测任务相关PR

### 导师点评
对上述问题的分析很有帮助,继续努力!
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
### 姓名

田川

### 实习项目

PIR 动转静理想态单测推全验证任务(二期)

### 本周工作

#### **修复 Python 端不 hold 住反向 Program 导致跑反向时 Program 不存在的问题**

大致就是让 `program` 不要提早释放即可, 见 [#63694](https://github.com/PaddlePaddle/Paddle/pull/63694)

TODO: `test_eager_prim` 因为依赖关系比较复杂,暂时不拆分单测了,见[#63694 cmment](https://github.com/PaddlePaddle/Paddle/pull/63694/files#r1590676126)[#63884](https://github.com/PaddlePaddle/Paddle/pull/63884), 应该会在老 ir 退场的时候才比较好解

#### **升级pybind v2.10.3 to v2.12.0**

##### 遇到的一些小问题

下面是最小复现案例,在 GUN 8 及其一下版本,这里的`_Pragma`不会生效。

比较诡异的是如果使用的编译命令是`gcc -c main.cpp -O3 -Wall -Wextra -save-temps`也就是保存预编译文件就不会有这个问题,且预编译情况也是正常的。

暂时使用 patch 的方式修复见:[#63949](https://github.com/PaddlePaddle/Paddle/pull/63949)

```c++
#define Py_tss_NEEDS_INIT {0}

struct _Py_tss_t {
int _is_initialized;
unsigned long _key;
};

#define PYBIND11_TLS_KEY_INIT(var) \
_Pragma ("GCC diagnostic push") /**/ \
_Pragma ("GCC diagnostic ignored \"-Wmissing-field-initializers\"") /**/ \
_Py_tss_t var \
= Py_tss_NEEDS_INIT; \
_Pragma ("GCC diagnostic pop")

int main()
{
PYBIND11_TLS_KEY_INIT(tstate)
}
```
### 下周工作
1. PyFuncOp 迁移
### 导师点评
牛哇川砸,既推动了 pybind 升级,又解决了遗留已久的反向 Program 析构问题~
LGTMeow <img src="https://www.gstatic.com/android/keyboard/emojikitchen/20240206/u1f30b/u1f30b_u1f43e.png" width="14" alt="🐾"/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
### 姓名

周波涛

### 实习项目

算子支持复数计算专项

### 本周工作

1. 继续完善pow算子,在本地把factor设置为Scalar没啥问题,在跑ci时出现很多问题,实现上在ci上还有一些问题
2. 提交PR:add complex support for rsqrt
https://github.com/PaddlePaddle/Paddle/pull/63720
3. 提交PR:add complex support for tanhshrink
https://github.com/PaddlePaddle/Paddle/pull/63722

### 下周工作

1. 继续修改pow实现上的问题
2. 开展新的算子

### 导师点评
按预期正常推进
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
### 姓名

张玉涛

### 实习项目

算子支持复数计算专项

### 本周工作

1. 继续完善fill_constant_op算子,当支持Scalar后,跑CI时会出现较多问题,且涉及面较广,已按照分类整理好了问题。
2. 提交PR:add complex support for channel_shuffle and shuffle_batch
https://github.com/PaddlePaddle/Paddle/pull/61261 \
注:请假了一段时间,后续会将这部分时间补回来。

### 下周工作

1. 继续修复fill_constant_op实现上的问题
2. 尝试fill_any_like算子

### 导师点评

期待能如期完成fill_constant_op,fill_any_like的复数支持工作
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
### 姓名

李睿文

### 实习项目

框架 API 易用性提升

### 本周工作

1. **针对 `paddle.argsort``paddle.sort` 的功能增强**

- 新增功能需求:添加参数 `stable` 支持稳定排序。

- 提交 pr 并合入:
- https://github.com/PaddlePaddle/Paddle/pull/63513
- https://github.com/PaddlePaddle/PaddleCustomDevice/pull/1150
- https://github.com/PaddlePaddle/PaddleCustomDevice/pull/1156

2. **分析 `paddle.nn.initializer.KaimingNormal``paddle.nn.initializer.KaimingUniform` 升级后在所有仓库中的不兼容问题**

- 对所有仓库中的存量代码进行搜索排查,找出可能存在的不兼容问题,并撰写不兼容升级评审报告。

3. **针对 `paddle.nn.functional.max_unpool1d``paddle.nn.functional.max_unpool2d``paddle.nn.functional.max_unpool3d` 的功能增强以及bug修复**

- 修复 `paddle.nn.functional.max_unpool1d` 的参数判断 bug:输入正确的 output_size 会报错。
- 对输入参数 `x` 添加支持 int64 输入。

- 提交 pr 并合入: https://github.com/PaddlePaddle/Paddle/pull/63648

4. **针对 `paddle.nn.functional.kl_div` 的功能增强**

- 新增功能需求:添加参数 `log_target` 支持用户传入属于 log 空间的 `label` 参数。

- 提交 pr 并合入: https://github.com/PaddlePaddle/Paddle/pull/63860

#### 问题疑惑与解答

暂无

### 下周工作

1. 验证 paddle.distribution.Categorical 中 sample、entropy、log_prob 的底层计算逻辑是否和 PyTorch 一致
2. 计划修改 paddle.nn.initializer.TruncatedNormal:增加参数 a, b
3. 计划修改 paddle.nn.Layer 中的 named_sublayers:增加参数 memo

### 导师点评

李睿文近期工作取得较明显的进展,对kl_div、sort/argsort、group_norm等多个问题进行了开展。学习了XPU SDK的相关用法,并实现了xpu kernel的修改,后续继续保持工作的势头,多阅读paddle框架中已有的API/OP/kernel代码。
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
### 姓名

卢林军

### 实习项目

组合机制算子专项和机制建设

### 本周工作

本项目的主要工作是对尚未支持组合机制的算子添加组合机制并完善机制,本周主要工作如下:

1. 新增`reduce_as` op并修复其BUG

算子的新增,引起了`test_assign_pos_op`单测的错误,在本地cuda 11.2和cuda 12.0的环境下,均无法复现其错误。最后,是导师及其同事在CI环境中,发现`test_assign_pos_op`的动态图测试出现了问题,估计是和单测执行模式有关,最后将动态图测试从`test_assign_pos_op`拆解出来,并写入新的单测文件中,问题得以解决。

相关 PR:

- https://github.com/PaddlePaddle/Paddle/pull/63064

2. 解决`test_sub_graph_78`中,开启`with_prim=True`会导致单测报错的BUG。

`test_sub_graph_78`的单测是因为在使用`multiply_grad`的反向拆解时,调用反向拆解中的函数`get_reduce_dims_from_out(out_grad_dims, x_dims)`有问题。具体是说,在检测reduce的dim时,使用的索引错误,现已修改成正确的索引。

相关 PR:

- https://github.com/PaddlePaddle/Paddle/pull/63251

3. 补充组合机制开发文档中的动态图支持部分


### 下周工作

1. 尝试对`reduce_as`完成`complex64/128``int8`的支持
2. 补充`reduce_as`的中文文档
3. 完善之前尚未merge的PR。
4. sum_as的反向拆解
### 导师点评
开发能力强,积极性高:可以独立修复机制相关错误;可以开发独立算子
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
### 姓名
YibinLiu666

### 实习项目
高阶微分的性能分析和优化

### 本周工作
1. 分析现有科学计算中性能相比 pytorch 较差的三个模型,发现瓶颈在于矩阵乘法的二阶微分组合实现,但是由于没有发现额外的计算,暂时没有做相关的优化
2. 实现sigmoid的二阶微分组合算子 https://github.com/PaddlePaddle/Paddle/pull/63669
3. 鉴于prod_grad在输入有0的时候梯度会出现nan的情况,参考TensorFlow的实现,评估prod_grad组合实现使用双向cumprod实现的可行性,目前的结论是可行性不高。

### 下周工作

1. 参考torch的prod_grad组合实现,解决prod_grad在输入有0的时候梯度会出现nan的情况。

### 导师点评

Loading

0 comments on commit e481b57

Please sign in to comment.