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

【热身打卡】开发框架,从编译 paddle 开始 #45347

Open
3 tasks
Ligoml opened this issue Aug 23, 2022 · 29 comments
Open
3 tasks

【热身打卡】开发框架,从编译 paddle 开始 #45347

Ligoml opened this issue Aug 23, 2022 · 29 comments
Assignees

Comments

@Ligoml
Copy link
Contributor

Ligoml commented Aug 23, 2022

各位参加飞桨开发者,大家好,欢迎大家参加飞桨社区贡献!有一些小伙伴有意愿参与,但不知道如何开始,飞桨团队特地推出了本次热身打卡活动,从编译开始,熟悉飞桨框架开发~
参与热身打卡活动并按照邮件模板格式将截图发送至 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/微信群或邮件中,也有机会获得更多周边礼品哦~

优秀作品

参与飞桨框架贡献

如果你已经顺利完成了打卡,具备了基础的框架开发知识,你就可以参与飞桨社区丰富的开发任务,为一个大型开源项目做贡献,同时收获飞桨社区开发者的认可与各种福利。传送门:

@PaddlePaddle PaddlePaddle deleted a comment from paddle-bot bot Aug 23, 2022
@Ligoml Ligoml pinned this issue Aug 23, 2022
@paddle-bot paddle-bot bot added the status/close 已关闭 label Aug 24, 2022
@paddle-bot paddle-bot bot closed this as completed Aug 24, 2022
@paddle-bot paddle-bot bot added the type/others 其他问题 label Aug 24, 2022
@Ligoml Ligoml reopened this Aug 25, 2022
@paddle-bot paddle-bot bot added status/reopen 重新打开 and removed status/close 已关闭 labels Aug 25, 2022
@Ligoml Ligoml removed type/others 其他问题 status/reopen 重新打开 labels Aug 25, 2022
@jzhang533 jzhang533 unpinned this issue Sep 15, 2022
@tianxingxia-cn
Copy link

tianxingxia-cn commented Nov 19, 2022

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)

@luotao1 luotao1 self-assigned this Dec 6, 2022
@zhengow
Copy link

zhengow commented Feb 23, 2023

请问修改了实现的代码,要跑单测的话必须二次编译吗?感觉这样还是挺影响开发效率呢

@luotao1
Copy link
Contributor

luotao1 commented Feb 23, 2023

@zhengow 目前是这样的,我们也在尝试加速编译和提升开发效率的方法。

@Dragonzhoulong
Copy link

使用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命令

@HumanityCSU
Copy link

gitlab经常连不上,ubuntu系统毫无办法。然后AI studio我用QQ邮箱发了过了一天了还是没回复QAQ
本来bug多久麻烦,这下更雪上加霜了

@HumanityCSU
Copy link

编译到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));

@a-strong-python
Copy link

编译过程由于程序使用过多内存或其他系统资源而导致系统终止
image

@HumanityCSU
Copy link

HumanityCSU commented Mar 18, 2023 via email

@luotao1
Copy link
Contributor

luotao1 commented Mar 20, 2023

这个情况我在你们的热身打卡网页的评论区反应了,还附上了报错的信息

请问网页的评论区在哪儿?可以 附上链接,或者直接提一个新的issue。 @HumanityCSU

在编译过程中有任何的问题或建议,都可以提交 issue,注明 PaddlePaddle Hackathon,经飞桨团队确认是 bug 或有效建议后,可额外获得一个小礼品。

@a-strong-python
Copy link

这个情况我在你们的热身打卡网页的评论区反应了,还附上了报错的信息

请问网页的评论区在哪儿?可以 附上链接,或者直接提一个新的issue。 @HumanityCSU

在编译过程中有任何的问题或建议,都可以提交 issue,注明 PaddlePaddle Hackathon,经飞桨团队确认是 bug 或有效建议后,可额外获得一个小礼品。

我已经在paddle仓库上提交了这个issue,这是地址:#51824

@HumanityCSU
Copy link

HumanityCSU commented Mar 20, 2023 via email

@Li-fAngyU
Copy link
Contributor

使用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命令

十分感谢指出问题,已修改

@HumanityCSU
Copy link

HumanityCSU commented Mar 20, 2023 via email

@a-strong-python
Copy link

我记得我当时是在虚拟机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编译成功了,本地编译容易内存爆满,加油!

@luotao1
Copy link
Contributor

luotao1 commented Mar 21, 2023

我也没有收到AI Studio的授权

@HumanityCSU 可以查下2023/3/6的邮件(是否进垃圾箱或者过滤了),PM有给回复信息的。

@HumanityCSU
Copy link

HumanityCSU commented Mar 21, 2023 via email

@Candy2Tang
Copy link
Contributor

@luotao1 二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。
image

@luotao1
Copy link
Contributor

luotao1 commented Aug 10, 2023

二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。

@6clc @zhhsplendid 麻烦看一下,按理说,PHI不应该依赖CINN的

@6clc
Copy link
Contributor

6clc commented Aug 10, 2023

@luotao1 二次编译时为什么会触发 phi 库的重编呢,我只改了 paddle/cinn/hlir/framework/instruction.h 中的一行代码而已。

方便提供一下你的cmake指令吗?本地测试你的PR的commit修改,二次make未复现该问题。

@Candy2Tang
Copy link
Contributor

@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

@6clc
Copy link
Contributor

6clc commented Aug 10, 2023

@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的编译。要是你那里还是有这个问题,我再去看看其他人是不是也这样。

@HumanityCSU
Copy link

HumanityCSU commented Aug 10, 2023 via email

@yoyoIcy
Copy link
Contributor

yoyoIcy commented Aug 13, 2023

@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
Copy link
Contributor

luotao1 commented Aug 14, 2023

@yoyoIcy 你可以网上搜一下Performing build step for的解决方案,应该和你编译环境有关系。你是使用什么环境编译的?

@yoyoIcy
Copy link
Contributor

yoyoIcy commented Aug 14, 2023

@luotao1 mac上面拉了docker 镜像registry.baidubce.com/paddlepaddle/paddle:latest-dev编译的,我sed后另存为再覆盖先能执行过去了。遇到了新的问题c++: fatal error: Killed signal terminated program cc1plus,docker分配4个G内存不够?

@yoyoIcy
Copy link
Contributor

yoyoIcy commented Aug 14, 2023

把docker desktop里的resources->memory调成5G继续执行了

@xlcjz
Copy link

xlcjz commented Oct 7, 2023

@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

@qwedc001
Copy link

qwedc001 commented Apr 15, 2024

image
你好,在尝试编译的时候出现了找不到UINT64_MAX的问题(环境为Windows)
image

@ZhangYuef
Copy link

ZhangYuef commented Jun 6, 2024

飞腾+麒麟v10+昆仑K100环境中编译 PaddlePaddle 报错

详见:ISSUE #64903

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: In Progress
Development

No branches or pull requests