【热身打卡】开发框架,从编译 paddle 开始
Ligoml opened this issue · 29 comments
各位参加飞桨开发者,大家好,欢迎大家参加飞桨社区贡献!有一些小伙伴有意愿参与,但不知道如何开始,飞桨团队特地推出了本次热身打卡活动,从编译开始,熟悉飞桨框架开发~
参与热身打卡活动并按照邮件模板格式将截图发送至 ext_paddle_oss@baidu.com,即可获得精美的飞桨黑客松周边礼品!数量有限,赶快行动起来吧!
热身打卡活动简介
在飞桨框架二次开发中,编译 paddle 是一个重要环节,也是很多任务(如API开发、算子性能优化、数据类型扩展等)的前置条件。本次热身打卡活动,要求参与者通过 github 拉取 PaddlePaddle/Paddle 仓库代码,并参考 源码编译教程 完成 paddle 编译,截图编译成功的界面后,参考如下格式向 ext_paddle_oss@baidu.com 发送邮件,打卡成功后即可获得精美的飞桨黑客松周边礼品!
注:完成全部打卡任务即可获得飞桨开源社区定制马克杯。本次热身打卡活动对硬件没有要求!CPU/GPU 均可,赶快行动起来吧~也可 申请AI Studio开发资源~
编译流程
1. 增加时间戳
即在命令最开始加上time,以【Linux下从源码编译】文档的【使用Docker编译】为例,
【9.执行cmake】和【10.执行编译】增加时间戳的命令为:
- CPU版本的cmake:
time cmake .. -DPY_VERSION=3.8 -DWITH_GPU=OFF
- GPU版本的cmake:
time cmake .. -DPY_VERSION=3.8 -DWITH_GPU=ON
- 执行编译:
time make -j$(nproc)
,举例有4核,即time make -j4
2. 初次编译/二次编译
初次编译时间较长,二次编译因为有编译缓存的存在,时间会缩短,对日常开发来说,二次编译时间才是影响开发效率的。让我们来感受下修改不同文件的二次编译时间。
- 修改底层的头文件:paddle/fluid/platform/enforce.h
- 修改Op的cc文件:paddle/fluid/operators/rank_loss_op.cc
- 修改python文件:python/paddle/tensor/math.py
二次编译方式:对应文件加一个空行/空格保存退出后,然后执行编译命令time make -j$(nproc)
,二次编译不再需要执行cmake。
3. 安装whl包
参考【Linux下从源码编译】文档的【使用Docker编译】中【11. 寻找whl包】和【12. 安装whl包】。
4. 运行单元测试
不同的编译选项,能编译出不同的功能,对应的编译时间也各不相同。可以参考编译选项表,尝试打开WITH_TESTING=ON
编译出单元测试,并正确运行一个单测。
- 重新运行cmake命令:
cmake .. -DPY_VERSION=3.8 -DWITH_GPU=OFF -DWITH_TESTING=ON
(在原来的cmake命令后加入-DWITH_TESTING=ON
) - 执行编译命令
make -j$(nproc)
- 安装第三方依赖
pip3.8 install -r ../python/requirements.txt
- 进入build目录,运行单元测试:参考【飞桨API python端开发指南】之【运行单元测试】,执行
ctest -R test_logsumexp
运行logsumexp的单测。
邮件格式
标题: [Hackathon 热身打卡]
内容:
飞桨团队你好,
【GitHub ID】:XXX
【打卡内容】:初次编译/二次编译/安装whl包/运行单元测试
【打卡截图】:
如:
标题: [Hackathon 热身打卡]
内容:
飞桨团队你好,
【GitHub ID】:paddle-hack
【打卡内容】:初次编译&二次编译&安装whl包&运行单元测试
【打卡截图】:
硬件 | |
---|---|
编译方式 | 参考【Linux下从源码编译】文档的【使用Docker编译】(源码编译文档 有多种编译方式,请大家填写本次编译参考的文档) |
cmake命令和时间 | 命令:time cmake .. -DPY_VERSION=3.8 -DWITH_GPU=OFF 时间:注意要将commit号截图进来哦 |
初次编译命令和时间 | 命令:time make -j20 (写一下大家用几核哦)时间:以下时间仅作为示例,不代表真实的初次编译时间 |
二次编译时间 | 时间:以下时间仅作为示例,不代表真实的二次编译时间 paddle/fluid/platform/enforce.h paddle/fluid/operators/rank_loss_op.cc python/paddle/tensor/math.py |
安装whl包 | |
运行单元测试 |
礼品发放
- 打卡确认后,你会收到一封回复邮件,收集你的邮寄地址,请提供准确的邮件地址,以便小礼品可以飞速送到你的手上!
- 在编译过程中有任何的问题或建议,都可以提交 issue,注明 PaddlePaddle Hackathon,经飞桨团队确认是 bug 或有效建议后,可额外获得一个小礼品。
- 将本次活动或活动奖品分享到社交平台(如B站、微博、小红书、朋友圈等),截图发在QQ/微信群或邮件中,也有机会获得更多周边礼品哦~
优秀作品
参与飞桨框架贡献
如果你已经顺利完成了打卡,具备了基础的框架开发知识,你就可以参与飞桨社区丰富的开发任务,为一个大型开源项目做贡献,同时收获飞桨社区开发者的认可与各种福利。传送门:
windows下 实现类似linux下 ”time 命令“ 显示命令执行时间,可使用以下脚本保存为timecmd.bat ,例如:timecmd.bat dir /a
@echo off
@setlocal
::
set start=%time%
::
:: Runs your command
cmd /c %*
::
set end=%time%
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
::
set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%
::
:: Mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)
请问修改了实现的代码,要跑单测的话必须二次编译吗?感觉这样还是挺影响开发效率呢
使用AI Studio编译Paddle的文档Paddle文档
中 四,安装whl库 pip install Paddle/python/dist/paddlepaddle-0.0.0-cp37-cp37m-linux_x86_64.whl
命令错误,处于Paddle/build路径下,应该使用pip3.7 install /python/dist/paddlepaddle-0.0.0-cp37-cp37m-linux_x86_64.whl命令
gitlab经常连不上,ubuntu系统毫无办法。然后AI studio我用QQ邮箱发了过了一天了还是没回复QAQ
本来bug多久麻烦,这下更雪上加霜了
编译到89%报错了,develop里面有没有定义的函数
[ 89%] Building CXX object paddle/fluid/eager/api/generated/fluid_generated/forwards/CMakeFiles/dygraph_function.dir/dygraph_forward_functions1.cc.o
/home/dhy/Paddle-develop/paddle/fluid/eager/api/generated/fluid_generated/forwards/dygraph_forward_functions1.cc: In function ‘paddle::experimental::Tensor rsqrt_dygraph_function(const paddle::experimental::Tensor&, const AttributeMap&)’:
/home/dhy/Paddle-develop/paddle/fluid/eager/api/generated/fluid_generated/forwards/dygraph_forward_functions1.cc:58:40: error: ‘rsqrtGradNodeCompat’ was not declared in this scope
58 | auto grad_node = std::shared_ptr(new rsqrtGradNodeCompat(1, 1));
这个情况我在你们的热身打卡网页的评论区反应了,还附上了报错的信息
请问网页的评论区在哪儿?可以 附上链接,或者直接提一个新的issue。 @HumanityCSU
在编译过程中有任何的问题或建议,都可以提交 issue,注明 PaddlePaddle Hackathon,经飞桨团队确认是 bug 或有效建议后,可额外获得一个小礼品。
这个情况我在你们的热身打卡网页的评论区反应了,还附上了报错的信息
请问网页的评论区在哪儿?可以 附上链接,或者直接提一个新的issue。 @HumanityCSU
在编译过程中有任何的问题或建议,都可以提交 issue,注明 PaddlePaddle Hackathon,经飞桨团队确认是 bug 或有效建议后,可额外获得一个小礼品。
我已经在paddle仓库上提交了这个issue,这是地址:#51824
我记得我当时是在虚拟机linux环境下编译的报错,不是在AI Studio环境下,我也没有收到AI Studio的授权(我不是很清楚这个是不是叫授权,反正我当时没拿到,然后我就只能用自己本地新建一个Ubuntu系统的虚拟机弄了)
…
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年3月20日(星期一) 下午4:25 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [PaddlePaddle/Paddle] 【热身打卡】开发框架,从编译 paddle 开始 (Issue #45347) 使用AI Studio编译Paddle的文档Paddle文档 中 四,安装whl库 pip install Paddle/python/dist/paddlepaddle-0.0.0-cp37-cp37m-linux_x86_64.whl 命令错误,处于Paddle/build路径下,应该使用pip3.7 install /python/dist/paddlepaddle-0.0.0-cp37-cp37m-linux_x86_64.whl命令 十分感谢指出问题,已修改。 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>
我已经通过AI Studio编译成功了,本地编译容易内存爆满,加油!
我也没有收到AI Studio的授权
@HumanityCSU 可以查下2023/3/6的邮件(是否进垃圾箱或者过滤了),PM有给回复信息的。
@luotao1 二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。
二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。
@6clc @zhhsplendid 麻烦看一下,按理说,PHI不应该依赖CINN的
@luotao1 二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。
方便提供一下你的cmake指令吗?本地测试你的PR的commit修改,二次make未复现该问题。
@luotao1 二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。
方便提供一下你的cmake指令吗?本地测试你的PR的commit修改,二次make未复现该问题。
@6clc cmake 命令如下:
export CCACHE_DIR=/workspace/.ccache
export CACHE_DIR=/workspace/.cache
cmake .. -DWITH_GPU=ON \
-DPY_VERSION=3.9 \
-DWITH_TESTING=ON \
-DCINN_ONLY=OFF \
-DWITH_CINN=ON
time make -j24
@luotao1 二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。
方便提供一下你的cmake指令吗?本地测试你的PR的commit修改,二次make未复现该问题。
@6clc cmake 命令如下:
export CCACHE_DIR=/workspace/.ccache export CACHE_DIR=/workspace/.cache cmake .. -DWITH_GPU=ON \ -DPY_VERSION=3.9 \ -DWITH_TESTING=ON \ -DCINN_ONLY=OFF \ -DWITH_CINN=ON time make -j24
你在本地是稳定复现这个情况吗?我在你PR的commit前make一遍,在你的PR上再make没有触发phi的编译。要是你那里还是有这个问题,我再去看看其他人是不是也这样。
@luotao1您好, 我在编译的时候当运行到“Performing build step for 'extern_xxhash'”时会报如下错误:
[ 9%] Performing build step for 'extern_xxhash'
sed: couldn't open temporary file /paddle/third_party/xxhash/sedlZVZ0L: Permission denied
CMakeFiles/extern_xxhash.dir/build.make:112: recipe for target 'third_party/xxhash/src/extern_xxhash-stamp/extern_xxhash-build' failed
查了下是CMakeFiles/extern_xxhash.dir/build.make这个文件112行sed的时候报错:
cd /paddle/third_party/xxhash && sed -i "s/-Wstrict-prototypes -Wundef/-Wstrict-prototypes -Wundef -fPIC/g" /paddle/third_party/xxhash/Makefile && make lib
请问若要修复是手动修改build.make,使得sed后先保存为某个文件,再用此文件覆盖/paddle/third_party/xxhash/Makefile吗?
不知我这是否是个例情况T . T
@luotao1 mac上面拉了docker 镜像registry.baidubce.com/paddlepaddle/paddle:latest-dev编译的,我sed后另存为再覆盖先能执行过去了。遇到了新的问题c++: fatal error: Killed signal terminated program cc1plus
,docker分配4个G内存不够?
把docker desktop里的resources->memory调成5G继续执行了
@luotao1您好, 我在编译的时候当运行到“Performing build step for 'extern_xxhash'”时会报如下错误:
[ 9%] Performing build step for 'extern_xxhash'
sed: couldn't open temporary file /paddle/third_party/xxhash/sedlZVZ0L: Permission denied
CMakeFiles/extern_xxhash.dir/build.make:112: recipe for target 'third_party/xxhash/src/extern_xxhash-stamp/extern_xxhash-build' failed查了下是CMakeFiles/extern_xxhash.dir/build.make这个文件112行sed的时候报错:
cd /paddle/third_party/xxhash && sed -i "s/-Wstrict-prototypes -Wundef/-Wstrict-prototypes -Wundef -fPIC/g" /paddle/third_party/xxhash/Makefile && make lib
请问若要修复是手动修改build.make,使得sed后先保存为某个文件,再用此文件覆盖/paddle/third_party/xxhash/Makefile吗? 不知我这是否是个例情况T . T
是docker VirtioFS的问题,将docker的file sharing配置改为gRPC Fuse可以编译通过,或者将sed升级版本到4.8以上
https://forums.docker.com/t/sed-couldnt-open-temporary-file-xyz-permission-denied-when-using-virtiofs/125473/4 https://discourse.pi-hole.net/t/sed-couldnt-open-temporary-file-etc-pihole-sed/65159