什么是开源项目和开源社区?国内活跃度 Top 的开源社区,都有哪些有趣的人和事?开源社区之于开源项目有何重要意义?开源项目(Open Source Project),顾名思义是指开放源代码的可以被公众使用的软件项目,在开源合规的基础上,其他开发者可以对软件进行使用、修改和发行。基于「共建共治共享」的开源理念,许多开源项目汇聚了一批拥有共同兴趣爱好的开发者,形成了一个个独特的开源社区(Open Source Community)。据第三方数据显示,飞桨开源社区已成为国内 Top 的开源社区,作为社区维护者,我们做对了什么?
1. 飞桨开源数据一览 2. 整体飞桨平台的情况 来一段官方介绍:
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集核心框架、基础模型库、端到端开发套件、丰富的工具组件、星河社区于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨在业内率先实现了动静统一的框架设计,兼顾科研和产业需求,在开发便捷的深度学习框架、大规模分布式训练、高性能推理引擎、产业级模型库等技术上处于国际领先水平。
飞桨端到端自适应混合并行训练技术以及压缩、推理、服务部署的协同优化,高效支撑以文心一言为代表的文心大模型的生产与应用。
IDC 发布的 2022 年中国深度学习框架和平台市场份额报告显示,百度稳居中国深度学习平台市场综合份额第一。中国信息通信研究院《深度学习平台发展报告(2022)》指出,飞桨已经成为中国深度学习市场应用规模第一的深度学习框架和赋能平台。
当前飞桨已凝聚 800 万开发者,基于飞桨创建 80 万个模型,服务 22 万家企事业单位,广泛服务于金融、能源、制造、交通等领域。
截至 2023 年 8 月,飞桨开源社区累计提交 Commits 超过 93 万次,以 PR 或 ISSUE 提交形式的开源贡献者超过 18000 人。
3. 谁开发了飞桨 BAIDU Contributors :专职的研发部门(深度学习技术平台部),及非专职的其他部门的工程师。
尽管并没有一种特定的方法来识别某位 contributor 是否是百度的雇员,但你依然可以从 github profile 或者 author email 中来找到大量活跃的百度工程师的身影。
Corporate Contributors :NVIDIA、INTEL、昆仑芯、寒武纪,等等多家硬件公司的专职工程师。
翻看AUTHORS.md 文件,或者查看飞桨的代码仓库的 commits log,你总能看到来自于这些硬件公司的优秀的工程师的贡献。(小彩蛋:你甚至能找到 intel 工程师们的一张合照)
Individual Contributors :来自高校的学生及来自企业的工程师在业余时间的贡献。
我们今天对开源社区及开发者的讨论,会聚焦到 Individual Contributors 群体。当前,个人贡献者群体已经成为飞桨开源社区必不可少的研发力量,在提升开源项目影响力、社区活跃度、扩大开源声量方面,更是有着十分重要的意义。
4. 社区开源贡献为飞桨带来了什么 这是一些 2023 年至今社区开发者为飞桨核心框架做出的代码贡献合辑,可以看到从工程效能优化、文档体验提升,到飞桨内核十分重要的 PHI 算子库独立编译,社区开发者都做出了非常重要的贡献。值得一提的是,飞桨 2.4 版本中发布的 API 有三分之一是由社区开发者完成的,到飞桨 2.5 版本,新增的 API 贡献几乎都来自社区开发者。
除此之外,在飞桨的端到端开发套件 PaddleOCR、PaddleClas、PaddleDetection、PaddleSeg,以及大模型套件 PaddleNLP、PaddleMIX 中,社区开发者贡献了许多 SOTA 的算法模型、训推一体 pipeline、tutorials&demo,与飞桨团队共同打磨易用的深度学习框架与工具组件。
这里可以查看更多进行中和已结项的项目:https://github.com/orgs/PaddlePaddle/projects/7
5. 参与飞桨社区的开源贡献会获得什么 技术实力与开源影响力提升
飞桨社区开源项目覆盖深度学习框架、模型、应用全领域,你想提升的技术,这里全都有; 与飞桨产研团队紧密沟通协作,和飞桨共同成长; 开源贡献行为全部公开可查,飞桨社区丰富的开源贡献活动助你树立个人开源影响力; 鼓励社区孵化项目,你可以在这里找到志同道合的小伙伴,把想法变成现实。 荣誉证书、现金激励与工作机会
颁发开源贡献证书、社区曝光度、奖状徽章等,致敬每一位贡献者; 举办丰富社区赛事,提供奖金/奖品激励与权威机构认证; 开源社区贡献者在招聘中会被优先考虑。 硬件支持
提供线上 V100 开发环境,随时可以开发与编译。
6. 飞桨快乐开源:Grow Together, and Have Fun 先来讲一个故事。
大概在 2022 年 12 月份的时候,通过代码扫描工具发现了飞桨框架的 100 多个小 bug 🐛。说是 bug,但是问题真的很小,诸如堆栈溢出(stack overflow)、UFA 非法地址访问(UFA illegal address access)、Python IndexError、空指针(Null pointer)、除 0 错误(divide by 0),大部分 bug 可以被很少的一行或几行代码 fix。
bug 发现了不能不修,怎么修呢?我们把目光放到了开源社区。这是一批极易上手的开发任务,开发者可以在不熟悉框架的情况下完成 bug 修复任务,获得满满成就感;时间上来看,刚好赶上高校学生们放寒假,有大量的空闲时间参与开源活动;研发人力方面,我们协调到 1 个完整人力来支持 code review,保障 bug 修复质量。天时地利人和,我们把这一批 bug 修复任务包装成了一个社区活动 —— 飞桨快乐开源:提 PR 领取新年礼物 🎁。
这个活动一经推出,立马受到了社区开发者的广泛关注和参与,出乎我们意料的是,看到了很多老朋友和新面孔的 PR 提交,有些人(点名 DrRyanHuang )嘴上说着「年后再说」,表情包做了不少,背地里 PR 也提了不少。
更为经典的是一名社区开发者 RedContritio 在除夕夜连着提了 18 个 PR,因为那个时间点大家都在欢度春节,没有人和他抢,导致他的 PR 编号都是连号的,由于 PR 质量过高,最后也顺利的全部完成了合入 ✅,给了我们一点小小的开源震撼 。
后来,快乐开源活动就顺理成章的成为了飞桨开源社区长期有效的日常活动,旨在通过简单易上手的开发任务,帮助开发者渐进的了解飞桨、参与开源。我们会按季度更新礼品清单、统计参与活动的开发者信息,并完成礼品邮寄。随着开发者参与热情越来越高,礼品也从游戏键盘、无线耳机升级到了 PS5、iPad、Apple Watch 等。
在 2023 年 Q4,快乐开源活动完成了一次全新升级 🔥,任务范围从 Paddle 框架扩展到科学计算 PaddleScience、大模型套件(PaddleMIX、PaddleNLP)、端到端开发套件(PaddleOCR、PaddleSeg、PaddleClas、PaddleDetection)、动转静孵化项目 PaddleSOT 等更多飞桨生态开源项目,上线「✨ 热身任务」、「🎯 命题任务」与「💡 开放任务」 ,使用「HappyOpenSource 」 标签追踪相关的 issue 与 pr,我们确立了「 Grow Together, and Have Fun! 」为口号,快乐开源活动逐渐做大做强~
更多信息可访问活动 issue 了解:https://github.com/PaddlePaddle/Paddle/issues/56689
Community over Code 是 Apache 软件基金会的项目中最广为人知的理念。尽管在社区的沟通方式上,跟 ASF 所鼓励的用邮件组来沟通不一样,飞桨社区的绝大部分沟通方式是在大家熟悉的微信群里,但从解决 「Good First Issue 」 加入进来的社区开发者们, 在熟悉了社区之后,同样可以迸发更大的能量。
再来讲一个故事。
作为源自百度的开源项目,飞桨的运营团队通常可以接触到一些第三方办赛的邀请,这次找到我们的是第六届『中国软件开源创新大赛』,这是一个由中国计算机学会(CCF)主办,西北工业大学、绿色计算产业联盟、CCF 开源发展委员会联合承办的大型赛事,联合百度、清华大学等企业单位以及多所高校共同设置赛题,飞桨参与了『开源任务挑战赛』赛道,发布了 16 道具有一定难度的、需要参赛选手自行拆解与项目管理的开源任务。我们称其为 「HappyOpenSource Pro 」 ,快乐开源进阶版 。任务详情:飞桨框架任务挑战赛(上) 、飞桨框架任务挑战赛(下)
让我们惊喜的是,这些即使是内部研发团队都觉得棘手的开发任务,被一批高水平的开发者完美的解决了。以飞桨赛道一等奖项目:赛题五:将 xdoctest 引入到飞桨框架工作流中 为例,项目涉及修改 1400+ API,数十万行代码,24 位开发者近 3 个月协同工作,队长 megemini 成长为 Reviewer,800 万飞桨用户从中受益。
更多顺师傅的专访可以查看往期 blog:https://pfcc.blog/posts/shun-story
这件事情让我们愈发相信开源的力量 ,即使是如此历史包袱重、项目管理难、工程量巨大的开源任务,在找到合适的 owner,提供足够资源支持的情况下,都是有可能被社区开发者们联合解决的。
正在进行中的第五期飞桨黑客马拉松 PaddlePaddle Hackathon 5th ,是飞桨开源社区一年两度的大型编程活动。
第五期活动发布三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营,上线当天即获得了开发者的广泛报名和参与,目前总体任务认领率 100%,核心框架任务提交率接近 90%,许多开发者直呼「卷出新高度」。
由社区开发者 Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,极大提升了社区活动的自动管理水平。在护航计划集训营中,学员 MarioLulab 兼任助教,搭建开源项目用于管理开发进度与周报提交,欢迎大家前往围观 ➡️ PFCCLab/Camp 。
与此同时,配套直播课程经过多期打磨,已形成完整的飞桨开源贡献视频资料,并发布在星河社区课程专区 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区 ,跟着飞桨导师,从这里开始你的黑客松之旅吧 💕
更多黑客松活动情况,可查看 blog:PaddlePaddle Hackathon Episode01 、PaddlePaddle Hackathon Episode02
8. 飞桨开源社区有哪些玩法 如果你正在寻找一个开源项目做贡献,或有意向加入一个开源组织 or 社区,我们非常欢迎你来飞桨开源社区玩,与我们一起执桨破浪,让深度学习技术的创新与应用更简单 。
你可以 follow 这样的路径:
社区活动 入门:快乐开源、启航计划 「快乐开源活动」 旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。如果你是刚接触飞桨 or 开源社区的小白,我们十分推荐你从打卡任务开始:
任务一:修改飞桨文档 ,完成你的第一个 PR,练习 git 操作,熟悉 GitHub 开源协作方式任务二:拉取 Paddle 代码,完成本地编译 ,让你对 Paddle 代码有更深入的理解,便于参与后续的框架开发任务任务三:在 PaddleMIX 中跑通 Stable-Diffusion 训练推理 ,你会快速掌握飞桨开发套件的使用,便于参与后续的套件开发任务详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/56689
「启航计划」 是 飞桨社区 发起的远程项目,也是「护航计划」的前置活动(不了解护航计划请看这里 ➡️ 护航计划说明 )。我们以集训营 的形式,鼓励开发者积极参与快乐开源活动 ,以此提升自己的代码实践能力。你可以把它当做【HACKATHON 预备营】,在这里找到志同道合的小伙伴,一起开发,一起成长。
详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/58497
进阶:黑客松、护航计划 「PaddlePaddle Hackathon 飞桨黑客马拉松」 是飞桨社区的大型编程活动,鼓励社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践 ,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献。适合具备一定开源贡献基础和代码基础的朋友前来挑战自我~~
第五期黑客松活动火热进行中,详情可查看 issue:
社区组织 技术交流组织:飞桨核心框架贡献者俱乐部 PFCC PFCC,全称 Paddle Framework Contributor Club,飞桨核心框架贡献者俱乐部 ,是一个有兴趣、正在、或者已经为飞桨开源框架 做开源贡献的贡献者成立的虚拟组织,在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。
目前,PFCC 已汇聚 100+ Contributor,6 名贡献者成长为 Committer,维持双周一次技术分享会,累计召开 30+ 次,产生上百个议题(详见会议纪要 ),与飞桨产研团队探讨飞桨框架硬核技术难题,发起联合开发项目。
更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pfcc
社区治理组织:飞桨社区开源发展工作组 PPOSDWG PPOSDWG,全称 PaddlePaddle OpenSource Development Working Group,飞桨社区开源发展工作组 ,为加强飞桨开源社区的透明治理,提升社区成员的参与感和社区认同,决策飞桨社区的关键事项与治理策略而成立。
2023 年 11 月 16 日,飞桨开源社区举行线上投票选举与成立仪式,39 名合格投票人完成投票,选举产生第一届工作组成员。
更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pposdwg
9. 写在最后 我们始终相信,开源社区因为人的汇聚而变得有意义。在这一年中,我们参与和见证了许许多多社区故事,为每一个精彩的 PR 鼓掌喝彩,为每一次「我们 paddle 如何如何」的句式感动,向每一位热爱开源的开发者和研发工程师致敬。
在飞桨开源社区,我们结识了许多有趣可爱的人,程序员不再是一个标签化 🏷 的群体。他们中,有「摸资本主义的鱼,建设社会主义框架」的 Intel 工程师 jinyouzhi ,有社区 Committer 手搓框架入职百度的全栈 001 喵喵喵 SigureMo ,有「水遍」所有开发任务群强势进入贡献者排行榜的 002 张师傅 Liyulingyue ,有获得硬件伙伴高度称赞的 3w+ 部署代码贡献达人 Zheng-Bicheng ,...,甚至还有五年级的小朋友 zhiheng-liu 刷新飞桨 Contributor 最小年龄记录。
因此我们萌生了创建这个 blog 网站的想法,由全栈工程师 001 搭建,代码开源在 GitHub,记录飞桨开源社区的故事,欢迎各位开发者投稿呀~~ https://pfcc.blog/
👆一些流传度很广的开发者自制表情包👆
「Shaping PaddlePaddle Future with You,与你一起定义飞桨的未来!」 从来不只是一句口号,就是在这日复一日的平凡生活中,在一行行代码的设计与运行里,在一次次前沿技术的交流与碰撞下,一些改变正在悄然发生。期待飞桨与你共同成长,让我们一起打造易用的深度学习框架与工具组件,在开源的世界走得更远!
',88)]))}const y=r(c,[["render",P]]);export{q as __pageData,y as default};
diff --git a/assets/posts_2023-os-report.md.DoaC6CkT.lean.js b/assets/posts_2023-os-report.md.DoaC6CkT.lean.js
new file mode 100644
index 0000000..115f486
--- /dev/null
+++ b/assets/posts_2023-os-report.md.DoaC6CkT.lean.js
@@ -0,0 +1 @@
+import{_ as r,c as a,k as t,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/3-3-individual-contributors.aY9Y6Qby.jpg",s="/assets/4-1-projects.CgY3HNnv.jpg",d="/assets/5-1-honours.DJKT6dKl.jpg",n="/assets/6-1-issues.BbL5Qc0u.jpg",i="/assets/6-2-nianhouzaishuo.qZiVLkTz.jpg",p="/assets/6-3-pullrequests.UoAleJ38.jpg",h="/assets/7-1-xdoctest-project.oqw0ghKZ.jpg",g="/assets/7-2-paddlepaddle-hackathon.CoasP8de.jpg",u="/assets/9-1-funny-memes.Cm8SrYal.jpg",q=JSON.parse('{"title":"飞桨开源社区成为国内 Top,我们做对了什么?","description":"","frontmatter":{"title":"飞桨开源社区成为国内 Top,我们做对了什么?","date":"2023-12-02T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"},"pinned":true},"headers":[],"relativePath":"posts/2023-os-report.md","filePath":"posts/2023-os-report.md"}'),c={name:"posts/2023-os-report.md"};function P(b,e,m,f,_,k){return o(),a("div",null,e[0]||(e[0]=[t('什么是开源项目和开源社区?国内活跃度 Top 的开源社区,都有哪些有趣的人和事?开源社区之于开源项目有何重要意义?
开源项目(Open Source Project),顾名思义是指开放源代码的可以被公众使用的软件项目,在开源合规的基础上,其他开发者可以对软件进行使用、修改和发行。基于「共建共治共享」的开源理念,许多开源项目汇聚了一批拥有共同兴趣爱好的开发者,形成了一个个独特的开源社区(Open Source Community)。据第三方数据显示,飞桨开源社区已成为国内 Top 的开源社区,作为社区维护者,我们做对了什么?
1. 飞桨开源数据一览 2. 整体飞桨平台的情况 来一段官方介绍:
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集核心框架、基础模型库、端到端开发套件、丰富的工具组件、星河社区于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨在业内率先实现了动静统一的框架设计,兼顾科研和产业需求,在开发便捷的深度学习框架、大规模分布式训练、高性能推理引擎、产业级模型库等技术上处于国际领先水平。
飞桨端到端自适应混合并行训练技术以及压缩、推理、服务部署的协同优化,高效支撑以文心一言为代表的文心大模型的生产与应用。
IDC 发布的 2022 年中国深度学习框架和平台市场份额报告显示,百度稳居中国深度学习平台市场综合份额第一。中国信息通信研究院《深度学习平台发展报告(2022)》指出,飞桨已经成为中国深度学习市场应用规模第一的深度学习框架和赋能平台。
当前飞桨已凝聚 800 万开发者,基于飞桨创建 80 万个模型,服务 22 万家企事业单位,广泛服务于金融、能源、制造、交通等领域。
截至 2023 年 8 月,飞桨开源社区累计提交 Commits 超过 93 万次,以 PR 或 ISSUE 提交形式的开源贡献者超过 18000 人。
3. 谁开发了飞桨 BAIDU Contributors :专职的研发部门(深度学习技术平台部),及非专职的其他部门的工程师。
尽管并没有一种特定的方法来识别某位 contributor 是否是百度的雇员,但你依然可以从 github profile 或者 author email 中来找到大量活跃的百度工程师的身影。
Corporate Contributors :NVIDIA、INTEL、昆仑芯、寒武纪,等等多家硬件公司的专职工程师。
翻看AUTHORS.md 文件,或者查看飞桨的代码仓库的 commits log,你总能看到来自于这些硬件公司的优秀的工程师的贡献。(小彩蛋:你甚至能找到 intel 工程师们的一张合照)
Individual Contributors :来自高校的学生及来自企业的工程师在业余时间的贡献。
我们今天对开源社区及开发者的讨论,会聚焦到 Individual Contributors 群体。当前,个人贡献者群体已经成为飞桨开源社区必不可少的研发力量,在提升开源项目影响力、社区活跃度、扩大开源声量方面,更是有着十分重要的意义。
4. 社区开源贡献为飞桨带来了什么 这是一些 2023 年至今社区开发者为飞桨核心框架做出的代码贡献合辑,可以看到从工程效能优化、文档体验提升,到飞桨内核十分重要的 PHI 算子库独立编译,社区开发者都做出了非常重要的贡献。值得一提的是,飞桨 2.4 版本中发布的 API 有三分之一是由社区开发者完成的,到飞桨 2.5 版本,新增的 API 贡献几乎都来自社区开发者。
除此之外,在飞桨的端到端开发套件 PaddleOCR、PaddleClas、PaddleDetection、PaddleSeg,以及大模型套件 PaddleNLP、PaddleMIX 中,社区开发者贡献了许多 SOTA 的算法模型、训推一体 pipeline、tutorials&demo,与飞桨团队共同打磨易用的深度学习框架与工具组件。
这里可以查看更多进行中和已结项的项目:https://github.com/orgs/PaddlePaddle/projects/7
5. 参与飞桨社区的开源贡献会获得什么 技术实力与开源影响力提升
飞桨社区开源项目覆盖深度学习框架、模型、应用全领域,你想提升的技术,这里全都有; 与飞桨产研团队紧密沟通协作,和飞桨共同成长; 开源贡献行为全部公开可查,飞桨社区丰富的开源贡献活动助你树立个人开源影响力; 鼓励社区孵化项目,你可以在这里找到志同道合的小伙伴,把想法变成现实。 荣誉证书、现金激励与工作机会
颁发开源贡献证书、社区曝光度、奖状徽章等,致敬每一位贡献者; 举办丰富社区赛事,提供奖金/奖品激励与权威机构认证; 开源社区贡献者在招聘中会被优先考虑。 硬件支持
提供线上 V100 开发环境,随时可以开发与编译。
6. 飞桨快乐开源:Grow Together, and Have Fun 先来讲一个故事。
大概在 2022 年 12 月份的时候,通过代码扫描工具发现了飞桨框架的 100 多个小 bug 🐛。说是 bug,但是问题真的很小,诸如堆栈溢出(stack overflow)、UFA 非法地址访问(UFA illegal address access)、Python IndexError、空指针(Null pointer)、除 0 错误(divide by 0),大部分 bug 可以被很少的一行或几行代码 fix。
bug 发现了不能不修,怎么修呢?我们把目光放到了开源社区。这是一批极易上手的开发任务,开发者可以在不熟悉框架的情况下完成 bug 修复任务,获得满满成就感;时间上来看,刚好赶上高校学生们放寒假,有大量的空闲时间参与开源活动;研发人力方面,我们协调到 1 个完整人力来支持 code review,保障 bug 修复质量。天时地利人和,我们把这一批 bug 修复任务包装成了一个社区活动 —— 飞桨快乐开源:提 PR 领取新年礼物 🎁。
这个活动一经推出,立马受到了社区开发者的广泛关注和参与,出乎我们意料的是,看到了很多老朋友和新面孔的 PR 提交,有些人(点名 DrRyanHuang )嘴上说着「年后再说」,表情包做了不少,背地里 PR 也提了不少。
更为经典的是一名社区开发者 RedContritio 在除夕夜连着提了 18 个 PR,因为那个时间点大家都在欢度春节,没有人和他抢,导致他的 PR 编号都是连号的,由于 PR 质量过高,最后也顺利的全部完成了合入 ✅,给了我们一点小小的开源震撼 。
后来,快乐开源活动就顺理成章的成为了飞桨开源社区长期有效的日常活动,旨在通过简单易上手的开发任务,帮助开发者渐进的了解飞桨、参与开源。我们会按季度更新礼品清单、统计参与活动的开发者信息,并完成礼品邮寄。随着开发者参与热情越来越高,礼品也从游戏键盘、无线耳机升级到了 PS5、iPad、Apple Watch 等。
在 2023 年 Q4,快乐开源活动完成了一次全新升级 🔥,任务范围从 Paddle 框架扩展到科学计算 PaddleScience、大模型套件(PaddleMIX、PaddleNLP)、端到端开发套件(PaddleOCR、PaddleSeg、PaddleClas、PaddleDetection)、动转静孵化项目 PaddleSOT 等更多飞桨生态开源项目,上线「✨ 热身任务」、「🎯 命题任务」与「💡 开放任务」 ,使用「HappyOpenSource 」 标签追踪相关的 issue 与 pr,我们确立了「 Grow Together, and Have Fun! 」为口号,快乐开源活动逐渐做大做强~
更多信息可访问活动 issue 了解:https://github.com/PaddlePaddle/Paddle/issues/56689
Community over Code 是 Apache 软件基金会的项目中最广为人知的理念。尽管在社区的沟通方式上,跟 ASF 所鼓励的用邮件组来沟通不一样,飞桨社区的绝大部分沟通方式是在大家熟悉的微信群里,但从解决 「Good First Issue 」 加入进来的社区开发者们, 在熟悉了社区之后,同样可以迸发更大的能量。
再来讲一个故事。
作为源自百度的开源项目,飞桨的运营团队通常可以接触到一些第三方办赛的邀请,这次找到我们的是第六届『中国软件开源创新大赛』,这是一个由中国计算机学会(CCF)主办,西北工业大学、绿色计算产业联盟、CCF 开源发展委员会联合承办的大型赛事,联合百度、清华大学等企业单位以及多所高校共同设置赛题,飞桨参与了『开源任务挑战赛』赛道,发布了 16 道具有一定难度的、需要参赛选手自行拆解与项目管理的开源任务。我们称其为 「HappyOpenSource Pro 」 ,快乐开源进阶版 。任务详情:飞桨框架任务挑战赛(上) 、飞桨框架任务挑战赛(下)
让我们惊喜的是,这些即使是内部研发团队都觉得棘手的开发任务,被一批高水平的开发者完美的解决了。以飞桨赛道一等奖项目:赛题五:将 xdoctest 引入到飞桨框架工作流中 为例,项目涉及修改 1400+ API,数十万行代码,24 位开发者近 3 个月协同工作,队长 megemini 成长为 Reviewer,800 万飞桨用户从中受益。
更多顺师傅的专访可以查看往期 blog:https://pfcc.blog/posts/shun-story
这件事情让我们愈发相信开源的力量 ,即使是如此历史包袱重、项目管理难、工程量巨大的开源任务,在找到合适的 owner,提供足够资源支持的情况下,都是有可能被社区开发者们联合解决的。
正在进行中的第五期飞桨黑客马拉松 PaddlePaddle Hackathon 5th ,是飞桨开源社区一年两度的大型编程活动。
第五期活动发布三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营,上线当天即获得了开发者的广泛报名和参与,目前总体任务认领率 100%,核心框架任务提交率接近 90%,许多开发者直呼「卷出新高度」。
由社区开发者 Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,极大提升了社区活动的自动管理水平。在护航计划集训营中,学员 MarioLulab 兼任助教,搭建开源项目用于管理开发进度与周报提交,欢迎大家前往围观 ➡️ PFCCLab/Camp 。
与此同时,配套直播课程经过多期打磨,已形成完整的飞桨开源贡献视频资料,并发布在星河社区课程专区 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区 ,跟着飞桨导师,从这里开始你的黑客松之旅吧 💕
更多黑客松活动情况,可查看 blog:PaddlePaddle Hackathon Episode01 、PaddlePaddle Hackathon Episode02
8. 飞桨开源社区有哪些玩法 如果你正在寻找一个开源项目做贡献,或有意向加入一个开源组织 or 社区,我们非常欢迎你来飞桨开源社区玩,与我们一起执桨破浪,让深度学习技术的创新与应用更简单 。
你可以 follow 这样的路径:
社区活动 入门:快乐开源、启航计划 「快乐开源活动」 旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。如果你是刚接触飞桨 or 开源社区的小白,我们十分推荐你从打卡任务开始:
任务一:修改飞桨文档 ,完成你的第一个 PR,练习 git 操作,熟悉 GitHub 开源协作方式任务二:拉取 Paddle 代码,完成本地编译 ,让你对 Paddle 代码有更深入的理解,便于参与后续的框架开发任务任务三:在 PaddleMIX 中跑通 Stable-Diffusion 训练推理 ,你会快速掌握飞桨开发套件的使用,便于参与后续的套件开发任务详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/56689
「启航计划」 是 飞桨社区 发起的远程项目,也是「护航计划」的前置活动(不了解护航计划请看这里 ➡️ 护航计划说明 )。我们以集训营 的形式,鼓励开发者积极参与快乐开源活动 ,以此提升自己的代码实践能力。你可以把它当做【HACKATHON 预备营】,在这里找到志同道合的小伙伴,一起开发,一起成长。
详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/58497
进阶:黑客松、护航计划 「PaddlePaddle Hackathon 飞桨黑客马拉松」 是飞桨社区的大型编程活动,鼓励社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践 ,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献。适合具备一定开源贡献基础和代码基础的朋友前来挑战自我~~
第五期黑客松活动火热进行中,详情可查看 issue:
社区组织 技术交流组织:飞桨核心框架贡献者俱乐部 PFCC PFCC,全称 Paddle Framework Contributor Club,飞桨核心框架贡献者俱乐部 ,是一个有兴趣、正在、或者已经为飞桨开源框架 做开源贡献的贡献者成立的虚拟组织,在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。
目前,PFCC 已汇聚 100+ Contributor,6 名贡献者成长为 Committer,维持双周一次技术分享会,累计召开 30+ 次,产生上百个议题(详见会议纪要 ),与飞桨产研团队探讨飞桨框架硬核技术难题,发起联合开发项目。
更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pfcc
社区治理组织:飞桨社区开源发展工作组 PPOSDWG PPOSDWG,全称 PaddlePaddle OpenSource Development Working Group,飞桨社区开源发展工作组 ,为加强飞桨开源社区的透明治理,提升社区成员的参与感和社区认同,决策飞桨社区的关键事项与治理策略而成立。
2023 年 11 月 16 日,飞桨开源社区举行线上投票选举与成立仪式,39 名合格投票人完成投票,选举产生第一届工作组成员。
更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pposdwg
9. 写在最后 我们始终相信,开源社区因为人的汇聚而变得有意义。在这一年中,我们参与和见证了许许多多社区故事,为每一个精彩的 PR 鼓掌喝彩,为每一次「我们 paddle 如何如何」的句式感动,向每一位热爱开源的开发者和研发工程师致敬。
在飞桨开源社区,我们结识了许多有趣可爱的人,程序员不再是一个标签化 🏷 的群体。他们中,有「摸资本主义的鱼,建设社会主义框架」的 Intel 工程师 jinyouzhi ,有社区 Committer 手搓框架入职百度的全栈 001 喵喵喵 SigureMo ,有「水遍」所有开发任务群强势进入贡献者排行榜的 002 张师傅 Liyulingyue ,有获得硬件伙伴高度称赞的 3w+ 部署代码贡献达人 Zheng-Bicheng ,...,甚至还有五年级的小朋友 zhiheng-liu 刷新飞桨 Contributor 最小年龄记录。
因此我们萌生了创建这个 blog 网站的想法,由全栈工程师 001 搭建,代码开源在 GitHub,记录飞桨开源社区的故事,欢迎各位开发者投稿呀~~ https://pfcc.blog/
👆一些流传度很广的开发者自制表情包👆
「Shaping PaddlePaddle Future with You,与你一起定义飞桨的未来!」 从来不只是一句口号,就是在这日复一日的平凡生活中,在一行行代码的设计与运行里,在一次次前沿技术的交流与碰撞下,一些改变正在悄然发生。期待飞桨与你共同成长,让我们一起打造易用的深度学习框架与工具组件,在开源的世界走得更远!
',88)]))}const y=r(c,[["render",P]]);export{q as __pageData,y as default};
diff --git a/assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.js b/assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.js
new file mode 100644
index 0000000..65f5954
--- /dev/null
+++ b/assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.js
@@ -0,0 +1 @@
+import{_ as t,c as a,k as r,o as s}from"./chunks/framework.D1-4jGi8.js";const n="/assets/chengdu-kaiyuanshe-01.D_gtc2JY.jpg",o="/assets/chengdu-kaiyuanshe-02.TIbUct4S.jpg",p="/assets/chengdu-kaiyuanshe-03.D9ILJX09.jpg",h="/assets/chengdu-kaiyuanshe-04.Buo76V4B.jpg",i="/assets/chengdu-kaiyuanshe-05.DdgzhQlp.jpg",g="/assets/chengdu-egg.BDf4-r8r.jpg",k=JSON.parse('{"title":"飞桨社区成都行:开源社活动与开发者线下 Meetup","description":"","frontmatter":{"title":"飞桨社区成都行:开源社活动与开发者线下 Meetup","date":"2023-11-02T00:00:00.000Z","author":{"name":"孙师傅","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/chengdu-kaiyuanshe.md","filePath":"posts/chengdu-kaiyuanshe.md"}'),u={name:"posts/chengdu-kaiyuanshe.md"};function l(c,e,d,m,_,f){return s(),a("div",null,e[0]||(e[0]=[r('2023 年 10 月 28 日、29 日参加开源社举办的「第八届中国开源年会」的精彩瞬间,以及与咱 Paddle 社区成都开发者们的线下见面~
第八届中国开源年会 飞桨开源社区受邀参加第八届中国开源年会,梦师傅和我(孙师傅)都贡献了两场精彩的演讲 🎉。
28 日的活动中,梦师傅在青少年开源与开源教育 分论坛上,分享了主题为「走进开源社区 」的演讲,向祖国的仙人掌们 🌵 宣传咱们充满趣味和活力的飞桨开源社区。
梦师傅还鼓励了很多青年开发者加入飞桨开源社区,其中甚至有一名刚年满 15 岁的初中学生,在活动后提交了 PR 并成功合入,成为了 Paddle 的 contributor @BernieHuang2008 。
29 日的主论坛上,孙师傅进行了闪电演讲 ,分享了「如何在开源社区摸 🐟 」,介绍了孙师傅工作 0.5kun 年🐔 里总结的摸鱼心得。
演讲的详细内容将在后续的博客中分享,敬请期待~
飞桨社区成都开发者 Meetup 在 29 日,我们还相约飞桨社区成都的开发者们线下面基,以下是痛失真名的成都开发者(网友 ):
梦师傅还很贴心的给每位开发者赠送了 PaddlePaddle contributor 专属徽章 🥳。
期待未来与成都的伙伴们再次见面!
彩蛋 🎊 最后,我们还一起跟随军哥 @jzhang533 观看了一场外国小姐姐的 livehouse,很精彩哟!
',20)]))}const P=t(u,[["render",l]]);export{k as __pageData,P as default};
diff --git a/assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.lean.js b/assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.lean.js
new file mode 100644
index 0000000..65f5954
--- /dev/null
+++ b/assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as a,k as r,o as s}from"./chunks/framework.D1-4jGi8.js";const n="/assets/chengdu-kaiyuanshe-01.D_gtc2JY.jpg",o="/assets/chengdu-kaiyuanshe-02.TIbUct4S.jpg",p="/assets/chengdu-kaiyuanshe-03.D9ILJX09.jpg",h="/assets/chengdu-kaiyuanshe-04.Buo76V4B.jpg",i="/assets/chengdu-kaiyuanshe-05.DdgzhQlp.jpg",g="/assets/chengdu-egg.BDf4-r8r.jpg",k=JSON.parse('{"title":"飞桨社区成都行:开源社活动与开发者线下 Meetup","description":"","frontmatter":{"title":"飞桨社区成都行:开源社活动与开发者线下 Meetup","date":"2023-11-02T00:00:00.000Z","author":{"name":"孙师傅","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/chengdu-kaiyuanshe.md","filePath":"posts/chengdu-kaiyuanshe.md"}'),u={name:"posts/chengdu-kaiyuanshe.md"};function l(c,e,d,m,_,f){return s(),a("div",null,e[0]||(e[0]=[r('2023 年 10 月 28 日、29 日参加开源社举办的「第八届中国开源年会」的精彩瞬间,以及与咱 Paddle 社区成都开发者们的线下见面~
第八届中国开源年会 飞桨开源社区受邀参加第八届中国开源年会,梦师傅和我(孙师傅)都贡献了两场精彩的演讲 🎉。
28 日的活动中,梦师傅在青少年开源与开源教育 分论坛上,分享了主题为「走进开源社区 」的演讲,向祖国的仙人掌们 🌵 宣传咱们充满趣味和活力的飞桨开源社区。
梦师傅还鼓励了很多青年开发者加入飞桨开源社区,其中甚至有一名刚年满 15 岁的初中学生,在活动后提交了 PR 并成功合入,成为了 Paddle 的 contributor @BernieHuang2008 。
29 日的主论坛上,孙师傅进行了闪电演讲 ,分享了「如何在开源社区摸 🐟 」,介绍了孙师傅工作 0.5kun 年🐔 里总结的摸鱼心得。
演讲的详细内容将在后续的博客中分享,敬请期待~
飞桨社区成都开发者 Meetup 在 29 日,我们还相约飞桨社区成都的开发者们线下面基,以下是痛失真名的成都开发者(网友 ):
梦师傅还很贴心的给每位开发者赠送了 PaddlePaddle contributor 专属徽章 🥳。
期待未来与成都的伙伴们再次见面!
彩蛋 🎊 最后,我们还一起跟随军哥 @jzhang533 观看了一场外国小姐姐的 livehouse,很精彩哟!
',20)]))}const P=t(u,[["render",l]]);export{k as __pageData,P as default};
diff --git a/assets/posts_chuan-story.md.0jPuh_f7.js b/assets/posts_chuan-story.md.0jPuh_f7.js
new file mode 100644
index 0000000..7796d69
--- /dev/null
+++ b/assets/posts_chuan-story.md.0jPuh_f7.js
@@ -0,0 +1 @@
+import{M as o,_ as e}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as i,i as a,s as n,a as s,v as r,o as p}from"./chunks/framework.D1-4jGi8.js";const g="/assets/chuan-01.G-cxJRwy.jpg",u="/assets/chuan-02.qE5JSX5Y.jpg",d="/assets/chuan-03.NXP-Ww_V.jpg",h="/assets/chuan-04.prZsqaDd.jpg",c="/assets/chuan-05.CTY1_QPh.jpg",f="/assets/chuan-06.Scj6rPAw.jpg",m="/assets/chuan-07.DoP7Tkq4.jpg",b="/assets/chuan-08.0g__Lgih.jpg",y="/assets/chuan-09.o4wJxXln.jpg",_="/assets/chuan-10.CQs76eIH.jpg",P="/assets/chuan-11.B0MWhn9d.jpg",k="/assets/chuan-12.uS2sz8Vz.jpg",j="/assets/chuan-13.BzlKW8CG.jpg",x="/assets/chuan-14.B1YsXHnP.jpg",q="/assets/chuan-15.Dxfq_RNd.jpg",w="/assets/chuan-16.IkFqI2uB.jpg",S="/assets/chuan-17.BT7EnFZw.jpg",M=JSON.parse('{"title":"【开源江湖闲聊录】英雄不问出处:川师傅的逆袭之路","description":"","frontmatter":{"title":"【开源江湖闲聊录】英雄不问出处:川师傅的逆袭之路","date":"2023-11-28T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇","github":"wenxiaohahaha"},{"name":"田川(川川)","github":"gouzil"}]},"headers":[],"relativePath":"posts/chuan-story.md","filePath":"posts/chuan-story.md"}'),v={name:"posts/chuan-story.md"},C=Object.assign(v,{setup(A){return(T,t)=>(p(),l("div",null,[t[5]||(t[5]=i('“桨声川水悠悠过,长路漫漫风光留”,这次我们要采访的是小伙伴们都熟悉的励志富哥儿——川川师傅 ✨
一、前言 按川川要求,以下均以 🍢🍢 代称川川。
川川目前是一名平平无奇的 大学生🧑🎓,也是 Paddle 社区里的一名资深开发者。他精通 (🍢🍢: 我没有,不是,别瞎说🐶)Java、Python、C++ 等多门编程语言,还掌握 Flutter、Android、Vue 等工具,可谓多才多艺!
川川加入 Paddle 社区后,从最简单的文档修改任务开始,到参与快乐开源、熟悉 paddle 框架,到参与充满难度和挑战的护航计划,到最终自己能够独立的拆解问题、发起社区项目(ruff 升级),我们亲眼见证了他一步步的成长 (怎么有种养成系的感觉) 。
在提升自我外,川师傅也多次热心地帮助新伙伴们解决 bug、回答问题。(所以大家如果有问题,可以随时在群里骚扰他哦 )
然而当抛开“Paddle 社区开发者”“学生”等形象标签后,单独地看川师傅自身的人生经历,可谓是非常的励志 。你敢相信,川师傅是从中专、大专一路读上来的吗?川师傅的经历像是一本精彩绝伦的探险故事集。接下来让我们来读读他的探险之旅吧!
!!!注意!!!上图为川川师傅の帅照,小伙伴们可以截图保存哦!😝😝😝😝
二、采访内容 介绍一下自己吧,川川师傅 o(_ ̄3 ̄)o !
🍢🍢: 我的 AI Studio 账号是 gouzi,GitHub 的账号是 gouzil !o( ̄ε ̄_)o
作为一个 21 岁青春男大,平时有什么兴趣爱好?听说你喜欢出去玩,你在福建有什么推荐给大家打卡的景点么?哈哈~
🍢🍢: 爱好当然是出去走走玩玩,感受一下人间烟火气。打卡的话当然是福建的省会厦门啦🐶,在十里长堤跟着男女朋友看看夕阳,鼓浪屿的小巷子。平潭岛也挺不错的(🍢🍢没去过但是朋友圈已经发爆了,图中为蓝眼泪时期,需要特定的季节,且肉眼看不出来这种效果,需要相机长曝光,大家别跑空咯)。
厦门杏林大桥(来源: 川川相册) 十里长堤(来源: 川川相册) 鼓浪屿(来源:厦门文旅公众号) 平潭(来源: 新华社 2023/04/29 ) 据我了解,你在初中时就用易语言写了个安卓 APP 给奶奶使用,你能详细讲讲这个 APP 的设计目的和功能么?你当时学习了些什么技术才把这个 APP 做成?那又是通过哪种方式(看书?上网学习?视频?)学习的呢?
🍢🍢: 1️⃣ 其实设计这个 APP 是因为奶奶不识字,但是又需要使用手机(而正常手机打电话都是看人的名字进行拨打)。这个 APP 可以理解为一个默认桌面,手机解锁后 APP 就打开,打开后是像下图一样的手机联系人的照片,其实就是把联系人名字变成对应的他们的图片,这样尽管奶奶不识字,也可以看照片进行操作了!🐶 2️⃣ 当时学了啥技术: 其实也没具体的学,因为易语言是中文,有一定的思维逻辑就能实现啦。3️⃣ 通过哪种方式: 翻翻编译器自带的易语言说明(那时候 bilibili 还没有那么火,也没有啥书,只有一台能跑安卓模拟器的电脑)。
在 16 岁左右,你就陆陆续续自学了 Python、Java、C,后来又自学了 Go、Android 等等,在这个自学过程中你遇到了那些困难,又有想过放弃么?
🍢🍢: 遇到困难当然是有的,很难想象 C 我看了半年视频才学会的(有部分原因是我比较拖, 学习一门新的语言时长最好不要超过两周, 因为后续的项目会慢慢的补上来的)。每次接触一门新的语言都会对计算机有更深的理解,理解不同语言为什么要这么做,这么做的优缺点,这也是不断学习的动力吧。想过放弃么: 没有,我还挺感兴趣的,兴趣是最好的老师。
能简单聊聊你的这几年的学习经历么?
🍢🍢: 下图最右侧那一列就是学习的顺序啦(学那么多真没啥用,学好一个精通它就行)。也没啥经验,顺其自然就好啦,等学完技术应该也更新了。最快的方式就是跟着项目走,不断的优化它 (最后就会发现:我写的什么玩意,要不要重构🐶) 。不过倒是有几个提升比较大的时间段,一个是去参加了云计算比赛,让我会了 linux 和 docker 这些。一个是实习的那一年,让我整明白了网站这一套(B/S,C/S)。
现在社区开发者都认为你的编程能力很强,和学历形成了很大反差,能透露一下当时是为什么会上中专呢?是因为偏科吗?
🍢🍢: 不是偏科啦,我差的很平均🐶。顺带说一下厦门的初升高录取率为 45%,现在好些了 50%,卷不动卷不动,当然更多是因为我比较菜。
事实上在目前的舆论环境里,“专科生”是一个很遭受非议的标签😮💨,而作为一个亲历者,你内心的是怎么面对的呢?你当时又做了哪些方面的努力?
🍢🍢: 关于这个标签的话,我只想说:你说的对。没啥必要在乎别人的看法,做自己热爱的事情就好啦。
作为目前考上本科的计算机应用技术专业的学生,你对未来的职业发展有怎样的规划和期望✊✊✊?
🍢🍢: 我更喜欢做一些底层的工作,不太喜欢做应用层。规划:入职百度,重构 paddle 。
作为厦门领航团的一员,你当时是什么契机接触 Paddle 社区的?在 Paddle 社区做的第一个开源项目是什么?
🍢🍢: 说到这个契机啊,非常简单,你的上司是厦门领航团团长就行。第一个开源项目当然是我们孙师傅(@sunzhongkai588 )的 docs 啦,当然非常感谢佳维姐姐(@dingjiaweiww )和梦师傅(@Ligoml )的鼓励和协助我完成了在 paddle 的第一个 pr。
在社区里如何和其他开发者进行互动的?有没有什么特别有意思的经历或故事?
🍢🍢: 我一般有碰上问题就出来回答啦,或者一些技术讨论。特别的故事:五年级的小朋友叫我叔叔算嘛
对于 Paddle 框架护航计划,可以分享一下你的面试经历和感受吗?你觉得到达什么水平可以通过护航计划的面试?
🍢🍢: 经历的话,放心研发大哥不会难为你的,真诚就行。感受 emmm,大家一定要提前准备啊,刷刷算法什么的。什么水平 emmm,我也不太清楚,但是最好是熟悉 padlle,或者你的能力超级无敌强。
编者注✍️:「护航计划」可以简单理解为飞桨的远程实习项目,可参考 护航计划集训营说明
参与护航计划时,有什么不一样的感受吗?实际开发过程有没有遇到困难,是怎么解决的?
🍢🍢: 最大的感受就是,终于从应用层转向了框架层。困难是肯定有的,也有非常多不会的,但是这没关系,问研发大哥就行。就像昆昆(@2742195759 )说的: 你尽管问,我就是你的文档。
在 Paddle 社区中,你参与的哪个项目(或活动)你印象最深刻,能简单描述一下这个项目么?这个项目让你收获了什么?
🍢🍢: 印象最深的项目是下一个项目,下一个项目可以把之前项目的经验集结起来,也可以学到一些新的知识。当然 PaddleSOT 印象也挺深的,这也是我护航计划的项目。收获更多的是技术的进步吧。有时候看看喵喵(@SigureMo )的修改会发现,噢原来还能这么写。
对于深度学习领域,你有哪些想法和研究方向?目前有没有感兴趣的方向?
🍢🍢: 我其实更多的还是喜欢框架层,怎样才能让整个框架跑的更快,占用更低,更加的易用化。
发挥一下想象力,如果将深度学习比作一种食物,你觉得它会是什么?为什么?
🍢🍢: 可能是米饭吧,喂的越多越有力气,跑的越快,力大砖飞。
听说你使用飞桨解决过很多企业实际问题时,你遇到过最有趣的案例是什么?那么你是如何应用深度学习技术解决这个问题的?
🍢🍢: 我实习这个企业吧,他刚尝试深度学习,所以一般调调 API 就行了,更多的是怎样去分配资源,做到效率最大化 (我司全是 1050 的卡,我能咋办,我也很绝望啊) 。
除了深度学习,你还对其他领域感兴趣吗?有没有想过将深度学习与其他领域结合,创造出一些令人惊喜的应用?
🍢🍢: 其他领域其实有的,比如摄影和游戏,结合的话有想过,但是还没新建文件夹就不说了🐶
如果你有机会和 Paddle 社区 or 深度学习领域 or 计算机领域 的一位顶级专家进行合作,你希望和他/她一起研究什么问题?为什么?
🍢🍢: 这可就太多了,比如:不同语言的通信,怎么做到程序的相对安全,怎样去减少硬件之间的瓶颈。为什么 emmm,可能是因为自己对这方面感兴趣吧。
如果让你形容一下你和 Paddle 社区的关系,你会怎么说?
🍢🍢: 相互促进,互相成就 (更多还是 paddle 社区的大佬单方面带着我)
最后,作为一个热情、励志的年轻人,你想对 Paddle 社区里的开源者们说些什么呢?
🍢🍢: 放开那道题,让我来🐶
三、“鲁迅之我确实说过这话”专区 同样我们也邀请了一些和川川很熟悉的、有过合作经历的朋友们,贡献一下和川师傅相关的故事,或者他们对川师傅的评价~以下均为真心话,请放心看!
',17)),a(o,null,{default:n(()=>[a(e,{name:"散佬",github:"sanbuphy"},{default:n(()=>t[0]||(t[0]=[r(" 和川川交流还算比较多,川川基本上有空都会帮你解决任何疑问,甚至是看代码。虽然是年轻的富哥,但很努力上进,甚至比孙师傅还努力🐶;总体来说算很善良的小哥,教过我很多东西。希望能和他一起学习成长,向他多学习请教一些代码之道,早日都一起为中国开源社区多做一些更有价值的事情。 在我无数个老师中,他肯定是我印象深刻的老师之一。 ")])),_:1})]),_:1}),t[6]||(t[6]=s("h3",{id:"by-卢师傅-andsonder",tabindex:"-1"},[r("by 卢师傅("),s("a",{href:"https://github.com/AndSonder",target:"_blank",rel:"noreferrer"},"AndSonder"),r(") "),s("a",{class:"header-anchor",href:"#by-卢师傅-andsonder","aria-label":'Permalink to "by 卢师傅([AndSonder](https://github.com/AndSonder))"'},"")],-1)),a(o,null,{default:n(()=>[a(e,{name:"卢畅",github:"AndSonder"},{default:n(()=>t[1]||(t[1]=[r(" 有幸在今年暑期上海 meetup 上认识了川师傅,很低调的技术大佬。在川师傅身上能看到对开源活动的热情,各大活动上都能看到川师傅的身影。希望以后还有机会和川师傅线下面基,迪迪小组再次出发! ")])),_:1})]),_:1}),t[7]||(t[7]=s("blockquote",null,[s("p",null,"编者注✍️:迪迪小组是上海 meetup 期间,相约去迪士尼玩的小分队")],-1)),t[8]||(t[8]=s("h3",{id:"by-一师傅-siguremo",tabindex:"-1"},[r("by 一师傅("),s("a",{href:"https://github.com/SigureMo",target:"_blank",rel:"noreferrer"},"SigureMo"),r(") "),s("a",{class:"header-anchor",href:"#by-一师傅-siguremo","aria-label":'Permalink to "by 一师傅([SigureMo](https://github.com/SigureMo))"'},"")],-1)),a(o,null,{default:n(()=>[a(e,{name:"喵喵",github:"SigureMo"},{default:n(()=>t[2]||(t[2]=[r(" 自川子参与第一期护航计划开始已经马上就要 6 个月了,我和川子也算是深度交流了 6 个月。从护航计划来看,川子始终保持十足的热情,在 PaddleSOT 那时候还是以开源任务的形式发放,但每次有任务川子都会第一时间认领。之后到现在动转静单测推全,我的 review 速度都赶不上川子提 PR 的速度了……此外川子涉猎甚广,在交流的过程中我也学到了很多东西,川子也会参加各种开源任务,你基本上可以在任何「角落」里看到川子的身影~ "),s("br",null,null,-1),r(" 川子这 6 个月也是成长了很多,从早期每个任务都需要细致沟通到现在发完任务基本就心照不宣了,也能独立完成很多任务了。比如 Ruff 的升级优化,目前川子对 Ruff 的了解程度已经仅次于我了,再比如 OpResult 方法的 patch 补全,以及动转静单测机制,基本都是川子独立完成的。对于大多数任务,现在我已经能放心地说:「川子,这个就交给你了」 "),s("br",null,null,-1),r(" 另外,「提前」说一下,川子贼有钱~ ")])),_:1})]),_:1}),t[9]||(t[9]=s("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[r("by 花花("),s("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"Tulip-hua"),r(") "),s("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),a(o,null,{default:n(()=>[a(e,{name:"花花",github:"Tulip-hua"},{default:n(()=>t[3]||(t[3]=[r(" 我愿称川川为飞桨开源社区小天使 ")])),_:1})]),_:1}),t[10]||(t[10]=s("h2",{id:"四、特别栏目——爱在何方之川川相亲帖",tabindex:"-1"},[r("四、特别栏目——爱在何方之川川相亲帖 "),s("a",{class:"header-anchor",href:"#四、特别栏目——爱在何方之川川相亲帖","aria-label":'Permalink to "四、特别栏目——爱在何方之川川相亲帖"'},"")],-1)),t[11]||(t[11]=s("p",null,"接下来,有请男嘉宾——小富哥儿川川来进行一段自我介绍✨。",-1)),a(o,null,{default:n(()=>[a(e,{name:"🍢🍢",github:"gouzil"},{default:n(()=>t[4]||(t[4]=[r(" 报菜名环节,身高179cm,体重65kg(±5kg),来自福建厦门,2002年出生,目前在福州读书,不抽烟,不喝酒。性格有点太温柔了,不太凶得起来。对陌生人有点社恐,熟悉了之后就好很多。有一点点宅,但不会非常宅,还是会出去走走(不然咋拍照片🐶)。有一点点强迫症,比如下面这张798的照片好像有点歪了。喔对了川川不会做饭。期望伴侣,可以稍微e一点,拉着我出去玩🐶。(🍢🍢: 咱就是说还有几个月才到22,也不至于这么着急吧🐶) ")])),_:1})]),_:1}),t[12]||(t[12]=i('有意者,请扫码加入快乐开源群,联系川川师傅(找头像即可)。
彩蛋 🥚 最后让我们欣赏一下川大摄影师的大作吧 📷
北京 798 艺术区 福州三江口大桥 福州烟台山 厦门中医院附近 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',11))]))}});export{M as __pageData,C as default};
diff --git a/assets/posts_chuan-story.md.0jPuh_f7.lean.js b/assets/posts_chuan-story.md.0jPuh_f7.lean.js
new file mode 100644
index 0000000..7796d69
--- /dev/null
+++ b/assets/posts_chuan-story.md.0jPuh_f7.lean.js
@@ -0,0 +1 @@
+import{M as o,_ as e}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as i,i as a,s as n,a as s,v as r,o as p}from"./chunks/framework.D1-4jGi8.js";const g="/assets/chuan-01.G-cxJRwy.jpg",u="/assets/chuan-02.qE5JSX5Y.jpg",d="/assets/chuan-03.NXP-Ww_V.jpg",h="/assets/chuan-04.prZsqaDd.jpg",c="/assets/chuan-05.CTY1_QPh.jpg",f="/assets/chuan-06.Scj6rPAw.jpg",m="/assets/chuan-07.DoP7Tkq4.jpg",b="/assets/chuan-08.0g__Lgih.jpg",y="/assets/chuan-09.o4wJxXln.jpg",_="/assets/chuan-10.CQs76eIH.jpg",P="/assets/chuan-11.B0MWhn9d.jpg",k="/assets/chuan-12.uS2sz8Vz.jpg",j="/assets/chuan-13.BzlKW8CG.jpg",x="/assets/chuan-14.B1YsXHnP.jpg",q="/assets/chuan-15.Dxfq_RNd.jpg",w="/assets/chuan-16.IkFqI2uB.jpg",S="/assets/chuan-17.BT7EnFZw.jpg",M=JSON.parse('{"title":"【开源江湖闲聊录】英雄不问出处:川师傅的逆袭之路","description":"","frontmatter":{"title":"【开源江湖闲聊录】英雄不问出处:川师傅的逆袭之路","date":"2023-11-28T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇","github":"wenxiaohahaha"},{"name":"田川(川川)","github":"gouzil"}]},"headers":[],"relativePath":"posts/chuan-story.md","filePath":"posts/chuan-story.md"}'),v={name:"posts/chuan-story.md"},C=Object.assign(v,{setup(A){return(T,t)=>(p(),l("div",null,[t[5]||(t[5]=i('“桨声川水悠悠过,长路漫漫风光留”,这次我们要采访的是小伙伴们都熟悉的励志富哥儿——川川师傅 ✨
一、前言 按川川要求,以下均以 🍢🍢 代称川川。
川川目前是一名平平无奇的 大学生🧑🎓,也是 Paddle 社区里的一名资深开发者。他精通 (🍢🍢: 我没有,不是,别瞎说🐶)Java、Python、C++ 等多门编程语言,还掌握 Flutter、Android、Vue 等工具,可谓多才多艺!
川川加入 Paddle 社区后,从最简单的文档修改任务开始,到参与快乐开源、熟悉 paddle 框架,到参与充满难度和挑战的护航计划,到最终自己能够独立的拆解问题、发起社区项目(ruff 升级),我们亲眼见证了他一步步的成长 (怎么有种养成系的感觉) 。
在提升自我外,川师傅也多次热心地帮助新伙伴们解决 bug、回答问题。(所以大家如果有问题,可以随时在群里骚扰他哦 )
然而当抛开“Paddle 社区开发者”“学生”等形象标签后,单独地看川师傅自身的人生经历,可谓是非常的励志 。你敢相信,川师傅是从中专、大专一路读上来的吗?川师傅的经历像是一本精彩绝伦的探险故事集。接下来让我们来读读他的探险之旅吧!
!!!注意!!!上图为川川师傅の帅照,小伙伴们可以截图保存哦!😝😝😝😝
二、采访内容 介绍一下自己吧,川川师傅 o(_ ̄3 ̄)o !
🍢🍢: 我的 AI Studio 账号是 gouzi,GitHub 的账号是 gouzil !o( ̄ε ̄_)o
作为一个 21 岁青春男大,平时有什么兴趣爱好?听说你喜欢出去玩,你在福建有什么推荐给大家打卡的景点么?哈哈~
🍢🍢: 爱好当然是出去走走玩玩,感受一下人间烟火气。打卡的话当然是福建的省会厦门啦🐶,在十里长堤跟着男女朋友看看夕阳,鼓浪屿的小巷子。平潭岛也挺不错的(🍢🍢没去过但是朋友圈已经发爆了,图中为蓝眼泪时期,需要特定的季节,且肉眼看不出来这种效果,需要相机长曝光,大家别跑空咯)。
厦门杏林大桥(来源: 川川相册) 十里长堤(来源: 川川相册) 鼓浪屿(来源:厦门文旅公众号) 平潭(来源: 新华社 2023/04/29 ) 据我了解,你在初中时就用易语言写了个安卓 APP 给奶奶使用,你能详细讲讲这个 APP 的设计目的和功能么?你当时学习了些什么技术才把这个 APP 做成?那又是通过哪种方式(看书?上网学习?视频?)学习的呢?
🍢🍢: 1️⃣ 其实设计这个 APP 是因为奶奶不识字,但是又需要使用手机(而正常手机打电话都是看人的名字进行拨打)。这个 APP 可以理解为一个默认桌面,手机解锁后 APP 就打开,打开后是像下图一样的手机联系人的照片,其实就是把联系人名字变成对应的他们的图片,这样尽管奶奶不识字,也可以看照片进行操作了!🐶 2️⃣ 当时学了啥技术: 其实也没具体的学,因为易语言是中文,有一定的思维逻辑就能实现啦。3️⃣ 通过哪种方式: 翻翻编译器自带的易语言说明(那时候 bilibili 还没有那么火,也没有啥书,只有一台能跑安卓模拟器的电脑)。
在 16 岁左右,你就陆陆续续自学了 Python、Java、C,后来又自学了 Go、Android 等等,在这个自学过程中你遇到了那些困难,又有想过放弃么?
🍢🍢: 遇到困难当然是有的,很难想象 C 我看了半年视频才学会的(有部分原因是我比较拖, 学习一门新的语言时长最好不要超过两周, 因为后续的项目会慢慢的补上来的)。每次接触一门新的语言都会对计算机有更深的理解,理解不同语言为什么要这么做,这么做的优缺点,这也是不断学习的动力吧。想过放弃么: 没有,我还挺感兴趣的,兴趣是最好的老师。
能简单聊聊你的这几年的学习经历么?
🍢🍢: 下图最右侧那一列就是学习的顺序啦(学那么多真没啥用,学好一个精通它就行)。也没啥经验,顺其自然就好啦,等学完技术应该也更新了。最快的方式就是跟着项目走,不断的优化它 (最后就会发现:我写的什么玩意,要不要重构🐶) 。不过倒是有几个提升比较大的时间段,一个是去参加了云计算比赛,让我会了 linux 和 docker 这些。一个是实习的那一年,让我整明白了网站这一套(B/S,C/S)。
现在社区开发者都认为你的编程能力很强,和学历形成了很大反差,能透露一下当时是为什么会上中专呢?是因为偏科吗?
🍢🍢: 不是偏科啦,我差的很平均🐶。顺带说一下厦门的初升高录取率为 45%,现在好些了 50%,卷不动卷不动,当然更多是因为我比较菜。
事实上在目前的舆论环境里,“专科生”是一个很遭受非议的标签😮💨,而作为一个亲历者,你内心的是怎么面对的呢?你当时又做了哪些方面的努力?
🍢🍢: 关于这个标签的话,我只想说:你说的对。没啥必要在乎别人的看法,做自己热爱的事情就好啦。
作为目前考上本科的计算机应用技术专业的学生,你对未来的职业发展有怎样的规划和期望✊✊✊?
🍢🍢: 我更喜欢做一些底层的工作,不太喜欢做应用层。规划:入职百度,重构 paddle 。
作为厦门领航团的一员,你当时是什么契机接触 Paddle 社区的?在 Paddle 社区做的第一个开源项目是什么?
🍢🍢: 说到这个契机啊,非常简单,你的上司是厦门领航团团长就行。第一个开源项目当然是我们孙师傅(@sunzhongkai588 )的 docs 啦,当然非常感谢佳维姐姐(@dingjiaweiww )和梦师傅(@Ligoml )的鼓励和协助我完成了在 paddle 的第一个 pr。
在社区里如何和其他开发者进行互动的?有没有什么特别有意思的经历或故事?
🍢🍢: 我一般有碰上问题就出来回答啦,或者一些技术讨论。特别的故事:五年级的小朋友叫我叔叔算嘛
对于 Paddle 框架护航计划,可以分享一下你的面试经历和感受吗?你觉得到达什么水平可以通过护航计划的面试?
🍢🍢: 经历的话,放心研发大哥不会难为你的,真诚就行。感受 emmm,大家一定要提前准备啊,刷刷算法什么的。什么水平 emmm,我也不太清楚,但是最好是熟悉 padlle,或者你的能力超级无敌强。
编者注✍️:「护航计划」可以简单理解为飞桨的远程实习项目,可参考 护航计划集训营说明
参与护航计划时,有什么不一样的感受吗?实际开发过程有没有遇到困难,是怎么解决的?
🍢🍢: 最大的感受就是,终于从应用层转向了框架层。困难是肯定有的,也有非常多不会的,但是这没关系,问研发大哥就行。就像昆昆(@2742195759 )说的: 你尽管问,我就是你的文档。
在 Paddle 社区中,你参与的哪个项目(或活动)你印象最深刻,能简单描述一下这个项目么?这个项目让你收获了什么?
🍢🍢: 印象最深的项目是下一个项目,下一个项目可以把之前项目的经验集结起来,也可以学到一些新的知识。当然 PaddleSOT 印象也挺深的,这也是我护航计划的项目。收获更多的是技术的进步吧。有时候看看喵喵(@SigureMo )的修改会发现,噢原来还能这么写。
对于深度学习领域,你有哪些想法和研究方向?目前有没有感兴趣的方向?
🍢🍢: 我其实更多的还是喜欢框架层,怎样才能让整个框架跑的更快,占用更低,更加的易用化。
发挥一下想象力,如果将深度学习比作一种食物,你觉得它会是什么?为什么?
🍢🍢: 可能是米饭吧,喂的越多越有力气,跑的越快,力大砖飞。
听说你使用飞桨解决过很多企业实际问题时,你遇到过最有趣的案例是什么?那么你是如何应用深度学习技术解决这个问题的?
🍢🍢: 我实习这个企业吧,他刚尝试深度学习,所以一般调调 API 就行了,更多的是怎样去分配资源,做到效率最大化 (我司全是 1050 的卡,我能咋办,我也很绝望啊) 。
除了深度学习,你还对其他领域感兴趣吗?有没有想过将深度学习与其他领域结合,创造出一些令人惊喜的应用?
🍢🍢: 其他领域其实有的,比如摄影和游戏,结合的话有想过,但是还没新建文件夹就不说了🐶
如果你有机会和 Paddle 社区 or 深度学习领域 or 计算机领域 的一位顶级专家进行合作,你希望和他/她一起研究什么问题?为什么?
🍢🍢: 这可就太多了,比如:不同语言的通信,怎么做到程序的相对安全,怎样去减少硬件之间的瓶颈。为什么 emmm,可能是因为自己对这方面感兴趣吧。
如果让你形容一下你和 Paddle 社区的关系,你会怎么说?
🍢🍢: 相互促进,互相成就 (更多还是 paddle 社区的大佬单方面带着我)
最后,作为一个热情、励志的年轻人,你想对 Paddle 社区里的开源者们说些什么呢?
🍢🍢: 放开那道题,让我来🐶
三、“鲁迅之我确实说过这话”专区 同样我们也邀请了一些和川川很熟悉的、有过合作经历的朋友们,贡献一下和川师傅相关的故事,或者他们对川师傅的评价~以下均为真心话,请放心看!
',17)),a(o,null,{default:n(()=>[a(e,{name:"散佬",github:"sanbuphy"},{default:n(()=>t[0]||(t[0]=[r(" 和川川交流还算比较多,川川基本上有空都会帮你解决任何疑问,甚至是看代码。虽然是年轻的富哥,但很努力上进,甚至比孙师傅还努力🐶;总体来说算很善良的小哥,教过我很多东西。希望能和他一起学习成长,向他多学习请教一些代码之道,早日都一起为中国开源社区多做一些更有价值的事情。 在我无数个老师中,他肯定是我印象深刻的老师之一。 ")])),_:1})]),_:1}),t[6]||(t[6]=s("h3",{id:"by-卢师傅-andsonder",tabindex:"-1"},[r("by 卢师傅("),s("a",{href:"https://github.com/AndSonder",target:"_blank",rel:"noreferrer"},"AndSonder"),r(") "),s("a",{class:"header-anchor",href:"#by-卢师傅-andsonder","aria-label":'Permalink to "by 卢师傅([AndSonder](https://github.com/AndSonder))"'},"")],-1)),a(o,null,{default:n(()=>[a(e,{name:"卢畅",github:"AndSonder"},{default:n(()=>t[1]||(t[1]=[r(" 有幸在今年暑期上海 meetup 上认识了川师傅,很低调的技术大佬。在川师傅身上能看到对开源活动的热情,各大活动上都能看到川师傅的身影。希望以后还有机会和川师傅线下面基,迪迪小组再次出发! ")])),_:1})]),_:1}),t[7]||(t[7]=s("blockquote",null,[s("p",null,"编者注✍️:迪迪小组是上海 meetup 期间,相约去迪士尼玩的小分队")],-1)),t[8]||(t[8]=s("h3",{id:"by-一师傅-siguremo",tabindex:"-1"},[r("by 一师傅("),s("a",{href:"https://github.com/SigureMo",target:"_blank",rel:"noreferrer"},"SigureMo"),r(") "),s("a",{class:"header-anchor",href:"#by-一师傅-siguremo","aria-label":'Permalink to "by 一师傅([SigureMo](https://github.com/SigureMo))"'},"")],-1)),a(o,null,{default:n(()=>[a(e,{name:"喵喵",github:"SigureMo"},{default:n(()=>t[2]||(t[2]=[r(" 自川子参与第一期护航计划开始已经马上就要 6 个月了,我和川子也算是深度交流了 6 个月。从护航计划来看,川子始终保持十足的热情,在 PaddleSOT 那时候还是以开源任务的形式发放,但每次有任务川子都会第一时间认领。之后到现在动转静单测推全,我的 review 速度都赶不上川子提 PR 的速度了……此外川子涉猎甚广,在交流的过程中我也学到了很多东西,川子也会参加各种开源任务,你基本上可以在任何「角落」里看到川子的身影~ "),s("br",null,null,-1),r(" 川子这 6 个月也是成长了很多,从早期每个任务都需要细致沟通到现在发完任务基本就心照不宣了,也能独立完成很多任务了。比如 Ruff 的升级优化,目前川子对 Ruff 的了解程度已经仅次于我了,再比如 OpResult 方法的 patch 补全,以及动转静单测机制,基本都是川子独立完成的。对于大多数任务,现在我已经能放心地说:「川子,这个就交给你了」 "),s("br",null,null,-1),r(" 另外,「提前」说一下,川子贼有钱~ ")])),_:1})]),_:1}),t[9]||(t[9]=s("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[r("by 花花("),s("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"Tulip-hua"),r(") "),s("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),a(o,null,{default:n(()=>[a(e,{name:"花花",github:"Tulip-hua"},{default:n(()=>t[3]||(t[3]=[r(" 我愿称川川为飞桨开源社区小天使 ")])),_:1})]),_:1}),t[10]||(t[10]=s("h2",{id:"四、特别栏目——爱在何方之川川相亲帖",tabindex:"-1"},[r("四、特别栏目——爱在何方之川川相亲帖 "),s("a",{class:"header-anchor",href:"#四、特别栏目——爱在何方之川川相亲帖","aria-label":'Permalink to "四、特别栏目——爱在何方之川川相亲帖"'},"")],-1)),t[11]||(t[11]=s("p",null,"接下来,有请男嘉宾——小富哥儿川川来进行一段自我介绍✨。",-1)),a(o,null,{default:n(()=>[a(e,{name:"🍢🍢",github:"gouzil"},{default:n(()=>t[4]||(t[4]=[r(" 报菜名环节,身高179cm,体重65kg(±5kg),来自福建厦门,2002年出生,目前在福州读书,不抽烟,不喝酒。性格有点太温柔了,不太凶得起来。对陌生人有点社恐,熟悉了之后就好很多。有一点点宅,但不会非常宅,还是会出去走走(不然咋拍照片🐶)。有一点点强迫症,比如下面这张798的照片好像有点歪了。喔对了川川不会做饭。期望伴侣,可以稍微e一点,拉着我出去玩🐶。(🍢🍢: 咱就是说还有几个月才到22,也不至于这么着急吧🐶) ")])),_:1})]),_:1}),t[12]||(t[12]=i('有意者,请扫码加入快乐开源群,联系川川师傅(找头像即可)。
彩蛋 🥚 最后让我们欣赏一下川大摄影师的大作吧 📷
北京 798 艺术区 福州三江口大桥 福州烟台山 厦门中医院附近 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',11))]))}});export{M as __pageData,C as default};
diff --git a/assets/posts_first-post.md.BrhGXo3R.js b/assets/posts_first-post.md.BrhGXo3R.js
new file mode 100644
index 0000000..b73f0f3
--- /dev/null
+++ b/assets/posts_first-post.md.BrhGXo3R.js
@@ -0,0 +1 @@
+import{_ as s}from"./chunks/first-post.CGto_Bts.js";import{_ as o,c as a,a as t,v as e,o as l}from"./chunks/framework.D1-4jGi8.js";const d=JSON.parse('{"title":"在这里,记录有趣的飞桨开源社区故事!","description":"","frontmatter":{"title":"在这里,记录有趣的飞桨开源社区故事!","date":"2023-10-24T00:00:00.000Z","author":{"name":"Nyakku Shigure","github":"SigureMo"}},"headers":[],"relativePath":"posts/first-post.md","filePath":"posts/first-post.md"}'),i={name:"posts/first-post.md"};function n(p,r,u,f,c,m){return l(),a("div",null,r[0]||(r[0]=[t("p",null,[e("这是一个半官方的飞桨开源社区博客,由社区成员自发维护,记录社区的有趣的故事,欢迎大家投稿。投稿方式:在 "),t("a",{href:"https://github.com/PFCCLab/blog",target:"_blank",rel:"noreferrer"},"blog"),e(" 代码仓库里提交 PullRequest 即可,Pull Request 会自动触发 CI,CI 通过后,你的文章就会被自动发布到这里。")],-1),t("p",null,[e("感谢 001 "),t("a",{href:"https://github.com/SigureMo",target:"_blank",rel:"noreferrer"},"@SigureMo"),e(" 帮忙搭建了这个博客。")],-1),t("p",null,[t("img",{src:s,alt:"first-blog"})],-1)]))}const h=o(i,[["render",n]]);export{d as __pageData,h as default};
diff --git a/assets/posts_first-post.md.BrhGXo3R.lean.js b/assets/posts_first-post.md.BrhGXo3R.lean.js
new file mode 100644
index 0000000..b73f0f3
--- /dev/null
+++ b/assets/posts_first-post.md.BrhGXo3R.lean.js
@@ -0,0 +1 @@
+import{_ as s}from"./chunks/first-post.CGto_Bts.js";import{_ as o,c as a,a as t,v as e,o as l}from"./chunks/framework.D1-4jGi8.js";const d=JSON.parse('{"title":"在这里,记录有趣的飞桨开源社区故事!","description":"","frontmatter":{"title":"在这里,记录有趣的飞桨开源社区故事!","date":"2023-10-24T00:00:00.000Z","author":{"name":"Nyakku Shigure","github":"SigureMo"}},"headers":[],"relativePath":"posts/first-post.md","filePath":"posts/first-post.md"}'),i={name:"posts/first-post.md"};function n(p,r,u,f,c,m){return l(),a("div",null,r[0]||(r[0]=[t("p",null,[e("这是一个半官方的飞桨开源社区博客,由社区成员自发维护,记录社区的有趣的故事,欢迎大家投稿。投稿方式:在 "),t("a",{href:"https://github.com/PFCCLab/blog",target:"_blank",rel:"noreferrer"},"blog"),e(" 代码仓库里提交 PullRequest 即可,Pull Request 会自动触发 CI,CI 通过后,你的文章就会被自动发布到这里。")],-1),t("p",null,[e("感谢 001 "),t("a",{href:"https://github.com/SigureMo",target:"_blank",rel:"noreferrer"},"@SigureMo"),e(" 帮忙搭建了这个博客。")],-1),t("p",null,[t("img",{src:s,alt:"first-blog"})],-1)]))}const h=o(i,[["render",n]]);export{d as __pageData,h as default};
diff --git a/assets/posts_hackathon-5th-episode01.md.BXwh45pa.js b/assets/posts_hackathon-5th-episode01.md.BXwh45pa.js
new file mode 100644
index 0000000..f7086d7
--- /dev/null
+++ b/assets/posts_hackathon-5th-episode01.md.BXwh45pa.js
@@ -0,0 +1 @@
+import{_ as e,c as d,k as a,o as E}from"./chunks/framework.D1-4jGi8.js";const s=JSON.parse('{"title":"PaddlePaddle Hackathon Episode 01 | 第五期活动上线 4 周,直播圆满收官,三大赛道进展顺利","description":"","frontmatter":{"title":"PaddlePaddle Hackathon Episode 01 | 第五期活动上线 4 周,直播圆满收官,三大赛道进展顺利","date":"2023-11-03T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"},"co_authors":[{"name":"花花","github":"Tulip-hua"}]},"headers":[],"relativePath":"posts/hackathon-5th-episode01.md","filePath":"posts/hackathon-5th-episode01.md"}'),r={name:"posts/hackathon-5th-episode01.md"};function l(A,t,n,h,o,i){return E(),d("div",null,t[0]||(t[0]=[a('向大家快速介绍飞桨黑客松第五期活动上线以来的进展(9.25-11.3)
为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 4 周的进展速览如下:
开源贡献个人挑战赛 :发布 111 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,109 个任务完成认领,60 个任务提交作品,13 个任务已经完成 ,感谢各位开发者的积极参与,感谢各位导师的及时 review。大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 12 名开发者产出基于 EB SDK 的应用 18 个,均已部署至飞桨星河社区 。飞桨护航计划集训营 :发布 18 个框架与套件开发项目,1 对 1 带教形式,已完成 18 名学员招募,并提交第一期周报,是飞桨开源社区首次 Code Camp 形式的开源活动,由开发者担任助教 。赛道一:开源贡献个人挑战赛 进度看板 任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率 热身赛 11 7 / 11 63.64% 2 18.18% 框架 API 开发任务 31 22 / 31 70.97% 1 3.23% 框架其他开发任务 16 14 / 16 87.5% 6 37.5% 科学计算模型复现 11 7 / 11 63.64% 1 9.09% 套件开发任务 24 5 / 23 20.83% 2 8.33% 合作伙伴任务 18 5 / 17 27.78% 1 5.56%
赛道亮点 社区开发者参与热情高,活动发布 1 周认领率接近 100%,提交率 50%+; Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,提升社区活动自动化水平;直播活动圆满收官,已形成完整的飞桨开源贡献视频资料,详见 issues#58125 ; 本次活动英特尔作为赞助方,并与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品。 参与提示 在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率相对较低,欢迎社区的开发者选择这些任务来挑战~~ 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
赛道二: 大模型应用与创意赛 我们收到了 127 人报名,提交了 18 个应用,加精项目 10 个。
赛道亮点 全新赛道,作为飞桨星河社区五周年预热活动,推广重点产品星河社区 ERNIE Bot SDK; 完成情况符合预期,上线 4 周即提交 18 个 EB SDK 应用,作品种类多样,涵盖游戏娱乐、办公助手、知识科普等多领域,符合赛道初衷; 社群气氛活跃,新老选手积极交流,且建立了沟通产研的 EB SDK 反馈文档。 参与提示 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
赛道三:飞桨护航计划集训营 18 个任务已全部完成招募,名单公示如下:
集训营亮点 参与提示 欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
活动运营与推广 联合宣传 与开源中国、启智、OpenVINO、思否、开源社、示说、InfoQ、白玉兰开源、开源之夏等合作伙伴以及海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目联合宣传。
直播 多平台同步直播,10 场直播共计约 1.4 万人次观看,直播信息与学习资料已发布在开源社区,并整理成 AI Studio 专题课程: 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区
日期 主题 观看总人次 10.16(周一) 第五期飞桨黑客松来啦! 1956 10.17(周二) 新 IR Python API 适配升级 967 10.18(周三) 模型复现和贡献指南 975 10.19(周四) OpenVINO 开源生态建设与贡献任务解析 884 10.20(周五) 动转静全套件适配任务 989 10.23(周一) Arm 虚拟硬件助力边缘人工智能软件开发 1887 10.27(周五) 跨平台推理框架 InfiniTensor 2049 10.30(周一) 拓展 LLM 边界:使用向量数据库构建知识库 2193 10.31(周二) Paddle 框架在昇腾平台上的推理优化分享 1097 11.1(周三) 飞桨硬件生态伙伴任务介绍 420
',32)]))}const c=e(r,[["render",l]]);export{s as __pageData,c as default};
diff --git a/assets/posts_hackathon-5th-episode01.md.BXwh45pa.lean.js b/assets/posts_hackathon-5th-episode01.md.BXwh45pa.lean.js
new file mode 100644
index 0000000..f7086d7
--- /dev/null
+++ b/assets/posts_hackathon-5th-episode01.md.BXwh45pa.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as d,k as a,o as E}from"./chunks/framework.D1-4jGi8.js";const s=JSON.parse('{"title":"PaddlePaddle Hackathon Episode 01 | 第五期活动上线 4 周,直播圆满收官,三大赛道进展顺利","description":"","frontmatter":{"title":"PaddlePaddle Hackathon Episode 01 | 第五期活动上线 4 周,直播圆满收官,三大赛道进展顺利","date":"2023-11-03T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"},"co_authors":[{"name":"花花","github":"Tulip-hua"}]},"headers":[],"relativePath":"posts/hackathon-5th-episode01.md","filePath":"posts/hackathon-5th-episode01.md"}'),r={name:"posts/hackathon-5th-episode01.md"};function l(A,t,n,h,o,i){return E(),d("div",null,t[0]||(t[0]=[a('向大家快速介绍飞桨黑客松第五期活动上线以来的进展(9.25-11.3)
为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 4 周的进展速览如下:
开源贡献个人挑战赛 :发布 111 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,109 个任务完成认领,60 个任务提交作品,13 个任务已经完成 ,感谢各位开发者的积极参与,感谢各位导师的及时 review。大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 12 名开发者产出基于 EB SDK 的应用 18 个,均已部署至飞桨星河社区 。飞桨护航计划集训营 :发布 18 个框架与套件开发项目,1 对 1 带教形式,已完成 18 名学员招募,并提交第一期周报,是飞桨开源社区首次 Code Camp 形式的开源活动,由开发者担任助教 。赛道一:开源贡献个人挑战赛 进度看板 任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率 热身赛 11 7 / 11 63.64% 2 18.18% 框架 API 开发任务 31 22 / 31 70.97% 1 3.23% 框架其他开发任务 16 14 / 16 87.5% 6 37.5% 科学计算模型复现 11 7 / 11 63.64% 1 9.09% 套件开发任务 24 5 / 23 20.83% 2 8.33% 合作伙伴任务 18 5 / 17 27.78% 1 5.56%
赛道亮点 社区开发者参与热情高,活动发布 1 周认领率接近 100%,提交率 50%+; Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,提升社区活动自动化水平;直播活动圆满收官,已形成完整的飞桨开源贡献视频资料,详见 issues#58125 ; 本次活动英特尔作为赞助方,并与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品。 参与提示 在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率相对较低,欢迎社区的开发者选择这些任务来挑战~~ 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
赛道二: 大模型应用与创意赛 我们收到了 127 人报名,提交了 18 个应用,加精项目 10 个。
赛道亮点 全新赛道,作为飞桨星河社区五周年预热活动,推广重点产品星河社区 ERNIE Bot SDK; 完成情况符合预期,上线 4 周即提交 18 个 EB SDK 应用,作品种类多样,涵盖游戏娱乐、办公助手、知识科普等多领域,符合赛道初衷; 社群气氛活跃,新老选手积极交流,且建立了沟通产研的 EB SDK 反馈文档。 参与提示 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
赛道三:飞桨护航计划集训营 18 个任务已全部完成招募,名单公示如下:
集训营亮点 参与提示 欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
活动运营与推广 联合宣传 与开源中国、启智、OpenVINO、思否、开源社、示说、InfoQ、白玉兰开源、开源之夏等合作伙伴以及海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目联合宣传。
直播 多平台同步直播,10 场直播共计约 1.4 万人次观看,直播信息与学习资料已发布在开源社区,并整理成 AI Studio 专题课程: 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区
日期 主题 观看总人次 10.16(周一) 第五期飞桨黑客松来啦! 1956 10.17(周二) 新 IR Python API 适配升级 967 10.18(周三) 模型复现和贡献指南 975 10.19(周四) OpenVINO 开源生态建设与贡献任务解析 884 10.20(周五) 动转静全套件适配任务 989 10.23(周一) Arm 虚拟硬件助力边缘人工智能软件开发 1887 10.27(周五) 跨平台推理框架 InfiniTensor 2049 10.30(周一) 拓展 LLM 边界:使用向量数据库构建知识库 2193 10.31(周二) Paddle 框架在昇腾平台上的推理优化分享 1097 11.1(周三) 飞桨硬件生态伙伴任务介绍 420
',32)]))}const c=e(r,[["render",l]]);export{s as __pageData,c as default};
diff --git a/assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.js b/assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.js
new file mode 100644
index 0000000..29b30ed
--- /dev/null
+++ b/assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.js
@@ -0,0 +1 @@
+import{_ as e,c as a,k as r,o as l}from"./chunks/framework.D1-4jGi8.js";const n="/assets/pp-coffee.B6ybez7E.jpeg",u=JSON.parse('{"title":"PaddlePaddle Hackathon Episode 02 | 第五期活动上线 8 周,框架赛道提交率近 90%","description":"","frontmatter":{"title":"PaddlePaddle Hackathon Episode 02 | 第五期活动上线 8 周,框架赛道提交率近 90%","date":"2023-12-01T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"},"co_authors":[{"name":"花花","github":"Tulip-hua"}]},"headers":[],"relativePath":"posts/hackathon-5th-episode02.md","filePath":"posts/hackathon-5th-episode02.md"}'),d={name:"posts/hackathon-5th-episode02.md"};function i(s,t,o,h,c,g){return l(),a("div",null,t[0]||(t[0]=[r('向大家快速介绍飞桨黑客松第五期开展以来的进展(11.4-12.1)
为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 8 周的进展速览如下:
开源贡献个人挑战赛 :发布 110 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,全部任务完成认领,72 个任务提交作品,32 个任务已经完成 ,框架方向提交率近 90%,科学计算方向提交率 70%+,进展超出预期,感谢各位开发者的积极参与,感谢各位导师的及时 review。大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 22 名开发者产出基于 EB SDK 的应用 34 个,均已部署至应用中心 。飞桨护航计划集训营 :共有 22 名社区开源开发者在社区导师的指导下,进行飞桨开源项目开发。 按期完成了两期双周报提交,完成了 3 期技术分享,成果全部沉淀到开源社区 。赛道一:开源贡献个人挑战赛 进度看板 任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率 热身赛 11 10 / 11 90.91% 4 36.36% 框架 API 开发任务 31 28 / 31 90.32% 6 19.35% 框架其他开发任务 16 15 / 16 93.75% 13 81.25% 科学计算模型复现 11 8 / 11 72.73% 4 36.36% 套件开发任务 24 6 / 24 25.0% 3 12.5% 合作伙伴任务 17 5 / 17 29.41% 2 11.76%
赛道亮点 尽管本期黑客松整体难度较往期提升,但社区开发者表现出了极大的专业能力和热情,任务已经 100% 被大家认领; 框架方向提交率近 90%,科学计算方向提交率 70%+,均高于往期黑客松。 参与提示 在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率依然较低,欢迎社区的开发者选择这些任务来挑战。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
赛道二: 大模型应用与创意赛 部分应用展示 我们收到了 270 人报名,提交了 34 个应用,在这里节选部分有趣的应用,欢迎大家在线体验。
赛道亮点 社区开发者们基于文心大模型的 SDK: ERNIE Bot SDK ,提交了种类多样,涵盖多领域作品,充分探索了使用文心大模型能做到的创意和创新。 参与提示 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
赛道三:飞桨护航计划集训营 活动进展 集训营的同学已经完成了两次开源开发的双周报: WeeklyReports 2023.10.25~2023.11.07 、 WeeklyReports 2023.11.08~2023.11.21 和三次技术分享 。
集训营亮点 参与提示 欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
彩蛋 🎊: 欢迎大家线下来见面 本周六(12 月 2 日)14:00 - 17:00 在 北京 798 举行飞桨开源社区 meetup,报名问卷:https://paddle.wjx.cn/vm/m1OLk4E.aspx# ,欢迎大家来聊天,飞桨定制咖啡等你打卡,梦师傅和花花在咖啡厅等着大家~
',31)]))}const b=e(d,[["render",i]]);export{u as __pageData,b as default};
diff --git a/assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.lean.js b/assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.lean.js
new file mode 100644
index 0000000..29b30ed
--- /dev/null
+++ b/assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as a,k as r,o as l}from"./chunks/framework.D1-4jGi8.js";const n="/assets/pp-coffee.B6ybez7E.jpeg",u=JSON.parse('{"title":"PaddlePaddle Hackathon Episode 02 | 第五期活动上线 8 周,框架赛道提交率近 90%","description":"","frontmatter":{"title":"PaddlePaddle Hackathon Episode 02 | 第五期活动上线 8 周,框架赛道提交率近 90%","date":"2023-12-01T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"},"co_authors":[{"name":"花花","github":"Tulip-hua"}]},"headers":[],"relativePath":"posts/hackathon-5th-episode02.md","filePath":"posts/hackathon-5th-episode02.md"}'),d={name:"posts/hackathon-5th-episode02.md"};function i(s,t,o,h,c,g){return l(),a("div",null,t[0]||(t[0]=[r('向大家快速介绍飞桨黑客松第五期开展以来的进展(11.4-12.1)
为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 8 周的进展速览如下:
开源贡献个人挑战赛 :发布 110 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,全部任务完成认领,72 个任务提交作品,32 个任务已经完成 ,框架方向提交率近 90%,科学计算方向提交率 70%+,进展超出预期,感谢各位开发者的积极参与,感谢各位导师的及时 review。大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 22 名开发者产出基于 EB SDK 的应用 34 个,均已部署至应用中心 。飞桨护航计划集训营 :共有 22 名社区开源开发者在社区导师的指导下,进行飞桨开源项目开发。 按期完成了两期双周报提交,完成了 3 期技术分享,成果全部沉淀到开源社区 。赛道一:开源贡献个人挑战赛 进度看板 任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率 热身赛 11 10 / 11 90.91% 4 36.36% 框架 API 开发任务 31 28 / 31 90.32% 6 19.35% 框架其他开发任务 16 15 / 16 93.75% 13 81.25% 科学计算模型复现 11 8 / 11 72.73% 4 36.36% 套件开发任务 24 6 / 24 25.0% 3 12.5% 合作伙伴任务 17 5 / 17 29.41% 2 11.76%
赛道亮点 尽管本期黑客松整体难度较往期提升,但社区开发者表现出了极大的专业能力和热情,任务已经 100% 被大家认领; 框架方向提交率近 90%,科学计算方向提交率 70%+,均高于往期黑客松。 参与提示 在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率依然较低,欢迎社区的开发者选择这些任务来挑战。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
赛道二: 大模型应用与创意赛 部分应用展示 我们收到了 270 人报名,提交了 34 个应用,在这里节选部分有趣的应用,欢迎大家在线体验。
赛道亮点 社区开发者们基于文心大模型的 SDK: ERNIE Bot SDK ,提交了种类多样,涵盖多领域作品,充分探索了使用文心大模型能做到的创意和创新。 参与提示 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
赛道三:飞桨护航计划集训营 活动进展 集训营的同学已经完成了两次开源开发的双周报: WeeklyReports 2023.10.25~2023.11.07 、 WeeklyReports 2023.11.08~2023.11.21 和三次技术分享 。
集训营亮点 参与提示 欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
彩蛋 🎊: 欢迎大家线下来见面 本周六(12 月 2 日)14:00 - 17:00 在 北京 798 举行飞桨开源社区 meetup,报名问卷:https://paddle.wjx.cn/vm/m1OLk4E.aspx# ,欢迎大家来聊天,飞桨定制咖啡等你打卡,梦师傅和花花在咖啡厅等着大家~
',31)]))}const b=e(d,[["render",i]]);export{u as __pageData,b as default};
diff --git a/assets/posts_hackathon-5th-episode03.md.CYI5eehn.js b/assets/posts_hackathon-5th-episode03.md.CYI5eehn.js
new file mode 100644
index 0000000..728b610
--- /dev/null
+++ b/assets/posts_hackathon-5th-episode03.md.CYI5eehn.js
@@ -0,0 +1 @@
+import{_ as e,c as t,k as r,o}from"./chunks/framework.D1-4jGi8.js";const p="/assets/track-1.92wc2X0b.jpg",s="/assets/track-2.CNxDMruG.jpg",d="/assets/track-3.B0IR02Ux.jpg",m=JSON.parse('{"title":"PaddlePaddle Hackathon Episode 03 | 创新碰撞,技术狂欢,飞桨黑客马拉松第五期活动圆满收官!","description":"","frontmatter":{"title":"PaddlePaddle Hackathon Episode 03 | 创新碰撞,技术狂欢,飞桨黑客马拉松第五期活动圆满收官!","date":"2023-12-25T00:00:00.000Z","author":{"name":"花花","github":"Tulip-hua"},"co_authors":[{"name":"梦师傅","github":"Ligoml"}]},"headers":[],"relativePath":"posts/hackathon-5th-episode03.md","filePath":"posts/hackathon-5th-episode03.md"}'),l={name:"posts/hackathon-5th-episode03.md"};function h(i,a,n,c,u,b){return o(),t("div",null,a[0]||(a[0]=[r('让我们看看哪些最强“Hacker”脱颖而出!
这是一次好奇心的远航,也是一场创作激情与团队协作的较量。
你懂技术,有想法,在这里可以尽情发挥!
我们希望你,不只埋头创造,一起享受不确定的乐趣,才能涌现意想不到的灵感和收获。
在这里,不止精益求精的竞技,去结识志同道合的小伙伴,去和研发导师 1V1 深度交流。
在飞桨黑客松的舞台上,创造力释放,“码”上见真章!
经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
01 - 高手云集的飞桨黑客松活动 PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第五期活动自 2023 年 9 月中旬发布后,开发者热情响应,比赛历经三个月完美收官!
本次活动任务难度持续升级,飞桨联合 OpenVINO™ 等生态伙伴发布 100+ 开源贡献任务。赛制全新升级,本期黑客松活动在延续开源贡献个人挑战赛的基础上,首次探索以 Code Camp 形式组织开源活动,1 对 1 带教形式,并由开发者担任助教。并发布全新赛道——大模型应用与创意赛,基于文心大模型,创意无限,打开想象力,开发 AI 原生应用。
共有 800+ 位社区开发者参与到飞桨黑客松中,160+ 支队伍进行任务认领,本期黑客松活动在任务完成数量、参与团队规模、项目类型丰富度等方面均有提升,足可见开发者们建设飞桨和文心生态的热情。 我们期待这些开发者团队持续在飞桨开源生态中迸发出光彩和力量,与飞桨一路同行,一起建设更优雅的飞桨开源社区。
02 - 三大赛道 开源贡献 飞桨与生态伙伴携手,发布了三大赛道共计 26 个方向的开源贡献任务,从框架开发、模型套件开发、论文复现、硬件部署到产业应用任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
开源贡献个人挑战赛 发布 124 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,120 个任务完成认领,96 个任务提交作品,85 个任务顺利完成,完成率 70% ,感谢各位开发者的积极参与,致敬每一个开源贡献!
在第五期飞桨黑客松个人挑战赛中,开发者们码力全开,共计为飞桨新增 50+ API,增加 6 组共计 120+ API 转换规则,15 个 PHI 算子迁移、4 个分布式切分推导规则和 3 个转换函数,完成 9 篇 AI4S 领域论文代码复现,为大模型套件 PaddleMIX、PaddleNLP 及计算机视觉套件 PaddleSeg、PaddleClas、PaddleDetection 新增 10 个重要模型或新功能,为全套件模型接入动转静训练功能,为飞桨开源社区伙伴 OpenVINO™、Arm、InfiniTensor 新增 12 个新功能。
注:部分任务还有细节需要沟通,暂未完成 PR 合入,请锁定任务的开发者尽快完成 PR 合入哦~
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
大模型应用与创意赛 作为飞桨星河社区五周年预热活动,共发布趣味创意与生产力工具 2 个方向的任务,鼓励开发者发挥想象力和创新精神,构思基于文心大模型的创意方案,开发创新应用,从技术创新到应用实践,共有 37 名开发者产出基于 EB SDK 的应用 60+ 个,作品种类多样,涵盖多领域 ,欢迎大家进入飞桨星河社区应用中心体验。
趣味创意赛道一等奖作品:AI 数字人 | 数字诗人&数字发言人&数字人聊天
生产力工具赛道一等奖作品:【Hackathon 5th】基于文心一言的日报系统
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
飞桨护航计划集训营 发布 18 个框架与套件开发项目,1 对 1 带教形式,完成 18 名学员招募,共计提交 4 期周报,组织 5 期技术分享会,9 名学员进行技术分享,15 名学员通过考核。这是飞桨开源社区首次 Code Camp 形式的开源活动,所有学习笔记与周报记录留存在开源项目 PFCCLab/Camp 中,欢迎大家围观交流 。
集训营开源项目地址:https://github.com/PFCCLab/Camp
本期飞桨护航计划集训营开发项目内容硬核,既包括自动微分、新 IR Pass、自动混合精度、组合机制前反向统一、量化推理、算子类型扩展到复数、分布式能力建设与架构升级等核心组件开发工作,还有科学计算领域拓展专项、套件压缩能力建设、多模态大模型全流程建设等重要套件能力建设工作,营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了研发经理的肯定,3 名同学获得百度正式实习生 Offer。
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
03 - 飞桨黑客松完成榜单 2023 PaddlePaddle Hackathon 飞桨黑客马拉松第五期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方,OpenVINO™、华为、海光、Arm、高通、Zilliz、开放麒麟社区等共同出品,以线上认领任务的形式进行。 本次共有三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营。根据开发难度分为基础任务和进阶任务,为大家提供丰富的深度学习开发体验。对飞桨黑客松第五期公示榜单如有异议,请于 2023 年 12 月 25 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 12 月 26 日前对您的异议进行复核反馈。
恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
04 - 新的身份等你点亮 在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
关于 PFCC
PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到 ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
原文链接:https://mp.weixin.qq.com/s/Yjvwj8br84sPard1lLoNOQ
',39)]))}const k=e(l,[["render",h]]);export{m as __pageData,k as default};
diff --git a/assets/posts_hackathon-5th-episode03.md.CYI5eehn.lean.js b/assets/posts_hackathon-5th-episode03.md.CYI5eehn.lean.js
new file mode 100644
index 0000000..728b610
--- /dev/null
+++ b/assets/posts_hackathon-5th-episode03.md.CYI5eehn.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as t,k as r,o}from"./chunks/framework.D1-4jGi8.js";const p="/assets/track-1.92wc2X0b.jpg",s="/assets/track-2.CNxDMruG.jpg",d="/assets/track-3.B0IR02Ux.jpg",m=JSON.parse('{"title":"PaddlePaddle Hackathon Episode 03 | 创新碰撞,技术狂欢,飞桨黑客马拉松第五期活动圆满收官!","description":"","frontmatter":{"title":"PaddlePaddle Hackathon Episode 03 | 创新碰撞,技术狂欢,飞桨黑客马拉松第五期活动圆满收官!","date":"2023-12-25T00:00:00.000Z","author":{"name":"花花","github":"Tulip-hua"},"co_authors":[{"name":"梦师傅","github":"Ligoml"}]},"headers":[],"relativePath":"posts/hackathon-5th-episode03.md","filePath":"posts/hackathon-5th-episode03.md"}'),l={name:"posts/hackathon-5th-episode03.md"};function h(i,a,n,c,u,b){return o(),t("div",null,a[0]||(a[0]=[r('让我们看看哪些最强“Hacker”脱颖而出!
这是一次好奇心的远航,也是一场创作激情与团队协作的较量。
你懂技术,有想法,在这里可以尽情发挥!
我们希望你,不只埋头创造,一起享受不确定的乐趣,才能涌现意想不到的灵感和收获。
在这里,不止精益求精的竞技,去结识志同道合的小伙伴,去和研发导师 1V1 深度交流。
在飞桨黑客松的舞台上,创造力释放,“码”上见真章!
经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
01 - 高手云集的飞桨黑客松活动 PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第五期活动自 2023 年 9 月中旬发布后,开发者热情响应,比赛历经三个月完美收官!
本次活动任务难度持续升级,飞桨联合 OpenVINO™ 等生态伙伴发布 100+ 开源贡献任务。赛制全新升级,本期黑客松活动在延续开源贡献个人挑战赛的基础上,首次探索以 Code Camp 形式组织开源活动,1 对 1 带教形式,并由开发者担任助教。并发布全新赛道——大模型应用与创意赛,基于文心大模型,创意无限,打开想象力,开发 AI 原生应用。
共有 800+ 位社区开发者参与到飞桨黑客松中,160+ 支队伍进行任务认领,本期黑客松活动在任务完成数量、参与团队规模、项目类型丰富度等方面均有提升,足可见开发者们建设飞桨和文心生态的热情。 我们期待这些开发者团队持续在飞桨开源生态中迸发出光彩和力量,与飞桨一路同行,一起建设更优雅的飞桨开源社区。
02 - 三大赛道 开源贡献 飞桨与生态伙伴携手,发布了三大赛道共计 26 个方向的开源贡献任务,从框架开发、模型套件开发、论文复现、硬件部署到产业应用任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
开源贡献个人挑战赛 发布 124 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,120 个任务完成认领,96 个任务提交作品,85 个任务顺利完成,完成率 70% ,感谢各位开发者的积极参与,致敬每一个开源贡献!
在第五期飞桨黑客松个人挑战赛中,开发者们码力全开,共计为飞桨新增 50+ API,增加 6 组共计 120+ API 转换规则,15 个 PHI 算子迁移、4 个分布式切分推导规则和 3 个转换函数,完成 9 篇 AI4S 领域论文代码复现,为大模型套件 PaddleMIX、PaddleNLP 及计算机视觉套件 PaddleSeg、PaddleClas、PaddleDetection 新增 10 个重要模型或新功能,为全套件模型接入动转静训练功能,为飞桨开源社区伙伴 OpenVINO™、Arm、InfiniTensor 新增 12 个新功能。
注:部分任务还有细节需要沟通,暂未完成 PR 合入,请锁定任务的开发者尽快完成 PR 合入哦~
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
大模型应用与创意赛 作为飞桨星河社区五周年预热活动,共发布趣味创意与生产力工具 2 个方向的任务,鼓励开发者发挥想象力和创新精神,构思基于文心大模型的创意方案,开发创新应用,从技术创新到应用实践,共有 37 名开发者产出基于 EB SDK 的应用 60+ 个,作品种类多样,涵盖多领域 ,欢迎大家进入飞桨星河社区应用中心体验。
趣味创意赛道一等奖作品:AI 数字人 | 数字诗人&数字发言人&数字人聊天
生产力工具赛道一等奖作品:【Hackathon 5th】基于文心一言的日报系统
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
飞桨护航计划集训营 发布 18 个框架与套件开发项目,1 对 1 带教形式,完成 18 名学员招募,共计提交 4 期周报,组织 5 期技术分享会,9 名学员进行技术分享,15 名学员通过考核。这是飞桨开源社区首次 Code Camp 形式的开源活动,所有学习笔记与周报记录留存在开源项目 PFCCLab/Camp 中,欢迎大家围观交流 。
集训营开源项目地址:https://github.com/PFCCLab/Camp
本期飞桨护航计划集训营开发项目内容硬核,既包括自动微分、新 IR Pass、自动混合精度、组合机制前反向统一、量化推理、算子类型扩展到复数、分布式能力建设与架构升级等核心组件开发工作,还有科学计算领域拓展专项、套件压缩能力建设、多模态大模型全流程建设等重要套件能力建设工作,营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了研发经理的肯定,3 名同学获得百度正式实习生 Offer。
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
03 - 飞桨黑客松完成榜单 2023 PaddlePaddle Hackathon 飞桨黑客马拉松第五期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方,OpenVINO™、华为、海光、Arm、高通、Zilliz、开放麒麟社区等共同出品,以线上认领任务的形式进行。 本次共有三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营。根据开发难度分为基础任务和进阶任务,为大家提供丰富的深度学习开发体验。对飞桨黑客松第五期公示榜单如有异议,请于 2023 年 12 月 25 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 12 月 26 日前对您的异议进行复核反馈。
恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
04 - 新的身份等你点亮 在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
关于 PFCC
PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到 ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
原文链接:https://mp.weixin.qq.com/s/Yjvwj8br84sPard1lLoNOQ
',39)]))}const k=e(l,[["render",h]]);export{m as __pageData,k as default};
diff --git a/assets/posts_hackathon-6th-summary.md.FRTopXGW.js b/assets/posts_hackathon-6th-summary.md.FRTopXGW.js
new file mode 100644
index 0000000..da3563b
--- /dev/null
+++ b/assets/posts_hackathon-6th-summary.md.FRTopXGW.js
@@ -0,0 +1 @@
+import{_ as a,c as t,k as r,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/list_1.DLmeeX8a.jpeg",s="/assets/list_2.DazSYeWm.jpeg",n="/assets/list_3.UJqPvMnO.jpeg",d="/assets/list_4.vnyOKwI3.jpeg",m=JSON.parse('{"title":"PaddlePaddle Hackathon | 探索无限可能!飞桨黑客马拉松第六期活动完美收官","description":"","frontmatter":{"title":"PaddlePaddle Hackathon | 探索无限可能!飞桨黑客马拉松第六期活动完美收官","date":"2024-08-23T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/hackathon-6th-summary.md","filePath":"posts/hackathon-6th-summary.md"}'),h={name:"posts/hackathon-6th-summary.md"};function i(p,e,c,u,g,b){return o(),t("div",null,e[0]||(e[0]=[r('飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
不论是再次相遇的老朋友,还是志同道合的新朋友,每个人都可以在这里共同探索无限可能。
这是一场真正的 Hacker 盛宴,同时也是一次硬核的较量,更是与飞桨研发团队和社区伙伴协作的绝佳机会!
期待见证你在这个舞台上的成长和进步。
彻底释放你的创造力,“码”上见真章!
经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
01 - 更硬核的飞桨黑客松活动 PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第六期于 2024 年 3 月 20 日正式上线。本期活动提高了整体难度和结题要求,并且受到了开发者的热情响应。他们前赴后继,挑战自我,最终在经过三个月的激烈竞争后圆满落幕!
本次飞桨黑客松延续了往期深受开发者喜爱的两大活动形式——开源贡献个人挑战赛和飞桨护航集训营,并首次引入了「Fundable Projects」赛道,专注解决飞桨框架的核心技术难题。在这一赛道中,社区高水平开发者领导并规划技术路线,号召社区共同完成课题项目。此外,还新增了「优秀稿件征集与传播」赛道,鼓励开发者撰写基于飞桨框架新功能的科技文章,进一步扩展飞桨的影响力。
共有 49 位社区开发者参与并完成本期飞桨黑客松的任务,本次活动在任务完成难度、参与团队规模、项目类型丰富度等方面均有提升,充分展示了开发者们对于建设飞桨开源生态的热情和奉献精神。 我们期待这些开发者团队在飞桨开源生态中继续迸发出光彩和力量,与飞桨一路同行,共同打造更加优秀的开源社区。
02 - 四大赛道 开源贡献 飞桨与生态伙伴 OpenVINO™ 携手,发布了四大赛道共计 46 个方向的开源贡献任务,从框架开发、套件建设、论文复现、基础设施到技术文章任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
总览 开源贡献个人挑战赛:共发布 55 个开源贡献任务,最终由 13 位开发者完成 38 个任务。 护航计划集训营:共发布 27 个实训项目,涵盖多个救技术方向,最终 28 位同学参与答辩并顺利结营,加速了飞桨的功能迭代。 Fundable Projects:定位为硬核社区项目,本期由社区完成了 5 个关键技术项目的研发。 优秀稿件征集与传播:社区完成 9 篇高质量稿件,并在 CSDN 等平台传播。 一、开源贡献个人挑战赛 开源贡献个人挑战赛以开源贡献为核心,基于 GitHub 的飞桨及生态伙伴开源项目进行代码贡献。本期个人挑战赛发共布 55 个开源贡献任务,涵盖飞桨核心框架、科学计算、Paddle2ONNX 套件和生态伙伴项目,所有任务均完成认领,43 个任务提交作品,38 个任务顺利完成,完成率 69% 。 感谢各位开发者的积极参与,致敬每一位开源贡献者!本期完成的框架开发任务也将进入飞桨框架 3.0 发版流程,贡献者成果被全体飞桨框架用户共享 。
此外,本次黑客松 Paddle2ONNX 方向三道赛题的奖励(共 4500 元)均为社区捐赠,因此最后的奖励由 Paddle2ONNX PMC 向社区热心开发者直接颁发 。感谢 Paddle2ONNX 社区的六位金主:chenwhql 、luotao1 、goocody 、jeff41404 、 jzhang553 、ZhengBicheng 。
更多详情请查看任务 issue 📄: https://github.com/PaddlePaddle/Paddle/issues/62905
二、飞桨护航计划集训营 飞桨护航计划集训营是本期黑客松的核心赛道之一,专注于为开发者提供一个实践、学习与成长的远程集训营。营员以远程的方式,导师 1 对 1 带教深度参与飞桨重要开源项目开发实践。本次计划分两批共发布 27 个实训项目,涵盖多个技术方向,完成招募 32 名营员。三个月集训期间共计 提交 6 期周报,组织 2 期技术分享会,最终 28 位营员参与答辩并顺利结营 ,极大加速了飞桨的功能迭代。
集训营开源项目地址:https://github.com/PFCCLab/Camp ,所有学习笔记与周报记录均留痕~
本期飞桨护航计划集训营开发项目内容硬核,既包括 PIR、CINN、组合算子等专项机制建设工作,也包括模型迁移工具建设、框架 API 易用性提升、CMake 治理和编译优化、分布式自动并行架构升级和性能优化等框架核心组件开发工作,还有科学计算领域拓展专项、PaddleMIX 多模态大模型能力建设等重要套件能力建设工作...营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了内部研发经理的肯定,并有多名同学获得百度正式实习生 Offer。
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/61006
三、优秀稿件征集与传播 随着版本的更新,飞桨功能发生了非常大的变化,为了让更多的开发者了解这些信息,本期黑客松新增了优秀稿件征集与传播赛道 。该赛道共开放了 7 个稿件选题,涵盖 0 维 Tensor、复数计算、稀疏计算、高阶微分等技术点的使用指南及学习心得。所有参赛选手共提交了 12 篇稿件,最终 3 名选手合计 9 篇高质量稿件顺利通过审核并合入 ,并在 AIStudio、CSDN 等内容社区平台进行推广,帮助飞桨传播正面技术影响力。
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62907
四、Fundable Projects Fundable Projects 是本期黑客松的创新赛道之一,核心聚焦于攻克飞桨面临的硬核技术课题 。参赛选手需要能够独立剖析复杂的任务需求、精心规划技术实施路径,并倡导携手社区力量,共同推进关键功能需求的落地实现。本赛道共发布了 6 个亟待解决的飞桨关键技术项目 —— 为 Paddle 框架 API 添加类型提示、引入 clang-tidy 工具、旧动态图和执行器机制清理、全套件模型实现动转静训练功能、解决长期存在的 PaddleOCR 问题。所有开发课题均已被社区积极认领,并且其中 5 个项目课题的研发在社区的共同努力下圆满完成。
鉴于 Fundable Projects 赛道在本期黑客松中取得的超乎预期的成功与影响力,我们决定在未来的黑客松活动中继续深化这一赛道,并诚邀所有怀揣技术梦想、勇于攀登技术高峰的社区成员加入这场硬核技术的挑战之旅。为了表彰并激励更多的优秀贡献,我们也将加大该赛道的奖励力度哦~
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62908
未来计划 个人贡献挑战赛: 持续运转,征集并发布飞桨研发赛题,扩大开源声量。护航计划集训营: 重点开展 ,扩大集训营的规模、批次,结合 GLCC、开源之夏共同运营远程实习项目。Fundable Projects: 重点开展 ,尝试将更多硬核研发课题、产品新特性交由社区开发完成。其他(待定) 03 - 飞桨黑客松完成榜单 2024 PaddlePaddle Hackathon 飞桨黑客马拉松第六期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方共同出品,以线上认领任务的形式进行。本次共有四大赛道:开源贡献个人挑战赛、飞桨护航计划集训营、Fundable Projects、优秀稿件征集与传播,多样的活动形式为大家提供丰富的深度学习开发体验。对飞桨黑客松第六期公示榜单如有异议,请于 2024 年 08 月 30 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 08 月 31 日前对您的异议进行复核反馈。
恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
04 - 新的身份等你点亮 在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
关于 PFCC
PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
',45)]))}const f=a(h,[["render",i]]);export{m as __pageData,f as default};
diff --git a/assets/posts_hackathon-6th-summary.md.FRTopXGW.lean.js b/assets/posts_hackathon-6th-summary.md.FRTopXGW.lean.js
new file mode 100644
index 0000000..da3563b
--- /dev/null
+++ b/assets/posts_hackathon-6th-summary.md.FRTopXGW.lean.js
@@ -0,0 +1 @@
+import{_ as a,c as t,k as r,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/list_1.DLmeeX8a.jpeg",s="/assets/list_2.DazSYeWm.jpeg",n="/assets/list_3.UJqPvMnO.jpeg",d="/assets/list_4.vnyOKwI3.jpeg",m=JSON.parse('{"title":"PaddlePaddle Hackathon | 探索无限可能!飞桨黑客马拉松第六期活动完美收官","description":"","frontmatter":{"title":"PaddlePaddle Hackathon | 探索无限可能!飞桨黑客马拉松第六期活动完美收官","date":"2024-08-23T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/hackathon-6th-summary.md","filePath":"posts/hackathon-6th-summary.md"}'),h={name:"posts/hackathon-6th-summary.md"};function i(p,e,c,u,g,b){return o(),t("div",null,e[0]||(e[0]=[r('飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
不论是再次相遇的老朋友,还是志同道合的新朋友,每个人都可以在这里共同探索无限可能。
这是一场真正的 Hacker 盛宴,同时也是一次硬核的较量,更是与飞桨研发团队和社区伙伴协作的绝佳机会!
期待见证你在这个舞台上的成长和进步。
彻底释放你的创造力,“码”上见真章!
经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
01 - 更硬核的飞桨黑客松活动 PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第六期于 2024 年 3 月 20 日正式上线。本期活动提高了整体难度和结题要求,并且受到了开发者的热情响应。他们前赴后继,挑战自我,最终在经过三个月的激烈竞争后圆满落幕!
本次飞桨黑客松延续了往期深受开发者喜爱的两大活动形式——开源贡献个人挑战赛和飞桨护航集训营,并首次引入了「Fundable Projects」赛道,专注解决飞桨框架的核心技术难题。在这一赛道中,社区高水平开发者领导并规划技术路线,号召社区共同完成课题项目。此外,还新增了「优秀稿件征集与传播」赛道,鼓励开发者撰写基于飞桨框架新功能的科技文章,进一步扩展飞桨的影响力。
共有 49 位社区开发者参与并完成本期飞桨黑客松的任务,本次活动在任务完成难度、参与团队规模、项目类型丰富度等方面均有提升,充分展示了开发者们对于建设飞桨开源生态的热情和奉献精神。 我们期待这些开发者团队在飞桨开源生态中继续迸发出光彩和力量,与飞桨一路同行,共同打造更加优秀的开源社区。
02 - 四大赛道 开源贡献 飞桨与生态伙伴 OpenVINO™ 携手,发布了四大赛道共计 46 个方向的开源贡献任务,从框架开发、套件建设、论文复现、基础设施到技术文章任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
总览 开源贡献个人挑战赛:共发布 55 个开源贡献任务,最终由 13 位开发者完成 38 个任务。 护航计划集训营:共发布 27 个实训项目,涵盖多个救技术方向,最终 28 位同学参与答辩并顺利结营,加速了飞桨的功能迭代。 Fundable Projects:定位为硬核社区项目,本期由社区完成了 5 个关键技术项目的研发。 优秀稿件征集与传播:社区完成 9 篇高质量稿件,并在 CSDN 等平台传播。 一、开源贡献个人挑战赛 开源贡献个人挑战赛以开源贡献为核心,基于 GitHub 的飞桨及生态伙伴开源项目进行代码贡献。本期个人挑战赛发共布 55 个开源贡献任务,涵盖飞桨核心框架、科学计算、Paddle2ONNX 套件和生态伙伴项目,所有任务均完成认领,43 个任务提交作品,38 个任务顺利完成,完成率 69% 。 感谢各位开发者的积极参与,致敬每一位开源贡献者!本期完成的框架开发任务也将进入飞桨框架 3.0 发版流程,贡献者成果被全体飞桨框架用户共享 。
此外,本次黑客松 Paddle2ONNX 方向三道赛题的奖励(共 4500 元)均为社区捐赠,因此最后的奖励由 Paddle2ONNX PMC 向社区热心开发者直接颁发 。感谢 Paddle2ONNX 社区的六位金主:chenwhql 、luotao1 、goocody 、jeff41404 、 jzhang553 、ZhengBicheng 。
更多详情请查看任务 issue 📄: https://github.com/PaddlePaddle/Paddle/issues/62905
二、飞桨护航计划集训营 飞桨护航计划集训营是本期黑客松的核心赛道之一,专注于为开发者提供一个实践、学习与成长的远程集训营。营员以远程的方式,导师 1 对 1 带教深度参与飞桨重要开源项目开发实践。本次计划分两批共发布 27 个实训项目,涵盖多个技术方向,完成招募 32 名营员。三个月集训期间共计 提交 6 期周报,组织 2 期技术分享会,最终 28 位营员参与答辩并顺利结营 ,极大加速了飞桨的功能迭代。
集训营开源项目地址:https://github.com/PFCCLab/Camp ,所有学习笔记与周报记录均留痕~
本期飞桨护航计划集训营开发项目内容硬核,既包括 PIR、CINN、组合算子等专项机制建设工作,也包括模型迁移工具建设、框架 API 易用性提升、CMake 治理和编译优化、分布式自动并行架构升级和性能优化等框架核心组件开发工作,还有科学计算领域拓展专项、PaddleMIX 多模态大模型能力建设等重要套件能力建设工作...营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了内部研发经理的肯定,并有多名同学获得百度正式实习生 Offer。
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/61006
三、优秀稿件征集与传播 随着版本的更新,飞桨功能发生了非常大的变化,为了让更多的开发者了解这些信息,本期黑客松新增了优秀稿件征集与传播赛道 。该赛道共开放了 7 个稿件选题,涵盖 0 维 Tensor、复数计算、稀疏计算、高阶微分等技术点的使用指南及学习心得。所有参赛选手共提交了 12 篇稿件,最终 3 名选手合计 9 篇高质量稿件顺利通过审核并合入 ,并在 AIStudio、CSDN 等内容社区平台进行推广,帮助飞桨传播正面技术影响力。
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62907
四、Fundable Projects Fundable Projects 是本期黑客松的创新赛道之一,核心聚焦于攻克飞桨面临的硬核技术课题 。参赛选手需要能够独立剖析复杂的任务需求、精心规划技术实施路径,并倡导携手社区力量,共同推进关键功能需求的落地实现。本赛道共发布了 6 个亟待解决的飞桨关键技术项目 —— 为 Paddle 框架 API 添加类型提示、引入 clang-tidy 工具、旧动态图和执行器机制清理、全套件模型实现动转静训练功能、解决长期存在的 PaddleOCR 问题。所有开发课题均已被社区积极认领,并且其中 5 个项目课题的研发在社区的共同努力下圆满完成。
鉴于 Fundable Projects 赛道在本期黑客松中取得的超乎预期的成功与影响力,我们决定在未来的黑客松活动中继续深化这一赛道,并诚邀所有怀揣技术梦想、勇于攀登技术高峰的社区成员加入这场硬核技术的挑战之旅。为了表彰并激励更多的优秀贡献,我们也将加大该赛道的奖励力度哦~
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62908
未来计划 个人贡献挑战赛: 持续运转,征集并发布飞桨研发赛题,扩大开源声量。护航计划集训营: 重点开展 ,扩大集训营的规模、批次,结合 GLCC、开源之夏共同运营远程实习项目。Fundable Projects: 重点开展 ,尝试将更多硬核研发课题、产品新特性交由社区开发完成。其他(待定) 03 - 飞桨黑客松完成榜单 2024 PaddlePaddle Hackathon 飞桨黑客马拉松第六期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方共同出品,以线上认领任务的形式进行。本次共有四大赛道:开源贡献个人挑战赛、飞桨护航计划集训营、Fundable Projects、优秀稿件征集与传播,多样的活动形式为大家提供丰富的深度学习开发体验。对飞桨黑客松第六期公示榜单如有异议,请于 2024 年 08 月 30 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 08 月 31 日前对您的异议进行复核反馈。
恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
04 - 新的身份等你点亮 在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
关于 PFCC
PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
',45)]))}const f=a(h,[["render",i]]);export{m as __pageData,f as default};
diff --git a/assets/posts_huanggua-story.md.iFqrJ-8D.js b/assets/posts_huanggua-story.md.iFqrJ-8D.js
new file mode 100644
index 0000000..3993e6c
--- /dev/null
+++ b/assets/posts_huanggua-story.md.iFqrJ-8D.js
@@ -0,0 +1 @@
+import{M as i,_ as a}from"./chunks/MessageBox.CshcSYCA.js";import{c as r,a as l,v as u,i as t,s as e,k as d,o as s}from"./chunks/framework.D1-4jGi8.js";const g="/assets/huanggua-01.5sbPPZbB.jpg",o="/assets/huanggua-02.BKcdSOD0.jpg",f="/assets/huanggua-03.BPzKpsu-.jpg",p="/assets/huanggua-04.DiMrknTY.jpg",b={start:"7"},S=JSON.parse('{"title":"【开源江湖闲聊录】初中生也能当开发者❓少年黄瓜的开源奇遇记","description":"","frontmatter":{"title":"【开源江湖闲聊录】初中生也能当开发者❓少年黄瓜的开源奇遇记","date":"2023-12-12T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇(小记者)","github":"wenxiaohahaha"},{"name":"黄锦源(黄瓜大帝)","github":"Berniehuang2008"}]},"headers":[],"relativePath":"posts/huanggua-story.md","filePath":"posts/huanggua-story.md"}'),m={name:"posts/huanggua-story.md"},x=Object.assign(m,{setup(P){return(y,n)=>(s(),r("div",null,[n[30]||(n[30]=l("p",null,[u("他来了,他来了,他带着满满的故事,迈着自信的步伐向我们走来了!虽然刚满 15 岁,但"),l("strong",null,"小小黄瓜"),u("的开源史却已有好几年!学校趣事?开源经历?迷人帅照?成山作业?你都能在本篇博客看到!")],-1)),n[31]||(n[31]=l("h2",{id:"一、前言",tabindex:"-1"},[u("一、前言 "),l("a",{class:"header-anchor",href:"#一、前言","aria-label":'Permalink to "一、前言"'},"")],-1)),n[32]||(n[32]=l("p",null,[l("strong",null,"Berniehuang2008"),u("(人送外号:黄瓜),是深圳一位 15 岁的初中生,同时也是 OpenTeens(全国甚至全世界第一个青少年开源社区)创始人之一。黄瓜曾贡献过开源项目 SearXNG 和 GestureX 等,是一位优秀的青少年开发者。他在 10 月加入 Paddle 社区,并且以迅雷不及掩耳之势合入 PR,成为 Paddle 社区的 contributor。现在,他正在准备参加 Paddle 黑客松,让我们一起看看他的故事吧😀~")],-1)),n[33]||(n[33]=l("h2",{id:"二、采访内容",tabindex:"-1"},[u("二、采访内容 "),l("a",{class:"header-anchor",href:"#二、采访内容","aria-label":'Permalink to "二、采访内容"'},"")],-1)),l("ol",null,[l("li",null,[n[1]||(n[1]=l("p",null,[l("strong",null,"简单介绍一下自己吧!")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[0]||(n[0]=[u(" 我叫黄锦源,外号黄瓜,是深圳的一个初三学生。 ")])),_:1})]),_:1})]),l("li",null,[n[3]||(n[3]=l("p",null,[l("strong",null,"现在是一名初三学生,课程学习忙么?有什么喜欢的科目没有?😁😁")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[2]||(n[2]=[u(" 忙啊,当然忙。每天周考,从四点半考到六点,放学回家一堆卷子烦的要死。最喜欢的是数学,没有原因,就是喜欢😳。 ")])),_:1})]),_:1})]),l("li",null,[n[5]||(n[5]=l("p",null,[l("strong",null,"学校最近有什么有趣的事情可以和大家分享一下!")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[4]||(n[4]=[u(" emmm,有趣的事情?没啥,天天考试有啥有趣的。。。不过昨天我还骑车来着,扫了一辆小黄车就一路骑到深圳湾,14 公里,挺开心的。我们几个朋友还去烧纸,哇塞,烧数学书真解气!(黄瓜自注:我们数学课从来不用书) ")])),_:1})]),_:1})]),l("li",null,[n[7]||(n[7]=l("p",null,[l("strong",null,"当初你是如何被编程和开源世界吸引的?是什么驱使你成为了一名青少年开发者和开源社区创始人呢?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[6]||(n[6]=[u(" 我是从 Scratch 学起的,一开始就感觉 Scratch 这玩意很有意思,想让他干啥他就干啥,有一种掌控世界的感觉。后来,Scratch 写了一百多个游戏之后玩无聊了,转行 Python,才发现这玩意比 Scratch 好玩 10086 倍! "),l("br",null,null,-1),u(" 初一的时候,被我们学校信竞老师征召入伍,但我对竞赛类的东西不感冒,学了一年就退坑了。 ")])),_:1})]),_:1})]),l("li",null,[n[9]||(n[9]=l("p",null,[l("strong",null,"之前看你的 GitHub 主页里,有对 SearXNG 提交过 PR,这是一个怎样的项目?你在 SearXNG 项目中的具体贡献是什么?你最喜欢的部分是什么?这个经历让你有什么样的收获?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[8]||(n[8]=[u(" SearXNG 是一个开源的搜索引擎,我当时对搜索引擎算法特别着迷,就找了一个,最后发现这玩意就是从 Google、Bing 上面爬数据然后整理! "),l("br",null,null,-1),u(" 不过既然点进去了,索性就帮他们修个 bug 吧,结果这就成为了我第一个参与的开源项目。现在越做越深入,跟 Maintainer 已经算得上认识了 hhh ")])),_:1})]),_:1}),n[10]||(n[10]=l("blockquote",null,[l("p",null,"编者注✍️:现在初中生都已经开始接触算法了吗!")],-1))]),l("li",null,[n[12]||(n[12]=l("p",null,[l("strong",null,"除了在 SearXNG 项目中的贡献,我发现你还设计了一些开源小程序(eg:Dairy APP),能否分享一下你最引以为傲的作品是什么?你觉得这个作品的意义是什么?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[11]||(n[11]=[u(" addd,Diary app 确实是我前几周的重点。我比较喜欢创新新功能,比如说一打开就弹出一篇以往的日记,配上符合当时心情的音乐,让你朝花夕拾一下。 "),l("br",null,null,-1),u(" 现在嘛,我写了一个 Python 库,叫做 MercurySQLite,提供了一个高级的接口,能不用写 SQL 语句就能操作数据库,贼方便告诉你。 ")])),_:1})]),_:1})])]),n[34]||(n[34]=l("div",{style:{display:"flex","justify-content":"center"}},[l("figure",{style:{width:"40%"}},[l("img",{src:g,alt:"APP"}),l("figcaption",null,"Dairy APP 部分截图")])],-1)),l("ol",b,[l("li",null,[n[14]||(n[14]=l("p",null,[l("strong",null,"你如何了解到 Paddle 社区的,是什么吸引你加入这个社区并开始贡献?可以分享一下你和 Paddle 社区的小故事么?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[13]||(n[13]=[u(" 我也忘了第一次看 Paddle 是哪年了。。。不过当时我应该处于“AI 发烧友”阶段。后来,一年前?文心不是火了吗?我就想再看看 AI,就算是对 Paddle 有了一个大概的了解吧。 "),l("br",null,null,-1),u(" 直到今年的中国开源年会,我不是办青少年分论坛吗?我们接下来就是教育分论坛,然后我听了梦老师的演讲,觉得“快乐开源”这档子活动挺有意思的。 "),l("br",null,null,-1),u(" 其实我几个月前看过黑客松,那玩意儿实在是太难了做不来,但是快乐开源就挺好的啊,又不难,改文档也能学到很多,比如说文档的语法之类的,我的那个 SQL 项目文档就是受到了这个的启发。。 ")])),_:1})]),_:1})]),l("li",null,[n[16]||(n[16]=l("p",null,[l("strong",null,"加入 Paddle 社区后的第一次合并 PR 经历如何?有没有什么有趣的插曲或者教训🤓🤓🤓🤓?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[15]||(n[15]=[u(" 哈哈哈,第一次我故意挑了一个最简单的任务做,只有几行代码,属于是投机取巧摸鱼了。。不过第二次——也就是现在正在进行的 PR——没那么轻松了。原文档的格式超级乱,我都不理解他是什么意思。然后又是 CI 的报错看不懂。。。现在差不多改完了,还有亿点点小问题,也快了 ")])),_:1})]),_:1}),n[17]||(n[17]=l("blockquote",null,[l("p",null,[u("编者注✍️:文档任务很适合刚接触 Paddle 的开发者们,而相关的 PR 也很可能是大家在 Paddle 的第一个 PR。感兴趣可查看 ➡️"),l("a",{href:"https://github.com/PaddlePaddle/docs/issues/6165",target:"_blank",rel:"noreferrer"},"文档 Docathon 系列任务")])],-1))]),l("li",null,[n[19]||(n[19]=l("p",null,[l("strong",null,"你觉得今后 Paddle 社区对你的个人成长和技术发展有何影响?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[18]||(n[18]=[u(" Paddle 社区的技术实力肯定是没得说的。能跟这么多大佬在一起,我觉得不管是现在还是未来,都会对我有很大的影响。就比如说吧,虽然我现在还没有深入地接触到 Paddle 的技术层面,但是我只是在 PFCC 那个群里面苟着,就能学到很多东西,比如说 Paddle 的 CI 啊、代码规范啊之类的。 "),l("br",null,null,-1),u(" 然后我准备试着,只是试着哈,参加下一次的黑客松,或者是黑客松简单版。我相信,只需要一次任务,就可以把那一块的相关知识掌握熟练,然后社交技能也可以上来,这绝对是一举两得。 ")])),_:1})]),_:1})]),l("li",null,[n[21]||(n[21]=l("p",null,[l("strong",null,"作为一名青少年开发者,你一般是如何学习技术的,听说你曾经以 AI 学 AI?哈哈哈"),u("~~")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[20]||(n[20]=[u(" 以 AI 学 AI?试过,但是效果真的不咋地。那时候 GPT3.5 才刚出来,我问他啥都是乱答的。所以我还是觉得以前的学习方式比较好。我喜欢那种“在实际应用里学习”。也就是说,给我一个应用场景,或者是项目,然后我先想该怎么实现,遇到哪里有不懂的技术问题,再去搜,再去问别人(当然,嫌麻烦的话就问 AI /doge) "),l("br",null,null,-1),u(" 我觉得这样的学习效率是最高的。 ")])),_:1})]),_:1})]),l("li",null,[n[23]||(n[23]=l("p",null,[l("strong",null,"在你的同龄人中,有多少人对编程和开发感兴趣?你是如何看待青少年参与开源的?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[22]||(n[22]=[u(" 我的同龄人。。。如果你指的是我们学校的话。。。那么应该不多,应该不超过五个。所有学计算机的,基本上都是为了信竞。剩下的为数不多的四五个人,也只是用 GitHub 找找东西,玩玩游戏而已。 ")])),_:1})]),_:1})]),l("li",null,[n[25]||(n[25]=l("p",null,[l("strong",null,"你对于即将参加 Paddle 黑客松有什么样的期待和目标?你希望在黑客松中取得什么样的成绩?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[24]||(n[24]=[u(" 我的目标就是试一下,看看自己的水平在哪,然后顺便学一些知识。所以?只能期待题目不要太难了 hhh "),l("br",null,null,-1),u(" 至于成绩嘛,我也不奢求,能得一颗星就算是重大成就了,如果我是“有技术的”,也许可以尝试 may be 多弄一点星??? ")])),_:1})]),_:1})]),l("li",null,[n[27]||(n[27]=l("p",null,[l("strong",null,"那么在整个开源学习中,对你影响最深的是谁?为什么?(🤔🤔🤔)")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[26]||(n[26]=[u(" 这个问题很难答啊 hhh,说谁都不太好。 "),l("br",null,null,-1),u(" 但是如果要说真话,这就必须提到 SearXNG 那个搜索引擎的 Maintainer。他特别有耐心,还跟我闲聊,那段时间我初出茅庐啥也不懂,要不是他,我到现在还没入门呢! "),l("br",null,null,-1),u(" 当然啦,我必须希望以后能有更多影响我的人,超越他,对吧? ")])),_:1})]),_:1})]),l("li",null,[n[29]||(n[29]=l("p",null,[l("strong",null,"对于其他年轻开发者来说,你有什么建议?或者你想鼓励他们参与到开源社区,特别是 Paddle 社区中么?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[28]||(n[28]=[u(" 我觉得开源社区的一大魅力就在于“社区”——你永远可以找到帮助,永远可以与志同道合的人一起 coding,Paddle 社区更是一个典型。 "),l("br",null,null,-1),u(" 在 Paddle,如果你有什么问题——无论白痴问题还是神级难度——都会有人来看,都会有人来帮助你解决。 "),l("br",null,null,-1),u(" 我觉得 Paddle 的一大优点就是他是任务式的这种贡献机制。你可以选择各种不同难度的任务,循序渐进,慢慢提升自己。任务式贡献也可以让你有一个明确的目标,甚至是一个明确的思路,该怎么解决这个问题。 ")])),_:1})]),_:1})])]),n[35]||(n[35]=d('三、生活中的点点滴滴——黄瓜篇 黄锦源同学的日常 黄瓜的作业 黄瓜的猫🐱 ',4))]))}});export{S as __pageData,x as default};
diff --git a/assets/posts_huanggua-story.md.iFqrJ-8D.lean.js b/assets/posts_huanggua-story.md.iFqrJ-8D.lean.js
new file mode 100644
index 0000000..3993e6c
--- /dev/null
+++ b/assets/posts_huanggua-story.md.iFqrJ-8D.lean.js
@@ -0,0 +1 @@
+import{M as i,_ as a}from"./chunks/MessageBox.CshcSYCA.js";import{c as r,a as l,v as u,i as t,s as e,k as d,o as s}from"./chunks/framework.D1-4jGi8.js";const g="/assets/huanggua-01.5sbPPZbB.jpg",o="/assets/huanggua-02.BKcdSOD0.jpg",f="/assets/huanggua-03.BPzKpsu-.jpg",p="/assets/huanggua-04.DiMrknTY.jpg",b={start:"7"},S=JSON.parse('{"title":"【开源江湖闲聊录】初中生也能当开发者❓少年黄瓜的开源奇遇记","description":"","frontmatter":{"title":"【开源江湖闲聊录】初中生也能当开发者❓少年黄瓜的开源奇遇记","date":"2023-12-12T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇(小记者)","github":"wenxiaohahaha"},{"name":"黄锦源(黄瓜大帝)","github":"Berniehuang2008"}]},"headers":[],"relativePath":"posts/huanggua-story.md","filePath":"posts/huanggua-story.md"}'),m={name:"posts/huanggua-story.md"},x=Object.assign(m,{setup(P){return(y,n)=>(s(),r("div",null,[n[30]||(n[30]=l("p",null,[u("他来了,他来了,他带着满满的故事,迈着自信的步伐向我们走来了!虽然刚满 15 岁,但"),l("strong",null,"小小黄瓜"),u("的开源史却已有好几年!学校趣事?开源经历?迷人帅照?成山作业?你都能在本篇博客看到!")],-1)),n[31]||(n[31]=l("h2",{id:"一、前言",tabindex:"-1"},[u("一、前言 "),l("a",{class:"header-anchor",href:"#一、前言","aria-label":'Permalink to "一、前言"'},"")],-1)),n[32]||(n[32]=l("p",null,[l("strong",null,"Berniehuang2008"),u("(人送外号:黄瓜),是深圳一位 15 岁的初中生,同时也是 OpenTeens(全国甚至全世界第一个青少年开源社区)创始人之一。黄瓜曾贡献过开源项目 SearXNG 和 GestureX 等,是一位优秀的青少年开发者。他在 10 月加入 Paddle 社区,并且以迅雷不及掩耳之势合入 PR,成为 Paddle 社区的 contributor。现在,他正在准备参加 Paddle 黑客松,让我们一起看看他的故事吧😀~")],-1)),n[33]||(n[33]=l("h2",{id:"二、采访内容",tabindex:"-1"},[u("二、采访内容 "),l("a",{class:"header-anchor",href:"#二、采访内容","aria-label":'Permalink to "二、采访内容"'},"")],-1)),l("ol",null,[l("li",null,[n[1]||(n[1]=l("p",null,[l("strong",null,"简单介绍一下自己吧!")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[0]||(n[0]=[u(" 我叫黄锦源,外号黄瓜,是深圳的一个初三学生。 ")])),_:1})]),_:1})]),l("li",null,[n[3]||(n[3]=l("p",null,[l("strong",null,"现在是一名初三学生,课程学习忙么?有什么喜欢的科目没有?😁😁")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[2]||(n[2]=[u(" 忙啊,当然忙。每天周考,从四点半考到六点,放学回家一堆卷子烦的要死。最喜欢的是数学,没有原因,就是喜欢😳。 ")])),_:1})]),_:1})]),l("li",null,[n[5]||(n[5]=l("p",null,[l("strong",null,"学校最近有什么有趣的事情可以和大家分享一下!")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[4]||(n[4]=[u(" emmm,有趣的事情?没啥,天天考试有啥有趣的。。。不过昨天我还骑车来着,扫了一辆小黄车就一路骑到深圳湾,14 公里,挺开心的。我们几个朋友还去烧纸,哇塞,烧数学书真解气!(黄瓜自注:我们数学课从来不用书) ")])),_:1})]),_:1})]),l("li",null,[n[7]||(n[7]=l("p",null,[l("strong",null,"当初你是如何被编程和开源世界吸引的?是什么驱使你成为了一名青少年开发者和开源社区创始人呢?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[6]||(n[6]=[u(" 我是从 Scratch 学起的,一开始就感觉 Scratch 这玩意很有意思,想让他干啥他就干啥,有一种掌控世界的感觉。后来,Scratch 写了一百多个游戏之后玩无聊了,转行 Python,才发现这玩意比 Scratch 好玩 10086 倍! "),l("br",null,null,-1),u(" 初一的时候,被我们学校信竞老师征召入伍,但我对竞赛类的东西不感冒,学了一年就退坑了。 ")])),_:1})]),_:1})]),l("li",null,[n[9]||(n[9]=l("p",null,[l("strong",null,"之前看你的 GitHub 主页里,有对 SearXNG 提交过 PR,这是一个怎样的项目?你在 SearXNG 项目中的具体贡献是什么?你最喜欢的部分是什么?这个经历让你有什么样的收获?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[8]||(n[8]=[u(" SearXNG 是一个开源的搜索引擎,我当时对搜索引擎算法特别着迷,就找了一个,最后发现这玩意就是从 Google、Bing 上面爬数据然后整理! "),l("br",null,null,-1),u(" 不过既然点进去了,索性就帮他们修个 bug 吧,结果这就成为了我第一个参与的开源项目。现在越做越深入,跟 Maintainer 已经算得上认识了 hhh ")])),_:1})]),_:1}),n[10]||(n[10]=l("blockquote",null,[l("p",null,"编者注✍️:现在初中生都已经开始接触算法了吗!")],-1))]),l("li",null,[n[12]||(n[12]=l("p",null,[l("strong",null,"除了在 SearXNG 项目中的贡献,我发现你还设计了一些开源小程序(eg:Dairy APP),能否分享一下你最引以为傲的作品是什么?你觉得这个作品的意义是什么?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[11]||(n[11]=[u(" addd,Diary app 确实是我前几周的重点。我比较喜欢创新新功能,比如说一打开就弹出一篇以往的日记,配上符合当时心情的音乐,让你朝花夕拾一下。 "),l("br",null,null,-1),u(" 现在嘛,我写了一个 Python 库,叫做 MercurySQLite,提供了一个高级的接口,能不用写 SQL 语句就能操作数据库,贼方便告诉你。 ")])),_:1})]),_:1})])]),n[34]||(n[34]=l("div",{style:{display:"flex","justify-content":"center"}},[l("figure",{style:{width:"40%"}},[l("img",{src:g,alt:"APP"}),l("figcaption",null,"Dairy APP 部分截图")])],-1)),l("ol",b,[l("li",null,[n[14]||(n[14]=l("p",null,[l("strong",null,"你如何了解到 Paddle 社区的,是什么吸引你加入这个社区并开始贡献?可以分享一下你和 Paddle 社区的小故事么?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[13]||(n[13]=[u(" 我也忘了第一次看 Paddle 是哪年了。。。不过当时我应该处于“AI 发烧友”阶段。后来,一年前?文心不是火了吗?我就想再看看 AI,就算是对 Paddle 有了一个大概的了解吧。 "),l("br",null,null,-1),u(" 直到今年的中国开源年会,我不是办青少年分论坛吗?我们接下来就是教育分论坛,然后我听了梦老师的演讲,觉得“快乐开源”这档子活动挺有意思的。 "),l("br",null,null,-1),u(" 其实我几个月前看过黑客松,那玩意儿实在是太难了做不来,但是快乐开源就挺好的啊,又不难,改文档也能学到很多,比如说文档的语法之类的,我的那个 SQL 项目文档就是受到了这个的启发。。 ")])),_:1})]),_:1})]),l("li",null,[n[16]||(n[16]=l("p",null,[l("strong",null,"加入 Paddle 社区后的第一次合并 PR 经历如何?有没有什么有趣的插曲或者教训🤓🤓🤓🤓?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[15]||(n[15]=[u(" 哈哈哈,第一次我故意挑了一个最简单的任务做,只有几行代码,属于是投机取巧摸鱼了。。不过第二次——也就是现在正在进行的 PR——没那么轻松了。原文档的格式超级乱,我都不理解他是什么意思。然后又是 CI 的报错看不懂。。。现在差不多改完了,还有亿点点小问题,也快了 ")])),_:1})]),_:1}),n[17]||(n[17]=l("blockquote",null,[l("p",null,[u("编者注✍️:文档任务很适合刚接触 Paddle 的开发者们,而相关的 PR 也很可能是大家在 Paddle 的第一个 PR。感兴趣可查看 ➡️"),l("a",{href:"https://github.com/PaddlePaddle/docs/issues/6165",target:"_blank",rel:"noreferrer"},"文档 Docathon 系列任务")])],-1))]),l("li",null,[n[19]||(n[19]=l("p",null,[l("strong",null,"你觉得今后 Paddle 社区对你的个人成长和技术发展有何影响?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[18]||(n[18]=[u(" Paddle 社区的技术实力肯定是没得说的。能跟这么多大佬在一起,我觉得不管是现在还是未来,都会对我有很大的影响。就比如说吧,虽然我现在还没有深入地接触到 Paddle 的技术层面,但是我只是在 PFCC 那个群里面苟着,就能学到很多东西,比如说 Paddle 的 CI 啊、代码规范啊之类的。 "),l("br",null,null,-1),u(" 然后我准备试着,只是试着哈,参加下一次的黑客松,或者是黑客松简单版。我相信,只需要一次任务,就可以把那一块的相关知识掌握熟练,然后社交技能也可以上来,这绝对是一举两得。 ")])),_:1})]),_:1})]),l("li",null,[n[21]||(n[21]=l("p",null,[l("strong",null,"作为一名青少年开发者,你一般是如何学习技术的,听说你曾经以 AI 学 AI?哈哈哈"),u("~~")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[20]||(n[20]=[u(" 以 AI 学 AI?试过,但是效果真的不咋地。那时候 GPT3.5 才刚出来,我问他啥都是乱答的。所以我还是觉得以前的学习方式比较好。我喜欢那种“在实际应用里学习”。也就是说,给我一个应用场景,或者是项目,然后我先想该怎么实现,遇到哪里有不懂的技术问题,再去搜,再去问别人(当然,嫌麻烦的话就问 AI /doge) "),l("br",null,null,-1),u(" 我觉得这样的学习效率是最高的。 ")])),_:1})]),_:1})]),l("li",null,[n[23]||(n[23]=l("p",null,[l("strong",null,"在你的同龄人中,有多少人对编程和开发感兴趣?你是如何看待青少年参与开源的?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[22]||(n[22]=[u(" 我的同龄人。。。如果你指的是我们学校的话。。。那么应该不多,应该不超过五个。所有学计算机的,基本上都是为了信竞。剩下的为数不多的四五个人,也只是用 GitHub 找找东西,玩玩游戏而已。 ")])),_:1})]),_:1})]),l("li",null,[n[25]||(n[25]=l("p",null,[l("strong",null,"你对于即将参加 Paddle 黑客松有什么样的期待和目标?你希望在黑客松中取得什么样的成绩?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[24]||(n[24]=[u(" 我的目标就是试一下,看看自己的水平在哪,然后顺便学一些知识。所以?只能期待题目不要太难了 hhh "),l("br",null,null,-1),u(" 至于成绩嘛,我也不奢求,能得一颗星就算是重大成就了,如果我是“有技术的”,也许可以尝试 may be 多弄一点星??? ")])),_:1})]),_:1})]),l("li",null,[n[27]||(n[27]=l("p",null,[l("strong",null,"那么在整个开源学习中,对你影响最深的是谁?为什么?(🤔🤔🤔)")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[26]||(n[26]=[u(" 这个问题很难答啊 hhh,说谁都不太好。 "),l("br",null,null,-1),u(" 但是如果要说真话,这就必须提到 SearXNG 那个搜索引擎的 Maintainer。他特别有耐心,还跟我闲聊,那段时间我初出茅庐啥也不懂,要不是他,我到现在还没入门呢! "),l("br",null,null,-1),u(" 当然啦,我必须希望以后能有更多影响我的人,超越他,对吧? ")])),_:1})]),_:1})]),l("li",null,[n[29]||(n[29]=l("p",null,[l("strong",null,"对于其他年轻开发者来说,你有什么建议?或者你想鼓励他们参与到开源社区,特别是 Paddle 社区中么?")],-1)),t(i,null,{default:e(()=>[t(a,{name:"黄瓜🥒",github:"Berniehuang2008"},{default:e(()=>n[28]||(n[28]=[u(" 我觉得开源社区的一大魅力就在于“社区”——你永远可以找到帮助,永远可以与志同道合的人一起 coding,Paddle 社区更是一个典型。 "),l("br",null,null,-1),u(" 在 Paddle,如果你有什么问题——无论白痴问题还是神级难度——都会有人来看,都会有人来帮助你解决。 "),l("br",null,null,-1),u(" 我觉得 Paddle 的一大优点就是他是任务式的这种贡献机制。你可以选择各种不同难度的任务,循序渐进,慢慢提升自己。任务式贡献也可以让你有一个明确的目标,甚至是一个明确的思路,该怎么解决这个问题。 ")])),_:1})]),_:1})])]),n[35]||(n[35]=d('三、生活中的点点滴滴——黄瓜篇 黄锦源同学的日常 黄瓜的作业 黄瓜的猫🐱 ',4))]))}});export{S as __pageData,x as default};
diff --git a/assets/posts_huangjiyi-story.md.BoJUl8hg.js b/assets/posts_huangjiyi-story.md.BoJUl8hg.js
new file mode 100644
index 0000000..252ee35
--- /dev/null
+++ b/assets/posts_huangjiyi-story.md.BoJUl8hg.js
@@ -0,0 +1 @@
+import{M as s,_ as i}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as n,i as a,s as o,a as r,v as e,o as g}from"./chunks/framework.D1-4jGi8.js";const p="/assets/huangjiyi-01.DXLrvOrw.jpg",d="/assets/huangjiyi-02.7pHNcGD5.jpg",u="/assets/huangjiyi-06.CyxAzjzo.jpg",h="/assets/huangjiyi-03.DYNP8_Fb.jpg",f="/assets/huangjiyi-04.ajHRyHp9.jpg",b="/assets/huangjiyi-05.DzUpMc4V.jpg",j=JSON.parse('{"title":"【开源江湖闲聊录】从入门到入职(入土):黄师傅的校招 offer 指南!","description":"","frontmatter":{"title":"【开源江湖闲聊录】从入门到入职(入土):黄师傅的校招 offer 指南!","date":"2023-12-05T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇(小记者)","github":"wenxiaohahaha"},{"name":"黄济懿(黄师傅)","github":"huangjiyi"}]},"headers":[],"relativePath":"posts/huangjiyi-story.md","filePath":"posts/huangjiyi-story.md"}'),c={name:"posts/huangjiyi-story.md"},q=Object.assign(c,{setup(P){return(y,t)=>(g(),l("div",null,[t[4]||(t[4]=n('从积极参与社区开源任务,到加入飞桨成为 (练习生) 实习生,到最终正式成为飞桨研发团队的一员。以兴趣为起点, 黄济懿师傅 将我们展示了一条通往职业的道路,希望他的故事能够激励所有对开源充满热情的开发者们。接下来,原神启动 🚀!
一、前言 黄师傅是一个地地道道的江西人,喜欢吃辣🌶️🌶️🌶️。他本科研究生都就读于广州的华南理工大学,现为电子信息专业,即将毕业前往 Paddle 工作。作为一名研究僧,他在空余时间喜欢吃吃美食或者玩玩游戏,像是原神/LOL/金铲铲之战 (各位要是也在玩,可以找黄师傅哦~黄师傅求大佬带带!!)。
偷偷告诉你们:黄师傅最近的主线任务就是毕设,请务必多找他打游戏让他延毕(不是)
去年 11 月,他出于对深度学习框架的底层实现的兴趣,联系花花加入了快乐开源群。在这一年里,他陆续完成社区里各项开源任务以熟悉 Paddle 框架,期间他也把握住了来飞桨实习的机会,他不断积累开发经验,不断加深对 Paddle 的理解,最终,他通过了飞桨团队的面试,成功拿下了飞桨校招 offer!
黄师傅曾说:"我将继续在飞桨开源活动完成一些任务,希望能够学到更多的同时也能为飞桨的建设做出小小的贡献"。事实上,黄师傅曾分别参与了 PHI 算子库独立编译 、算子定义自动生成 ,Fluid Kernel 函数式改造 等多个快乐开源活动项目以及飞桨框架护航计划,到目前为 Paddle 贡献了 100 多个 PR。抛开实习生和正式员工的身份,黄师傅自身也是飞桨社区的自发贡献者和推动者。接下来,就让我们来瞅瞅黄师傅的精彩 Paddle 之旅吧!!
原神,启动!!(请读者自行脑补 BGM)
二、采访内容 介绍一下自己吧,黄师傅!(●'◡'●)
黄师傅: 我的 AI Studio 和 GitHub 的账号是 huangjiyi ,也是我名字的全拼(黄济懿)。
可以简单和大家分享一下你生活中有什么兴趣爱好吗⊙o⊙(游戏、旅游、运动等等)?
黄师傅: 我就是个死宅,平时就是打打游戏,刷刷 B 站,出门也就是找点好吃的。
听说你本科研究生都在华南理工大学,你们学校周围有什么好吃的啊?🍔🍟🍿🥯🥪🥗🎂🍬🍹🍉
黄师傅: 因为在华工太久学校食堂已经吃腻了,我会经常出校找点吃的,但活动范围有限,学校周边我吃过比较好吃的不多,就川菜小炒、麻辣香锅、鸡公煲、螺狮粉、泰国菜这些。
我了解到你平时有在玩 LOL,那么如果把 Paddle 比作一个英雄🦸,你觉得它最像谁?为什么嘞?
黄师傅: 我的答案是维克托 ,我的想象力有限,我只是觉得维克托的技能是会进化的,而 Paddle 也是在不断进化(更新)和扩展的,另外在维克托的背景故事里,他发明了很多具有智能的机械,比如蒸汽机器人,这和我们用 Paddle 来做的事比较相关,我只能想到这么多了。
维克托 你在加入飞桨开源群之前对 Paddle 的了解是什么样的?有没有听说过一些关于 Paddle 的传闻或者故事?
黄师傅: 我在加入飞桨开源社区之前,我主要是一个用 PyTorch 跑深度学习实验的研究牲,对 Paddle 的了解也是和 PyTorch 类似的深度学习框架。关于 Paddle 的传闻的话像是国内最早开源的深度学习框架,以及国内最好的深度学习框架。
你第一个在 GitHub 上完成的 PR 是关于什么的呢?在 PR 的过程中你遇到了什么难题吗?
黄师傅: 我第一个在 GitHub 上完成的 PR 是 PHI 算子库独立编译 开源活动的一个子任务,只需要进行简单的代码替换,没有遇到什么难题,只是第一次改这么大项目的代码有点担心会不会改出什么问题。
编者注✍️:【PHI 算子库独立编译 】是飞桨开源社区的快乐开源活动之一~我们社区有很多类似的、名字听起来很高大上但实际上难度不大的开源活动
你觉得 Paddle 相比其他深度学习框架有什么优势?可以举个例子么?
黄师傅: 其他深度学习框架我主要使用过 PyTorch,从用户的视角来比较的话,Paddle 具有丰富的中文文档,包括一些 API 文档和框架开发的技术文档,同时在 AI Studio 上有很多开发者分享的基于 Paddle 实现的项目和以及开发心得可以参考,这些对于国内用户十分友好。另外 Paddle 还有很多开源的套件,用户能够使用这些套件更快地完成一些深度学习应用任务。
飞桨的开源活动中,你完成的任务中有没有什么特别有趣或者有挑战性的项目?有没有什么技术难题让你觉得很兴奋或者很有成就感?
黄师傅: 我参加过的很多关于框架开发的开源活动都比较有挑战性,期间遇到的一些困难主要是一些编译问题,然后在通过调试定位问题所在代码、弄清楚问题原因、最后解决问题的时候会比较有成就感。
据了解,你接触 Paddle 已经有一年多,那么你最欣赏 Paddle 团队中的哪些特点或价值观?为什么?
黄师傅: 我比较欣赏的一点是 Paddle 团队非常重视开源社区生态,这一点从丰富的社区活动可以看出来,社区开发者可以从中学习到很多东西同时能够获得丰厚的奖励。
我记得你说过花花和涛姐给了你很多帮助,你觉得他们是怎样的人呢(分别说说🫶🫶)?为什么?
黄师傅: 花花:飞桨最美运营,关键人家还很努力。 涛姐:为了让开发者能一直有新鲜热乎的开源任务做操碎了心。
编者注✍️:花花是飞桨社区顶尖运营,涛姐是飞桨社区顶尖研发。
你是怎么获得去 Paddle 实习的机会的呢?
黄师傅: 关于我如何获得去 Paddle 实习的机会,当时我刚开始做了一些开源任务,然后在和花花交流的时候以一种半开玩笑的语气问花花能不能去实习,结果没想到花花真的和涛姐提了,然后涛姐真的申请了,飞桨真的给我面试了,然后我面试也真的通过了,然后我就去实习了,一切都是这么突然。
编者注✍️:其实目前已经有相当多的社区开发者,通过参与开源活动接触到 Paddle,并最终获得实习机会。另外,对于不方便线下实习的同学,我们也提供了远程实习的方案,可以了解往期【护航计划 】。
在 Paddle 实习的时候,你是否参与了某个具体项目的开发?可以分享一下你在项目中的具体角色和贡献吗?
黄师傅: 我在实习期间刚开始是接着之前在社区参加的 PHI 算子库独立编译 开源项目,完成剩下的一些比较困难的任务,花了一个多月的时间完成,剩下的大部分时间参与了结构体 Kernel 注册统一 这个项目,期间也会接到一些其他小任务,一共实习了 3 个月吧,基本状态是要我干啥干啥,不会的就问。
你认为实习那段时间你最大的收获是什么?你认为这段实习经历对你以后的职业生涯规划有起到什么影响?
黄师傅: 收获很多,体验到了与在学校实验室不同的工作氛围,认识了一些研发大佬,深入了解了 Paddle 的一些机制,积累了一些编译调试和解决问题的经验。在 Paddle 的开源经历和实习经历让我找工作的目标从算法工程师转向了开发工程师,相比于具有不确定性同时很多时候凭借直觉的深度学习算法研究或者应用工作,我发现我更喜欢逻辑性更强且大多数问题都能找到原因的开发工作。
最后也恭喜你拿到 Paddle 的 offer 🎉,对于同样有志加入 Paddle 团队的学生党,你可以分享一些建议议、经验或者成功路径吗?
黄师傅: 我感觉我能拿到飞桨 offer 很大一部分原因是我在飞桨的实习经历和参加了一些开源活动,所以我的建议是在学习技术的同时多参加飞桨的开源活动,或者有机会去飞桨实习。
黄师傅的校招 offer 部分截图 三、“著名平台——虎扑评论”专区 这次,我们邀请了一些和黄师傅有过合作经历的朋友们(以及实习期间的导师🐶),贡献一下和黄师傅相关的故事,或者他们对黄师傅的评价~以下均为真心话,请放心看!
编者注✍️:黄师傅有些社恐,所以认识的社区朋友不多,大家正好可以借此机会认识一下。
',17)),a(s,null,{default:o(()=>[a(i,{name:"骆涛",github:"luotao1"},{default:o(()=>t[0]||(t[0]=[e(" 我觉得黄师傅是运气真好,类似张无忌,各种捡到宝,当然实力也是重要的。他刚来的时候其实对深度学习框架基本上不了解,然后我们快乐开源刚好放了第一个大任务-phi算子库(解决 CMake 依赖不需要懂深度学习框架)。然后他做啊做,问我们有没有机会来实习,当时 hc 太太太少了,但我们刚做起来,就给他申请,然后他就开挂了 ")])),_:1})]),_:1}),t[5]||(t[5]=r("h3",{id:"by-日升-yuanrisheng",tabindex:"-1"},[e("by 日升("),r("a",{href:"https://github.com/YuanRisheng",target:"_blank",rel:"noreferrer"},"YuanRisheng"),e(") "),r("a",{class:"header-anchor",href:"#by-日升-yuanrisheng","aria-label":'Permalink to "by 日升([YuanRisheng](https://github.com/YuanRisheng))"'},"")],-1)),a(s,null,{default:o(()=>[a(i,{name:"元日升",github:"YuanRisheng"},{default:o(()=>t[1]||(t[1]=[e(" 这位同学的工程素养很高,学习能力很强,经常超预期推进项目,最近独立完成高难度项目:飞桨 Flags 工具库建设,开源成果丰硕。另外也是原神大佬,工作累了还能带你打游戏,梦幻队友。 ")])),_:1})]),_:1}),t[6]||(t[6]=r("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[e("by 花花("),r("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"Tulip-hua"),e(") "),r("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),a(s,null,{default:o(()=>[a(i,{name:"花花",github:"Tulip-hua"},{default:o(()=>t[2]||(t[2]=[e(" 原神60级大佬!还欠我一次开源社区分享,请记得! ")])),_:1})]),_:1}),t[7]||(t[7]=n('黄师傅欠花花一次分享的证据(花花强烈要求贴上来的) 四、生活中的点点滴滴——黄师傅篇 ',2)),a(s,null,{default:o(()=>[a(i,{name:"黄师傅",github:"huangjiyi"},{default:o(()=>t[3]||(t[3]=[e(" 一张螺狮粉照片,一张游戏截图,这两张图片就代表我大部分的生活了,我也就是个喜欢吃点美食、打打游戏、敲敲代码的普通人。 ")])),_:1})]),_:1}),t[8]||(t[8]=n('黄师傅力荐的他认为广州最好吃的《周成芝螺蛳粉》! 谁懂十连双黄的概念?黄师傅玩几年原神了就这一次 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',6))]))}});export{j as __pageData,q as default};
diff --git a/assets/posts_huangjiyi-story.md.BoJUl8hg.lean.js b/assets/posts_huangjiyi-story.md.BoJUl8hg.lean.js
new file mode 100644
index 0000000..252ee35
--- /dev/null
+++ b/assets/posts_huangjiyi-story.md.BoJUl8hg.lean.js
@@ -0,0 +1 @@
+import{M as s,_ as i}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as n,i as a,s as o,a as r,v as e,o as g}from"./chunks/framework.D1-4jGi8.js";const p="/assets/huangjiyi-01.DXLrvOrw.jpg",d="/assets/huangjiyi-02.7pHNcGD5.jpg",u="/assets/huangjiyi-06.CyxAzjzo.jpg",h="/assets/huangjiyi-03.DYNP8_Fb.jpg",f="/assets/huangjiyi-04.ajHRyHp9.jpg",b="/assets/huangjiyi-05.DzUpMc4V.jpg",j=JSON.parse('{"title":"【开源江湖闲聊录】从入门到入职(入土):黄师傅的校招 offer 指南!","description":"","frontmatter":{"title":"【开源江湖闲聊录】从入门到入职(入土):黄师傅的校招 offer 指南!","date":"2023-12-05T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇(小记者)","github":"wenxiaohahaha"},{"name":"黄济懿(黄师傅)","github":"huangjiyi"}]},"headers":[],"relativePath":"posts/huangjiyi-story.md","filePath":"posts/huangjiyi-story.md"}'),c={name:"posts/huangjiyi-story.md"},q=Object.assign(c,{setup(P){return(y,t)=>(g(),l("div",null,[t[4]||(t[4]=n('从积极参与社区开源任务,到加入飞桨成为 (练习生) 实习生,到最终正式成为飞桨研发团队的一员。以兴趣为起点, 黄济懿师傅 将我们展示了一条通往职业的道路,希望他的故事能够激励所有对开源充满热情的开发者们。接下来,原神启动 🚀!
一、前言 黄师傅是一个地地道道的江西人,喜欢吃辣🌶️🌶️🌶️。他本科研究生都就读于广州的华南理工大学,现为电子信息专业,即将毕业前往 Paddle 工作。作为一名研究僧,他在空余时间喜欢吃吃美食或者玩玩游戏,像是原神/LOL/金铲铲之战 (各位要是也在玩,可以找黄师傅哦~黄师傅求大佬带带!!)。
偷偷告诉你们:黄师傅最近的主线任务就是毕设,请务必多找他打游戏让他延毕(不是)
去年 11 月,他出于对深度学习框架的底层实现的兴趣,联系花花加入了快乐开源群。在这一年里,他陆续完成社区里各项开源任务以熟悉 Paddle 框架,期间他也把握住了来飞桨实习的机会,他不断积累开发经验,不断加深对 Paddle 的理解,最终,他通过了飞桨团队的面试,成功拿下了飞桨校招 offer!
黄师傅曾说:"我将继续在飞桨开源活动完成一些任务,希望能够学到更多的同时也能为飞桨的建设做出小小的贡献"。事实上,黄师傅曾分别参与了 PHI 算子库独立编译 、算子定义自动生成 ,Fluid Kernel 函数式改造 等多个快乐开源活动项目以及飞桨框架护航计划,到目前为 Paddle 贡献了 100 多个 PR。抛开实习生和正式员工的身份,黄师傅自身也是飞桨社区的自发贡献者和推动者。接下来,就让我们来瞅瞅黄师傅的精彩 Paddle 之旅吧!!
原神,启动!!(请读者自行脑补 BGM)
二、采访内容 介绍一下自己吧,黄师傅!(●'◡'●)
黄师傅: 我的 AI Studio 和 GitHub 的账号是 huangjiyi ,也是我名字的全拼(黄济懿)。
可以简单和大家分享一下你生活中有什么兴趣爱好吗⊙o⊙(游戏、旅游、运动等等)?
黄师傅: 我就是个死宅,平时就是打打游戏,刷刷 B 站,出门也就是找点好吃的。
听说你本科研究生都在华南理工大学,你们学校周围有什么好吃的啊?🍔🍟🍿🥯🥪🥗🎂🍬🍹🍉
黄师傅: 因为在华工太久学校食堂已经吃腻了,我会经常出校找点吃的,但活动范围有限,学校周边我吃过比较好吃的不多,就川菜小炒、麻辣香锅、鸡公煲、螺狮粉、泰国菜这些。
我了解到你平时有在玩 LOL,那么如果把 Paddle 比作一个英雄🦸,你觉得它最像谁?为什么嘞?
黄师傅: 我的答案是维克托 ,我的想象力有限,我只是觉得维克托的技能是会进化的,而 Paddle 也是在不断进化(更新)和扩展的,另外在维克托的背景故事里,他发明了很多具有智能的机械,比如蒸汽机器人,这和我们用 Paddle 来做的事比较相关,我只能想到这么多了。
维克托 你在加入飞桨开源群之前对 Paddle 的了解是什么样的?有没有听说过一些关于 Paddle 的传闻或者故事?
黄师傅: 我在加入飞桨开源社区之前,我主要是一个用 PyTorch 跑深度学习实验的研究牲,对 Paddle 的了解也是和 PyTorch 类似的深度学习框架。关于 Paddle 的传闻的话像是国内最早开源的深度学习框架,以及国内最好的深度学习框架。
你第一个在 GitHub 上完成的 PR 是关于什么的呢?在 PR 的过程中你遇到了什么难题吗?
黄师傅: 我第一个在 GitHub 上完成的 PR 是 PHI 算子库独立编译 开源活动的一个子任务,只需要进行简单的代码替换,没有遇到什么难题,只是第一次改这么大项目的代码有点担心会不会改出什么问题。
编者注✍️:【PHI 算子库独立编译 】是飞桨开源社区的快乐开源活动之一~我们社区有很多类似的、名字听起来很高大上但实际上难度不大的开源活动
你觉得 Paddle 相比其他深度学习框架有什么优势?可以举个例子么?
黄师傅: 其他深度学习框架我主要使用过 PyTorch,从用户的视角来比较的话,Paddle 具有丰富的中文文档,包括一些 API 文档和框架开发的技术文档,同时在 AI Studio 上有很多开发者分享的基于 Paddle 实现的项目和以及开发心得可以参考,这些对于国内用户十分友好。另外 Paddle 还有很多开源的套件,用户能够使用这些套件更快地完成一些深度学习应用任务。
飞桨的开源活动中,你完成的任务中有没有什么特别有趣或者有挑战性的项目?有没有什么技术难题让你觉得很兴奋或者很有成就感?
黄师傅: 我参加过的很多关于框架开发的开源活动都比较有挑战性,期间遇到的一些困难主要是一些编译问题,然后在通过调试定位问题所在代码、弄清楚问题原因、最后解决问题的时候会比较有成就感。
据了解,你接触 Paddle 已经有一年多,那么你最欣赏 Paddle 团队中的哪些特点或价值观?为什么?
黄师傅: 我比较欣赏的一点是 Paddle 团队非常重视开源社区生态,这一点从丰富的社区活动可以看出来,社区开发者可以从中学习到很多东西同时能够获得丰厚的奖励。
我记得你说过花花和涛姐给了你很多帮助,你觉得他们是怎样的人呢(分别说说🫶🫶)?为什么?
黄师傅: 花花:飞桨最美运营,关键人家还很努力。 涛姐:为了让开发者能一直有新鲜热乎的开源任务做操碎了心。
编者注✍️:花花是飞桨社区顶尖运营,涛姐是飞桨社区顶尖研发。
你是怎么获得去 Paddle 实习的机会的呢?
黄师傅: 关于我如何获得去 Paddle 实习的机会,当时我刚开始做了一些开源任务,然后在和花花交流的时候以一种半开玩笑的语气问花花能不能去实习,结果没想到花花真的和涛姐提了,然后涛姐真的申请了,飞桨真的给我面试了,然后我面试也真的通过了,然后我就去实习了,一切都是这么突然。
编者注✍️:其实目前已经有相当多的社区开发者,通过参与开源活动接触到 Paddle,并最终获得实习机会。另外,对于不方便线下实习的同学,我们也提供了远程实习的方案,可以了解往期【护航计划 】。
在 Paddle 实习的时候,你是否参与了某个具体项目的开发?可以分享一下你在项目中的具体角色和贡献吗?
黄师傅: 我在实习期间刚开始是接着之前在社区参加的 PHI 算子库独立编译 开源项目,完成剩下的一些比较困难的任务,花了一个多月的时间完成,剩下的大部分时间参与了结构体 Kernel 注册统一 这个项目,期间也会接到一些其他小任务,一共实习了 3 个月吧,基本状态是要我干啥干啥,不会的就问。
你认为实习那段时间你最大的收获是什么?你认为这段实习经历对你以后的职业生涯规划有起到什么影响?
黄师傅: 收获很多,体验到了与在学校实验室不同的工作氛围,认识了一些研发大佬,深入了解了 Paddle 的一些机制,积累了一些编译调试和解决问题的经验。在 Paddle 的开源经历和实习经历让我找工作的目标从算法工程师转向了开发工程师,相比于具有不确定性同时很多时候凭借直觉的深度学习算法研究或者应用工作,我发现我更喜欢逻辑性更强且大多数问题都能找到原因的开发工作。
最后也恭喜你拿到 Paddle 的 offer 🎉,对于同样有志加入 Paddle 团队的学生党,你可以分享一些建议议、经验或者成功路径吗?
黄师傅: 我感觉我能拿到飞桨 offer 很大一部分原因是我在飞桨的实习经历和参加了一些开源活动,所以我的建议是在学习技术的同时多参加飞桨的开源活动,或者有机会去飞桨实习。
黄师傅的校招 offer 部分截图 三、“著名平台——虎扑评论”专区 这次,我们邀请了一些和黄师傅有过合作经历的朋友们(以及实习期间的导师🐶),贡献一下和黄师傅相关的故事,或者他们对黄师傅的评价~以下均为真心话,请放心看!
编者注✍️:黄师傅有些社恐,所以认识的社区朋友不多,大家正好可以借此机会认识一下。
',17)),a(s,null,{default:o(()=>[a(i,{name:"骆涛",github:"luotao1"},{default:o(()=>t[0]||(t[0]=[e(" 我觉得黄师傅是运气真好,类似张无忌,各种捡到宝,当然实力也是重要的。他刚来的时候其实对深度学习框架基本上不了解,然后我们快乐开源刚好放了第一个大任务-phi算子库(解决 CMake 依赖不需要懂深度学习框架)。然后他做啊做,问我们有没有机会来实习,当时 hc 太太太少了,但我们刚做起来,就给他申请,然后他就开挂了 ")])),_:1})]),_:1}),t[5]||(t[5]=r("h3",{id:"by-日升-yuanrisheng",tabindex:"-1"},[e("by 日升("),r("a",{href:"https://github.com/YuanRisheng",target:"_blank",rel:"noreferrer"},"YuanRisheng"),e(") "),r("a",{class:"header-anchor",href:"#by-日升-yuanrisheng","aria-label":'Permalink to "by 日升([YuanRisheng](https://github.com/YuanRisheng))"'},"")],-1)),a(s,null,{default:o(()=>[a(i,{name:"元日升",github:"YuanRisheng"},{default:o(()=>t[1]||(t[1]=[e(" 这位同学的工程素养很高,学习能力很强,经常超预期推进项目,最近独立完成高难度项目:飞桨 Flags 工具库建设,开源成果丰硕。另外也是原神大佬,工作累了还能带你打游戏,梦幻队友。 ")])),_:1})]),_:1}),t[6]||(t[6]=r("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[e("by 花花("),r("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"Tulip-hua"),e(") "),r("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),a(s,null,{default:o(()=>[a(i,{name:"花花",github:"Tulip-hua"},{default:o(()=>t[2]||(t[2]=[e(" 原神60级大佬!还欠我一次开源社区分享,请记得! ")])),_:1})]),_:1}),t[7]||(t[7]=n('黄师傅欠花花一次分享的证据(花花强烈要求贴上来的) 四、生活中的点点滴滴——黄师傅篇 ',2)),a(s,null,{default:o(()=>[a(i,{name:"黄师傅",github:"huangjiyi"},{default:o(()=>t[3]||(t[3]=[e(" 一张螺狮粉照片,一张游戏截图,这两张图片就代表我大部分的生活了,我也就是个喜欢吃点美食、打打游戏、敲敲代码的普通人。 ")])),_:1})]),_:1}),t[8]||(t[8]=n('黄师傅力荐的他认为广州最好吃的《周成芝螺蛳粉》! 谁懂十连双黄的概念?黄师傅玩几年原神了就这一次 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',6))]))}});export{j as __pageData,q as default};
diff --git a/assets/posts_ijcai-2024-competition.md.DcElAR1q.js b/assets/posts_ijcai-2024-competition.md.DcElAR1q.js
new file mode 100644
index 0000000..2668d98
--- /dev/null
+++ b/assets/posts_ijcai-2024-competition.md.DcElAR1q.js
@@ -0,0 +1 @@
+import{_ as a,c as e,k as i,o as s}from"./chunks/framework.D1-4jGi8.js";const p="/assets/fig1.qDdJxKcK.png",o="/assets/fig2.DbV4dxPM.png",r="/assets/fig3.B1bCW4CF.png",n="/assets/fig4.CGd2bCqp.png",c="/assets/fig5.Czz1hU-y.jpg",d="/assets/fig6.vLb-zsg_.jpg",l="/assets/fig7.C0MqVwwR.jpg",g="/assets/fig8.CnzArdHo.jpg",m="/assets/fig9.DzH-O_3U.png",h="/assets/fig10.6VkeC_yS.jpg",_="/assets/fig12.zrs2ERMX.png",f="/assets/fig11.SS-67rvw.png",u="/assets/fig14.BsssLWRt.jpg",I="/assets/fig15.Go6XhCUQ.png",b="/assets/fig13.D4VQjhDv.png",j=JSON.parse('{"title":"IJCAI 2024 任意三维几何外形车辆的风阻快速预测竞赛比赛圆满完成~","description":"","frontmatter":{"title":"IJCAI 2024 任意三维几何外形车辆的风阻快速预测竞赛比赛圆满完成~","date":"2024-08-19T00:00:00.000Z","author":{"name":"王冠","github":"wangguan1995"}},"headers":[],"relativePath":"posts/ijcai-2024-competition.md","filePath":"posts/ijcai-2024-competition.md"}'),A={name:"posts/ijcai-2024-competition.md"};function P(C,t,q,k,F,y){return s(),e("div",null,t[0]||(t[0]=[i('🎉🎉2024 年 8 月 8 日,“ IJCAI 2024: 任意三维几何外形车辆的风阻快速预测竞赛 ”在韩国济州国际会议中心(Jeju ICC)火热举行,并且取得了超级圆满的成功!💰💰价值 $35,000 的大奖到底花落谁家了呢?参赛选手们的技术方案是不是赛博朋克风爆棚?快来围观,别错过啦~
👀另外,就在前一天,2024 年 8 月 7 日,飞桨开源社区也在 IJCAI Industry Day 论坛上进行了超赞的路演。在美丽又浪漫的韩国济州岛上(虽然天气有点热哈哈🔥),百度飞桨和海内外的科研人员、企业工程师以及 AI 开发者们成功“汇合”,和众多 AI 领域的大咖们进行了深度的交流,氛围超级愉快😊!
大赛背景 📚说到这个大赛的背景,开放原子开源基金会可是个致力于推动全球开源事业发展的非营利机构哦!他们的目标就是搭建一个前沿技术竞争、优秀人才选拔、创新成果展示、商业转化引导和对接交流合作的平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态的繁荣和可持续发展提供动力。
🤝而百度飞桨开源社区与开放原子开源基金会的目标和愿景可是高度重合的哦!所以他们自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了“飞桨 PaddlePaddle 开源贡献挑战赛”后,这次飞桨团队再度受邀,和开放原子共同举办了这次超酷的竞赛!
🏁这个算法模型挑战赛可是有三个赛道哦!分别是基于 ShapeNetCar 的简化汽车数据、基于 DrivAer 复杂几何的工业级别汽车数据,以及多类型汽车融合数据。选手们需要使用 AI 进行快速分钟级的预测,看看汽车在不同工况下的风阻会是多少。要知道,风阻对汽车设计可是非常重要的哦!它可是会直接影响汽车的燃油和电池续航呢~(详情请参考:雷军“上课”讲风阻,小米汽车风阻全球量产车“最低”)🚗💨
🧠💻 选手们这次可是要放大招了!他们得把流体力学(哎呀,听起来就头疼🤯)和 AI 深度学习这两大领域的知识融合在一起,进行深度的模型设计和探索。这可不是闹着玩的,得在 ABC 三个赛道的测试数据集上,精准预测风阻,还得尽量减小风阻预测的 L2 误差。这可是个技术活🚀💨。
赛程回顾 大赛 4 月 23 日一上线,报名就火热启动了!经过两个半月的激烈打榜,选手们拼尽全力,终于在 7 月 21 日迎来了封榜时刻。之后,经过严格的代码审查和线上初审,我们最终在 8 月 8 日韩国济州国际会议中心迎来了超燃的决赛路演! 比赛过程中,选手们在官方交流群里可是热闹非凡,他们积极讨论、互帮互助,甚至还主动给官方提建议,帮我们改进比赛平台,真是太给力了😄!虽然中间有些小插曲,但只要我们一沟通,选手们的需求就能迅速得到解决,真是效率满满!
最终,大赛迎来了 323 支团队的热情报名!虽然赛题难度不小,但还是有 15 支超厉害的队伍成功提交了作品,其中 9 支队伍更是脱颖而出,入围了决赛答辩,真是让人热血沸腾啊! 选手们纷纷表示,流体仿真真是个“磨人”的活儿,太消耗资源和人力了(尤其是仿真工程师的头发和脑细胞,哈哈)!不过,大家也都觉得,能快速预测风阻的价值和意义非凡,绝对是值得努力的!
通过大家的开源以及互相学习,相信 AI 空气动力学通用模型能够早日实现。——— 赛道 A 第 10 名 hnu
Industry Day & 大赛-AI 流体平行论坛 路演现场 Industry Day
军哥(@jzhang533)他用全英文的 PPT 给大家带来了一场超级精彩的介绍,带着 IJCAI 会议的观众们一起领略了百度飞桨在 NLP、自动驾驶等工业领域的落地应用和解决方案。那发音,标准又流畅,和海外的专家学者们问答沟通起来也是毫无压力,受到大家的一致好评,太起范了! 😄🎉🎉🎉
AI 流体平行论坛
这次我们可是请到了几位大咖哦!北京航空航天大学软件学院的副教授周号益、惠尔科技的 CEO 常宇飞、NVIDIA 的解决方案架构师况吕林,还有四川大学工程数值模拟基础算法与模型全国重点实验室的副研究员张明洁,他们都来到了现场做报告!介绍了 AI 在自动驾驶,汽车设计,气象预报,流体仿真等领域的应用,大家听得全神贯注,认认真真,一点都不敢错过呢!👏👏👏
此外在会场,也分别为大家呈现了第二届开放原子开源大赛赛项共建方招募的宣讲,和百度飞桨 PaddleScience 的相关的科学计算产品建设和探索: 再给大家隆重介绍一下 PaddleScience!这可是个发论文、打比赛的利器啊!它不仅面向 AI 领域的开发者们,还特别适合流体力学、材料科学、气象科学等领域的科研人员们使用。简直就是科研神器,有没有!大家赶紧来试试看吧!🎉🎉🎉
欢迎大家体验 PaddleScience,并参与我们的共建计划 https://github.com/PaddlePaddle/PaddleScience (合作邮箱 paddle_science@baidu.com )
选手们也是个个都不含糊,纷纷展示了自己的解决方案,那场面可真是热闹非凡!获奖选手的代码仓库也已经在 PaddleScience GitHub 上公开啦,大家快去围观吧!链接在这里 ➡️ 获奖选手代码仓库
会后采访现场
比赛颁奖现场 比赛颁奖现场,一览选手风采~
恭喜所有的获奖队伍!🎉🎉🎉开源创新之路上飞桨与你们同行!🚀🚀🚀
平行论坛合影留念 平行论坛,热闹非凡,合影一张,留住精彩瞬间!📸🎉
百度+开放原子展台小分队 除了精彩的会议,百度还在 IJCAI 会场设置了一个超酷的展台!在这里,我们给海内外的科研人员和企业工程师们详细介绍了开放原子开源基金会、百度 Apollo 汽车、百度文心一言,百度飞桨框架和飞桨科学计算这些超棒的项目!
真的要感谢百度、开放原子、IJCAI 的运营和宣发工作人员们,你们齐心协力,让这次活动如此成功!
话不多说,直接点赞!👍👍👍
最后最后,告诉大家一个好消息!新的比赛已经火热上线啦!这次可是 CIKM 2024 的大赛哦!主题是“AI 辅助的先进空气动力学-优化汽车设计以实现最佳性能”,听起来就超级高大上有没有!大家快来报名吧,一起用 AI 的力量来优化汽车设计,挑战最佳性能!期待你们的精彩表现哦!🎉🎉🎉
报名链接:https://competition.atomgit.com/competitionInfo?id=cda4e961b0c25858ca0fd2a4bdf87520
AIStudio 快速开始:CIKM 2024: AI Aided Advanced Aerodynamic - 飞桨 AI Studio 星河社区
',33)]))}const D=a(A,[["render",P]]);export{j as __pageData,D as default};
diff --git a/assets/posts_ijcai-2024-competition.md.DcElAR1q.lean.js b/assets/posts_ijcai-2024-competition.md.DcElAR1q.lean.js
new file mode 100644
index 0000000..2668d98
--- /dev/null
+++ b/assets/posts_ijcai-2024-competition.md.DcElAR1q.lean.js
@@ -0,0 +1 @@
+import{_ as a,c as e,k as i,o as s}from"./chunks/framework.D1-4jGi8.js";const p="/assets/fig1.qDdJxKcK.png",o="/assets/fig2.DbV4dxPM.png",r="/assets/fig3.B1bCW4CF.png",n="/assets/fig4.CGd2bCqp.png",c="/assets/fig5.Czz1hU-y.jpg",d="/assets/fig6.vLb-zsg_.jpg",l="/assets/fig7.C0MqVwwR.jpg",g="/assets/fig8.CnzArdHo.jpg",m="/assets/fig9.DzH-O_3U.png",h="/assets/fig10.6VkeC_yS.jpg",_="/assets/fig12.zrs2ERMX.png",f="/assets/fig11.SS-67rvw.png",u="/assets/fig14.BsssLWRt.jpg",I="/assets/fig15.Go6XhCUQ.png",b="/assets/fig13.D4VQjhDv.png",j=JSON.parse('{"title":"IJCAI 2024 任意三维几何外形车辆的风阻快速预测竞赛比赛圆满完成~","description":"","frontmatter":{"title":"IJCAI 2024 任意三维几何外形车辆的风阻快速预测竞赛比赛圆满完成~","date":"2024-08-19T00:00:00.000Z","author":{"name":"王冠","github":"wangguan1995"}},"headers":[],"relativePath":"posts/ijcai-2024-competition.md","filePath":"posts/ijcai-2024-competition.md"}'),A={name:"posts/ijcai-2024-competition.md"};function P(C,t,q,k,F,y){return s(),e("div",null,t[0]||(t[0]=[i('🎉🎉2024 年 8 月 8 日,“ IJCAI 2024: 任意三维几何外形车辆的风阻快速预测竞赛 ”在韩国济州国际会议中心(Jeju ICC)火热举行,并且取得了超级圆满的成功!💰💰价值 $35,000 的大奖到底花落谁家了呢?参赛选手们的技术方案是不是赛博朋克风爆棚?快来围观,别错过啦~
👀另外,就在前一天,2024 年 8 月 7 日,飞桨开源社区也在 IJCAI Industry Day 论坛上进行了超赞的路演。在美丽又浪漫的韩国济州岛上(虽然天气有点热哈哈🔥),百度飞桨和海内外的科研人员、企业工程师以及 AI 开发者们成功“汇合”,和众多 AI 领域的大咖们进行了深度的交流,氛围超级愉快😊!
大赛背景 📚说到这个大赛的背景,开放原子开源基金会可是个致力于推动全球开源事业发展的非营利机构哦!他们的目标就是搭建一个前沿技术竞争、优秀人才选拔、创新成果展示、商业转化引导和对接交流合作的平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态的繁荣和可持续发展提供动力。
🤝而百度飞桨开源社区与开放原子开源基金会的目标和愿景可是高度重合的哦!所以他们自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了“飞桨 PaddlePaddle 开源贡献挑战赛”后,这次飞桨团队再度受邀,和开放原子共同举办了这次超酷的竞赛!
🏁这个算法模型挑战赛可是有三个赛道哦!分别是基于 ShapeNetCar 的简化汽车数据、基于 DrivAer 复杂几何的工业级别汽车数据,以及多类型汽车融合数据。选手们需要使用 AI 进行快速分钟级的预测,看看汽车在不同工况下的风阻会是多少。要知道,风阻对汽车设计可是非常重要的哦!它可是会直接影响汽车的燃油和电池续航呢~(详情请参考:雷军“上课”讲风阻,小米汽车风阻全球量产车“最低”)🚗💨
🧠💻 选手们这次可是要放大招了!他们得把流体力学(哎呀,听起来就头疼🤯)和 AI 深度学习这两大领域的知识融合在一起,进行深度的模型设计和探索。这可不是闹着玩的,得在 ABC 三个赛道的测试数据集上,精准预测风阻,还得尽量减小风阻预测的 L2 误差。这可是个技术活🚀💨。
赛程回顾 大赛 4 月 23 日一上线,报名就火热启动了!经过两个半月的激烈打榜,选手们拼尽全力,终于在 7 月 21 日迎来了封榜时刻。之后,经过严格的代码审查和线上初审,我们最终在 8 月 8 日韩国济州国际会议中心迎来了超燃的决赛路演! 比赛过程中,选手们在官方交流群里可是热闹非凡,他们积极讨论、互帮互助,甚至还主动给官方提建议,帮我们改进比赛平台,真是太给力了😄!虽然中间有些小插曲,但只要我们一沟通,选手们的需求就能迅速得到解决,真是效率满满!
最终,大赛迎来了 323 支团队的热情报名!虽然赛题难度不小,但还是有 15 支超厉害的队伍成功提交了作品,其中 9 支队伍更是脱颖而出,入围了决赛答辩,真是让人热血沸腾啊! 选手们纷纷表示,流体仿真真是个“磨人”的活儿,太消耗资源和人力了(尤其是仿真工程师的头发和脑细胞,哈哈)!不过,大家也都觉得,能快速预测风阻的价值和意义非凡,绝对是值得努力的!
通过大家的开源以及互相学习,相信 AI 空气动力学通用模型能够早日实现。——— 赛道 A 第 10 名 hnu
Industry Day & 大赛-AI 流体平行论坛 路演现场 Industry Day
军哥(@jzhang533)他用全英文的 PPT 给大家带来了一场超级精彩的介绍,带着 IJCAI 会议的观众们一起领略了百度飞桨在 NLP、自动驾驶等工业领域的落地应用和解决方案。那发音,标准又流畅,和海外的专家学者们问答沟通起来也是毫无压力,受到大家的一致好评,太起范了! 😄🎉🎉🎉
AI 流体平行论坛
这次我们可是请到了几位大咖哦!北京航空航天大学软件学院的副教授周号益、惠尔科技的 CEO 常宇飞、NVIDIA 的解决方案架构师况吕林,还有四川大学工程数值模拟基础算法与模型全国重点实验室的副研究员张明洁,他们都来到了现场做报告!介绍了 AI 在自动驾驶,汽车设计,气象预报,流体仿真等领域的应用,大家听得全神贯注,认认真真,一点都不敢错过呢!👏👏👏
此外在会场,也分别为大家呈现了第二届开放原子开源大赛赛项共建方招募的宣讲,和百度飞桨 PaddleScience 的相关的科学计算产品建设和探索: 再给大家隆重介绍一下 PaddleScience!这可是个发论文、打比赛的利器啊!它不仅面向 AI 领域的开发者们,还特别适合流体力学、材料科学、气象科学等领域的科研人员们使用。简直就是科研神器,有没有!大家赶紧来试试看吧!🎉🎉🎉
欢迎大家体验 PaddleScience,并参与我们的共建计划 https://github.com/PaddlePaddle/PaddleScience (合作邮箱 paddle_science@baidu.com )
选手们也是个个都不含糊,纷纷展示了自己的解决方案,那场面可真是热闹非凡!获奖选手的代码仓库也已经在 PaddleScience GitHub 上公开啦,大家快去围观吧!链接在这里 ➡️ 获奖选手代码仓库
会后采访现场
比赛颁奖现场 比赛颁奖现场,一览选手风采~
恭喜所有的获奖队伍!🎉🎉🎉开源创新之路上飞桨与你们同行!🚀🚀🚀
平行论坛合影留念 平行论坛,热闹非凡,合影一张,留住精彩瞬间!📸🎉
百度+开放原子展台小分队 除了精彩的会议,百度还在 IJCAI 会场设置了一个超酷的展台!在这里,我们给海内外的科研人员和企业工程师们详细介绍了开放原子开源基金会、百度 Apollo 汽车、百度文心一言,百度飞桨框架和飞桨科学计算这些超棒的项目!
真的要感谢百度、开放原子、IJCAI 的运营和宣发工作人员们,你们齐心协力,让这次活动如此成功!
话不多说,直接点赞!👍👍👍
最后最后,告诉大家一个好消息!新的比赛已经火热上线啦!这次可是 CIKM 2024 的大赛哦!主题是“AI 辅助的先进空气动力学-优化汽车设计以实现最佳性能”,听起来就超级高大上有没有!大家快来报名吧,一起用 AI 的力量来优化汽车设计,挑战最佳性能!期待你们的精彩表现哦!🎉🎉🎉
报名链接:https://competition.atomgit.com/competitionInfo?id=cda4e961b0c25858ca0fd2a4bdf87520
AIStudio 快速开始:CIKM 2024: AI Aided Advanced Aerodynamic - 飞桨 AI Studio 星河社区
',33)]))}const D=a(A,[["render",P]]);export{j as __pageData,D as default};
diff --git a/assets/posts_ligoml-story.md.CQ9oS4y7.js b/assets/posts_ligoml-story.md.CQ9oS4y7.js
new file mode 100644
index 0000000..52577ee
--- /dev/null
+++ b/assets/posts_ligoml-story.md.CQ9oS4y7.js
@@ -0,0 +1 @@
+import{M as o,_ as i}from"./chunks/MessageBox.CshcSYCA.js";import{c as a,k as n,i as l,s as e,o as r,v as s}from"./chunks/framework.D1-4jGi8.js";const g="/assets/lml-1.CWPYl9JB.png",p="/assets/lml-2.CvC-MnGb.jpeg",u="/assets/lml-3.DQSwNNn2.jpeg",f="/assets/lml-4.ZAf6BJS_.jpeg",d="/assets/lml-5.B2erDcF1.jpeg",m="/assets/lml-6.C2YEX7el.jpeg",q=JSON.parse('{"title":"【开源江湖闲聊录】再见,追寻月亮的梦师傅","description":"","frontmatter":{"title":"【开源江湖闲聊录】再见,追寻月亮的梦师傅","date":"2024-8-09","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"梦师傅","github":"Ligoml"}]},"headers":[],"relativePath":"posts/ligoml-story.md","filePath":"posts/ligoml-story.md"}'),b={name:"posts/ligoml-story.md"},w=Object.assign(b,{setup(h){return(y,t)=>(r(),a("div",null,[t[20]||(t[20]=n('All over the place was six pence, but he looked up at the moon.
一、前言 省流总结:梦师傅跑路了,写篇 blog 庆祝一下 🎉
这是半个月前完成的采访,但应梦师傅的要求,文章在她的 last day(8 月 9 日)才发布。相信社区里的各位对梦师傅已经非常熟悉了。在飞桨开源社区的建设过程中,Ligoml 这个 GitHub ID 几乎无处不在,而她那一头粉色头发和猫猫更是给大家留下了深刻的印象。作为同事,她十分靠谱;作为朋友,她非常有趣。我还清晰地记得,刚来飞桨实习时接的梦师傅的活儿,当时她正好在毕业旅行,交接时跟我说她在雪山上信号不好...Anyway,希望梦师傅裸辞后身体健康,万事顺遂~
二、采访内容 介绍一下自己吧!
梦师傅: 我叫李梦柳,前百度 AI 产品经理,GitHub ID:Ligoml,因为平时爱水群和答疑,大家都叫我梦师傅。
微信截图 都说 21 世纪是生物的世纪,为什么研究生跨专业学 CV 了?
梦师傅: 我本科专业是生物医学工程,当初选专业主要是两个原因,一个是生物学的最好,另一个是喜欢小动物(后来发现我只是单纯的喜欢猫)。
进到大学以后参加了一些实验室项目,印象很深的一个项目叫:还原型谷胱甘肽控制金纳米棒制备研究,那时候感觉这个课题名称明明都是汉字,却那么难以理解。简单来说就是根据特定配方,把各种液体混合在一起,然后等 8 个小时后金纳米棒长出来,并试图解释电镜下的折线含义。其实很符合对生科人的刻板印象,穿着白大褂,操作移液枪,混合各种彩色液体(实际上是无色的),养细胞做实验。每一次的漫长等待,对结果的未知性,都在坚定我跑路的心。所幸我的成绩还不错,拿到了保研资格后,就找到了我的研究生导师,转投到了 CV 这个赛道,然后发现炼一次丹的时间,可能不止 8 小时……当然这就是后话了。
听说大学期间你还当过某公司 CEO,细说
梦师傅: 对,那个时候在鼓励“大众创业,万众创新”,开公司的成本非常低,刚好我所在的社团有一些拍片子做网站的特长,有一个公司实体会方便一些,于是就和当时的几个社团负责人联合创立了一家公司,叫西咸新区挑战信息科技有限公司(因为社团名叫挑战网),我是法人代表。当时想的就是,只要我们不玩金融游戏,踏踏实实赚点生活费还是够活的。毕业以后把社团和公司一起留给学弟学妹了,现在应该还活着。当年一起开公司的伙伴们,直到现在也是我非常好的朋友,会约一起出去旅行什么的。
毕业典礼 可可托海 为什么毕业加入了百度?以及为什么开始搞开源社区了?
梦师傅: 当时研究生毕业的时候手里有几个 offer,因为代码写的菜,不太想为难自己,所以选了做产品经理,这样可以指挥别人给我写代码,嘻嘻。
作为校招生刚来,肯定是以培养为主的,经理就安排我去做开源社区的 issue 管理员,每天解答各种 issue,以及找人帮我解答 issue。那个时候飞桨刚发布 2.0 版本,易用性得到了极大的提升,具备了建设开源社区的技术基础,我的性格比较活泼,还懂点 AI 技术,就很顺理成章的被分配去搞开源社区了。我们飞桨的社区开发者个个都是人才,代码写得漂亮,说话又好听,每天上班跟大家水水群,还是蛮快乐的。
建设开源社区的过程中,有没有遇到印象特别深的事或人?为什么?
梦师傅: 那可太多了,为此我还专门写了一篇博客 👉 https://pfcc.blog/posts/2023-os-report ,我就只提几个关键词,大家自己对号入座:春节 18 响 🧨,雪糕狂热粉丝 🐱,最强水群人📱,开源强迫症 001 👓,还有一些人菜瘾大的小甜水爱好者,请坐小孩那桌(误
编者注 ✍️:春节十八响这些梗永流传了属于是
搞开源社区的时候快乐吗(狗头)?对于开源社区的价值和意义是怎样理解的?
梦师傅: 是真的快乐,当时我还在厂内做了一场《我在飞桨 快乐开源》的演讲,很多同事都有印象。在开源社区,人的主体性得到了充分的尊重,我们相聚在一起,只是因为纯粹的热爱,只做自己感兴趣的东西,没有利益和投入产出的权衡,怎么会不快乐呢?
我认为开源会给一个项目带来无穷的生命力,即使许久无人维护,后面的开发者仍旧可以基于这个开源项目去生长出其他有价值有意义的项目,大家共同为开源项目添砖加瓦,持续不断的推进技术向前发展。而且由于你需要把代码开源出来给大家看,那么就会有一些个人包袱在,会关注代码规范性、文档完整性,这样会使得整个生态良性发展,越来越好。
编者注 ✍️:拿着工资上班水群确实挺快乐的
厂长近期关于开源有一些表态(开源大模型会越来越落后),你怎么看?
梦师傅: 猜猜我为什么离职 我觉得厂长应该是有自己的考虑,而选择了文心大模型走闭源的道路,这本身无可厚非,OpenAI 也没有开源 ChatGPT,但是踩一捧一就没有必要了吧,这样的发言也把开源的飞桨放到了一个尴尬的位置上,就很难评。
在百度飞桨工作的三年里,最快乐的一件事&一些事?
梦师傅: 我还是蛮会在工作中找乐子的,遇到了好多合得来的同事朋友 👭,工作之余约个咖啡约个酒 🍹 什么的,都让我十分放松。最快乐的时光可能是去年的 7 月,先是去了日本团建 👗,然后五月天演唱会 🎤、梅西球赛 ⚽️,在上海办了开发者嘉年华 👻,面基了好多只认识 GitHub 🆔 的网友,我的头发也是那段时间变了很多颜色 🌈,差不多一周就会换一个,那时候的生活是非常多彩且自由的。
注:换颜色的原因是我的护发素有颜色,不是每次都需要去理发店重新染的,而且因为是护发素所以不伤头发 hhh
最想吐槽百度&飞桨&领导的是什么?至少说出一个百度最大的病症(狗头)
梦师傅: 经常有人评价百度:起个大早,赶个晚集。我对此有深刻的体会。百度其实不缺有想法有能力的人,整体的氛围也是鼓励探索的,所以我们经常能看到很多在厂内已经聊过做过的项目,成为了别家打造的爆款产品,互联网行业的黄埔军校名副其实。
在我看来,上层定位不清晰,中层摇摆不定,会让我们这些一线打工人非常心累。以我后来做的 AI Studio 为例,不到一年时间平台定位更换了三四次,从学习与实训社区到大模型社区,再到个人开发工作台,现在回归了大模型学习平台,每一次的变更都会带来整体功能和交互逻辑的大调整,出走半生,归来仍在原地,甚至可能更差。这期间 ModelScope、HuggingFace、Coze 等平台均以自己准确的定位和优质的产品体验成为了各自领域的头部,我们输在哪了呢?
跑路的原因?裸辞之后有什么打算吗?
梦师傅: 卷不动了,想歇一段时间,刚好手里的工作告一段落,觉得现在离开会是一个比较负责任的时机,所以就提了离职。
我其实很感谢百度能给我一个宽松的工作环境和成长空间,以及足够裸辞的存款作为底气。之后的打算嘛,应该还是会找个班上,想折腾点 AI 工具,搞点有意思的项目或者视频,我没做过的事情,都可以一试。
不考虑薪资,最想做的工作是什么?
梦师傅: 做开源应用仙人(别笑)。
之前选择做产品经理,主要还是代码写的菜,那假如我基于别人的开源项目,让 AI 给我写呢?我就动动嘴皮子,搞点没啥用但是有趣的应用给大家玩,代码开源出来,感觉也挺有意思的,我甚至可以录个视频给大家当乐子。
三、来自社区的拷问 ',7)),l(o,null,{default:e(()=>[l(i,{name:"ALL",github:"PaddlePaddle"},{default:e(()=>t[0]||(t[0]=[s(" 梦师傅跑路了? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[1]||(t[1]=[s(" 跑路了💨 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"汪师傅:",github:"GreatV"},{default:e(()=>t[2]||(t[2]=[s(" 梦师傅头发换了几种颜色? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[3]||(t[3]=[s(" 我数数啊,粉色、金色、蓝色、绿色、紫色、灰色、奶茶色、水蓝色、粉紫色、玫红色...... ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"散步",github:"sanbuphy"},{default:e(()=>t[4]||(t[4]=[s(" 梦师傅会打算开小红书、b 站或者公众号吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[5]||(t[5]=[s(" 全网都叫 Ligoml,不过是我的个人账号,我比较懒,还没有运营规划哈哈哈~ ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"散步",github:"sanbuphy"},{default:e(()=>t[6]||(t[6]=[s(" 推荐几款酒和配酒的菜 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[7]||(t[7]=[s(" 你去坐小孩那桌 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"whisky-12",github:"whisky-12"},{default:e(()=>t[8]||(t[8]=[s(" 以后还有机会见到梦师傅的猫吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[9]||(t[9]=[s(" 有的呀,想看可以群里@我,有趣的照片和视频我也会分享到朋友圈,看完记得点赞 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"张师傅",github:"Liyulingyue"},{default:e(()=>t[10]||(t[10]=[s(" 想问问梦师傅裸辞之后有机会来亦庄这边发展吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[11]||(t[11]=[s(" 去开无人车嘛? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"敏师傅",github:"enkilee"},{default:e(()=>t[12]||(t[12]=[s(" 转行当美食博主吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[13]||(t[13]=[s(" 那恐怕有点困难,我只会煮方便面🍜 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"昱晨",github:"yuchen202"},{default:e(()=>t[14]||(t[14]=[s(" 问问梦师傅以后还打算从事AI相关工作吗 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[15]||(t[15]=[s(" 应该还是在AI这个圈子里吧,毕竟我也只会这个 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"花花",github:"Tulip-hua"},{default:e(()=>t[16]||(t[16]=[s(" 那你H2会给飞桨框架贡献代码吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[17]||(t[17]=[s(" 我可以让文心一言替我写吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"军哥",github:"jzhang533"},{default:e(()=>t[18]||(t[18]=[s(" 觉得社区里的哪个小哥比较帅?(如实回答) ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[19]||(t[19]=[s(" 我的审美还挺单一的,就喜欢高高瘦瘦长相清爽的男孩子,我们社区可多了,点名都点不过来(端水 ")])),_:1})]),_:1}),t[21]||(t[21]=n('四. 大龄失业粉毛女青年旅行 Vlog 戳戳 Vlog ➡️ 【离职日记|裸辞后我都去玩了点什么】
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
',6))]))}});export{q as __pageData,w as default};
diff --git a/assets/posts_ligoml-story.md.CQ9oS4y7.lean.js b/assets/posts_ligoml-story.md.CQ9oS4y7.lean.js
new file mode 100644
index 0000000..52577ee
--- /dev/null
+++ b/assets/posts_ligoml-story.md.CQ9oS4y7.lean.js
@@ -0,0 +1 @@
+import{M as o,_ as i}from"./chunks/MessageBox.CshcSYCA.js";import{c as a,k as n,i as l,s as e,o as r,v as s}from"./chunks/framework.D1-4jGi8.js";const g="/assets/lml-1.CWPYl9JB.png",p="/assets/lml-2.CvC-MnGb.jpeg",u="/assets/lml-3.DQSwNNn2.jpeg",f="/assets/lml-4.ZAf6BJS_.jpeg",d="/assets/lml-5.B2erDcF1.jpeg",m="/assets/lml-6.C2YEX7el.jpeg",q=JSON.parse('{"title":"【开源江湖闲聊录】再见,追寻月亮的梦师傅","description":"","frontmatter":{"title":"【开源江湖闲聊录】再见,追寻月亮的梦师傅","date":"2024-8-09","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"梦师傅","github":"Ligoml"}]},"headers":[],"relativePath":"posts/ligoml-story.md","filePath":"posts/ligoml-story.md"}'),b={name:"posts/ligoml-story.md"},w=Object.assign(b,{setup(h){return(y,t)=>(r(),a("div",null,[t[20]||(t[20]=n('All over the place was six pence, but he looked up at the moon.
一、前言 省流总结:梦师傅跑路了,写篇 blog 庆祝一下 🎉
这是半个月前完成的采访,但应梦师傅的要求,文章在她的 last day(8 月 9 日)才发布。相信社区里的各位对梦师傅已经非常熟悉了。在飞桨开源社区的建设过程中,Ligoml 这个 GitHub ID 几乎无处不在,而她那一头粉色头发和猫猫更是给大家留下了深刻的印象。作为同事,她十分靠谱;作为朋友,她非常有趣。我还清晰地记得,刚来飞桨实习时接的梦师傅的活儿,当时她正好在毕业旅行,交接时跟我说她在雪山上信号不好...Anyway,希望梦师傅裸辞后身体健康,万事顺遂~
二、采访内容 介绍一下自己吧!
梦师傅: 我叫李梦柳,前百度 AI 产品经理,GitHub ID:Ligoml,因为平时爱水群和答疑,大家都叫我梦师傅。
微信截图 都说 21 世纪是生物的世纪,为什么研究生跨专业学 CV 了?
梦师傅: 我本科专业是生物医学工程,当初选专业主要是两个原因,一个是生物学的最好,另一个是喜欢小动物(后来发现我只是单纯的喜欢猫)。
进到大学以后参加了一些实验室项目,印象很深的一个项目叫:还原型谷胱甘肽控制金纳米棒制备研究,那时候感觉这个课题名称明明都是汉字,却那么难以理解。简单来说就是根据特定配方,把各种液体混合在一起,然后等 8 个小时后金纳米棒长出来,并试图解释电镜下的折线含义。其实很符合对生科人的刻板印象,穿着白大褂,操作移液枪,混合各种彩色液体(实际上是无色的),养细胞做实验。每一次的漫长等待,对结果的未知性,都在坚定我跑路的心。所幸我的成绩还不错,拿到了保研资格后,就找到了我的研究生导师,转投到了 CV 这个赛道,然后发现炼一次丹的时间,可能不止 8 小时……当然这就是后话了。
听说大学期间你还当过某公司 CEO,细说
梦师傅: 对,那个时候在鼓励“大众创业,万众创新”,开公司的成本非常低,刚好我所在的社团有一些拍片子做网站的特长,有一个公司实体会方便一些,于是就和当时的几个社团负责人联合创立了一家公司,叫西咸新区挑战信息科技有限公司(因为社团名叫挑战网),我是法人代表。当时想的就是,只要我们不玩金融游戏,踏踏实实赚点生活费还是够活的。毕业以后把社团和公司一起留给学弟学妹了,现在应该还活着。当年一起开公司的伙伴们,直到现在也是我非常好的朋友,会约一起出去旅行什么的。
毕业典礼 可可托海 为什么毕业加入了百度?以及为什么开始搞开源社区了?
梦师傅: 当时研究生毕业的时候手里有几个 offer,因为代码写的菜,不太想为难自己,所以选了做产品经理,这样可以指挥别人给我写代码,嘻嘻。
作为校招生刚来,肯定是以培养为主的,经理就安排我去做开源社区的 issue 管理员,每天解答各种 issue,以及找人帮我解答 issue。那个时候飞桨刚发布 2.0 版本,易用性得到了极大的提升,具备了建设开源社区的技术基础,我的性格比较活泼,还懂点 AI 技术,就很顺理成章的被分配去搞开源社区了。我们飞桨的社区开发者个个都是人才,代码写得漂亮,说话又好听,每天上班跟大家水水群,还是蛮快乐的。
建设开源社区的过程中,有没有遇到印象特别深的事或人?为什么?
梦师傅: 那可太多了,为此我还专门写了一篇博客 👉 https://pfcc.blog/posts/2023-os-report ,我就只提几个关键词,大家自己对号入座:春节 18 响 🧨,雪糕狂热粉丝 🐱,最强水群人📱,开源强迫症 001 👓,还有一些人菜瘾大的小甜水爱好者,请坐小孩那桌(误
编者注 ✍️:春节十八响这些梗永流传了属于是
搞开源社区的时候快乐吗(狗头)?对于开源社区的价值和意义是怎样理解的?
梦师傅: 是真的快乐,当时我还在厂内做了一场《我在飞桨 快乐开源》的演讲,很多同事都有印象。在开源社区,人的主体性得到了充分的尊重,我们相聚在一起,只是因为纯粹的热爱,只做自己感兴趣的东西,没有利益和投入产出的权衡,怎么会不快乐呢?
我认为开源会给一个项目带来无穷的生命力,即使许久无人维护,后面的开发者仍旧可以基于这个开源项目去生长出其他有价值有意义的项目,大家共同为开源项目添砖加瓦,持续不断的推进技术向前发展。而且由于你需要把代码开源出来给大家看,那么就会有一些个人包袱在,会关注代码规范性、文档完整性,这样会使得整个生态良性发展,越来越好。
编者注 ✍️:拿着工资上班水群确实挺快乐的
厂长近期关于开源有一些表态(开源大模型会越来越落后),你怎么看?
梦师傅: 猜猜我为什么离职 我觉得厂长应该是有自己的考虑,而选择了文心大模型走闭源的道路,这本身无可厚非,OpenAI 也没有开源 ChatGPT,但是踩一捧一就没有必要了吧,这样的发言也把开源的飞桨放到了一个尴尬的位置上,就很难评。
在百度飞桨工作的三年里,最快乐的一件事&一些事?
梦师傅: 我还是蛮会在工作中找乐子的,遇到了好多合得来的同事朋友 👭,工作之余约个咖啡约个酒 🍹 什么的,都让我十分放松。最快乐的时光可能是去年的 7 月,先是去了日本团建 👗,然后五月天演唱会 🎤、梅西球赛 ⚽️,在上海办了开发者嘉年华 👻,面基了好多只认识 GitHub 🆔 的网友,我的头发也是那段时间变了很多颜色 🌈,差不多一周就会换一个,那时候的生活是非常多彩且自由的。
注:换颜色的原因是我的护发素有颜色,不是每次都需要去理发店重新染的,而且因为是护发素所以不伤头发 hhh
最想吐槽百度&飞桨&领导的是什么?至少说出一个百度最大的病症(狗头)
梦师傅: 经常有人评价百度:起个大早,赶个晚集。我对此有深刻的体会。百度其实不缺有想法有能力的人,整体的氛围也是鼓励探索的,所以我们经常能看到很多在厂内已经聊过做过的项目,成为了别家打造的爆款产品,互联网行业的黄埔军校名副其实。
在我看来,上层定位不清晰,中层摇摆不定,会让我们这些一线打工人非常心累。以我后来做的 AI Studio 为例,不到一年时间平台定位更换了三四次,从学习与实训社区到大模型社区,再到个人开发工作台,现在回归了大模型学习平台,每一次的变更都会带来整体功能和交互逻辑的大调整,出走半生,归来仍在原地,甚至可能更差。这期间 ModelScope、HuggingFace、Coze 等平台均以自己准确的定位和优质的产品体验成为了各自领域的头部,我们输在哪了呢?
跑路的原因?裸辞之后有什么打算吗?
梦师傅: 卷不动了,想歇一段时间,刚好手里的工作告一段落,觉得现在离开会是一个比较负责任的时机,所以就提了离职。
我其实很感谢百度能给我一个宽松的工作环境和成长空间,以及足够裸辞的存款作为底气。之后的打算嘛,应该还是会找个班上,想折腾点 AI 工具,搞点有意思的项目或者视频,我没做过的事情,都可以一试。
不考虑薪资,最想做的工作是什么?
梦师傅: 做开源应用仙人(别笑)。
之前选择做产品经理,主要还是代码写的菜,那假如我基于别人的开源项目,让 AI 给我写呢?我就动动嘴皮子,搞点没啥用但是有趣的应用给大家玩,代码开源出来,感觉也挺有意思的,我甚至可以录个视频给大家当乐子。
三、来自社区的拷问 ',7)),l(o,null,{default:e(()=>[l(i,{name:"ALL",github:"PaddlePaddle"},{default:e(()=>t[0]||(t[0]=[s(" 梦师傅跑路了? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[1]||(t[1]=[s(" 跑路了💨 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"汪师傅:",github:"GreatV"},{default:e(()=>t[2]||(t[2]=[s(" 梦师傅头发换了几种颜色? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[3]||(t[3]=[s(" 我数数啊,粉色、金色、蓝色、绿色、紫色、灰色、奶茶色、水蓝色、粉紫色、玫红色...... ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"散步",github:"sanbuphy"},{default:e(()=>t[4]||(t[4]=[s(" 梦师傅会打算开小红书、b 站或者公众号吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[5]||(t[5]=[s(" 全网都叫 Ligoml,不过是我的个人账号,我比较懒,还没有运营规划哈哈哈~ ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"散步",github:"sanbuphy"},{default:e(()=>t[6]||(t[6]=[s(" 推荐几款酒和配酒的菜 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[7]||(t[7]=[s(" 你去坐小孩那桌 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"whisky-12",github:"whisky-12"},{default:e(()=>t[8]||(t[8]=[s(" 以后还有机会见到梦师傅的猫吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[9]||(t[9]=[s(" 有的呀,想看可以群里@我,有趣的照片和视频我也会分享到朋友圈,看完记得点赞 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"张师傅",github:"Liyulingyue"},{default:e(()=>t[10]||(t[10]=[s(" 想问问梦师傅裸辞之后有机会来亦庄这边发展吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[11]||(t[11]=[s(" 去开无人车嘛? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"敏师傅",github:"enkilee"},{default:e(()=>t[12]||(t[12]=[s(" 转行当美食博主吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[13]||(t[13]=[s(" 那恐怕有点困难,我只会煮方便面🍜 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"昱晨",github:"yuchen202"},{default:e(()=>t[14]||(t[14]=[s(" 问问梦师傅以后还打算从事AI相关工作吗 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[15]||(t[15]=[s(" 应该还是在AI这个圈子里吧,毕竟我也只会这个 ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"花花",github:"Tulip-hua"},{default:e(()=>t[16]||(t[16]=[s(" 那你H2会给飞桨框架贡献代码吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[17]||(t[17]=[s(" 我可以让文心一言替我写吗? ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{name:"军哥",github:"jzhang533"},{default:e(()=>t[18]||(t[18]=[s(" 觉得社区里的哪个小哥比较帅?(如实回答) ")])),_:1})]),_:1}),l(o,null,{default:e(()=>[l(i,{type:"right",name:"梦师傅",github:"Ligoml"},{default:e(()=>t[19]||(t[19]=[s(" 我的审美还挺单一的,就喜欢高高瘦瘦长相清爽的男孩子,我们社区可多了,点名都点不过来(端水 ")])),_:1})]),_:1}),t[21]||(t[21]=n('四. 大龄失业粉毛女青年旅行 Vlog 戳戳 Vlog ➡️ 【离职日记|裸辞后我都去玩了点什么】
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
',6))]))}});export{q as __pageData,w as default};
diff --git a/assets/posts_limin-story.md.Dawzf3lV.js b/assets/posts_limin-story.md.Dawzf3lV.js
new file mode 100644
index 0000000..2d10290
--- /dev/null
+++ b/assets/posts_limin-story.md.Dawzf3lV.js
@@ -0,0 +1 @@
+import{M as l,_ as i}from"./chunks/MessageBox.CshcSYCA.js";import{c as s,k as o,i as e,s as n,a as r,v as a,o as g}from"./chunks/framework.D1-4jGi8.js";const p="/assets/limin-01.BhjJniZE.jpg",u="/assets/limin-02.De5NuCyS.jpg",h="/assets/limin-03.ygpgHzH1.jpg",b="/assets/limin-04.L5myDjOV.jpg",d="/assets/limin-05.D2TPwTlm.jpg",m="/assets/limin-06.B8mhuhou.jpg",f="/assets/limin-07.CGDPdTU2.jpg",x=JSON.parse('{"title":"【开源江湖闲聊录】躺平健身搞开源:敏师傅的三十而立","description":"","frontmatter":{"title":"【开源江湖闲聊录】躺平健身搞开源:敏师傅的三十而立","date":"2023-12-07T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇(小记者)","github":"wenxiaohahaha"},{"name":"李敏(敏师傅)","github":"enkilee"}]},"headers":[],"relativePath":"posts/limin-story.md","filePath":"posts/limin-story.md"}'),y={name:"posts/limin-story.md"},_=Object.assign(y,{setup(k){return(c,t)=>(g(),s("div",null,[t[9]||(t[9]=o('从对 Git 一窍不通到如今能够丝滑完成黑客松赛题,从曾经历鬼门关的生死挣扎到现在能够轻松跑几公里不喘气,从毕业于武大国软学的有志青年到佛系养生的新时代躺平中年,敏师傅 的人生经历就像是那瓶经年陈酿的老酒,醇厚细腻、回味无穷。
一、前言 是谁,天天说自己是 “老咸鱼” ?是谁,戏称自己是 “快奔 4️⃣的老头子” ?又是谁,自诩为 “摸🐟王者“ ?是他、是他、就是他~我们的朋友——敏师傅 !!!
匿名回复: 我没有,假的,都是假的
敏师傅毕业于武汉大学,目前在珠海某甲方企业工作。作为新时代中年人,敏师傅和许多开源者一样,喜欢躺平、宅家、吃吃吃!但敏师傅不仅喜欢吃,还喜欢做。不仅喜欢做,还擅长烹饪各式各样的美味佳肴,堪称“当代好男人”(敏:“相对的,比群里其他大佬差距还很大!”)、“顶级家庭煮夫”、“万千少女的理想老公🫰❤️(敏:“不是不是,我有主的,理想厨子是真!”)连米国五星上将麦克阿瑟见了都评价道:“不是米其林大厨请不起,而是李敏更具性价比!”
后文有敏师傅的厨艺展示哦~
在健身养身方面,李敏师傅也颇有经验。给他一根杠铃杆,他能撬动整个亚欧大陆!给他一套跑步装备,他能漫步宇宙!著名物理学家阿基米德曾说:“李敏所创造出来的物理奇迹足以改写人类此前所有的力学研究!”无论是极限深蹲、恐怖硬拉还是痛苦卧推,在李敏的面前都不过是老八进厕所手到擒来!
匿名回复: 没有没有,都是瞎说的,手无缚鸡之力!
而在开源方面,作为一个非专业的开源开发者,敏师傅从学习如何提交 PR 做起,到加入 Paddle 的 API 文档修改组,再到后面又积极参加一系列快乐开源活动和更具挑战性的黑客松。正如敏师傅所说:“自己在 Paddle 就像打怪升级一样做各种任务”。在这段 Paddle 的这段旅程中,他一点点精进了自己的技术,也结识了许多热爱开源的小伙伴。接下来让我们去瞧瞧这位多才多艺的“摸🐟老头子”(just kidding😉😉😉)!
左图:李敏师傅 右图:水群摸鱼日常 二、采访内容 介绍一下自己吧,敏师傅!
敏师傅: 各位大佬好,专业摸鱼,日常躺平晒太阳的咸鱼就是我了。身高 183,体重 170。老胖鱼一条。
敏师傅说个人爱好之一是宅,那么平时宅在家干什么呢?
敏师傅: 宅家追剧,鉴于囊中羞涩,又秉持开源,所以都是看免费的(大家不要学我,要支持正版,知识产权法在头顶)。有时会神经质发现地脏,就做个简单的扫除;有时就去公园跑跑步、做做拉伸,尽量让自己活的久点,要不然养老金白交了;要么小主想逛苍蝇馆子,就祭出地图精准定位去吃,吃完回家。
你曾经有提到在机器学习的过程中自己差点 “见了太祖”,请给大家分享一下这次惊险的经历😮
匿名回复:不是学习中,是那会刚好在学基础,我出事跟学习无关啊~
敏师傅: 某年,我在工作中,可能因为淋雨作业、感冒,加上伙食里有沙吧...多种原因叠加在一起,一天上午在办公室突然感到头昏。一开始估摸自己是低血压了,就去卫生队让值班人员量了个血压,结果 40/20。我估计自己身体出了大问题,赶忙让他们打了针 NE,然后喊队长把我送医院。
到了医院迷迷糊糊的,不敢让自己睡着。一天下了 3 张病危,好像是急性胆囊炎合并肺炎,附加胸腔积液。指标各种超标,医生也不敢手术,一直发烧,让医生给打了丙球续命,中间因为升压药泵注射漏了,整个胳膊肿得不像样,让护士帮忙买土豆切片敷那吸收了才完事,同为三甲,简直了。
过了 5 天医生估计受不了了,让转广州医院,还好领导派了个人跟着,就整了个车把我送到广总。那边直接说割胆囊,我怕,就说保守治疗,主任也同意了,就在广总住了一个多月。抽血都抽了三四十管,也没查出来病因,多科会诊好几次,像实验体一样躺着被几十人围观好几次。最后我看化验单,连非洲的传染病都查了,结果全是阴性。也就不了了之保守治疗了。先住传染科,然后呼吸内科,然后心内科。反正躺床上被推来推去,哈哈哈。
那一个多月禁食,每天就是打营养针。就记得那脂肪乳,一瓶能打几个小时,每天从上午 8 点打到晚上 8 点。最后几天,医生才让吃流食,粥都不能喝,只能喝粥上面的米汤,唉。然后回到单位吃了半年的过汤菜(就是把所有菜都放水里洗洗尽量没有油),肚子上的肉都没了,皮都耷拉下来了😂
编者注✍️:真・大难不死,必有后福啊。不过咱们社区开发者怎么什么离奇的经历都有...?
听说敏师傅的工作经历也非常曲折有趣,能具体说说么?
敏师傅: 这个,也没啥。毕业稀里糊涂进了某集团,一开始说干计算机的事,结果一点不沾边,各种其他技能点点了个遍。架设卫星锅,招待上级,液压系统维修,汽车机油液压油更换,气路维修,强电弱电架设,挖坑种树等各种。
全国各地的沙漠,森林,海岛跑了大半,格尔木睡沙漠,半夜帐篷被吹飞去追帐篷,靖宇睡森林,半夜下暴雨水淹帐篷急忙转移,跟着护林工逛森林,吃野果,挖人参,烧松子,反正东北比西北好玩的多。海岛就懵了,坐船就吐的昏天暗地,然后各种晒脱皮,最难受的地儿。
后面几年总算是接触计算机,做了个仿真训练系统,抄了一堆网站,各种借调打黑工。然后就想着赶紧滚蛋啥都不想干了,躺平。后面就是学机器学习,接着住院,接着佛系养生。
你最早接触开源是在什么时候?
敏师傅: 大学吧,那会为了看越狱、迷失、危机边缘那些。好用的播放器不多,关键是字幕。射手网开源了个播放器,就 SVN 拿下来看了看,支持各种制式视频,最大的特点是可以在线搜索字幕源并选择,在那个 RealPlayer 的年代,真的是非常的优秀。
那你又是怎么加入到 Paddle 社区的?您对于开源社区的价值和意义是怎样理解的?你认为这些价值和意义在 Paddle 社区又是如何体现的?
敏师傅: 好像是查飞桨文档学习时,梦师傅的文档修改任务,然后就上了大船。 我觉得在国内做开源真的挺不容易,毕竟开源在绝大部分人认为就是免费,其实也就是免费,而且大家都信奉拿来主义,开源协议那块也不关心。开源需要投入的人力物力财力都是不小的,投入少了,社区和维护不够,BUG 就多了。但绝大多数软件,都是从开源起家的,操作系统、中间件、数据库、应用软件等等,所有层面都有开源的身影,是开源让计算机发展的更迅速,微软都不得不妥协进行开源,可想开源的力量。
价值和意义的话,就用我接触的几个大佬概括下吧:
涛姐 ,我所接触到飞桨负责开源的最高级别人物。涛姐从研发那割下来的开源任务,要考虑到我们的能力,不能太难,适众面又要广泛,对应负责的研发还要 Review,都是增加飞桨内部的工作量。然后做黑客松题目时发现,题目所需的,可以把开源题目串起来。这时才发现涛姐选题的前瞻性、系统性、大局观。对整体框架的全局把握才能轻车熟路深入浅出的发布出我们能做的题目。可想而知涛姐的能力有多强 👍。
梦师傅 和花花 ,运营的核心 CP,原文档负责人,从任务发布、统计信息、数据到对接第三方,做过统计上报的都能懂,那就是个磨人想砸键盘的活,我们一堆人是一个个点,她们那是一整个面,但凡报上去的信息不对,就是反复的核实修改,线下的活动也组织的有声有色,从历次活动照片能看出参与者欢快的笑容,也反映出组织者的能力有多强。
孙师傅 ,现 Docathon 发起人和文档总负责任。虽然他总是潜水,而且使用者总说文档有错误。但反过来看,那还不是因为 API 更新快,参数修复多。孙师傅负责的是很庞大的费眼睛的项目,代码嘛,能跑就行,有的使用者只关心 API 怎么用。但文档,是所有人必须要看的,严谨系数其实比代码要高的多,孙师傅劳心劳力确实不容易。
编者注✍️:梦师傅是产品经理,不是运营哈哈哈。另外,我潜水是因为沉迷工作
作为一个非专业的开发者,一开始接触 Paddle 的时候你遇了过什么困难或者问题,是怎么解决的?
敏师傅: 刚开始,对流行的开发是一窍不通。对于 Git,只会把代码下下来自己用,从来没有提过 PR。那会在群里啥也不懂,连 PR 是啥也不知道,Git 其他命令也不会,只会 clone,后来在梦师傅和张师傅的帮助下,看教程。但是那会儿,前面几个 PR 只会在 GitHub 打开单文件修改提交,CI 流程过不去。后来看了张师傅的 PR 教程,才学会了命令提交。
你有提到最初是看教程学习 Paddle 的,你觉得飞桨的文档和教程怎么样?
敏师傅: 飞桨文档和教程,在主线这块是维护的很及时的,就是对于分支一些,教程和代码的不同步还是很明显的,记得有个给黑白视频上色的教程,怎么都跑不下来,最后才知道,得用老的仓库代码才行。但教程里的代码,clone 下来必然是最新的。
你参加过哪些飞桨的开源项目?你最喜欢哪个项目,为什么?
敏师傅: 参加的挺多,都是摸鱼做做边缘任务,最喜欢的应该是 001 带的任务,因为他基本 724 在线,改 PR 的速度赶不上他 Comment 的速度,哈哈哈哈哈哈。
编者注✍️:001 (SigureMo )是 Paddle 社区出了名的劳模,望周知。由于是第一位社区 commiter 而被大家称为 001。
听说你还参加了黑客松,那段经历一定很精彩,能否分享一下你在那期间遇到的有趣事情或者特别人呢?
敏师傅: 在婷姐带领下做了点 FP16 的任务,在花花带领下写了个 API,跟其他大佬比起来,我这基本就是小学生水平,就记得那会 CI 各种拥挤(当然,责任在我,因为我没环境,只能靠 CI,哈哈哈哈)。
你觉得 Paddle 社区在吸引和培养新的开发者方面做得如何?是否有一些改进的建议或者想法?
敏师傅: 我觉得一直都很吸引人,梦师傅、花花、酥酥、孙师傅各种活动都能面面俱到(虽然没实地参加,但看照片能看得出)。 建议想法啥的,我这四肢不发达头脑简单的脑子就算了,跟着大家学就好。🙂
除了 Paddle 之外,您还参与过其他开源项目吗?如果有的话,您觉得 PaddlePaddle 与其他项目相比有哪些独特之处?
敏师傅: 其他的么,好像真没,MMEngine 算么,当时要找框架,所以提了 1 个还是 2 个 PR 吧,后面就放弃了,因为没有免费算力可以用😀,还是咱飞桨好用。
在与花花、孙师傅、梦师傅、涛姐和其他 Paddle 大佬的交流中,您学到了哪些知识和经验?对您的技术有哪些影响呢 ?
敏师傅: 平时怕他们忙,基本不主动找各位大佬。我们这都是点,她(他)们那是面,所以她们的工作量肯定是非常大的,能不打扰就不打扰。
对于在某甲方公司工作,敏师傅有没有一些摸鱼小技巧可以分享一下呢?你是如何平衡工作和生活的?
敏师傅: 摸鱼技巧?开会带本书,看看会议就过去了,反正路人甲一个,一般就用“三不”回答:不会、不懂、不知道 。领导的决定都是对的,领导的决策都不会错,错了那也是我们马仔理解不够深,执行不彻底,落实不到位。
平衡工作生活的话,下了班就 不干活,遵守 995,除了大值班,这都得参加,没啥说的。
编者注✍️:学到了。
对于那些想要成为开源贡献者的人,您有什么鼓励和建议?
敏师傅: 不管是不是科班出身,大项目里开源一般有利无害的吧。我毕业太久,现在的应聘肯定卷出了天际,啥力扣 ACM 估计都是基操,能用开源项目加分的话,先进大厂实习再氪肝留大厂也是条路吧。说的不一定对,请客观看待。
最后,敏师傅还有什么想和大家说的么?
敏师傅: 有新手怪的话,大佬们给我留点。我还是砍砍史莱姆和稻草人就好😀。
三、著名大型评论平台——虎扑评论专区 敏师傅和太多的人打过交道了。由于篇幅的原因,我们邀请了部分和敏师傅有过合作经历的朋友们,贡献一下他们和敏师傅发生的故事,或者对敏师傅的评价~以下均为真心话,请放心食用!
',17)),e(l,null,{default:n(()=>[e(i,{name:"孙钟恺",github:"sunzhongkai588"},{default:n(()=>t[0]||(t[0]=[a(" 一开始对敏哥印象深刻,是因为敏哥的微信昵称拼音——讷言敏行(nè yán mǐn xíng),总共 4 个,有位前同事能把其中 2 个读错成 nà ... ... háng。🤣 "),r("br",null,null,-1),a(" 之后,从提文档修复的 PR 开始,就能明显感觉到敏哥的进步,再到后来敏哥能一口气把好多快乐开源任务都认领完成了,真的非常厉害。 ")])),_:1})]),_:1}),t[10]||(t[10]=r("h3",{id:"by-婷姐-zhangting2020",tabindex:"-1"},[a("by 婷姐("),r("a",{href:"https://github.com/zhangting2020",target:"_blank",rel:"noreferrer"},"zhangting2020"),a(") "),r("a",{class:"header-anchor",href:"#by-婷姐-zhangting2020","aria-label":'Permalink to "by 婷姐([zhangting2020](https://github.com/zhangting2020))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"张婷",github:"zhangting2020"},{default:n(()=>t[1]||(t[1]=[a(" 敏师傅领题目、push 研发超积极。最厉害的是自己不做测试的,都是一把改完 push 上去看 CI 结果,也不需要 GPU 算力(手动狗头),以充分利用婷姐的脑力资源为主。 ")])),_:1})]),_:1}),t[11]||(t[11]=r("h3",{id:"by-汪师傅-greatv",tabindex:"-1"},[a("by 汪师傅("),r("a",{href:"https://github.com/GreatV",target:"_blank",rel:"noreferrer"},"GreatV"),a(") "),r("a",{class:"header-anchor",href:"#by-汪师傅-greatv","aria-label":'Permalink to "by 汪师傅([GreatV](https://github.com/GreatV))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"汪昕",github:"GreatV"},{default:n(()=>t[2]||(t[2]=[a(" 敏师傅,当然是实力超强的摸鱼仙人 ")])),_:1})]),_:1}),t[12]||(t[12]=r("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[a("by 花花("),r("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"Tulip-hua"),a(") "),r("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"花花",github:"Tulip-hua"},{default:n(()=>t[3]||(t[3]=[a(" 众所周知,飞桨开源社区分为两股势力:以敏师傅为首的好人阵营,以 002 为首的时好时坏阵营。 ")])),_:1})]),_:1}),t[13]||(t[13]=r("blockquote",null,[r("p",null,"编者注✍️:下面这位就是花师傅说的时好时坏的 002 ⬇️")],-1)),t[14]||(t[14]=r("h3",{id:"by-张师傅-liyulingyue",tabindex:"-1"},[a("by 张师傅("),r("a",{href:"https://github.com/liyulingyue",target:"_blank",rel:"noreferrer"},"liyulingyue"),a(") "),r("a",{class:"header-anchor",href:"#by-张师傅-liyulingyue","aria-label":'Permalink to "by 张师傅([liyulingyue](https://github.com/liyulingyue))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"张一乔",github:"liyulingyue"},{default:n(()=>t[4]||(t[4]=[a(" 敏师傅简直是吾辈楷模,能愉快的摸鱼提 PR,还有老婆,真让人羡慕。 ")])),_:1})]),_:1}),t[15]||(t[15]=r("h3",{id:"by-独师傅-longranger2",tabindex:"-1"},[a("by 独师傅("),r("a",{href:"https://github.com/longranger2",target:"_blank",rel:"noreferrer"},"longranger2"),a(") "),r("a",{class:"header-anchor",href:"#by-独师傅-longranger2","aria-label":'Permalink to "by 独师傅([longranger2](https://github.com/longranger2))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"张伟鸿",github:"longranger2"},{default:n(()=>t[5]||(t[5]=[a(" 敏师傅给我的感觉就如同金庸武侠小说里的扫地僧,活跃在飞桨各大大小小的社区当中,神秘而且武功深不可测,有极高技艺却又深藏不露。嘴上说着摸鱼,但上班的时候提起 PR 毫不手软(敏师傅,咱贵公司还招人吗[可怜])。敏师傅也是一部行走的百科全书,上知天文,下知地理,尤其对吃的颇有造诣,如果你想知道不同地方的美食,问敏师傅就对了。 "),r("br",null,null,-1),a(" 不过我也得来吐槽下敏师傅,平时我认领的任务还没开始做的时候,张师傅都是口嗨说要背刺我,但只有敏师傅是来真的,直接把我认领的任务做了,希望敏师傅下次能给我留口汤喝,ball ball you 了😭 ")])),_:1})]),_:1}),t[16]||(t[16]=r("h3",{id:"by-陈沧夜-mrcangye",tabindex:"-1"},[a("by 陈沧夜("),r("a",{href:"https://github.com/mrcangye",target:"_blank",rel:"noreferrer"},"mrcangye"),a(") "),r("a",{class:"header-anchor",href:"#by-陈沧夜-mrcangye","aria-label":'Permalink to "by 陈沧夜([mrcangye](https://github.com/mrcangye))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"陈龙",github:"mrcangye"},{default:n(()=>t[6]||(t[6]=[a(" 敏师傅是我人生重要的领路人之一,每次抉择迷茫时候,敏师傅总会用他经验满满的信息差对我的迷茫分叉口进行降维打击!最后让我拨云见月,酣畅淋漓! ")])),_:1})]),_:1}),t[17]||(t[17]=r("h3",{id:"by-梦师傅-ligoml",tabindex:"-1"},[a("by 梦师傅("),r("a",{href:"https://github.com/Ligoml",target:"_blank",rel:"noreferrer"},"Ligoml"),a(") "),r("a",{class:"header-anchor",href:"#by-梦师傅-ligoml","aria-label":'Permalink to "by 梦师傅([Ligoml](https://github.com/Ligoml))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"梦柳",github:"Ligoml"},{default:n(()=>t[7]||(t[7]=[a(" 敏哥人超好!职场导师+1 ")])),_:1})]),_:1}),t[18]||(t[18]=o('敏哥安慰梦师傅的聊天截图 四、敏师傅的佛系养身 TIME~🏃♀️🏋️♀️⛹️♀️🚴♀️🤸♀️👯♂️💪 经历 先设定个小目标,就减肥吧,然后开始了漫长的减肥计划。 一开始 3 公里都难跑及格,啥也不管,先开跑,同时补充氨糖和维生素,免得关节废了。好像从 95 跑到 85 后,各种体测也没问题了。前几个月体重掉的快,后来基本一个月一公斤,逐渐五公里到十公里,最后跑了个半马试试自己的耐力。然后体重就到了瓶颈期,跑步成了热身,体重不减,体脂不减,请教专业人士,开始上力量,原始三件套:深蹲,硬拉,卧推。先慢跑 3 公里,然后负重训练。后来逐渐加上 HIIT,体重最轻的时候到了 70 公斤。
过来人的小 tips💡 总结一下大概如下:热身是必要的,体重大先用有氧减脂,一开始不用太在意体重,练就完了,碳水和蛋白质要保证,氨糖和维生素也是必备,到了某天会发现衣服大了,体重下来了。到了瓶颈期就可以上力量,没有条件就用 HIIT 代替,比如斯巴达 500,虽然痛苦,但是非常有效,提升新陈代谢率,提高心肺功能。在上力量时,如果有体检,会发现尿酸升高,这个是力量训练中常有的,可以暂停一周再复测,正常值后就说明是力量训练导致,就不用担心了。
五、彩蛋 🥚 1. 十项全能的家庭煮夫敏敏子在线狂秀厨艺 ',8)),e(l,null,{default:n(()=>[e(i,{name:"敏师傅",github:"enkilee"},{default:n(()=>t[8]||(t[8]=[a(" 自我宣言:本人手艺还行,刀工一般,之前在某集团时没事跑去炊事班练练手,打打牙祭。煎、炒、烹、炸、焖、炖、溜、熬、蒸、烩、煮、烙、汆、酿、扒、烧都会烧点。 ")])),_:1})]),_:1}),t[19]||(t[19]=o('敏哥做的菜-1 敏哥做的菜-2 2. 敏哥个人自述 敏哥在采访前也精心写了一份【个人自述】,篇幅过长就不贴在正文了,好奇的话可以读一下哦~
编者注✍️:留个彩蛋!我把它放在了博客 GitHub repo 下的 src/eggs/limin-story/
文件夹下哦~
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',8))]))}});export{x as __pageData,_ as default};
diff --git a/assets/posts_limin-story.md.Dawzf3lV.lean.js b/assets/posts_limin-story.md.Dawzf3lV.lean.js
new file mode 100644
index 0000000..2d10290
--- /dev/null
+++ b/assets/posts_limin-story.md.Dawzf3lV.lean.js
@@ -0,0 +1 @@
+import{M as l,_ as i}from"./chunks/MessageBox.CshcSYCA.js";import{c as s,k as o,i as e,s as n,a as r,v as a,o as g}from"./chunks/framework.D1-4jGi8.js";const p="/assets/limin-01.BhjJniZE.jpg",u="/assets/limin-02.De5NuCyS.jpg",h="/assets/limin-03.ygpgHzH1.jpg",b="/assets/limin-04.L5myDjOV.jpg",d="/assets/limin-05.D2TPwTlm.jpg",m="/assets/limin-06.B8mhuhou.jpg",f="/assets/limin-07.CGDPdTU2.jpg",x=JSON.parse('{"title":"【开源江湖闲聊录】躺平健身搞开源:敏师傅的三十而立","description":"","frontmatter":{"title":"【开源江湖闲聊录】躺平健身搞开源:敏师傅的三十而立","date":"2023-12-07T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇(小记者)","github":"wenxiaohahaha"},{"name":"李敏(敏师傅)","github":"enkilee"}]},"headers":[],"relativePath":"posts/limin-story.md","filePath":"posts/limin-story.md"}'),y={name:"posts/limin-story.md"},_=Object.assign(y,{setup(k){return(c,t)=>(g(),s("div",null,[t[9]||(t[9]=o('从对 Git 一窍不通到如今能够丝滑完成黑客松赛题,从曾经历鬼门关的生死挣扎到现在能够轻松跑几公里不喘气,从毕业于武大国软学的有志青年到佛系养生的新时代躺平中年,敏师傅 的人生经历就像是那瓶经年陈酿的老酒,醇厚细腻、回味无穷。
一、前言 是谁,天天说自己是 “老咸鱼” ?是谁,戏称自己是 “快奔 4️⃣的老头子” ?又是谁,自诩为 “摸🐟王者“ ?是他、是他、就是他~我们的朋友——敏师傅 !!!
匿名回复: 我没有,假的,都是假的
敏师傅毕业于武汉大学,目前在珠海某甲方企业工作。作为新时代中年人,敏师傅和许多开源者一样,喜欢躺平、宅家、吃吃吃!但敏师傅不仅喜欢吃,还喜欢做。不仅喜欢做,还擅长烹饪各式各样的美味佳肴,堪称“当代好男人”(敏:“相对的,比群里其他大佬差距还很大!”)、“顶级家庭煮夫”、“万千少女的理想老公🫰❤️(敏:“不是不是,我有主的,理想厨子是真!”)连米国五星上将麦克阿瑟见了都评价道:“不是米其林大厨请不起,而是李敏更具性价比!”
后文有敏师傅的厨艺展示哦~
在健身养身方面,李敏师傅也颇有经验。给他一根杠铃杆,他能撬动整个亚欧大陆!给他一套跑步装备,他能漫步宇宙!著名物理学家阿基米德曾说:“李敏所创造出来的物理奇迹足以改写人类此前所有的力学研究!”无论是极限深蹲、恐怖硬拉还是痛苦卧推,在李敏的面前都不过是老八进厕所手到擒来!
匿名回复: 没有没有,都是瞎说的,手无缚鸡之力!
而在开源方面,作为一个非专业的开源开发者,敏师傅从学习如何提交 PR 做起,到加入 Paddle 的 API 文档修改组,再到后面又积极参加一系列快乐开源活动和更具挑战性的黑客松。正如敏师傅所说:“自己在 Paddle 就像打怪升级一样做各种任务”。在这段 Paddle 的这段旅程中,他一点点精进了自己的技术,也结识了许多热爱开源的小伙伴。接下来让我们去瞧瞧这位多才多艺的“摸🐟老头子”(just kidding😉😉😉)!
左图:李敏师傅 右图:水群摸鱼日常 二、采访内容 介绍一下自己吧,敏师傅!
敏师傅: 各位大佬好,专业摸鱼,日常躺平晒太阳的咸鱼就是我了。身高 183,体重 170。老胖鱼一条。
敏师傅说个人爱好之一是宅,那么平时宅在家干什么呢?
敏师傅: 宅家追剧,鉴于囊中羞涩,又秉持开源,所以都是看免费的(大家不要学我,要支持正版,知识产权法在头顶)。有时会神经质发现地脏,就做个简单的扫除;有时就去公园跑跑步、做做拉伸,尽量让自己活的久点,要不然养老金白交了;要么小主想逛苍蝇馆子,就祭出地图精准定位去吃,吃完回家。
你曾经有提到在机器学习的过程中自己差点 “见了太祖”,请给大家分享一下这次惊险的经历😮
匿名回复:不是学习中,是那会刚好在学基础,我出事跟学习无关啊~
敏师傅: 某年,我在工作中,可能因为淋雨作业、感冒,加上伙食里有沙吧...多种原因叠加在一起,一天上午在办公室突然感到头昏。一开始估摸自己是低血压了,就去卫生队让值班人员量了个血压,结果 40/20。我估计自己身体出了大问题,赶忙让他们打了针 NE,然后喊队长把我送医院。
到了医院迷迷糊糊的,不敢让自己睡着。一天下了 3 张病危,好像是急性胆囊炎合并肺炎,附加胸腔积液。指标各种超标,医生也不敢手术,一直发烧,让医生给打了丙球续命,中间因为升压药泵注射漏了,整个胳膊肿得不像样,让护士帮忙买土豆切片敷那吸收了才完事,同为三甲,简直了。
过了 5 天医生估计受不了了,让转广州医院,还好领导派了个人跟着,就整了个车把我送到广总。那边直接说割胆囊,我怕,就说保守治疗,主任也同意了,就在广总住了一个多月。抽血都抽了三四十管,也没查出来病因,多科会诊好几次,像实验体一样躺着被几十人围观好几次。最后我看化验单,连非洲的传染病都查了,结果全是阴性。也就不了了之保守治疗了。先住传染科,然后呼吸内科,然后心内科。反正躺床上被推来推去,哈哈哈。
那一个多月禁食,每天就是打营养针。就记得那脂肪乳,一瓶能打几个小时,每天从上午 8 点打到晚上 8 点。最后几天,医生才让吃流食,粥都不能喝,只能喝粥上面的米汤,唉。然后回到单位吃了半年的过汤菜(就是把所有菜都放水里洗洗尽量没有油),肚子上的肉都没了,皮都耷拉下来了😂
编者注✍️:真・大难不死,必有后福啊。不过咱们社区开发者怎么什么离奇的经历都有...?
听说敏师傅的工作经历也非常曲折有趣,能具体说说么?
敏师傅: 这个,也没啥。毕业稀里糊涂进了某集团,一开始说干计算机的事,结果一点不沾边,各种其他技能点点了个遍。架设卫星锅,招待上级,液压系统维修,汽车机油液压油更换,气路维修,强电弱电架设,挖坑种树等各种。
全国各地的沙漠,森林,海岛跑了大半,格尔木睡沙漠,半夜帐篷被吹飞去追帐篷,靖宇睡森林,半夜下暴雨水淹帐篷急忙转移,跟着护林工逛森林,吃野果,挖人参,烧松子,反正东北比西北好玩的多。海岛就懵了,坐船就吐的昏天暗地,然后各种晒脱皮,最难受的地儿。
后面几年总算是接触计算机,做了个仿真训练系统,抄了一堆网站,各种借调打黑工。然后就想着赶紧滚蛋啥都不想干了,躺平。后面就是学机器学习,接着住院,接着佛系养生。
你最早接触开源是在什么时候?
敏师傅: 大学吧,那会为了看越狱、迷失、危机边缘那些。好用的播放器不多,关键是字幕。射手网开源了个播放器,就 SVN 拿下来看了看,支持各种制式视频,最大的特点是可以在线搜索字幕源并选择,在那个 RealPlayer 的年代,真的是非常的优秀。
那你又是怎么加入到 Paddle 社区的?您对于开源社区的价值和意义是怎样理解的?你认为这些价值和意义在 Paddle 社区又是如何体现的?
敏师傅: 好像是查飞桨文档学习时,梦师傅的文档修改任务,然后就上了大船。 我觉得在国内做开源真的挺不容易,毕竟开源在绝大部分人认为就是免费,其实也就是免费,而且大家都信奉拿来主义,开源协议那块也不关心。开源需要投入的人力物力财力都是不小的,投入少了,社区和维护不够,BUG 就多了。但绝大多数软件,都是从开源起家的,操作系统、中间件、数据库、应用软件等等,所有层面都有开源的身影,是开源让计算机发展的更迅速,微软都不得不妥协进行开源,可想开源的力量。
价值和意义的话,就用我接触的几个大佬概括下吧:
涛姐 ,我所接触到飞桨负责开源的最高级别人物。涛姐从研发那割下来的开源任务,要考虑到我们的能力,不能太难,适众面又要广泛,对应负责的研发还要 Review,都是增加飞桨内部的工作量。然后做黑客松题目时发现,题目所需的,可以把开源题目串起来。这时才发现涛姐选题的前瞻性、系统性、大局观。对整体框架的全局把握才能轻车熟路深入浅出的发布出我们能做的题目。可想而知涛姐的能力有多强 👍。
梦师傅 和花花 ,运营的核心 CP,原文档负责人,从任务发布、统计信息、数据到对接第三方,做过统计上报的都能懂,那就是个磨人想砸键盘的活,我们一堆人是一个个点,她们那是一整个面,但凡报上去的信息不对,就是反复的核实修改,线下的活动也组织的有声有色,从历次活动照片能看出参与者欢快的笑容,也反映出组织者的能力有多强。
孙师傅 ,现 Docathon 发起人和文档总负责任。虽然他总是潜水,而且使用者总说文档有错误。但反过来看,那还不是因为 API 更新快,参数修复多。孙师傅负责的是很庞大的费眼睛的项目,代码嘛,能跑就行,有的使用者只关心 API 怎么用。但文档,是所有人必须要看的,严谨系数其实比代码要高的多,孙师傅劳心劳力确实不容易。
编者注✍️:梦师傅是产品经理,不是运营哈哈哈。另外,我潜水是因为沉迷工作
作为一个非专业的开发者,一开始接触 Paddle 的时候你遇了过什么困难或者问题,是怎么解决的?
敏师傅: 刚开始,对流行的开发是一窍不通。对于 Git,只会把代码下下来自己用,从来没有提过 PR。那会在群里啥也不懂,连 PR 是啥也不知道,Git 其他命令也不会,只会 clone,后来在梦师傅和张师傅的帮助下,看教程。但是那会儿,前面几个 PR 只会在 GitHub 打开单文件修改提交,CI 流程过不去。后来看了张师傅的 PR 教程,才学会了命令提交。
你有提到最初是看教程学习 Paddle 的,你觉得飞桨的文档和教程怎么样?
敏师傅: 飞桨文档和教程,在主线这块是维护的很及时的,就是对于分支一些,教程和代码的不同步还是很明显的,记得有个给黑白视频上色的教程,怎么都跑不下来,最后才知道,得用老的仓库代码才行。但教程里的代码,clone 下来必然是最新的。
你参加过哪些飞桨的开源项目?你最喜欢哪个项目,为什么?
敏师傅: 参加的挺多,都是摸鱼做做边缘任务,最喜欢的应该是 001 带的任务,因为他基本 724 在线,改 PR 的速度赶不上他 Comment 的速度,哈哈哈哈哈哈。
编者注✍️:001 (SigureMo )是 Paddle 社区出了名的劳模,望周知。由于是第一位社区 commiter 而被大家称为 001。
听说你还参加了黑客松,那段经历一定很精彩,能否分享一下你在那期间遇到的有趣事情或者特别人呢?
敏师傅: 在婷姐带领下做了点 FP16 的任务,在花花带领下写了个 API,跟其他大佬比起来,我这基本就是小学生水平,就记得那会 CI 各种拥挤(当然,责任在我,因为我没环境,只能靠 CI,哈哈哈哈)。
你觉得 Paddle 社区在吸引和培养新的开发者方面做得如何?是否有一些改进的建议或者想法?
敏师傅: 我觉得一直都很吸引人,梦师傅、花花、酥酥、孙师傅各种活动都能面面俱到(虽然没实地参加,但看照片能看得出)。 建议想法啥的,我这四肢不发达头脑简单的脑子就算了,跟着大家学就好。🙂
除了 Paddle 之外,您还参与过其他开源项目吗?如果有的话,您觉得 PaddlePaddle 与其他项目相比有哪些独特之处?
敏师傅: 其他的么,好像真没,MMEngine 算么,当时要找框架,所以提了 1 个还是 2 个 PR 吧,后面就放弃了,因为没有免费算力可以用😀,还是咱飞桨好用。
在与花花、孙师傅、梦师傅、涛姐和其他 Paddle 大佬的交流中,您学到了哪些知识和经验?对您的技术有哪些影响呢 ?
敏师傅: 平时怕他们忙,基本不主动找各位大佬。我们这都是点,她(他)们那是面,所以她们的工作量肯定是非常大的,能不打扰就不打扰。
对于在某甲方公司工作,敏师傅有没有一些摸鱼小技巧可以分享一下呢?你是如何平衡工作和生活的?
敏师傅: 摸鱼技巧?开会带本书,看看会议就过去了,反正路人甲一个,一般就用“三不”回答:不会、不懂、不知道 。领导的决定都是对的,领导的决策都不会错,错了那也是我们马仔理解不够深,执行不彻底,落实不到位。
平衡工作生活的话,下了班就 不干活,遵守 995,除了大值班,这都得参加,没啥说的。
编者注✍️:学到了。
对于那些想要成为开源贡献者的人,您有什么鼓励和建议?
敏师傅: 不管是不是科班出身,大项目里开源一般有利无害的吧。我毕业太久,现在的应聘肯定卷出了天际,啥力扣 ACM 估计都是基操,能用开源项目加分的话,先进大厂实习再氪肝留大厂也是条路吧。说的不一定对,请客观看待。
最后,敏师傅还有什么想和大家说的么?
敏师傅: 有新手怪的话,大佬们给我留点。我还是砍砍史莱姆和稻草人就好😀。
三、著名大型评论平台——虎扑评论专区 敏师傅和太多的人打过交道了。由于篇幅的原因,我们邀请了部分和敏师傅有过合作经历的朋友们,贡献一下他们和敏师傅发生的故事,或者对敏师傅的评价~以下均为真心话,请放心食用!
',17)),e(l,null,{default:n(()=>[e(i,{name:"孙钟恺",github:"sunzhongkai588"},{default:n(()=>t[0]||(t[0]=[a(" 一开始对敏哥印象深刻,是因为敏哥的微信昵称拼音——讷言敏行(nè yán mǐn xíng),总共 4 个,有位前同事能把其中 2 个读错成 nà ... ... háng。🤣 "),r("br",null,null,-1),a(" 之后,从提文档修复的 PR 开始,就能明显感觉到敏哥的进步,再到后来敏哥能一口气把好多快乐开源任务都认领完成了,真的非常厉害。 ")])),_:1})]),_:1}),t[10]||(t[10]=r("h3",{id:"by-婷姐-zhangting2020",tabindex:"-1"},[a("by 婷姐("),r("a",{href:"https://github.com/zhangting2020",target:"_blank",rel:"noreferrer"},"zhangting2020"),a(") "),r("a",{class:"header-anchor",href:"#by-婷姐-zhangting2020","aria-label":'Permalink to "by 婷姐([zhangting2020](https://github.com/zhangting2020))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"张婷",github:"zhangting2020"},{default:n(()=>t[1]||(t[1]=[a(" 敏师傅领题目、push 研发超积极。最厉害的是自己不做测试的,都是一把改完 push 上去看 CI 结果,也不需要 GPU 算力(手动狗头),以充分利用婷姐的脑力资源为主。 ")])),_:1})]),_:1}),t[11]||(t[11]=r("h3",{id:"by-汪师傅-greatv",tabindex:"-1"},[a("by 汪师傅("),r("a",{href:"https://github.com/GreatV",target:"_blank",rel:"noreferrer"},"GreatV"),a(") "),r("a",{class:"header-anchor",href:"#by-汪师傅-greatv","aria-label":'Permalink to "by 汪师傅([GreatV](https://github.com/GreatV))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"汪昕",github:"GreatV"},{default:n(()=>t[2]||(t[2]=[a(" 敏师傅,当然是实力超强的摸鱼仙人 ")])),_:1})]),_:1}),t[12]||(t[12]=r("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[a("by 花花("),r("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"Tulip-hua"),a(") "),r("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"花花",github:"Tulip-hua"},{default:n(()=>t[3]||(t[3]=[a(" 众所周知,飞桨开源社区分为两股势力:以敏师傅为首的好人阵营,以 002 为首的时好时坏阵营。 ")])),_:1})]),_:1}),t[13]||(t[13]=r("blockquote",null,[r("p",null,"编者注✍️:下面这位就是花师傅说的时好时坏的 002 ⬇️")],-1)),t[14]||(t[14]=r("h3",{id:"by-张师傅-liyulingyue",tabindex:"-1"},[a("by 张师傅("),r("a",{href:"https://github.com/liyulingyue",target:"_blank",rel:"noreferrer"},"liyulingyue"),a(") "),r("a",{class:"header-anchor",href:"#by-张师傅-liyulingyue","aria-label":'Permalink to "by 张师傅([liyulingyue](https://github.com/liyulingyue))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"张一乔",github:"liyulingyue"},{default:n(()=>t[4]||(t[4]=[a(" 敏师傅简直是吾辈楷模,能愉快的摸鱼提 PR,还有老婆,真让人羡慕。 ")])),_:1})]),_:1}),t[15]||(t[15]=r("h3",{id:"by-独师傅-longranger2",tabindex:"-1"},[a("by 独师傅("),r("a",{href:"https://github.com/longranger2",target:"_blank",rel:"noreferrer"},"longranger2"),a(") "),r("a",{class:"header-anchor",href:"#by-独师傅-longranger2","aria-label":'Permalink to "by 独师傅([longranger2](https://github.com/longranger2))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"张伟鸿",github:"longranger2"},{default:n(()=>t[5]||(t[5]=[a(" 敏师傅给我的感觉就如同金庸武侠小说里的扫地僧,活跃在飞桨各大大小小的社区当中,神秘而且武功深不可测,有极高技艺却又深藏不露。嘴上说着摸鱼,但上班的时候提起 PR 毫不手软(敏师傅,咱贵公司还招人吗[可怜])。敏师傅也是一部行走的百科全书,上知天文,下知地理,尤其对吃的颇有造诣,如果你想知道不同地方的美食,问敏师傅就对了。 "),r("br",null,null,-1),a(" 不过我也得来吐槽下敏师傅,平时我认领的任务还没开始做的时候,张师傅都是口嗨说要背刺我,但只有敏师傅是来真的,直接把我认领的任务做了,希望敏师傅下次能给我留口汤喝,ball ball you 了😭 ")])),_:1})]),_:1}),t[16]||(t[16]=r("h3",{id:"by-陈沧夜-mrcangye",tabindex:"-1"},[a("by 陈沧夜("),r("a",{href:"https://github.com/mrcangye",target:"_blank",rel:"noreferrer"},"mrcangye"),a(") "),r("a",{class:"header-anchor",href:"#by-陈沧夜-mrcangye","aria-label":'Permalink to "by 陈沧夜([mrcangye](https://github.com/mrcangye))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"陈龙",github:"mrcangye"},{default:n(()=>t[6]||(t[6]=[a(" 敏师傅是我人生重要的领路人之一,每次抉择迷茫时候,敏师傅总会用他经验满满的信息差对我的迷茫分叉口进行降维打击!最后让我拨云见月,酣畅淋漓! ")])),_:1})]),_:1}),t[17]||(t[17]=r("h3",{id:"by-梦师傅-ligoml",tabindex:"-1"},[a("by 梦师傅("),r("a",{href:"https://github.com/Ligoml",target:"_blank",rel:"noreferrer"},"Ligoml"),a(") "),r("a",{class:"header-anchor",href:"#by-梦师傅-ligoml","aria-label":'Permalink to "by 梦师傅([Ligoml](https://github.com/Ligoml))"'},"")],-1)),e(l,null,{default:n(()=>[e(i,{name:"梦柳",github:"Ligoml"},{default:n(()=>t[7]||(t[7]=[a(" 敏哥人超好!职场导师+1 ")])),_:1})]),_:1}),t[18]||(t[18]=o('敏哥安慰梦师傅的聊天截图 四、敏师傅的佛系养身 TIME~🏃♀️🏋️♀️⛹️♀️🚴♀️🤸♀️👯♂️💪 经历 先设定个小目标,就减肥吧,然后开始了漫长的减肥计划。 一开始 3 公里都难跑及格,啥也不管,先开跑,同时补充氨糖和维生素,免得关节废了。好像从 95 跑到 85 后,各种体测也没问题了。前几个月体重掉的快,后来基本一个月一公斤,逐渐五公里到十公里,最后跑了个半马试试自己的耐力。然后体重就到了瓶颈期,跑步成了热身,体重不减,体脂不减,请教专业人士,开始上力量,原始三件套:深蹲,硬拉,卧推。先慢跑 3 公里,然后负重训练。后来逐渐加上 HIIT,体重最轻的时候到了 70 公斤。
过来人的小 tips💡 总结一下大概如下:热身是必要的,体重大先用有氧减脂,一开始不用太在意体重,练就完了,碳水和蛋白质要保证,氨糖和维生素也是必备,到了某天会发现衣服大了,体重下来了。到了瓶颈期就可以上力量,没有条件就用 HIIT 代替,比如斯巴达 500,虽然痛苦,但是非常有效,提升新陈代谢率,提高心肺功能。在上力量时,如果有体检,会发现尿酸升高,这个是力量训练中常有的,可以暂停一周再复测,正常值后就说明是力量训练导致,就不用担心了。
五、彩蛋 🥚 1. 十项全能的家庭煮夫敏敏子在线狂秀厨艺 ',8)),e(l,null,{default:n(()=>[e(i,{name:"敏师傅",github:"enkilee"},{default:n(()=>t[8]||(t[8]=[a(" 自我宣言:本人手艺还行,刀工一般,之前在某集团时没事跑去炊事班练练手,打打牙祭。煎、炒、烹、炸、焖、炖、溜、熬、蒸、烩、煮、烙、汆、酿、扒、烧都会烧点。 ")])),_:1})]),_:1}),t[19]||(t[19]=o('敏哥做的菜-1 敏哥做的菜-2 2. 敏哥个人自述 敏哥在采访前也精心写了一份【个人自述】,篇幅过长就不贴在正文了,好奇的话可以读一下哦~
编者注✍️:留个彩蛋!我把它放在了博客 GitHub repo 下的 src/eggs/limin-story/
文件夹下哦~
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',8))]))}});export{x as __pageData,_ as default};
diff --git a/assets/posts_loaf-sharing.md.B6u24F4Z.js b/assets/posts_loaf-sharing.md.B6u24F4Z.js
new file mode 100644
index 0000000..1747db4
--- /dev/null
+++ b/assets/posts_loaf-sharing.md.B6u24F4Z.js
@@ -0,0 +1 @@
+import{_ as s,c as o,k as a,o as r}from"./chunks/framework.D1-4jGi8.js";const p="/assets/loaf-1.DZaFXaGl.jpg",e="/assets/loaf-2.C5vilUke.jpg",n="/assets/loaf-3.-v8qKROs.jpg",l="/assets/loaf-4.CyalVKQV.jpg",i="/assets/loaf-5.CtZZjeUz.jpg",g="/assets/loaf-6.Bi0vscBh.jpg",c="/assets/loaf-7.CJq_cUQ-.jpg",h="/assets/loaf-8.VWs4ngSl.jpg",_="/assets/loaf-9.C4UjXp3U.jpg",f="/assets/loaf-10.Cb3b4g6B.jpg",x=JSON.parse('{"title":"如何在开源社区摸 🐟?","description":"","frontmatter":{"title":"如何在开源社区摸 🐟?","date":"2023-12-18T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/loaf-sharing.md","filePath":"posts/loaf-sharing.md"}'),m={name:"posts/loaf-sharing.md"};function d(u,t,b,k,q,P){return r(),o("div",null,t[0]||(t[0]=[a('本篇博客文章的内容,来源于作者在「第八届中国开源年会」上分享的一次主题为 「如何在开源社区摸 🐟」 的闪电演讲,以下的部分为演讲的具体内容。
01-个人简介 大家好,今天我想分享的主题是 「如何在开源社区摸 🐟」 。在演讲开始前先自我介绍一下,我叫孙钟恺,社区里的开发者都称呼我为 孙师傅 ,下图为我的 Github ID、头像和贡献热力图。
从上面的职业标签可以看出,我是入职百度一年半(0.5🐔年)、目前负责 Paddle 开源社区以及官网文档的飞桨校招产品经理。作为一名新人,我也没有什么特长,唯一擅长的就是摸 🐟 吧~所以在这里也和大家分享一下我的摸 🐟 经验。
02-摸 🐟 经验 我的摸鱼经验其实从这幅图就可以说明白,就是工作上三思而后行 :
第一,这工作能不能不做 ; 第二,这工作能不能晚点做 ; 第三,这工作能不能交给别人做 。
但是,理想是丰满的,现实是骨感的。老板的回复也很直接:
不过对于第三点呢,老板似乎不太抗拒(反正不是交给他做🐶)。于是我就在思考,也许可以通过“把工作转交给别人”的方式,来简单摸个 🐟。
那么问题来了,具体交给谁做呢?我看向了我的同事和研发大爷们 。经过几百回的试探和心理博弈后,研发大爷们均以“人力不够”、“优先级低”等借口来拒绝我。而且咱们研发工作日做牛做马,一到周末直接原地消失了,一看 GitHub 热力图,周六、周日都是空的。
补充:不过这也说明百度还算是一个遵守劳动法的公司,周末都是双休的~
然后,我把我的目光转向了社区开发者们 。哎,发现他们的开源热情似乎还是很高涨的,有的开发者甚至把开源视为人生价值(“工作就是图一乐”、“人生价值实现还得靠开源”)我又翻了翻一些社区开发者的 GitHub 热力图,一看吓一跳 😮,绿油油的一片,7*24 小时全职开源。
至此之后呢,我就把 “把活儿交给社区开发者” ,作为我摸 🐟 的核心思想。
但是,怎么“把活儿交给社区开发者”,也是需要讲点基本法的,所以我总结了两条方法~
03-「把活儿交给社区开发者」初级版 首先,我先介绍一下初级版,即把一些 明确的轻量级任务 交给社区开发者做。
怎么理解呢?其实很多问题已经由社区开发者和内部研发进行多轮讨论了,并经过 任务拆解 后,形成了可以直接去上手做的轻量级任务。这些轻量级任务最终会公布到社区,并以 tracking issue 的形式进行发布和追踪,下图右方就是部分的这类任务。
因为这些任务相对简单、好上手,社区开发者反馈其实非常好,有些人可能周末会去做,有些人甚至上班摸鱼的时候也在做。
发布这类任务的优点 在于——因为任务比较简单,“啪”的一下做的很快,完成率又特别高。更重要的是,开发者也会很愉悦,比如花一个小时提一个 PR 上来,就能把任务做完了,很容易带来满足感~(而且也会有小礼品)
不过这类任务也有一些缺点 ——这些任务需要花精力进行任务的拆解、详细的描述,甚至还可能需要指导和大量的 Review。所以这 🐟 虽然摸了,但只摸了一半。
03-「把活儿交给社区开发者」终极摸鱼版 基于上述,我之后又总结了终极摸鱼版的方法,就是 把问题交由社区开发者来主导 。
怎么理解呢?就是我们飞桨只提供大概的题目和方向,由社区开发者根据问题 自行进行拆解 ,然后在我们的指导下开展任务。比较典型的是 《将 xdoctest 引入飞桨工作流 》 ,这个题目是由社区开发者顺师傅(@megemini )来完成的。
xdoctest 是一个文档示例代码的检查工具。
从下面右半边可以看到,顺师傅按自己的理解对任务进行拆解,分为不同的阶段,并有条不紊的完成。并且还衍生出了一些批量的社区任务,比如全量的修改了飞桨一千多个 API 的示例代码。这是一个人完成不了的,需要号召更多的社区开发者来参与,因此这个项目也极大调动了整个社区的氛围和活力。
所以说,其实把问题交给社区开发者主导,会有很多积极的方面~一方面能够帮我们分担了很大的研发精力(帮我们摸 🐟),另一方面也会不经意间对整个社区有正向的影响力。
04-摸 🐟 的前提条件 最后也提一下,其实摸鱼也有很多前提条件,需要有良好的社区氛围 、丝滑的社区交流 、研发的大力支持 和运营的宣传推广 ...这些条件都是缺一不可的~所以虽然是摸鱼,但也需要遵循很多客观规律。
以上是我演讲的全部内容,感谢大家的观看~
',41)]))}const v=s(m,[["render",d]]);export{x as __pageData,v as default};
diff --git a/assets/posts_loaf-sharing.md.B6u24F4Z.lean.js b/assets/posts_loaf-sharing.md.B6u24F4Z.lean.js
new file mode 100644
index 0000000..1747db4
--- /dev/null
+++ b/assets/posts_loaf-sharing.md.B6u24F4Z.lean.js
@@ -0,0 +1 @@
+import{_ as s,c as o,k as a,o as r}from"./chunks/framework.D1-4jGi8.js";const p="/assets/loaf-1.DZaFXaGl.jpg",e="/assets/loaf-2.C5vilUke.jpg",n="/assets/loaf-3.-v8qKROs.jpg",l="/assets/loaf-4.CyalVKQV.jpg",i="/assets/loaf-5.CtZZjeUz.jpg",g="/assets/loaf-6.Bi0vscBh.jpg",c="/assets/loaf-7.CJq_cUQ-.jpg",h="/assets/loaf-8.VWs4ngSl.jpg",_="/assets/loaf-9.C4UjXp3U.jpg",f="/assets/loaf-10.Cb3b4g6B.jpg",x=JSON.parse('{"title":"如何在开源社区摸 🐟?","description":"","frontmatter":{"title":"如何在开源社区摸 🐟?","date":"2023-12-18T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/loaf-sharing.md","filePath":"posts/loaf-sharing.md"}'),m={name:"posts/loaf-sharing.md"};function d(u,t,b,k,q,P){return r(),o("div",null,t[0]||(t[0]=[a('本篇博客文章的内容,来源于作者在「第八届中国开源年会」上分享的一次主题为 「如何在开源社区摸 🐟」 的闪电演讲,以下的部分为演讲的具体内容。
01-个人简介 大家好,今天我想分享的主题是 「如何在开源社区摸 🐟」 。在演讲开始前先自我介绍一下,我叫孙钟恺,社区里的开发者都称呼我为 孙师傅 ,下图为我的 Github ID、头像和贡献热力图。
从上面的职业标签可以看出,我是入职百度一年半(0.5🐔年)、目前负责 Paddle 开源社区以及官网文档的飞桨校招产品经理。作为一名新人,我也没有什么特长,唯一擅长的就是摸 🐟 吧~所以在这里也和大家分享一下我的摸 🐟 经验。
02-摸 🐟 经验 我的摸鱼经验其实从这幅图就可以说明白,就是工作上三思而后行 :
第一,这工作能不能不做 ; 第二,这工作能不能晚点做 ; 第三,这工作能不能交给别人做 。
但是,理想是丰满的,现实是骨感的。老板的回复也很直接:
不过对于第三点呢,老板似乎不太抗拒(反正不是交给他做🐶)。于是我就在思考,也许可以通过“把工作转交给别人”的方式,来简单摸个 🐟。
那么问题来了,具体交给谁做呢?我看向了我的同事和研发大爷们 。经过几百回的试探和心理博弈后,研发大爷们均以“人力不够”、“优先级低”等借口来拒绝我。而且咱们研发工作日做牛做马,一到周末直接原地消失了,一看 GitHub 热力图,周六、周日都是空的。
补充:不过这也说明百度还算是一个遵守劳动法的公司,周末都是双休的~
然后,我把我的目光转向了社区开发者们 。哎,发现他们的开源热情似乎还是很高涨的,有的开发者甚至把开源视为人生价值(“工作就是图一乐”、“人生价值实现还得靠开源”)我又翻了翻一些社区开发者的 GitHub 热力图,一看吓一跳 😮,绿油油的一片,7*24 小时全职开源。
至此之后呢,我就把 “把活儿交给社区开发者” ,作为我摸 🐟 的核心思想。
但是,怎么“把活儿交给社区开发者”,也是需要讲点基本法的,所以我总结了两条方法~
03-「把活儿交给社区开发者」初级版 首先,我先介绍一下初级版,即把一些 明确的轻量级任务 交给社区开发者做。
怎么理解呢?其实很多问题已经由社区开发者和内部研发进行多轮讨论了,并经过 任务拆解 后,形成了可以直接去上手做的轻量级任务。这些轻量级任务最终会公布到社区,并以 tracking issue 的形式进行发布和追踪,下图右方就是部分的这类任务。
因为这些任务相对简单、好上手,社区开发者反馈其实非常好,有些人可能周末会去做,有些人甚至上班摸鱼的时候也在做。
发布这类任务的优点 在于——因为任务比较简单,“啪”的一下做的很快,完成率又特别高。更重要的是,开发者也会很愉悦,比如花一个小时提一个 PR 上来,就能把任务做完了,很容易带来满足感~(而且也会有小礼品)
不过这类任务也有一些缺点 ——这些任务需要花精力进行任务的拆解、详细的描述,甚至还可能需要指导和大量的 Review。所以这 🐟 虽然摸了,但只摸了一半。
03-「把活儿交给社区开发者」终极摸鱼版 基于上述,我之后又总结了终极摸鱼版的方法,就是 把问题交由社区开发者来主导 。
怎么理解呢?就是我们飞桨只提供大概的题目和方向,由社区开发者根据问题 自行进行拆解 ,然后在我们的指导下开展任务。比较典型的是 《将 xdoctest 引入飞桨工作流 》 ,这个题目是由社区开发者顺师傅(@megemini )来完成的。
xdoctest 是一个文档示例代码的检查工具。
从下面右半边可以看到,顺师傅按自己的理解对任务进行拆解,分为不同的阶段,并有条不紊的完成。并且还衍生出了一些批量的社区任务,比如全量的修改了飞桨一千多个 API 的示例代码。这是一个人完成不了的,需要号召更多的社区开发者来参与,因此这个项目也极大调动了整个社区的氛围和活力。
所以说,其实把问题交给社区开发者主导,会有很多积极的方面~一方面能够帮我们分担了很大的研发精力(帮我们摸 🐟),另一方面也会不经意间对整个社区有正向的影响力。
04-摸 🐟 的前提条件 最后也提一下,其实摸鱼也有很多前提条件,需要有良好的社区氛围 、丝滑的社区交流 、研发的大力支持 和运营的宣传推广 ...这些条件都是缺一不可的~所以虽然是摸鱼,但也需要遵循很多客观规律。
以上是我演讲的全部内容,感谢大家的观看~
',41)]))}const v=s(m,[["render",d]]);export{x as __pageData,v as default};
diff --git a/assets/posts_nknan-story.md.sa0Z9qZh.js b/assets/posts_nknan-story.md.sa0Z9qZh.js
new file mode 100644
index 0000000..edc4b7f
--- /dev/null
+++ b/assets/posts_nknan-story.md.sa0Z9qZh.js
@@ -0,0 +1 @@
+import{M as s,_ as e}from"./chunks/MessageBox.CshcSYCA.js";import{c as r,k as o,i as a,s as n,a as l,v as i,o as g}from"./chunks/framework.D1-4jGi8.js";const N="/assets/NKNaN-1.L6B9mBNY.jpeg",p="/assets/NKNaN-2.DsOESAXA.jpeg",u="/assets/NKNaN-3.BgREEBki.jpeg",f="/assets/NKNaN-4.aUQgvqgN.jpeg",d="/assets/NKNaN-5.CRSa-9AH.jpeg",m="/assets/NKNaN-6.Cs90Nvon.jpeg",K="/assets/NKNaN-7.BpooYvDx.jpeg",b="/assets/NKNaN-8.DxaDPc8s.jpeg",h="/assets/NKNaN-9.BRRQUkq7.jpeg",y="/assets/NKNaN-10.OH6Ys9wN.jpeg",x=JSON.parse('{"title":"【开源江湖闲聊录】从代码到键盘外的世界,走进 NKNaN 的日常","description":"","frontmatter":{"title":"【开源江湖闲聊录】从代码到键盘外的世界,走进 NKNaN 的日常","date":"2024-4-26","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"李睿文","github":"NKNaN"}]},"headers":[],"relativePath":"posts/nknan-story.md","filePath":"posts/nknan-story.md"}'),k={name:"posts/nknan-story.md"},w=Object.assign(k,{setup(_){return(P,t)=>(g(),r("div",null,[t[22]||(t[22]=o('大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
一、前言 NKNaN 是我们社区中的一位特别的成员,她不仅是我们社区中少有的女性猛将,更是一个勇敢跨界的探索者。从西安的古城墙到香港的繁华街道,再到可能的北美新生活,她的脚步从未停歇。她的学术之旅横跨金融、数学和计算机科学,每一步都显得那么自然而充满挑战。
NKNaN 的职业生涯同样精彩纷呈——她曾冲动地辞去稳定的工作,追寻博士学位的梦想,但在一年后,她又勇敢地决定放弃,选择重新探索适合自己的道路。无论是在学术界还是生活中,NKNaN 都以她独有的风格和魅力,展示了自己对生活的热情和对技术的执着。
她的故事不仅充满了色彩,还散发着温暖的光芒。让我们一起走进 NKNaN 的世界,看她如何在技术的大潮中保持真我,用代码和智慧编织自己的梦想,享受那份难得的轻松和自在。
二、采访内容 介绍一下自己吧,Nan 佬!
NKNaN: 哈喽大家好,我是百度飞桨社区的个人开发者 NKNaN,非常荣幸能够被选中参与这次采访~我老家在西安,本科毕业于香港理工大学金融服务专业,(水)master 毕业于香港科技大学金融科技专业。因为想要出国看看外面的世界,目前正在申请北美的 CS 项目。关于我自己的话,平时比较宅,喜欢室内的活动,撸猫、弹钢琴、看动画片、写代码;偶尔外出,外出的话喜欢随手拍拍风景?MBTI 是 INFJ,还被人誉为 I 人中的 I 人。
撸猫 看透一切的猫猫 随拍 看到你本科在香港理工大学就读工商管理专业,可以聊聊当时为什么选择这个专业呀?以及为什么选择去香港读书?
NKNaN: 专业是家里人给我选的。因为我爸妈都在银行工作,他们就觉得学了这个,以后进银行比较方便呗~
选择去香港也是父母决定,他们可能觉得香港是亚洲金融中心之类的,更加国际化一点。所以当时高考完了之后,父母告诉我可以选择香港这条路,就用高考成绩给我报了香港的学校。当时香港所有学校都申了,但港前三所都要面试,我英语口语又差,就挂掉了,最后还是选择了港理工。
但现在回过头看看决策还挺失误的,一开始就没有规划好就选择了去香港。这人生地不熟的,又不能转专业,还是太听父母话了。
本科大二最后一次去维港,之后疫情就回家网课了qaq 觉得失误是因为对本科专业不太喜欢吗?但看你本科专业学的很好、绩点非常高,还获得了学院杰出学术成就奖!
NKNaN: 这个奖是按每一年小专业的排名发的,如果在本专业排前三的话就能获得。可能我们专业比较废,大部分人都比较菜,像其他那些小专业的获奖大佬,他们的分数就比我高。
而且其实我的专业算是文科。文科怎么说呢,学和不学感觉好像没啥区别?像我们绝大部分课程的 assessment,很大一部分得分占比是通过写 essay 来拿分,但 essay 人家愿意给你几分就给你几分,纯看人家的心情。所以这边也奉劝大家,如果对自己写文商课小论文的能力没有十足把握千万不要来学商科!!
另外,商科如果想学得好,英语好是最基础的。家里资源也要好,还不能是 i 人!像做 presentation 的时候,必须要表现的很 expressive,要能说(吹)出来好多东西。但我就是 i 人,不太适合商科这种风格,还是喜欢做一些具象化的成果。
所以本科的时候就想转计算机了,但学校太坑太死板了,不让转专业,就只能去辅修。当时成绩好的人都会去辅修数学或者计算机(好多人都去辅修计算机)因为我的 GPA 不够,最后就选择辅修数学了~其实自己也想往计算机方面靠,就自学了 Machine Learning 之类的课程,后来读的 master 也是香港科技大学的金融科技专业。
想学计算机是因为兴趣吗?还是因为赚钱多呀(笑)
NKNaN: 一开始确实是基于自己兴趣吧,后来发现这个赚钱确实也挺多的~不过感觉对计算机感兴趣的女孩子确实可能比较少一点。
研究生毕业之后,你在上海某银行的金融科技子公司短暂工作了一年,可以讲讲吗?
NKNaN: (先给公司打个码)我当时入职了智能风控组,主要是用机器学习模型给风控项目做建模,比较传统和偏业务。但实际上做的事情挺杂的,还会做一些客户信用评分卡评级之类的事,会用到一些统计学习模型,基本就是调调参数。我自己对这种工作没有非常大的热情,想看看能不能读个博提升一下(虽然后来发现读错了),就有点冲动的裸辞了,也不建议大家学习。
不过那里的团队氛围真心很 nice,大家的关系都很融洽,比较扁平化,入职之后会有很多破冰以及团建的活动,平时也会互相分享技术心得。
上海某公园团建-1 上海某公园团建-2 冲动是因为受到刺激了吗?
NKNaN: 对,确实有点受刺激。那份工作工资很少,一个月没有补贴的时候只有 9k,有补贴的时候也只有一万多一点(应届生刚进来的工资),这还是在上海!向上发展的路线我也比较迷茫,走技术路线在那里好像待遇一般,走管理路线又不太适合我。而且杂事也多,像处理一些数据都算正事了,很多时候会做和工作完全无关的事,就比如说组织什么活动、清点一下资产、给部门 HR 做助理……给人分工很不明确的感觉。
但其实如果一直待在那里也可以安安稳稳的,只是我自己不太喜欢能一眼望得到头的生活,每个人的选择不一样啦。
那之后去读博是什么感觉~以及读了一年后为什么又选择 quit?
NKNaN: 在 2023 年 9 月我去港理工攻读 PhD,但工作其实 5 月就辞了,因为那会儿导师已经开始给我做一些数学基础和科研能力的训练(做题和读 paper)。我导师挺 push 的,一周要开三次组会,其中我要主讲两次——一次是论文进度、一次是讲做的习题。然后还有一次相当于旁听,但是旁听也不能只听着,得发表意见参与进来,很累。
而且我导师是属于应用数学学院下的,她是想把传统的统计学和 Machine Learning 结合,做一些统计迁移学习,而不是用目前流行的 Deep Learning,这就对数学能力要求比较高。虽然我本科辅修了数学,但还是觉得自己的数学基础能力不太够,可能看 paper 的时候理解的会容易一点,不过理解和自己推出来这两者差别是很大的(真的推不了一点)。
可是我能力太差了,光是训练就把我搞懵了。如果按我当前这个速度去读博,可能得要五年……导师对我期望值也很高,想着三年就毕业吧,弄得我压力很大。而且对于这个方向我也不是很感兴趣,感觉太传统了,所以最后还是决定 quit。
所以选择 quit 一方面是压力大,另一方面是方向不太合适?
NKNaN: 是的。除非你本科就是学数学的,已经经过三到四年的严格专业训练,然后再去读这个博士,可能收获会更大吧~或者找一个计算机系的教授,跟着做深度学习可能更适合我。
你这些年在香港待了也挺久的,喜欢香港文化吗?粤语会说吗?
NKNaN: 我觉得对香港没有那么喜欢,因为有时候遇到一些比较排外的 local,体验会挺差的。
粤语的话我到现在还不太会说,可能我语言天赋太差了。像我室友她语言就比我好的多,我跟她一起备考 GRE,她只复习了一两个月就考到了 325,而我当时考的可低了,后面又复习了两个月才考到了这分数。她一开始英语说的就很好,之后粤语学也很快,一两年就学会了,我到现在还会听不懂一些对话。另外主要是自己也不太想学粤语,感觉可难了,音调那么多,粤语的拼音发音又和中文的拼音不一样,不太规则。
港科食堂,风景属实不戳 那在日常生活中,你一般会做什么呀?
NKNaN: 生活上我感觉因为我是 I 所以就很少社交了,除了前面提到的那些,还喜欢自己研究一些好玩的东西~比如一开始在中国大学慕课网学 Python 编程的时候,就会跟着做一些比较有意思的小项目。在学校里也修了 C++,后面为了找开发工作还学了 Java,顺便自己做了康威生命游戏 ,就是一个界面,里面有黑白小格子可以点点点,现在看是个挺无聊的一游戏了~其实本来想着学机器学习,但后来跟着做了这些开发项目后,觉得这些语言也挺有意思的,包括最近我还在学习一些前端知识。
当然也用照片套模型炼过自己(雾) 为数不多的主角是自己的外出照片 聊聊开源吧~是什么契机接触飞桨的呀?
NKNaN: 在去年五六月的时候,我想做一些开源项目提升一下。因为当时抱有一个目的——进大厂,所以觉得做一些开源项目应该是有好处的,然后想做深度学习领域的开源项目,就去 GitHub 搜一些国内的深度学习社区嘛,看到 Paddle 仓库有一个 project —— call for contribution,在里边的列表里看到 PaddleScience 有个题目,需要做 HamiltonianMonteCarlo(HMC)API。MonteCarlo 我肯定是知道的,但对 HMC 不太熟悉,我就搜了一下是啥样子的,感觉应该还挺好实现的,就帮着做了一下。
像科学计算、API 功能增强之类的开源任务都有一定挑战性的,但对你这样的大佬来说是不是难度不大?
NKNaN: 难度我觉得对我而言主要还是在于理解这个框架吧,就是理解框架背后的原理。因为像 MonteCarlo 这样的 API 底层本身应该是很好写的,给一个数学公式,如果能看懂就可以写出来吧!但要把它适配到这个框架里面,是需要花一定时间的。我自己的开发经验少,接触的开发项目也少,所以当时半天看不懂为什么这块儿要这么写,那块要那么写~
身为一名很厉害的女性开发者,你觉得在工作或者学术中会存在大家对女性的一些刻板印象吗?
NKNaN: 这个我感觉可能国内有的地方确实会有这种现象吧,就是说比如说找工作的时候,像涛姐写的那样,在简历上就不会写上自己的性别。然后不仅是开发者这个职业,包括其他的一些工作,在一些国企里面,好像也更偏向于男生,可能因为出于传统刻板印象,他们觉得女生事儿多,担不起大梁。
读 PhD 的时候倒是完全没有这类问题,因为导师本身自己也是女性。她也非常提倡有女孩子能来跟她读博,她不会觉得性别是一个做研究上的一个障碍吧。这方面可能在发达地区不会有那么严重的性别歧视。
之后有什么打算吗?是继续深造还是工作~
NKNaN: 现在想准备去加拿大读一个 master 之类的,因为想要去国外看看。
我感觉自己年纪有点大了,都 25 了,也有点年龄焦虑。我父母也会觉得读出来都二十七八了,有点晚了,所以大概率就是读完 master 之后找个开发的工作~
其实我一开始还挺想去做学术研究的,但是后来发现做研究就得没日没夜,有点不对劲,完全没有 work life balance。你可能每天都得干到晚上 12 点,一点都不快乐,所以现在看起来开发应该会比做研究轻松一点吧~
最后给我们社区的小伙伴说几句话吧!
NKNaN: 我感觉来社区里的大家,肯定都是很有自己想法的开发者~我自己也很随性很散漫,所以就希望大家能去做自己想做的,成为自己想成为的人,不要在意外界的闲言碎语,遵从自己的内心就好~
GitHub头像原图照骗 三、两分钟快问快答 ',8)),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[0]||(t[0]=[i(" 最喜欢的编程语言? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[1]||(t[1]=[i(" Python ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[2]||(t[2]=[i(" 早起还是夜猫子? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[3]||(t[3]=[i(" 夜猫子 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[4]||(t[4]=[i(" 最喜欢的科技产品? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[5]||(t[5]=[i(" 平板电脑? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[6]||(t[6]=[i(" 最常用的app? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[7]||(t[7]=[i(" 微信 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[8]||(t[8]=[i(" 最近读的一本书? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[9]||(t[9]=[i(" 海伯利安 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[10]||(t[10]=[i(" 最喜欢的电影或电视剧? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[11]||(t[11]=[i(" 盗梦空间 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[12]||(t[12]=[i(" 必备的零食? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[13]||(t[13]=[i(" 可乐 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[14]||(t[14]=[i(" 喜欢的音乐类型或歌手? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[15]||(t[15]=[i(" 中世纪吟唱风 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[16]||(t[16]=[i(" 喜欢猫还是狗? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[17]||(t[17]=[i(" 猫 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[18]||(t[18]=[i(" 出门必备的三样东西是什么? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[19]||(t[19]=[i(" 伞,口罩,手机 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[20]||(t[20]=[i(" 如果不做开发,最想尝试的职业? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[21]||(t[21]=[i(" 自由职业 ")])),_:1})]),_:1}),t[23]||(t[23]=l("hr",null,null,-1)),t[24]||(t[24]=l("h2",{id:"写在最后-💡",tabindex:"-1"},[i("写在最后 💡 "),l("a",{class:"header-anchor",href:"#写在最后-💡","aria-label":'Permalink to "写在最后 💡"'},"")],-1)),t[25]||(t[25]=l("p",null,[l("strong",null,"【开源江湖闲聊录】"),i(" 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。")],-1)),t[26]||(t[26]=l("p",null,[i("如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,"),l("strong",null,"急缺助手!")],-1)),t[27]||(t[27]=l("hr",null,null,-1))]))}});export{x as __pageData,w as default};
diff --git a/assets/posts_nknan-story.md.sa0Z9qZh.lean.js b/assets/posts_nknan-story.md.sa0Z9qZh.lean.js
new file mode 100644
index 0000000..edc4b7f
--- /dev/null
+++ b/assets/posts_nknan-story.md.sa0Z9qZh.lean.js
@@ -0,0 +1 @@
+import{M as s,_ as e}from"./chunks/MessageBox.CshcSYCA.js";import{c as r,k as o,i as a,s as n,a as l,v as i,o as g}from"./chunks/framework.D1-4jGi8.js";const N="/assets/NKNaN-1.L6B9mBNY.jpeg",p="/assets/NKNaN-2.DsOESAXA.jpeg",u="/assets/NKNaN-3.BgREEBki.jpeg",f="/assets/NKNaN-4.aUQgvqgN.jpeg",d="/assets/NKNaN-5.CRSa-9AH.jpeg",m="/assets/NKNaN-6.Cs90Nvon.jpeg",K="/assets/NKNaN-7.BpooYvDx.jpeg",b="/assets/NKNaN-8.DxaDPc8s.jpeg",h="/assets/NKNaN-9.BRRQUkq7.jpeg",y="/assets/NKNaN-10.OH6Ys9wN.jpeg",x=JSON.parse('{"title":"【开源江湖闲聊录】从代码到键盘外的世界,走进 NKNaN 的日常","description":"","frontmatter":{"title":"【开源江湖闲聊录】从代码到键盘外的世界,走进 NKNaN 的日常","date":"2024-4-26","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"李睿文","github":"NKNaN"}]},"headers":[],"relativePath":"posts/nknan-story.md","filePath":"posts/nknan-story.md"}'),k={name:"posts/nknan-story.md"},w=Object.assign(k,{setup(_){return(P,t)=>(g(),r("div",null,[t[22]||(t[22]=o('大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
一、前言 NKNaN 是我们社区中的一位特别的成员,她不仅是我们社区中少有的女性猛将,更是一个勇敢跨界的探索者。从西安的古城墙到香港的繁华街道,再到可能的北美新生活,她的脚步从未停歇。她的学术之旅横跨金融、数学和计算机科学,每一步都显得那么自然而充满挑战。
NKNaN 的职业生涯同样精彩纷呈——她曾冲动地辞去稳定的工作,追寻博士学位的梦想,但在一年后,她又勇敢地决定放弃,选择重新探索适合自己的道路。无论是在学术界还是生活中,NKNaN 都以她独有的风格和魅力,展示了自己对生活的热情和对技术的执着。
她的故事不仅充满了色彩,还散发着温暖的光芒。让我们一起走进 NKNaN 的世界,看她如何在技术的大潮中保持真我,用代码和智慧编织自己的梦想,享受那份难得的轻松和自在。
二、采访内容 介绍一下自己吧,Nan 佬!
NKNaN: 哈喽大家好,我是百度飞桨社区的个人开发者 NKNaN,非常荣幸能够被选中参与这次采访~我老家在西安,本科毕业于香港理工大学金融服务专业,(水)master 毕业于香港科技大学金融科技专业。因为想要出国看看外面的世界,目前正在申请北美的 CS 项目。关于我自己的话,平时比较宅,喜欢室内的活动,撸猫、弹钢琴、看动画片、写代码;偶尔外出,外出的话喜欢随手拍拍风景?MBTI 是 INFJ,还被人誉为 I 人中的 I 人。
撸猫 看透一切的猫猫 随拍 看到你本科在香港理工大学就读工商管理专业,可以聊聊当时为什么选择这个专业呀?以及为什么选择去香港读书?
NKNaN: 专业是家里人给我选的。因为我爸妈都在银行工作,他们就觉得学了这个,以后进银行比较方便呗~
选择去香港也是父母决定,他们可能觉得香港是亚洲金融中心之类的,更加国际化一点。所以当时高考完了之后,父母告诉我可以选择香港这条路,就用高考成绩给我报了香港的学校。当时香港所有学校都申了,但港前三所都要面试,我英语口语又差,就挂掉了,最后还是选择了港理工。
但现在回过头看看决策还挺失误的,一开始就没有规划好就选择了去香港。这人生地不熟的,又不能转专业,还是太听父母话了。
本科大二最后一次去维港,之后疫情就回家网课了qaq 觉得失误是因为对本科专业不太喜欢吗?但看你本科专业学的很好、绩点非常高,还获得了学院杰出学术成就奖!
NKNaN: 这个奖是按每一年小专业的排名发的,如果在本专业排前三的话就能获得。可能我们专业比较废,大部分人都比较菜,像其他那些小专业的获奖大佬,他们的分数就比我高。
而且其实我的专业算是文科。文科怎么说呢,学和不学感觉好像没啥区别?像我们绝大部分课程的 assessment,很大一部分得分占比是通过写 essay 来拿分,但 essay 人家愿意给你几分就给你几分,纯看人家的心情。所以这边也奉劝大家,如果对自己写文商课小论文的能力没有十足把握千万不要来学商科!!
另外,商科如果想学得好,英语好是最基础的。家里资源也要好,还不能是 i 人!像做 presentation 的时候,必须要表现的很 expressive,要能说(吹)出来好多东西。但我就是 i 人,不太适合商科这种风格,还是喜欢做一些具象化的成果。
所以本科的时候就想转计算机了,但学校太坑太死板了,不让转专业,就只能去辅修。当时成绩好的人都会去辅修数学或者计算机(好多人都去辅修计算机)因为我的 GPA 不够,最后就选择辅修数学了~其实自己也想往计算机方面靠,就自学了 Machine Learning 之类的课程,后来读的 master 也是香港科技大学的金融科技专业。
想学计算机是因为兴趣吗?还是因为赚钱多呀(笑)
NKNaN: 一开始确实是基于自己兴趣吧,后来发现这个赚钱确实也挺多的~不过感觉对计算机感兴趣的女孩子确实可能比较少一点。
研究生毕业之后,你在上海某银行的金融科技子公司短暂工作了一年,可以讲讲吗?
NKNaN: (先给公司打个码)我当时入职了智能风控组,主要是用机器学习模型给风控项目做建模,比较传统和偏业务。但实际上做的事情挺杂的,还会做一些客户信用评分卡评级之类的事,会用到一些统计学习模型,基本就是调调参数。我自己对这种工作没有非常大的热情,想看看能不能读个博提升一下(虽然后来发现读错了),就有点冲动的裸辞了,也不建议大家学习。
不过那里的团队氛围真心很 nice,大家的关系都很融洽,比较扁平化,入职之后会有很多破冰以及团建的活动,平时也会互相分享技术心得。
上海某公园团建-1 上海某公园团建-2 冲动是因为受到刺激了吗?
NKNaN: 对,确实有点受刺激。那份工作工资很少,一个月没有补贴的时候只有 9k,有补贴的时候也只有一万多一点(应届生刚进来的工资),这还是在上海!向上发展的路线我也比较迷茫,走技术路线在那里好像待遇一般,走管理路线又不太适合我。而且杂事也多,像处理一些数据都算正事了,很多时候会做和工作完全无关的事,就比如说组织什么活动、清点一下资产、给部门 HR 做助理……给人分工很不明确的感觉。
但其实如果一直待在那里也可以安安稳稳的,只是我自己不太喜欢能一眼望得到头的生活,每个人的选择不一样啦。
那之后去读博是什么感觉~以及读了一年后为什么又选择 quit?
NKNaN: 在 2023 年 9 月我去港理工攻读 PhD,但工作其实 5 月就辞了,因为那会儿导师已经开始给我做一些数学基础和科研能力的训练(做题和读 paper)。我导师挺 push 的,一周要开三次组会,其中我要主讲两次——一次是论文进度、一次是讲做的习题。然后还有一次相当于旁听,但是旁听也不能只听着,得发表意见参与进来,很累。
而且我导师是属于应用数学学院下的,她是想把传统的统计学和 Machine Learning 结合,做一些统计迁移学习,而不是用目前流行的 Deep Learning,这就对数学能力要求比较高。虽然我本科辅修了数学,但还是觉得自己的数学基础能力不太够,可能看 paper 的时候理解的会容易一点,不过理解和自己推出来这两者差别是很大的(真的推不了一点)。
可是我能力太差了,光是训练就把我搞懵了。如果按我当前这个速度去读博,可能得要五年……导师对我期望值也很高,想着三年就毕业吧,弄得我压力很大。而且对于这个方向我也不是很感兴趣,感觉太传统了,所以最后还是决定 quit。
所以选择 quit 一方面是压力大,另一方面是方向不太合适?
NKNaN: 是的。除非你本科就是学数学的,已经经过三到四年的严格专业训练,然后再去读这个博士,可能收获会更大吧~或者找一个计算机系的教授,跟着做深度学习可能更适合我。
你这些年在香港待了也挺久的,喜欢香港文化吗?粤语会说吗?
NKNaN: 我觉得对香港没有那么喜欢,因为有时候遇到一些比较排外的 local,体验会挺差的。
粤语的话我到现在还不太会说,可能我语言天赋太差了。像我室友她语言就比我好的多,我跟她一起备考 GRE,她只复习了一两个月就考到了 325,而我当时考的可低了,后面又复习了两个月才考到了这分数。她一开始英语说的就很好,之后粤语学也很快,一两年就学会了,我到现在还会听不懂一些对话。另外主要是自己也不太想学粤语,感觉可难了,音调那么多,粤语的拼音发音又和中文的拼音不一样,不太规则。
港科食堂,风景属实不戳 那在日常生活中,你一般会做什么呀?
NKNaN: 生活上我感觉因为我是 I 所以就很少社交了,除了前面提到的那些,还喜欢自己研究一些好玩的东西~比如一开始在中国大学慕课网学 Python 编程的时候,就会跟着做一些比较有意思的小项目。在学校里也修了 C++,后面为了找开发工作还学了 Java,顺便自己做了康威生命游戏 ,就是一个界面,里面有黑白小格子可以点点点,现在看是个挺无聊的一游戏了~其实本来想着学机器学习,但后来跟着做了这些开发项目后,觉得这些语言也挺有意思的,包括最近我还在学习一些前端知识。
当然也用照片套模型炼过自己(雾) 为数不多的主角是自己的外出照片 聊聊开源吧~是什么契机接触飞桨的呀?
NKNaN: 在去年五六月的时候,我想做一些开源项目提升一下。因为当时抱有一个目的——进大厂,所以觉得做一些开源项目应该是有好处的,然后想做深度学习领域的开源项目,就去 GitHub 搜一些国内的深度学习社区嘛,看到 Paddle 仓库有一个 project —— call for contribution,在里边的列表里看到 PaddleScience 有个题目,需要做 HamiltonianMonteCarlo(HMC)API。MonteCarlo 我肯定是知道的,但对 HMC 不太熟悉,我就搜了一下是啥样子的,感觉应该还挺好实现的,就帮着做了一下。
像科学计算、API 功能增强之类的开源任务都有一定挑战性的,但对你这样的大佬来说是不是难度不大?
NKNaN: 难度我觉得对我而言主要还是在于理解这个框架吧,就是理解框架背后的原理。因为像 MonteCarlo 这样的 API 底层本身应该是很好写的,给一个数学公式,如果能看懂就可以写出来吧!但要把它适配到这个框架里面,是需要花一定时间的。我自己的开发经验少,接触的开发项目也少,所以当时半天看不懂为什么这块儿要这么写,那块要那么写~
身为一名很厉害的女性开发者,你觉得在工作或者学术中会存在大家对女性的一些刻板印象吗?
NKNaN: 这个我感觉可能国内有的地方确实会有这种现象吧,就是说比如说找工作的时候,像涛姐写的那样,在简历上就不会写上自己的性别。然后不仅是开发者这个职业,包括其他的一些工作,在一些国企里面,好像也更偏向于男生,可能因为出于传统刻板印象,他们觉得女生事儿多,担不起大梁。
读 PhD 的时候倒是完全没有这类问题,因为导师本身自己也是女性。她也非常提倡有女孩子能来跟她读博,她不会觉得性别是一个做研究上的一个障碍吧。这方面可能在发达地区不会有那么严重的性别歧视。
之后有什么打算吗?是继续深造还是工作~
NKNaN: 现在想准备去加拿大读一个 master 之类的,因为想要去国外看看。
我感觉自己年纪有点大了,都 25 了,也有点年龄焦虑。我父母也会觉得读出来都二十七八了,有点晚了,所以大概率就是读完 master 之后找个开发的工作~
其实我一开始还挺想去做学术研究的,但是后来发现做研究就得没日没夜,有点不对劲,完全没有 work life balance。你可能每天都得干到晚上 12 点,一点都不快乐,所以现在看起来开发应该会比做研究轻松一点吧~
最后给我们社区的小伙伴说几句话吧!
NKNaN: 我感觉来社区里的大家,肯定都是很有自己想法的开发者~我自己也很随性很散漫,所以就希望大家能去做自己想做的,成为自己想成为的人,不要在意外界的闲言碎语,遵从自己的内心就好~
GitHub头像原图照骗 三、两分钟快问快答 ',8)),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[0]||(t[0]=[i(" 最喜欢的编程语言? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[1]||(t[1]=[i(" Python ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[2]||(t[2]=[i(" 早起还是夜猫子? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[3]||(t[3]=[i(" 夜猫子 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[4]||(t[4]=[i(" 最喜欢的科技产品? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[5]||(t[5]=[i(" 平板电脑? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[6]||(t[6]=[i(" 最常用的app? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[7]||(t[7]=[i(" 微信 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[8]||(t[8]=[i(" 最近读的一本书? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[9]||(t[9]=[i(" 海伯利安 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[10]||(t[10]=[i(" 最喜欢的电影或电视剧? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[11]||(t[11]=[i(" 盗梦空间 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[12]||(t[12]=[i(" 必备的零食? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[13]||(t[13]=[i(" 可乐 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[14]||(t[14]=[i(" 喜欢的音乐类型或歌手? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[15]||(t[15]=[i(" 中世纪吟唱风 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[16]||(t[16]=[i(" 喜欢猫还是狗? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[17]||(t[17]=[i(" 猫 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[18]||(t[18]=[i(" 出门必备的三样东西是什么? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[19]||(t[19]=[i(" 伞,口罩,手机 ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{name:"孙师傅",github:"sunzhongkai588"},{default:n(()=>t[20]||(t[20]=[i(" 如果不做开发,最想尝试的职业? ")])),_:1})]),_:1}),a(s,null,{default:n(()=>[a(e,{type:"right",name:"NKNaN",github:"NKNaN"},{default:n(()=>t[21]||(t[21]=[i(" 自由职业 ")])),_:1})]),_:1}),t[23]||(t[23]=l("hr",null,null,-1)),t[24]||(t[24]=l("h2",{id:"写在最后-💡",tabindex:"-1"},[i("写在最后 💡 "),l("a",{class:"header-anchor",href:"#写在最后-💡","aria-label":'Permalink to "写在最后 💡"'},"")],-1)),t[25]||(t[25]=l("p",null,[l("strong",null,"【开源江湖闲聊录】"),i(" 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。")],-1)),t[26]||(t[26]=l("p",null,[i("如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,"),l("strong",null,"急缺助手!")],-1)),t[27]||(t[27]=l("hr",null,null,-1))]))}});export{x as __pageData,w as default};
diff --git a/assets/posts_paddle-pipeline-parallel.md.CxsJxymH.js b/assets/posts_paddle-pipeline-parallel.md.CxsJxymH.js
new file mode 100644
index 0000000..fdfa86b
--- /dev/null
+++ b/assets/posts_paddle-pipeline-parallel.md.CxsJxymH.js
@@ -0,0 +1,625 @@
+import{_ as i,c as a,k as n,o as p}from"./chunks/framework.D1-4jGi8.js";const l="/assets/7fb96083be8628ce2b5fc11951251e36ea5d46ffb7fb8409c1f2cdf55afda521.CrCDcQl4.jpg",h="/assets/42e5a90abf00a492f23160dbf9ff037623645b44ae902e49b23578f6a5f62b2f.VEZ2fne-.jpg",k="/assets/8ee7403adb680995a09f570c906b7fcfe433e4b504ce6f52e44727b07a96dfb6.Cnn_fxkP.jpg",t="/assets/2443fea068b43f57f4571d2e1ad35afe9d1de3a8c69491d0c390b3705835a665.DvCLRz6d.jpg",e="/assets/1ac95bbf288d8509d7db6ab46ce0bae6aa03dccbe4c6d1ea84e1b02c8108550a.BPnKQHQQ.jpg",E="/assets/ef6685e22ae1f3433ea2495c2d0633e697a0d37de6020d4e23e6fa58c826e540.CNqZ2WSd.jpg",r="/assets/6935a194889bb7a55f17c0bb45cb6a4395ef63c6d6fcfe24154eafee61e8c451.DOSAFxhw.jpg",d="/assets/e36dd9884d123d949f5dd7847461757f2d6a30cb2b2cd25aa58dae41c0917ed1.CEfakBZ6.jpg",g="/assets/9c0fc9d4f5f7045fac7aafcfa4e9021da7762dc5d3dccb813fc5d8cf134a687d.CdLOhkq3.jpg",y="/assets/ac0590be474ceb2ce695085a1f2178860592b650d9be2ce428de15ff2b4f93a8.D0RN5-Xt.jpg",u=JSON.parse('{"title":"Paddle 静态图并行编排与执行流程","description":"","frontmatter":{"title":"Paddle 静态图并行编排与执行流程","date":"2024-07-05T00:00:00.000Z","author":{"name":"卢畅","github":"andsonder"},"theme":"vitesse-light"},"headers":[],"relativePath":"posts/paddle-pipeline-parallel.md","filePath":"posts/paddle-pipeline-parallel.md"}'),o={name:"posts/paddle-pipeline-parallel.md"};function c(F,s,_,b,A,D){return p(),a("div",null,s[0]||(s[0]=[n('paddle3.0 中自动并行是一项重要的升级点,今天我们来聊一聊 Paddle 中的静态图流水并行。大家也可以去翻一翻我的个人博客 ,里面有很多好康的(X)
一、分布式集合通信模式 集合通信模型适合处理 CV/NLP 领域这样具有稠密参数的模型。它有多种方式将数据/模型切分到多个设备上。每个设备可以成为一个 Worker,每个 Worker 都需要及时的知道全局梯度信息。这样的话,每个 Worker 都需要将自己的梯度信息发送给其他的 Worker ,同时也需要接收其他 Worker 的梯度信息。这样的通信方式就是集合通信模式。
集合通信有好几种并行方式:
下面我们分别进行介绍:
1.1 数据并行 纯数据并行模式下数据集被平均分为多份,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。
数据并行适用于模型参数较少的情况,一张卡可以放下完整的模型参数。这样的策略能让我们增加 batch_size,加快训练速度
下图详细的说明了纯数据并行的训练流程:
如图数据集平均分为多份 data partition1
和 data partition2
,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。在数据并行训练过程中,每个卡上的输入数据是不同的。各个卡独立地执行网络的前向运算和反向计算,计算出各自卡上的参数梯度。随后,使用 AllReduce 等集合通信原语,将各个卡上计算出的参数梯度进行累加聚合,得到最终的全局参数梯度。最后,全局参数梯度进入优化器进行参数更新,完成一个完整的 mini-batch 训练流程。图中的箭头表示了各个卡之间的通信过程。
集合通信原语是集合通信的基础操作的集合,如广播(Broadcast)、收集(Gather)、分散(Scatter)、规约(Reduce)等。其中规约是指将集群内多个节点将数据发送给一个节点,这个节点会使用接收到的数据集中运算,如累加、累积、均值、方差等等。而上文提到的 AllReduce 则是指多对多的规约,即有多个数据发送节点和多个数据接收节点,所有节点的规约运算结果会广播到所有节点上。
当数据集较大,模型较小时,由于反向过程中为同步梯度产生的通信代价较小,此时选择数据并行一般比较有优势,常见的视觉分类模型,如 ResNet50,比较适合采用数据并行。
1.2 模型并行 在模型参数较多的情况下,一张卡无法放下完整的模型参数,这时候就需要将模型参数切分到多张卡上,让我们先通过一张图了解一下模型并行的原理:
模型并行的情况下每个设备上的数据都是一样的,只有模型被拆分到了各个设备上。每个设备只拥有模型的一部分,所有计算设备上的模型拼在一起,才是完整的模型。
如图想要得到最终的计算结果需要将 Device0
和 Device1
的计算结果进行拼接后才能得到最终的计算结果。
1.3 流水并行 1.3.1 朴素流水并行 流水线并行是模型并行的一种,其原理是把模型的不同层放置在不同卡上运行,参数也按层分配到不同的卡上,以降低模型的显存占用。
如下图所示,网络共包含 4 层,我们可以把第 0 层放置在卡 0 上运行,第 1 层和第 2 层放置在卡 1 上运行,第 4 层放置在卡 2 上运行。在训练过程中,卡 0 接收输入数据进行计算,并将计算结果发送给卡 1;卡 1 接收到卡 0 的计算结果后进行计算,并将计算结果发送给卡 2;卡 2 接收到卡 1 的计算结果后进行计算,得到损失函数值,完成前向计算。反向计算逻辑与前向刚好相反。 这个过程就像是流水线一样,每个卡都在处理不同的数据,从而提高了训练效率。
朴素流水并行的缺点:
在任意给定时刻,除了一个 GPU 之外的其他所有 GPU 都是空闲的。因此,如果使用 4 个 GPU,则几乎等同于将单个 GPU 的内存量增加四倍,而其他资源 (如计算) 相当于没用上。所以,朴素流水线存在很多的 Bubble 。因此,朴素的流水线并行将会导致 GPU 使用率过低。
1.3.2 微批次流水线并行 微批次流水线并行是指将一个训练迭代划分为多个子阶段,每个子阶段都是一个微批次,每个微批次都会在不同的设备上进行计算。在每个子阶段中,每个设备都会计算出一个梯度,然后将这些梯度进行累加,得到最终的梯度,最后使用这个梯度更新模型参数。
1.4 混合并行 混合并行是指同时使用数据并行和流水线并行的方式,以 GPT-3 为例,以下是它训练时的设备并行方案:
它首先被分为 64 个阶段,进行流水并行。每个阶段都运行在 6 台 DGX-A100 主机上。在 6 台主机之间,进行的是数据并行训练;每台主机有 8 张 GPU 显卡,同一台机器上的 8 张 GPU 显卡之间是进行模型并行训练 $^{[1]}$。
二、Paddle 静态图流水并行 在 Paddle 的静态图在流水线并行中,一个训练迭代通常被划分为三个子阶段:
Forward:前向计算,每个阶段计算并输出中间结果给下一个阶段; Backward:反向传播,每个阶段根据上一个阶段的梯度计算并传递当前阶段的梯度; Optimize:参数更新,收集所有阶段的梯度并更新模型参数。 Paddle 目前已经实现的流水线编排方式有两种,分别是: FThenB 和 1F1B。下面我们分别进行介绍:
2.1 FThenB 编排模式 FThenB
的编排模式也就是上面说到的微批次流水线并行,之所以叫做 FThenB
是因为在这种编排模式下,每个设备先执行前向计算,然后再执行反向传播。等待所有设备都执行完前向计算之后,再开始执行反向传播。
FThenB
的编排模式将 mini-batch 细分为多个更小的 micro-batch(微批),送入 GPU 进行训练,来提高并行程度。但是这样做也有一个坏处就是,那就是把 batch 拆小了之后,对于那些需要统计量的层(如:Batch Normalization),就会导致计算变得麻烦,需要重新实现。而且 Fthen-B
模式由于缓存了多个 micro-batch 的中间变量和梯度,显存的实际利用率并不高。
2.2 FThenB 相关代码解读 在初始化 engine 类的时候会传入 strategy
参数,这个参数是一个 auto.Strategy
类的实例,用于配置流水线并行的策略。在 Strategy 类中,有一个 pipeline
属性,用于指定流水并行的编排模式。
在 Parallelizer 执行 parallel
时候会在 _apply_post_optimization
中将编排模式(schedule_mode)保存到 main_program._pipeline_opt["standalone_opt"]
中。这个属性会在 ExecutorCache 中的 _get_program_and_executor
中被读取,用于编排 Program。下面是相关代码:
python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。下面是 apply_pass
的相关代码:
python def apply_pass (main_program, startup_program, pass_name, pass_attr = {}):
+ assert pass_name in [
+ "FThenB" ,
+ "1F1B" ,
+ "Eager1F1B" ,
+ ], f "pipeline scheduler only support FThenB, 1F1B and Eager1F1B, but recieve { pass_name } "
+
+ if pass_name == "1F1B" :
+ pass_attr[ "enable_backward_forward_overlap" ] = int (
+ os.environ.get( "FLAGS_1f1b_backward_forward_overlap" , 0 )
+ )
+
+ # 初始化 pipeline_scheduler pass
+ pipeline_pass = new_pass( "pipeline_scheduler_" + pass_name, pass_attr)
+ pass_context = PassContext()
+ # 编排的主要入口
+ pipeline_pass.apply([main_program], [startup_program], pass_context)
+ # 获取编排后的 plan
+ plan = pass_context.get_attr( "plan" )
+ return plan
编排的主要入口是 pipeline_pass.apply
,FThenB
和 1F1B
的核心代码在 pipeline_scheduler_pass.py
中,其中还使用了一些继承类。下面我们先来梳理一下类之间的继承关系。其中主要涉及到的类包括:PassBase、PipelinePassBase、PipelineFThenBPass 和 Pipeline1F1BPass。
PassBase 是所有 Pass 的基类,PipelinePassBase 是所有流水线编排 Pass 的基类,PipelineFThenBPass 和 Pipeline1F1BPass 分别是 FThenB 和 1F1B 的编排 Pass。
python PassBase - PipelinePassBase - PipelineFThenBPass
+ - Pipeline1F1BPass
在 PassBase 中定义了 apply
方法,apply
来方法中又进一步封装了 _apply_impl
和 _apply_single_impl
方法。PipelinePassBase 中重写了 _apply_single_impl
方法:
python # python/paddle/distributed/passes/pipeline_pass_base.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ """
+ 执行并行计算的具体实现逻辑
+
+ Args:
+ main_program (Program): 主Program。
+ startup_program (Program): 启动Program。
+ context (PassContext): Pass的上下文信息。
+ """
+ # 获取到拆分后的子 Program 和对应的类型
+ job_types, sub_programs = self ._partial_programs(main_program)
+
+ jobs = self ._create_job_list()
+
+ type_to_program = dict ( zip (job_types, sub_programs))
+ set_skip_gc_vars(
+ self .get_attr( "num_micro_batches" ), type_to_program, jobs
+ )
+
+ for type in type_to_program.keys():
+ type_to_program[ type ] = type_to_program[ type ].desc
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
可以看到进行编排的核心逻辑在 _partial_programs
和 _create_job_list
中,不同的编排策略会有不同的实现。下面我们来看看 FThenB
和 1F1B
的实现。
FThenB 编排的实现逻辑在 PipelineFThenBPass 类中实现,它继承自 PipelinePassBase 类。PipelineFThenBPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _partial_programs (self, program):
+ """
+ 将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。
+
+ Args:
+ program (Program): 主Program。
+
+ Returns:
+ tuple: 包含两个列表,第一个列表包含子 Program 的类型(如 LR、FORWARD、BACKWARD、OPT),第二个列表包含相应的子 Program。
+ """
+ # 注意:标志 "enable_send_recv_overlap" 可能会增加 GPU 的保留内存。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 获取前向和后向子 Program 的列表
+ sub_program_list = _program_for_fthenb_and_1f1b(
+ program, enable_send_recv_overlap
+ )
+ return types, sub_program_list
其中 _program_for_fthenb_and_1f1b
的主要作用是将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。 这里我们暂时不讨论任务重叠的实现,只关注拆分的实现逻辑。下面是 _program_for_fthenb_and_1f1b
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _program_for_fthenb_and_1f1b (program, enable_send_recv_overlap = False ):
+ # 为 fthenb 和1f1bProgram创建子 Program 列表
+
+ if enable_send_recv_overlap:
+ # 如果启用了发送接收操作的重叠,调用函数以进行重叠
+ _overlap_send_recv(program)
+ else :
+ # 否则,插入同步操作以确保顺序执行
+ _insert_sync_for_fthenb_1f1b(program)
+
+ # 创建四个子 Program,分别用于 LR、FORWARD、BACKWARD和 OPT 任务
+ lr_prog = Program()
+ fwd_prog = Program()
+ bwd_prog = Program()
+ opt_prog = Program()
+
+ # 分割 Program 并将操作添加到各个子 Program 中
+ def _split_ops (block):
+ # 根据操作的角色将操作分成四类:LR、FORWARD、BACKWARD和OPT
+ lr_ops = []
+ fwd_ops = []
+ bwd_ops = []
+ opt_ops = []
+ for op in src_block.ops:
+ if is_lr_sched_op(op):
+ lr_ops.append(op)
+ elif is_forward_op(op):
+ fwd_ops.append(op)
+ elif is_backward_op(op):
+ bwd_ops.append(op)
+ elif is_optimize_op(op):
+ opt_ops.append(op)
+ else :
+ raise ValueError (
+ "The op role: "
+ + str (op.attr( 'op_role' ))
+ + " isn't one of LRSched, Forward, Backward or Optimizer."
+ )
+ return lr_ops, fwd_ops, bwd_ops, opt_ops
+
+ def _add_ops_into_block (src_block, dst_block, ops):
+ # 将操作添加到指定的子 Program 块中
+ for op in ops:
+ _create_program(src_block, dst_block, op)
+
+ for idx, src_block in enumerate (program.blocks):
+ # 遍历主 Program 的块
+ lr_ops, fwd_ops, bwd_ops, opt_ops = _split_ops(src_block)
+ if idx == 0 :
+ # 对于第一个块,添加 LR、FORWARD、BACKWARD和 OPT 操作到相应子 Program 块
+ lr_block = lr_prog.block( 0 )
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ fwd_block = fwd_prog.block( 0 )
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ bwd_block = bwd_prog.block( 0 )
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ opt_block = opt_prog.block( 0 )
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+ else :
+ if len (lr_ops):
+ # 对于后续块,如果有 LR 操作,创建新的 LR 子 Program 块并将 LR 操作添加到其中
+ lr_block = lr_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ lr_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ if len (fwd_ops):
+ # 同样,为 FORWARD 操作创建新子 Program 块
+ fwd_block = fwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ fwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ if len (bwd_ops):
+ # 为 BACKWARD 操作创建新子 Program 块
+ bwd_block = bwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ bwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ if len (opt_ops):
+ # 为 OPT 操作创建新子 Program 块
+ opt_block = opt_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ opt_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+
+ for fetch_op in src_block.ops:
+ if fetch_op.type in [ "fetch" , "fetch_v2" ]:
+ in_name = fetch_op.input_arg_names[ 0 ]
+ dst_block = None
+ for block in [lr_block, fwd_block, bwd_block, opt_block]:
+ if block._find_var_recursive(in_name):
+ dst_block = block
+ break
+ if dst_block:
+ _create_program(src_block, dst_block, fetch_op)
+
+ lr_prog._sync_with_cpp()
+ fwd_prog._sync_with_cpp()
+ bwd_prog._sync_with_cpp()
+ opt_prog._sync_with_cpp()
+
+ lr_prog._rollback()
+ fwd_prog._rollback()
+ bwd_prog._rollback()
+ opt_prog._rollback()
+
+ # 返回四个子 Program,依次为 LR、FORWARD、BACKWARD和OPT
+ return [lr_prog, fwd_prog, bwd_prog, opt_prog]
其中 _insert_sync_for_fthenb_1f1b
的作用是插入同步操作,以实现"F-Then-B"和"1F-1B"流水线并行模式。插入同步操作的主要目的是确保在流水线并行训练中各个阶段(前向传播、后向传播、优化等)的计算流和通信流之间能够协同工作,以保持数据的一致性和正确性。这里我们不做详细介绍,感兴趣的小伙伴可以自行阅读源码 (_insert_sync_for_fthenb_1f1b )。
_program_for_fthenb_and_1f1b
剩下的主要逻辑就是将主 Program 进行拆分,然后将操作添加到各个子 Program 中,我们一共有四个子 Program,分别用于 LR、FORWARD、BACKWARD 和 OPT 任务。
在获得了 job_types
和 sub_programs
之后,我们就可以调用 _create_job_list
方法来创建 Job 列表。下面是 _create_job_list
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ """
+ 创建前向-后向流水线并行计算任务的任务列表。
+
+ Returns:
+ list: 包含不同类型计算任务的列表,如 LR、FORWARD、BACKWARD、OPT。
+ """
+ # 获取micro-batch的数量,通常由外部传递给流水线并行计算。
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+
+ # 创建一个空的任务列表,用于存储不同类型的计算任务。
+ job_list = []
+
+ # 创建LR(学习率计算)任务,并将其添加到任务列表中。
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 为每个micro-batch创建前向计算任务。
+ for i in range (num_micro_batches):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(i)
+ job_list.append(forward_job)
+
+ # 为每个micro-batch创建后向计算任务。
+ for i in range (num_micro_batches):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(i)
+ job_list.append(backward_job)
+
+ # 创建一个优化任务,通常在所有micro-batch计算后执行。
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 ) # 通常只有一个优化任务,所以micro-batch次 ID 为0
+ job_list.append(opt_job)
+
+ # 返回包含不同类型计算任务的任务列表。
+ return job_list
由于 FThanB
编排策略就是在所有的 Forward 计算完成之后才会进行 Backward 计算,所以在 _create_job_list
中,我们会为每个 micro-batch 创建前向计算任务和后向计算任务。最后添加一个优化任务。 在获取了 jobs 之后,我们就可以将它们添加到 plan
中,然后返回 plan
。
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ ...
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
jobs 和 type_to_program 之间的关系是怎样的?
jobs 是一个列表,包含了不同类型的计算任务,如 LR、FORWARD、BACKWARD、OPT。type_to_program 是一个字典,key 是计算任务的类型,value 是对应的子 Program。
2.3 1F1B 编排模式 在 1F1B
的编排模式下,每个设备先执行前向计算,然后再执行反向传播。不等待所有设备都执行完前向计算,就开始执行反向传播。
1F1B 示例如图所示,以 GPU3 的 F1(GPU3 的第 2 个 micro-batch 的前向计算)为例,F1 在计算前,F1 的反向 B1(GPU3 的第 1 个 micro-batch 的反向计算)已经计算结束,即可释放 F1 的中间变量,从而 F2 可以复用 F1 中间变量的显存。
有研究文献表明,1F1B
方式相比于 FthenB
方式,峰值显存可以节省 37.5%,对比朴素流水线并行峰值显存明显下降,设备资源利用率显著提升。
2.4 1F1B 相关代码解读 1F1B 的编排策略顾名思义就是一个 Forward 之后跟一个 Backward,这里的 Forward 和 Backward 都是指一个 micro-batch 的计算。1F1B 编排的实现逻辑在 Pipeline1F1BPass 类中实现,它继承自 PipelinePassBase 类。Pipeline1F1BPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
python def _partial_programs (self, program):
+ # 获取 "enable_send_recv_overlap" 标志,该 FLAG 可能增加显存消耗。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+
+ # 定义计算任务的类型列表,包括 LR、FORWARD、BACKWARD 和 OPT。
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 调用 _program_for_fthenb_and_1f1b 函数,根据输入的 program 和 enable_send_recv_overlap 创建子程序。
+ sub_programs = _program_for_fthenb_and_1f1b(program, enable_send_recv_overlap)
+
+ # 获取 "enable_backward_forward_overlap" 标志,用于确定是否启用前向传播和后向传播之间的交叠。
+ enable_backward_forward_overlap = self .get_attr( "enable_backward_forward_overlap" )
+
+ if enable_backward_forward_overlap:
+ # 如果启用了前向传播和后向传播之间的交叠,记录日志以指示启用。
+ logger.info( "Backward forward overlap enabled in 1F1B." )
+
+ # 从子程序列表中获取前向传播和后向传播的程序。
+ forward_program, backward_program = sub_programs[ 1 ], sub_programs[ 2 ]
+
+ # 调用 _backward_forward_overlap 方法,将前向传播和后向传播的程序进行重组,
+ # 以确保它们可以正确地交替执行。
+ (
+ splitted_backward_job_types,
+ splitted_backward_programs,
+ splitted_forward_job_types,
+ splitted_forward_programs,
+ ) = self ._backward_forward_overlap(backward_program, forward_program)
+
+ # 更新计算任务的类型列表和子程序列表,将交叠后的任务类型和程序添加进去。
+ types += splitted_forward_job_types + splitted_backward_job_types
+ sub_programs += (
+ splitted_forward_programs + splitted_backward_programs
+ )
+
+ for i in range ( len (types)):
+ logger.debug(
+ f "type = { types[i] } , sub_programs = { sub_programs[i] }\\n "
+ )
+
+ # 记录调试信息,打印在稳定阶段执行的计算任务类型。
+ logger.debug( f "jobs_in_stable_phase = {self .jobs_in_stable_phase } " )
+
+ # 返回计算任务类型列表和相应的子程序列表。
+ return types, sub_programs
这里面的 _backward_forward_overlap
主要是用于实现前向传播和后向传播之间的交叠,是 1F1B 调度的优化算法。我们这里不做详细介绍,感兴趣的小伙伴可以自行阅读源码。除了 _backward_forward_overlap
之外,1F1B 的 _partial_programs
和 FThenB 的 _partial_programs
逻辑是一样的,都是调用 _program_for_fthenb_and_1f1b
函数,根据输入的 program 和 enable_send_recv_overlap 创建子 Program。
下面我们来看看 _create_job_list
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+ pp_stage = self .get_attr( "pp_stage" )
+ pp_degree = self .get_attr( "pp_degree" )
+
+ job_list = []
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 确保micro-batch数大于等于计算任务的度数
+ assert (
+ pp_degree <= num_micro_batches
+ ), "Num of micro batches should larger than or equal to pp degree."
+
+ micro_batch_in_warmup = pp_degree - pp_stage
+ micro_batch_in_1f1b = num_micro_batches - micro_batch_in_warmup
+
+ # 预热阶段
+ forward_micro_batch_id = 0
+ for i in range (micro_batch_in_warmup):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(forward_micro_batch_id)
+ job_list.append(forward_job)
+ forward_micro_batch_id += 1
+
+ backward_micro_batch_id = 0
+ for i in range (micro_batch_in_1f1b):
+ # 为稳定阶段中的每个计算任务(BACKWARD和FORWARD)创建对应的任务
+ # 每个micro-batch中都有一个 BACKWARD 和一个 FORWARD 计算任务
+ for job_type in self .jobs_in_stable_phase:
+ job = core.Job(job_type)
+ micro_batch_id = (
+ forward_micro_batch_id
+ if job_type.startswith( FORWARD )
+ else backward_micro_batch_id
+ )
+ job.set_micro_batch_id(micro_batch_id)
+ job_list.append(job)
+ forward_micro_batch_id += 1
+ backward_micro_batch_id += 1
+
+ for i in range (micro_batch_in_warmup):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(backward_micro_batch_id)
+ job_list.append(backward_job)
+ backward_micro_batch_id += 1
+
+ # 创建优化任务
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 )
+ job_list.append(opt_job)
+ return job_list
可以看到,1F1B 的 _create_job_list
和 FThenB 的逻辑略有不同,1F1B 的 _create_job_list
中会根据 pp_stage
和 pp_degree
来确定前向计算任务和后向计算任务的数量。在稳定阶段中,每个 micro-batch 中都有一个 BACKWARD 和一个 FORWARD 计算任务。最后添加一个优化任务。
预热过程是什么?
根据 1F1B 的流水编排图可以发现,在训练刚刚开始的时候,gpu 中会有很大的空闲,这个时候任务的执行顺序不是完全按照 1F1B 的编排方式,预热阶段就是对应这个过程。
2.5 流水并行执行过程 没启动多卡训练的时候,paddle 的训练命令类似于:
bash python -m paddle.distributed.launch --gpus 0,1,2,3 train.py
这个 paddle.distributed.launch
模块会启动多个进程,每个进程都会执行 train.py
,并且会传入不同的环境变量,用于指定当前进程的角色和进程数量。下面分析一下每个进程里面上面拆分出来的 job 是如何执行的。
在获取到编排好的 job_list
之后,我们就可以初始化 Executor
对象,然后执行 Executor
的 run
方法。下面是初始化 StandaloneExecutor
对象的代码:
python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
+else :
+ ...
+ plan = core.Plan([default_job], type_to_program)
+
+new_exe = _StandaloneExecutor(place, plan, scope)
+return new_program, new_exe
其中的核心代码 apply_pass
在上面已经介绍过了。 在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。
_StandaloneExecutor 是 C++ 端的一个类,下面是它的构造函数:
cpp StandaloneExecutor :: StandaloneExecutor ( const platform ::Place & place,
+ const interpreter ::Plan & plan,
+ Scope * scope)
+ : place_ (place), plan_ (plan), scope_ (scope) {
+ // 获取计划中micro-batch的数量。
+ int64_t micro_batch_num = plan_. MicroBatchNum ();
+
+ // 调整待等待的强制事件向量的大小,以匹配micro-batch的数量。
+ vec_force_events_to_wait_. resize (micro_batch_num);
+
+ // 为每个micro-batch创建新的 Scope,并将其存储在 micro_batch_scopes_ 中。
+ for ( int64_t i = 0 ; i < micro_batch_num; ++ i) {
+ micro_batch_scopes_. emplace_back ( & scope-> NewScope ());
+ }
+
+ // 创建一个用于日志记录的字符串流,显示micro-batch的创建。
+ std ::stringstream ss;
+ ss << "Create " << micro_batch_num << " micro_batch_scopes for scope "
+ << scope_ << " : " ;
+ for (Scope * scope : micro_batch_scopes_) {
+ ss << scope << ", " ;
+ }
+ VLOG ( 6 ) << ss. str ();
+
+ // 获取计划中的所有Job
+ const auto& jobs = plan_. JobList ();
+
+ // 对每个 Job 执行以下操作。
+ for ( const auto& job : jobs) {
+ const std ::string & job_type = job-> Type ();
+ std ::shared_ptr < ProgramDesc > program = nullptr ;
+ std ::shared_ptr < :: pir ::Program > ir_program = nullptr ;
+
+ if (FLAGS_enable_pir_api || FLAGS_enable_new_ir_in_executor) {
+ ir_program = plan_. IrProgram (job_type);
+ } else {
+ program = std :: make_shared < ProgramDesc >( * (plan_. Program (job_type)));
+ }
+
+ int64_t micro_batch_id = job-> MicroBatchId ();
+
+ // 检查micro-batch ID 是否在合理范围内。
+ PADDLE_ENFORCE (
+ micro_batch_id >= 0 && micro_batch_id < micro_batch_num,
+ phi :: errors :: Unavailable ( "The micro batch id ( %lld ) out of bound, "
+ "which should be in the range of [0, %lld ]." ,
+ micro_batch_id,
+ micro_batch_num));
+
+ // 如果存在多个micro-batch并且未启用 PIR API,则设置 Feed 和 Fetch 操作的列属性。
+ if (micro_batch_num > 1 && ! FLAGS_enable_pir_api) {
+ SetColAttrForFeedFetchOps (program, micro_batch_num, micro_batch_id);
+ }
+
+ interpreter ::ExecutionConfig execution_config;
+ execution_config.create_local_scope = false ;
+ execution_config.skip_gc_vars = job-> SkipGcVars ();
+
+ // 当前仅支持 CPU。
+ // 如果启用新 IR,创建一个包含计算的 IR 程序并将其更新为计划。
+ if (FLAGS_enable_new_ir_in_executor) {
+ ... // 新 IR 相关代码暂不讨论
+ } else {
+ // 创建 InterpreterCore 并将其存储在 interpretercores_ 中。
+ interpretercores_. emplace_back (
+ std :: make_shared < InterpreterCore >(place_,
+ program-> Block ( 0 ),
+ micro_batch_scopes_[micro_batch_id],
+ execution_config));
+ interpretercores_. back ()-> SetCopyProgram (program);
+
+ auto prog_inter = const_cast< ProgramInterpreter *> (
+ static_cast<const ProgramInterpreter *> (
+ interpretercores_. back ()-> Impl ()));
+ prog_inter-> SetForceEventsToWaitInfo (
+ & (vec_force_events_to_wait_[micro_batch_id]));
+
+ ...
+ }
+ }
+ }
+}
在初始化的时候,Paddle 会为每个 job 都创建一个 InterpreterCore
对象,然后将这些 InterpreterCore
对象存储在 interpretercores_
中。在后续的执行过程中,Paddle 会根据不同 job 执行不同 InterpreterCore
对象。初始化了 StandaloneExecutor 对象之后,我们就可以执行 run
方法了。下面是 C++ 端 run
方法的实现逻辑:
cpp paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ // 创建一个事件记录器,用于跟踪 StandaloneExecutor::run 方法的执行。
+ platform ::RecordEvent record_event (
+ "StandaloneExecutor::run" , platform :: TracerEventType ::UserDefined, 1 );
+
+ // 获取计划中的所有作业。
+ const auto& jobs = plan_. JobList ();
+
+ // 用于跟踪不同类型的作业的第一个出现位置的映射。
+ std ::map < std ::string, size_t> type_to_first_id;
+
+ // 如果共享构建结果的标志为假,执行以下操作。
+ if ( ! is_interpretercore_build_result_shared_) {
+ // 为第一个作业设置其类型的映射,并确保所有其他相同类型的作业共享工作队列。
+ type_to_first_id[jobs[ 0 ]-> Type ()] = 0 ;
+ for ( size_t job_idx = 1 ; job_idx < jobs. size (); ++ job_idx) {
+ interpretercores_[job_idx]-> ShareWorkQueueFrom (interpretercores_[ 0 ]);
+ if (type_to_first_id. count (jobs[job_idx]-> Type ()) == 0 ) {
+ type_to_first_id[jobs[job_idx]-> Type ()] = job_idx;
+ }
+ }
+ // 将共享构建结果的标志设置为真。
+ is_interpretercore_build_result_shared_ = true ;
+ }
+
+ // 迭代所有作业。
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+
+ // 创建一个事件记录器,用于跟踪每个作业的执行。
+ platform ::RecordEvent record_event (
+ job_type + "-" + std :: to_string (job-> MicroBatchId ()),
+ platform :: TracerEventType ::UserDefined,
+ 1 );
+
+ // 记录详细日志,显示作业的索引、类型和micro-batch ID。
+ VLOG ( 6 ) << "Run job (" << job_idx << "), type = " << job_type
+ << ", micro_batch_id =" << job-> MicroBatchId ();
+
+ // 如果作业类型已经在 type_to_first_id 中,且未启用新 IR,则共享构建结果。
+ if (type_to_first_id. count (job_type) != 0 &&
+ ! FLAGS_enable_new_ir_in_executor) {
+ interpretercores_[job_idx]-> ShareBuildResultsFrom (
+ interpretercores_[type_to_first_id[job_type]]);
+ }
+
+ // 如果作业的数量大于 1 且作业类型不是 "forward",则运行作业(使用一个空的临时 feed 名称列表)。
+ // 否则,运行作业并传递真正的 feed 名称列表。
+ if (jobs. size () > 1 && job_type != "forward" ) {
+ const std ::vector < std ::string > tmp_feed_names = {};
+ interpretercores_[job_idx]-> Run (tmp_feed_names, /*need_fetch = */ false );
+ } else {
+ interpretercores_[job_idx]-> Run (feed_names, /*need_fetch = */ false );
+ }
+ }
+
+ // 记录每个作业的运行时间,如果启用了 CUDA 且自动并行分析器被激活。
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+
+ // 返回 Fetch Tensors,根据是否启用新 IR 采取不同的操作。
+ if (FLAGS_enable_new_ir_in_executor) {
+ // 创建一个 FetchList,包含需要获取的张量。
+ framework ::FetchList fetch_res;
+ for ( auto& var_name : fetch_var_names_) {
+ auto* var = scope_-> FindVar (var_name);
+ fetch_res. push_back (var->Get < phi ::DenseTensor > ());
+ }
+
+ return fetch_res;
+ } else {
+ // 获取 "interpreter::kFetchVarName" 变量,其中包含需要返回的 Fetch Tensors。
+ auto* fetch_var = scope_-> FindVar ( interpreter ::kFetchVarName);
+ if (fetch_var) {
+ return std :: move ( * fetch_var->GetMutable < framework ::FetchList > ());
+ } else {
+ return {};
+ }
+ }
+}
三、流水并行可视化工作 3.1 工作背景 当下大模型的训练时间较长,分布式训练时序图的可视化对于调试和分析模型的训练过程非常重要。当下没有工具能够直接给出各个 GPU 设备上不同 Job 的运行区间,因此我们需要设计一个可视化工具来实现这个功能。
当下的工作大多是可视化出 cpu 端的各个 Job 的运行区间。由于 gpu 任务的异步性,在 cpu 端启动的 Job 并不一定在 gpu 端立即执行,因此 cpu 端的可视化并不能直接反映出 gpu 端的运行情况 。
3.2 可视化实现思路 我们的可视化工具的实现思路是:在 gpu 端各个 Job 结束的时候,打印出 Job 的类型和结束时间,然后在使用 python 脚本这些信息,绘制出各个 Job 的运行区间 。
3.3 准确定位 Job 的开始与结束时间 Paddle 中所有的计算任务都是在一个流上完成的,这个流我们叫做计算流。为了能够准确定位 Job 的开始与结束,我们需要找到每个 Job 中第一个计算算子,和最后一个计算算子,并在第一个计算算子之前插入一个 cuda stream callback
,在最后一个计算算子之后插入一个 cuda callback
。由于 cuda stream callback
会等待计算流中前面的任务执行完毕后才会执行,因此我们可以准确的定位出 Job 的开始时间和结束时间。
前面说到过每个 Job 都是由一个 InterpreterCore
对象来执行的,我们在每个 InterpreterCore
对象中使用自定义类来存储 Job 的开始时间和结束时间。下面是每个 InterpreterCore
对象中插入 cuda stream callback
和 cuda callback
的代码:
cpp // paddle/fluid/framework/new_executor/program_interpreter.cc
+void ProgramInterpreter :: RunInstruction ( const Instruction & instr_node ) {
+ ...
+ try {
+ instr_node. WaitEvent (place_);
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 如果 timer 还没插入开始的 callback 并且当前的 op 不是通信 op,那么就插入开始的callback
+ if ( ! calculate_stream_timer_-> IsStarted () &&
+ ! interpreter :: IsCommunicationOp (instr_node)) {
+ VLOG ( 3 ) << "Start calculated stream timer from op: " << op-> Type ();
+ calculate_stream_timer_-> Start ();
+ }
+ }
+#endif
+ ...
+}
上面的代码给出了在第一个计算算子之前插入 cuda stream callback
的逻辑,下面是在最后一个计算算子之后插入 cuda callback
的逻辑:
cpp void ProgramInterpreter :: ExecuteInstructionList (
+ const std :: vector < Instruction > & vec_instr ) {
+ ...
+ if (enable_job_schedule_profiler_) {
+ for ( int i = vec_instr. size () - 1 ; i >= 0 ; -- i) {
+ auto& instr_node = vec_instr[i];
+ if ( ! interpreter :: IsCommunicationOp (instr_node)) {
+ // 记录下来最后一个计算 op 的id
+ VLOG ( 3 ) << "Last calculated op type: " << instr_node. OpBase ()-> Type ();
+ last_calculate_instr_id_ = i;
+ break ;
+ }
+ }
+ }
+ ...
+}
+
+void ProgramInterpreter :: RunInstructionAsync ( size_t instr_id ) {
+ ...
+ while ( ! ready_ops. empty ()) {
+ instr_id = ready_ops. top ();
+ ready_ops. pop ();
+ auto& instr_node = vec_instruction_. at (instr_id);
+
+ RunInstruction (instr_node);
+
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 给最后一个计算 op 之后插入一个callback
+ if (instr_id == last_calculate_instr_id_ &&
+ calculate_stream_timer_-> IsStarted ()) {
+ VLOG ( 3 ) << "Stop calculated stream timer from op: "
+ << instr_node. OpBase ()-> Type ();
+ calculate_stream_timer_-> Stop ();
+ }
+ }
+#endif
+}
当所有的 Job 都执行完毕之后,我们就可以 StandAloneExecutor
的 Run
方法中获取到每个 Job 的开始时间和结束时间了。下面是获取 Job 开始时间和结束时间的代码:
cpp // paddle/fluid/framework/new_executor/standalone_executor.cc
+paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ ...
+ // record each job's run time
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+ ...
+}
+
+// paddle/fluid/framework/new_executor/interpretercore.cc
+std :: tuple < double , double > ProgramInterpreter :: InterpreterRunTime () {
+ double start_time = 0 , end_time = 0 ;
+#if defined ( PADDLE_WITH_CUDA )
+ start_time = calculate_stream_timer_-> StartTime ();
+ end_time = calculate_stream_timer_-> EndTime ();
+#endif
+ return std :: make_tuple (start_time, end_time);
+}
3.4 可视化工具的实现 在获取到每个 Job 的开始时间和结束时间之后,我们就可以使用 python 脚本来绘制出各个 Job 的运行区间了。可视化工具的实现思路是将每个 Job 的开始时间和结束时间保存成 Chrome Trace Event 的格式,然后使用 chrome://tracing
工具来绘制出各个 Job 的运行区间。以下是绘制效果图:
参考文献 https://docs.oneflow.org/master/parallelism/01_introduction.html#_5 https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_parallel_end_to_end/index_cn.html ',108)]))}const m=i(o,[["render",c]]);export{u as __pageData,m as default};
diff --git a/assets/posts_paddle-pipeline-parallel.md.CxsJxymH.lean.js b/assets/posts_paddle-pipeline-parallel.md.CxsJxymH.lean.js
new file mode 100644
index 0000000..fdfa86b
--- /dev/null
+++ b/assets/posts_paddle-pipeline-parallel.md.CxsJxymH.lean.js
@@ -0,0 +1,625 @@
+import{_ as i,c as a,k as n,o as p}from"./chunks/framework.D1-4jGi8.js";const l="/assets/7fb96083be8628ce2b5fc11951251e36ea5d46ffb7fb8409c1f2cdf55afda521.CrCDcQl4.jpg",h="/assets/42e5a90abf00a492f23160dbf9ff037623645b44ae902e49b23578f6a5f62b2f.VEZ2fne-.jpg",k="/assets/8ee7403adb680995a09f570c906b7fcfe433e4b504ce6f52e44727b07a96dfb6.Cnn_fxkP.jpg",t="/assets/2443fea068b43f57f4571d2e1ad35afe9d1de3a8c69491d0c390b3705835a665.DvCLRz6d.jpg",e="/assets/1ac95bbf288d8509d7db6ab46ce0bae6aa03dccbe4c6d1ea84e1b02c8108550a.BPnKQHQQ.jpg",E="/assets/ef6685e22ae1f3433ea2495c2d0633e697a0d37de6020d4e23e6fa58c826e540.CNqZ2WSd.jpg",r="/assets/6935a194889bb7a55f17c0bb45cb6a4395ef63c6d6fcfe24154eafee61e8c451.DOSAFxhw.jpg",d="/assets/e36dd9884d123d949f5dd7847461757f2d6a30cb2b2cd25aa58dae41c0917ed1.CEfakBZ6.jpg",g="/assets/9c0fc9d4f5f7045fac7aafcfa4e9021da7762dc5d3dccb813fc5d8cf134a687d.CdLOhkq3.jpg",y="/assets/ac0590be474ceb2ce695085a1f2178860592b650d9be2ce428de15ff2b4f93a8.D0RN5-Xt.jpg",u=JSON.parse('{"title":"Paddle 静态图并行编排与执行流程","description":"","frontmatter":{"title":"Paddle 静态图并行编排与执行流程","date":"2024-07-05T00:00:00.000Z","author":{"name":"卢畅","github":"andsonder"},"theme":"vitesse-light"},"headers":[],"relativePath":"posts/paddle-pipeline-parallel.md","filePath":"posts/paddle-pipeline-parallel.md"}'),o={name:"posts/paddle-pipeline-parallel.md"};function c(F,s,_,b,A,D){return p(),a("div",null,s[0]||(s[0]=[n('paddle3.0 中自动并行是一项重要的升级点,今天我们来聊一聊 Paddle 中的静态图流水并行。大家也可以去翻一翻我的个人博客 ,里面有很多好康的(X)
一、分布式集合通信模式 集合通信模型适合处理 CV/NLP 领域这样具有稠密参数的模型。它有多种方式将数据/模型切分到多个设备上。每个设备可以成为一个 Worker,每个 Worker 都需要及时的知道全局梯度信息。这样的话,每个 Worker 都需要将自己的梯度信息发送给其他的 Worker ,同时也需要接收其他 Worker 的梯度信息。这样的通信方式就是集合通信模式。
集合通信有好几种并行方式:
下面我们分别进行介绍:
1.1 数据并行 纯数据并行模式下数据集被平均分为多份,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。
数据并行适用于模型参数较少的情况,一张卡可以放下完整的模型参数。这样的策略能让我们增加 batch_size,加快训练速度
下图详细的说明了纯数据并行的训练流程:
如图数据集平均分为多份 data partition1
和 data partition2
,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。在数据并行训练过程中,每个卡上的输入数据是不同的。各个卡独立地执行网络的前向运算和反向计算,计算出各自卡上的参数梯度。随后,使用 AllReduce 等集合通信原语,将各个卡上计算出的参数梯度进行累加聚合,得到最终的全局参数梯度。最后,全局参数梯度进入优化器进行参数更新,完成一个完整的 mini-batch 训练流程。图中的箭头表示了各个卡之间的通信过程。
集合通信原语是集合通信的基础操作的集合,如广播(Broadcast)、收集(Gather)、分散(Scatter)、规约(Reduce)等。其中规约是指将集群内多个节点将数据发送给一个节点,这个节点会使用接收到的数据集中运算,如累加、累积、均值、方差等等。而上文提到的 AllReduce 则是指多对多的规约,即有多个数据发送节点和多个数据接收节点,所有节点的规约运算结果会广播到所有节点上。
当数据集较大,模型较小时,由于反向过程中为同步梯度产生的通信代价较小,此时选择数据并行一般比较有优势,常见的视觉分类模型,如 ResNet50,比较适合采用数据并行。
1.2 模型并行 在模型参数较多的情况下,一张卡无法放下完整的模型参数,这时候就需要将模型参数切分到多张卡上,让我们先通过一张图了解一下模型并行的原理:
模型并行的情况下每个设备上的数据都是一样的,只有模型被拆分到了各个设备上。每个设备只拥有模型的一部分,所有计算设备上的模型拼在一起,才是完整的模型。
如图想要得到最终的计算结果需要将 Device0
和 Device1
的计算结果进行拼接后才能得到最终的计算结果。
1.3 流水并行 1.3.1 朴素流水并行 流水线并行是模型并行的一种,其原理是把模型的不同层放置在不同卡上运行,参数也按层分配到不同的卡上,以降低模型的显存占用。
如下图所示,网络共包含 4 层,我们可以把第 0 层放置在卡 0 上运行,第 1 层和第 2 层放置在卡 1 上运行,第 4 层放置在卡 2 上运行。在训练过程中,卡 0 接收输入数据进行计算,并将计算结果发送给卡 1;卡 1 接收到卡 0 的计算结果后进行计算,并将计算结果发送给卡 2;卡 2 接收到卡 1 的计算结果后进行计算,得到损失函数值,完成前向计算。反向计算逻辑与前向刚好相反。 这个过程就像是流水线一样,每个卡都在处理不同的数据,从而提高了训练效率。
朴素流水并行的缺点:
在任意给定时刻,除了一个 GPU 之外的其他所有 GPU 都是空闲的。因此,如果使用 4 个 GPU,则几乎等同于将单个 GPU 的内存量增加四倍,而其他资源 (如计算) 相当于没用上。所以,朴素流水线存在很多的 Bubble 。因此,朴素的流水线并行将会导致 GPU 使用率过低。
1.3.2 微批次流水线并行 微批次流水线并行是指将一个训练迭代划分为多个子阶段,每个子阶段都是一个微批次,每个微批次都会在不同的设备上进行计算。在每个子阶段中,每个设备都会计算出一个梯度,然后将这些梯度进行累加,得到最终的梯度,最后使用这个梯度更新模型参数。
1.4 混合并行 混合并行是指同时使用数据并行和流水线并行的方式,以 GPT-3 为例,以下是它训练时的设备并行方案:
它首先被分为 64 个阶段,进行流水并行。每个阶段都运行在 6 台 DGX-A100 主机上。在 6 台主机之间,进行的是数据并行训练;每台主机有 8 张 GPU 显卡,同一台机器上的 8 张 GPU 显卡之间是进行模型并行训练 $^{[1]}$。
二、Paddle 静态图流水并行 在 Paddle 的静态图在流水线并行中,一个训练迭代通常被划分为三个子阶段:
Forward:前向计算,每个阶段计算并输出中间结果给下一个阶段; Backward:反向传播,每个阶段根据上一个阶段的梯度计算并传递当前阶段的梯度; Optimize:参数更新,收集所有阶段的梯度并更新模型参数。 Paddle 目前已经实现的流水线编排方式有两种,分别是: FThenB 和 1F1B。下面我们分别进行介绍:
2.1 FThenB 编排模式 FThenB
的编排模式也就是上面说到的微批次流水线并行,之所以叫做 FThenB
是因为在这种编排模式下,每个设备先执行前向计算,然后再执行反向传播。等待所有设备都执行完前向计算之后,再开始执行反向传播。
FThenB
的编排模式将 mini-batch 细分为多个更小的 micro-batch(微批),送入 GPU 进行训练,来提高并行程度。但是这样做也有一个坏处就是,那就是把 batch 拆小了之后,对于那些需要统计量的层(如:Batch Normalization),就会导致计算变得麻烦,需要重新实现。而且 Fthen-B
模式由于缓存了多个 micro-batch 的中间变量和梯度,显存的实际利用率并不高。
2.2 FThenB 相关代码解读 在初始化 engine 类的时候会传入 strategy
参数,这个参数是一个 auto.Strategy
类的实例,用于配置流水线并行的策略。在 Strategy 类中,有一个 pipeline
属性,用于指定流水并行的编排模式。
在 Parallelizer 执行 parallel
时候会在 _apply_post_optimization
中将编排模式(schedule_mode)保存到 main_program._pipeline_opt["standalone_opt"]
中。这个属性会在 ExecutorCache 中的 _get_program_and_executor
中被读取,用于编排 Program。下面是相关代码:
python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。下面是 apply_pass
的相关代码:
python def apply_pass (main_program, startup_program, pass_name, pass_attr = {}):
+ assert pass_name in [
+ "FThenB" ,
+ "1F1B" ,
+ "Eager1F1B" ,
+ ], f "pipeline scheduler only support FThenB, 1F1B and Eager1F1B, but recieve { pass_name } "
+
+ if pass_name == "1F1B" :
+ pass_attr[ "enable_backward_forward_overlap" ] = int (
+ os.environ.get( "FLAGS_1f1b_backward_forward_overlap" , 0 )
+ )
+
+ # 初始化 pipeline_scheduler pass
+ pipeline_pass = new_pass( "pipeline_scheduler_" + pass_name, pass_attr)
+ pass_context = PassContext()
+ # 编排的主要入口
+ pipeline_pass.apply([main_program], [startup_program], pass_context)
+ # 获取编排后的 plan
+ plan = pass_context.get_attr( "plan" )
+ return plan
编排的主要入口是 pipeline_pass.apply
,FThenB
和 1F1B
的核心代码在 pipeline_scheduler_pass.py
中,其中还使用了一些继承类。下面我们先来梳理一下类之间的继承关系。其中主要涉及到的类包括:PassBase、PipelinePassBase、PipelineFThenBPass 和 Pipeline1F1BPass。
PassBase 是所有 Pass 的基类,PipelinePassBase 是所有流水线编排 Pass 的基类,PipelineFThenBPass 和 Pipeline1F1BPass 分别是 FThenB 和 1F1B 的编排 Pass。
python PassBase - PipelinePassBase - PipelineFThenBPass
+ - Pipeline1F1BPass
在 PassBase 中定义了 apply
方法,apply
来方法中又进一步封装了 _apply_impl
和 _apply_single_impl
方法。PipelinePassBase 中重写了 _apply_single_impl
方法:
python # python/paddle/distributed/passes/pipeline_pass_base.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ """
+ 执行并行计算的具体实现逻辑
+
+ Args:
+ main_program (Program): 主Program。
+ startup_program (Program): 启动Program。
+ context (PassContext): Pass的上下文信息。
+ """
+ # 获取到拆分后的子 Program 和对应的类型
+ job_types, sub_programs = self ._partial_programs(main_program)
+
+ jobs = self ._create_job_list()
+
+ type_to_program = dict ( zip (job_types, sub_programs))
+ set_skip_gc_vars(
+ self .get_attr( "num_micro_batches" ), type_to_program, jobs
+ )
+
+ for type in type_to_program.keys():
+ type_to_program[ type ] = type_to_program[ type ].desc
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
可以看到进行编排的核心逻辑在 _partial_programs
和 _create_job_list
中,不同的编排策略会有不同的实现。下面我们来看看 FThenB
和 1F1B
的实现。
FThenB 编排的实现逻辑在 PipelineFThenBPass 类中实现,它继承自 PipelinePassBase 类。PipelineFThenBPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _partial_programs (self, program):
+ """
+ 将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。
+
+ Args:
+ program (Program): 主Program。
+
+ Returns:
+ tuple: 包含两个列表,第一个列表包含子 Program 的类型(如 LR、FORWARD、BACKWARD、OPT),第二个列表包含相应的子 Program。
+ """
+ # 注意:标志 "enable_send_recv_overlap" 可能会增加 GPU 的保留内存。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 获取前向和后向子 Program 的列表
+ sub_program_list = _program_for_fthenb_and_1f1b(
+ program, enable_send_recv_overlap
+ )
+ return types, sub_program_list
其中 _program_for_fthenb_and_1f1b
的主要作用是将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。 这里我们暂时不讨论任务重叠的实现,只关注拆分的实现逻辑。下面是 _program_for_fthenb_and_1f1b
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _program_for_fthenb_and_1f1b (program, enable_send_recv_overlap = False ):
+ # 为 fthenb 和1f1bProgram创建子 Program 列表
+
+ if enable_send_recv_overlap:
+ # 如果启用了发送接收操作的重叠,调用函数以进行重叠
+ _overlap_send_recv(program)
+ else :
+ # 否则,插入同步操作以确保顺序执行
+ _insert_sync_for_fthenb_1f1b(program)
+
+ # 创建四个子 Program,分别用于 LR、FORWARD、BACKWARD和 OPT 任务
+ lr_prog = Program()
+ fwd_prog = Program()
+ bwd_prog = Program()
+ opt_prog = Program()
+
+ # 分割 Program 并将操作添加到各个子 Program 中
+ def _split_ops (block):
+ # 根据操作的角色将操作分成四类:LR、FORWARD、BACKWARD和OPT
+ lr_ops = []
+ fwd_ops = []
+ bwd_ops = []
+ opt_ops = []
+ for op in src_block.ops:
+ if is_lr_sched_op(op):
+ lr_ops.append(op)
+ elif is_forward_op(op):
+ fwd_ops.append(op)
+ elif is_backward_op(op):
+ bwd_ops.append(op)
+ elif is_optimize_op(op):
+ opt_ops.append(op)
+ else :
+ raise ValueError (
+ "The op role: "
+ + str (op.attr( 'op_role' ))
+ + " isn't one of LRSched, Forward, Backward or Optimizer."
+ )
+ return lr_ops, fwd_ops, bwd_ops, opt_ops
+
+ def _add_ops_into_block (src_block, dst_block, ops):
+ # 将操作添加到指定的子 Program 块中
+ for op in ops:
+ _create_program(src_block, dst_block, op)
+
+ for idx, src_block in enumerate (program.blocks):
+ # 遍历主 Program 的块
+ lr_ops, fwd_ops, bwd_ops, opt_ops = _split_ops(src_block)
+ if idx == 0 :
+ # 对于第一个块,添加 LR、FORWARD、BACKWARD和 OPT 操作到相应子 Program 块
+ lr_block = lr_prog.block( 0 )
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ fwd_block = fwd_prog.block( 0 )
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ bwd_block = bwd_prog.block( 0 )
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ opt_block = opt_prog.block( 0 )
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+ else :
+ if len (lr_ops):
+ # 对于后续块,如果有 LR 操作,创建新的 LR 子 Program 块并将 LR 操作添加到其中
+ lr_block = lr_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ lr_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ if len (fwd_ops):
+ # 同样,为 FORWARD 操作创建新子 Program 块
+ fwd_block = fwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ fwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ if len (bwd_ops):
+ # 为 BACKWARD 操作创建新子 Program 块
+ bwd_block = bwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ bwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ if len (opt_ops):
+ # 为 OPT 操作创建新子 Program 块
+ opt_block = opt_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ opt_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+
+ for fetch_op in src_block.ops:
+ if fetch_op.type in [ "fetch" , "fetch_v2" ]:
+ in_name = fetch_op.input_arg_names[ 0 ]
+ dst_block = None
+ for block in [lr_block, fwd_block, bwd_block, opt_block]:
+ if block._find_var_recursive(in_name):
+ dst_block = block
+ break
+ if dst_block:
+ _create_program(src_block, dst_block, fetch_op)
+
+ lr_prog._sync_with_cpp()
+ fwd_prog._sync_with_cpp()
+ bwd_prog._sync_with_cpp()
+ opt_prog._sync_with_cpp()
+
+ lr_prog._rollback()
+ fwd_prog._rollback()
+ bwd_prog._rollback()
+ opt_prog._rollback()
+
+ # 返回四个子 Program,依次为 LR、FORWARD、BACKWARD和OPT
+ return [lr_prog, fwd_prog, bwd_prog, opt_prog]
其中 _insert_sync_for_fthenb_1f1b
的作用是插入同步操作,以实现"F-Then-B"和"1F-1B"流水线并行模式。插入同步操作的主要目的是确保在流水线并行训练中各个阶段(前向传播、后向传播、优化等)的计算流和通信流之间能够协同工作,以保持数据的一致性和正确性。这里我们不做详细介绍,感兴趣的小伙伴可以自行阅读源码 (_insert_sync_for_fthenb_1f1b )。
_program_for_fthenb_and_1f1b
剩下的主要逻辑就是将主 Program 进行拆分,然后将操作添加到各个子 Program 中,我们一共有四个子 Program,分别用于 LR、FORWARD、BACKWARD 和 OPT 任务。
在获得了 job_types
和 sub_programs
之后,我们就可以调用 _create_job_list
方法来创建 Job 列表。下面是 _create_job_list
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ """
+ 创建前向-后向流水线并行计算任务的任务列表。
+
+ Returns:
+ list: 包含不同类型计算任务的列表,如 LR、FORWARD、BACKWARD、OPT。
+ """
+ # 获取micro-batch的数量,通常由外部传递给流水线并行计算。
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+
+ # 创建一个空的任务列表,用于存储不同类型的计算任务。
+ job_list = []
+
+ # 创建LR(学习率计算)任务,并将其添加到任务列表中。
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 为每个micro-batch创建前向计算任务。
+ for i in range (num_micro_batches):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(i)
+ job_list.append(forward_job)
+
+ # 为每个micro-batch创建后向计算任务。
+ for i in range (num_micro_batches):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(i)
+ job_list.append(backward_job)
+
+ # 创建一个优化任务,通常在所有micro-batch计算后执行。
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 ) # 通常只有一个优化任务,所以micro-batch次 ID 为0
+ job_list.append(opt_job)
+
+ # 返回包含不同类型计算任务的任务列表。
+ return job_list
由于 FThanB
编排策略就是在所有的 Forward 计算完成之后才会进行 Backward 计算,所以在 _create_job_list
中,我们会为每个 micro-batch 创建前向计算任务和后向计算任务。最后添加一个优化任务。 在获取了 jobs 之后,我们就可以将它们添加到 plan
中,然后返回 plan
。
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ ...
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
jobs 和 type_to_program 之间的关系是怎样的?
jobs 是一个列表,包含了不同类型的计算任务,如 LR、FORWARD、BACKWARD、OPT。type_to_program 是一个字典,key 是计算任务的类型,value 是对应的子 Program。
2.3 1F1B 编排模式 在 1F1B
的编排模式下,每个设备先执行前向计算,然后再执行反向传播。不等待所有设备都执行完前向计算,就开始执行反向传播。
1F1B 示例如图所示,以 GPU3 的 F1(GPU3 的第 2 个 micro-batch 的前向计算)为例,F1 在计算前,F1 的反向 B1(GPU3 的第 1 个 micro-batch 的反向计算)已经计算结束,即可释放 F1 的中间变量,从而 F2 可以复用 F1 中间变量的显存。
有研究文献表明,1F1B
方式相比于 FthenB
方式,峰值显存可以节省 37.5%,对比朴素流水线并行峰值显存明显下降,设备资源利用率显著提升。
2.4 1F1B 相关代码解读 1F1B 的编排策略顾名思义就是一个 Forward 之后跟一个 Backward,这里的 Forward 和 Backward 都是指一个 micro-batch 的计算。1F1B 编排的实现逻辑在 Pipeline1F1BPass 类中实现,它继承自 PipelinePassBase 类。Pipeline1F1BPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
python def _partial_programs (self, program):
+ # 获取 "enable_send_recv_overlap" 标志,该 FLAG 可能增加显存消耗。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+
+ # 定义计算任务的类型列表,包括 LR、FORWARD、BACKWARD 和 OPT。
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 调用 _program_for_fthenb_and_1f1b 函数,根据输入的 program 和 enable_send_recv_overlap 创建子程序。
+ sub_programs = _program_for_fthenb_and_1f1b(program, enable_send_recv_overlap)
+
+ # 获取 "enable_backward_forward_overlap" 标志,用于确定是否启用前向传播和后向传播之间的交叠。
+ enable_backward_forward_overlap = self .get_attr( "enable_backward_forward_overlap" )
+
+ if enable_backward_forward_overlap:
+ # 如果启用了前向传播和后向传播之间的交叠,记录日志以指示启用。
+ logger.info( "Backward forward overlap enabled in 1F1B." )
+
+ # 从子程序列表中获取前向传播和后向传播的程序。
+ forward_program, backward_program = sub_programs[ 1 ], sub_programs[ 2 ]
+
+ # 调用 _backward_forward_overlap 方法,将前向传播和后向传播的程序进行重组,
+ # 以确保它们可以正确地交替执行。
+ (
+ splitted_backward_job_types,
+ splitted_backward_programs,
+ splitted_forward_job_types,
+ splitted_forward_programs,
+ ) = self ._backward_forward_overlap(backward_program, forward_program)
+
+ # 更新计算任务的类型列表和子程序列表,将交叠后的任务类型和程序添加进去。
+ types += splitted_forward_job_types + splitted_backward_job_types
+ sub_programs += (
+ splitted_forward_programs + splitted_backward_programs
+ )
+
+ for i in range ( len (types)):
+ logger.debug(
+ f "type = { types[i] } , sub_programs = { sub_programs[i] }\\n "
+ )
+
+ # 记录调试信息,打印在稳定阶段执行的计算任务类型。
+ logger.debug( f "jobs_in_stable_phase = {self .jobs_in_stable_phase } " )
+
+ # 返回计算任务类型列表和相应的子程序列表。
+ return types, sub_programs
这里面的 _backward_forward_overlap
主要是用于实现前向传播和后向传播之间的交叠,是 1F1B 调度的优化算法。我们这里不做详细介绍,感兴趣的小伙伴可以自行阅读源码。除了 _backward_forward_overlap
之外,1F1B 的 _partial_programs
和 FThenB 的 _partial_programs
逻辑是一样的,都是调用 _program_for_fthenb_and_1f1b
函数,根据输入的 program 和 enable_send_recv_overlap 创建子 Program。
下面我们来看看 _create_job_list
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+ pp_stage = self .get_attr( "pp_stage" )
+ pp_degree = self .get_attr( "pp_degree" )
+
+ job_list = []
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 确保micro-batch数大于等于计算任务的度数
+ assert (
+ pp_degree <= num_micro_batches
+ ), "Num of micro batches should larger than or equal to pp degree."
+
+ micro_batch_in_warmup = pp_degree - pp_stage
+ micro_batch_in_1f1b = num_micro_batches - micro_batch_in_warmup
+
+ # 预热阶段
+ forward_micro_batch_id = 0
+ for i in range (micro_batch_in_warmup):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(forward_micro_batch_id)
+ job_list.append(forward_job)
+ forward_micro_batch_id += 1
+
+ backward_micro_batch_id = 0
+ for i in range (micro_batch_in_1f1b):
+ # 为稳定阶段中的每个计算任务(BACKWARD和FORWARD)创建对应的任务
+ # 每个micro-batch中都有一个 BACKWARD 和一个 FORWARD 计算任务
+ for job_type in self .jobs_in_stable_phase:
+ job = core.Job(job_type)
+ micro_batch_id = (
+ forward_micro_batch_id
+ if job_type.startswith( FORWARD )
+ else backward_micro_batch_id
+ )
+ job.set_micro_batch_id(micro_batch_id)
+ job_list.append(job)
+ forward_micro_batch_id += 1
+ backward_micro_batch_id += 1
+
+ for i in range (micro_batch_in_warmup):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(backward_micro_batch_id)
+ job_list.append(backward_job)
+ backward_micro_batch_id += 1
+
+ # 创建优化任务
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 )
+ job_list.append(opt_job)
+ return job_list
可以看到,1F1B 的 _create_job_list
和 FThenB 的逻辑略有不同,1F1B 的 _create_job_list
中会根据 pp_stage
和 pp_degree
来确定前向计算任务和后向计算任务的数量。在稳定阶段中,每个 micro-batch 中都有一个 BACKWARD 和一个 FORWARD 计算任务。最后添加一个优化任务。
预热过程是什么?
根据 1F1B 的流水编排图可以发现,在训练刚刚开始的时候,gpu 中会有很大的空闲,这个时候任务的执行顺序不是完全按照 1F1B 的编排方式,预热阶段就是对应这个过程。
2.5 流水并行执行过程 没启动多卡训练的时候,paddle 的训练命令类似于:
bash python -m paddle.distributed.launch --gpus 0,1,2,3 train.py
这个 paddle.distributed.launch
模块会启动多个进程,每个进程都会执行 train.py
,并且会传入不同的环境变量,用于指定当前进程的角色和进程数量。下面分析一下每个进程里面上面拆分出来的 job 是如何执行的。
在获取到编排好的 job_list
之后,我们就可以初始化 Executor
对象,然后执行 Executor
的 run
方法。下面是初始化 StandaloneExecutor
对象的代码:
python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
+else :
+ ...
+ plan = core.Plan([default_job], type_to_program)
+
+new_exe = _StandaloneExecutor(place, plan, scope)
+return new_program, new_exe
其中的核心代码 apply_pass
在上面已经介绍过了。 在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。
_StandaloneExecutor 是 C++ 端的一个类,下面是它的构造函数:
cpp StandaloneExecutor :: StandaloneExecutor ( const platform ::Place & place,
+ const interpreter ::Plan & plan,
+ Scope * scope)
+ : place_ (place), plan_ (plan), scope_ (scope) {
+ // 获取计划中micro-batch的数量。
+ int64_t micro_batch_num = plan_. MicroBatchNum ();
+
+ // 调整待等待的强制事件向量的大小,以匹配micro-batch的数量。
+ vec_force_events_to_wait_. resize (micro_batch_num);
+
+ // 为每个micro-batch创建新的 Scope,并将其存储在 micro_batch_scopes_ 中。
+ for ( int64_t i = 0 ; i < micro_batch_num; ++ i) {
+ micro_batch_scopes_. emplace_back ( & scope-> NewScope ());
+ }
+
+ // 创建一个用于日志记录的字符串流,显示micro-batch的创建。
+ std ::stringstream ss;
+ ss << "Create " << micro_batch_num << " micro_batch_scopes for scope "
+ << scope_ << " : " ;
+ for (Scope * scope : micro_batch_scopes_) {
+ ss << scope << ", " ;
+ }
+ VLOG ( 6 ) << ss. str ();
+
+ // 获取计划中的所有Job
+ const auto& jobs = plan_. JobList ();
+
+ // 对每个 Job 执行以下操作。
+ for ( const auto& job : jobs) {
+ const std ::string & job_type = job-> Type ();
+ std ::shared_ptr < ProgramDesc > program = nullptr ;
+ std ::shared_ptr < :: pir ::Program > ir_program = nullptr ;
+
+ if (FLAGS_enable_pir_api || FLAGS_enable_new_ir_in_executor) {
+ ir_program = plan_. IrProgram (job_type);
+ } else {
+ program = std :: make_shared < ProgramDesc >( * (plan_. Program (job_type)));
+ }
+
+ int64_t micro_batch_id = job-> MicroBatchId ();
+
+ // 检查micro-batch ID 是否在合理范围内。
+ PADDLE_ENFORCE (
+ micro_batch_id >= 0 && micro_batch_id < micro_batch_num,
+ phi :: errors :: Unavailable ( "The micro batch id ( %lld ) out of bound, "
+ "which should be in the range of [0, %lld ]." ,
+ micro_batch_id,
+ micro_batch_num));
+
+ // 如果存在多个micro-batch并且未启用 PIR API,则设置 Feed 和 Fetch 操作的列属性。
+ if (micro_batch_num > 1 && ! FLAGS_enable_pir_api) {
+ SetColAttrForFeedFetchOps (program, micro_batch_num, micro_batch_id);
+ }
+
+ interpreter ::ExecutionConfig execution_config;
+ execution_config.create_local_scope = false ;
+ execution_config.skip_gc_vars = job-> SkipGcVars ();
+
+ // 当前仅支持 CPU。
+ // 如果启用新 IR,创建一个包含计算的 IR 程序并将其更新为计划。
+ if (FLAGS_enable_new_ir_in_executor) {
+ ... // 新 IR 相关代码暂不讨论
+ } else {
+ // 创建 InterpreterCore 并将其存储在 interpretercores_ 中。
+ interpretercores_. emplace_back (
+ std :: make_shared < InterpreterCore >(place_,
+ program-> Block ( 0 ),
+ micro_batch_scopes_[micro_batch_id],
+ execution_config));
+ interpretercores_. back ()-> SetCopyProgram (program);
+
+ auto prog_inter = const_cast< ProgramInterpreter *> (
+ static_cast<const ProgramInterpreter *> (
+ interpretercores_. back ()-> Impl ()));
+ prog_inter-> SetForceEventsToWaitInfo (
+ & (vec_force_events_to_wait_[micro_batch_id]));
+
+ ...
+ }
+ }
+ }
+}
在初始化的时候,Paddle 会为每个 job 都创建一个 InterpreterCore
对象,然后将这些 InterpreterCore
对象存储在 interpretercores_
中。在后续的执行过程中,Paddle 会根据不同 job 执行不同 InterpreterCore
对象。初始化了 StandaloneExecutor 对象之后,我们就可以执行 run
方法了。下面是 C++ 端 run
方法的实现逻辑:
cpp paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ // 创建一个事件记录器,用于跟踪 StandaloneExecutor::run 方法的执行。
+ platform ::RecordEvent record_event (
+ "StandaloneExecutor::run" , platform :: TracerEventType ::UserDefined, 1 );
+
+ // 获取计划中的所有作业。
+ const auto& jobs = plan_. JobList ();
+
+ // 用于跟踪不同类型的作业的第一个出现位置的映射。
+ std ::map < std ::string, size_t> type_to_first_id;
+
+ // 如果共享构建结果的标志为假,执行以下操作。
+ if ( ! is_interpretercore_build_result_shared_) {
+ // 为第一个作业设置其类型的映射,并确保所有其他相同类型的作业共享工作队列。
+ type_to_first_id[jobs[ 0 ]-> Type ()] = 0 ;
+ for ( size_t job_idx = 1 ; job_idx < jobs. size (); ++ job_idx) {
+ interpretercores_[job_idx]-> ShareWorkQueueFrom (interpretercores_[ 0 ]);
+ if (type_to_first_id. count (jobs[job_idx]-> Type ()) == 0 ) {
+ type_to_first_id[jobs[job_idx]-> Type ()] = job_idx;
+ }
+ }
+ // 将共享构建结果的标志设置为真。
+ is_interpretercore_build_result_shared_ = true ;
+ }
+
+ // 迭代所有作业。
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+
+ // 创建一个事件记录器,用于跟踪每个作业的执行。
+ platform ::RecordEvent record_event (
+ job_type + "-" + std :: to_string (job-> MicroBatchId ()),
+ platform :: TracerEventType ::UserDefined,
+ 1 );
+
+ // 记录详细日志,显示作业的索引、类型和micro-batch ID。
+ VLOG ( 6 ) << "Run job (" << job_idx << "), type = " << job_type
+ << ", micro_batch_id =" << job-> MicroBatchId ();
+
+ // 如果作业类型已经在 type_to_first_id 中,且未启用新 IR,则共享构建结果。
+ if (type_to_first_id. count (job_type) != 0 &&
+ ! FLAGS_enable_new_ir_in_executor) {
+ interpretercores_[job_idx]-> ShareBuildResultsFrom (
+ interpretercores_[type_to_first_id[job_type]]);
+ }
+
+ // 如果作业的数量大于 1 且作业类型不是 "forward",则运行作业(使用一个空的临时 feed 名称列表)。
+ // 否则,运行作业并传递真正的 feed 名称列表。
+ if (jobs. size () > 1 && job_type != "forward" ) {
+ const std ::vector < std ::string > tmp_feed_names = {};
+ interpretercores_[job_idx]-> Run (tmp_feed_names, /*need_fetch = */ false );
+ } else {
+ interpretercores_[job_idx]-> Run (feed_names, /*need_fetch = */ false );
+ }
+ }
+
+ // 记录每个作业的运行时间,如果启用了 CUDA 且自动并行分析器被激活。
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+
+ // 返回 Fetch Tensors,根据是否启用新 IR 采取不同的操作。
+ if (FLAGS_enable_new_ir_in_executor) {
+ // 创建一个 FetchList,包含需要获取的张量。
+ framework ::FetchList fetch_res;
+ for ( auto& var_name : fetch_var_names_) {
+ auto* var = scope_-> FindVar (var_name);
+ fetch_res. push_back (var->Get < phi ::DenseTensor > ());
+ }
+
+ return fetch_res;
+ } else {
+ // 获取 "interpreter::kFetchVarName" 变量,其中包含需要返回的 Fetch Tensors。
+ auto* fetch_var = scope_-> FindVar ( interpreter ::kFetchVarName);
+ if (fetch_var) {
+ return std :: move ( * fetch_var->GetMutable < framework ::FetchList > ());
+ } else {
+ return {};
+ }
+ }
+}
三、流水并行可视化工作 3.1 工作背景 当下大模型的训练时间较长,分布式训练时序图的可视化对于调试和分析模型的训练过程非常重要。当下没有工具能够直接给出各个 GPU 设备上不同 Job 的运行区间,因此我们需要设计一个可视化工具来实现这个功能。
当下的工作大多是可视化出 cpu 端的各个 Job 的运行区间。由于 gpu 任务的异步性,在 cpu 端启动的 Job 并不一定在 gpu 端立即执行,因此 cpu 端的可视化并不能直接反映出 gpu 端的运行情况 。
3.2 可视化实现思路 我们的可视化工具的实现思路是:在 gpu 端各个 Job 结束的时候,打印出 Job 的类型和结束时间,然后在使用 python 脚本这些信息,绘制出各个 Job 的运行区间 。
3.3 准确定位 Job 的开始与结束时间 Paddle 中所有的计算任务都是在一个流上完成的,这个流我们叫做计算流。为了能够准确定位 Job 的开始与结束,我们需要找到每个 Job 中第一个计算算子,和最后一个计算算子,并在第一个计算算子之前插入一个 cuda stream callback
,在最后一个计算算子之后插入一个 cuda callback
。由于 cuda stream callback
会等待计算流中前面的任务执行完毕后才会执行,因此我们可以准确的定位出 Job 的开始时间和结束时间。
前面说到过每个 Job 都是由一个 InterpreterCore
对象来执行的,我们在每个 InterpreterCore
对象中使用自定义类来存储 Job 的开始时间和结束时间。下面是每个 InterpreterCore
对象中插入 cuda stream callback
和 cuda callback
的代码:
cpp // paddle/fluid/framework/new_executor/program_interpreter.cc
+void ProgramInterpreter :: RunInstruction ( const Instruction & instr_node ) {
+ ...
+ try {
+ instr_node. WaitEvent (place_);
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 如果 timer 还没插入开始的 callback 并且当前的 op 不是通信 op,那么就插入开始的callback
+ if ( ! calculate_stream_timer_-> IsStarted () &&
+ ! interpreter :: IsCommunicationOp (instr_node)) {
+ VLOG ( 3 ) << "Start calculated stream timer from op: " << op-> Type ();
+ calculate_stream_timer_-> Start ();
+ }
+ }
+#endif
+ ...
+}
上面的代码给出了在第一个计算算子之前插入 cuda stream callback
的逻辑,下面是在最后一个计算算子之后插入 cuda callback
的逻辑:
cpp void ProgramInterpreter :: ExecuteInstructionList (
+ const std :: vector < Instruction > & vec_instr ) {
+ ...
+ if (enable_job_schedule_profiler_) {
+ for ( int i = vec_instr. size () - 1 ; i >= 0 ; -- i) {
+ auto& instr_node = vec_instr[i];
+ if ( ! interpreter :: IsCommunicationOp (instr_node)) {
+ // 记录下来最后一个计算 op 的id
+ VLOG ( 3 ) << "Last calculated op type: " << instr_node. OpBase ()-> Type ();
+ last_calculate_instr_id_ = i;
+ break ;
+ }
+ }
+ }
+ ...
+}
+
+void ProgramInterpreter :: RunInstructionAsync ( size_t instr_id ) {
+ ...
+ while ( ! ready_ops. empty ()) {
+ instr_id = ready_ops. top ();
+ ready_ops. pop ();
+ auto& instr_node = vec_instruction_. at (instr_id);
+
+ RunInstruction (instr_node);
+
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 给最后一个计算 op 之后插入一个callback
+ if (instr_id == last_calculate_instr_id_ &&
+ calculate_stream_timer_-> IsStarted ()) {
+ VLOG ( 3 ) << "Stop calculated stream timer from op: "
+ << instr_node. OpBase ()-> Type ();
+ calculate_stream_timer_-> Stop ();
+ }
+ }
+#endif
+}
当所有的 Job 都执行完毕之后,我们就可以 StandAloneExecutor
的 Run
方法中获取到每个 Job 的开始时间和结束时间了。下面是获取 Job 开始时间和结束时间的代码:
cpp // paddle/fluid/framework/new_executor/standalone_executor.cc
+paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ ...
+ // record each job's run time
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+ ...
+}
+
+// paddle/fluid/framework/new_executor/interpretercore.cc
+std :: tuple < double , double > ProgramInterpreter :: InterpreterRunTime () {
+ double start_time = 0 , end_time = 0 ;
+#if defined ( PADDLE_WITH_CUDA )
+ start_time = calculate_stream_timer_-> StartTime ();
+ end_time = calculate_stream_timer_-> EndTime ();
+#endif
+ return std :: make_tuple (start_time, end_time);
+}
3.4 可视化工具的实现 在获取到每个 Job 的开始时间和结束时间之后,我们就可以使用 python 脚本来绘制出各个 Job 的运行区间了。可视化工具的实现思路是将每个 Job 的开始时间和结束时间保存成 Chrome Trace Event 的格式,然后使用 chrome://tracing
工具来绘制出各个 Job 的运行区间。以下是绘制效果图:
参考文献 https://docs.oneflow.org/master/parallelism/01_introduction.html#_5 https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_parallel_end_to_end/index_cn.html ',108)]))}const m=i(o,[["render",c]]);export{u as __pageData,m as default};
diff --git a/assets/posts_paddleocr-release.md.nG6czfOR.js b/assets/posts_paddleocr-release.md.nG6czfOR.js
new file mode 100644
index 0000000..7a4014c
--- /dev/null
+++ b/assets/posts_paddleocr-release.md.nG6czfOR.js
@@ -0,0 +1 @@
+import{_ as t,c as a,k as r,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/SVTRv2.5HokU9Qv.png",n="/assets/SLANet-LCNetV2.CZld0Zi9.png",s="/assets/contributors.B2Kgal7g.png",d="/assets/doc_site.BJdBqEIO.png",b=JSON.parse('{"title":"终于等到你!PaddleOCR 新版本发布!","description":"","frontmatter":{"title":"终于等到你!PaddleOCR 新版本发布!","date":"2024-07-08T00:00:00.000Z","author":{"name":"尤师傅","github":"Harryoung"}},"headers":[],"relativePath":"posts/paddleocr-release.md","filePath":"posts/paddleocr-release.md"}'),i={name:"posts/paddleocr-release.md"};function p(c,e,h,g,u,C){return o(),a("div",null,e[0]||(e[0]=[r('在开源社区的热烈期待与共同努力下,PaddleOCR 迎来了里程碑式的版本更新——v2.8.0!本次更新不仅引入了前沿的 OCR 技术成果 ,还对项目结构进行了深度优化 ,解决了若干历史疑难问题 ,旨在为广大开发者提供更加高效、便捷的 OCR 解决方案。让我们一同探索 PaddleOCR v2.8.0 带来的全新体验与无限可能!
顶尖模型引入,引领 OCR 技术潮流 PaddleOCR v2.8.0 版本隆重引入了PaddleOCR 算法模型挑战赛的冠军方案 ,为 OCR 领域树立了新的标杆。 其中,赛题一“OCR 端到端识别任务 ”的冠军方案——场景文本识别算法 SVTRv2 ,以其卓越的识别性能与泛化能力,为用户带来了前所未有的识别体验。
赛题二“通用表格识别任务 ”的冠军方案——表格识别算法 SLANet-LCNetV2 ,则以其精准高效的表格识别能力,为数据处理与分析提供了强有力的支持。
项目结构优化,聚焦 OCR 核心 为了进一步提升 PaddleOCR 项目的专业性与易用性,我们决定将非核心模块 PPOCRLabel 和 StyleText 迁移至新的仓库,使 PaddleOCR 项目更加专注于 OCR 与版面识别 的核心技术。这一举措不仅简化了项目结构,也为开发者提供了更加清晰的项目导航与资源访问路径。
详见:Notice of PPOCRLabel and StyleText Project Migration
历史疑难问题解决,提升用户体验 半年多来,PaddleOCR 存在若干历史疑难问题,影响了开发者的使用体验。因此,在新版本中,我们重点解决了更新 Backbone 后无法运行模型、numpy 版本依赖冲突、Mac 系统中运行卡顿 等一系列历史疑难问题。部分疑难问题还在解决过程中,欢迎广大开发者一起参与!
详见:【疑难解决】解决 PaddleOCR 历史存在的疑难 Issue
其它优化改进,持续精进 除了上述重大更新外,PaddleOCR v2.8.0 版本还包含了一系列细微但重要的优化改进。包括但不限于:
解决版面分析中,OCR 结果偶尔丢失的问题 添加 pyproject.toml,使 PaddleOCR 符合 PEP 518 规范 对于大图推理,引入滑动窗口操作 这些改进旨在进一步提升软件的稳定性、兼容性和性能表现 ,确保 PaddleOCR 能够在更广泛的场景中得到应用。
开源共建,共创辉煌 需要特别强调的是,PaddleOCR v2.8.0 版本的每一个进步与成就都离不开开源社区的支持与贡献。在 PMC(Project Management Committee) 的统一管理下,众多社区开发者携手并进、共同努力,才使得 PaddleOCR 能够不断前行、日益完善。这里要特别感谢 PaddleOCR PMC 成员:@GreatV (PMC Chair)、@tink2123 (PMC Chair)、@Topdu 、@SWHL 、@Liyulingyue 、@Sunting78 、@jzhang533 ,也感谢虽然暂未加入 PMC 但是作出了大量贡献的热心开发者。
新版本 contributors 列表,贡献者数量创历史新高!
这里预告一下,为了更好地服务广大开发者,PaddleOCR 文档教程专属站点 正在由 PMC 展开建设。该站点将汇集仓库中原先散落在各处的文档资源,支持关键词检索 功能,界面优雅舒适,相信大家一定会喜欢。
我们诚挚地邀请更多开发者和开源爱好者加入我们的行列,一起将 PaddleOCR 越做越好!
结语 PaddleOCR v2.8.0 版本的发布是我们迈向新征程的重要一步。我们坚信,在未来的日子里,在大家的共同努力下,PaddleOCR 将不断创新、持续进步,为 OCR 领域的发展贡献更多的智慧与力量!
',25)]))}const m=t(i,[["render",p]]);export{b as __pageData,m as default};
diff --git a/assets/posts_paddleocr-release.md.nG6czfOR.lean.js b/assets/posts_paddleocr-release.md.nG6czfOR.lean.js
new file mode 100644
index 0000000..7a4014c
--- /dev/null
+++ b/assets/posts_paddleocr-release.md.nG6czfOR.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as a,k as r,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/SVTRv2.5HokU9Qv.png",n="/assets/SLANet-LCNetV2.CZld0Zi9.png",s="/assets/contributors.B2Kgal7g.png",d="/assets/doc_site.BJdBqEIO.png",b=JSON.parse('{"title":"终于等到你!PaddleOCR 新版本发布!","description":"","frontmatter":{"title":"终于等到你!PaddleOCR 新版本发布!","date":"2024-07-08T00:00:00.000Z","author":{"name":"尤师傅","github":"Harryoung"}},"headers":[],"relativePath":"posts/paddleocr-release.md","filePath":"posts/paddleocr-release.md"}'),i={name:"posts/paddleocr-release.md"};function p(c,e,h,g,u,C){return o(),a("div",null,e[0]||(e[0]=[r('在开源社区的热烈期待与共同努力下,PaddleOCR 迎来了里程碑式的版本更新——v2.8.0!本次更新不仅引入了前沿的 OCR 技术成果 ,还对项目结构进行了深度优化 ,解决了若干历史疑难问题 ,旨在为广大开发者提供更加高效、便捷的 OCR 解决方案。让我们一同探索 PaddleOCR v2.8.0 带来的全新体验与无限可能!
顶尖模型引入,引领 OCR 技术潮流 PaddleOCR v2.8.0 版本隆重引入了PaddleOCR 算法模型挑战赛的冠军方案 ,为 OCR 领域树立了新的标杆。 其中,赛题一“OCR 端到端识别任务 ”的冠军方案——场景文本识别算法 SVTRv2 ,以其卓越的识别性能与泛化能力,为用户带来了前所未有的识别体验。
赛题二“通用表格识别任务 ”的冠军方案——表格识别算法 SLANet-LCNetV2 ,则以其精准高效的表格识别能力,为数据处理与分析提供了强有力的支持。
项目结构优化,聚焦 OCR 核心 为了进一步提升 PaddleOCR 项目的专业性与易用性,我们决定将非核心模块 PPOCRLabel 和 StyleText 迁移至新的仓库,使 PaddleOCR 项目更加专注于 OCR 与版面识别 的核心技术。这一举措不仅简化了项目结构,也为开发者提供了更加清晰的项目导航与资源访问路径。
详见:Notice of PPOCRLabel and StyleText Project Migration
历史疑难问题解决,提升用户体验 半年多来,PaddleOCR 存在若干历史疑难问题,影响了开发者的使用体验。因此,在新版本中,我们重点解决了更新 Backbone 后无法运行模型、numpy 版本依赖冲突、Mac 系统中运行卡顿 等一系列历史疑难问题。部分疑难问题还在解决过程中,欢迎广大开发者一起参与!
详见:【疑难解决】解决 PaddleOCR 历史存在的疑难 Issue
其它优化改进,持续精进 除了上述重大更新外,PaddleOCR v2.8.0 版本还包含了一系列细微但重要的优化改进。包括但不限于:
解决版面分析中,OCR 结果偶尔丢失的问题 添加 pyproject.toml,使 PaddleOCR 符合 PEP 518 规范 对于大图推理,引入滑动窗口操作 这些改进旨在进一步提升软件的稳定性、兼容性和性能表现 ,确保 PaddleOCR 能够在更广泛的场景中得到应用。
开源共建,共创辉煌 需要特别强调的是,PaddleOCR v2.8.0 版本的每一个进步与成就都离不开开源社区的支持与贡献。在 PMC(Project Management Committee) 的统一管理下,众多社区开发者携手并进、共同努力,才使得 PaddleOCR 能够不断前行、日益完善。这里要特别感谢 PaddleOCR PMC 成员:@GreatV (PMC Chair)、@tink2123 (PMC Chair)、@Topdu 、@SWHL 、@Liyulingyue 、@Sunting78 、@jzhang533 ,也感谢虽然暂未加入 PMC 但是作出了大量贡献的热心开发者。
新版本 contributors 列表,贡献者数量创历史新高!
这里预告一下,为了更好地服务广大开发者,PaddleOCR 文档教程专属站点 正在由 PMC 展开建设。该站点将汇集仓库中原先散落在各处的文档资源,支持关键词检索 功能,界面优雅舒适,相信大家一定会喜欢。
我们诚挚地邀请更多开发者和开源爱好者加入我们的行列,一起将 PaddleOCR 越做越好!
结语 PaddleOCR v2.8.0 版本的发布是我们迈向新征程的重要一步。我们坚信,在未来的日子里,在大家的共同努力下,PaddleOCR 将不断创新、持续进步,为 OCR 领域的发展贡献更多的智慧与力量!
',25)]))}const m=t(i,[["render",p]]);export{b as __pageData,m as default};
diff --git a/assets/posts_pfcc-36th.md.CD-R9roG.js b/assets/posts_pfcc-36th.md.CD-R9roG.js
new file mode 100644
index 0000000..6ffe5dc
--- /dev/null
+++ b/assets/posts_pfcc-36th.md.CD-R9roG.js
@@ -0,0 +1 @@
+import{M as u,_ as a}from"./chunks/MessageBox.CshcSYCA.js";import{c as i,k as o,a as n,v as t,i as r,s as e,o as d}from"./chunks/framework.D1-4jGi8.js";const s="/assets/cut-1.WioqBQsV.png",P="/assets/cut-2.DTE8mGwP.png",f="/assets/cut-3.DykMff0-.png",v=JSON.parse('{"title":"第三十六次 PFCC 会议|Ivy 与 PaConvert 分享","description":"","frontmatter":{"title":"第三十六次 PFCC 会议|Ivy 与 PaConvert 分享","date":"2024-3-29","author":{"name":"孙师傅","github":"sunzhongkai588"},"co_authors":[{"name":"Daniel(英国小哥)","github":"djl11"},{"name":"莱师傅","github":"RedContritio"}]},"headers":[],"relativePath":"posts/pfcc-36th.md","filePath":"posts/pfcc-36th.md"}'),p={name:"posts/pfcc-36th.md"},I=Object.assign(p,{setup(g){return(y,l)=>(d(),i("div",null,[l[31]||(l[31]=o('在第 36 次 PFCC 会议上,我们有幸邀请了 Ivy 社区的英国小哥 Daniel(@djl11 )和 Paddle 社区开发者莱师傅(@RedContritio )分别分享了代码转换工具 Ivy、PaConvert。
会议议程 如何通过 Ivy 将 PyTorch 和 TensorFlow 模型进行转换,并直接在 Paddle 项目中使用。(35 min) @djl11
Ivy 模型转换 demo 讲解(截图) @RedContritio PaConvert 代码转换工具介绍 (10 ~ 20min)
PaConvert 介绍(截图) 会议材料及回放见百度网盘链接: https://pan.baidu.com/s/16vAVoXpCgdrrRK5e_-w7Ig ,提取码见 PFCC 微信群公告。
QA 环节 所有 QA 内容均已记录在「第三十六次 PFCC 会议纪要」 中。
Part-1: Ivy (部分) ',7)),n("ul",null,[n("li",null,[l[1]||(l[1]=n("p",null,[n("strong",null,"问题 1:"),t(" 你有测试过多少模型能够转换成功?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[0]||(l[0]=[t(" 目前测试了 30 个主流模型,均能转换成功。目前我们正在测试更多 hugging face 上的模型,大概 70 ~ 75% 能够转换成功。我们也欢迎和鼓励社区告诉我们哪些模型无法有效转换,我们有信心能够解决这些问题。 ")])),_:1})]),_:1})]),n("li",null,[l[3]||(l[3]=n("p",null,[n("strong",null,"问题 2:"),t(" 对于成功转换的模型,它会影响性能吗?或者可能需要更多的时间来训练嘛?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[2]||(l[2]=[t(" 这是一个好问题,也是我们目前正在测试的东西。我们现在看到在 Paddle 上会有 30% 到 40% 的性能损失, 这是因为在我们的 Paddle 后端上有一些低效,我们目前正在努力解决这个问题。 "),n("br",null,null,-1),t(" 性能问题取决于模型,但通常来讲并不会影响训练性能。当我们从 Pytorch 转换到 Tensorflow 时,经常看到训练速度的提高。特别是当我们从一个框架转化到 Jax,经常看到一个大幅度的提升,尤其是在 TPU 上。 "),n("br",null,null,-1),t(" 所以可能有一些开销,但总的来讲不会有特别大幅度的降低。即使存在个别问题,我们也会很快修复他们。话说回来,这也是一个长期的过程,因为我们正在开发许多不同的框架,并与许多不同的生态伙伴合作。我们把精力集中在用户反馈的真实用例上,而不是试图修复所有东西。所以当你使用过程中确实出问题了,请在 discord 上联系我们,我们会把它添加到高优先级的列表中,并尽快解决。 ")])),_:1})]),_:1})]),n("li",null,[l[5]||(l[5]=n("p",null,[n("strong",null,"问题 3:"),t(" 请问是否有覆盖率相关的工作,类似 PyTorch 那样对后端支持覆盖率有表单或者对应的 CI 流水线")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[4]||(l[4]=[t(" 我们做覆盖的方式是详尽的单元测试,所以答案是有。我们在 Github 上 的 CI 已经达到了最大值,我们一直在运行单元测试,在 CPU 和 GPU 上测试每个框架、每个函数,所以我们确实有扩展函数覆盖范围。 "),n("br",null,null,-1),t(" 但在每个设备上,支持每个框架、每个版本的每个功能,是一个非常大的、指数爆炸级的工作。基本上有数百万个这样的测试。所以我们真正关注的是什么?这是一个很长的答案,但就像生活中的许多事情一样,我们需要关注重要的事情。我们把更多的注意力放在真正常见的函数上(relu、add、matmul 等)那些真正不常见的、较少使用的函数,我们关注的比较少。在我们看来,我们可能永远不会达到完全覆盖,但只要覆盖到 99% 的模型就是 OK 的,这比支持每个版本每个函数更重要。 ")])),_:1})]),_:1})]),n("li",null,[l[7]||(l[7]=n("p",null,[n("strong",null,"问题 4:"),t(" PyTorch 大概有两千多个 API,包括很多废弃的、不常见的 API,有多少可以通过 Ivy 转换?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[6]||(l[6]=[t(" 我们只关注当前最新版本的 pytorch,以及其 functional API。 在 ivy/functional/frontends 你可以看到所有这些细节,包括我们在每个框架中都支持什么。 "),n("br",null,null,-1),t(" 主要的一点是我们支持 functional API,但我们不支持 ATen。我们并不把转换限制在 ATen 或很小的范围内(比如组成所有函数的函数子集),我们可以这么做,但不这样做的原因是我们想更高级别的代码转换。某种程度上,函数的越高层越好,因为当我们从高层 PyTorch 函数转换到高层 ivy 函数、高层 Tensorflow 函数时,把函数拆分成更小单位仍然是有可能的。但如果将底层 OP 重新创建为目标框架中能被优化的高级函数,要困难得多。这就是为什么我们专注于 functional API 和高级函数更重要(但我们也不重新实现的 class)。 "),n("br",null,null,-1),t(" 这是一个很长的回答,但这是有意义的。不过我们看到了良好的覆盖率,看到绝大多数模型都能正确转换。我们鼓励人们尝试它,如果它不起作用,让我们知道,我们会让它起作用。 ")])),_:1})]),_:1}),l[8]||(l[8]=n("blockquote",null,[n("p",null,[t("编者注:细节戳 ➡️ "),n("a",{href:"https://github.com/unifyai/ivy/tree/main/ivy/functional/frontends",target:"_blank",rel:"noreferrer"},"ivy/functional/frontends")])],-1))]),n("li",null,[l[10]||(l[10]=n("p",null,[n("strong",null,"问题 5:"),t(" 我们刚看到的前端,目前支持了很多。但现在还有很多 API 不能转换,那我该怎么做?怎么处理它们?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[9]||(l[9]=[t(" 基本上,如果我们看到开发者对某 API 有足够的兴趣,届时我们会支持。对于不那么常见的 API,Ivy 也是可以支持这些的。如果有一个模型不能转换成功,而我们有信心能让他转换成功,那么我们可以添加对那些 API 的支持。 "),n("br",null,null,-1),t(" 如果用户有自定义的 C++ 代码,那么默认情况下不能转换,但我们提供一个接口,你可以在其中指定 C++ 的 torch 实现,这样就可以转换了。 ")])),_:1})]),_:1})]),n("li",null,[l[12]||(l[12]=n("p",null,[n("strong",null,"问题 6:"),t(" PyTorch API 有很多参数,不同参数可以组成各种组合,如果某些参数不支持,则如何处理?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[11]||(l[11]=[t(" 基本上我们支持 PyTorch 的所有行为,包括所有额外的参数等。我们通过构建基于 Ivy 的统一的 functional API(如 ivy.matmul、ivy.add、ivy.reshape 等),重新创建 PyTorch 函数,以完美模仿 PyTorch 的任何可能行为。这可能需要一个 Ivy 函数来重新创建,但如果是一个具有多种不同模式的复杂 Python 函数,可能就需要十个。然后,使用 Ivy 重新创建所有这些行为,每个 Ivy 函数都有特定的 Paddle 后端。因此,一个 PyTorch 函数可能需要多个 Ivy 函数,而这些 Ivy 函数又可能需要多个 Paddle 函数来完全重新创建该行为。所有变体、额外的参数和边缘情况都可以通过中间表示和 API 得到支持。在这些情况下,需要将其作为 Paddle 函数的组合重新创建,尽管这可能以运行时间速度为代价,但通常不会看到大的损失。 ")])),_:1})]),_:1})]),n("li",null,[l[14]||(l[14]=n("p",null,[n("strong",null,"问题 7:"),t(" 目前大模型很流行。对于预训练的大模型,有大量的预训练权重,是否有更快的方式进行转换。")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[13]||(l[13]=[t(" 在从 PyTorch 转换模型到 Paddle 后,因为现在 Paddle 模型就是一个加强版的 PyTorch 模型,转换权重可以相对简单,比如将它们转换为 Numpy 数组,然后加载到 Paddle 中。实际上,Ivy 在模型转换过程中,会自动把所有的 PyTorch 权重转换为 Paddle 权重。 "),n("br",null,null,-1),t(" 目前没有更快的转换方式,通常使用 DLPack(张量数据结构的中间表示标准)作为中间件,但由于不同框架对 DLPack 的支持不一致,最终选择使用 Numpy 作为中介。我们把将权重转移到 CPU,以高精度格式存储并转换为 Numpy 数组,然后转移到新框架中,这种方法在 demo 演示中以及对于大型模型都能很好地工作。 "),n("br",null,null,-1),t(" 实际上目前的转换是基于 function tracing,如果大型语言模型需要多个 GPU 运行,这可能会有些复杂。不过,我们将很快转向使用纯 symbolic tracing 方法,届时就不需要存储所有权重和中间数组,而是基于符号追踪的代理数组,这将意味着不需要启动大量 GPU 来完成函数追踪。 ")])),_:1})]),_:1})]),n("li",null,[l[16]||(l[16]=n("p",null,[n("strong",null,"问题 8:"),t(" 当引入一个新 API 时,支持新 API 的成本有多大?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[15]||(l[15]=[t(" 从工程成本的角度来看,支持一个新 API 并不困难,也不是我们特别关注的问题。我们大部分时间都花在了 function tracing 的逻辑、抽象语法树(AST)逻辑以及编译器和追踪器上。 "),n("br",null,null,-1),t(" 添加一个新的前端功能并不难,做起来相当快速和容易。事实上,所有前端 API 和后端 API 都是完全开源的(Apache 2 许可),任何人都可以为其贡献代码。如果在转换模型时失败,并且报错消息指出模型转换失败是因为缺少来自 Ivy/PyTorch 前端的某个函数,我们还提供了如何提交拉取请求以及如何自行添加该功能的链接。真正困难的部分是处理动态控制流、以可扩展的方式进行函数追踪、获取正确的抽象语法树表示,这些都是与框架无关的工作,我们以一种不特定于任何框架的方式进行这些工作。因此,简短的回答是添加新 API 相对容易,真正困难的是其他部分。 ")])),_:1})]),_:1})]),n("li",null,[l[18]||(l[18]=n("p",null,[n("strong",null,"问题 9:"),t(" Ivy 是有特定的前端 API,还是只转译其他框架?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[17]||(l[17]=[t(" Ivy 本身也是一个框架,拥有自己的前端 API(如 TensorFlow、PyTorch、JAX 等)以及自己的一套函数。Ivy 的 function API 有两个用途:第一个用途是作为一个中间表示,用于从一个框架转换到另一个框架,即 Ivy 的 API 充当中间表示;第二个用途是作为其自身的框架,允许直接在 Ivy 中编写新代码,可以在 Ivy 中编写整个模型,并使用 Ivy 类和 Ivy 函数,然后可以切换后端,使用 Paddle、TensorFlow、PyTorch 或 JAX 等。因此,Ivy 既能自身作为框架,也能转译其他框架。但我们认为最有价值并且最直接的是转译器功能,因为这样已有的所有代码都可以直接使用,而无需任何人编写新的 Ivy 代码。 ")])),_:1})]),_:1})]),n("li",null,[l[20]||(l[20]=n("p",null,[n("strong",null,"问题 10:"),t(" 听起来和 keras 很相似?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[19]||(l[19]=[t(" 是的!如果忽略前端,Ivy 和 Keras 非常相似。 ")])),_:1})]),_:1})]),n("li",null,[l[22]||(l[22]=n("p",null,[n("strong",null,"问题 11:"),t(" 我们是否需要使用更高的内存来转换模型?因为也许转换模型过程中需要保存中间信息,所以可能会占用一些内存。所以我想问问,像转换 llama 这样的大模型是否 ok?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[21]||(l[21]=[t(" 这是一个很好的问题。目前,鉴于转译器是基于函数追踪(function tracing)的,确实需要调用模型以追踪图(graph),这意味着在转换时需要能够对模型进行推理。现在,转换本身不需要在目标设备上进行,只要你有一台内存足够的机器,就可以在 CPU 上完成转换,并且默认情况下转换是在 CPU 上进行的,因为通常 CPU 有的 RAM 比 GPU 多。 "),n("br",null,null,-1),t(" 在转译器的一个很旧的版本中,我们曾同时获取所有 PyTorch 权重和所有 Paddle 权重,并让它们同时存在于内存中,这是非常糟糕的做法。现在,权重从 A 转换到 B 是逐步进行的,我们先取第一个权重,将其转换为 Numpy,然后转换为 Paddle,接着转换第二个权重,这样我们就不会重复获取权重。但是,我们避免尽可能多的函数追踪(function tracing),我们现在有自己的 AST(抽象语法树)方法,这个方法工作得很好、非常稳定,我们正在与几家公司合作开发这一点。 "),n("br",null,null,-1),t(" 最终设计基于 AST,基于符号追踪,我们将实际的函数追踪作为最后的手段,因此内存使用将会非常低。但是,正如你所说,现在确实需要一些 RAM 来转换一个非常大的模型,但希望在几个月内,这将不再是问题。 ")])),_:1})]),_:1})]),n("li",null,[l[24]||(l[24]=n("p",null,[n("strong",null,"问题 12:"),t(" 你如何平衡你的生活和工作,以及保持你对开源的热情呢?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[23]||(l[23]=[t(" 平衡生活和工作非常困难,但幸运的是,我真的很热爱我正在做的事情,这是保持我动力的原因。我们不仅仅是在做一个开源项目,还在建立一家公司,需要与客户进行沟通。虽然我是唯一的创始人(并非是原本的设计),而且这确实需要付出大量的工作,但我对统一人工智能领域的景象充满热情,总是对看到的碎片化情况感到沮丧,无论是在 AI 框架还是在大型语言模型(LMM)的领域。目前我们正在努力统一这些领域,保持激情和兴奋是我继续前进的动力,如果我不再感到兴奋,可能就不会那么有趣了。幸好,我始终保持着兴奋感,所以工作并不感觉艰难。确实,因为这些并不感觉像是工作,所以更容易保持。 "),n("br",null,null,-1),t(" 此外,帝国理工学院的学习经历非常紧张,这让我掌握了之前缺少的知识教育和时间管理经验。 "),n("br",null,null,-1),t(" 但我也要说,我会把周日作为休息日,我认为你也需要休息,否则很快就会感到疲惫不堪。 ")])),_:1})]),_:1})]),n("li",null,[l[26]||(l[26]=n("p",null,[n("strong",null,"问题 13:"),t(" 英国的人工智能环境怎么样?是否会有官方活动之类的?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[25]||(l[25]=[t(" 英国的人工智能环境还是不错的。虽然我经常到处旅行,在欧洲和美国都呆过相当长的时间,所以并不算是英国本地人,但英国的 AI 环境绝对是值得关注的。比如,DeepMind 就设在英国,谷歌的主要 AI 分支也在伦敦。显然,Meta、亚马逊以及其他几家公司也在伦敦设有 AI 办公室。伦敦还有很多有趣的初创公司,所以我觉得很幸运能住在伦敦,特别是在靠近国王十字的伊斯灵顿区,那里可以说是整个科技圈的中心。我遇到的很多很酷的初创公司以及举办的活动数目都令人惊叹,所以我认为这里的环境非常好。我很高兴能在伦敦,与这么多创造酷炫事物的人在一起。 "),n("br",null,null,-1),t(" 我认为最大的 AI 人才集中地是旧金山,那里又是另一个水平,但我仍感觉英国很棒,伦敦也很棒,虽然它还没有达到旧金山的水平,但也许将来会有所改变。 ")])),_:1})]),_:1})])]),l[32]||(l[32]=n("h3",{id:"part-2-paconvert-部分",tabindex:"-1"},[t("Part-2: PaConvert (部分) "),n("a",{class:"header-anchor",href:"#part-2-paconvert-部分","aria-label":'Permalink to "Part-2: PaConvert (部分)"'},"")],-1)),n("ul",null,[n("li",null,[l[28]||(l[28]=n("p",null,[n("strong",null,"问题 1 :"),t(" PaConvert 是否是根据 AST 转换模型的?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"RedContritio",github:"RedContritio"},{default:e(()=>l[27]||(l[27]=[t(" 是的,基于解析 python 源码,然后根据 AST 生成 Paddle 模型。 ")])),_:1})]),_:1})]),n("li",null,[l[30]||(l[30]=n("p",null,[n("strong",null,"问题 2 :"),t(" 是否有中间表示?还是直接将 PyTorch 代码转换成 Paddle ?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"RedContritio",github:"RedContritio"},{default:e(()=>l[29]||(l[29]=[t(" 直接转换,没有中间表示。 ")])),_:1})]),_:1})])]),l[33]||(l[33]=n("blockquote",null,[n("p",null,"编者注 ✍️:主要是英国小哥在问莱师傅 😛")],-1)),l[34]||(l[34]=n("h2",{id:"会议剪影",tabindex:"-1"},[t("会议剪影 "),n("a",{class:"header-anchor",href:"#会议剪影","aria-label":'Permalink to "会议剪影"'},"")],-1)),l[35]||(l[35]=n("p",null,[n("img",{src:f,alt:"cut-3"})],-1))]))}});export{v as __pageData,I as default};
diff --git a/assets/posts_pfcc-36th.md.CD-R9roG.lean.js b/assets/posts_pfcc-36th.md.CD-R9roG.lean.js
new file mode 100644
index 0000000..6ffe5dc
--- /dev/null
+++ b/assets/posts_pfcc-36th.md.CD-R9roG.lean.js
@@ -0,0 +1 @@
+import{M as u,_ as a}from"./chunks/MessageBox.CshcSYCA.js";import{c as i,k as o,a as n,v as t,i as r,s as e,o as d}from"./chunks/framework.D1-4jGi8.js";const s="/assets/cut-1.WioqBQsV.png",P="/assets/cut-2.DTE8mGwP.png",f="/assets/cut-3.DykMff0-.png",v=JSON.parse('{"title":"第三十六次 PFCC 会议|Ivy 与 PaConvert 分享","description":"","frontmatter":{"title":"第三十六次 PFCC 会议|Ivy 与 PaConvert 分享","date":"2024-3-29","author":{"name":"孙师傅","github":"sunzhongkai588"},"co_authors":[{"name":"Daniel(英国小哥)","github":"djl11"},{"name":"莱师傅","github":"RedContritio"}]},"headers":[],"relativePath":"posts/pfcc-36th.md","filePath":"posts/pfcc-36th.md"}'),p={name:"posts/pfcc-36th.md"},I=Object.assign(p,{setup(g){return(y,l)=>(d(),i("div",null,[l[31]||(l[31]=o('在第 36 次 PFCC 会议上,我们有幸邀请了 Ivy 社区的英国小哥 Daniel(@djl11 )和 Paddle 社区开发者莱师傅(@RedContritio )分别分享了代码转换工具 Ivy、PaConvert。
会议议程 如何通过 Ivy 将 PyTorch 和 TensorFlow 模型进行转换,并直接在 Paddle 项目中使用。(35 min) @djl11
Ivy 模型转换 demo 讲解(截图) @RedContritio PaConvert 代码转换工具介绍 (10 ~ 20min)
PaConvert 介绍(截图) 会议材料及回放见百度网盘链接: https://pan.baidu.com/s/16vAVoXpCgdrrRK5e_-w7Ig ,提取码见 PFCC 微信群公告。
QA 环节 所有 QA 内容均已记录在「第三十六次 PFCC 会议纪要」 中。
Part-1: Ivy (部分) ',7)),n("ul",null,[n("li",null,[l[1]||(l[1]=n("p",null,[n("strong",null,"问题 1:"),t(" 你有测试过多少模型能够转换成功?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[0]||(l[0]=[t(" 目前测试了 30 个主流模型,均能转换成功。目前我们正在测试更多 hugging face 上的模型,大概 70 ~ 75% 能够转换成功。我们也欢迎和鼓励社区告诉我们哪些模型无法有效转换,我们有信心能够解决这些问题。 ")])),_:1})]),_:1})]),n("li",null,[l[3]||(l[3]=n("p",null,[n("strong",null,"问题 2:"),t(" 对于成功转换的模型,它会影响性能吗?或者可能需要更多的时间来训练嘛?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[2]||(l[2]=[t(" 这是一个好问题,也是我们目前正在测试的东西。我们现在看到在 Paddle 上会有 30% 到 40% 的性能损失, 这是因为在我们的 Paddle 后端上有一些低效,我们目前正在努力解决这个问题。 "),n("br",null,null,-1),t(" 性能问题取决于模型,但通常来讲并不会影响训练性能。当我们从 Pytorch 转换到 Tensorflow 时,经常看到训练速度的提高。特别是当我们从一个框架转化到 Jax,经常看到一个大幅度的提升,尤其是在 TPU 上。 "),n("br",null,null,-1),t(" 所以可能有一些开销,但总的来讲不会有特别大幅度的降低。即使存在个别问题,我们也会很快修复他们。话说回来,这也是一个长期的过程,因为我们正在开发许多不同的框架,并与许多不同的生态伙伴合作。我们把精力集中在用户反馈的真实用例上,而不是试图修复所有东西。所以当你使用过程中确实出问题了,请在 discord 上联系我们,我们会把它添加到高优先级的列表中,并尽快解决。 ")])),_:1})]),_:1})]),n("li",null,[l[5]||(l[5]=n("p",null,[n("strong",null,"问题 3:"),t(" 请问是否有覆盖率相关的工作,类似 PyTorch 那样对后端支持覆盖率有表单或者对应的 CI 流水线")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[4]||(l[4]=[t(" 我们做覆盖的方式是详尽的单元测试,所以答案是有。我们在 Github 上 的 CI 已经达到了最大值,我们一直在运行单元测试,在 CPU 和 GPU 上测试每个框架、每个函数,所以我们确实有扩展函数覆盖范围。 "),n("br",null,null,-1),t(" 但在每个设备上,支持每个框架、每个版本的每个功能,是一个非常大的、指数爆炸级的工作。基本上有数百万个这样的测试。所以我们真正关注的是什么?这是一个很长的答案,但就像生活中的许多事情一样,我们需要关注重要的事情。我们把更多的注意力放在真正常见的函数上(relu、add、matmul 等)那些真正不常见的、较少使用的函数,我们关注的比较少。在我们看来,我们可能永远不会达到完全覆盖,但只要覆盖到 99% 的模型就是 OK 的,这比支持每个版本每个函数更重要。 ")])),_:1})]),_:1})]),n("li",null,[l[7]||(l[7]=n("p",null,[n("strong",null,"问题 4:"),t(" PyTorch 大概有两千多个 API,包括很多废弃的、不常见的 API,有多少可以通过 Ivy 转换?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[6]||(l[6]=[t(" 我们只关注当前最新版本的 pytorch,以及其 functional API。 在 ivy/functional/frontends 你可以看到所有这些细节,包括我们在每个框架中都支持什么。 "),n("br",null,null,-1),t(" 主要的一点是我们支持 functional API,但我们不支持 ATen。我们并不把转换限制在 ATen 或很小的范围内(比如组成所有函数的函数子集),我们可以这么做,但不这样做的原因是我们想更高级别的代码转换。某种程度上,函数的越高层越好,因为当我们从高层 PyTorch 函数转换到高层 ivy 函数、高层 Tensorflow 函数时,把函数拆分成更小单位仍然是有可能的。但如果将底层 OP 重新创建为目标框架中能被优化的高级函数,要困难得多。这就是为什么我们专注于 functional API 和高级函数更重要(但我们也不重新实现的 class)。 "),n("br",null,null,-1),t(" 这是一个很长的回答,但这是有意义的。不过我们看到了良好的覆盖率,看到绝大多数模型都能正确转换。我们鼓励人们尝试它,如果它不起作用,让我们知道,我们会让它起作用。 ")])),_:1})]),_:1}),l[8]||(l[8]=n("blockquote",null,[n("p",null,[t("编者注:细节戳 ➡️ "),n("a",{href:"https://github.com/unifyai/ivy/tree/main/ivy/functional/frontends",target:"_blank",rel:"noreferrer"},"ivy/functional/frontends")])],-1))]),n("li",null,[l[10]||(l[10]=n("p",null,[n("strong",null,"问题 5:"),t(" 我们刚看到的前端,目前支持了很多。但现在还有很多 API 不能转换,那我该怎么做?怎么处理它们?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[9]||(l[9]=[t(" 基本上,如果我们看到开发者对某 API 有足够的兴趣,届时我们会支持。对于不那么常见的 API,Ivy 也是可以支持这些的。如果有一个模型不能转换成功,而我们有信心能让他转换成功,那么我们可以添加对那些 API 的支持。 "),n("br",null,null,-1),t(" 如果用户有自定义的 C++ 代码,那么默认情况下不能转换,但我们提供一个接口,你可以在其中指定 C++ 的 torch 实现,这样就可以转换了。 ")])),_:1})]),_:1})]),n("li",null,[l[12]||(l[12]=n("p",null,[n("strong",null,"问题 6:"),t(" PyTorch API 有很多参数,不同参数可以组成各种组合,如果某些参数不支持,则如何处理?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[11]||(l[11]=[t(" 基本上我们支持 PyTorch 的所有行为,包括所有额外的参数等。我们通过构建基于 Ivy 的统一的 functional API(如 ivy.matmul、ivy.add、ivy.reshape 等),重新创建 PyTorch 函数,以完美模仿 PyTorch 的任何可能行为。这可能需要一个 Ivy 函数来重新创建,但如果是一个具有多种不同模式的复杂 Python 函数,可能就需要十个。然后,使用 Ivy 重新创建所有这些行为,每个 Ivy 函数都有特定的 Paddle 后端。因此,一个 PyTorch 函数可能需要多个 Ivy 函数,而这些 Ivy 函数又可能需要多个 Paddle 函数来完全重新创建该行为。所有变体、额外的参数和边缘情况都可以通过中间表示和 API 得到支持。在这些情况下,需要将其作为 Paddle 函数的组合重新创建,尽管这可能以运行时间速度为代价,但通常不会看到大的损失。 ")])),_:1})]),_:1})]),n("li",null,[l[14]||(l[14]=n("p",null,[n("strong",null,"问题 7:"),t(" 目前大模型很流行。对于预训练的大模型,有大量的预训练权重,是否有更快的方式进行转换。")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[13]||(l[13]=[t(" 在从 PyTorch 转换模型到 Paddle 后,因为现在 Paddle 模型就是一个加强版的 PyTorch 模型,转换权重可以相对简单,比如将它们转换为 Numpy 数组,然后加载到 Paddle 中。实际上,Ivy 在模型转换过程中,会自动把所有的 PyTorch 权重转换为 Paddle 权重。 "),n("br",null,null,-1),t(" 目前没有更快的转换方式,通常使用 DLPack(张量数据结构的中间表示标准)作为中间件,但由于不同框架对 DLPack 的支持不一致,最终选择使用 Numpy 作为中介。我们把将权重转移到 CPU,以高精度格式存储并转换为 Numpy 数组,然后转移到新框架中,这种方法在 demo 演示中以及对于大型模型都能很好地工作。 "),n("br",null,null,-1),t(" 实际上目前的转换是基于 function tracing,如果大型语言模型需要多个 GPU 运行,这可能会有些复杂。不过,我们将很快转向使用纯 symbolic tracing 方法,届时就不需要存储所有权重和中间数组,而是基于符号追踪的代理数组,这将意味着不需要启动大量 GPU 来完成函数追踪。 ")])),_:1})]),_:1})]),n("li",null,[l[16]||(l[16]=n("p",null,[n("strong",null,"问题 8:"),t(" 当引入一个新 API 时,支持新 API 的成本有多大?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[15]||(l[15]=[t(" 从工程成本的角度来看,支持一个新 API 并不困难,也不是我们特别关注的问题。我们大部分时间都花在了 function tracing 的逻辑、抽象语法树(AST)逻辑以及编译器和追踪器上。 "),n("br",null,null,-1),t(" 添加一个新的前端功能并不难,做起来相当快速和容易。事实上,所有前端 API 和后端 API 都是完全开源的(Apache 2 许可),任何人都可以为其贡献代码。如果在转换模型时失败,并且报错消息指出模型转换失败是因为缺少来自 Ivy/PyTorch 前端的某个函数,我们还提供了如何提交拉取请求以及如何自行添加该功能的链接。真正困难的部分是处理动态控制流、以可扩展的方式进行函数追踪、获取正确的抽象语法树表示,这些都是与框架无关的工作,我们以一种不特定于任何框架的方式进行这些工作。因此,简短的回答是添加新 API 相对容易,真正困难的是其他部分。 ")])),_:1})]),_:1})]),n("li",null,[l[18]||(l[18]=n("p",null,[n("strong",null,"问题 9:"),t(" Ivy 是有特定的前端 API,还是只转译其他框架?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[17]||(l[17]=[t(" Ivy 本身也是一个框架,拥有自己的前端 API(如 TensorFlow、PyTorch、JAX 等)以及自己的一套函数。Ivy 的 function API 有两个用途:第一个用途是作为一个中间表示,用于从一个框架转换到另一个框架,即 Ivy 的 API 充当中间表示;第二个用途是作为其自身的框架,允许直接在 Ivy 中编写新代码,可以在 Ivy 中编写整个模型,并使用 Ivy 类和 Ivy 函数,然后可以切换后端,使用 Paddle、TensorFlow、PyTorch 或 JAX 等。因此,Ivy 既能自身作为框架,也能转译其他框架。但我们认为最有价值并且最直接的是转译器功能,因为这样已有的所有代码都可以直接使用,而无需任何人编写新的 Ivy 代码。 ")])),_:1})]),_:1})]),n("li",null,[l[20]||(l[20]=n("p",null,[n("strong",null,"问题 10:"),t(" 听起来和 keras 很相似?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[19]||(l[19]=[t(" 是的!如果忽略前端,Ivy 和 Keras 非常相似。 ")])),_:1})]),_:1})]),n("li",null,[l[22]||(l[22]=n("p",null,[n("strong",null,"问题 11:"),t(" 我们是否需要使用更高的内存来转换模型?因为也许转换模型过程中需要保存中间信息,所以可能会占用一些内存。所以我想问问,像转换 llama 这样的大模型是否 ok?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[21]||(l[21]=[t(" 这是一个很好的问题。目前,鉴于转译器是基于函数追踪(function tracing)的,确实需要调用模型以追踪图(graph),这意味着在转换时需要能够对模型进行推理。现在,转换本身不需要在目标设备上进行,只要你有一台内存足够的机器,就可以在 CPU 上完成转换,并且默认情况下转换是在 CPU 上进行的,因为通常 CPU 有的 RAM 比 GPU 多。 "),n("br",null,null,-1),t(" 在转译器的一个很旧的版本中,我们曾同时获取所有 PyTorch 权重和所有 Paddle 权重,并让它们同时存在于内存中,这是非常糟糕的做法。现在,权重从 A 转换到 B 是逐步进行的,我们先取第一个权重,将其转换为 Numpy,然后转换为 Paddle,接着转换第二个权重,这样我们就不会重复获取权重。但是,我们避免尽可能多的函数追踪(function tracing),我们现在有自己的 AST(抽象语法树)方法,这个方法工作得很好、非常稳定,我们正在与几家公司合作开发这一点。 "),n("br",null,null,-1),t(" 最终设计基于 AST,基于符号追踪,我们将实际的函数追踪作为最后的手段,因此内存使用将会非常低。但是,正如你所说,现在确实需要一些 RAM 来转换一个非常大的模型,但希望在几个月内,这将不再是问题。 ")])),_:1})]),_:1})]),n("li",null,[l[24]||(l[24]=n("p",null,[n("strong",null,"问题 12:"),t(" 你如何平衡你的生活和工作,以及保持你对开源的热情呢?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[23]||(l[23]=[t(" 平衡生活和工作非常困难,但幸运的是,我真的很热爱我正在做的事情,这是保持我动力的原因。我们不仅仅是在做一个开源项目,还在建立一家公司,需要与客户进行沟通。虽然我是唯一的创始人(并非是原本的设计),而且这确实需要付出大量的工作,但我对统一人工智能领域的景象充满热情,总是对看到的碎片化情况感到沮丧,无论是在 AI 框架还是在大型语言模型(LMM)的领域。目前我们正在努力统一这些领域,保持激情和兴奋是我继续前进的动力,如果我不再感到兴奋,可能就不会那么有趣了。幸好,我始终保持着兴奋感,所以工作并不感觉艰难。确实,因为这些并不感觉像是工作,所以更容易保持。 "),n("br",null,null,-1),t(" 此外,帝国理工学院的学习经历非常紧张,这让我掌握了之前缺少的知识教育和时间管理经验。 "),n("br",null,null,-1),t(" 但我也要说,我会把周日作为休息日,我认为你也需要休息,否则很快就会感到疲惫不堪。 ")])),_:1})]),_:1})]),n("li",null,[l[26]||(l[26]=n("p",null,[n("strong",null,"问题 13:"),t(" 英国的人工智能环境怎么样?是否会有官方活动之类的?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"Daniel",github:"djl11"},{default:e(()=>l[25]||(l[25]=[t(" 英国的人工智能环境还是不错的。虽然我经常到处旅行,在欧洲和美国都呆过相当长的时间,所以并不算是英国本地人,但英国的 AI 环境绝对是值得关注的。比如,DeepMind 就设在英国,谷歌的主要 AI 分支也在伦敦。显然,Meta、亚马逊以及其他几家公司也在伦敦设有 AI 办公室。伦敦还有很多有趣的初创公司,所以我觉得很幸运能住在伦敦,特别是在靠近国王十字的伊斯灵顿区,那里可以说是整个科技圈的中心。我遇到的很多很酷的初创公司以及举办的活动数目都令人惊叹,所以我认为这里的环境非常好。我很高兴能在伦敦,与这么多创造酷炫事物的人在一起。 "),n("br",null,null,-1),t(" 我认为最大的 AI 人才集中地是旧金山,那里又是另一个水平,但我仍感觉英国很棒,伦敦也很棒,虽然它还没有达到旧金山的水平,但也许将来会有所改变。 ")])),_:1})]),_:1})])]),l[32]||(l[32]=n("h3",{id:"part-2-paconvert-部分",tabindex:"-1"},[t("Part-2: PaConvert (部分) "),n("a",{class:"header-anchor",href:"#part-2-paconvert-部分","aria-label":'Permalink to "Part-2: PaConvert (部分)"'},"")],-1)),n("ul",null,[n("li",null,[l[28]||(l[28]=n("p",null,[n("strong",null,"问题 1 :"),t(" PaConvert 是否是根据 AST 转换模型的?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"RedContritio",github:"RedContritio"},{default:e(()=>l[27]||(l[27]=[t(" 是的,基于解析 python 源码,然后根据 AST 生成 Paddle 模型。 ")])),_:1})]),_:1})]),n("li",null,[l[30]||(l[30]=n("p",null,[n("strong",null,"问题 2 :"),t(" 是否有中间表示?还是直接将 PyTorch 代码转换成 Paddle ?")],-1)),r(u,null,{default:e(()=>[r(a,{name:"RedContritio",github:"RedContritio"},{default:e(()=>l[29]||(l[29]=[t(" 直接转换,没有中间表示。 ")])),_:1})]),_:1})])]),l[33]||(l[33]=n("blockquote",null,[n("p",null,"编者注 ✍️:主要是英国小哥在问莱师傅 😛")],-1)),l[34]||(l[34]=n("h2",{id:"会议剪影",tabindex:"-1"},[t("会议剪影 "),n("a",{class:"header-anchor",href:"#会议剪影","aria-label":'Permalink to "会议剪影"'},"")],-1)),l[35]||(l[35]=n("p",null,[n("img",{src:f,alt:"cut-3"})],-1))]))}});export{v as __pageData,I as default};
diff --git a/assets/posts_pku-course.md.IKAES188.js b/assets/posts_pku-course.md.IKAES188.js
new file mode 100644
index 0000000..8b07929
--- /dev/null
+++ b/assets/posts_pku-course.md.IKAES188.js
@@ -0,0 +1 @@
+import{_ as a,c as t,k as r,o as s}from"./chunks/framework.D1-4jGi8.js";const o="/assets/jun-present.BtGbfy4w.jpg",n="/assets/jie-present.BZ_ZT7yz.jpg",p="/assets/apollo-park-all.B5rKS27b.jpg",l="/assets/apollo-park-meng-present.C8_YR9Ph.jpg",_=JSON.parse('{"title":"飞桨开源社区走进北京大学课堂","description":"","frontmatter":{"title":"飞桨开源社区走进北京大学课堂","date":"2023-11-21T00:00:00.000Z","author":{"name":"Jun","github":"jzhang533"},"co_authors":[{"name":"杰师傅","github":"Aurelius84"}]},"headers":[],"relativePath":"posts/pku-course.md","filePath":"posts/pku-course.md"}'),i={name:"posts/pku-course.md"};function m(u,e,E,c,A,h){return s(),t("div",null,e[0]||(e[0]=[r('飞桨开源社区走进北京大学课堂 10 月 11 日,飞桨开源社区应北京大学计算机学院周明辉副院长邀请,在周老师的开源软件开发 课程的第四次课 上,为北大的同学们介绍了飞桨开源社区和飞桨新一代 IR 设计。
Jun 给同学们介绍了飞桨开源社区的基本情况
杰师傅给同学们深入浅出的介绍了飞桨新一代 IR 设计。
课程材料在线观看 这次课程的 Slides,可以在这里在线浏览:飞桨-北大讲课-2023-10-11
彩蛋 🎊 飞桨开源社区曾经在 Apollo Park 接待过北大的国际留学生,梦师傅曾经全英文给参加北京大学夏季夏令营的牛校的神兽们讲解过飞桨。
',8)]))}const d=a(i,[["render",m]]);export{_ as __pageData,d as default};
diff --git a/assets/posts_pku-course.md.IKAES188.lean.js b/assets/posts_pku-course.md.IKAES188.lean.js
new file mode 100644
index 0000000..8b07929
--- /dev/null
+++ b/assets/posts_pku-course.md.IKAES188.lean.js
@@ -0,0 +1 @@
+import{_ as a,c as t,k as r,o as s}from"./chunks/framework.D1-4jGi8.js";const o="/assets/jun-present.BtGbfy4w.jpg",n="/assets/jie-present.BZ_ZT7yz.jpg",p="/assets/apollo-park-all.B5rKS27b.jpg",l="/assets/apollo-park-meng-present.C8_YR9Ph.jpg",_=JSON.parse('{"title":"飞桨开源社区走进北京大学课堂","description":"","frontmatter":{"title":"飞桨开源社区走进北京大学课堂","date":"2023-11-21T00:00:00.000Z","author":{"name":"Jun","github":"jzhang533"},"co_authors":[{"name":"杰师傅","github":"Aurelius84"}]},"headers":[],"relativePath":"posts/pku-course.md","filePath":"posts/pku-course.md"}'),i={name:"posts/pku-course.md"};function m(u,e,E,c,A,h){return s(),t("div",null,e[0]||(e[0]=[r('飞桨开源社区走进北京大学课堂 10 月 11 日,飞桨开源社区应北京大学计算机学院周明辉副院长邀请,在周老师的开源软件开发 课程的第四次课 上,为北大的同学们介绍了飞桨开源社区和飞桨新一代 IR 设计。
Jun 给同学们介绍了飞桨开源社区的基本情况
杰师傅给同学们深入浅出的介绍了飞桨新一代 IR 设计。
课程材料在线观看 这次课程的 Slides,可以在这里在线浏览:飞桨-北大讲课-2023-10-11
彩蛋 🎊 飞桨开源社区曾经在 Apollo Park 接待过北大的国际留学生,梦师傅曾经全英文给参加北京大学夏季夏令营的牛校的神兽们讲解过飞桨。
',8)]))}const d=a(i,[["render",m]]);export{_ as __pageData,d as default};
diff --git a/assets/posts_pytorch-conference-01.md.y8pz0X_Z.js b/assets/posts_pytorch-conference-01.md.y8pz0X_Z.js
new file mode 100644
index 0000000..f58b776
--- /dev/null
+++ b/assets/posts_pytorch-conference-01.md.y8pz0X_Z.js
@@ -0,0 +1 @@
+import{_ as r,c as o,k as t,o as a}from"./chunks/framework.D1-4jGi8.js";const n="/assets/conference-1.DBvZ5WAN.png",i="/assets/conference-2.CId3e9nV.png",h="/assets/conference-3.BbykAX0f.png",c="/assets/conference-4.B6IVZNeq.png",l="/assets/conference-5.BXAfcv7B.png",s="/assets/conference-6.DpRNenSJ.png",m=JSON.parse('{"title":"【睁眼看世界 🌍】|PyTorch Conference 2023 - State of PyTorch","description":"","frontmatter":{"title":"【睁眼看世界 🌍】|PyTorch Conference 2023 - State of PyTorch","date":"2024-3-03","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"散步(小散)","github":"sanbuphy"}]},"headers":[],"relativePath":"posts/pytorch-conference-01.md","filePath":"posts/pytorch-conference-01.md"}'),p={name:"posts/pytorch-conference-01.md"};function u(b,e,d,g,f,y){return a(),o("div",null,e[0]||(e[0]=[t('本文是对 PyTorch Conference 2023 中的《State of PyTorch 》部分进行了精准的中文翻译和详细的文字总结,旨在向读者介绍 PyTorch 社区的 2023 年动态 。同时也特别参考了散步 大佬的《PyTorch Conference 2023 翻译系列文章 》,在此基础上,进行了细致的校对和优化,确保翻译准确无误。对散步大佬之前的辛勤翻译和对开源社区的贡献,表示衷心的感谢和敬意。
写在最前 【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
Lightning Talk 我的名字是 Alban,是 META 的一名软件工程师,已经在 PyTorch 工作了很长时间,并且主要在 PyTorch 核心库维护方面做了很多工作。
在今天这个快速闪电演讲中,我要给大家介绍一下 PyTorch 的现状。以前参加过大会的人,也许知道我们每年都在进行着类似的讨论。Joe 去年就在这里做了类似演讲。今天我想谈论的是三个重要的 PyTorch 里程碑,以及今年发生的三个重要活动,还会谈论一些有趣的数字。Joe 之前已经给大家展示过其中的一些,但能亲眼看到这些数据总归是很有趣的。而在最后,我会给大家介绍一下如何参与 PyTorch ,以及如何帮助我们一起建设 PyTorch。
PyTorch Milestones 1. PyTorch 2.0 20M+ downloads Adds: torch.compile MPS backend for Apple M1/M2 torch.func set_default_device Better transformer 第一个重要的 PyTorch 里程碑是:今年(2023 年)年初发布了 PyTorch 2.0 版本 。它在所有平台上下载超过 2000 万次,所以对我们来说,这是一个相当重要的发版。并且,下载数量仍在增加。它添加了一系列非常重要的功能:
torch.compile 。我们已经讨论过它很多次,因此在这里不再讨论。MPS 后端 。一个重要功能是支持 MPS 后端,能够充分利用 Apple M1/M2 芯片的 GPU 部分。现在该功能处于测试阶段,随着覆盖范围和稳定性的提升,会支持更多新功能。torch.func 。对于了解这的人来说,它又叫 functorch。和 Jax 类似,它新增支持函数式 API,并且融入在 “PyTorch 世界”中,因此能兼容其他所有 PyTorch 功能。set_default_device 。我不知道大家是否熟悉这个功能。它可以通过改变创建 PyTorch 模型时使用的默认设备,来显著加速初始化(initialization),例如直接在设备上进行初始化。或者如你在一些主题演讲中看到的例子一样,快速的创建模型。通过使用元设备(meta device),即一个没有数据的伪设备(fake device),来跳过模型的初始化过程,直接加载权重。这样就可以避免占用太多内存,进行不必要的初始化等类似事情。更好的 transformer 。这是由 PyTorch 团队和众多 maintainers 共同努力做出的重大推进,一起改进 PyTorch 中的 transformer 模型。无论是 transofmer 相关的高层 API ,还是底层运算,你都可以拥有目前的最佳实现。编者注 ✍️:这部分演讲内容是对 PyTorch 2.0 简略概括,详细内容可以看 Blog 或 2.0 Release notes 。
2. Spring Docathon 27 active partipants 5 new tutorials & examples 45+ PRs merged 53+ issues closed 另一个值得一提的重要里程碑是:今年(2023 年)发起的 Spring Docathon 活动 。该活动共吸引了 27 位开发者参与,成功合入了超过 45 个 PR(Pull Request),解决了 53 个 Issues。非常有效地促进了我们 tutorials 仓库 的改进,不仅提高了教程的质量,还增加了新的教程内容,确保我们的教程始终保持最新。
编者注 ✍️:其实飞桨也提供了 Paddle Docathon ,活动初衷和 PyTorch 是一样的,但整体难度和质量比起 PyTorch Docathon 来说要低一些。第六期黑客松会有一个专门的赛道:优秀稿件征集与传播,大家也可以敬请期待。
3. First Year of the Foundation Open to new membership June 2023 New premier members (IBM, Intel, Hugging-facing) New general members (Graphcore) 最后,正如 Joe 和 Ibrahim 所提到的,今年(2023)是基金会成立的第一年。并且在今年六月,基金会向新成员敞开了大门。面对当前的发展,我们感到无比兴奋。
在我撰写这篇演讲稿时,我们已经迎来了四名新成员,而现在又新增了两名,增长的速度甚至超过了我制作幻灯片的速度。我对我们吸引到的成员的多样性感到非常激动,既有专注于底层组件和后端技术的企业,如 IBM 和 Intel,也有更注重高层应用、面向终端用户的企业,如 Graphcore 和 Hugging Face。看到我们在各个方面都在取得增长,对基金会和整个生态系统来说,确实是非常令人振奋的。
编者注 ✍️:Ibrahim Haddad 是 Linux 基金会副总裁(AI & DATA 方向),也是 PyTorch Foundation 董事会的执行官。
PyTorch in Numbers 接下来,让我们来看一些数字。
1. The pytorch/pytorch codebase 对于那些密切关注代码库的人而言,过去的一年(2022 年),我们总共有 12000 次 commits。并且我们非常高兴看到开源贡献增长了 8%,这里的增长特指来自于除日常核心维护人员之外 的开源贡献者。
图表展示了每年我们代码库的 commits 数量。如你所见,它正在不断增长,并且未来也会越来越多。
2. The pytorch/pytorch top contributors 1128 Contributors this year (+10% more than last year) Top OSS Contributors 所有的开源贡献增长都离不开我们每一位贡献者的共同努力。今年,我们共有 1,128 名贡献者对代码库作出了贡献,相较去年增长了 10%。看到这么多人投身于 PyTorch 的开源工作,实在是让人感到非常振奋。
我在此列出了一些提交量最多的贡献者的 GitHub ID,他们的活跃度非常高。当然,还有许多人虽然只提交了少量代码,但他们对代码的改进和贡献的多样性也极为关键。
这所有的努力共同促成了,GitHub 上使用 PyTorch 的仓库数量超过 600,000 个,比去年增长了 20%。因此,看到越来越多的人不仅使用 PyTorch,还发布基于 PyTorch 实现的代码,这确实非常让人兴奋。
3. Driving state-of-the-art AI research 其中,大部分代码来自于科研领域 ,PyTorch 在推动许多前沿 AI 技术的发展方面发挥了重要作用。今年,已有超过 7,000 个 AI 科研论文相关的 GitHub 仓库用到了 PyTorch。事实上,60%的 AI 研究成果是基于 PyTorch 来实现的。因此,见证这样一个开放、繁荣的科研生态,我们感到无比兴奋。
4. Powering the AI indusry 65K+ PyTorch professionals(on LinkedIn) 3K new jobs requiring PyTorch 如今,PyTorch 在工业界的发展也取得了显著进步,正在迅速弥补之前的落后处境。以 LinkedIn 的统计数据为例,我们观察到将 PyTorch 作为核心技能的求职者每年增长率达到 50%,同时,越来越多的职位也开始要求应聘者掌握 PyTorch。
5. Talk of the town 我们的一切成就,都离不开我们庞大社区的支持。接下来,我想分享一些关于社区的有趣数据。Discuss Forum 是 PyTorch 为用户、开发者及其他所有人提供的互动论坛。每月,我们有大约 400 名新成员加入,网站浏览量超过 200 万次。同时,我们的网站也非常活跃,每月约有 2000 篇新帖子发布。我们非常需要活跃的社区,让更多成员帮忙解答用户和开发者的问题。
Join us 在这里,我想呼吁大家加入我们!PyTorch 不仅是一个开源项目,它也是我们共同奋斗的目标。只有依靠一个庞大而活跃的社区,我们才能不断推动 PyTorch 向前发展。因此,我们做了很多工作来尝试巩固我们的社区生态。
1. How to get involved 我们根据社区里很不错的反馈(包括如何帮助新成员融入、如何让他们共同参与到 PyTorch 的建设中来),创建了一个新页面——PyTorch 终极贡献指南。点击下面的链接可以查看,接下来我也会讲一下如何参与其中。
PyTorch 终极贡献指南:https://github.com/pytorch/pytorch/wiki/The-Ultimate-Guide-to-PyTorch-Contributions
2.Non-code contributions 首先我想和大家讲的是,我们是有很多非代码的贡献 。所以对 PyTorch 的贡献远不止编写代码,还有很多其他方面的工作。
在左边可以看到我之前提到的论坛。同时我们还有一个开发者论坛 Dev-Discuss ,在这里,你可以提问、回答问题或与社区成员讨论各种话题。这些都是非常重要的贡献方式,而且每个人都可以参与其中。另外,因为社区中的所有人都可以建设 PyTorch,所以报告问题、提出新功能建议等也是你可以做出的重要贡献。例如,我们非常欢迎大家对我今天提到的新功能提出反馈,无论是 torch.compile 还是其他功能。请告诉我们什么地方做得不够好,什么工作得很好,以及你还需要什么功能。
3. Code contributions Reproduce and investigate issues Bugfix/FeaturePullReguests Review/maintain Documentationch 当然,众所周知,代码贡献 自然也是非常重要的。这里我认为第一点(Reproduce and investigate issues)特别有趣,这可能不是每个人都会想到的贡献方式,但帮助复现和调查 issues 是非常非常有价值的一件事情,即使这并不是在“编写代码”,并且也比较耗时。多年前,当我开始为 PyTorch 做贡献时,我做的第一件事就是 debugging issues,并在论坛上回答问题。这不仅有趣,也非常有帮助,因为一旦我们明确了问题所在,接下来的修复 bug 和增加新功能的工作就会变得更加简单。在 PyTorch 社区,提交 bug 修复或新功能的 PR 往往是解决问题过程中最迅速的一步。找到问题所在,弄清楚需要做什么,实际上才是最关键的的。
第三点是,我鼓励任何感兴趣的开发者不只是提交代码,也帮助我们审查代码和维护代码库。现在基金会完全开放了,我们有来自世界各地的许多贡献者帮助我们维护 PyTorch 的子仓库,我们鼓励所有感兴趣的人参与进来。
最后,我们也非常重视文档的编写和改进。我相信许多人都知道我们的文档网站和教程网站,我们也在努力的增加更多文档内容,所以任何文档相关的贡献都非常欢迎。对于那些对此感兴趣的人,我们下个月将举办一个 PyTorch Docathon 文档马拉松活动。如果你想参加,学习新技能并获得认可,请关注我们的博客文章了解更多信息。
编者注 ✍️:活动已经结束了哦~
编者最后的碎碎念 PyTorch 生态力量非常强大,是目前 Paddle 或者国内任何一个深度学习框架都无法企及的一个高度。 Paddle 本身的社区治理结构、运作方式,其实是带有一定国内特色的。 翻译会议真的很花时间,比单纯的翻译文章累多了,散步能翻译到 30 篇后(总共 60 多篇) 的会议内容真的太强了。目前散步在和 Linux 基金会取得联系,可能会有专门的团队进行翻译,有兴趣加入的也可以联系他。 散步做的一个英文转录翻译的工具,可以看看:https://github.com/sanbuphy/WhisperTranslator ',63)]))}const k=r(p,[["render",u]]);export{m as __pageData,k as default};
diff --git a/assets/posts_pytorch-conference-01.md.y8pz0X_Z.lean.js b/assets/posts_pytorch-conference-01.md.y8pz0X_Z.lean.js
new file mode 100644
index 0000000..f58b776
--- /dev/null
+++ b/assets/posts_pytorch-conference-01.md.y8pz0X_Z.lean.js
@@ -0,0 +1 @@
+import{_ as r,c as o,k as t,o as a}from"./chunks/framework.D1-4jGi8.js";const n="/assets/conference-1.DBvZ5WAN.png",i="/assets/conference-2.CId3e9nV.png",h="/assets/conference-3.BbykAX0f.png",c="/assets/conference-4.B6IVZNeq.png",l="/assets/conference-5.BXAfcv7B.png",s="/assets/conference-6.DpRNenSJ.png",m=JSON.parse('{"title":"【睁眼看世界 🌍】|PyTorch Conference 2023 - State of PyTorch","description":"","frontmatter":{"title":"【睁眼看世界 🌍】|PyTorch Conference 2023 - State of PyTorch","date":"2024-3-03","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"散步(小散)","github":"sanbuphy"}]},"headers":[],"relativePath":"posts/pytorch-conference-01.md","filePath":"posts/pytorch-conference-01.md"}'),p={name:"posts/pytorch-conference-01.md"};function u(b,e,d,g,f,y){return a(),o("div",null,e[0]||(e[0]=[t('本文是对 PyTorch Conference 2023 中的《State of PyTorch 》部分进行了精准的中文翻译和详细的文字总结,旨在向读者介绍 PyTorch 社区的 2023 年动态 。同时也特别参考了散步 大佬的《PyTorch Conference 2023 翻译系列文章 》,在此基础上,进行了细致的校对和优化,确保翻译准确无误。对散步大佬之前的辛勤翻译和对开源社区的贡献,表示衷心的感谢和敬意。
写在最前 【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
Lightning Talk 我的名字是 Alban,是 META 的一名软件工程师,已经在 PyTorch 工作了很长时间,并且主要在 PyTorch 核心库维护方面做了很多工作。
在今天这个快速闪电演讲中,我要给大家介绍一下 PyTorch 的现状。以前参加过大会的人,也许知道我们每年都在进行着类似的讨论。Joe 去年就在这里做了类似演讲。今天我想谈论的是三个重要的 PyTorch 里程碑,以及今年发生的三个重要活动,还会谈论一些有趣的数字。Joe 之前已经给大家展示过其中的一些,但能亲眼看到这些数据总归是很有趣的。而在最后,我会给大家介绍一下如何参与 PyTorch ,以及如何帮助我们一起建设 PyTorch。
PyTorch Milestones 1. PyTorch 2.0 20M+ downloads Adds: torch.compile MPS backend for Apple M1/M2 torch.func set_default_device Better transformer 第一个重要的 PyTorch 里程碑是:今年(2023 年)年初发布了 PyTorch 2.0 版本 。它在所有平台上下载超过 2000 万次,所以对我们来说,这是一个相当重要的发版。并且,下载数量仍在增加。它添加了一系列非常重要的功能:
torch.compile 。我们已经讨论过它很多次,因此在这里不再讨论。MPS 后端 。一个重要功能是支持 MPS 后端,能够充分利用 Apple M1/M2 芯片的 GPU 部分。现在该功能处于测试阶段,随着覆盖范围和稳定性的提升,会支持更多新功能。torch.func 。对于了解这的人来说,它又叫 functorch。和 Jax 类似,它新增支持函数式 API,并且融入在 “PyTorch 世界”中,因此能兼容其他所有 PyTorch 功能。set_default_device 。我不知道大家是否熟悉这个功能。它可以通过改变创建 PyTorch 模型时使用的默认设备,来显著加速初始化(initialization),例如直接在设备上进行初始化。或者如你在一些主题演讲中看到的例子一样,快速的创建模型。通过使用元设备(meta device),即一个没有数据的伪设备(fake device),来跳过模型的初始化过程,直接加载权重。这样就可以避免占用太多内存,进行不必要的初始化等类似事情。更好的 transformer 。这是由 PyTorch 团队和众多 maintainers 共同努力做出的重大推进,一起改进 PyTorch 中的 transformer 模型。无论是 transofmer 相关的高层 API ,还是底层运算,你都可以拥有目前的最佳实现。编者注 ✍️:这部分演讲内容是对 PyTorch 2.0 简略概括,详细内容可以看 Blog 或 2.0 Release notes 。
2. Spring Docathon 27 active partipants 5 new tutorials & examples 45+ PRs merged 53+ issues closed 另一个值得一提的重要里程碑是:今年(2023 年)发起的 Spring Docathon 活动 。该活动共吸引了 27 位开发者参与,成功合入了超过 45 个 PR(Pull Request),解决了 53 个 Issues。非常有效地促进了我们 tutorials 仓库 的改进,不仅提高了教程的质量,还增加了新的教程内容,确保我们的教程始终保持最新。
编者注 ✍️:其实飞桨也提供了 Paddle Docathon ,活动初衷和 PyTorch 是一样的,但整体难度和质量比起 PyTorch Docathon 来说要低一些。第六期黑客松会有一个专门的赛道:优秀稿件征集与传播,大家也可以敬请期待。
3. First Year of the Foundation Open to new membership June 2023 New premier members (IBM, Intel, Hugging-facing) New general members (Graphcore) 最后,正如 Joe 和 Ibrahim 所提到的,今年(2023)是基金会成立的第一年。并且在今年六月,基金会向新成员敞开了大门。面对当前的发展,我们感到无比兴奋。
在我撰写这篇演讲稿时,我们已经迎来了四名新成员,而现在又新增了两名,增长的速度甚至超过了我制作幻灯片的速度。我对我们吸引到的成员的多样性感到非常激动,既有专注于底层组件和后端技术的企业,如 IBM 和 Intel,也有更注重高层应用、面向终端用户的企业,如 Graphcore 和 Hugging Face。看到我们在各个方面都在取得增长,对基金会和整个生态系统来说,确实是非常令人振奋的。
编者注 ✍️:Ibrahim Haddad 是 Linux 基金会副总裁(AI & DATA 方向),也是 PyTorch Foundation 董事会的执行官。
PyTorch in Numbers 接下来,让我们来看一些数字。
1. The pytorch/pytorch codebase 对于那些密切关注代码库的人而言,过去的一年(2022 年),我们总共有 12000 次 commits。并且我们非常高兴看到开源贡献增长了 8%,这里的增长特指来自于除日常核心维护人员之外 的开源贡献者。
图表展示了每年我们代码库的 commits 数量。如你所见,它正在不断增长,并且未来也会越来越多。
2. The pytorch/pytorch top contributors 1128 Contributors this year (+10% more than last year) Top OSS Contributors 所有的开源贡献增长都离不开我们每一位贡献者的共同努力。今年,我们共有 1,128 名贡献者对代码库作出了贡献,相较去年增长了 10%。看到这么多人投身于 PyTorch 的开源工作,实在是让人感到非常振奋。
我在此列出了一些提交量最多的贡献者的 GitHub ID,他们的活跃度非常高。当然,还有许多人虽然只提交了少量代码,但他们对代码的改进和贡献的多样性也极为关键。
这所有的努力共同促成了,GitHub 上使用 PyTorch 的仓库数量超过 600,000 个,比去年增长了 20%。因此,看到越来越多的人不仅使用 PyTorch,还发布基于 PyTorch 实现的代码,这确实非常让人兴奋。
3. Driving state-of-the-art AI research 其中,大部分代码来自于科研领域 ,PyTorch 在推动许多前沿 AI 技术的发展方面发挥了重要作用。今年,已有超过 7,000 个 AI 科研论文相关的 GitHub 仓库用到了 PyTorch。事实上,60%的 AI 研究成果是基于 PyTorch 来实现的。因此,见证这样一个开放、繁荣的科研生态,我们感到无比兴奋。
4. Powering the AI indusry 65K+ PyTorch professionals(on LinkedIn) 3K new jobs requiring PyTorch 如今,PyTorch 在工业界的发展也取得了显著进步,正在迅速弥补之前的落后处境。以 LinkedIn 的统计数据为例,我们观察到将 PyTorch 作为核心技能的求职者每年增长率达到 50%,同时,越来越多的职位也开始要求应聘者掌握 PyTorch。
5. Talk of the town 我们的一切成就,都离不开我们庞大社区的支持。接下来,我想分享一些关于社区的有趣数据。Discuss Forum 是 PyTorch 为用户、开发者及其他所有人提供的互动论坛。每月,我们有大约 400 名新成员加入,网站浏览量超过 200 万次。同时,我们的网站也非常活跃,每月约有 2000 篇新帖子发布。我们非常需要活跃的社区,让更多成员帮忙解答用户和开发者的问题。
Join us 在这里,我想呼吁大家加入我们!PyTorch 不仅是一个开源项目,它也是我们共同奋斗的目标。只有依靠一个庞大而活跃的社区,我们才能不断推动 PyTorch 向前发展。因此,我们做了很多工作来尝试巩固我们的社区生态。
1. How to get involved 我们根据社区里很不错的反馈(包括如何帮助新成员融入、如何让他们共同参与到 PyTorch 的建设中来),创建了一个新页面——PyTorch 终极贡献指南。点击下面的链接可以查看,接下来我也会讲一下如何参与其中。
PyTorch 终极贡献指南:https://github.com/pytorch/pytorch/wiki/The-Ultimate-Guide-to-PyTorch-Contributions
2.Non-code contributions 首先我想和大家讲的是,我们是有很多非代码的贡献 。所以对 PyTorch 的贡献远不止编写代码,还有很多其他方面的工作。
在左边可以看到我之前提到的论坛。同时我们还有一个开发者论坛 Dev-Discuss ,在这里,你可以提问、回答问题或与社区成员讨论各种话题。这些都是非常重要的贡献方式,而且每个人都可以参与其中。另外,因为社区中的所有人都可以建设 PyTorch,所以报告问题、提出新功能建议等也是你可以做出的重要贡献。例如,我们非常欢迎大家对我今天提到的新功能提出反馈,无论是 torch.compile 还是其他功能。请告诉我们什么地方做得不够好,什么工作得很好,以及你还需要什么功能。
3. Code contributions Reproduce and investigate issues Bugfix/FeaturePullReguests Review/maintain Documentationch 当然,众所周知,代码贡献 自然也是非常重要的。这里我认为第一点(Reproduce and investigate issues)特别有趣,这可能不是每个人都会想到的贡献方式,但帮助复现和调查 issues 是非常非常有价值的一件事情,即使这并不是在“编写代码”,并且也比较耗时。多年前,当我开始为 PyTorch 做贡献时,我做的第一件事就是 debugging issues,并在论坛上回答问题。这不仅有趣,也非常有帮助,因为一旦我们明确了问题所在,接下来的修复 bug 和增加新功能的工作就会变得更加简单。在 PyTorch 社区,提交 bug 修复或新功能的 PR 往往是解决问题过程中最迅速的一步。找到问题所在,弄清楚需要做什么,实际上才是最关键的的。
第三点是,我鼓励任何感兴趣的开发者不只是提交代码,也帮助我们审查代码和维护代码库。现在基金会完全开放了,我们有来自世界各地的许多贡献者帮助我们维护 PyTorch 的子仓库,我们鼓励所有感兴趣的人参与进来。
最后,我们也非常重视文档的编写和改进。我相信许多人都知道我们的文档网站和教程网站,我们也在努力的增加更多文档内容,所以任何文档相关的贡献都非常欢迎。对于那些对此感兴趣的人,我们下个月将举办一个 PyTorch Docathon 文档马拉松活动。如果你想参加,学习新技能并获得认可,请关注我们的博客文章了解更多信息。
编者注 ✍️:活动已经结束了哦~
编者最后的碎碎念 PyTorch 生态力量非常强大,是目前 Paddle 或者国内任何一个深度学习框架都无法企及的一个高度。 Paddle 本身的社区治理结构、运作方式,其实是带有一定国内特色的。 翻译会议真的很花时间,比单纯的翻译文章累多了,散步能翻译到 30 篇后(总共 60 多篇) 的会议内容真的太强了。目前散步在和 Linux 基金会取得联系,可能会有专门的团队进行翻译,有兴趣加入的也可以联系他。 散步做的一个英文转录翻译的工具,可以看看:https://github.com/sanbuphy/WhisperTranslator ',63)]))}const k=r(p,[["render",u]]);export{m as __pageData,k as default};
diff --git a/assets/posts_sanbu-story.md.BwcXAExP.js b/assets/posts_sanbu-story.md.BwcXAExP.js
new file mode 100644
index 0000000..2b221c6
--- /dev/null
+++ b/assets/posts_sanbu-story.md.BwcXAExP.js
@@ -0,0 +1 @@
+import{M as l,_ as n}from"./chunks/MessageBox.CshcSYCA.js";import{c as o,k as s,i as a,s as i,a as r,v as e,o as g}from"./chunks/framework.D1-4jGi8.js";const u="/assets/sanbu-01.BmLwkxl7.jpg",p="/assets/sanbu-02.CbmTx2S8.jpg",h="/assets/sanbu-03.CN4yarz2.jpg",d="/assets/sanbu-04.xtcdIdF6.jpg",b="/assets/sanbu-05.DXN_Ieqp.jpg",f="/assets/sanbu-06.UwhvCp2U.jpg",m="/assets/sanbu-07.DmjkGGLp.jpg",y="/assets/sanbu-08.Ck6rEVYm.jpg",c="/assets/sanbu-09.Dddg5DQv.jpg",k="/assets/sanbu-10.CLzscM3v.jpg",x="/assets/sanbu-11.zJPpyF50.jpg",_="/assets/sanbu-12.4-hUXVF8.jpg",z=JSON.parse('{"title":"【开源江湖闲聊录】物理 ➡️ 经济 ➡️ 开源,看散步师傅的曲折求学史~","description":"","frontmatter":{"title":"【开源江湖闲聊录】物理 ➡️ 经济 ➡️ 开源,看散步师傅的曲折求学史~","date":"2024-1-14","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"散步(小散)","github":"sanbuphy"}]},"headers":[],"relativePath":"posts/sanbu-story.md","filePath":"posts/sanbu-story.md"}'),j={name:"posts/sanbu-story.md"},L=Object.assign(j,{setup(P){return(q,t)=>(g(),o("div",null,[t[8]||(t[8]=s('“负暄檐宇下,散步池塘曲”,本期我们邀请到了热情好学的散步 🚶♀️ 师傅!你想知道他的人生理想么?你想了解他的学习历程么?你想知道他的日常生活么?你想得到他的真挚祝福么?点击此篇博客,让我们一起走进小散的浪漫人生~
一、个人名片
编者注✍️:潇某真的有很努力把小散的照片 P 得可爱,想看原图可以私聊 😁,反正肯定不会给滴 🐶!
二、采访内容 散师傅,给大家介绍一下自己吧!
小散师傅: 大家好!我是散步🚶(@sanbuphy ),菜但是喜欢学。你们可能会在水群之旅中遇到我。如果觉得我话痨了,请喊我去学习;如果你也喜欢讨论问题,欢迎随时找我一起讨论进步 😁😁;如果你觉得我有缺点,很欢迎你直接指出,这是我自省并前进的动力之一;如果你喜欢做开源 & 没事喜欢做一些玩具,那更请你和我一起去快乐开源!!!!
「散步」 名字由来(用小散原话):因为我想人生就这样 不要那么焦虑,也不要浪费;想要在一个茶足饭饱的午后,在阳光的指引下因生命的跳动而缓缓向前。最好的指代应该是散步,想要向前,但不至于拧巴,就这样的走下去了,也就像生活这般的过下去了。
大家对你都比较熟悉,一方面是因为你在社区的贡献量,另一方面是因为你经常水群,能不能给大家讲讲 你是怎么做到同时水 5~10 个群的?
小散师傅: 其实这个很简单。只要你和我一样宅 & 不打游戏 & 没有女朋友 & 打字飞快,就可以一次性水完全部群了!(群保安,不时保卫一下群里的业主们 😂😂)为数不多的好处就是因此可以认识各类大佬。
小散四件套 听说不只是 Paddle 的群,你也加了很多别的群,有没有比较有意思的群可以分享?
小散师傅: 其实我加的大部分群都是技术群。可能也许,我觉得有意思的大家觉得无聊呢。。。 最近觉得比较好玩的是:dlsys 相关的学习群和我自己的一个每周写博客打卡群(不写就发红包 🥹🥹)。但我觉得每一个有大佬愿意和我交流的群都很有趣,能和大佬们在一起学习成长是我的荣幸,也是我的快乐。我可以在聊天中获取对新事物的理解,我沉迷于此。
编者注✍️:散佬有自己的博客哦 ➡️ https://www.aispacewalk.cn/
你本科毕业于福州大学,给大家分享一下福大的吃喝玩乐攻略吧!在学校时,有没有什么好玩的事情发生?
小散师傅:
食堂对面的水果捞,都很好吃 😋😋,阿姨会很诚实的说水果 🍉 酸还是甜; 湖边很好看,草坪很大,适合躺平; 曾经参加学校管弦乐团 🎺,那是我最快乐的时光之一; 水煮肉片 yyds,没有之一; 曾经有一张神图火遍全网(一只狗望着楼梯下的情侣),没错,就是咱们教学楼拍的; 食堂基本上可以随便吃,很难踩雷(我最爱吃的就是食堂)。 上述谈到的小狗望情侣照片 编者注✍️:下面有小散师傅参与管弦乐团的照片哦~
我了解到:你是物理系出身,当时为什么会选这个专业呢?后来为什么又放弃对物理的学习?
小散师傅:
选物理专业原因:很简单,每个曾经中二的少年 🧒 都想研究宇宙和量子力学(你想掌握力量吗 😈?) 对于放弃物理的学习:因为发现自己笨而且懒,也许做不出什么有价值的东西了,以及发现自己的本心并不在于物理,而物理应该属于本心就在于它的人,只有这样才配得上一直学下去。光是耍小聪明是不可能被物理之神眷顾的。 后来你开始学经济,然后才转向深度学习。是什么让你开始学经济,后来又是怎么喜欢上深度学习的呢?
小散师傅: 学经济是因为:看到了徐高老师的《宏观经济二十五讲》。他的讲课中有一张图让我很是触动且惭愧(我每次想偷懒就翻出来看看👀),我觉得让他们(下方图片中的人)过得更好是我想做的事情。但后来,做了一些经济学相关的事(研究金融危机和大衰退/做经济学实证研究)以及听到了老师说的一句话:“写是一回事,采纳又是一回事”,我就发现:只有能有实际用途和影响力的东西才是重要的。还记得《宏观经济学二十五讲:中国视角》中经典的一句话,凯恩斯说:“从长远看,我们都已死去”。所以,人生实属短暂,我们应当在短时间内接触更有为主义的事情,现在就要让他实现。
喜欢上深度学习:它足够强,可以在短期内对人有帮助,仅此而已。
徐高讲课中的图 在转向深度学习的过程中,有没有遇到什么困难?又是如何克服的?
小散师傅: 实际上,与学习物理和数学相比,深度学习稍微没那么抗压,难度大的反而在计算机基础。但总的来说,我一直遵守八个字:“不懂就问、不会就学”。我喜欢向所有比我厉害的人学习,只要朝着目标,随机梯度下降就行了。我没有特别的克服什么困难,那样听起来很痛苦;实际上更多的应该是快乐和珍惜,在 🫂 拥抱每一次难题中尝试进步。
你觉得进入深度学习领域让你感觉到快乐么? 你觉得这一系列的转变对你的职业生涯和个人发展有何影响?
小散师傅: 总的来说我认为还是快乐的!因为他拥有无限的创造力,也有很大的可能永远地改变人类的生产力。我觉得这个转变是我人生中的随机扰动因子,人生是一场锚定自身性格特质与价值观的随机游走,我们猜不到之后会发生什么,只能让命运沿着自己向前发展,也许等之后发生了各种各样的事情, 我就能找到一条看似靠谱理由回答今天的疑问了。不过,从价值观来说,也许没有影响,只是在愿景上的不同实现方式罢了。
你提到选择计算机领域的决定源于对提高生产力的渴望,那么在你看来,深度学习和开源社区是如何实现这一目标的?
小散师傅: 开源社区是深度学习发展的最大加速器之一,而深度学习则是创造力和智力普及化的最大加速器。
你是怎么与飞桨相遇的呢?你个人对飞桨的印象如何呢?
小散师傅: 其实我本来是在 OpenMMLab 社区混的,但是看到 Paddle 社区回复勤一点(没有拉踩!研发大哥确实多一些)以及大佬参与被拉入坑,然后发现了新大陆、接触了很多大佬。非常感谢能和 Paddle 相遇。我对 Paddle 的印象就是:在国内你很难找到一个那么多研发大哥和开源大佬陪你一起卷以及发各种奖励的社区了(甚至有时候周末都会回复你)。很多有趣的方向都可以尝试,和飞桨最好的相处方式就是和它一起变的更强。但很惭愧的是我由于太忙,现在参加的频率变低了,其实很多项目都非常好玩,希望大家有时间的话可以当游戏多多参与。
在开源社区中,您认识了很多开发者或是社区运营者。他们给你留下了什么印象?能具体举例说说么?
小散师傅: 有太多人所以我只能简短说明,有没提到的朋友我先道哥歉,因为太多了。
你在 Paddle 社区中经历过最搞笑的事情是什么?
小散师傅: 某次黑客松第四期 清一色取某人的名字玩梗(咳咳,这里打个谜语)
编者注✍️:黑客松是百度飞桨社区举办的深度学习领域大型编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
黑客松花花名字梗 你是否有一些特别喜欢的开源项目或者技术?可以分享一下你喜欢的原因吗?
小散师傅: 我最喜欢的技术其实没有特别的哪一个,我都很喜欢,都有它独特的美感,能不能都喜欢❤️! 开源项目的话,那肯定是 Paddle ,当然其他开源项目我也很喜欢(比如 OpenVINO),只要拥有社区和快速答复的研发大哥,那一定就是我爱的社区。
散师傅对开源肯定有自己独特的见解,那么你认为什么样的人才能称得上是一位优秀的开源者?
小散师傅:
能一个人召集一些贡献者; 文能随手撕几百几千行代码,武能独立开设新仓库包括完整的体系架构建设; 熟读几个开源项目源码(至少一个大项目); 熟练 GitHub 操作(独立开设 CI、review PR、审核 issue 等); 写一个漂亮的 README 而不感到烦躁。 你的周末一般时这么度过的?会和朋友出去玩还是宅家呢?
小散师傅: 很显然——宅,主要是每天都觉得自己很菜,还是花时间努力变强吧,向一切大佬们学习。而且,由于我的事情太多,每天几乎都要处理到比较晚,周末也是如此。不过我最开心的事情就是偶尔可以去拍拍照,安慰一下我的艺术脑的创作欲。
编者注✍️:下方 🈶️ 散师傅的摄影作品。散师傅尤其喜欢运用光影!
总结一下你最喜欢的一句话!
小散师傅: 见善从之,闻义则服;见路不走,实事求是;不懂就问,不会就学。
新的一年开始了~散师傅给我们小小总结一下你的 2023 年,展望一下 2024 年怎么样?
小散师傅: 2023 有一些务虚,希望 2024 可以更加务实、专注、静下心,不要偷懒,聚焦于做一些长期主义、有用的事情(比如某个方向能够随手成百上千行),链接更多的有缘人并相互成长。希望自己可以变成更从容的人、能帮助别人的人、更阳光开朗的人、能传递快乐与希望的人。
不过,比起展望自己的 2024,我更希望大家的 2024 都能变得越来越好;人间短暂,希望我们都能走在希望的田野上,无论岁月如何流淌,都能在梦想的道路上互相映照,让生命力在每一处角落绽放。我无比真诚祝愿每一位看过&没看过这篇博客的朋友都能寻找到自己的希翼与幸福。 祝愿每一位人安好。
编者注✍️:这是小散师傅非常非常认真写的祝福,酝酿了很久很久!
三、小散的十八般武艺 小散爱好词云图 绘画篇 🎨 小散绘画 音乐篇 🪕 最上图为小散参加学校管弦乐队照片 下左为小散的小号 下右为小散为乐队设计的标志 > 编者注✍️:小散师傅超级会拉二胡,还会小号🎺呢!!! 摄影篇 📷 小散的摄影作品集1 小散的摄影作品集2 厨艺篇😋 小散厨艺展示集1 小散厨艺展示集2 四、著名大型评论平台——虎扑评论专区 散师傅很活跃,尤其是在开源群里活跃(都是在问问题!好卷~),因此也就结识了很多朋友 👬。这次我们邀请到和小散师傅有着密切联系的大佬们来谈谈他们对于小散师傅的印象。大家快来看看吧 😄~~
',24)),a(l,null,{default:i(()=>[a(n,{name:"zrr师傅",github:"zrr1999"},{default:i(()=>t[0]||(t[0]=[e(" 散师傅作为一个非人工智能相关专业的开发者,对各种新技术都充满热情,大部分时间都是靠业余时间自学新技术,虽然平时休息时间非常少,但是依然愿意花时间参与开源活动,并把自己看到的有趣的、有价值的开源项目分享出来,并留下自己的见解。同时散师傅的知识面也非常广,从半导体技术到计算机软件,再到硬件加速和大模型技术都有所涉猎,属于开发者中的佼佼者。 ")])),_:1})]),_:1}),t[9]||(t[9]=r("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[e("by 花花("),r("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"@Tulip-hua"),e(") "),r("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([@Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"花花",github:"Tulip-hua"},{default:i(()=>t[1]||(t[1]=[e(" 养成系技术大佬,很有开源热情,厦门见到散师傅感觉散师傅是个很好的人,但是感觉散师傅在互联网上要更E一点哈哈哈哈,线下见面好像话不是特别多。 ")])),_:1})]),_:1}),t[10]||(t[10]=r("h3",{id:"by-梦柳师傅-ligoml",tabindex:"-1"},[e("by 梦柳师傅("),r("a",{href:"https://github.com/Ligoml",target:"_blank",rel:"noreferrer"},"@Ligoml"),e(") "),r("a",{class:"header-anchor",href:"#by-梦柳师傅-ligoml","aria-label":'Permalink to "by 梦柳师傅([@Ligoml](https://github.com/Ligoml))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"梦柳",github:"Ligoml"},{default:i(()=>t[2]||(t[2]=[e(" 散佬一直是我们社区的自学标兵,经常琢磨一些不同领域的技术问题,带着大家一起讨论学习,摇人参加快乐开源,很不错 👍。 ")])),_:1})]),_:1}),t[11]||(t[11]=r("h3",{id:"by-卢畅师傅-andsonder",tabindex:"-1"},[e("by 卢畅师傅("),r("a",{href:"https://github.com/AndSonder",target:"_blank",rel:"noreferrer"},"@AndSonder"),e(") "),r("a",{class:"header-anchor",href:"#by-卢畅师傅-andsonder","aria-label":'Permalink to "by 卢畅师傅([@AndSonder](https://github.com/AndSonder))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"卢畅",github:"AndSonder"},{default:i(()=>t[3]||(t[3]=[e(" 散师傅是一个对技术非常有热情的大佬,在各大技术群里都很活跃。白天在公司打工,晚上和周末抽空也会研究新东西。他对技术的热情真的很令人钦佩,与他交流让人感受到他在学习新技术时所迸发的喜悦。 ")])),_:1})]),_:1}),t[12]||(t[12]=r("h3",{id:"by-涛姐-luotao1",tabindex:"-1"},[e("by 涛姐("),r("a",{href:"https://github.com/luotao1",target:"_blank",rel:"noreferrer"},"@luotao1"),e(") "),r("a",{class:"header-anchor",href:"#by-涛姐-luotao1","aria-label":'Permalink to "by 涛姐([@luotao1](https://github.com/luotao1))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"涛姐",github:"luotao1"},{default:i(()=>t[4]||(t[4]=[e(" 我是从黑客松 TRT 推理算子中认识散步师傅的,对散步师傅印象比较深的有几个: "),r("ol",null,[r("li",null,"【开源社区对比研究】 以 CI 为例的调研,做的清晰明了;"),r("li",null,[e("在群里常常和 "),r("a",{href:"https://github.com/engineer1109"},"@engineer1109"),e(" 同学讨论技术问题;")]),r("li",null,"工作应该是推理方向的,但对性能优化、部署等其他方向也很有兴趣。")],-1)])),_:1})]),_:1}),t[13]||(t[13]=r("h3",{id:"by-张一乔师傅-liyulingyue",tabindex:"-1"},[e("by 张一乔师傅("),r("a",{href:"https://github.com/liyulingyue",target:"_blank",rel:"noreferrer"},"@liyulingyue"),e(") "),r("a",{class:"header-anchor",href:"#by-张一乔师傅-liyulingyue","aria-label":'Permalink to "by 张一乔师傅([@liyulingyue](https://github.com/liyulingyue))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"张一乔",github:"liyulingyue"},{default:i(()=>t[5]||(t[5]=[e(" 一个神秘的大佬!似乎啥都会 🐮! ")])),_:1})]),_:1}),t[14]||(t[14]=r("h3",{id:"by-军哥-jzhang533",tabindex:"-1"},[e("by 军哥("),r("a",{href:"https://github.com/jzhang533",target:"_blank",rel:"noreferrer"},"@jzhang533"),e(") "),r("a",{class:"header-anchor",href:"#by-军哥-jzhang533","aria-label":'Permalink to "by 军哥([@jzhang533](https://github.com/jzhang533))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"军哥",github:"jzhang533"},{default:i(()=>t[6]||(t[6]=[e(" 散步师傅很爱学习,也很会学习。你如果翻看他的个人 blog 和 GitHub 主页,会发现他从系统到算法,无所不学。学会后,他就在飞桨社区里做开源,也就是挖坑和填坑,做了很多很出色的工作。当然可能因为学太多了,以致于,还有些坑他挖了,还没填。我记得他做过很精彩的关于 Python 虚拟机的分享,研究过很长时间 torchdynamo,期待以后能在社区里,挖个大坑,并一起填上。今天,还意外发现他竟然自学过绿导师的操作系统课,这门课非常棒,在这里,也推荐给看到这段文字的读者。 ")])),_:1})]),_:1}),t[15]||(t[15]=r("h3",{id:"by-文大潇😁-wenxiaohahaha",tabindex:"-1"},[e("by 文大潇😁("),r("a",{href:"https://github.com/wenxiaohahaha",target:"_blank",rel:"noreferrer"},"@wenxiaohahaha"),e(") "),r("a",{class:"header-anchor",href:"#by-文大潇😁-wenxiaohahaha","aria-label":'Permalink to "by 文大潇😁([@wenxiaohahaha](https://github.com/wenxiaohahaha))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"wendaxiao",github:"wenxiaohahaha"},{default:i(()=>t[7]||(t[7]=[e(" 和小散师傅聊天时,我能感觉到他是一个可爱的人。我从来没有见过那么多可爱的表情包(而我,很多沙雕的表情包,和小散形成鲜明对比)!除了可爱,我觉得小散是一个浪漫主义开源人,他有自己的崇高的理想和抱负(无关权财)。我希望他能坚持下去,实现自己的愿望!当然,他这个每天在群里问问题,清各种 ddl 的卷王,我是相信他的实力的!"),r("br",null,null,-1),e(" 所以,继续闪闪发光吧,小散!"),r("br",null,null,-1),e(" 再提一句:散师傅打字太快了,聊天我根本跟不上节奏!笑死 😆。 ")])),_:1})]),_:1}),t[16]||(t[16]=r("hr",null,null,-1)),t[17]||(t[17]=r("h2",{id:"写在最后-💡",tabindex:"-1"},[e("写在最后 💡 "),r("a",{class:"header-anchor",href:"#写在最后-💡","aria-label":'Permalink to "写在最后 💡"'},"")],-1)),t[18]||(t[18]=r("p",null,[r("strong",null,"【开源江湖闲聊录】"),e(" 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。")],-1)),t[19]||(t[19]=r("hr",null,null,-1))]))}});export{z as __pageData,L as default};
diff --git a/assets/posts_sanbu-story.md.BwcXAExP.lean.js b/assets/posts_sanbu-story.md.BwcXAExP.lean.js
new file mode 100644
index 0000000..2b221c6
--- /dev/null
+++ b/assets/posts_sanbu-story.md.BwcXAExP.lean.js
@@ -0,0 +1 @@
+import{M as l,_ as n}from"./chunks/MessageBox.CshcSYCA.js";import{c as o,k as s,i as a,s as i,a as r,v as e,o as g}from"./chunks/framework.D1-4jGi8.js";const u="/assets/sanbu-01.BmLwkxl7.jpg",p="/assets/sanbu-02.CbmTx2S8.jpg",h="/assets/sanbu-03.CN4yarz2.jpg",d="/assets/sanbu-04.xtcdIdF6.jpg",b="/assets/sanbu-05.DXN_Ieqp.jpg",f="/assets/sanbu-06.UwhvCp2U.jpg",m="/assets/sanbu-07.DmjkGGLp.jpg",y="/assets/sanbu-08.Ck6rEVYm.jpg",c="/assets/sanbu-09.Dddg5DQv.jpg",k="/assets/sanbu-10.CLzscM3v.jpg",x="/assets/sanbu-11.zJPpyF50.jpg",_="/assets/sanbu-12.4-hUXVF8.jpg",z=JSON.parse('{"title":"【开源江湖闲聊录】物理 ➡️ 经济 ➡️ 开源,看散步师傅的曲折求学史~","description":"","frontmatter":{"title":"【开源江湖闲聊录】物理 ➡️ 经济 ➡️ 开源,看散步师傅的曲折求学史~","date":"2024-1-14","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"散步(小散)","github":"sanbuphy"}]},"headers":[],"relativePath":"posts/sanbu-story.md","filePath":"posts/sanbu-story.md"}'),j={name:"posts/sanbu-story.md"},L=Object.assign(j,{setup(P){return(q,t)=>(g(),o("div",null,[t[8]||(t[8]=s('“负暄檐宇下,散步池塘曲”,本期我们邀请到了热情好学的散步 🚶♀️ 师傅!你想知道他的人生理想么?你想了解他的学习历程么?你想知道他的日常生活么?你想得到他的真挚祝福么?点击此篇博客,让我们一起走进小散的浪漫人生~
一、个人名片
编者注✍️:潇某真的有很努力把小散的照片 P 得可爱,想看原图可以私聊 😁,反正肯定不会给滴 🐶!
二、采访内容 散师傅,给大家介绍一下自己吧!
小散师傅: 大家好!我是散步🚶(@sanbuphy ),菜但是喜欢学。你们可能会在水群之旅中遇到我。如果觉得我话痨了,请喊我去学习;如果你也喜欢讨论问题,欢迎随时找我一起讨论进步 😁😁;如果你觉得我有缺点,很欢迎你直接指出,这是我自省并前进的动力之一;如果你喜欢做开源 & 没事喜欢做一些玩具,那更请你和我一起去快乐开源!!!!
「散步」 名字由来(用小散原话):因为我想人生就这样 不要那么焦虑,也不要浪费;想要在一个茶足饭饱的午后,在阳光的指引下因生命的跳动而缓缓向前。最好的指代应该是散步,想要向前,但不至于拧巴,就这样的走下去了,也就像生活这般的过下去了。
大家对你都比较熟悉,一方面是因为你在社区的贡献量,另一方面是因为你经常水群,能不能给大家讲讲 你是怎么做到同时水 5~10 个群的?
小散师傅: 其实这个很简单。只要你和我一样宅 & 不打游戏 & 没有女朋友 & 打字飞快,就可以一次性水完全部群了!(群保安,不时保卫一下群里的业主们 😂😂)为数不多的好处就是因此可以认识各类大佬。
小散四件套 听说不只是 Paddle 的群,你也加了很多别的群,有没有比较有意思的群可以分享?
小散师傅: 其实我加的大部分群都是技术群。可能也许,我觉得有意思的大家觉得无聊呢。。。 最近觉得比较好玩的是:dlsys 相关的学习群和我自己的一个每周写博客打卡群(不写就发红包 🥹🥹)。但我觉得每一个有大佬愿意和我交流的群都很有趣,能和大佬们在一起学习成长是我的荣幸,也是我的快乐。我可以在聊天中获取对新事物的理解,我沉迷于此。
编者注✍️:散佬有自己的博客哦 ➡️ https://www.aispacewalk.cn/
你本科毕业于福州大学,给大家分享一下福大的吃喝玩乐攻略吧!在学校时,有没有什么好玩的事情发生?
小散师傅:
食堂对面的水果捞,都很好吃 😋😋,阿姨会很诚实的说水果 🍉 酸还是甜; 湖边很好看,草坪很大,适合躺平; 曾经参加学校管弦乐团 🎺,那是我最快乐的时光之一; 水煮肉片 yyds,没有之一; 曾经有一张神图火遍全网(一只狗望着楼梯下的情侣),没错,就是咱们教学楼拍的; 食堂基本上可以随便吃,很难踩雷(我最爱吃的就是食堂)。 上述谈到的小狗望情侣照片 编者注✍️:下面有小散师傅参与管弦乐团的照片哦~
我了解到:你是物理系出身,当时为什么会选这个专业呢?后来为什么又放弃对物理的学习?
小散师傅:
选物理专业原因:很简单,每个曾经中二的少年 🧒 都想研究宇宙和量子力学(你想掌握力量吗 😈?) 对于放弃物理的学习:因为发现自己笨而且懒,也许做不出什么有价值的东西了,以及发现自己的本心并不在于物理,而物理应该属于本心就在于它的人,只有这样才配得上一直学下去。光是耍小聪明是不可能被物理之神眷顾的。 后来你开始学经济,然后才转向深度学习。是什么让你开始学经济,后来又是怎么喜欢上深度学习的呢?
小散师傅: 学经济是因为:看到了徐高老师的《宏观经济二十五讲》。他的讲课中有一张图让我很是触动且惭愧(我每次想偷懒就翻出来看看👀),我觉得让他们(下方图片中的人)过得更好是我想做的事情。但后来,做了一些经济学相关的事(研究金融危机和大衰退/做经济学实证研究)以及听到了老师说的一句话:“写是一回事,采纳又是一回事”,我就发现:只有能有实际用途和影响力的东西才是重要的。还记得《宏观经济学二十五讲:中国视角》中经典的一句话,凯恩斯说:“从长远看,我们都已死去”。所以,人生实属短暂,我们应当在短时间内接触更有为主义的事情,现在就要让他实现。
喜欢上深度学习:它足够强,可以在短期内对人有帮助,仅此而已。
徐高讲课中的图 在转向深度学习的过程中,有没有遇到什么困难?又是如何克服的?
小散师傅: 实际上,与学习物理和数学相比,深度学习稍微没那么抗压,难度大的反而在计算机基础。但总的来说,我一直遵守八个字:“不懂就问、不会就学”。我喜欢向所有比我厉害的人学习,只要朝着目标,随机梯度下降就行了。我没有特别的克服什么困难,那样听起来很痛苦;实际上更多的应该是快乐和珍惜,在 🫂 拥抱每一次难题中尝试进步。
你觉得进入深度学习领域让你感觉到快乐么? 你觉得这一系列的转变对你的职业生涯和个人发展有何影响?
小散师傅: 总的来说我认为还是快乐的!因为他拥有无限的创造力,也有很大的可能永远地改变人类的生产力。我觉得这个转变是我人生中的随机扰动因子,人生是一场锚定自身性格特质与价值观的随机游走,我们猜不到之后会发生什么,只能让命运沿着自己向前发展,也许等之后发生了各种各样的事情, 我就能找到一条看似靠谱理由回答今天的疑问了。不过,从价值观来说,也许没有影响,只是在愿景上的不同实现方式罢了。
你提到选择计算机领域的决定源于对提高生产力的渴望,那么在你看来,深度学习和开源社区是如何实现这一目标的?
小散师傅: 开源社区是深度学习发展的最大加速器之一,而深度学习则是创造力和智力普及化的最大加速器。
你是怎么与飞桨相遇的呢?你个人对飞桨的印象如何呢?
小散师傅: 其实我本来是在 OpenMMLab 社区混的,但是看到 Paddle 社区回复勤一点(没有拉踩!研发大哥确实多一些)以及大佬参与被拉入坑,然后发现了新大陆、接触了很多大佬。非常感谢能和 Paddle 相遇。我对 Paddle 的印象就是:在国内你很难找到一个那么多研发大哥和开源大佬陪你一起卷以及发各种奖励的社区了(甚至有时候周末都会回复你)。很多有趣的方向都可以尝试,和飞桨最好的相处方式就是和它一起变的更强。但很惭愧的是我由于太忙,现在参加的频率变低了,其实很多项目都非常好玩,希望大家有时间的话可以当游戏多多参与。
在开源社区中,您认识了很多开发者或是社区运营者。他们给你留下了什么印象?能具体举例说说么?
小散师傅: 有太多人所以我只能简短说明,有没提到的朋友我先道哥歉,因为太多了。
你在 Paddle 社区中经历过最搞笑的事情是什么?
小散师傅: 某次黑客松第四期 清一色取某人的名字玩梗(咳咳,这里打个谜语)
编者注✍️:黑客松是百度飞桨社区举办的深度学习领域大型编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
黑客松花花名字梗 你是否有一些特别喜欢的开源项目或者技术?可以分享一下你喜欢的原因吗?
小散师傅: 我最喜欢的技术其实没有特别的哪一个,我都很喜欢,都有它独特的美感,能不能都喜欢❤️! 开源项目的话,那肯定是 Paddle ,当然其他开源项目我也很喜欢(比如 OpenVINO),只要拥有社区和快速答复的研发大哥,那一定就是我爱的社区。
散师傅对开源肯定有自己独特的见解,那么你认为什么样的人才能称得上是一位优秀的开源者?
小散师傅:
能一个人召集一些贡献者; 文能随手撕几百几千行代码,武能独立开设新仓库包括完整的体系架构建设; 熟读几个开源项目源码(至少一个大项目); 熟练 GitHub 操作(独立开设 CI、review PR、审核 issue 等); 写一个漂亮的 README 而不感到烦躁。 你的周末一般时这么度过的?会和朋友出去玩还是宅家呢?
小散师傅: 很显然——宅,主要是每天都觉得自己很菜,还是花时间努力变强吧,向一切大佬们学习。而且,由于我的事情太多,每天几乎都要处理到比较晚,周末也是如此。不过我最开心的事情就是偶尔可以去拍拍照,安慰一下我的艺术脑的创作欲。
编者注✍️:下方 🈶️ 散师傅的摄影作品。散师傅尤其喜欢运用光影!
总结一下你最喜欢的一句话!
小散师傅: 见善从之,闻义则服;见路不走,实事求是;不懂就问,不会就学。
新的一年开始了~散师傅给我们小小总结一下你的 2023 年,展望一下 2024 年怎么样?
小散师傅: 2023 有一些务虚,希望 2024 可以更加务实、专注、静下心,不要偷懒,聚焦于做一些长期主义、有用的事情(比如某个方向能够随手成百上千行),链接更多的有缘人并相互成长。希望自己可以变成更从容的人、能帮助别人的人、更阳光开朗的人、能传递快乐与希望的人。
不过,比起展望自己的 2024,我更希望大家的 2024 都能变得越来越好;人间短暂,希望我们都能走在希望的田野上,无论岁月如何流淌,都能在梦想的道路上互相映照,让生命力在每一处角落绽放。我无比真诚祝愿每一位看过&没看过这篇博客的朋友都能寻找到自己的希翼与幸福。 祝愿每一位人安好。
编者注✍️:这是小散师傅非常非常认真写的祝福,酝酿了很久很久!
三、小散的十八般武艺 小散爱好词云图 绘画篇 🎨 小散绘画 音乐篇 🪕 最上图为小散参加学校管弦乐队照片 下左为小散的小号 下右为小散为乐队设计的标志 > 编者注✍️:小散师傅超级会拉二胡,还会小号🎺呢!!! 摄影篇 📷 小散的摄影作品集1 小散的摄影作品集2 厨艺篇😋 小散厨艺展示集1 小散厨艺展示集2 四、著名大型评论平台——虎扑评论专区 散师傅很活跃,尤其是在开源群里活跃(都是在问问题!好卷~),因此也就结识了很多朋友 👬。这次我们邀请到和小散师傅有着密切联系的大佬们来谈谈他们对于小散师傅的印象。大家快来看看吧 😄~~
',24)),a(l,null,{default:i(()=>[a(n,{name:"zrr师傅",github:"zrr1999"},{default:i(()=>t[0]||(t[0]=[e(" 散师傅作为一个非人工智能相关专业的开发者,对各种新技术都充满热情,大部分时间都是靠业余时间自学新技术,虽然平时休息时间非常少,但是依然愿意花时间参与开源活动,并把自己看到的有趣的、有价值的开源项目分享出来,并留下自己的见解。同时散师傅的知识面也非常广,从半导体技术到计算机软件,再到硬件加速和大模型技术都有所涉猎,属于开发者中的佼佼者。 ")])),_:1})]),_:1}),t[9]||(t[9]=r("h3",{id:"by-花花-tulip-hua",tabindex:"-1"},[e("by 花花("),r("a",{href:"https://github.com/Tulip-hua",target:"_blank",rel:"noreferrer"},"@Tulip-hua"),e(") "),r("a",{class:"header-anchor",href:"#by-花花-tulip-hua","aria-label":'Permalink to "by 花花([@Tulip-hua](https://github.com/Tulip-hua))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"花花",github:"Tulip-hua"},{default:i(()=>t[1]||(t[1]=[e(" 养成系技术大佬,很有开源热情,厦门见到散师傅感觉散师傅是个很好的人,但是感觉散师傅在互联网上要更E一点哈哈哈哈,线下见面好像话不是特别多。 ")])),_:1})]),_:1}),t[10]||(t[10]=r("h3",{id:"by-梦柳师傅-ligoml",tabindex:"-1"},[e("by 梦柳师傅("),r("a",{href:"https://github.com/Ligoml",target:"_blank",rel:"noreferrer"},"@Ligoml"),e(") "),r("a",{class:"header-anchor",href:"#by-梦柳师傅-ligoml","aria-label":'Permalink to "by 梦柳师傅([@Ligoml](https://github.com/Ligoml))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"梦柳",github:"Ligoml"},{default:i(()=>t[2]||(t[2]=[e(" 散佬一直是我们社区的自学标兵,经常琢磨一些不同领域的技术问题,带着大家一起讨论学习,摇人参加快乐开源,很不错 👍。 ")])),_:1})]),_:1}),t[11]||(t[11]=r("h3",{id:"by-卢畅师傅-andsonder",tabindex:"-1"},[e("by 卢畅师傅("),r("a",{href:"https://github.com/AndSonder",target:"_blank",rel:"noreferrer"},"@AndSonder"),e(") "),r("a",{class:"header-anchor",href:"#by-卢畅师傅-andsonder","aria-label":'Permalink to "by 卢畅师傅([@AndSonder](https://github.com/AndSonder))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"卢畅",github:"AndSonder"},{default:i(()=>t[3]||(t[3]=[e(" 散师傅是一个对技术非常有热情的大佬,在各大技术群里都很活跃。白天在公司打工,晚上和周末抽空也会研究新东西。他对技术的热情真的很令人钦佩,与他交流让人感受到他在学习新技术时所迸发的喜悦。 ")])),_:1})]),_:1}),t[12]||(t[12]=r("h3",{id:"by-涛姐-luotao1",tabindex:"-1"},[e("by 涛姐("),r("a",{href:"https://github.com/luotao1",target:"_blank",rel:"noreferrer"},"@luotao1"),e(") "),r("a",{class:"header-anchor",href:"#by-涛姐-luotao1","aria-label":'Permalink to "by 涛姐([@luotao1](https://github.com/luotao1))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"涛姐",github:"luotao1"},{default:i(()=>t[4]||(t[4]=[e(" 我是从黑客松 TRT 推理算子中认识散步师傅的,对散步师傅印象比较深的有几个: "),r("ol",null,[r("li",null,"【开源社区对比研究】 以 CI 为例的调研,做的清晰明了;"),r("li",null,[e("在群里常常和 "),r("a",{href:"https://github.com/engineer1109"},"@engineer1109"),e(" 同学讨论技术问题;")]),r("li",null,"工作应该是推理方向的,但对性能优化、部署等其他方向也很有兴趣。")],-1)])),_:1})]),_:1}),t[13]||(t[13]=r("h3",{id:"by-张一乔师傅-liyulingyue",tabindex:"-1"},[e("by 张一乔师傅("),r("a",{href:"https://github.com/liyulingyue",target:"_blank",rel:"noreferrer"},"@liyulingyue"),e(") "),r("a",{class:"header-anchor",href:"#by-张一乔师傅-liyulingyue","aria-label":'Permalink to "by 张一乔师傅([@liyulingyue](https://github.com/liyulingyue))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"张一乔",github:"liyulingyue"},{default:i(()=>t[5]||(t[5]=[e(" 一个神秘的大佬!似乎啥都会 🐮! ")])),_:1})]),_:1}),t[14]||(t[14]=r("h3",{id:"by-军哥-jzhang533",tabindex:"-1"},[e("by 军哥("),r("a",{href:"https://github.com/jzhang533",target:"_blank",rel:"noreferrer"},"@jzhang533"),e(") "),r("a",{class:"header-anchor",href:"#by-军哥-jzhang533","aria-label":'Permalink to "by 军哥([@jzhang533](https://github.com/jzhang533))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"军哥",github:"jzhang533"},{default:i(()=>t[6]||(t[6]=[e(" 散步师傅很爱学习,也很会学习。你如果翻看他的个人 blog 和 GitHub 主页,会发现他从系统到算法,无所不学。学会后,他就在飞桨社区里做开源,也就是挖坑和填坑,做了很多很出色的工作。当然可能因为学太多了,以致于,还有些坑他挖了,还没填。我记得他做过很精彩的关于 Python 虚拟机的分享,研究过很长时间 torchdynamo,期待以后能在社区里,挖个大坑,并一起填上。今天,还意外发现他竟然自学过绿导师的操作系统课,这门课非常棒,在这里,也推荐给看到这段文字的读者。 ")])),_:1})]),_:1}),t[15]||(t[15]=r("h3",{id:"by-文大潇😁-wenxiaohahaha",tabindex:"-1"},[e("by 文大潇😁("),r("a",{href:"https://github.com/wenxiaohahaha",target:"_blank",rel:"noreferrer"},"@wenxiaohahaha"),e(") "),r("a",{class:"header-anchor",href:"#by-文大潇😁-wenxiaohahaha","aria-label":'Permalink to "by 文大潇😁([@wenxiaohahaha](https://github.com/wenxiaohahaha))"'},"")],-1)),a(l,null,{default:i(()=>[a(n,{name:"wendaxiao",github:"wenxiaohahaha"},{default:i(()=>t[7]||(t[7]=[e(" 和小散师傅聊天时,我能感觉到他是一个可爱的人。我从来没有见过那么多可爱的表情包(而我,很多沙雕的表情包,和小散形成鲜明对比)!除了可爱,我觉得小散是一个浪漫主义开源人,他有自己的崇高的理想和抱负(无关权财)。我希望他能坚持下去,实现自己的愿望!当然,他这个每天在群里问问题,清各种 ddl 的卷王,我是相信他的实力的!"),r("br",null,null,-1),e(" 所以,继续闪闪发光吧,小散!"),r("br",null,null,-1),e(" 再提一句:散师傅打字太快了,聊天我根本跟不上节奏!笑死 😆。 ")])),_:1})]),_:1}),t[16]||(t[16]=r("hr",null,null,-1)),t[17]||(t[17]=r("h2",{id:"写在最后-💡",tabindex:"-1"},[e("写在最后 💡 "),r("a",{class:"header-anchor",href:"#写在最后-💡","aria-label":'Permalink to "写在最后 💡"'},"")],-1)),t[18]||(t[18]=r("p",null,[r("strong",null,"【开源江湖闲聊录】"),e(" 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。")],-1)),t[19]||(t[19]=r("hr",null,null,-1))]))}});export{z as __pageData,L as default};
diff --git a/assets/posts_shun-story.md.uXSUQQcY.js b/assets/posts_shun-story.md.uXSUQQcY.js
new file mode 100644
index 0000000..08b6956
--- /dev/null
+++ b/assets/posts_shun-story.md.uXSUQQcY.js
@@ -0,0 +1 @@
+import{_ as o,c as e,k as r,o as a}from"./chunks/framework.D1-4jGi8.js";const s="/assets/shun-01.CWHiLdW6.jpg",n="/assets/shun-05.BnKWAdLF.jpg",l="/assets/shun-02.D_d2jXpo.jpg",p="/assets/shun-03.DUtFi7rq.jpg",i="/assets/shun-04.CQ3SJyp9.jpg",P=JSON.parse('{"title":"【开源江湖闲聊录】社区掌舵人:顺师傅的 Paddle 之旅","description":"","frontmatter":{"title":"【开源江湖闲聊录】社区掌舵人:顺师傅的 Paddle 之旅","date":"2023-11-21T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇","github":"wenxiaohahaha"},{"name":"柳顺(顺师傅)","github":"megemini"}]},"headers":[],"relativePath":"posts/shun-story.md","filePath":"posts/shun-story.md"}'),g={name:"posts/shun-story.md"};function h(d,t,u,c,b,m){return a(),e("div",null,t[0]||(t[0]=[r('【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
一、前言 是谁,能让最摸 🐟 的开发者禁不住 PR 的诱惑,疯狂求 review?又是谁,让向来严于待人、宽以律己的 Paddle 开发者忍不住夸夸?接下来,有请我们的大佬——顺师傅 ✨
顺师傅是一名 Paddle 的社区开发者,但在社区里,顺师傅不仅仅是一个称呼,更是一股推动力。他主导的项目 【将 xdoctest 引入飞桨工作流 】 是 Paddle 社区迄今为止最大的开源活动 🎊。该项目规模极其庞大,涉及超过一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同完成。顺师傅的领导力不仅显著提升了 API 示例代码的规范性,还极大地促进了整个开源生态的发展和繁荣 🎉。
而顺师傅本身,作为一位经验丰富的资深开发者,也拥有着深厚的技术背景和广泛的知识储备。我们怀着对他的好奇(膜拜 )🤩,通过文字采访的形式来深入了解顺师傅的故事,以下是我们与顺师傅的采访内容 📄。
二、采访内容 可以介绍一下自己吗?平时有什么兴趣爱好?
顺师傅: 我的 AI Studio 和 GitHub 的账号是 megemini,平时喜欢看看书爬爬山跑跑步~
作为一名技术佬,你的一天是如何度过的呢? 可以分享一下你的日常生活么?
顺师傅: 每天都会做的事情,比如写代码、跑步、看书之外,由于最近需要用到 C++,而上一次用 C++ 都是十多年前的事情了,所以近期看一些 C++ 新特性相关的书和视频教程会比较多 ~
可以简单向大家展示一下你一天的生活作息嘛?
顺师傅: 家里情况比较特殊,没有什么可参考性~ 不过现在不会熬夜写代码了,晚上一般七八点钟也会出去跑跑~
“上一次用 C++ 都是十多年前的事情了”这句话太有年代感了,是在学生时代用的吗?
顺师傅: 嗯,工作之后 Java、Python 用的比较多 ~
你是如何成为 Paddle 社区的开发者的?
顺师傅: 毫不避讳的说,当初是因为 AI Studio 有比较多的免费算力才接触到 Paddle 社区并真正的开始使用 PaddlePaddle 框架,慢慢的后面才接触到黑客松、快乐开源之类的活动 ~
Paddle 社区开发者都称呼你为“顺师傅”,这个称呼是怎么来的?是谁第一个开始这么称呼你的(笑)?
顺师傅: 微信的昵称就是「顺」,好像是涛姐还是 001 开始这么叫的 ... ... 惭愧 ... ...
外界对开发者的固有印象(社恐,直男),你周围的开发者形象是怎样的?你对 Paddle 哪位社区开发者印象最深?
顺师傅: 开发者都比较坦诚,由于平时基本都是跟技术打交道,所以不管是话多也好、话少也罢,交流起来都是比较简单、热心的感觉~001 对于开源的那种热爱对我印象最为深刻~
SigureMo 是 Paddle 社区的资深开发者,由于是第一位社区 commiter 而被大家称为 001。
为什么 001 会给你带来这样深刻的印象?可以分享一下其中的小故事嘛?
顺师傅: 记得当时为了修改示例代码写了一个小工具,本来还只是想发出来试一下,结果好像第二天 001 的 PR 就来了~技术能力和执行力都太强了,惭愧 ... ...
你可以谈谈你对开源社区的理解和认识吗?
顺师傅: 抛开自由、开放不谈,开源项目的参与门槛其实是比较高的,这里主要是针对正规的、规模较大的开源项目、代码类的贡献来说~因此,飞桨能够组织快乐开源、黑客松之类的活动,并且是由中文社区主导,个人感觉是非常有意义的一件事情~
“将 xdoctest 引入飞桨工作流”这个项目是如何诞生的?你可以谈谈这个项目的初衷和目标吗?
顺师傅: 这个项目是第六届中国软件开源创新大赛 Paddle 挑战赛的一个赛题,主要目标是使用 xdoctest 替换掉 CI 流水线中的不怎么好用的示例代码检查工具~
你是如何组织和号召其他社区开发者参与这个项目的?在这个过程中遇到了哪些挑战,又是如何克服的?
顺师傅: 嗯 ... ... 这里应该主要感谢涛姐帮忙摇人吧~~~我所做的只是把事情讲清楚,仅此而已 ~
这个项目涉及到一千多个 API 示例、数十万行代码的修改,你是如何管理和协调这么大规模的项目的?
顺师傅: 飞桨开源社区的参与者能力都很强,所以,只要把事情讲清楚,做什么、怎么做,大家自然会把事情做好~期间,001、涛姐、孙师傅、军哥等等很多人,都帮助一起分析如何把这个事情讲清楚,大家目标一致,水到渠成吧~
这个项目的完成对 Paddle 社区的开源生态有何影响?你认为它在推动开源生态繁荣方面的作用体现在哪里?
顺师傅: 提升代码质量、对齐主流 Python 解决方案~能够引导更多 “新人” 参与到开源项目中来~
在你看来,这个项目的最大贡献是什么?为什么?
顺师傅: 丢掉历史包袱,以后大家都是在统一的 Python 标准下参与贡献,未来的技术选择灵活性都大很多~
回顾这个项目,有哪些时刻让你印象深刻?为什么?
顺师傅: 印象最深刻的是当时 RFC 讨论的时候~参与之前本来是抱着试一试、捡漏的心态来的,结果 RFC 一番讨论下来,有种骑虎难下的感觉 ... ... 另外,在发起示例代码修改这个快乐开源活动之后,看到能有这么多开发者参与进来,并且最终把这个项目做了下来,飞桨开源社区号召力之大,属实给了我一次小小的震撼~
对于未来,你对 Paddle 社区有哪些期待和建议?
顺师傅: 希望能够引导更多中文社区的开发者参与进来,能够有更多在校的学生参与进来~另外,提一点小小的建议,虽然已经参与飞桨开源社区快一年了,但是,仍然对 Paddle 本身的框架技术路线、技术规划以及一些细节考量非常模糊,希望能有这方面较为系统的文档、视频教程吧~
作为一名经验丰富的老开发,对于想要参与开源社区,特别是 Paddle 社区的年轻人,你有什么建议或者寄语?
顺师傅: 只有让更多年轻的开发者不断接过手中的桨,才能将开源社区一直行驶下去,直至星辰大海~
三、“五星评论家麦克阿瑟”专区 我们也邀请了一些和顺师傅很熟悉的、有过合作经历的朋友们,贡献一下和顺师傅相关的故事,或者他们对顺师傅的评价~以下均为真心话,请放心看!
就 Xdoctest 这个任务而言,最开始其实我自己都是没有多少信心的,毕竟是整个框架级别的,光是任务量想想就头疼,而且历史遗留问题特别多,怎么想都做不来吧?当初想着在 RFC 阶段就尽可能抛出我已知的各种坑,让开发者知难而退,这样我也能省心些,要是啥也不懂的我也带不动。
但是顺师傅的出现打破了我的摸鱼计划,顺师傅上千行的 RFC 调研地比我了解的还清楚,对于我提出的各种「劝退」问题也逐一回复了合理的解决方案,这时候我突然觉得,也许真的能成?
RFC 合入后顺师傅有条不紊地推进着整个任务,每一次遇到疑难问题时,顺师傅总能选出合适的解决方案。比如 Paddle Tensor 打印时候 Place 不对齐的问题、输出精度问题、运行环境隔离问题等等,这些都是 Xdoctest 本身存在的诸多问题,经过顺师傅的调整和优化,Xdoctest 已经基本能够完美适配我们 Paddle 了。
此外大家可能比较熟悉顺师傅发放的两个开源任务,也是整个任务耗时最久的部分,顺师傅在开源任务中从开发者转变为了 reviewer,帮助我们 review 了很大一部分的 PR,并且 review 地十分细致且专业。
然后就如大家所见到的,真的成了。
顺师傅太强了~期待下次合作~
本任务难点在于工程量大、历史包袱重,感谢顺师傅带着所有队员(24 位)用强大的耐心、细心完成了这一旷日持久的推进,你们的工匠精神值得全体同学学习!众人拾柴火焰高,感谢项目的所有参与的同学!
编者注✍️: 涛姐的话太官方了,所以我挑了句重点,希望涛姐能原谅我 🤪
有幸通过软件开源创新大赛,结识了顺师傅,他的大赛课题是将 xdoctest 引入到飞桨框架工作流中,为了提升效率,减少错误,还不辞辛苦做了一个简单的转换工具 convert_doctest,极大的节省了修改的工作量,减少了出错成本。
此任务工作量巨大,而且很多 API 历史遗留问题繁杂,顺师傅在工作中展现出的极高的职业素养和敬业精神令我们为之侧目。他对待每一个细节都非常用心,力求做到尽善尽美。在面对复杂的问题时,他总是能够迅速找到解决办法,充分体现了他的专业能力和经验。
此外,顺师傅还具有很强的团队协作能力,他乐于与大家分享经验和技巧,共同提高整个团队的工作效率。在工作中,他总是能够主动承担责任,为团队的发展贡献自己的力量。
顺师傅好强,带带弟弟 顺师傅的分析能力和组织能力都超强
在参与顺师傅的项目过程中,我甚至感觉顺师傅像我的 mentor,因为从他身上切切实实学到了很多东西,比如问题的拆解、项目的组织、技术的交流等...
尤其是看到顺师傅逻辑非常清晰的 RFC 文档后,仅从文档写作方面都让我受益匪浅(因为文档的编写需要非常多的逻辑推理和思考,而像顺师傅一样把事情讲清楚的研发,真的不多,大家感兴趣也可以去看看)功利地说,顺师傅对我的职业发展有非常大的提升,希望顺师傅能够继续加油,影响更多人!
四、结尾 在探索顺师傅的旅程中,我们不仅发现了一个技术上的资深开发者,也见证了一个开源社区领路人的成长和影响力。他的故事和成就展示了开源社区不仅是技术的聚集地,更是所有开发者开源热情的熔炉 🔥。
期待顺师傅在未来的旅程中继续发光发热,为 Paddle 或是其他开源社区带来更多的创新和启示 💡。
最后,应顺师傅要求,就不附照片了,以一棵柳树作为结尾 🌲
彩蛋 🥚 往期 blog 有顺师傅真容哦~大家可以去探索一下!
',28)]))}const q=o(g,[["render",h]]);export{P as __pageData,q as default};
diff --git a/assets/posts_shun-story.md.uXSUQQcY.lean.js b/assets/posts_shun-story.md.uXSUQQcY.lean.js
new file mode 100644
index 0000000..08b6956
--- /dev/null
+++ b/assets/posts_shun-story.md.uXSUQQcY.lean.js
@@ -0,0 +1 @@
+import{_ as o,c as e,k as r,o as a}from"./chunks/framework.D1-4jGi8.js";const s="/assets/shun-01.CWHiLdW6.jpg",n="/assets/shun-05.BnKWAdLF.jpg",l="/assets/shun-02.D_d2jXpo.jpg",p="/assets/shun-03.DUtFi7rq.jpg",i="/assets/shun-04.CQ3SJyp9.jpg",P=JSON.parse('{"title":"【开源江湖闲聊录】社区掌舵人:顺师傅的 Paddle 之旅","description":"","frontmatter":{"title":"【开源江湖闲聊录】社区掌舵人:顺师傅的 Paddle 之旅","date":"2023-11-21T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"co_authors":[{"name":"文潇","github":"wenxiaohahaha"},{"name":"柳顺(顺师傅)","github":"megemini"}]},"headers":[],"relativePath":"posts/shun-story.md","filePath":"posts/shun-story.md"}'),g={name:"posts/shun-story.md"};function h(d,t,u,c,b,m){return a(),e("div",null,t[0]||(t[0]=[r('【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
一、前言 是谁,能让最摸 🐟 的开发者禁不住 PR 的诱惑,疯狂求 review?又是谁,让向来严于待人、宽以律己的 Paddle 开发者忍不住夸夸?接下来,有请我们的大佬——顺师傅 ✨
顺师傅是一名 Paddle 的社区开发者,但在社区里,顺师傅不仅仅是一个称呼,更是一股推动力。他主导的项目 【将 xdoctest 引入飞桨工作流 】 是 Paddle 社区迄今为止最大的开源活动 🎊。该项目规模极其庞大,涉及超过一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同完成。顺师傅的领导力不仅显著提升了 API 示例代码的规范性,还极大地促进了整个开源生态的发展和繁荣 🎉。
而顺师傅本身,作为一位经验丰富的资深开发者,也拥有着深厚的技术背景和广泛的知识储备。我们怀着对他的好奇(膜拜 )🤩,通过文字采访的形式来深入了解顺师傅的故事,以下是我们与顺师傅的采访内容 📄。
二、采访内容 可以介绍一下自己吗?平时有什么兴趣爱好?
顺师傅: 我的 AI Studio 和 GitHub 的账号是 megemini,平时喜欢看看书爬爬山跑跑步~
作为一名技术佬,你的一天是如何度过的呢? 可以分享一下你的日常生活么?
顺师傅: 每天都会做的事情,比如写代码、跑步、看书之外,由于最近需要用到 C++,而上一次用 C++ 都是十多年前的事情了,所以近期看一些 C++ 新特性相关的书和视频教程会比较多 ~
可以简单向大家展示一下你一天的生活作息嘛?
顺师傅: 家里情况比较特殊,没有什么可参考性~ 不过现在不会熬夜写代码了,晚上一般七八点钟也会出去跑跑~
“上一次用 C++ 都是十多年前的事情了”这句话太有年代感了,是在学生时代用的吗?
顺师傅: 嗯,工作之后 Java、Python 用的比较多 ~
你是如何成为 Paddle 社区的开发者的?
顺师傅: 毫不避讳的说,当初是因为 AI Studio 有比较多的免费算力才接触到 Paddle 社区并真正的开始使用 PaddlePaddle 框架,慢慢的后面才接触到黑客松、快乐开源之类的活动 ~
Paddle 社区开发者都称呼你为“顺师傅”,这个称呼是怎么来的?是谁第一个开始这么称呼你的(笑)?
顺师傅: 微信的昵称就是「顺」,好像是涛姐还是 001 开始这么叫的 ... ... 惭愧 ... ...
外界对开发者的固有印象(社恐,直男),你周围的开发者形象是怎样的?你对 Paddle 哪位社区开发者印象最深?
顺师傅: 开发者都比较坦诚,由于平时基本都是跟技术打交道,所以不管是话多也好、话少也罢,交流起来都是比较简单、热心的感觉~001 对于开源的那种热爱对我印象最为深刻~
SigureMo 是 Paddle 社区的资深开发者,由于是第一位社区 commiter 而被大家称为 001。
为什么 001 会给你带来这样深刻的印象?可以分享一下其中的小故事嘛?
顺师傅: 记得当时为了修改示例代码写了一个小工具,本来还只是想发出来试一下,结果好像第二天 001 的 PR 就来了~技术能力和执行力都太强了,惭愧 ... ...
你可以谈谈你对开源社区的理解和认识吗?
顺师傅: 抛开自由、开放不谈,开源项目的参与门槛其实是比较高的,这里主要是针对正规的、规模较大的开源项目、代码类的贡献来说~因此,飞桨能够组织快乐开源、黑客松之类的活动,并且是由中文社区主导,个人感觉是非常有意义的一件事情~
“将 xdoctest 引入飞桨工作流”这个项目是如何诞生的?你可以谈谈这个项目的初衷和目标吗?
顺师傅: 这个项目是第六届中国软件开源创新大赛 Paddle 挑战赛的一个赛题,主要目标是使用 xdoctest 替换掉 CI 流水线中的不怎么好用的示例代码检查工具~
你是如何组织和号召其他社区开发者参与这个项目的?在这个过程中遇到了哪些挑战,又是如何克服的?
顺师傅: 嗯 ... ... 这里应该主要感谢涛姐帮忙摇人吧~~~我所做的只是把事情讲清楚,仅此而已 ~
这个项目涉及到一千多个 API 示例、数十万行代码的修改,你是如何管理和协调这么大规模的项目的?
顺师傅: 飞桨开源社区的参与者能力都很强,所以,只要把事情讲清楚,做什么、怎么做,大家自然会把事情做好~期间,001、涛姐、孙师傅、军哥等等很多人,都帮助一起分析如何把这个事情讲清楚,大家目标一致,水到渠成吧~
这个项目的完成对 Paddle 社区的开源生态有何影响?你认为它在推动开源生态繁荣方面的作用体现在哪里?
顺师傅: 提升代码质量、对齐主流 Python 解决方案~能够引导更多 “新人” 参与到开源项目中来~
在你看来,这个项目的最大贡献是什么?为什么?
顺师傅: 丢掉历史包袱,以后大家都是在统一的 Python 标准下参与贡献,未来的技术选择灵活性都大很多~
回顾这个项目,有哪些时刻让你印象深刻?为什么?
顺师傅: 印象最深刻的是当时 RFC 讨论的时候~参与之前本来是抱着试一试、捡漏的心态来的,结果 RFC 一番讨论下来,有种骑虎难下的感觉 ... ... 另外,在发起示例代码修改这个快乐开源活动之后,看到能有这么多开发者参与进来,并且最终把这个项目做了下来,飞桨开源社区号召力之大,属实给了我一次小小的震撼~
对于未来,你对 Paddle 社区有哪些期待和建议?
顺师傅: 希望能够引导更多中文社区的开发者参与进来,能够有更多在校的学生参与进来~另外,提一点小小的建议,虽然已经参与飞桨开源社区快一年了,但是,仍然对 Paddle 本身的框架技术路线、技术规划以及一些细节考量非常模糊,希望能有这方面较为系统的文档、视频教程吧~
作为一名经验丰富的老开发,对于想要参与开源社区,特别是 Paddle 社区的年轻人,你有什么建议或者寄语?
顺师傅: 只有让更多年轻的开发者不断接过手中的桨,才能将开源社区一直行驶下去,直至星辰大海~
三、“五星评论家麦克阿瑟”专区 我们也邀请了一些和顺师傅很熟悉的、有过合作经历的朋友们,贡献一下和顺师傅相关的故事,或者他们对顺师傅的评价~以下均为真心话,请放心看!
就 Xdoctest 这个任务而言,最开始其实我自己都是没有多少信心的,毕竟是整个框架级别的,光是任务量想想就头疼,而且历史遗留问题特别多,怎么想都做不来吧?当初想着在 RFC 阶段就尽可能抛出我已知的各种坑,让开发者知难而退,这样我也能省心些,要是啥也不懂的我也带不动。
但是顺师傅的出现打破了我的摸鱼计划,顺师傅上千行的 RFC 调研地比我了解的还清楚,对于我提出的各种「劝退」问题也逐一回复了合理的解决方案,这时候我突然觉得,也许真的能成?
RFC 合入后顺师傅有条不紊地推进着整个任务,每一次遇到疑难问题时,顺师傅总能选出合适的解决方案。比如 Paddle Tensor 打印时候 Place 不对齐的问题、输出精度问题、运行环境隔离问题等等,这些都是 Xdoctest 本身存在的诸多问题,经过顺师傅的调整和优化,Xdoctest 已经基本能够完美适配我们 Paddle 了。
此外大家可能比较熟悉顺师傅发放的两个开源任务,也是整个任务耗时最久的部分,顺师傅在开源任务中从开发者转变为了 reviewer,帮助我们 review 了很大一部分的 PR,并且 review 地十分细致且专业。
然后就如大家所见到的,真的成了。
顺师傅太强了~期待下次合作~
本任务难点在于工程量大、历史包袱重,感谢顺师傅带着所有队员(24 位)用强大的耐心、细心完成了这一旷日持久的推进,你们的工匠精神值得全体同学学习!众人拾柴火焰高,感谢项目的所有参与的同学!
编者注✍️: 涛姐的话太官方了,所以我挑了句重点,希望涛姐能原谅我 🤪
有幸通过软件开源创新大赛,结识了顺师傅,他的大赛课题是将 xdoctest 引入到飞桨框架工作流中,为了提升效率,减少错误,还不辞辛苦做了一个简单的转换工具 convert_doctest,极大的节省了修改的工作量,减少了出错成本。
此任务工作量巨大,而且很多 API 历史遗留问题繁杂,顺师傅在工作中展现出的极高的职业素养和敬业精神令我们为之侧目。他对待每一个细节都非常用心,力求做到尽善尽美。在面对复杂的问题时,他总是能够迅速找到解决办法,充分体现了他的专业能力和经验。
此外,顺师傅还具有很强的团队协作能力,他乐于与大家分享经验和技巧,共同提高整个团队的工作效率。在工作中,他总是能够主动承担责任,为团队的发展贡献自己的力量。
顺师傅好强,带带弟弟 顺师傅的分析能力和组织能力都超强
在参与顺师傅的项目过程中,我甚至感觉顺师傅像我的 mentor,因为从他身上切切实实学到了很多东西,比如问题的拆解、项目的组织、技术的交流等...
尤其是看到顺师傅逻辑非常清晰的 RFC 文档后,仅从文档写作方面都让我受益匪浅(因为文档的编写需要非常多的逻辑推理和思考,而像顺师傅一样把事情讲清楚的研发,真的不多,大家感兴趣也可以去看看)功利地说,顺师傅对我的职业发展有非常大的提升,希望顺师傅能够继续加油,影响更多人!
四、结尾 在探索顺师傅的旅程中,我们不仅发现了一个技术上的资深开发者,也见证了一个开源社区领路人的成长和影响力。他的故事和成就展示了开源社区不仅是技术的聚集地,更是所有开发者开源热情的熔炉 🔥。
期待顺师傅在未来的旅程中继续发光发热,为 Paddle 或是其他开源社区带来更多的创新和启示 💡。
最后,应顺师傅要求,就不附照片了,以一棵柳树作为结尾 🌲
彩蛋 🥚 往期 blog 有顺师傅真容哦~大家可以去探索一下!
',28)]))}const q=o(g,[["render",h]]);export{P as __pageData,q as default};
diff --git a/assets/posts_starter-camp.md.BokqWFIR.js b/assets/posts_starter-camp.md.BokqWFIR.js
new file mode 100644
index 0000000..ad6ca2e
--- /dev/null
+++ b/assets/posts_starter-camp.md.BokqWFIR.js
@@ -0,0 +1 @@
+import{_ as r,c as t,k as a,o}from"./chunks/framework.D1-4jGi8.js";const i="/assets/starter-01.BQhXy2TN.png",l="/assets/starter-02.Bf2WfiHX.png",n="/assets/starter-03.BOZeuzfN.png",s="/assets/starter-04.zLBRTWXy.png",h="/assets/starter-05.B8V6TaI0.png",g="/assets/starter-06.CtTR9ub7.png",c="/assets/starter-07.CmzgjHu_.png",u="/assets/starter-08.BWHELzJ3.png",f="/assets/starter-11.jq6tV3JA.png",y=JSON.parse('{"title":"新征程 ⛵️ |飞桨「启航计划」集训营圆满落幕","description":"","frontmatter":{"title":"新征程 ⛵️ |飞桨「启航计划」集训营圆满落幕","date":"2024-2-18","author":{"name":"孙钟恺","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/starter-camp.md","filePath":"posts/starter-camp.md"}'),b={name:"posts/starter-camp.md"};function d(p,e,m,_,k,P){return o(),t("div",null,e[0]||(e[0]=[a('在 2023 年的 11 月 14 日,飞桨开源社区开启了一个新项目(新坑 )—— 启航计划集训营 。经过为期两个月紧张而充实的集训后,启航计划集训营于 1 月 30 日 正式圆满完成所有集训计划。在集训期间,大家出色地完成了三项热身打卡任务,并且有 19 位营员合入了超过 110 个 PR。衷心感谢各位营员的积极参与和卓越贡献!在这里,也向开源社区的各位 “汇报” 一下活动情况~
01 - 启航计划是什么? 「启航计划」 是飞桨社区发起的远程代码集训项目 ,也是「护航计划 」的前置活动。我们以开展为期 2 个月集训营的形式,鼓励开发者积极参与开发 2 个方向的快乐开源任务 ,以此提升自己的代码实践能力,与社区共同成长 💪。
基础方向 :Paddle 核心框架 + Paddle CV 套件的快乐开源任务,将有机会参与社区里最轻松愉快的开源开发活动。大模型方向 :参与 PaddleMIX 跨模态大模型套件的快乐开源任务,将有机会接触社区里最前沿的大模型应用开发与工具建设。活动详情见 Issue: #58497
与护航计划的区别? 不限定开发者背景,企业和学生开发者均可参与。 不进行面试,直接进行简历筛选 。 集训内容为完成 【快乐开源任务】 ,合入 1 个 PR 即满足结营条件,相对轻松。 提供高质量集训课程 ,并以 PR review 交流的形式进行沟通,而非导师一对一带教的形式。 时间周期更短(2 个月),门槛相对更低。 参与者需要做什么? 1. 自选任务,并投递简历报名,通过筛选后即可入营。集训营持续 2 个月,上限 30 人 共有 36 名候选人参与报名并投递简历。内部筛选后,最终通过 29 位学员。 入选学员中,22 名学生(电子科大、西交、杭电、浙大、清华……)、7 名企业开发者。 入选学员中,13 名 PFCC 成员,16 名新人。 入选营员:@NKNaN 、@shiofjsaio 、@YangWulve 、@Hhankyangg 、@sanbuphy 、@Atlantisming 、@GreatV 、@Tsaiyue 、@Kaedeharai 、@wyyang23 、@jiongjiongli 、@rhmaaa 、@cocoshe 、@zbt78 、@YibinLiu666 、@Turingg 、@ooooo-create 、@ccsuzzh 、@zade23 、@challengewly 、@zoey333 、@unicornshell 、@storm-ice 、@YinKeYu 、@Olive-2019 、@fsczz 、@jiangziyan-693 、@isLinXu 、@jingsongliujing
2. 按兴趣参与集训课程(一周一次)并按时提交双周周报 以实际开发为导向,每周开展一次课程,总计安排 6 次课程。 营员每双周提交一次周报,追踪集训进展和计划,总计提交 4 期双周报。 课程以腾讯会议形式开展 周报截图 3. 完成 3 个打卡任务,并至少合入 1 个快乐开源 PR 打卡任务一:修改飞桨文档。25 人完成 打卡任务二:Paddle 本地编译。13 人完成 打卡任务三:跑通 SD 训练推理。15 人完成 热身任务打卡情况(部分) 4. 结营期间,可自愿申请一、二、三等奖,并参加答辩 结营考核详情见 Issue:#123
答辩现场 飞桨官方提供什么? 1. 开发导向的每周课程 由飞桨研发和 PM 根据营员的诉求和实际开发情况,来提供每周的课程。 课程安排 2. 周报管理 助教负责对每双周的周报进行管理,确保提交周报的数量和质量。 其中一期周报提及截图 3. 技术答疑 在微信群以及课程中,飞桨研发会针对营员的疑惑进行一一解答。 同时,会有热心、能力强的营员解答别人的问题。 4. 活动运营支持 PM 和助教会对活动的各个环节提供支持,保障整体活动的顺利进行。 整体活动节奏 5. 成绩评估 PM 和助教会根据结营要求,在结营期间对每位学员进行评估,判断是否满足结营条件。 针对一、二、三等奖的答辩,会邀请相应方向的研发导师进行评估。同时,这也是进入护航计划的绝佳机会 ,因为研发导师会有充足的时间来了解你~ 02 - 活动成果 数字上的成果 共有 19 位营员合入了超过 110 个快乐开源 PR。 社区新加入 11 名 contributor。 15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。@cocoshe 在开发过程中沉淀 1 篇《 PHI 算子库 kernel 注册全流程源码阅读》 。数字背后的情况 共有 19 位营员合入了超过 110 个快乐开源 PR。 完成 80+ 文档、15+ 新 IR 适配、15+ 静态图推全、 5+ cmake 治理、 5+ 复数算子等等题目,文档相关任务约占总体完成任务的一半左右.
社区新加入 11 名 contributor。 其中 7 名 contributor 只合入了一个文档相关 PR,活动后续缺少延续性。
15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。考核通过的营员中,有 10 名是原 PFCC 成员,纯新人通过率不高(31%),猜测是启航计划的活动缺乏引导。
03 - 新的尝试——Docs 偶像女团(精品小团) 是什么? 自愿参与文档开发、维护的社区化小团体,氛围活跃,开发意愿很积极。
由谁组成? 3 名大二女生(2 名启航计划学员 @Turingg @Kaedeharai ,1 名社区开发者@entired ),主要负责开发和维护。 1 名热心社区开发者(O 师傅 ,大三),负责日常手把手指导 3 名女生。 2 名飞桨内部同学,负责维持团体运转、答疑解惑。 为什么组成这个团体? 集训期间,2 位女生开发意愿比较强烈,但对具体做什么事情感到迷茫,因此孙师傅就把她们拉入(骗进 )了 docs 小组。
运转机制? 每周一次例会 ,由 3 名女生轮流主持,主要通过每周开发进度、布置新任务,所有人必须参会。每周一次会议纪要 ,由会议主持负责写会议内容和 Todo。如流群日常沟通交流 。
详细资料见:community/docs_group
',57)]))}const x=r(b,[["render",d]]);export{y as __pageData,x as default};
diff --git a/assets/posts_starter-camp.md.BokqWFIR.lean.js b/assets/posts_starter-camp.md.BokqWFIR.lean.js
new file mode 100644
index 0000000..ad6ca2e
--- /dev/null
+++ b/assets/posts_starter-camp.md.BokqWFIR.lean.js
@@ -0,0 +1 @@
+import{_ as r,c as t,k as a,o}from"./chunks/framework.D1-4jGi8.js";const i="/assets/starter-01.BQhXy2TN.png",l="/assets/starter-02.Bf2WfiHX.png",n="/assets/starter-03.BOZeuzfN.png",s="/assets/starter-04.zLBRTWXy.png",h="/assets/starter-05.B8V6TaI0.png",g="/assets/starter-06.CtTR9ub7.png",c="/assets/starter-07.CmzgjHu_.png",u="/assets/starter-08.BWHELzJ3.png",f="/assets/starter-11.jq6tV3JA.png",y=JSON.parse('{"title":"新征程 ⛵️ |飞桨「启航计划」集训营圆满落幕","description":"","frontmatter":{"title":"新征程 ⛵️ |飞桨「启航计划」集训营圆满落幕","date":"2024-2-18","author":{"name":"孙钟恺","github":"sunzhongkai588"}},"headers":[],"relativePath":"posts/starter-camp.md","filePath":"posts/starter-camp.md"}'),b={name:"posts/starter-camp.md"};function d(p,e,m,_,k,P){return o(),t("div",null,e[0]||(e[0]=[a('在 2023 年的 11 月 14 日,飞桨开源社区开启了一个新项目(新坑 )—— 启航计划集训营 。经过为期两个月紧张而充实的集训后,启航计划集训营于 1 月 30 日 正式圆满完成所有集训计划。在集训期间,大家出色地完成了三项热身打卡任务,并且有 19 位营员合入了超过 110 个 PR。衷心感谢各位营员的积极参与和卓越贡献!在这里,也向开源社区的各位 “汇报” 一下活动情况~
01 - 启航计划是什么? 「启航计划」 是飞桨社区发起的远程代码集训项目 ,也是「护航计划 」的前置活动。我们以开展为期 2 个月集训营的形式,鼓励开发者积极参与开发 2 个方向的快乐开源任务 ,以此提升自己的代码实践能力,与社区共同成长 💪。
基础方向 :Paddle 核心框架 + Paddle CV 套件的快乐开源任务,将有机会参与社区里最轻松愉快的开源开发活动。大模型方向 :参与 PaddleMIX 跨模态大模型套件的快乐开源任务,将有机会接触社区里最前沿的大模型应用开发与工具建设。活动详情见 Issue: #58497
与护航计划的区别? 不限定开发者背景,企业和学生开发者均可参与。 不进行面试,直接进行简历筛选 。 集训内容为完成 【快乐开源任务】 ,合入 1 个 PR 即满足结营条件,相对轻松。 提供高质量集训课程 ,并以 PR review 交流的形式进行沟通,而非导师一对一带教的形式。 时间周期更短(2 个月),门槛相对更低。 参与者需要做什么? 1. 自选任务,并投递简历报名,通过筛选后即可入营。集训营持续 2 个月,上限 30 人 共有 36 名候选人参与报名并投递简历。内部筛选后,最终通过 29 位学员。 入选学员中,22 名学生(电子科大、西交、杭电、浙大、清华……)、7 名企业开发者。 入选学员中,13 名 PFCC 成员,16 名新人。 入选营员:@NKNaN 、@shiofjsaio 、@YangWulve 、@Hhankyangg 、@sanbuphy 、@Atlantisming 、@GreatV 、@Tsaiyue 、@Kaedeharai 、@wyyang23 、@jiongjiongli 、@rhmaaa 、@cocoshe 、@zbt78 、@YibinLiu666 、@Turingg 、@ooooo-create 、@ccsuzzh 、@zade23 、@challengewly 、@zoey333 、@unicornshell 、@storm-ice 、@YinKeYu 、@Olive-2019 、@fsczz 、@jiangziyan-693 、@isLinXu 、@jingsongliujing
2. 按兴趣参与集训课程(一周一次)并按时提交双周周报 以实际开发为导向,每周开展一次课程,总计安排 6 次课程。 营员每双周提交一次周报,追踪集训进展和计划,总计提交 4 期双周报。 课程以腾讯会议形式开展 周报截图 3. 完成 3 个打卡任务,并至少合入 1 个快乐开源 PR 打卡任务一:修改飞桨文档。25 人完成 打卡任务二:Paddle 本地编译。13 人完成 打卡任务三:跑通 SD 训练推理。15 人完成 热身任务打卡情况(部分) 4. 结营期间,可自愿申请一、二、三等奖,并参加答辩 结营考核详情见 Issue:#123
答辩现场 飞桨官方提供什么? 1. 开发导向的每周课程 由飞桨研发和 PM 根据营员的诉求和实际开发情况,来提供每周的课程。 课程安排 2. 周报管理 助教负责对每双周的周报进行管理,确保提交周报的数量和质量。 其中一期周报提及截图 3. 技术答疑 在微信群以及课程中,飞桨研发会针对营员的疑惑进行一一解答。 同时,会有热心、能力强的营员解答别人的问题。 4. 活动运营支持 PM 和助教会对活动的各个环节提供支持,保障整体活动的顺利进行。 整体活动节奏 5. 成绩评估 PM 和助教会根据结营要求,在结营期间对每位学员进行评估,判断是否满足结营条件。 针对一、二、三等奖的答辩,会邀请相应方向的研发导师进行评估。同时,这也是进入护航计划的绝佳机会 ,因为研发导师会有充足的时间来了解你~ 02 - 活动成果 数字上的成果 共有 19 位营员合入了超过 110 个快乐开源 PR。 社区新加入 11 名 contributor。 15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。@cocoshe 在开发过程中沉淀 1 篇《 PHI 算子库 kernel 注册全流程源码阅读》 。数字背后的情况 共有 19 位营员合入了超过 110 个快乐开源 PR。 完成 80+ 文档、15+ 新 IR 适配、15+ 静态图推全、 5+ cmake 治理、 5+ 复数算子等等题目,文档相关任务约占总体完成任务的一半左右.
社区新加入 11 名 contributor。 其中 7 名 contributor 只合入了一个文档相关 PR,活动后续缺少延续性。
15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。考核通过的营员中,有 10 名是原 PFCC 成员,纯新人通过率不高(31%),猜测是启航计划的活动缺乏引导。
03 - 新的尝试——Docs 偶像女团(精品小团) 是什么? 自愿参与文档开发、维护的社区化小团体,氛围活跃,开发意愿很积极。
由谁组成? 3 名大二女生(2 名启航计划学员 @Turingg @Kaedeharai ,1 名社区开发者@entired ),主要负责开发和维护。 1 名热心社区开发者(O 师傅 ,大三),负责日常手把手指导 3 名女生。 2 名飞桨内部同学,负责维持团体运转、答疑解惑。 为什么组成这个团体? 集训期间,2 位女生开发意愿比较强烈,但对具体做什么事情感到迷茫,因此孙师傅就把她们拉入(骗进 )了 docs 小组。
运转机制? 每周一次例会 ,由 3 名女生轮流主持,主要通过每周开发进度、布置新任务,所有人必须参会。每周一次会议纪要 ,由会议主持负责写会议内容和 Todo。如流群日常沟通交流 。
详细资料见:community/docs_group
',57)]))}const x=r(b,[["render",d]]);export{y as __pageData,x as default};
diff --git a/assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.js b/assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.js
new file mode 100644
index 0000000..38cbad3
--- /dev/null
+++ b/assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.js
@@ -0,0 +1 @@
+import{_ as e,c as r,k as a,o}from"./chunks/framework.D1-4jGi8.js";const n="/assets/groupchat.BetqHqwY.png",i="/assets/sun_host.BI4VmHmn.jpg",p="/assets/panelist.BaChAeGK.jpg",l="/assets/duyongkun.CQ_p59gp.jpg",d="/assets/zhaomiaomiao.dXx6awBl.jpg",s="/assets/tianshuishifan.DkDfK8bz.jpg",h="/assets/photo_all_together.FY83jsKs.jpg",c="/assets/award_ceremony.B4pBO3vf.jpg",g="/assets/meetup-1.C_uxuPD9.jpg",m="/assets/meetup-2.BYp7ViW8.jpg",y=JSON.parse('{"title":"PaddleOCR 算法模型挑战赛圆满落幕 & 杭州开发者线下 Meetup","description":"","frontmatter":{"title":"PaddleOCR 算法模型挑战赛圆满落幕 & 杭州开发者线下 Meetup","date":"2024-04-17T00:00:00.000Z","author":{"name":"尤师傅","github":"Harryoung"}},"headers":[],"relativePath":"posts/suzhou-kaifangyuanzi.md","filePath":"posts/suzhou-kaifangyuanzi.md"}'),u={name:"posts/suzhou-kaifangyuanzi.md"};function f(_,t,b,k,z,P){return o(),r("div",null,t[0]||(t[0]=[a('2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
大赛背景 开放原子开源基金会 是致力于推动全球开源事业 发展的非营利机构。其目标是搭建面向全球开源领域的前沿技术竞争、优秀人才选拔创新成果展示、商业转化引导和对接交流合作平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态繁荣 和可持续发展 提供动力。
百度飞桨开源社区与开放原子开源基金会的目标和愿景有高度的重合,因此自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了「飞桨 PaddlePaddle 开源贡献挑战赛」后(大赛回顾请看 这里 ),这次飞桨团队再度受邀,发布了「PaddleOCR 算法模型挑战赛」。PaddleOCR 算法模型挑战赛包括两道赛题,分别是 OCR 端到端识别任务与通用表格识别任务,要求选手在 PaddleOCR 的基线模型之上,尽可能提升模型精度,同时保证模型的推理速度与基线模型相当(降速不超过 10%)。
赛题有一定难度,但同时奖金也颇为丰厚🤩:
赛题一:OCR 端到端识别任务 一等奖:1 支队伍,每支队伍奖金 15 万元 二等奖:1 支队伍,每支队伍奖金 4 万元 三等奖:1 支队伍,每支队伍奖金 1 万元 开源贡献奖:7 支队伍,荣誉证书 赛题二:通用表格识别任务 一等奖:1 支队伍,每支队伍奖金 7 万元 二等奖:1 支队伍,每支队伍奖金 2 万元 三等奖:1 支队伍,每支队伍奖金 1 万元 开源贡献奖:7 支队伍,荣誉证书 赛程回顾 大赛从 1 月 15 日上线,启动报名。经过两个半月的紧张打榜后,于 3 月 31 日正式封榜。经过代码审查与线上初审后,最终在 4 月 12 日在美丽的苏州工业园区举行了决赛路演。
在打榜过程中,选手们在官方交流群中积极讨论,互帮互助,还不忘给官方提需求😅。
热心选手树先生,无私贡献了针对赛题二快速测试模型精度的脚本,得到了群友们的一致好评!开源精神拉满了!😉
赛题一 B 榜阶段,选手反馈能不能把报错信息展示为实际的报错信息,而不是简单的"没有生成 result.txt",这样才好定位并解决问题。飞桨运营同学快速评估并作出反应,认为这是一个很合理的需求,必须安排!奈何研发人手实在是紧张,直到午夜 1 点多,才完成改动并上线,保证了选手们顺利通关 B 榜。飞桨的研发小姐姐很拼有木有!✊
最终,大赛共报名 211 支团队,总人数达到空前的 671 人。 不过由于赛题本身还是有一定难度,最后 10 支队伍提交了作品,8 支队伍通过了代码审查,5 支队伍入围了决赛答辩。
飞桨官方的模型已经很强了,要在此基础上继续提分,还得保证推理速度不下降,真的很难 。👿 ———— 某个不愿透露姓名的选手
路演现场 孙师傅被我抓去现场当主持人,那叫一个专业!😄
我则有幸抱住军哥(@jzhang533 )和涛姐的大腿,当了一回评审。😎
选手们的答辩也十分精彩!复旦大学的杜永坤和北京交通大学的赵苗苗,分别针对赛题一和赛题二的模型架构进行了多方面的优化,可以说相当硬核。两位也分别摘得两个赛题的一等奖桂冠,实至名归!
令人印象深刻的是,赛题二的「识别先锋」队,是天水师范大学的吴衡老师带领三个本科生来参赛,还都是 AI Studio 的忠实用户🤗。尽管他们的显卡资源并不充裕(据说只有几张消费级显卡),但依然阻止不了他们的参赛热情。在他们的脸上,有一丝羞怯,也洋溢着激动和开心。我从他们身上看到了开源的魅力。
路演结束,大合照来一张。
获奖情况 经过紧张的路演和现场打分,最终决出了我们两个赛题的获奖队伍,如下表所示。
恭喜所有的获奖队伍!🎉🎉🎉你们都是开源创新之路上的佼佼者!🚀🚀🚀
PaddleOCR 开源共建研讨会 路演结束之后,距离午饭还有一段时间。我们便借着这个机会,邀请了参赛选手们举行了一场主题为「PaddleOCR 开源共建」的研讨会。
军哥表达了希望能够以 PaddleOCR 作为试点项目,启动飞桨开源项目社区化治理的想法。纵观国际上优秀的开源项目,都是由社区驱动的,而国内的很多开源项目,却往往只由某一家公司主导,这样其实不利于开源项目的可持续发展。大家纷纷表示了认同,但也提出了国内拿来主义盛行、开发者生存压力大、做开源只能用爱发电 等现实的问题。
虽然在国内开源项目的纯社区化治理道阻且艰,但飞桨团队还是要积极推动尝试。如果做成了,将是非常有意义的一件事。👊
大家讨论的太入神,都忘记拍照留念了 😭
杭州开发者线下 Meetu 剪影 在 4 月 14 日,我们也邀请了 14 位(其中🐦了一位)飞桨开源社区的开发者,在西湖虎跑胖的餐厅里面基交友~军哥给每人都准备了一份神秘礼品哦 🎁。
以下为痛失真名现场
',42)]))}const j=e(u,[["render",f]]);export{y as __pageData,j as default};
diff --git a/assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.lean.js b/assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.lean.js
new file mode 100644
index 0000000..38cbad3
--- /dev/null
+++ b/assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as r,k as a,o}from"./chunks/framework.D1-4jGi8.js";const n="/assets/groupchat.BetqHqwY.png",i="/assets/sun_host.BI4VmHmn.jpg",p="/assets/panelist.BaChAeGK.jpg",l="/assets/duyongkun.CQ_p59gp.jpg",d="/assets/zhaomiaomiao.dXx6awBl.jpg",s="/assets/tianshuishifan.DkDfK8bz.jpg",h="/assets/photo_all_together.FY83jsKs.jpg",c="/assets/award_ceremony.B4pBO3vf.jpg",g="/assets/meetup-1.C_uxuPD9.jpg",m="/assets/meetup-2.BYp7ViW8.jpg",y=JSON.parse('{"title":"PaddleOCR 算法模型挑战赛圆满落幕 & 杭州开发者线下 Meetup","description":"","frontmatter":{"title":"PaddleOCR 算法模型挑战赛圆满落幕 & 杭州开发者线下 Meetup","date":"2024-04-17T00:00:00.000Z","author":{"name":"尤师傅","github":"Harryoung"}},"headers":[],"relativePath":"posts/suzhou-kaifangyuanzi.md","filePath":"posts/suzhou-kaifangyuanzi.md"}'),u={name:"posts/suzhou-kaifangyuanzi.md"};function f(_,t,b,k,z,P){return o(),r("div",null,t[0]||(t[0]=[a('2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
大赛背景 开放原子开源基金会 是致力于推动全球开源事业 发展的非营利机构。其目标是搭建面向全球开源领域的前沿技术竞争、优秀人才选拔创新成果展示、商业转化引导和对接交流合作平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态繁荣 和可持续发展 提供动力。
百度飞桨开源社区与开放原子开源基金会的目标和愿景有高度的重合,因此自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了「飞桨 PaddlePaddle 开源贡献挑战赛」后(大赛回顾请看 这里 ),这次飞桨团队再度受邀,发布了「PaddleOCR 算法模型挑战赛」。PaddleOCR 算法模型挑战赛包括两道赛题,分别是 OCR 端到端识别任务与通用表格识别任务,要求选手在 PaddleOCR 的基线模型之上,尽可能提升模型精度,同时保证模型的推理速度与基线模型相当(降速不超过 10%)。
赛题有一定难度,但同时奖金也颇为丰厚🤩:
赛题一:OCR 端到端识别任务 一等奖:1 支队伍,每支队伍奖金 15 万元 二等奖:1 支队伍,每支队伍奖金 4 万元 三等奖:1 支队伍,每支队伍奖金 1 万元 开源贡献奖:7 支队伍,荣誉证书 赛题二:通用表格识别任务 一等奖:1 支队伍,每支队伍奖金 7 万元 二等奖:1 支队伍,每支队伍奖金 2 万元 三等奖:1 支队伍,每支队伍奖金 1 万元 开源贡献奖:7 支队伍,荣誉证书 赛程回顾 大赛从 1 月 15 日上线,启动报名。经过两个半月的紧张打榜后,于 3 月 31 日正式封榜。经过代码审查与线上初审后,最终在 4 月 12 日在美丽的苏州工业园区举行了决赛路演。
在打榜过程中,选手们在官方交流群中积极讨论,互帮互助,还不忘给官方提需求😅。
热心选手树先生,无私贡献了针对赛题二快速测试模型精度的脚本,得到了群友们的一致好评!开源精神拉满了!😉
赛题一 B 榜阶段,选手反馈能不能把报错信息展示为实际的报错信息,而不是简单的"没有生成 result.txt",这样才好定位并解决问题。飞桨运营同学快速评估并作出反应,认为这是一个很合理的需求,必须安排!奈何研发人手实在是紧张,直到午夜 1 点多,才完成改动并上线,保证了选手们顺利通关 B 榜。飞桨的研发小姐姐很拼有木有!✊
最终,大赛共报名 211 支团队,总人数达到空前的 671 人。 不过由于赛题本身还是有一定难度,最后 10 支队伍提交了作品,8 支队伍通过了代码审查,5 支队伍入围了决赛答辩。
飞桨官方的模型已经很强了,要在此基础上继续提分,还得保证推理速度不下降,真的很难 。👿 ———— 某个不愿透露姓名的选手
路演现场 孙师傅被我抓去现场当主持人,那叫一个专业!😄
我则有幸抱住军哥(@jzhang533 )和涛姐的大腿,当了一回评审。😎
选手们的答辩也十分精彩!复旦大学的杜永坤和北京交通大学的赵苗苗,分别针对赛题一和赛题二的模型架构进行了多方面的优化,可以说相当硬核。两位也分别摘得两个赛题的一等奖桂冠,实至名归!
令人印象深刻的是,赛题二的「识别先锋」队,是天水师范大学的吴衡老师带领三个本科生来参赛,还都是 AI Studio 的忠实用户🤗。尽管他们的显卡资源并不充裕(据说只有几张消费级显卡),但依然阻止不了他们的参赛热情。在他们的脸上,有一丝羞怯,也洋溢着激动和开心。我从他们身上看到了开源的魅力。
路演结束,大合照来一张。
获奖情况 经过紧张的路演和现场打分,最终决出了我们两个赛题的获奖队伍,如下表所示。
恭喜所有的获奖队伍!🎉🎉🎉你们都是开源创新之路上的佼佼者!🚀🚀🚀
PaddleOCR 开源共建研讨会 路演结束之后,距离午饭还有一段时间。我们便借着这个机会,邀请了参赛选手们举行了一场主题为「PaddleOCR 开源共建」的研讨会。
军哥表达了希望能够以 PaddleOCR 作为试点项目,启动飞桨开源项目社区化治理的想法。纵观国际上优秀的开源项目,都是由社区驱动的,而国内的很多开源项目,却往往只由某一家公司主导,这样其实不利于开源项目的可持续发展。大家纷纷表示了认同,但也提出了国内拿来主义盛行、开发者生存压力大、做开源只能用爱发电 等现实的问题。
虽然在国内开源项目的纯社区化治理道阻且艰,但飞桨团队还是要积极推动尝试。如果做成了,将是非常有意义的一件事。👊
大家讨论的太入神,都忘记拍照留念了 😭
杭州开发者线下 Meetu 剪影 在 4 月 14 日,我们也邀请了 14 位(其中🐦了一位)飞桨开源社区的开发者,在西湖虎跑胖的餐厅里面基交友~军哥给每人都准备了一份神秘礼品哦 🎁。
以下为痛失真名现场
',42)]))}const j=e(u,[["render",f]]);export{y as __pageData,j as default};
diff --git a/assets/posts_tao-story.md.BYILBNfV.js b/assets/posts_tao-story.md.BYILBNfV.js
new file mode 100644
index 0000000..ed3b3a9
--- /dev/null
+++ b/assets/posts_tao-story.md.BYILBNfV.js
@@ -0,0 +1 @@
+import{M as s,_ as p}from"./chunks/MessageBox.CshcSYCA.js";import{c as n,k as a,i as r,s as i,o as l,v as o,a as t}from"./chunks/framework.D1-4jGi8.js";const g="/assets/tao-01.BX6ijUAN.jpeg",f="/assets/tao-02.BUnT8yba.jpeg",c="/assets/tao-03.CuBFfcLy.jpeg",d="/assets/tao-04.V71B6Cdn.jpeg",u="/assets/tao-05.P2XMQFEu.jpeg",h="/assets/tao-06.CAhJU0ix.jpeg",m="/assets/tao-07.TWwMfHJ4.jpeg",b="/assets/tao-08.BKQPDZFR.jpeg",y="/assets/tao-09.DHjwEJQm.jpeg",P="/assets/tao-10.D1eqPGHg.jpeg",_="/assets/tao-11.Bt1BpI2J.jpeg",k="/assets/tao-12.CqVYWYYD.jpeg",q="/assets/tao-13.Bm_8HEqz.jpeg",j="/assets/tao-14.LNcnxsAv.jpeg",R=JSON.parse('{"title":"【开源江湖闲聊录】飞桨的见证者:涛姐的风风雨雨传奇之旅","description":"","frontmatter":{"title":"【开源江湖闲聊录】飞桨的见证者:涛姐的风风雨雨传奇之旅","date":"2024-2-6","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"骆涛(涛姐)","github":"luotao1"}]},"headers":[],"relativePath":"posts/tao-story.md","filePath":"posts/tao-story.md"}'),v={name:"posts/tao-story.md"},L=Object.assign(v,{setup(w){return(x,e)=>(l(),n("div",null,[e[1]||(e[1]=a('嘿,你知道飞桨社区里的 DDL 战士是谁么?嘿,你知道大家心中的 Paddle 社区妈妈是谁么?那你又知道谁是(仓库管理员 )飞桨仓库的实际控制人?谁是飞桨仓库的守护者?谁是飞桨从闭源到开源的见证者?是的,本期要采访的就是我们 Paddle 的资深研发女神——涛姐!
一、采访内容 涛姐,给大家介绍一下自己吧!
涛姐: 大家好,我是骆涛😊(@luotao1 )!现在是百度飞桨的资深研发工程师~同时,也是长期的开源贡献者!我博士毕业于中国科学技术大学高性能计算方向,师从陈国良院士,在深度学习领域有 20 多项专利。我参与训练/推理/高性能/工程效率等多个方向,目前致力于活跃飞桨框架开源社区。💗💗💗
涛姐是什么时候入职 Paddle 的?是以哪种方式呢?你觉得当时获得这份工作最大的竞争力是什么?
涛姐: 😲大概八年前,我入职了百度。当时我是校招进的 Paddle 团队,但我投的不是校招岗位,而是社招岗位。因为之前我给阿里投了校招,阿里也给我发了录取的邮件。但后来他们告诉我说是外包员工把邮件发错了,我也很无语。等我后面知道这个事情的时候,校招已经快结束了,那剩下的就只有社招这一个选择了。
当时 Paddle 还在百度深度学习研究院(IDL)下,我觉得肯定是进不了的。但因为没有找到合适的工作,也管不了这么多就投了,结果第二天就收到 offer。
我觉得最大的竞争力可能是在英特尔做过 Caffe 上的一些优化,所以能力还是比较匹配的。当时,我是带着我的 PPT 去面试(在英特尔有一个比较好的习惯,就是会整理之前所做的工作,因为外企都非常注重工作内容的呈现,所以当时这些 PPT 都是英特尔期间整理的已有素材)。但对面试官来说,拿着 PPT 去讲这些内容来面试,还是比较新颖的。
还有一个 tip 是:我的简历上没有提及性别,也没有附上照片,所以面试官可能一开始以为我是男生,否则我觉得可能一面就进不了。然后面试的时候,运气比较好,代码题目都是之前复习过的,整体的表现也比较好。此外,还有一点,是我听说面试官在前面的面试里要求比较高,面了好多人都没有满意的。面了 30 多个后,再不招一个,那 Head Count 可能就没了,而我当时确实也投的比较晚。所以在各种机缘巧合下就录取了。
总的来说,最大的竞争力我觉得第一是博士的身份;第二是已经在英特尔实习,有一些经验;第三是自己的工作有一个比较好的展现,呈现的形式还是很有吸引力的。
可以给我们谈谈 Paddle 的发展史么?听说 Paddle 最初是是闭源的,为什么后来选择开源?
涛姐: 最初,Paddle 确实是闭源的。但是由于 IDL 研究院非常前沿,当时也请了吴恩达过来,而且还有很多研究员都是在美国。本身国外开源的氛围又很浓厚,就有了开源的想法💡。当时主流的开源深度学习框架有 Caffe、TensorFlow,至于 PyTorch 都还没有发展起来。如果 Paddle 不开源,实际上是没办法和国外主流的深度学习框架竞争。
此外,当时公司内部还有很多同类产品,比如 Lego(乐高)、Anakin 等等。这些产品当时都服务于公司内部的业务线,而 Paddle 在当时是一个比较新的东西,实际在公司内业务线上的使用非常有限。后来还制定了 1 到 2 年的计划,就是要把公司内所有产品线都用 Paddle 跑起来。如果 Paddle 不开源,其实在公司内是死路一条。正是因为 Paddle 选择了开源这一路线,之后吞并了 Lego 和 Anakin,逐渐壮大,我认为这是开源最大的一个魅力。同时开源也是一个战略性的决策,如果 Paddle 不开源,在公司内都无法生存,更别提在国际上立足。
编者注✍️: 军哥曾经是 Lego 的初创研发成员之一哦~
18 年 Paddle 团建 18 年 10 月发布 1.0 版本 18 年 Paddle 团建 给我们讲讲你的求学之路吧!
涛姐: 我本科、硕士和博士都是在中科大,博二时去了中科院北京软件所学习,可以说是一个联合培养计划吧!之后又去了英特尔实习,这些大致就是我的学习经历~一路走来,真的太不容易了,特别是读博期间非常受挫,心理压力巨大!读完博士的时候感觉整个人脱胎换骨了。
涛姐大一中科大西洋乐团新年音乐会 涛姐大一冬天 你刚刚谈到读博于你而言简直脱胎换骨,当时为什么选择读博?读博对于你来说获得了什么?
涛姐: 当时选择读博,是因为本科毕业的时候没有考虑过就业。而且虽然当时成绩比较好,但觉得自己除了成绩好,其他什么都不会,就想还是得深造(是真实的情况,不是凡尔赛 )。此外,我们学校当时并没有提供保研这个选项,只能考研或者保送直博升学,所以我最后选择了直博。
当时我是可以自己选择直博校外还是本校,可能班主任也比较喜欢我,他就强力推荐我留在学校读博。其实我当时也想去国防科大呀、复旦呀,但是都被班主任无情拒绝了。他给我分析了一些利弊,后面给我找的导师也非常好,是一位院士。这也为我后面能去软件所或者英特尔这些大的平台提供了一个非常有力的保障。所以,我在这里也非常感谢我的班主任,他真的是一个非常好的老师!
读博给我带来了很多收获!对于我的职业生涯来说,如果我没有读博士,我肯定进不了百度或者英特尔,这一点毫无疑问。对学业方面来说,读博极大锻炼了我自己,也包括提高了心理承受能力、抗压能力。还有一点就是读博扩大了我的学术圈子,如果我没有继续深造,我将无法接触到如此多优秀的同学和高 level 的大佬。此外,博士身份在之后的许多场景中都还是非常有用的!
编者注✍️:Family who konws🐮!涛姐说自己大学不是特别用功,没有搞绩点,但是成绩就是 top 10!是谁羡慕了我不说~
涛姐15年博士毕业 读博有遇到什么困难吗?博二时去到了北京软件所进一步学习培养,当时为什么去争取这个机会?
涛姐: 刚开始读博的时候非常迷茫 。因为本科的时候就没有进实验室,当时年纪小还没有这个意识,也没有现在这样环境氛围。而且本科期间成绩也还行,所以那时除了读书就是看韩剧、台剧、综艺、小说。像之前说的那样,本科毕业的时候就处于“除了成绩好,其他什么都不会”的状态。但会考试,不代表在计算机方面的能力强,因为考一个好成绩很容易,我这样说有点凡尔赛,但确实就是这样的。
编者注✍️:涛姐特别喜欢在学校图书馆看小说,像是沧月、新武侠、古典武侠、卫斯理系列·····
但当读博进了实验室之后,就会发现差距很大。因为读博需要做研究发论文,这和本科期间单纯的学习考试是存在很大的 gap。而且导师又坚信学生应该自我驱动型的(因为老板是院士,他觉得招进这么好一个学生,应该能够自己解决自己的问题),我完全不知道要做什么,代码也调不出来,就一下子陷入一个很迷茫的状态,和之前上课的阶段完全不一样。所以那个阶段其实是蛮难熬的,包括学校里很多老师也不会带你做实验,不会像咱们护航计划 的研发同学那样手把手带。代码都要由自己调试,而遇到问题时也不知道该向谁求助,这种情况让人会感到非常痛苦。
所以当时就争取了去北京的联合培养计划。去了北京之后,可能因为实验室风格和之前不一样,发现确实还是要有年轻老师或项目带着会好一点~
去英特尔实习是在什么时候呢?你在那段时间收获了什么?你觉得它与百度有什么不一样?
涛姐: 嗯~我在英特尔实习是在博士的最后两年(博士第一年在学校念书,接下来的两年中科院软件所联合培养,第四年和第五年在英特尔实习),这两年的经历对我的个人成长产生了巨大的影响。
收获的是真实的研究院实习经历(当时比较好的研究院就是 MSRA 和英特尔中国研究院这两个)。能明显感觉到企业和学校的风格是完全不一样的,接触的东西也很前沿,组里氛围也很好。而且研究院的指导和学校相比,整体的科研 sense 会拔高很多。比如当时在英特尔期间,我接触了第一代深度学习框架 Caffe,并在其中进行了一些工作。尽管我没有做很多东西,但当时写的论文(博士学位论文)因为抓住到 Caffe 这个热点,而且英特尔做的也比较好,因此论文引用量到现在已经超过 7000 次,相比起来其他很多人的论文都没人看。
而且这段研究院经历,也帮助我获得了百度深度学习研究院(IDL)的 offer。这个 offer 在当时是挺难拿的,竞争很激烈,我自己也没想到能拿到。这也让我意识到平台的重要性。
还有一点是在英特尔实习也开拓了我的眼界。像隔壁组是在给 Spark repo 做贡献,当时负责带队的老师后来成了英特尔研究院的院长,不过我的指导老师后来也成了院长,他们都是非常厉害的人。此外,英特尔老师在就业指导上面,会看的比较远(相对于学校老师)。当时我有两个 offer:一个是 IBM 的,一个是百度。IBM 给的还比百度多,但英特尔的老师就建议我去百度锻炼和提升一下自己。
英特尔和百度不一样的地方就和网上说的一样:英特尔比较轻松,准时六点就能下班。一周实习工作其实我两到三天就能完成,然后剩下一半的时间都是在写我的论文。但对百度来说,即使是百度深度学习研究院(IDL),工作也会更偏向工程和产品落地,所以很忙。
哦!再补充一下:就是,英特尔里面的女性研究员真的非常多。和百度不同,百度这边男性工程师会占大半部分!
涛姐注✍️:在英特尔实习那两年是我最开心的时候。在外面租着房子,自己又有钱下班又早。虽然都是月光,但真的很开心😄!一下班,就可以自己追韩剧,然后做做瑜伽,自己美美容,买买衣服,逛逛淘宝~
涛姐有没有一直在坚持的兴趣爱好?大学时的爱好有哪些呢?
涛姐: 以前的空闲时间我喜欢练瑜伽,但现在所有的空闲时间都在带娃!瑜伽是在大学时期就开始坚持的,当时是有参加一些社团,但并没有特别深入。后来在英特尔实习有钱了,就开始外面报班,参加了一些瑜伽课。感觉练瑜伽相对容易,而且让人心情平和!
但现在我已经没有坚持了,主要原因是我几乎没有自己的闲暇时间。不加班的时候,下班后我得等娃睡觉了之后才能刷手机。而有时候还需要开会,更没有自己的时间。因为互联网工作不是传统的上下班制度,而是根据绩效和产出来衡量的。现在每天的生活节奏通常是:起床、上班、下班、带娃、睡觉,这样一个不断循环的过程。
编者注✍️:涛姐也有和老公一起练双人瑜伽哦,大家可以去涛姐朋友圈看👀照片,哈哈哈~
涛姐练瑜伽 学生时代你有参加过开源吗?向哪些项目/组织提交过 PR 呢?
涛姐: 学生时代只向 Caffe 提交过 PR。那个时候是在英特尔实习,然后实习的题目也和我的论文比较相关:需要做一个 CPU 多线程加速的优化。所以就给 Caffe 提了一个 PR。但那个 PR 没有被合入,因为有一些工程上的问题会影响 Caffe 的整体。提 PR 和发论文不太一样,发论文只要性能数据达标了就可以,但是 PR 合入到主干中还要考虑到很多其他的问题。
作为过来人,涛姐在职场上有什么建议给大家?
涛姐: 在学生时代,你就要有自己的职业生涯规划。从学生到职场会有一个心理转变的过程。特别像职场,有时候会比较复杂。经常会出现:人家晋升你没有晋升或者人家年终奖比你高(反正公司内是不允许大家讨论薪酬的)。但是谁晋升谁没晋升这些大家都知道,所以这时候你就要有:“他强任他强,清风拂山岗”的心态,你一定不要纠结于经理保谁没保谁。当你做到大家公认比较好的时候,你肯定能升职。
然后职场里还有一个很重要的点就是:你要坚持!大家有时候 2 到 3 年会想跳槽或者每 5 年想跳槽,这个时候得看你自己的想法。我自己在百度呆了八年,没有跳槽,很大一个原因是我现在做的事情,像是开源这一类的是我比较喜欢的,我对这类事比较有热情,现在对自己的工作状态也比较满意。还有我们家那位就是跳来跳去的,之后他就劝我:还是别跳!
编者注✍️:涛姐是校园恋爱哦~老公是以前一个实验室的!🤭
涛姐参加活动时照片 在恋爱上有什么建议给大家?
涛姐: 学校里还是相对比较单纯一点,所以如果可以,最好在学校解决恋爱问题。工作之后,你也没有心情去解决个人问题。事情很多(你进入职场之后,你马上面临的是买房子、经济压力、赡养老人等等事情,你要变成一个成年人负担起一个家庭的责任。所以大家趁年轻多多拼搏一下,你要是有一些经济基础的话,那相对会好一点!),职场的压力是远比学校的压力更大。而且你一年一年拖下去之后,优秀的师兄师姐们的数量是会减少的!所以要稍稍早一点!然后一定要找长得好看的,这样生出来的娃才好看!我当时的要求就是:学历要跟我同等,长得帅,然后还得是党员。其他我没有要求,再挑就挑不出来了。找对象,只能挑几个最重要的点,你要搞清楚自己最想要的是什么?你不能啥都要,那是不可能的!
编者注✍️:涛姐人送外号「百度红娘」~
涛姐 7 个月的孕妇照 作为女性研发,你在工作上有没有遇到什么难题?与男性研发相比,你觉得有什么区别?
涛姐: 我觉得和男生没什么区别。现在 Paddle 里的一些女性研发都非常厉害的,比如和我同一期加入 Paddle 的青青(@qingqing01 )、益群(@Xreki )一起工作已经八年了,以及时间更久的志华姐、渝娟姐(虽然离职了),包括新进来的雅美(@liym27 )、张婷(@zhangting2020 ),她们都是非常出色!你能看到的、存活到现在的 Paddle 研发都非常厉害!(因为不厉害的早就被淘汰了 )而且包括我们的两个副总裁也都是女生,能坐到这么高的位置,很大程度能说明能力很强!
所以,女孩子们一定要有自信,并且多努力学习!不要觉得是男生才能主导,要相信自己也能做成!同时,内心强大一点,知道自己的定位,要明白自己擅长什么,在工作中去充分的扬长避短!
可能会有一个比较大的区别就是生娃。生育是女性需要面临的一个无法避免的问题,会对事业产生不同程度的影响,所以女性可能要在生娃之前多多奋斗几年。不过这个问题对于还是学生的女生来说,考虑的还有点早啦~
另外,女生学计算机的话,热爱还是很重要的。只有热爱它,才能坚持下来~在我们的开源社区中,像孙师傅带的三个「Docs 偶像女团 」的女生,我觉得是能从她们那儿看到我以前的影子!虽然她们做的事情并不难,但展现出的热爱,是非常可贵的。每次这个精品小团开会,我看她们跟孙师傅交流的时候,都是闪闪发光的。
编者注✍️:精品小团体是飞桨启航计划的一次尝试,是招募有意愿的营员参与到某⼀具体⽅向的⼩团体。未来会推广该模式,所以大家多多参与哦!
15 年 Team buiding 二、涛姐有话说 ',10)),r(s,null,{default:i(()=>[r(p,{name:"涛姐",github:"luotao1"},{default:i(()=>e[0]||(e[0]=[o(" Paddle 这个平台其实很不错。说实话,在国内 Paddle 已经站在了顶尖的位置。在我的学生时代,国内是没有这样丰富的开源机会,当时开源活动只有像 Caffe 和 Intel 在办,但这些都是国外的。你要考虑很多:如何参加活动?活动符不符合你的能力?改的代码在不在点上?提了 PR 之后,别人会不会像我们 Paddle 现在这样,每个 PR 给你快速的安排研发 review?而且我们还会催大家,也给大家发礼品。这些在国外的开源开源社区几乎都是没有的。 "),t("p",null,[o("在当时,想要合入一个 PR 可难了。如果没有认识的人,PR 合进去的难度非常高,因为代码改不到他们的点上,而且也不了解他们的活动和进展,也没有类似于我们现在的 "),t("strong",null,[t("a",{href:"https://github.com/PaddlePaddle/community/tree/master/pfcc",target:"_blank",rel:"noreferrer"},"PFCC")]),o(" 例会和社区做分享。")],-1),t("p",null,"我现在觉得,当时能靠着没合进去的 PR 进入了百度,现在大家也能做的更好。所以鼓励大家多多参加开源活动~不仅获得好的实习项目,还可以拓宽眼界!",-1),t("p",null,"此外,如果一些同学没有什么项目,又想找到好的实习机会,其实现在可以在参与一些开源社区的任务。因为找到第一份工作其实是最难的,你只有找到第一份工作,后面慢慢的才会越来越顺利。但这确实很难!因为名额很珍贵,所以面试考核就是一种很公式、很官方的流程。",-1),t("p",null,[o("如果靠着自己在学校期间做的项目,面试阶段是讲不清楚的。即使讲清楚,面试官也会一带而过。因为这些都是网上查不到的,所以面试最终只能考代码。但像提 PR 或者发论文,面试官都能一眼看明白你做的工作,并且在网上都能查到。所以如果像参加"),t("strong",null,"护航计划"),o(",那可能就是立马拿到工作机会,我们有三个做过护航计划的同学都是立刻得到工作机会,面试流程只是走一下。")],-1),t("p",null,"最后送大家一句话:世界会更加广阔,前途更加无限。",-1)])),_:1})]),_:1}),e[2]||(e[2]=a('编者注✍️:涛姐在上面提到没合入的 PR 是关于在 Caffe 上做 CPU 多线程优化~
三、快乐晒娃时刻 涛姐童年照 涛姐两岁半的可爱小宝贝
涛姐全家福照片 最后再来一张宝贝的可爱九宫格😊~
涛姐宝贝九宫格 编者注✍️:感谢郑必城(@Zheng-Bicheng )、散步(@sanbuphy )、张一乔(@Liyulingyue )、川川(@gouzil )四位师傅在引言为涛姐想的 title~顺序对应哦!
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',12))]))}});export{R as __pageData,L as default};
diff --git a/assets/posts_tao-story.md.BYILBNfV.lean.js b/assets/posts_tao-story.md.BYILBNfV.lean.js
new file mode 100644
index 0000000..ed3b3a9
--- /dev/null
+++ b/assets/posts_tao-story.md.BYILBNfV.lean.js
@@ -0,0 +1 @@
+import{M as s,_ as p}from"./chunks/MessageBox.CshcSYCA.js";import{c as n,k as a,i as r,s as i,o as l,v as o,a as t}from"./chunks/framework.D1-4jGi8.js";const g="/assets/tao-01.BX6ijUAN.jpeg",f="/assets/tao-02.BUnT8yba.jpeg",c="/assets/tao-03.CuBFfcLy.jpeg",d="/assets/tao-04.V71B6Cdn.jpeg",u="/assets/tao-05.P2XMQFEu.jpeg",h="/assets/tao-06.CAhJU0ix.jpeg",m="/assets/tao-07.TWwMfHJ4.jpeg",b="/assets/tao-08.BKQPDZFR.jpeg",y="/assets/tao-09.DHjwEJQm.jpeg",P="/assets/tao-10.D1eqPGHg.jpeg",_="/assets/tao-11.Bt1BpI2J.jpeg",k="/assets/tao-12.CqVYWYYD.jpeg",q="/assets/tao-13.Bm_8HEqz.jpeg",j="/assets/tao-14.LNcnxsAv.jpeg",R=JSON.parse('{"title":"【开源江湖闲聊录】飞桨的见证者:涛姐的风风雨雨传奇之旅","description":"","frontmatter":{"title":"【开源江湖闲聊录】飞桨的见证者:涛姐的风风雨雨传奇之旅","date":"2024-2-6","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"骆涛(涛姐)","github":"luotao1"}]},"headers":[],"relativePath":"posts/tao-story.md","filePath":"posts/tao-story.md"}'),v={name:"posts/tao-story.md"},L=Object.assign(v,{setup(w){return(x,e)=>(l(),n("div",null,[e[1]||(e[1]=a('嘿,你知道飞桨社区里的 DDL 战士是谁么?嘿,你知道大家心中的 Paddle 社区妈妈是谁么?那你又知道谁是(仓库管理员 )飞桨仓库的实际控制人?谁是飞桨仓库的守护者?谁是飞桨从闭源到开源的见证者?是的,本期要采访的就是我们 Paddle 的资深研发女神——涛姐!
一、采访内容 涛姐,给大家介绍一下自己吧!
涛姐: 大家好,我是骆涛😊(@luotao1 )!现在是百度飞桨的资深研发工程师~同时,也是长期的开源贡献者!我博士毕业于中国科学技术大学高性能计算方向,师从陈国良院士,在深度学习领域有 20 多项专利。我参与训练/推理/高性能/工程效率等多个方向,目前致力于活跃飞桨框架开源社区。💗💗💗
涛姐是什么时候入职 Paddle 的?是以哪种方式呢?你觉得当时获得这份工作最大的竞争力是什么?
涛姐: 😲大概八年前,我入职了百度。当时我是校招进的 Paddle 团队,但我投的不是校招岗位,而是社招岗位。因为之前我给阿里投了校招,阿里也给我发了录取的邮件。但后来他们告诉我说是外包员工把邮件发错了,我也很无语。等我后面知道这个事情的时候,校招已经快结束了,那剩下的就只有社招这一个选择了。
当时 Paddle 还在百度深度学习研究院(IDL)下,我觉得肯定是进不了的。但因为没有找到合适的工作,也管不了这么多就投了,结果第二天就收到 offer。
我觉得最大的竞争力可能是在英特尔做过 Caffe 上的一些优化,所以能力还是比较匹配的。当时,我是带着我的 PPT 去面试(在英特尔有一个比较好的习惯,就是会整理之前所做的工作,因为外企都非常注重工作内容的呈现,所以当时这些 PPT 都是英特尔期间整理的已有素材)。但对面试官来说,拿着 PPT 去讲这些内容来面试,还是比较新颖的。
还有一个 tip 是:我的简历上没有提及性别,也没有附上照片,所以面试官可能一开始以为我是男生,否则我觉得可能一面就进不了。然后面试的时候,运气比较好,代码题目都是之前复习过的,整体的表现也比较好。此外,还有一点,是我听说面试官在前面的面试里要求比较高,面了好多人都没有满意的。面了 30 多个后,再不招一个,那 Head Count 可能就没了,而我当时确实也投的比较晚。所以在各种机缘巧合下就录取了。
总的来说,最大的竞争力我觉得第一是博士的身份;第二是已经在英特尔实习,有一些经验;第三是自己的工作有一个比较好的展现,呈现的形式还是很有吸引力的。
可以给我们谈谈 Paddle 的发展史么?听说 Paddle 最初是是闭源的,为什么后来选择开源?
涛姐: 最初,Paddle 确实是闭源的。但是由于 IDL 研究院非常前沿,当时也请了吴恩达过来,而且还有很多研究员都是在美国。本身国外开源的氛围又很浓厚,就有了开源的想法💡。当时主流的开源深度学习框架有 Caffe、TensorFlow,至于 PyTorch 都还没有发展起来。如果 Paddle 不开源,实际上是没办法和国外主流的深度学习框架竞争。
此外,当时公司内部还有很多同类产品,比如 Lego(乐高)、Anakin 等等。这些产品当时都服务于公司内部的业务线,而 Paddle 在当时是一个比较新的东西,实际在公司内业务线上的使用非常有限。后来还制定了 1 到 2 年的计划,就是要把公司内所有产品线都用 Paddle 跑起来。如果 Paddle 不开源,其实在公司内是死路一条。正是因为 Paddle 选择了开源这一路线,之后吞并了 Lego 和 Anakin,逐渐壮大,我认为这是开源最大的一个魅力。同时开源也是一个战略性的决策,如果 Paddle 不开源,在公司内都无法生存,更别提在国际上立足。
编者注✍️: 军哥曾经是 Lego 的初创研发成员之一哦~
18 年 Paddle 团建 18 年 10 月发布 1.0 版本 18 年 Paddle 团建 给我们讲讲你的求学之路吧!
涛姐: 我本科、硕士和博士都是在中科大,博二时去了中科院北京软件所学习,可以说是一个联合培养计划吧!之后又去了英特尔实习,这些大致就是我的学习经历~一路走来,真的太不容易了,特别是读博期间非常受挫,心理压力巨大!读完博士的时候感觉整个人脱胎换骨了。
涛姐大一中科大西洋乐团新年音乐会 涛姐大一冬天 你刚刚谈到读博于你而言简直脱胎换骨,当时为什么选择读博?读博对于你来说获得了什么?
涛姐: 当时选择读博,是因为本科毕业的时候没有考虑过就业。而且虽然当时成绩比较好,但觉得自己除了成绩好,其他什么都不会,就想还是得深造(是真实的情况,不是凡尔赛 )。此外,我们学校当时并没有提供保研这个选项,只能考研或者保送直博升学,所以我最后选择了直博。
当时我是可以自己选择直博校外还是本校,可能班主任也比较喜欢我,他就强力推荐我留在学校读博。其实我当时也想去国防科大呀、复旦呀,但是都被班主任无情拒绝了。他给我分析了一些利弊,后面给我找的导师也非常好,是一位院士。这也为我后面能去软件所或者英特尔这些大的平台提供了一个非常有力的保障。所以,我在这里也非常感谢我的班主任,他真的是一个非常好的老师!
读博给我带来了很多收获!对于我的职业生涯来说,如果我没有读博士,我肯定进不了百度或者英特尔,这一点毫无疑问。对学业方面来说,读博极大锻炼了我自己,也包括提高了心理承受能力、抗压能力。还有一点就是读博扩大了我的学术圈子,如果我没有继续深造,我将无法接触到如此多优秀的同学和高 level 的大佬。此外,博士身份在之后的许多场景中都还是非常有用的!
编者注✍️:Family who konws🐮!涛姐说自己大学不是特别用功,没有搞绩点,但是成绩就是 top 10!是谁羡慕了我不说~
涛姐15年博士毕业 读博有遇到什么困难吗?博二时去到了北京软件所进一步学习培养,当时为什么去争取这个机会?
涛姐: 刚开始读博的时候非常迷茫 。因为本科的时候就没有进实验室,当时年纪小还没有这个意识,也没有现在这样环境氛围。而且本科期间成绩也还行,所以那时除了读书就是看韩剧、台剧、综艺、小说。像之前说的那样,本科毕业的时候就处于“除了成绩好,其他什么都不会”的状态。但会考试,不代表在计算机方面的能力强,因为考一个好成绩很容易,我这样说有点凡尔赛,但确实就是这样的。
编者注✍️:涛姐特别喜欢在学校图书馆看小说,像是沧月、新武侠、古典武侠、卫斯理系列·····
但当读博进了实验室之后,就会发现差距很大。因为读博需要做研究发论文,这和本科期间单纯的学习考试是存在很大的 gap。而且导师又坚信学生应该自我驱动型的(因为老板是院士,他觉得招进这么好一个学生,应该能够自己解决自己的问题),我完全不知道要做什么,代码也调不出来,就一下子陷入一个很迷茫的状态,和之前上课的阶段完全不一样。所以那个阶段其实是蛮难熬的,包括学校里很多老师也不会带你做实验,不会像咱们护航计划 的研发同学那样手把手带。代码都要由自己调试,而遇到问题时也不知道该向谁求助,这种情况让人会感到非常痛苦。
所以当时就争取了去北京的联合培养计划。去了北京之后,可能因为实验室风格和之前不一样,发现确实还是要有年轻老师或项目带着会好一点~
去英特尔实习是在什么时候呢?你在那段时间收获了什么?你觉得它与百度有什么不一样?
涛姐: 嗯~我在英特尔实习是在博士的最后两年(博士第一年在学校念书,接下来的两年中科院软件所联合培养,第四年和第五年在英特尔实习),这两年的经历对我的个人成长产生了巨大的影响。
收获的是真实的研究院实习经历(当时比较好的研究院就是 MSRA 和英特尔中国研究院这两个)。能明显感觉到企业和学校的风格是完全不一样的,接触的东西也很前沿,组里氛围也很好。而且研究院的指导和学校相比,整体的科研 sense 会拔高很多。比如当时在英特尔期间,我接触了第一代深度学习框架 Caffe,并在其中进行了一些工作。尽管我没有做很多东西,但当时写的论文(博士学位论文)因为抓住到 Caffe 这个热点,而且英特尔做的也比较好,因此论文引用量到现在已经超过 7000 次,相比起来其他很多人的论文都没人看。
而且这段研究院经历,也帮助我获得了百度深度学习研究院(IDL)的 offer。这个 offer 在当时是挺难拿的,竞争很激烈,我自己也没想到能拿到。这也让我意识到平台的重要性。
还有一点是在英特尔实习也开拓了我的眼界。像隔壁组是在给 Spark repo 做贡献,当时负责带队的老师后来成了英特尔研究院的院长,不过我的指导老师后来也成了院长,他们都是非常厉害的人。此外,英特尔老师在就业指导上面,会看的比较远(相对于学校老师)。当时我有两个 offer:一个是 IBM 的,一个是百度。IBM 给的还比百度多,但英特尔的老师就建议我去百度锻炼和提升一下自己。
英特尔和百度不一样的地方就和网上说的一样:英特尔比较轻松,准时六点就能下班。一周实习工作其实我两到三天就能完成,然后剩下一半的时间都是在写我的论文。但对百度来说,即使是百度深度学习研究院(IDL),工作也会更偏向工程和产品落地,所以很忙。
哦!再补充一下:就是,英特尔里面的女性研究员真的非常多。和百度不同,百度这边男性工程师会占大半部分!
涛姐注✍️:在英特尔实习那两年是我最开心的时候。在外面租着房子,自己又有钱下班又早。虽然都是月光,但真的很开心😄!一下班,就可以自己追韩剧,然后做做瑜伽,自己美美容,买买衣服,逛逛淘宝~
涛姐有没有一直在坚持的兴趣爱好?大学时的爱好有哪些呢?
涛姐: 以前的空闲时间我喜欢练瑜伽,但现在所有的空闲时间都在带娃!瑜伽是在大学时期就开始坚持的,当时是有参加一些社团,但并没有特别深入。后来在英特尔实习有钱了,就开始外面报班,参加了一些瑜伽课。感觉练瑜伽相对容易,而且让人心情平和!
但现在我已经没有坚持了,主要原因是我几乎没有自己的闲暇时间。不加班的时候,下班后我得等娃睡觉了之后才能刷手机。而有时候还需要开会,更没有自己的时间。因为互联网工作不是传统的上下班制度,而是根据绩效和产出来衡量的。现在每天的生活节奏通常是:起床、上班、下班、带娃、睡觉,这样一个不断循环的过程。
编者注✍️:涛姐也有和老公一起练双人瑜伽哦,大家可以去涛姐朋友圈看👀照片,哈哈哈~
涛姐练瑜伽 学生时代你有参加过开源吗?向哪些项目/组织提交过 PR 呢?
涛姐: 学生时代只向 Caffe 提交过 PR。那个时候是在英特尔实习,然后实习的题目也和我的论文比较相关:需要做一个 CPU 多线程加速的优化。所以就给 Caffe 提了一个 PR。但那个 PR 没有被合入,因为有一些工程上的问题会影响 Caffe 的整体。提 PR 和发论文不太一样,发论文只要性能数据达标了就可以,但是 PR 合入到主干中还要考虑到很多其他的问题。
作为过来人,涛姐在职场上有什么建议给大家?
涛姐: 在学生时代,你就要有自己的职业生涯规划。从学生到职场会有一个心理转变的过程。特别像职场,有时候会比较复杂。经常会出现:人家晋升你没有晋升或者人家年终奖比你高(反正公司内是不允许大家讨论薪酬的)。但是谁晋升谁没晋升这些大家都知道,所以这时候你就要有:“他强任他强,清风拂山岗”的心态,你一定不要纠结于经理保谁没保谁。当你做到大家公认比较好的时候,你肯定能升职。
然后职场里还有一个很重要的点就是:你要坚持!大家有时候 2 到 3 年会想跳槽或者每 5 年想跳槽,这个时候得看你自己的想法。我自己在百度呆了八年,没有跳槽,很大一个原因是我现在做的事情,像是开源这一类的是我比较喜欢的,我对这类事比较有热情,现在对自己的工作状态也比较满意。还有我们家那位就是跳来跳去的,之后他就劝我:还是别跳!
编者注✍️:涛姐是校园恋爱哦~老公是以前一个实验室的!🤭
涛姐参加活动时照片 在恋爱上有什么建议给大家?
涛姐: 学校里还是相对比较单纯一点,所以如果可以,最好在学校解决恋爱问题。工作之后,你也没有心情去解决个人问题。事情很多(你进入职场之后,你马上面临的是买房子、经济压力、赡养老人等等事情,你要变成一个成年人负担起一个家庭的责任。所以大家趁年轻多多拼搏一下,你要是有一些经济基础的话,那相对会好一点!),职场的压力是远比学校的压力更大。而且你一年一年拖下去之后,优秀的师兄师姐们的数量是会减少的!所以要稍稍早一点!然后一定要找长得好看的,这样生出来的娃才好看!我当时的要求就是:学历要跟我同等,长得帅,然后还得是党员。其他我没有要求,再挑就挑不出来了。找对象,只能挑几个最重要的点,你要搞清楚自己最想要的是什么?你不能啥都要,那是不可能的!
编者注✍️:涛姐人送外号「百度红娘」~
涛姐 7 个月的孕妇照 作为女性研发,你在工作上有没有遇到什么难题?与男性研发相比,你觉得有什么区别?
涛姐: 我觉得和男生没什么区别。现在 Paddle 里的一些女性研发都非常厉害的,比如和我同一期加入 Paddle 的青青(@qingqing01 )、益群(@Xreki )一起工作已经八年了,以及时间更久的志华姐、渝娟姐(虽然离职了),包括新进来的雅美(@liym27 )、张婷(@zhangting2020 ),她们都是非常出色!你能看到的、存活到现在的 Paddle 研发都非常厉害!(因为不厉害的早就被淘汰了 )而且包括我们的两个副总裁也都是女生,能坐到这么高的位置,很大程度能说明能力很强!
所以,女孩子们一定要有自信,并且多努力学习!不要觉得是男生才能主导,要相信自己也能做成!同时,内心强大一点,知道自己的定位,要明白自己擅长什么,在工作中去充分的扬长避短!
可能会有一个比较大的区别就是生娃。生育是女性需要面临的一个无法避免的问题,会对事业产生不同程度的影响,所以女性可能要在生娃之前多多奋斗几年。不过这个问题对于还是学生的女生来说,考虑的还有点早啦~
另外,女生学计算机的话,热爱还是很重要的。只有热爱它,才能坚持下来~在我们的开源社区中,像孙师傅带的三个「Docs 偶像女团 」的女生,我觉得是能从她们那儿看到我以前的影子!虽然她们做的事情并不难,但展现出的热爱,是非常可贵的。每次这个精品小团开会,我看她们跟孙师傅交流的时候,都是闪闪发光的。
编者注✍️:精品小团体是飞桨启航计划的一次尝试,是招募有意愿的营员参与到某⼀具体⽅向的⼩团体。未来会推广该模式,所以大家多多参与哦!
15 年 Team buiding 二、涛姐有话说 ',10)),r(s,null,{default:i(()=>[r(p,{name:"涛姐",github:"luotao1"},{default:i(()=>e[0]||(e[0]=[o(" Paddle 这个平台其实很不错。说实话,在国内 Paddle 已经站在了顶尖的位置。在我的学生时代,国内是没有这样丰富的开源机会,当时开源活动只有像 Caffe 和 Intel 在办,但这些都是国外的。你要考虑很多:如何参加活动?活动符不符合你的能力?改的代码在不在点上?提了 PR 之后,别人会不会像我们 Paddle 现在这样,每个 PR 给你快速的安排研发 review?而且我们还会催大家,也给大家发礼品。这些在国外的开源开源社区几乎都是没有的。 "),t("p",null,[o("在当时,想要合入一个 PR 可难了。如果没有认识的人,PR 合进去的难度非常高,因为代码改不到他们的点上,而且也不了解他们的活动和进展,也没有类似于我们现在的 "),t("strong",null,[t("a",{href:"https://github.com/PaddlePaddle/community/tree/master/pfcc",target:"_blank",rel:"noreferrer"},"PFCC")]),o(" 例会和社区做分享。")],-1),t("p",null,"我现在觉得,当时能靠着没合进去的 PR 进入了百度,现在大家也能做的更好。所以鼓励大家多多参加开源活动~不仅获得好的实习项目,还可以拓宽眼界!",-1),t("p",null,"此外,如果一些同学没有什么项目,又想找到好的实习机会,其实现在可以在参与一些开源社区的任务。因为找到第一份工作其实是最难的,你只有找到第一份工作,后面慢慢的才会越来越顺利。但这确实很难!因为名额很珍贵,所以面试考核就是一种很公式、很官方的流程。",-1),t("p",null,[o("如果靠着自己在学校期间做的项目,面试阶段是讲不清楚的。即使讲清楚,面试官也会一带而过。因为这些都是网上查不到的,所以面试最终只能考代码。但像提 PR 或者发论文,面试官都能一眼看明白你做的工作,并且在网上都能查到。所以如果像参加"),t("strong",null,"护航计划"),o(",那可能就是立马拿到工作机会,我们有三个做过护航计划的同学都是立刻得到工作机会,面试流程只是走一下。")],-1),t("p",null,"最后送大家一句话:世界会更加广阔,前途更加无限。",-1)])),_:1})]),_:1}),e[2]||(e[2]=a('编者注✍️:涛姐在上面提到没合入的 PR 是关于在 Caffe 上做 CPU 多线程优化~
三、快乐晒娃时刻 涛姐童年照 涛姐两岁半的可爱小宝贝
涛姐全家福照片 最后再来一张宝贝的可爱九宫格😊~
涛姐宝贝九宫格 编者注✍️:感谢郑必城(@Zheng-Bicheng )、散步(@sanbuphy )、张一乔(@Liyulingyue )、川川(@gouzil )四位师傅在引言为涛姐想的 title~顺序对应哦!
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',12))]))}});export{R as __pageData,L as default};
diff --git a/assets/posts_type-hints-project.md.Db0ywpg3.js b/assets/posts_type-hints-project.md.Db0ywpg3.js
new file mode 100644
index 0000000..2aed8a5
--- /dev/null
+++ b/assets/posts_type-hints-project.md.Db0ywpg3.js
@@ -0,0 +1,37 @@
+import{c as e,k as s,o as a}from"./chunks/framework.D1-4jGi8.js";const t="/assets/typing_ide.Cam_rouQ.png",n="/assets/tensor_pyi.CiRhhzaO.png",l="/assets/hierarchy.FIAm2o23.png",p="/assets/typing_module.D14kdyIz.png",r="/assets/typing_ci.C7y7taHy.png",h="/assets/ci_con.C8s_udTf.png",o="/assets/ci_shift.B3L1KMlB.png",d="/assets/typing_doc.CCLKyBLL.png",c="/assets/tensor_pyi_stub.Cx_PkEfX.png",k="/assets/typing_participants.C01E7pZu.png",b=JSON.parse('{"title":"项目收官 | 为 Paddle 框架 API 添加类型提示(Type Hints)","description":"","frontmatter":{"title":"项目收官 | 为 Paddle 框架 API 添加类型提示(Type Hints)","date":"2024-09-01T00:00:00.000Z","author":{"name":"顺师傅","github":"megemini"}},"headers":[],"relativePath":"posts/type-hints-project.md","filePath":"posts/type-hints-project.md"}'),g={name:"posts/type-hints-project.md"},m=Object.assign(g,{setup(y){return(u,i)=>(a(),e("div",null,i[0]||(i[0]=[s(`【为 Paddle 框架 API 添加类型提示(Type Hints)】的项目总结。
34 位开发者参与,16 项主任务,337 个子任务,2191 个 API,340+ 个 PR,自 2024 年 4 月起,至 8 月 30 日主体项目完结,近 5 个月 SAN 值归零的夜晚,Type Hints 总归算是有始有终、小有成果,这里就简单回顾与总结一下。
项目介绍 此次项目是第六期飞桨黑客松引入 Fundable Projects 中的一个:为 Paddle 框架 API 添加类型提示(Type Hints) 。
Fundable Projects 本身定位具有一定的挑战性,有兴趣的同学可以移步 【Hackathon 6th】Fundable Projects
Python 在 3.5 版本通过 PEP 484 – Type Hints 正式规范了「类型提示」功能。之后随着相关规范和工具的逐渐完善,类型提示逐渐成为 Python 代码中的标准实践,如今较新的主流库也基本都提供了类型提示。由于 Python 本身类型高度动态化,类型提示的存在可以帮助开发者更快地了解代码的类型信息,提高代码的可读性和可维护性,结合工具还可以提供静态类型检查,在开发阶段就能发现一些潜在的类型错误。Paddle 框架由于历史原因尚未提供类型提示,本项目希望引入尽可能多的对 Paddle 有利的类型提示。
以一段简单的 Python 代码为例:
python def greeting (name):
+ return 'Hello' + name
添加上类型提示之后:
python def greeting (name: str ) -> str :
+ return 'Hello' + name
正如前文所讲,类型提示功能有诸多好处,如:
帮助开发者了解代码类型信息 提高代码的可读性和可维护性 结合工具在开发阶段发现错误 而最直观的反映就是,我们在诸如 VSCode 等 IDE 中,能够获取到接口的类型提示,并进行连续推导了:
IDE 中使用类型提示 项目的 RFC 【Hackathon 6th】为 Paddle 框架 API 添加类型提示(Type Hints) 经过大家讨论之后,将此次项目的目标最终标定为:
正确完成 Paddle 公开 API 的类型标注,但不声明 Paddle 类型标注的完备性。 这里需要单独说明一下「标注的完备性」。类型标注是个循序渐进的过程,Paddle 是个相对较大且复杂的项目,除了公开 API 之外,还存在较多非公开 API 与 C++ 接口,此次项目无法保证完成以上所有接口的类型标注,故此,不做 Paddle 类型标注的完备性说明。或者,换个说法,如果熟悉 Python 的类型标注和相关工具的使用,那么,此次项目不保证完成 Paddle 这个项目本身通过类型工具的检查,但是,需要保证外部项目使用 Paddle 时,能够正确识别、提示与检查 Paddle 所提供的公开 API。
项目中的任务,以任务模块的角度,分解为:
_typing
模块的引入CI 流水线的建设 文档建设 公开 API 的类型标注 具体的执行过程,通过 Tracking Issue 跟踪项目进展,分解为:
第一阶段的前置任务 第二阶段的代码标注主体任务 第三阶段的补充测试 第四阶段的收尾与总结 项目实施 方案总览 Python 官方提出了三种支持类型提示的 包分发方式 :
inline
,行内stubs
,文件third party
,第三方结合 Paddle 项目本身的结构,这里采用 Inline type annotation + Stub files in package 的方案实施类型提示,具体为:
Python 接口,使用 inline
方式标注 非 Python 接口,提供 stub
标注文件,并打包在 Paddle 中 所谓 inline
,是将类型直接标注在源文件的接口定义中,如:
python def log (x, name = None ):
+ ...
直接修改接口代码为:
python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ ...
而有些接口,Paddle 是通过 pybind 或 patch 的方式提供,则需要增加对应的 stub
文件。最基本的,如 Tensor
类,需要提供 tensor.pyi
文件:
生成 tensor.pyi 文件 stub
文件的写法与 Python 代码的写法相同,只是不需要写具体的实现部分。
另外,由于 Python 的类型标注特性一直在不断完善的过程之中,初期的一些特性很难支撑 Paddle 如此体量的项目,因此,我们提出项目实施过程中的一项基本原则:
在不违背 Paddle 最低支持版本 3.8 语法的基础上,尽可能使用新版本 typing 特性
所谓「不违背 Paddle 最低支持版本 3.8 语法」,一个典型的例子是,Python 3.8 版本不能在类型别名中使用 |
代替 UnionType,如:
python from typing_extensions import TypeAlias
+from typing import Union
+t: TypeAlias = Union[ str , int ]
在 Python 3.8 的语法中无法转写为:
python from typing_extensions import TypeAlias
+t: TypeAlias = str | int
但,我们希望「尽可能使用新版本 typing 特性」,因此,通过 PEP 563 – Postponed Evaluation of Annotations ,我们可以在函数签名中使用 Python 3.10 的语法特性,如:
python from __future__ import annotations
+def foo (bar: str | int ) -> None :
+ ...
以上,为本项目实施的总体方案与基本原则,接下来,按照前文所讲的「以任务模块的角度」,简单拆分讲解一下。
_typing
模块的引入 Paddle 中会用到很多公用的标注类型,比如数据布局 NCHW
、NHWC
等。_typing
模块的引入,一方面可以统一规范开发者的标注行为,减少维护成本,另一方面,也可以减少各类书写错误。可以将 _typing
模块的地位与 Python 中的 int
、str
等基础类型等同,由此,整个 Paddle 项目的标注体系可以分为:
三个部分。
类型层级结构 具体到 _typing
模块,其本身作为 Paddle 的一个私有模块放置于 python/paddle
目录下:
_typing 模块 其内部包括基础公共类型(basic.py
)、数据布局(layout.py
)等。
回顾项目整体实施过程中 _typing
模块的建设与使用,最大的收益是规范了一些公共类型的标注行为。比如,NCHW
、NHWC
等这类数据布局,很容易出现书写错误,也确实发现过 Paddle 源码中错误的类型标注问题。再如,Paddle 中的设备类型 CPUPlace
、CUDAPlace
等,与 Place
,实际上没有继承关系,这就需要在众多使用 Place
的地方引入 PlaceLike
类型。
但是,_typing
建设的过程中,也逐渐暴露出一些问题,最主要的有两个:
所谓「粒度控制」是指,很难用统一的标注来划分哪些类型需要归类入 _typing
,哪些则直接使用 Python 的基础类型进行组合。比如,_typing
中的 IntSequence = Sequence[int]
,很多地方都会用到,但,具体到每个接口,也许直接标注 Sequence[int]
会更简单。
对于 _typing
模块缺少单元测试也是一个比较大的遗憾。这就不得不说明一下我们是如何保证项目类型标注的正确性这个问题了。
最理想的方式当然是对每个接口做类型检测的单元测试,但是,由于项目本身的人力与时间投入不允许我们这么做,我们选择通过对接口中的「示例代码」做类型检查这种方式。
python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ r """
+ Calculates the natural log of the given input Tensor, element-wise.
+
+ .. math::
+
+ Out = \\ln(x)
+
+ Args:
+ x (Tensor): Input Tensor. Must be one of the following types: int32, int64, float16, bfloat16, float32, float64, complex64, complex128.
+ name (str|None): The default value is None. Normally there is no need for user to set this property. For more information, please refer to :ref:\`api_guide_Name\`
+
+ Returns:
+ Tensor: The natural log of the input Tensor computed element-wise.
+
+ Examples:
+
+ .. code-block:: python
+
+ >>> import paddle
+
+ >>> x = [[2, 3, 4], [7, 8, 9]]
+ >>> x = paddle.to_tensor(x, dtype='float32')
+ >>> print(paddle.log(x))
+ Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
+ [[0.69314718, 1.09861231, 1.38629436],
+ [1.94591010, 2.07944155, 2.19722462]])
+ """
也就是上面这段代码中的「Examples」部分。
由于 Paddle 之前对接口的建设都要求书写「示例代码」,其中包括了接口基本的使用方式,那么,我们就可以通过对其进行类型检查,从而保证 Paddle 整体接口的基础类型检查的正确性了。
不过,这样会牵扯出另一个问题:接口依赖。
如果仔细观察上述的示例代码,会发现,其中同时应用到了 paddle.to_tensor
与 paddle.log
两个接口。那么,如果需要保证 paddle.log
这段示例代码检查正确,就需要先把 paddle.to_tensor
这个接口标注正确。类似的依赖问题层出不穷,由于我们使用的工具 mypy
会将没有标注的接口统一识别为 Any
,这就导致,如果 review 不仔细就会放过一些实际上错误的标注问题。为了解决这个问题,一方面,我们在整理项目标注任务的时候,根据优先级进行排序,使相对基础或者简单的接口尽早完成;另一方面,我们单独创建了一个 PR 用于对所有接口做全量检查的监测,也就是说,即使有上述所谓的漏网之鱼,一旦依赖的接口进行了类型标注,不再是 Any
,那么问题则可以在这个 PR 中及时被发现并修正过来。
以上,便是 _typing
模块的引入以及一系列需要在项目主体标注前需要完成的任务。
CI 流水线的建设 前面提到,我们使用 mypy
来保证类型标注的准确性,这就涉及到 CI 流水线的建设问题。
CI 流水线 上图简单描述了 CI 流水线的整体流程:
这里不再详述赘述 CI 流水线的建设过程,主要有两处考量与大家分享:
所谓「性能问题」,如果使用过 mypy
的同学可能深有体会,这东西太慢了。我们在项目中同样遇到了性能问题,Paddle 中 2000+ 个接口,检查一遍需要 2 个多小时。因此,我们使用进程池的方式对接口做并行检查,也将整体检查时间缩减到 10 分钟左右(虽然有同学反馈,内存占用可能有几十个 GB,whatever,反正是在 CI 上做检查,而且也没有崩,就当是啥都没发生吧……)。
并行处理 另外「流程问题」也是需要重点关注的。正如前文所讲,我们需要对接口做全量检查,但是,具体到每个接口的修改,则只能针对当前接口进行检查,否则问题无法收敛。因此,在整体类型标注完成之前,CI 的行为:
默认:不检查类型 [Typing]
的 PR 做增量检查;也就是只检查 PR 中修改的接口[Typing all]
的 PR 做全量检查;也就是检查所有接口由此,可以在容忍一定错误的状态下,逐步推进整体项目的进展。
截止到本文发表为止,CI 已经切换到常规行为:
默认:PR 做增量检查;也就是只检查 PR 中修改的接口 [Typing]
的 PR 做全量检查;也就是检查所有接口这里还需要单独说明一下,实际上,我们更推荐项目做「全量检查」作为默认行为,但是,由于全量检查对于资源的消耗实在太大,这里才退而求其次使用增量检查。
CI 流水线切换 文档建设 文档建设是另一个需要单独关注的问题。Python 的类型标注虽然仍然是 Python 语言的一部分,但是,对于大部分没有接触过的同学来说,这东西就像是 Python 和 C++ 或者 Rust 的结合体。而且,类型标注本身不仅仅需要对标注熟悉,还需要明确各个接口的实际运行过程才能完成一个正确的标注过程。代码的运行流程需要同学在标注的过程中层层分析,而文档建设需要做的,相当于一个引子,引导大家进入到 Paddle 类型标注的最佳实践中来。
这里涉及到几个问题:
What
:Paddle 的类型标注关注什么How
:Paddle 的类型标注怎么做首先 What
,也就是明确任务的具体范围,如,公开 API ,函数的 signature,文档等。其次 How
,也就是 Paddle 做类型标注的最佳实践。比如「使用 PEP 563,延迟类型注解计算」。(这里有更详细的文档 《Python 类型提示标注规范》 )
文档的建设也不是一蹴而就的,由于类型标注这个主题本身就非常庞大,我们的做法是,先在「Tracking Issue」中添加一个「Q&A」章节,让大家有个基础的入手指南,后续再逐步完善,并最终完成文档,形成 Paddle 项目本身的最佳实践。
类型标注文档 公开 API 的类型标注 这个任务是整个项目的主体任务,可以根据参与者的范围不同划分为:
内部,实现辅助的 stub
文件 开放,实现其他公开接口的类型标注,也就是 Inline type annotation
;占主要工作部分。 我们在开展主要的类型标注任务之前,首先在内部完成了必要的 stub
文件的生成与编写任务。
如前文所述,Paddle 很多接口是通过 pybind 或 patch 的方式对外开放的,这里最基础,也是最主要的是 Tensor
的实现。我们没有借鉴 PyTorch
等框架的做法使用「静态解析」的方式生成 tensor.pyi
文件,而是「动态解析」:
静态解析 vs 动态解析 如上图所示,「静态解析」是指,通过解析 yaml
的配置项,结合模板与硬编码的方式生成 stub
文件。这样做的好处是,不会产生运行时依赖,也就是说,可以在项目编译的任意阶段导入。但是,这样的做法极其繁琐,非常容易出错,而且后续维护也会异常困难。由此,我们采用「动态解析」的方式,即,在项目编译的完成阶段,直接 import paddle
,再把相应的接口填入模板中一并打包进行分发。Python 目前最常采用,也是 Paddle 主要的分发方式是 wheel
,也就是将编译与打包分离,这也为「动态解析」提供了可行性。
_typing
模块导入、CI 流水线建设、文档建设、stub
文件的生成,以上诸多任务的目的,便是推动「公开接口的类型标注」这个主体任务的进行。
借助飞桨的完善的开源社区建设,6 月初,我们开放了 [Type Hints] 为公开 API 标注类型提示信息 这个主体标注任务。任务划分为三批,共 337 个子任务,前后有 30 多位开发者参与,完成了 Paddle 的 2000 多个 API 的类型标注,PR 数量有 300 多个。
说明:这里 API 的数量以函数或方法为计数单位,如,一个类有两个公开接口,则计数为 2 。
项目的整体工程量,不应该只以数量的多少进行计算,因为,这个任务不仅仅是数量多,难度也不是修改一两个字符这么简单。
这里就不得不再提一下,很多人认为 Python 太简单没什么技术难度这个认知偏见。Python 从编程语言的学习曲线上来说,确实适合新手入门,但是,写代码或者编程,实际上是个工程问题,而不是简单的代码堆砌。在整个类型标注的任务过程中,我们发现太多的,不仅仅是编码习惯上的问题,更是工程问题,从基础上影响了 Paddle 这个项目的构建。比如上面提到的 Place
与 CPUPlace
的继承关系问题;再如,项目中用到了诸多的枚举方式,而没有使用 enum
;各个接口所使用的参数类型、范围不一致问题更是比比皆是。
说回项目的难度问题,由于 Python 语言的动态性,标注的过程中虽然有文档可以参考,但仍然需要人工逐个进行代码的跟踪,才能对具体的类型较为有把握。一旦接口的调用涉及到私有 API ,跟踪起来则尤为困难。这也是为何到目前为止,仍然没有一款工具,可以很好的辅助人工进行类型标注这个问题的根本原因。就算是目前大火的大模型也无法取代人工的标注工作,修改大模型的错误,与人工直接标注的工作量基本相当。
我们这里以 10
分钟一个接口(修改 + review)的工作量进行计算:
10 min/task * 2191 task / 60 min / 8 hour ≈ 46 day
也就是大约两个月的工作量,可以大体上估算所需投入的成本。
开源社区的介入,一方面缓解了项目的人力问题,使项目的完成成为可能;另一方面,也让更多的开发者接触到了类型标注这个特性。未来,Paddle 应该会将类型标注作为标准的编码行为,早点入坑也不至于开发的时候再抓瞎。
开源贡献者 项目结语 将近 5 个月的时间,痛苦、喜悦、烦恼或者豁然开朗都已成过去,有始有终,项目总算有个交代,正如《黑神话:悟空》,完成比完美更重要。
如果说未来有什么计划,完善私有接口的标注、完善测试用例、完善文档与最佳实践,等等……
要做的可以有很多,而对于还没有接触过类型标注的同学,或者还在犹豫是否使用类型标注这个特性,今天突然想到一个不是很雅的比喻:
上完厕所,走出十丈远,突然意识到自己没有擦屁股……你要如何做呢?
最后,感谢飞桨各位大佬的支持,感谢开源社区的贡献!!!
导师:
开发者:
参考链接 ',116)])))}});export{b as __pageData,m as default};
diff --git a/assets/posts_type-hints-project.md.Db0ywpg3.lean.js b/assets/posts_type-hints-project.md.Db0ywpg3.lean.js
new file mode 100644
index 0000000..2aed8a5
--- /dev/null
+++ b/assets/posts_type-hints-project.md.Db0ywpg3.lean.js
@@ -0,0 +1,37 @@
+import{c as e,k as s,o as a}from"./chunks/framework.D1-4jGi8.js";const t="/assets/typing_ide.Cam_rouQ.png",n="/assets/tensor_pyi.CiRhhzaO.png",l="/assets/hierarchy.FIAm2o23.png",p="/assets/typing_module.D14kdyIz.png",r="/assets/typing_ci.C7y7taHy.png",h="/assets/ci_con.C8s_udTf.png",o="/assets/ci_shift.B3L1KMlB.png",d="/assets/typing_doc.CCLKyBLL.png",c="/assets/tensor_pyi_stub.Cx_PkEfX.png",k="/assets/typing_participants.C01E7pZu.png",b=JSON.parse('{"title":"项目收官 | 为 Paddle 框架 API 添加类型提示(Type Hints)","description":"","frontmatter":{"title":"项目收官 | 为 Paddle 框架 API 添加类型提示(Type Hints)","date":"2024-09-01T00:00:00.000Z","author":{"name":"顺师傅","github":"megemini"}},"headers":[],"relativePath":"posts/type-hints-project.md","filePath":"posts/type-hints-project.md"}'),g={name:"posts/type-hints-project.md"},m=Object.assign(g,{setup(y){return(u,i)=>(a(),e("div",null,i[0]||(i[0]=[s(`【为 Paddle 框架 API 添加类型提示(Type Hints)】的项目总结。
34 位开发者参与,16 项主任务,337 个子任务,2191 个 API,340+ 个 PR,自 2024 年 4 月起,至 8 月 30 日主体项目完结,近 5 个月 SAN 值归零的夜晚,Type Hints 总归算是有始有终、小有成果,这里就简单回顾与总结一下。
项目介绍 此次项目是第六期飞桨黑客松引入 Fundable Projects 中的一个:为 Paddle 框架 API 添加类型提示(Type Hints) 。
Fundable Projects 本身定位具有一定的挑战性,有兴趣的同学可以移步 【Hackathon 6th】Fundable Projects
Python 在 3.5 版本通过 PEP 484 – Type Hints 正式规范了「类型提示」功能。之后随着相关规范和工具的逐渐完善,类型提示逐渐成为 Python 代码中的标准实践,如今较新的主流库也基本都提供了类型提示。由于 Python 本身类型高度动态化,类型提示的存在可以帮助开发者更快地了解代码的类型信息,提高代码的可读性和可维护性,结合工具还可以提供静态类型检查,在开发阶段就能发现一些潜在的类型错误。Paddle 框架由于历史原因尚未提供类型提示,本项目希望引入尽可能多的对 Paddle 有利的类型提示。
以一段简单的 Python 代码为例:
python def greeting (name):
+ return 'Hello' + name
添加上类型提示之后:
python def greeting (name: str ) -> str :
+ return 'Hello' + name
正如前文所讲,类型提示功能有诸多好处,如:
帮助开发者了解代码类型信息 提高代码的可读性和可维护性 结合工具在开发阶段发现错误 而最直观的反映就是,我们在诸如 VSCode 等 IDE 中,能够获取到接口的类型提示,并进行连续推导了:
IDE 中使用类型提示 项目的 RFC 【Hackathon 6th】为 Paddle 框架 API 添加类型提示(Type Hints) 经过大家讨论之后,将此次项目的目标最终标定为:
正确完成 Paddle 公开 API 的类型标注,但不声明 Paddle 类型标注的完备性。 这里需要单独说明一下「标注的完备性」。类型标注是个循序渐进的过程,Paddle 是个相对较大且复杂的项目,除了公开 API 之外,还存在较多非公开 API 与 C++ 接口,此次项目无法保证完成以上所有接口的类型标注,故此,不做 Paddle 类型标注的完备性说明。或者,换个说法,如果熟悉 Python 的类型标注和相关工具的使用,那么,此次项目不保证完成 Paddle 这个项目本身通过类型工具的检查,但是,需要保证外部项目使用 Paddle 时,能够正确识别、提示与检查 Paddle 所提供的公开 API。
项目中的任务,以任务模块的角度,分解为:
_typing
模块的引入CI 流水线的建设 文档建设 公开 API 的类型标注 具体的执行过程,通过 Tracking Issue 跟踪项目进展,分解为:
第一阶段的前置任务 第二阶段的代码标注主体任务 第三阶段的补充测试 第四阶段的收尾与总结 项目实施 方案总览 Python 官方提出了三种支持类型提示的 包分发方式 :
inline
,行内stubs
,文件third party
,第三方结合 Paddle 项目本身的结构,这里采用 Inline type annotation + Stub files in package 的方案实施类型提示,具体为:
Python 接口,使用 inline
方式标注 非 Python 接口,提供 stub
标注文件,并打包在 Paddle 中 所谓 inline
,是将类型直接标注在源文件的接口定义中,如:
python def log (x, name = None ):
+ ...
直接修改接口代码为:
python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ ...
而有些接口,Paddle 是通过 pybind 或 patch 的方式提供,则需要增加对应的 stub
文件。最基本的,如 Tensor
类,需要提供 tensor.pyi
文件:
生成 tensor.pyi 文件 stub
文件的写法与 Python 代码的写法相同,只是不需要写具体的实现部分。
另外,由于 Python 的类型标注特性一直在不断完善的过程之中,初期的一些特性很难支撑 Paddle 如此体量的项目,因此,我们提出项目实施过程中的一项基本原则:
在不违背 Paddle 最低支持版本 3.8 语法的基础上,尽可能使用新版本 typing 特性
所谓「不违背 Paddle 最低支持版本 3.8 语法」,一个典型的例子是,Python 3.8 版本不能在类型别名中使用 |
代替 UnionType,如:
python from typing_extensions import TypeAlias
+from typing import Union
+t: TypeAlias = Union[ str , int ]
在 Python 3.8 的语法中无法转写为:
python from typing_extensions import TypeAlias
+t: TypeAlias = str | int
但,我们希望「尽可能使用新版本 typing 特性」,因此,通过 PEP 563 – Postponed Evaluation of Annotations ,我们可以在函数签名中使用 Python 3.10 的语法特性,如:
python from __future__ import annotations
+def foo (bar: str | int ) -> None :
+ ...
以上,为本项目实施的总体方案与基本原则,接下来,按照前文所讲的「以任务模块的角度」,简单拆分讲解一下。
_typing
模块的引入 Paddle 中会用到很多公用的标注类型,比如数据布局 NCHW
、NHWC
等。_typing
模块的引入,一方面可以统一规范开发者的标注行为,减少维护成本,另一方面,也可以减少各类书写错误。可以将 _typing
模块的地位与 Python 中的 int
、str
等基础类型等同,由此,整个 Paddle 项目的标注体系可以分为:
三个部分。
类型层级结构 具体到 _typing
模块,其本身作为 Paddle 的一个私有模块放置于 python/paddle
目录下:
_typing 模块 其内部包括基础公共类型(basic.py
)、数据布局(layout.py
)等。
回顾项目整体实施过程中 _typing
模块的建设与使用,最大的收益是规范了一些公共类型的标注行为。比如,NCHW
、NHWC
等这类数据布局,很容易出现书写错误,也确实发现过 Paddle 源码中错误的类型标注问题。再如,Paddle 中的设备类型 CPUPlace
、CUDAPlace
等,与 Place
,实际上没有继承关系,这就需要在众多使用 Place
的地方引入 PlaceLike
类型。
但是,_typing
建设的过程中,也逐渐暴露出一些问题,最主要的有两个:
所谓「粒度控制」是指,很难用统一的标注来划分哪些类型需要归类入 _typing
,哪些则直接使用 Python 的基础类型进行组合。比如,_typing
中的 IntSequence = Sequence[int]
,很多地方都会用到,但,具体到每个接口,也许直接标注 Sequence[int]
会更简单。
对于 _typing
模块缺少单元测试也是一个比较大的遗憾。这就不得不说明一下我们是如何保证项目类型标注的正确性这个问题了。
最理想的方式当然是对每个接口做类型检测的单元测试,但是,由于项目本身的人力与时间投入不允许我们这么做,我们选择通过对接口中的「示例代码」做类型检查这种方式。
python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ r """
+ Calculates the natural log of the given input Tensor, element-wise.
+
+ .. math::
+
+ Out = \\ln(x)
+
+ Args:
+ x (Tensor): Input Tensor. Must be one of the following types: int32, int64, float16, bfloat16, float32, float64, complex64, complex128.
+ name (str|None): The default value is None. Normally there is no need for user to set this property. For more information, please refer to :ref:\`api_guide_Name\`
+
+ Returns:
+ Tensor: The natural log of the input Tensor computed element-wise.
+
+ Examples:
+
+ .. code-block:: python
+
+ >>> import paddle
+
+ >>> x = [[2, 3, 4], [7, 8, 9]]
+ >>> x = paddle.to_tensor(x, dtype='float32')
+ >>> print(paddle.log(x))
+ Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
+ [[0.69314718, 1.09861231, 1.38629436],
+ [1.94591010, 2.07944155, 2.19722462]])
+ """
也就是上面这段代码中的「Examples」部分。
由于 Paddle 之前对接口的建设都要求书写「示例代码」,其中包括了接口基本的使用方式,那么,我们就可以通过对其进行类型检查,从而保证 Paddle 整体接口的基础类型检查的正确性了。
不过,这样会牵扯出另一个问题:接口依赖。
如果仔细观察上述的示例代码,会发现,其中同时应用到了 paddle.to_tensor
与 paddle.log
两个接口。那么,如果需要保证 paddle.log
这段示例代码检查正确,就需要先把 paddle.to_tensor
这个接口标注正确。类似的依赖问题层出不穷,由于我们使用的工具 mypy
会将没有标注的接口统一识别为 Any
,这就导致,如果 review 不仔细就会放过一些实际上错误的标注问题。为了解决这个问题,一方面,我们在整理项目标注任务的时候,根据优先级进行排序,使相对基础或者简单的接口尽早完成;另一方面,我们单独创建了一个 PR 用于对所有接口做全量检查的监测,也就是说,即使有上述所谓的漏网之鱼,一旦依赖的接口进行了类型标注,不再是 Any
,那么问题则可以在这个 PR 中及时被发现并修正过来。
以上,便是 _typing
模块的引入以及一系列需要在项目主体标注前需要完成的任务。
CI 流水线的建设 前面提到,我们使用 mypy
来保证类型标注的准确性,这就涉及到 CI 流水线的建设问题。
CI 流水线 上图简单描述了 CI 流水线的整体流程:
这里不再详述赘述 CI 流水线的建设过程,主要有两处考量与大家分享:
所谓「性能问题」,如果使用过 mypy
的同学可能深有体会,这东西太慢了。我们在项目中同样遇到了性能问题,Paddle 中 2000+ 个接口,检查一遍需要 2 个多小时。因此,我们使用进程池的方式对接口做并行检查,也将整体检查时间缩减到 10 分钟左右(虽然有同学反馈,内存占用可能有几十个 GB,whatever,反正是在 CI 上做检查,而且也没有崩,就当是啥都没发生吧……)。
并行处理 另外「流程问题」也是需要重点关注的。正如前文所讲,我们需要对接口做全量检查,但是,具体到每个接口的修改,则只能针对当前接口进行检查,否则问题无法收敛。因此,在整体类型标注完成之前,CI 的行为:
默认:不检查类型 [Typing]
的 PR 做增量检查;也就是只检查 PR 中修改的接口[Typing all]
的 PR 做全量检查;也就是检查所有接口由此,可以在容忍一定错误的状态下,逐步推进整体项目的进展。
截止到本文发表为止,CI 已经切换到常规行为:
默认:PR 做增量检查;也就是只检查 PR 中修改的接口 [Typing]
的 PR 做全量检查;也就是检查所有接口这里还需要单独说明一下,实际上,我们更推荐项目做「全量检查」作为默认行为,但是,由于全量检查对于资源的消耗实在太大,这里才退而求其次使用增量检查。
CI 流水线切换 文档建设 文档建设是另一个需要单独关注的问题。Python 的类型标注虽然仍然是 Python 语言的一部分,但是,对于大部分没有接触过的同学来说,这东西就像是 Python 和 C++ 或者 Rust 的结合体。而且,类型标注本身不仅仅需要对标注熟悉,还需要明确各个接口的实际运行过程才能完成一个正确的标注过程。代码的运行流程需要同学在标注的过程中层层分析,而文档建设需要做的,相当于一个引子,引导大家进入到 Paddle 类型标注的最佳实践中来。
这里涉及到几个问题:
What
:Paddle 的类型标注关注什么How
:Paddle 的类型标注怎么做首先 What
,也就是明确任务的具体范围,如,公开 API ,函数的 signature,文档等。其次 How
,也就是 Paddle 做类型标注的最佳实践。比如「使用 PEP 563,延迟类型注解计算」。(这里有更详细的文档 《Python 类型提示标注规范》 )
文档的建设也不是一蹴而就的,由于类型标注这个主题本身就非常庞大,我们的做法是,先在「Tracking Issue」中添加一个「Q&A」章节,让大家有个基础的入手指南,后续再逐步完善,并最终完成文档,形成 Paddle 项目本身的最佳实践。
类型标注文档 公开 API 的类型标注 这个任务是整个项目的主体任务,可以根据参与者的范围不同划分为:
内部,实现辅助的 stub
文件 开放,实现其他公开接口的类型标注,也就是 Inline type annotation
;占主要工作部分。 我们在开展主要的类型标注任务之前,首先在内部完成了必要的 stub
文件的生成与编写任务。
如前文所述,Paddle 很多接口是通过 pybind 或 patch 的方式对外开放的,这里最基础,也是最主要的是 Tensor
的实现。我们没有借鉴 PyTorch
等框架的做法使用「静态解析」的方式生成 tensor.pyi
文件,而是「动态解析」:
静态解析 vs 动态解析 如上图所示,「静态解析」是指,通过解析 yaml
的配置项,结合模板与硬编码的方式生成 stub
文件。这样做的好处是,不会产生运行时依赖,也就是说,可以在项目编译的任意阶段导入。但是,这样的做法极其繁琐,非常容易出错,而且后续维护也会异常困难。由此,我们采用「动态解析」的方式,即,在项目编译的完成阶段,直接 import paddle
,再把相应的接口填入模板中一并打包进行分发。Python 目前最常采用,也是 Paddle 主要的分发方式是 wheel
,也就是将编译与打包分离,这也为「动态解析」提供了可行性。
_typing
模块导入、CI 流水线建设、文档建设、stub
文件的生成,以上诸多任务的目的,便是推动「公开接口的类型标注」这个主体任务的进行。
借助飞桨的完善的开源社区建设,6 月初,我们开放了 [Type Hints] 为公开 API 标注类型提示信息 这个主体标注任务。任务划分为三批,共 337 个子任务,前后有 30 多位开发者参与,完成了 Paddle 的 2000 多个 API 的类型标注,PR 数量有 300 多个。
说明:这里 API 的数量以函数或方法为计数单位,如,一个类有两个公开接口,则计数为 2 。
项目的整体工程量,不应该只以数量的多少进行计算,因为,这个任务不仅仅是数量多,难度也不是修改一两个字符这么简单。
这里就不得不再提一下,很多人认为 Python 太简单没什么技术难度这个认知偏见。Python 从编程语言的学习曲线上来说,确实适合新手入门,但是,写代码或者编程,实际上是个工程问题,而不是简单的代码堆砌。在整个类型标注的任务过程中,我们发现太多的,不仅仅是编码习惯上的问题,更是工程问题,从基础上影响了 Paddle 这个项目的构建。比如上面提到的 Place
与 CPUPlace
的继承关系问题;再如,项目中用到了诸多的枚举方式,而没有使用 enum
;各个接口所使用的参数类型、范围不一致问题更是比比皆是。
说回项目的难度问题,由于 Python 语言的动态性,标注的过程中虽然有文档可以参考,但仍然需要人工逐个进行代码的跟踪,才能对具体的类型较为有把握。一旦接口的调用涉及到私有 API ,跟踪起来则尤为困难。这也是为何到目前为止,仍然没有一款工具,可以很好的辅助人工进行类型标注这个问题的根本原因。就算是目前大火的大模型也无法取代人工的标注工作,修改大模型的错误,与人工直接标注的工作量基本相当。
我们这里以 10
分钟一个接口(修改 + review)的工作量进行计算:
10 min/task * 2191 task / 60 min / 8 hour ≈ 46 day
也就是大约两个月的工作量,可以大体上估算所需投入的成本。
开源社区的介入,一方面缓解了项目的人力问题,使项目的完成成为可能;另一方面,也让更多的开发者接触到了类型标注这个特性。未来,Paddle 应该会将类型标注作为标准的编码行为,早点入坑也不至于开发的时候再抓瞎。
开源贡献者 项目结语 将近 5 个月的时间,痛苦、喜悦、烦恼或者豁然开朗都已成过去,有始有终,项目总算有个交代,正如《黑神话:悟空》,完成比完美更重要。
如果说未来有什么计划,完善私有接口的标注、完善测试用例、完善文档与最佳实践,等等……
要做的可以有很多,而对于还没有接触过类型标注的同学,或者还在犹豫是否使用类型标注这个特性,今天突然想到一个不是很雅的比喻:
上完厕所,走出十丈远,突然意识到自己没有擦屁股……你要如何做呢?
最后,感谢飞桨各位大佬的支持,感谢开源社区的贡献!!!
导师:
开发者:
参考链接 ',116)])))}});export{b as __pageData,m as default};
diff --git a/assets/posts_wangxin-story.md.B9Kdz5Yd.js b/assets/posts_wangxin-story.md.B9Kdz5Yd.js
new file mode 100644
index 0000000..7f00bd3
--- /dev/null
+++ b/assets/posts_wangxin-story.md.B9Kdz5Yd.js
@@ -0,0 +1 @@
+import{M as n,_ as s}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as o,i as r,s as a,a as e,v as i,o as g}from"./chunks/framework.D1-4jGi8.js";const p="/assets/wangxin-01.Hz-UX5vs.jpeg",d="/assets/wangxin-02.BGcXQipn.jpeg",u="/assets/wangxin-03.CAFEHiKf.jpeg",f="/assets/wangxin-04.DPt9W4dS.jpeg",h="/assets/wangxin-05.U63PCqJk.jpeg",y="/assets/wangxin-06.muvimoV2.jpeg",b="/assets/wangxin-07.CNOKyk_u.jpeg",m="/assets/wangxin-08.qkTnZ9Mk.jpeg",c="/assets/wangxin-09.0-vCbkph.jpeg",P="/assets/wangxin-10.CRRtNptg.jpeg",x="/assets/wangxin-11.R5oNZCsm.jpeg",k="/assets/wangxin-12.BsgnfET_.jpeg",C=JSON.parse('{"title":"【开源江湖闲聊录】Paddle 六边形战士?揭开汪师傅的神秘面纱~","description":"","frontmatter":{"title":"【开源江湖闲聊录】Paddle 六边形战士?揭开汪师傅的神秘面纱~","date":"2024-3-18","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"汪昕(汪师傅)","github":"GreatV"}]},"headers":[],"relativePath":"posts/wangxin-story.md","filePath":"posts/wangxin-story.md"}'),_={name:"posts/wangxin-story.md"},q=Object.assign(_,{setup(v){return(w,t)=>(g(),l("div",null,[t[5]||(t[5]=o('无论是工作还是生活,他都认真对待!无论是开源世界还是家庭亲情他都怀抱深沉热爱!从一开始提修改文档 PR 的边缘者到如今横扫各大开源任务的 Paddle 扫地僧!汪师傅一直在开源界默默努力💪深耕~今天,就让我们一起揭开这位神秘大佬的面纱,探寻他的故事吧!✨✨✨
一、汪师傅幸福瞬间 汪师傅幸福瞬间 1 汪师傅幸福瞬间 2 二、采访内容 汪师傅给我们介绍一下自己吧!
汪师傅: 我硕士毕业于兰州理工大学,通信与信息系统专业。老家在安徽安庆,目前在宁波工作,工作 4 年多了。兴趣爱好就是写代码、吃美食、喝酒。
你在兰州理工大学攻读硕士期间,最难忘的经历是什么?
汪师傅: 在兰州最难忘的就是各种各样的美食。吃得最多的是兰州牛肉面(兰州市以外地区常见的“兰州拉面”与兰州牛肉面并非同一种食物,多为青海化隆拉面)。记得学校里有一个食堂专门做牛肉面,本地人喜欢说去吃一碗牛大。牛肉面讲究一清、二白、三红、四绿、五黄,即汤清、萝卜片白、辣椒油红、香菜和蒜苗绿,以及面条黄亮。面形又分为毛细、细、二细、三细、二柱子、韭叶、薄宽、宽、大宽等等,让人选择不过来。我一般选二细加鸡蛋加一碟牛肉。放哈(“放哈”在兰州方言中意思是"发酵”)的甜胚子奶茶是另一种难忘的美食,点一杯奶茶和三五好友坐在一起聊聊天也是一种享受。
汪师傅拍的兰州牛肉面 你本科在安徽又在兰州读硕士,为什么选择在宁波工作?可以简单讲讲现在工作在做什么呢?
汪师傅: 找工作的时候,一个亲戚正好拍了一张招聘广告,并且发给我了。招聘的公司在宁波,我就顺手投了一份简历,后面被录用了,就去宁波了。工作主要是做生化、免疫、血脂、血球、尿液分析仪里面涉及算法的部分。
笔者注 ✍️:汪师傅本科毕业于安徽的淮北师范大学!
汪师傅工作四年多了,觉得工作后自己最大的变化是什么呢?
汪师傅: 从萌新变成了老油条。
听你说平时喜欢吃美食,可以给我们推荐一下宁波/安徽/兰州分别有啥好吃的东西吗?
汪师傅: 宁波烤菜年糕、鳗鲞、红膏呛蟹和泥螺都还不错。安徽的话推荐臭鳜鱼和山粉圆子。兰州必须来一碗牛肉面和一杯甜胚子奶茶😁。
通信这类专业好像和深度学习关联不大,你怎么想到去接触深度学习?
汪师傅: 读研的时候做的是传感器网络和优化算法,对深度学习有些了解。工作的时候开始做信号处理算法和图像处理算法,后面做项目发现用深度学习的方法效果更好,就开始学深度学习了。
你在 Paddle 社区中做了很多贡献,当时为什么想着加入 Paddle 开源社区?后来又为什么一直坚持给 Paddle 做贡献?你觉得这些贡献有什么意义?
汪师傅: 我是从学习 OCR 接触到 Paddle 社区的。当时在 AI Studio 上有一门课叫「动手学 OCR·十讲」,学习的过程中开始看 PaddleOCR 的代码和文档。在阅读文档的时候会发现错误,就慢慢开始提一些 typo fix 的 PR。而给 Paddle 框架做贡献则是从 Paddle 黑客松和快乐开源任务开始的。我做的第一个 Paddle 框架的贡献是 [CodeStyle] Compiler Warning tracking issue 相关的。这些开源贡献的意义大概是加深了对开源框架的理解、提升了自己写代码的能力,对代码质量有了更高的追求。
汪师傅部分开源任务展示 1 汪师傅部分开源任务展示 2 听说你加入了飞桨社区开源发展工作组 🙌🏻,对于该工作组你有什么看法呢?
汪师傅: 加入 PPOSDWG 后评选新一期开源之星、为社区未来的建设和发展提了一些建议,Paddle2ONNX PMC 也是在工作组讨论中诞生的。PPOSDWG 确实起到了部分社区治理的作用。
听说你也加入了Paddle2ONNX PMC ,对于自己加入这个组织你又有什么看法?加入这个组织你想达成一些什么成就呢?
汪师傅: 我是以 Paddle2ONNX 的用户角色加入的。郑师傅(@Zheng-Bicheng )是 PMC Chair,已经提了很多 PR,是主要力量。后面我可能就是多解答一些 issue。
笔者注 ✍️:为了 Paddle2ONNX 项目的可持续健康发展和加强社区治理, 飞桨社区开源发展工作组决定设立 Paddle2ONNX PMC(Project Management Committee) 来负责 Paddle2ONNX 项目的技术决策和维护。
据我所知,汪师傅在一家生物公司工作。为什么在生物公司你还是坚持 AI 开源,而且还是 AI 框架开源?
汪师傅: 生物公司也有很多项目要用到 AI,例如血细胞分类、识别尿液官型、识别液面高度等等。坚持开源主要是下班时间比较早,而我又不喜欢出门玩,只能在家写写代码消磨一下时间。
看你的 GitHub 热力图是全绿的,是怎么做到的呀?真的在 7*24 小时搞开源吗?
汪师傅: 下班时候比较早,每天都能写写代码。例如做一做快乐开源任务、做一做黑客松题目,写一写自己的开源项目等等。
汪师傅的 GitHub 热力图 你觉得参与开源社区对你的事业会有帮助吗?
汪师傅: 参与开源社区认识了很多有趣的小伙伴,同时也能提升写代码的能力,这些都会对事业有一定的帮助。
汪师傅有在参与其他社区的开源项目么?有没有什么有趣的开源项目可以分享一下?
汪师傅: 其他开源项目大部分都是阅读文档时,看到文档有错误,顺手提的 typos fix。如 scipy DOC: fix typo in cluster/_hierarchy.pyx 、yolov5 Ignore *_paddle_model/ dir 和 labelme Remove a duplicate statement 。
八卦一下,汪师傅和你的妻子是怎么认识的呀?
汪师傅: 通过我奶奶介绍认识的,她家当时正好在我奶奶家隔壁开店。然后加上了微信,聊聊天,见见面,这样子就认识了。
汪师傅老婆照片集 1 汪师傅老婆照片集 2 汪师傅与老婆合照 汪师傅与家人合照 你有什么想对社区小伙伴说的么?
汪师傅: 热爱生活,热爱开源。
笔者注✍️:汪师傅也有博客哦!大家可以去看看👉 https://vlight.me/ ❤️ 一起交流技术,共同进步!
汪师傅喝酒拍的照片集 1 汪师傅喝酒拍的照片集 2 三、神秘汪佬的评论区 ',8)),r(n,null,{default:a(()=>[r(s,{name:"骆涛",github:"luotao1"},{default:a(()=>t[0]||(t[0]=[i(" 汪师傅在我印象中全能,啥类型的 Paddle 题目都能做,非常 NB。而且是上班的业余时间用来 Paddle 开源,真的太感动了,对 Paddle 是真爱了。 ")])),_:1})]),_:1}),t[6]||(t[6]=e("h3",{id:"by-张一乔师傅-liyulingyue",tabindex:"-1"},[i("by 张一乔师傅("),e("a",{href:"https://github.com/liyulingyue",target:"_blank",rel:"noreferrer"},"liyulingyue"),i(") "),e("a",{class:"header-anchor",href:"#by-张一乔师傅-liyulingyue","aria-label":'Permalink to "by 张一乔师傅([liyulingyue](https://github.com/liyulingyue))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"张一乔",github:"liyulingyue"},{default:a(()=>t[1]||(t[1]=[i(" 汪师傅!人如其头像!一直感觉是一个什么都会的大佬! ")])),_:1})]),_:1}),t[7]||(t[7]=e("h3",{id:"by-李敏师傅-enkilee",tabindex:"-1"},[i("by 李敏师傅("),e("a",{href:"https://github.com/enkilee",target:"_blank",rel:"noreferrer"},"enkilee"),i(") "),e("a",{class:"header-anchor",href:"#by-李敏师傅-enkilee","aria-label":'Permalink to "by 李敏师傅([enkilee](https://github.com/enkilee))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"李敏",github:"enkilee"},{default:a(()=>t[2]||(t[2]=[i(" 神秘而强大的 G 佬,和 002 并称飞桨巨头之一的 greatx (但比 002 多了个核心条件😂),clang-tidy 的领头者,有硬件,有时间,有技术,有想法,多边形战士。 ")])),_:1})]),_:1}),t[8]||(t[8]=e("h3",{id:"by-散步师傅-sanbuphy",tabindex:"-1"},[i("by 散步师傅("),e("a",{href:"https://github.com/sanbuphy",target:"_blank",rel:"noreferrer"},"sanbuphy"),i(") "),e("a",{class:"header-anchor",href:"#by-散步师傅-sanbuphy","aria-label":'Permalink to "by 散步师傅([sanbuphy](https://github.com/sanbuphy))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"散步",github:"sanbuphy"},{default:a(()=>t[3]||(t[3]=[i(" 感觉汪师傅是 Paddle 扫地僧之一,是很低调很有才华的大神,人狠话不多!😄 ")])),_:1})]),_:1}),t[9]||(t[9]=e("h3",{id:"by-梦柳师傅-ligoml",tabindex:"-1"},[i("by 梦柳师傅("),e("a",{href:"https://github.com/Ligoml",target:"_blank",rel:"noreferrer"},"Ligoml"),i(") "),e("a",{class:"header-anchor",href:"#by-梦柳师傅-ligoml","aria-label":'Permalink to "by 梦柳师傅([Ligoml](https://github.com/Ligoml))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"梦柳",github:"Ligoml"},{default:a(()=>t[4]||(t[4]=[i(" 去年在上海办 meetup,对汪佬的初印象就是很 i,在一群 i 人中都非常明显哈哈哈,但是很有自己的想法和行动力,提出了很多对开源社区有益的想法,也在积极带领新伙伴融入飞桨快乐开源的氛围,有各位可爱的开发者是飞桨的福气~ ")])),_:1})]),_:1}),t[10]||(t[10]=e("hr",null,null,-1)),t[11]||(t[11]=e("h2",{id:"写在最后-💡",tabindex:"-1"},[i("写在最后 💡 "),e("a",{class:"header-anchor",href:"#写在最后-💡","aria-label":'Permalink to "写在最后 💡"'},"")],-1)),t[12]||(t[12]=e("p",null,[e("strong",null,"【开源江湖闲聊录】"),i(" 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。")],-1)),t[13]||(t[13]=e("hr",null,null,-1))]))}});export{C as __pageData,q as default};
diff --git a/assets/posts_wangxin-story.md.B9Kdz5Yd.lean.js b/assets/posts_wangxin-story.md.B9Kdz5Yd.lean.js
new file mode 100644
index 0000000..7f00bd3
--- /dev/null
+++ b/assets/posts_wangxin-story.md.B9Kdz5Yd.lean.js
@@ -0,0 +1 @@
+import{M as n,_ as s}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as o,i as r,s as a,a as e,v as i,o as g}from"./chunks/framework.D1-4jGi8.js";const p="/assets/wangxin-01.Hz-UX5vs.jpeg",d="/assets/wangxin-02.BGcXQipn.jpeg",u="/assets/wangxin-03.CAFEHiKf.jpeg",f="/assets/wangxin-04.DPt9W4dS.jpeg",h="/assets/wangxin-05.U63PCqJk.jpeg",y="/assets/wangxin-06.muvimoV2.jpeg",b="/assets/wangxin-07.CNOKyk_u.jpeg",m="/assets/wangxin-08.qkTnZ9Mk.jpeg",c="/assets/wangxin-09.0-vCbkph.jpeg",P="/assets/wangxin-10.CRRtNptg.jpeg",x="/assets/wangxin-11.R5oNZCsm.jpeg",k="/assets/wangxin-12.BsgnfET_.jpeg",C=JSON.parse('{"title":"【开源江湖闲聊录】Paddle 六边形战士?揭开汪师傅的神秘面纱~","description":"","frontmatter":{"title":"【开源江湖闲聊录】Paddle 六边形战士?揭开汪师傅的神秘面纱~","date":"2024-3-18","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"汪昕(汪师傅)","github":"GreatV"}]},"headers":[],"relativePath":"posts/wangxin-story.md","filePath":"posts/wangxin-story.md"}'),_={name:"posts/wangxin-story.md"},q=Object.assign(_,{setup(v){return(w,t)=>(g(),l("div",null,[t[5]||(t[5]=o('无论是工作还是生活,他都认真对待!无论是开源世界还是家庭亲情他都怀抱深沉热爱!从一开始提修改文档 PR 的边缘者到如今横扫各大开源任务的 Paddle 扫地僧!汪师傅一直在开源界默默努力💪深耕~今天,就让我们一起揭开这位神秘大佬的面纱,探寻他的故事吧!✨✨✨
一、汪师傅幸福瞬间 汪师傅幸福瞬间 1 汪师傅幸福瞬间 2 二、采访内容 汪师傅给我们介绍一下自己吧!
汪师傅: 我硕士毕业于兰州理工大学,通信与信息系统专业。老家在安徽安庆,目前在宁波工作,工作 4 年多了。兴趣爱好就是写代码、吃美食、喝酒。
你在兰州理工大学攻读硕士期间,最难忘的经历是什么?
汪师傅: 在兰州最难忘的就是各种各样的美食。吃得最多的是兰州牛肉面(兰州市以外地区常见的“兰州拉面”与兰州牛肉面并非同一种食物,多为青海化隆拉面)。记得学校里有一个食堂专门做牛肉面,本地人喜欢说去吃一碗牛大。牛肉面讲究一清、二白、三红、四绿、五黄,即汤清、萝卜片白、辣椒油红、香菜和蒜苗绿,以及面条黄亮。面形又分为毛细、细、二细、三细、二柱子、韭叶、薄宽、宽、大宽等等,让人选择不过来。我一般选二细加鸡蛋加一碟牛肉。放哈(“放哈”在兰州方言中意思是"发酵”)的甜胚子奶茶是另一种难忘的美食,点一杯奶茶和三五好友坐在一起聊聊天也是一种享受。
汪师傅拍的兰州牛肉面 你本科在安徽又在兰州读硕士,为什么选择在宁波工作?可以简单讲讲现在工作在做什么呢?
汪师傅: 找工作的时候,一个亲戚正好拍了一张招聘广告,并且发给我了。招聘的公司在宁波,我就顺手投了一份简历,后面被录用了,就去宁波了。工作主要是做生化、免疫、血脂、血球、尿液分析仪里面涉及算法的部分。
笔者注 ✍️:汪师傅本科毕业于安徽的淮北师范大学!
汪师傅工作四年多了,觉得工作后自己最大的变化是什么呢?
汪师傅: 从萌新变成了老油条。
听你说平时喜欢吃美食,可以给我们推荐一下宁波/安徽/兰州分别有啥好吃的东西吗?
汪师傅: 宁波烤菜年糕、鳗鲞、红膏呛蟹和泥螺都还不错。安徽的话推荐臭鳜鱼和山粉圆子。兰州必须来一碗牛肉面和一杯甜胚子奶茶😁。
通信这类专业好像和深度学习关联不大,你怎么想到去接触深度学习?
汪师傅: 读研的时候做的是传感器网络和优化算法,对深度学习有些了解。工作的时候开始做信号处理算法和图像处理算法,后面做项目发现用深度学习的方法效果更好,就开始学深度学习了。
你在 Paddle 社区中做了很多贡献,当时为什么想着加入 Paddle 开源社区?后来又为什么一直坚持给 Paddle 做贡献?你觉得这些贡献有什么意义?
汪师傅: 我是从学习 OCR 接触到 Paddle 社区的。当时在 AI Studio 上有一门课叫「动手学 OCR·十讲」,学习的过程中开始看 PaddleOCR 的代码和文档。在阅读文档的时候会发现错误,就慢慢开始提一些 typo fix 的 PR。而给 Paddle 框架做贡献则是从 Paddle 黑客松和快乐开源任务开始的。我做的第一个 Paddle 框架的贡献是 [CodeStyle] Compiler Warning tracking issue 相关的。这些开源贡献的意义大概是加深了对开源框架的理解、提升了自己写代码的能力,对代码质量有了更高的追求。
汪师傅部分开源任务展示 1 汪师傅部分开源任务展示 2 听说你加入了飞桨社区开源发展工作组 🙌🏻,对于该工作组你有什么看法呢?
汪师傅: 加入 PPOSDWG 后评选新一期开源之星、为社区未来的建设和发展提了一些建议,Paddle2ONNX PMC 也是在工作组讨论中诞生的。PPOSDWG 确实起到了部分社区治理的作用。
听说你也加入了Paddle2ONNX PMC ,对于自己加入这个组织你又有什么看法?加入这个组织你想达成一些什么成就呢?
汪师傅: 我是以 Paddle2ONNX 的用户角色加入的。郑师傅(@Zheng-Bicheng )是 PMC Chair,已经提了很多 PR,是主要力量。后面我可能就是多解答一些 issue。
笔者注 ✍️:为了 Paddle2ONNX 项目的可持续健康发展和加强社区治理, 飞桨社区开源发展工作组决定设立 Paddle2ONNX PMC(Project Management Committee) 来负责 Paddle2ONNX 项目的技术决策和维护。
据我所知,汪师傅在一家生物公司工作。为什么在生物公司你还是坚持 AI 开源,而且还是 AI 框架开源?
汪师傅: 生物公司也有很多项目要用到 AI,例如血细胞分类、识别尿液官型、识别液面高度等等。坚持开源主要是下班时间比较早,而我又不喜欢出门玩,只能在家写写代码消磨一下时间。
看你的 GitHub 热力图是全绿的,是怎么做到的呀?真的在 7*24 小时搞开源吗?
汪师傅: 下班时候比较早,每天都能写写代码。例如做一做快乐开源任务、做一做黑客松题目,写一写自己的开源项目等等。
汪师傅的 GitHub 热力图 你觉得参与开源社区对你的事业会有帮助吗?
汪师傅: 参与开源社区认识了很多有趣的小伙伴,同时也能提升写代码的能力,这些都会对事业有一定的帮助。
汪师傅有在参与其他社区的开源项目么?有没有什么有趣的开源项目可以分享一下?
汪师傅: 其他开源项目大部分都是阅读文档时,看到文档有错误,顺手提的 typos fix。如 scipy DOC: fix typo in cluster/_hierarchy.pyx 、yolov5 Ignore *_paddle_model/ dir 和 labelme Remove a duplicate statement 。
八卦一下,汪师傅和你的妻子是怎么认识的呀?
汪师傅: 通过我奶奶介绍认识的,她家当时正好在我奶奶家隔壁开店。然后加上了微信,聊聊天,见见面,这样子就认识了。
汪师傅老婆照片集 1 汪师傅老婆照片集 2 汪师傅与老婆合照 汪师傅与家人合照 你有什么想对社区小伙伴说的么?
汪师傅: 热爱生活,热爱开源。
笔者注✍️:汪师傅也有博客哦!大家可以去看看👉 https://vlight.me/ ❤️ 一起交流技术,共同进步!
汪师傅喝酒拍的照片集 1 汪师傅喝酒拍的照片集 2 三、神秘汪佬的评论区 ',8)),r(n,null,{default:a(()=>[r(s,{name:"骆涛",github:"luotao1"},{default:a(()=>t[0]||(t[0]=[i(" 汪师傅在我印象中全能,啥类型的 Paddle 题目都能做,非常 NB。而且是上班的业余时间用来 Paddle 开源,真的太感动了,对 Paddle 是真爱了。 ")])),_:1})]),_:1}),t[6]||(t[6]=e("h3",{id:"by-张一乔师傅-liyulingyue",tabindex:"-1"},[i("by 张一乔师傅("),e("a",{href:"https://github.com/liyulingyue",target:"_blank",rel:"noreferrer"},"liyulingyue"),i(") "),e("a",{class:"header-anchor",href:"#by-张一乔师傅-liyulingyue","aria-label":'Permalink to "by 张一乔师傅([liyulingyue](https://github.com/liyulingyue))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"张一乔",github:"liyulingyue"},{default:a(()=>t[1]||(t[1]=[i(" 汪师傅!人如其头像!一直感觉是一个什么都会的大佬! ")])),_:1})]),_:1}),t[7]||(t[7]=e("h3",{id:"by-李敏师傅-enkilee",tabindex:"-1"},[i("by 李敏师傅("),e("a",{href:"https://github.com/enkilee",target:"_blank",rel:"noreferrer"},"enkilee"),i(") "),e("a",{class:"header-anchor",href:"#by-李敏师傅-enkilee","aria-label":'Permalink to "by 李敏师傅([enkilee](https://github.com/enkilee))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"李敏",github:"enkilee"},{default:a(()=>t[2]||(t[2]=[i(" 神秘而强大的 G 佬,和 002 并称飞桨巨头之一的 greatx (但比 002 多了个核心条件😂),clang-tidy 的领头者,有硬件,有时间,有技术,有想法,多边形战士。 ")])),_:1})]),_:1}),t[8]||(t[8]=e("h3",{id:"by-散步师傅-sanbuphy",tabindex:"-1"},[i("by 散步师傅("),e("a",{href:"https://github.com/sanbuphy",target:"_blank",rel:"noreferrer"},"sanbuphy"),i(") "),e("a",{class:"header-anchor",href:"#by-散步师傅-sanbuphy","aria-label":'Permalink to "by 散步师傅([sanbuphy](https://github.com/sanbuphy))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"散步",github:"sanbuphy"},{default:a(()=>t[3]||(t[3]=[i(" 感觉汪师傅是 Paddle 扫地僧之一,是很低调很有才华的大神,人狠话不多!😄 ")])),_:1})]),_:1}),t[9]||(t[9]=e("h3",{id:"by-梦柳师傅-ligoml",tabindex:"-1"},[i("by 梦柳师傅("),e("a",{href:"https://github.com/Ligoml",target:"_blank",rel:"noreferrer"},"Ligoml"),i(") "),e("a",{class:"header-anchor",href:"#by-梦柳师傅-ligoml","aria-label":'Permalink to "by 梦柳师傅([Ligoml](https://github.com/Ligoml))"'},"")],-1)),r(n,null,{default:a(()=>[r(s,{name:"梦柳",github:"Ligoml"},{default:a(()=>t[4]||(t[4]=[i(" 去年在上海办 meetup,对汪佬的初印象就是很 i,在一群 i 人中都非常明显哈哈哈,但是很有自己的想法和行动力,提出了很多对开源社区有益的想法,也在积极带领新伙伴融入飞桨快乐开源的氛围,有各位可爱的开发者是飞桨的福气~ ")])),_:1})]),_:1}),t[10]||(t[10]=e("hr",null,null,-1)),t[11]||(t[11]=e("h2",{id:"写在最后-💡",tabindex:"-1"},[i("写在最后 💡 "),e("a",{class:"header-anchor",href:"#写在最后-💡","aria-label":'Permalink to "写在最后 💡"'},"")],-1)),t[12]||(t[12]=e("p",null,[e("strong",null,"【开源江湖闲聊录】"),i(" 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。")],-1)),t[13]||(t[13]=e("hr",null,null,-1))]))}});export{C as __pageData,q as default};
diff --git a/assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.js b/assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.js
new file mode 100644
index 0000000..4593a3b
--- /dev/null
+++ b/assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.js
@@ -0,0 +1 @@
+import{_ as e,c as a,k as r,o as d}from"./chunks/framework.D1-4jGi8.js";const o="/assets/competition-roadshow.BPyvtSOq.jpeg",l="/assets/meng-speech.DgYTkpXv.jpeg",p="/assets/round-table.Bj71g6wR.jpeg",i="/assets/group-photo.thp-v6D1.jpeg",n="/assets/OS-Projects.Wxwhgkfx.jpeg",s="/assets/OS-Contributors-01.TDrl-t3l.jpeg",c="/assets/OS-Contributors-02.wAuNCrPo.jpeg",m="/assets/OS-Contributors-03.9OnUxDBJ.jpeg",h="/assets/cups.DUBobWYR.jpeg",x=JSON.parse('{"title":"飞桨开源社区参加开放原子开源大赛 & 开发者大会","description":"","frontmatter":{"title":"飞桨开源社区参加开放原子开源大赛 & 开发者大会","date":"2023-12-26T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"}},"headers":[],"relativePath":"posts/wuxi-kaifangyuanzi.md","filePath":"posts/wuxi-kaifangyuanzi.md"}'),g={name:"posts/wuxi-kaifangyuanzi.md"};function f(u,t,b,P,_,k){return d(),a("div",null,t[0]||(t[0]=[r('2023 年 12 月 15 日顺利完成「第一届开放原子开源大赛 - 飞桨 PaddlePaddle 开源贡献挑战赛」 决赛路演,产生 2 支一等奖队伍,16 日参加开放原子开源基金会举办的「2023 开放原子开发者大会」 ,与各开源组织与机构同行沟通交流,收获满满~
开放原子开源大赛 - 飞桨 PaddlePaddle 开源任务挑战大赛 🏁 开放原子开源基金会 是致力于推动全球开源事业发展的非营利机构。这次飞桨团队受邀参与了「第一届开放原子开源大赛」的共建,发布飞桨 PaddlePaddle 开源贡献挑战赛,本期共计发布 6 道赛题,报名 39 支团队,收到有效提交作品 8 个,经初步筛选有 5 个作品入围决赛答辩,经 6 位评委线下评审,选出一等奖 2 名、二等奖 2 名、三等奖 1 名。飞桨获「优秀共建方」荣誉 🥳。
还有无锡市公证处的工作人员做现场公示,可正规呢~
梦师傅注✍️:很有精神!
开放原子开发者大会 - 开源治理与开发者运营分论坛 💬 这次大会规格很高,百度搜索「2023 开放原子开发者大会」可以看到很多新闻。飞桨受邀参加的是「开源治理与开发者运营分论坛」,梦师傅有一个关于飞桨开源社区的分享,同时也是分论坛的主持人和圆桌嘉宾,被现场导演戏称为「全场最忙的人」🤣。
开放原子开发者大会 - 开发者之夜 🌠 还没完!晚上的开发者之夜,有央视的主持人姐姐和无锡当地的 Rap 天团,各路整活层出不穷。现场颁发了「2023 年活力开源贡献者」和「2023 年生态项目」奖,咱们飞桨社区有 17 名开发者入选 🤩,同时拿到了生态项目奖哦 🥰,给各位优秀的贡献者和飞桨点赞 👍 ~
最后展示一个大合照 🏆 ~ 2023 收获满满,2024 一定会更好!提前给大家拜个早年 🧧🧨
',23)]))}const C=e(g,[["render",f]]);export{x as __pageData,C as default};
diff --git a/assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.lean.js b/assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.lean.js
new file mode 100644
index 0000000..4593a3b
--- /dev/null
+++ b/assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as a,k as r,o as d}from"./chunks/framework.D1-4jGi8.js";const o="/assets/competition-roadshow.BPyvtSOq.jpeg",l="/assets/meng-speech.DgYTkpXv.jpeg",p="/assets/round-table.Bj71g6wR.jpeg",i="/assets/group-photo.thp-v6D1.jpeg",n="/assets/OS-Projects.Wxwhgkfx.jpeg",s="/assets/OS-Contributors-01.TDrl-t3l.jpeg",c="/assets/OS-Contributors-02.wAuNCrPo.jpeg",m="/assets/OS-Contributors-03.9OnUxDBJ.jpeg",h="/assets/cups.DUBobWYR.jpeg",x=JSON.parse('{"title":"飞桨开源社区参加开放原子开源大赛 & 开发者大会","description":"","frontmatter":{"title":"飞桨开源社区参加开放原子开源大赛 & 开发者大会","date":"2023-12-26T00:00:00.000Z","author":{"name":"梦师傅","github":"Ligoml"}},"headers":[],"relativePath":"posts/wuxi-kaifangyuanzi.md","filePath":"posts/wuxi-kaifangyuanzi.md"}'),g={name:"posts/wuxi-kaifangyuanzi.md"};function f(u,t,b,P,_,k){return d(),a("div",null,t[0]||(t[0]=[r('2023 年 12 月 15 日顺利完成「第一届开放原子开源大赛 - 飞桨 PaddlePaddle 开源贡献挑战赛」 决赛路演,产生 2 支一等奖队伍,16 日参加开放原子开源基金会举办的「2023 开放原子开发者大会」 ,与各开源组织与机构同行沟通交流,收获满满~
开放原子开源大赛 - 飞桨 PaddlePaddle 开源任务挑战大赛 🏁 开放原子开源基金会 是致力于推动全球开源事业发展的非营利机构。这次飞桨团队受邀参与了「第一届开放原子开源大赛」的共建,发布飞桨 PaddlePaddle 开源贡献挑战赛,本期共计发布 6 道赛题,报名 39 支团队,收到有效提交作品 8 个,经初步筛选有 5 个作品入围决赛答辩,经 6 位评委线下评审,选出一等奖 2 名、二等奖 2 名、三等奖 1 名。飞桨获「优秀共建方」荣誉 🥳。
还有无锡市公证处的工作人员做现场公示,可正规呢~
梦师傅注✍️:很有精神!
开放原子开发者大会 - 开源治理与开发者运营分论坛 💬 这次大会规格很高,百度搜索「2023 开放原子开发者大会」可以看到很多新闻。飞桨受邀参加的是「开源治理与开发者运营分论坛」,梦师傅有一个关于飞桨开源社区的分享,同时也是分论坛的主持人和圆桌嘉宾,被现场导演戏称为「全场最忙的人」🤣。
开放原子开发者大会 - 开发者之夜 🌠 还没完!晚上的开发者之夜,有央视的主持人姐姐和无锡当地的 Rap 天团,各路整活层出不穷。现场颁发了「2023 年活力开源贡献者」和「2023 年生态项目」奖,咱们飞桨社区有 17 名开发者入选 🤩,同时拿到了生态项目奖哦 🥰,给各位优秀的贡献者和飞桨点赞 👍 ~
最后展示一个大合照 🏆 ~ 2023 收获满满,2024 一定会更好!提前给大家拜个早年 🧧🧨
',23)]))}const C=e(g,[["render",f]]);export{x as __pageData,C as default};
diff --git a/assets/posts_xdoctest-project.md.dN-fbWtt.js b/assets/posts_xdoctest-project.md.dN-fbWtt.js
new file mode 100644
index 0000000..eb88168
--- /dev/null
+++ b/assets/posts_xdoctest-project.md.dN-fbWtt.js
@@ -0,0 +1 @@
+import{c as e,k as r,o as a}from"./chunks/framework.D1-4jGi8.js";const i="/assets/xdoctest-1.twGhXbsV.jpg",o="/assets/xdoctest-2.aPhS1ooI.jpg",l="/assets/xdoctest-3.Bmde-M0u.jpg",n="/assets/xdoctest-4.CQRxEsNO.jpg",s="/assets/xdoctest-5.DMtIpjJh.jpg",g="/assets/xdoctest-6.4nJubk8N.jpg",h="/assets/xdoctest-7.Ddmk4eg3.jpg",d="/assets/xdoctest-8.BJQ47NZd.jpg",c="/assets/xdoctest-9.Abp2_MFf.jpg",p="/assets/xdoctest-10.C7e6x3bs.jpg",u="/assets/xdoctest-11.B_U6cpOH.jpg",f="/assets/xdoctest-12.6U1ca7Vv.jpg",k=JSON.parse('{"title":"项目收官|将 xdoctest 引入到飞桨框架工作流中","description":"","frontmatter":{"title":"项目收官|将 xdoctest 引入到飞桨框架工作流中","date":"2023-12-27T00:00:00.000Z","author":{"name":"孙师傅","github":"sunzhongkai588"},"co_authors":[{"name":"顺师傅","github":"megemini"}]},"headers":[],"relativePath":"posts/xdoctest-project.md","filePath":"posts/xdoctest-project.md"}'),b={name:"posts/xdoctest-project.md"},x=Object.assign(b,{setup(_){return(m,t)=>(a(),e("div",null,t[0]||(t[0]=[r('【将 xdoctest 引入飞桨工作流】的项目总结。
【将 xdoctest 引入飞桨工作流 】 是第六届“中国软件开源创新大赛”开源任务挑战赛赛道——飞桨框架任务挑战赛 的赛题之一(赛题五),由社区开发者顺师傅 (@megemini )主导,是 Paddle 社区迄今为止影响范围最大的开源活动 🎊。该项目规模极其庞大,涉及一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同参与完成。
本篇博客主要依据顺师傅的赛题答辩内容进行编写,从过去 、现在 、未来 三个角度,对项目进行分析、总结和展望。
>>> print(past) 过去 01 - 关于任务 文档是用户了解项目最主要的方式,而 API 文档更是承担了用户了解每个 API 使用方式的重要入口。Paddle 为上千个公开 API 提供了详尽的 API 文档,每个 API 都有对应的示例代码,以便用户能够最直观的了解 API 的使用方式。
但由于历史原因,Paddle 的 API 文档中的示例代码是直接使用 Python 代码块形式编写的,这使得我们无法对示例代码的输出进行自动化检查,从而无法保证展示给用户的示例代码的有效性,导致经常出现用户发现文档中的输出与实际运行结果不一致的情况。
过去 API 文档示例代码格式 而本任务,则是要求将 xdoctest 工具引入到 Paddle CI 检查流水线中,利用 xdoctest 能够自动执行示例代码,并对示例代码的输出进行检查的特性,对 Paddle API 文档中的示例代码进行检查,确保示例代码的输出结果与实际运行结果一致,从而提高 Paddle API 文档的质量。
>>> print(why_do_it) 为什么做这个事情? 文档是开发者接触 Paddle 的第一手学习资料,需要保证用户能够 快速、正确 地上手 Paddle 框架,代码示例的重要程度也就不言而喻。
>>> print(do_it_fast) 何为快速? 能够引导用户学习飞桨官方文档,并直接获得使用相应 API 接口的能力。
>>> print(do_it_right) 何为正确? 提供给用户正确运行、结果符合预期的示例代码。
02 - 现有方案 过去 Paddle 的 API 文档示例代码,对于普通 Python 语句没有提示符要求,对于输出则使用 #
进行注释。
>>> print(problem) 过去这样做有什么问题?
需要用户自己区分普通注释与代码输出 不符合 Python 开源项目里对可交互示例的实践和习惯 代码检查不严格,只保证运行,不保证正确 >>> print(solutions) 都有哪些现成的解决方案?
Python 标准库中内置了 doctest 可用于示例代码的自动执行和检查。但 doctest 是使用正则表达式来解析示例代码部分的,这使得示例代码的编写必须遵循严格的格式要求。
xdoctest 是一个基于 AST 的 Python 示例代码自动执行和检查工具,相比 doctest,xdoctest 的示例代码格式要求更加宽松,xdoctest 作者在博客 Extending Python Doctests – xdoctest 详细阐述了这一点。
显然后者是更适合 Paddle 的需求的,因此我们选择将 xdoctest 作为引入 Paddle CI 检查流水线的基础工具。这里为什么说是基础工具呢?是因为在后期迭代开发过程中发现 xdoctest 本身也有很多不足,因此我们在 xdoctest 的基础上进行了大量的二次开发,以满足 Paddle 的需求。
03 - 挑战 >>> 可以预见的挑战 有 800 万开发者每天都在学习、使用 Paddle 框架,xdoctest 的引入需要无缝切换 Paddle 框架包含 1400+ API,还涉及到版本更迭、API 迭代,框架庞大复杂 由于深度学习特殊性,同一示例代码在不同设备环境(CPU、GPU)会有差异性,需要区别验证 >>> 项目的三个大坑 >>> print(now) 现在 01 - 项目分解 一切源于一场对设计文档(RFC) 的讨论。
RFC 设计文档 >>> print(discussion) 都讨论了些什么? 在顺师傅和我们的交流中,共同抛出了相当多的问题进行讨论。这个阶段也遇到了项目的第一个大坑——历史包袱重 。
设计文档(抛开可以预见的那些挑战不说) Paddle 代码和 docs 都有代码检查逻辑 代码检查逻辑还不尽相同 Paddle 与 PyTorch 很多实现方式不一样 PyTorch 的检查方式并不完整 后知后觉 文档中的示例代码未及时随着框架的演进和接口的的变化更新 接口变动、逻辑变动 与单元测试关注点不同,测试方案不同 >>> print(rfc_for_project) 完成设计文档 经过细致的讨论和顺师傅对上述问题的梳理,逐渐理清了项目设计思路,并最终完成设计文档,正式启动项目。
各方参与几十轮的讨论 11470 字36 页2 个大版本,3 个小版本>>> print(milestones) 里程碑 在顺师傅完成项目拆解后,开始着手开发。此时遇到第二个大坑——项目管理难 。
项目 milestones >>> print(just_use_it) 直接用 xdoctest 不行吗? xdoctest 并不适用如 Paddle 此类庞大复杂的框架。
【接口遍历不全】 对于全局命名等情况无能为力【检查环境混用】 不能隔离多个示例检查的逻辑【无数据类型检查】 不能比对浮点数、复数等情况【无法进行全局控制】 如 timeout,错误语句等>>> print(technique_solutions) 主要的技术解决方案 针对【接口遍历不全】 此次任务沿用飞桨原有的接口遍历逻辑,将原有的 xdoctest 的检查逻辑进行拆分针对【检查环境混用】 此次任务利用多进程技术对执行环境进行隔离,进而防止环境污染等情况针对【无数据类型检查】 此次任务对 xdoctest 的检查逻辑进行 patch,从而可以比对整数、浮点数、复数等情况针对【无法进行全局控制】 引入全局指令、全局语句检查机制>>> print(technique_solutions.__more__) 进行重构,优化迁移环境
全局指令转换 抽象示例检查类 解耦示例检查流程与检查类 解耦示例检查结果 日志级别分离 >>> print(workload) 工作量有多大? 由于 Paddle 的公开 API 数量众多,且需要全量的优化对应文档的示例代码,所以在该阶段遇到第三个大坑——工程量巨大 。
因此,我们选择相信开源的力量 ,号召 Paddle 社区的伙伴一起参与进来!
代码到文档全流程 上千个 API 数百个源文件 数十万行代码 已有 24 位开发者近 3 个月的贡献 02 - 里程碑
03 - 开源社区 >>> print(happy_open_source) 社区快乐开源活动 飞桨快乐开源活动旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。
在本赛题中,顺师傅发起了 2 个衍生的快乐开源任务,借助社区的力量来一起全量优化 Paddle 文档的示例代码。
>>> print(missions_0) 开源任务一 : 修改中英文示例一致 修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM docs#5957
中文文档示例代码全部以 COPY-FROM 的形式和英文保持一致 >>> print(missions_1) 开源任务二 : 修改旧的示例代码 [xdoctest] 分批次修改已有代码的示例 #55629
修改已有示例以符合 Google Style样式 在开源任务二中,由于需要把控示例代码的修改效果,顺师傅也从开发者的身份逐渐转变成 Reviewer 。
>>> print(reviewer) 更关注用户的体验 更关注代码的质量 更清楚开发者的诉求 >>> print(reviewer.__task__) 熟悉 review 工作流 任务拆解 第一批:简单,开发者熟悉环境与流程 第二批:复杂,涉及 CPU/GPU 环境等情况 第三批:困难,涉及 C++、并行、静态图等 阶段总结,问题反馈 开发、打磨工具 convert_doctest
>>> print(convert_doctest.__doc__) 辅助工具 为了方便社区开发者完成示例代码的修改,顺师傅开发了 convert_doctest 辅助工具,能够实现:
对示例代码进行初步转换 :自动修改示例格式,节省大量人工修改的时间。对修改后的示例代码进行本地检查 :不用等待 CI 的运行结果,本地即可验证与修改。极大提升了社区开发者完成任务的效率。
convert_doctest 效果 >>> print(missions_bravo) 整体开源贡献 共有 24 位 开源开发者参与。 涉及约 450 个 文件。 涉及 数十万行 代码。 已有约 150 个 PR 被合入。 >>> 回顾三个大坑 在项目的开发过程中,前文提到的三个大坑,也被顺师傅逐一击破。
>>> print(future) 未来 01 - 任务总结 >>> 整体贡献 主线 代码检查特性的迁移 >>> 主要由个人独立 完成。 支线 新旧示例代码的修改 >>> 主要由开源社区 完成。
RFC《将 xdoctest 引入到飞桨框架工作流中》。 完成飞桨框架使用 xdoctest 进行示例代码检查的切换。 退场飞桨文档原有的示例代码检查。 完成飞桨框架全部示例代码对新格式的切换。 完成飞桨文档遗留 COPY-FROM 的切换。 完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新。 完成飞桨文档官网对于新格式示例代码的兼容。 开源社区任务一:修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM: 涉及 PR:23 个 ; 涉及文件:82 个 ; 开源贡献者:7 人 。 开源社区任务二:xdoctest 分批次修改已有代码的示例: 涉及 PR:123 个 ; 涉及文件:364 个 ; 开源贡献者:19 人 。 >>> 个人贡献 调研分析、任务拆解、项目开发、代码 review。 RFC《将 xdoctest 引入到飞桨框架工作流中》 完成飞桨框架使用 xdoctest 进行示例代码检查的切换 退场飞桨文档原有的示例代码检查 完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新 提交 PR:20 个 开源社区 Review PR:59 个 开发辅助工具 convert_doctest >>> 个人收获 开源协作,开发者 与 Reviewer 身份的转换 学习飞桨,更全面、更深入的学习;学习的越多,需要学习的更多 编程能力,更直接的需求反馈与实现 开拓视野,开源参与者之广,人外有人 02 - 未来规划 >>> CONVERT_DOCTEST 合入 Paddle、发布到 PyPI,回馈开源社区 思考是否有工具可以取代 xdoctest?是否单独开发 doctest 工具? 03 - 开源贡献 感谢以下参与开源任务的开发者们~
>>> 开源任务一:修改中英文示例一致 @Ainavo 、 @Li-fAngyU 、 @Liyulingyue 、 @RedContritio 、 @enkilee 、 @gouzil 、 @jjyaoao 。
>>> 开源任务二:修改旧的示例代码 @AndSonder 、 @Candy2Tang 、 @Difers 、 @DrRyanHuang 、 @Kaedeharai 、 @KongAKun 、 @Liyulingyue 、 @PommesPeter 、 @SigureMo 、 @enkilee 、 @gouzil 、 @jinyouzhi 、 @liyongchao911 、 @longranger2 、 @ooooo-create 、 @sunzhongkai588 、 @whisky-12 、 @yoyoIcy 、 @yuchen202 。
>>> 飞桨工作人员 @SigureMo 、 @sunzhongkai588 、 @luotao1 、 @jzhang533 。
',106)])))}});export{k as __pageData,x as default};
diff --git a/assets/posts_xdoctest-project.md.dN-fbWtt.lean.js b/assets/posts_xdoctest-project.md.dN-fbWtt.lean.js
new file mode 100644
index 0000000..eb88168
--- /dev/null
+++ b/assets/posts_xdoctest-project.md.dN-fbWtt.lean.js
@@ -0,0 +1 @@
+import{c as e,k as r,o as a}from"./chunks/framework.D1-4jGi8.js";const i="/assets/xdoctest-1.twGhXbsV.jpg",o="/assets/xdoctest-2.aPhS1ooI.jpg",l="/assets/xdoctest-3.Bmde-M0u.jpg",n="/assets/xdoctest-4.CQRxEsNO.jpg",s="/assets/xdoctest-5.DMtIpjJh.jpg",g="/assets/xdoctest-6.4nJubk8N.jpg",h="/assets/xdoctest-7.Ddmk4eg3.jpg",d="/assets/xdoctest-8.BJQ47NZd.jpg",c="/assets/xdoctest-9.Abp2_MFf.jpg",p="/assets/xdoctest-10.C7e6x3bs.jpg",u="/assets/xdoctest-11.B_U6cpOH.jpg",f="/assets/xdoctest-12.6U1ca7Vv.jpg",k=JSON.parse('{"title":"项目收官|将 xdoctest 引入到飞桨框架工作流中","description":"","frontmatter":{"title":"项目收官|将 xdoctest 引入到飞桨框架工作流中","date":"2023-12-27T00:00:00.000Z","author":{"name":"孙师傅","github":"sunzhongkai588"},"co_authors":[{"name":"顺师傅","github":"megemini"}]},"headers":[],"relativePath":"posts/xdoctest-project.md","filePath":"posts/xdoctest-project.md"}'),b={name:"posts/xdoctest-project.md"},x=Object.assign(b,{setup(_){return(m,t)=>(a(),e("div",null,t[0]||(t[0]=[r('【将 xdoctest 引入飞桨工作流】的项目总结。
【将 xdoctest 引入飞桨工作流 】 是第六届“中国软件开源创新大赛”开源任务挑战赛赛道——飞桨框架任务挑战赛 的赛题之一(赛题五),由社区开发者顺师傅 (@megemini )主导,是 Paddle 社区迄今为止影响范围最大的开源活动 🎊。该项目规模极其庞大,涉及一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同参与完成。
本篇博客主要依据顺师傅的赛题答辩内容进行编写,从过去 、现在 、未来 三个角度,对项目进行分析、总结和展望。
>>> print(past) 过去 01 - 关于任务 文档是用户了解项目最主要的方式,而 API 文档更是承担了用户了解每个 API 使用方式的重要入口。Paddle 为上千个公开 API 提供了详尽的 API 文档,每个 API 都有对应的示例代码,以便用户能够最直观的了解 API 的使用方式。
但由于历史原因,Paddle 的 API 文档中的示例代码是直接使用 Python 代码块形式编写的,这使得我们无法对示例代码的输出进行自动化检查,从而无法保证展示给用户的示例代码的有效性,导致经常出现用户发现文档中的输出与实际运行结果不一致的情况。
过去 API 文档示例代码格式 而本任务,则是要求将 xdoctest 工具引入到 Paddle CI 检查流水线中,利用 xdoctest 能够自动执行示例代码,并对示例代码的输出进行检查的特性,对 Paddle API 文档中的示例代码进行检查,确保示例代码的输出结果与实际运行结果一致,从而提高 Paddle API 文档的质量。
>>> print(why_do_it) 为什么做这个事情? 文档是开发者接触 Paddle 的第一手学习资料,需要保证用户能够 快速、正确 地上手 Paddle 框架,代码示例的重要程度也就不言而喻。
>>> print(do_it_fast) 何为快速? 能够引导用户学习飞桨官方文档,并直接获得使用相应 API 接口的能力。
>>> print(do_it_right) 何为正确? 提供给用户正确运行、结果符合预期的示例代码。
02 - 现有方案 过去 Paddle 的 API 文档示例代码,对于普通 Python 语句没有提示符要求,对于输出则使用 #
进行注释。
>>> print(problem) 过去这样做有什么问题?
需要用户自己区分普通注释与代码输出 不符合 Python 开源项目里对可交互示例的实践和习惯 代码检查不严格,只保证运行,不保证正确 >>> print(solutions) 都有哪些现成的解决方案?
Python 标准库中内置了 doctest 可用于示例代码的自动执行和检查。但 doctest 是使用正则表达式来解析示例代码部分的,这使得示例代码的编写必须遵循严格的格式要求。
xdoctest 是一个基于 AST 的 Python 示例代码自动执行和检查工具,相比 doctest,xdoctest 的示例代码格式要求更加宽松,xdoctest 作者在博客 Extending Python Doctests – xdoctest 详细阐述了这一点。
显然后者是更适合 Paddle 的需求的,因此我们选择将 xdoctest 作为引入 Paddle CI 检查流水线的基础工具。这里为什么说是基础工具呢?是因为在后期迭代开发过程中发现 xdoctest 本身也有很多不足,因此我们在 xdoctest 的基础上进行了大量的二次开发,以满足 Paddle 的需求。
03 - 挑战 >>> 可以预见的挑战 有 800 万开发者每天都在学习、使用 Paddle 框架,xdoctest 的引入需要无缝切换 Paddle 框架包含 1400+ API,还涉及到版本更迭、API 迭代,框架庞大复杂 由于深度学习特殊性,同一示例代码在不同设备环境(CPU、GPU)会有差异性,需要区别验证 >>> 项目的三个大坑 >>> print(now) 现在 01 - 项目分解 一切源于一场对设计文档(RFC) 的讨论。
RFC 设计文档 >>> print(discussion) 都讨论了些什么? 在顺师傅和我们的交流中,共同抛出了相当多的问题进行讨论。这个阶段也遇到了项目的第一个大坑——历史包袱重 。
设计文档(抛开可以预见的那些挑战不说) Paddle 代码和 docs 都有代码检查逻辑 代码检查逻辑还不尽相同 Paddle 与 PyTorch 很多实现方式不一样 PyTorch 的检查方式并不完整 后知后觉 文档中的示例代码未及时随着框架的演进和接口的的变化更新 接口变动、逻辑变动 与单元测试关注点不同,测试方案不同 >>> print(rfc_for_project) 完成设计文档 经过细致的讨论和顺师傅对上述问题的梳理,逐渐理清了项目设计思路,并最终完成设计文档,正式启动项目。
各方参与几十轮的讨论 11470 字36 页2 个大版本,3 个小版本>>> print(milestones) 里程碑 在顺师傅完成项目拆解后,开始着手开发。此时遇到第二个大坑——项目管理难 。
项目 milestones >>> print(just_use_it) 直接用 xdoctest 不行吗? xdoctest 并不适用如 Paddle 此类庞大复杂的框架。
【接口遍历不全】 对于全局命名等情况无能为力【检查环境混用】 不能隔离多个示例检查的逻辑【无数据类型检查】 不能比对浮点数、复数等情况【无法进行全局控制】 如 timeout,错误语句等>>> print(technique_solutions) 主要的技术解决方案 针对【接口遍历不全】 此次任务沿用飞桨原有的接口遍历逻辑,将原有的 xdoctest 的检查逻辑进行拆分针对【检查环境混用】 此次任务利用多进程技术对执行环境进行隔离,进而防止环境污染等情况针对【无数据类型检查】 此次任务对 xdoctest 的检查逻辑进行 patch,从而可以比对整数、浮点数、复数等情况针对【无法进行全局控制】 引入全局指令、全局语句检查机制>>> print(technique_solutions.__more__) 进行重构,优化迁移环境
全局指令转换 抽象示例检查类 解耦示例检查流程与检查类 解耦示例检查结果 日志级别分离 >>> print(workload) 工作量有多大? 由于 Paddle 的公开 API 数量众多,且需要全量的优化对应文档的示例代码,所以在该阶段遇到第三个大坑——工程量巨大 。
因此,我们选择相信开源的力量 ,号召 Paddle 社区的伙伴一起参与进来!
代码到文档全流程 上千个 API 数百个源文件 数十万行代码 已有 24 位开发者近 3 个月的贡献 02 - 里程碑
03 - 开源社区 >>> print(happy_open_source) 社区快乐开源活动 飞桨快乐开源活动旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。
在本赛题中,顺师傅发起了 2 个衍生的快乐开源任务,借助社区的力量来一起全量优化 Paddle 文档的示例代码。
>>> print(missions_0) 开源任务一 : 修改中英文示例一致 修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM docs#5957
中文文档示例代码全部以 COPY-FROM 的形式和英文保持一致 >>> print(missions_1) 开源任务二 : 修改旧的示例代码 [xdoctest] 分批次修改已有代码的示例 #55629
修改已有示例以符合 Google Style样式 在开源任务二中,由于需要把控示例代码的修改效果,顺师傅也从开发者的身份逐渐转变成 Reviewer 。
>>> print(reviewer) 更关注用户的体验 更关注代码的质量 更清楚开发者的诉求 >>> print(reviewer.__task__) 熟悉 review 工作流 任务拆解 第一批:简单,开发者熟悉环境与流程 第二批:复杂,涉及 CPU/GPU 环境等情况 第三批:困难,涉及 C++、并行、静态图等 阶段总结,问题反馈 开发、打磨工具 convert_doctest
>>> print(convert_doctest.__doc__) 辅助工具 为了方便社区开发者完成示例代码的修改,顺师傅开发了 convert_doctest 辅助工具,能够实现:
对示例代码进行初步转换 :自动修改示例格式,节省大量人工修改的时间。对修改后的示例代码进行本地检查 :不用等待 CI 的运行结果,本地即可验证与修改。极大提升了社区开发者完成任务的效率。
convert_doctest 效果 >>> print(missions_bravo) 整体开源贡献 共有 24 位 开源开发者参与。 涉及约 450 个 文件。 涉及 数十万行 代码。 已有约 150 个 PR 被合入。 >>> 回顾三个大坑 在项目的开发过程中,前文提到的三个大坑,也被顺师傅逐一击破。
>>> print(future) 未来 01 - 任务总结 >>> 整体贡献 主线 代码检查特性的迁移 >>> 主要由个人独立 完成。 支线 新旧示例代码的修改 >>> 主要由开源社区 完成。
RFC《将 xdoctest 引入到飞桨框架工作流中》。 完成飞桨框架使用 xdoctest 进行示例代码检查的切换。 退场飞桨文档原有的示例代码检查。 完成飞桨框架全部示例代码对新格式的切换。 完成飞桨文档遗留 COPY-FROM 的切换。 完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新。 完成飞桨文档官网对于新格式示例代码的兼容。 开源社区任务一:修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM: 涉及 PR:23 个 ; 涉及文件:82 个 ; 开源贡献者:7 人 。 开源社区任务二:xdoctest 分批次修改已有代码的示例: 涉及 PR:123 个 ; 涉及文件:364 个 ; 开源贡献者:19 人 。 >>> 个人贡献 调研分析、任务拆解、项目开发、代码 review。 RFC《将 xdoctest 引入到飞桨框架工作流中》 完成飞桨框架使用 xdoctest 进行示例代码检查的切换 退场飞桨文档原有的示例代码检查 完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新 提交 PR:20 个 开源社区 Review PR:59 个 开发辅助工具 convert_doctest >>> 个人收获 开源协作,开发者 与 Reviewer 身份的转换 学习飞桨,更全面、更深入的学习;学习的越多,需要学习的更多 编程能力,更直接的需求反馈与实现 开拓视野,开源参与者之广,人外有人 02 - 未来规划 >>> CONVERT_DOCTEST 合入 Paddle、发布到 PyPI,回馈开源社区 思考是否有工具可以取代 xdoctest?是否单独开发 doctest 工具? 03 - 开源贡献 感谢以下参与开源任务的开发者们~
>>> 开源任务一:修改中英文示例一致 @Ainavo 、 @Li-fAngyU 、 @Liyulingyue 、 @RedContritio 、 @enkilee 、 @gouzil 、 @jjyaoao 。
>>> 开源任务二:修改旧的示例代码 @AndSonder 、 @Candy2Tang 、 @Difers 、 @DrRyanHuang 、 @Kaedeharai 、 @KongAKun 、 @Liyulingyue 、 @PommesPeter 、 @SigureMo 、 @enkilee 、 @gouzil 、 @jinyouzhi 、 @liyongchao911 、 @longranger2 、 @ooooo-create 、 @sunzhongkai588 、 @whisky-12 、 @yoyoIcy 、 @yuchen202 。
>>> 飞桨工作人员 @SigureMo 、 @sunzhongkai588 、 @luotao1 、 @jzhang533 。
',106)])))}});export{k as __pageData,x as default};
diff --git a/assets/posts_xian-event.md.DaD_lAwG.js b/assets/posts_xian-event.md.DaD_lAwG.js
new file mode 100644
index 0000000..3d00149
--- /dev/null
+++ b/assets/posts_xian-event.md.DaD_lAwG.js
@@ -0,0 +1 @@
+import{_ as r,c as t,k as a,o as n}from"./chunks/framework.D1-4jGi8.js";const o="/assets/xian-event-01.Bl9tVA4M.jpg",i="/assets/xian-event-02.Bfoq75hH.jpg",s="/assets/xian-event-03.l1r9R8wK.jpg",h="/assets/xian-event-04.D7GNRoue.jpg",l="/assets/xian-event-05.CC4ZiPOX.jpg",g="/assets/xian-event-06.BRqk--wM.jpg",d=JSON.parse('{"title":"飞桨开源社区参加中国开源软件创新大赛剪影","description":"","frontmatter":{"title":"飞桨开源社区参加中国开源软件创新大赛剪影","date":"2023-10-25T00:00:00.000Z","author":{"name":"Jun","github":"jzhang533"}},"headers":[],"relativePath":"posts/xian-event.md","filePath":"posts/xian-event.md"}'),p={name:"posts/xian-event.md"};function c(f,e,m,u,b,_){return n(),t("div",null,e[0]||(e[0]=[a('在中国计算机学会组织的中国软件开源创新大赛上,飞桨开源社区的全部比赛已经完成。恭喜以下获奖的同学:
飞桨开源社区有四名同学参加了中国计算机学会组织的中国软件开源创新大赛决赛,这里记录一下在西安参加活动时候的一些照片。大赛的决赛的结果在这里:第六届 CCF 开源创新大赛决赛结果通知 。
活动签到处
@megemini 在做《将 xdoctest 引入到飞桨框架工作流中》的项目答辩。
@qiuwenbogdut 在做《实现飞桨框架动态图反向图的可视化》的项目答辩。
@co63oc 在做《PaddleScience 领域前沿论文复现》的项目答辩(远程接入,遗憾没见到真人)。
@zrr1999 在做《实现飞桨框架的 python level jit compiler》的项目答辩。
梦师傅在跟顺师傅和詹师傅交流。
',12)]))}const x=r(p,[["render",c]]);export{d as __pageData,x as default};
diff --git a/assets/posts_xian-event.md.DaD_lAwG.lean.js b/assets/posts_xian-event.md.DaD_lAwG.lean.js
new file mode 100644
index 0000000..3d00149
--- /dev/null
+++ b/assets/posts_xian-event.md.DaD_lAwG.lean.js
@@ -0,0 +1 @@
+import{_ as r,c as t,k as a,o as n}from"./chunks/framework.D1-4jGi8.js";const o="/assets/xian-event-01.Bl9tVA4M.jpg",i="/assets/xian-event-02.Bfoq75hH.jpg",s="/assets/xian-event-03.l1r9R8wK.jpg",h="/assets/xian-event-04.D7GNRoue.jpg",l="/assets/xian-event-05.CC4ZiPOX.jpg",g="/assets/xian-event-06.BRqk--wM.jpg",d=JSON.parse('{"title":"飞桨开源社区参加中国开源软件创新大赛剪影","description":"","frontmatter":{"title":"飞桨开源社区参加中国开源软件创新大赛剪影","date":"2023-10-25T00:00:00.000Z","author":{"name":"Jun","github":"jzhang533"}},"headers":[],"relativePath":"posts/xian-event.md","filePath":"posts/xian-event.md"}'),p={name:"posts/xian-event.md"};function c(f,e,m,u,b,_){return n(),t("div",null,e[0]||(e[0]=[a('在中国计算机学会组织的中国软件开源创新大赛上,飞桨开源社区的全部比赛已经完成。恭喜以下获奖的同学:
飞桨开源社区有四名同学参加了中国计算机学会组织的中国软件开源创新大赛决赛,这里记录一下在西安参加活动时候的一些照片。大赛的决赛的结果在这里:第六届 CCF 开源创新大赛决赛结果通知 。
活动签到处
@megemini 在做《将 xdoctest 引入到飞桨框架工作流中》的项目答辩。
@qiuwenbogdut 在做《实现飞桨框架动态图反向图的可视化》的项目答辩。
@co63oc 在做《PaddleScience 领域前沿论文复现》的项目答辩(远程接入,遗憾没见到真人)。
@zrr1999 在做《实现飞桨框架的 python level jit compiler》的项目答辩。
梦师傅在跟顺师傅和詹师傅交流。
',12)]))}const x=r(p,[["render",c]]);export{d as __pageData,x as default};
diff --git a/assets/posts_zhangyiqiao-story.md.DLBIaKPb.js b/assets/posts_zhangyiqiao-story.md.DLBIaKPb.js
new file mode 100644
index 0000000..76feb6d
--- /dev/null
+++ b/assets/posts_zhangyiqiao-story.md.DLBIaKPb.js
@@ -0,0 +1 @@
+import{c as i,k as o,o as s}from"./chunks/framework.D1-4jGi8.js";const e="/assets/zhangyiqiao-01.CoqpsD_Z.jpeg",r="/assets/zhangyiqiao-02.CMu3F1pB.jpeg",n="/assets/zhangyiqiao-03.BdZmFXia.jpeg",a="/assets/zhangyiqiao-04.DdgZgJtk.jpeg",g="/assets/zhangyiqiao-05.7wTCyzPp.jpeg",p="/assets/zhangyiqiao-06.CaD7ITDx.jpeg",l="/assets/zhangyiqiao-07.rpQ_Tu3F.jpeg",c="/assets/zhangyiqiao-08.DpkvL9rZ.jpeg",y=JSON.parse('{"title":"【开源江湖闲聊录】社区最强水群人——张师傅的酸甜苦辣生活说","description":"","frontmatter":{"title":"【开源江湖闲聊录】社区最强水群人——张师傅的酸甜苦辣生活说","date":"2024-1-25","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"张一乔(张师傅)","github":"liyulingyue"}]},"headers":[],"relativePath":"posts/zhangyiqiao-story.md","filePath":"posts/zhangyiqiao-story.md"}'),d={name:"posts/zhangyiqiao-story.md"},m=Object.assign(d,{setup(u){return(f,t)=>(s(),i("div",null,t[0]||(t[0]=[o('格子衬衫 👕,黑框眼镜 👓,他就是上天钦定的程序员!他狂卷技术,热爱开源;他喜欢摸鱼 🐟,疯狂水群;他“厨艺精湛”,堪称当代厨神。严寒冬日,别人有女朋友温暖手心,而他把 🥤 优乐美捧在手心!凌晨就寝,别人躺平酝酿睡意,他靠咖啡 ☕️ 进入梦境!工作一年半,至今单身汉!他就是来自安徽的吃辣小趴菜——张一乔 😆!
一、张一乔专属定制海报 张师傅专属定制海报 张师傅注:我不会吉他 🎸,但是有一把!
二、采访内容 先介绍一下自己吧,张师傅!
张师傅: 我是 96 年的,快三十岁了。感觉自己就是一个普普通通的,人到中年也没有女朋友的,独自一人在北京,住在一个小房子里(连个大阳台都没有)的可怜巴巴 🥺 的年轻人。而且,自己做饭还没有特别好吃,但还得自己做饭 😭。买的都是超市里一包一包的菜 🥬,一做就是两个人的饭,根本吃不完,然后剩菜又吃不下去·····大概这么个样子吧!
张师傅注:我就像一整片沙滩上的一粒沙子,就很普通。可能比起其他沙子,更加适合在浪头飘摇而已!
左为张师傅的自信照片,右为张师傅一整柜的格子衬衫 现在你是在北京做全栈程序员,一个人在北京习惯吗?北京和你的家乡安徽相比,你更想留在哪?为什么?
张师傅: 首先,在北京不一定是全栈程序员,也有可能是全方位打杂小工 😣。然后和家乡相比那肯定是家乡好,但是当时还是阴差阳错选择来北京!现在很后悔,很想回家。也不是说北京压力大(因为既不买房子,又没有女朋友。每个月生活也挺简单的,就是交个房租,然后吃饭上班睡觉·····钱肯定是够花的!),只是我自己比较思乡,不想离开家乡!家乡并没有给我留下什么糟糕的印象,父母也还不错。所以比起在外面晃悠,自己还是更加愿意回到家乡!
你觉得程序员是一个怎样的工作?这份职业对你的生活中产生了什么影响?
张师傅: 首先我不知道我自己是不是程序员。在公司,有什么活干什么活!然后工作给我产生的影响大概就是:打工后眼里失去了光!
张师傅名言:公司是用来创造价值的地方,不是学习的地方!
打工人精神状态表情包集 1 打工人精神状态表情包集 2 当初在武汉完成硕士学位后,你谈到过有读博的想法,为什么最终又决定直接工作?
张师傅: 因为我太弱小了,所以没有导师要我!要是读了博选择可能会多一些,可以选择创业之类的。
是什么时候开始接触到 Paddle 的呢 😂😂?
张师傅: 硕士期间接触到的,当时闲的没事,打开百度搜了个东西。然后百度搜索引擎就安利了飞桨。
在 Paddle 社区,很多人称张师傅为“002”,这是为什么呢?你对于这个称呼有什么想法 💡 呢?
张师傅: 因为我是第二个拿 Committer 身份的,所以叫 “002”!对于这个称呼我没有什么看法,只是一个称呼罢了(高冷脸.jpg)
社区里的开发者都觉得你在技术上很卷,那可以和我们分享一下你忙碌卷技术的日常么?
张师傅: 我大概是早上 5 点钟起床 🛏️,磨磨蹭蹭到 6 点钟,然后出门吃一碗香喷喷的豆腐脑!之后回到家里,打开电脑耍会儿游戏,然后去公司上班,开启一天辛苦的忙碌的工作!四点半下班,当然和大多数打工人一样,有时候会加班。一般回到家后开始做饭(黑暗料理):有时煎个饼,有时来个煎饺!差不多下午六点就打开游戏 🎮,并且下定决心打完这一把后就开始工作,结果打完一把又一把,最终打到八九点钟的样子,打开群水两句,水完洗个澡就去睡觉!
悄悄问下,张师傅花这么多时间做开源,你老板不会生气吗?
张师傅: 首先我的开源工作都是在下班时间完成的,与工作没关系,这属于生活!第二点呢,如果我的本职工作没有做好,在其他方面大放异彩,那我的老板肯定会生气!所以不要让老板知道我在干什么 🤫。只要让老板知道我有自己的生活,跟工作不冲突就可以了。
我了解到你是“飞桨开源之星”,也是“AI Studio 杰出创作者”,那么张师傅肯定有自己的开源心得。你认为对于刚来到社区的小伙伴,应该怎样学习才能和你一样逐渐成为技术大佬?
张师傅: 其实没有什么技术路线。可能很多人都在问:“我看你代码写这么好,我怎么样才能像你一样?”这个东西没有任何的窍门可言。就比如你在学 C 的时候,成日成夜的把时间耗费在机房里,然后照着书本或者其他东西一个代码一个代码的敲。可能最开始 Debug 工具不会用,IDE 也不会用,也没有那么多经验,但是得这样一步步走过来。当有了这个基础后,可以去做一些其他事情(eg:修改 Paddle 底层框架),你可能又会发现特别困难,但是我们 Paddle 的快乐开源活动已经把项目拆解好了,你可以凭这些先入入门,上个手,然后一点点进步。
你曾说在社区中你交到了很多开发者朋友,那么哪位开发者令你印象深刻,或者说社区里哪位大佬让你觉得最不像程序员?
张师傅: 每位开发者都印象深刻,嘿嘿,开始端水了!最印象深刻的当然是笠雨聆月,顶着一个女性的头像,然后 GitHub 还没有地铁站努力。最不像程序员的那必然是 001(@SigureMo ),虽然他很社恐,头发还很长,但他在我心中就是腼腆的邻家大男孩,他的气质就是腼腆的邻家大男孩。
你是如何定义开源社区的?你认为你在开源社区中收获最大的是什么呢?
张师傅: 开源社区就是一个开放的用于交流的平台。其实开源社区的定义大家已经给了太多了,我想补充的就是:开源社区从最早的 Linux 到其他一些软件其实都可以接触到!大家在社区无偿贡献代码或者知识,大家一起交流进步。最大的特点可能是公益性!
你在 Paddle 社区做过让你最有成就感的项目是哪个呢?为什么?
张师傅: 在 Paddle 社区里几乎没有做过什么有成就感的项目。一直在烂尾,一直在捡别人剩饭,一直在拾人牙慧。
编者注:张师傅可真是认真努力且谦虚的男人!
在水群时经常看到你说想找个女朋友。那么张师傅想找一个什么类型的呢?给我们描述一下吧 😁😆😂!
张师傅: 我喜欢温柔一点的,儒雅随和的,不说脏话 🤬 的,遵守交通规则的(过马路看红绿灯 🚥)女孩子。她可以不遵守规则,像我一样。但是交通规则得遵守!最好有一头乌黑的长发 😁!
张师傅注:谁家好人三十岁还没有女朋友啊~ 哇哇哇
张师傅在做饭方面颇有造诣,那么你是如何突发奇思妙想用最简单的食材烹饪出这一道道高级的美食呢?
张师傅: 做饭心得就是每天睡觉前坚持学习烹饪技巧,比如打开哔哩哔哩观看 「世界美食 official」 的最新视频!我们要谦虚学习别人是如何把这种简单的食材最终做成高级的糊状物的!日常就喜欢观看印度美食的制作过程~~
张师傅经常观看的B站up主 马上 2024 年了,可以分享一下新的一年里你有什么计划么?
张师傅: 2024 年计划就是 2023 年的计划。女朋友这一条还是可以不完成!
张师傅 2023 和 2024 的计划 三、生活中的点点滴滴——张师傅篇 张师傅的日常 张师傅的精心制作的黑暗料理 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',12)])))}});export{y as __pageData,m as default};
diff --git a/assets/posts_zhangyiqiao-story.md.DLBIaKPb.lean.js b/assets/posts_zhangyiqiao-story.md.DLBIaKPb.lean.js
new file mode 100644
index 0000000..76feb6d
--- /dev/null
+++ b/assets/posts_zhangyiqiao-story.md.DLBIaKPb.lean.js
@@ -0,0 +1 @@
+import{c as i,k as o,o as s}from"./chunks/framework.D1-4jGi8.js";const e="/assets/zhangyiqiao-01.CoqpsD_Z.jpeg",r="/assets/zhangyiqiao-02.CMu3F1pB.jpeg",n="/assets/zhangyiqiao-03.BdZmFXia.jpeg",a="/assets/zhangyiqiao-04.DdgZgJtk.jpeg",g="/assets/zhangyiqiao-05.7wTCyzPp.jpeg",p="/assets/zhangyiqiao-06.CaD7ITDx.jpeg",l="/assets/zhangyiqiao-07.rpQ_Tu3F.jpeg",c="/assets/zhangyiqiao-08.DpkvL9rZ.jpeg",y=JSON.parse('{"title":"【开源江湖闲聊录】社区最强水群人——张师傅的酸甜苦辣生活说","description":"","frontmatter":{"title":"【开源江湖闲聊录】社区最强水群人——张师傅的酸甜苦辣生活说","date":"2024-1-25","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"张一乔(张师傅)","github":"liyulingyue"}]},"headers":[],"relativePath":"posts/zhangyiqiao-story.md","filePath":"posts/zhangyiqiao-story.md"}'),d={name:"posts/zhangyiqiao-story.md"},m=Object.assign(d,{setup(u){return(f,t)=>(s(),i("div",null,t[0]||(t[0]=[o('格子衬衫 👕,黑框眼镜 👓,他就是上天钦定的程序员!他狂卷技术,热爱开源;他喜欢摸鱼 🐟,疯狂水群;他“厨艺精湛”,堪称当代厨神。严寒冬日,别人有女朋友温暖手心,而他把 🥤 优乐美捧在手心!凌晨就寝,别人躺平酝酿睡意,他靠咖啡 ☕️ 进入梦境!工作一年半,至今单身汉!他就是来自安徽的吃辣小趴菜——张一乔 😆!
一、张一乔专属定制海报 张师傅专属定制海报 张师傅注:我不会吉他 🎸,但是有一把!
二、采访内容 先介绍一下自己吧,张师傅!
张师傅: 我是 96 年的,快三十岁了。感觉自己就是一个普普通通的,人到中年也没有女朋友的,独自一人在北京,住在一个小房子里(连个大阳台都没有)的可怜巴巴 🥺 的年轻人。而且,自己做饭还没有特别好吃,但还得自己做饭 😭。买的都是超市里一包一包的菜 🥬,一做就是两个人的饭,根本吃不完,然后剩菜又吃不下去·····大概这么个样子吧!
张师傅注:我就像一整片沙滩上的一粒沙子,就很普通。可能比起其他沙子,更加适合在浪头飘摇而已!
左为张师傅的自信照片,右为张师傅一整柜的格子衬衫 现在你是在北京做全栈程序员,一个人在北京习惯吗?北京和你的家乡安徽相比,你更想留在哪?为什么?
张师傅: 首先,在北京不一定是全栈程序员,也有可能是全方位打杂小工 😣。然后和家乡相比那肯定是家乡好,但是当时还是阴差阳错选择来北京!现在很后悔,很想回家。也不是说北京压力大(因为既不买房子,又没有女朋友。每个月生活也挺简单的,就是交个房租,然后吃饭上班睡觉·····钱肯定是够花的!),只是我自己比较思乡,不想离开家乡!家乡并没有给我留下什么糟糕的印象,父母也还不错。所以比起在外面晃悠,自己还是更加愿意回到家乡!
你觉得程序员是一个怎样的工作?这份职业对你的生活中产生了什么影响?
张师傅: 首先我不知道我自己是不是程序员。在公司,有什么活干什么活!然后工作给我产生的影响大概就是:打工后眼里失去了光!
张师傅名言:公司是用来创造价值的地方,不是学习的地方!
打工人精神状态表情包集 1 打工人精神状态表情包集 2 当初在武汉完成硕士学位后,你谈到过有读博的想法,为什么最终又决定直接工作?
张师傅: 因为我太弱小了,所以没有导师要我!要是读了博选择可能会多一些,可以选择创业之类的。
是什么时候开始接触到 Paddle 的呢 😂😂?
张师傅: 硕士期间接触到的,当时闲的没事,打开百度搜了个东西。然后百度搜索引擎就安利了飞桨。
在 Paddle 社区,很多人称张师傅为“002”,这是为什么呢?你对于这个称呼有什么想法 💡 呢?
张师傅: 因为我是第二个拿 Committer 身份的,所以叫 “002”!对于这个称呼我没有什么看法,只是一个称呼罢了(高冷脸.jpg)
社区里的开发者都觉得你在技术上很卷,那可以和我们分享一下你忙碌卷技术的日常么?
张师傅: 我大概是早上 5 点钟起床 🛏️,磨磨蹭蹭到 6 点钟,然后出门吃一碗香喷喷的豆腐脑!之后回到家里,打开电脑耍会儿游戏,然后去公司上班,开启一天辛苦的忙碌的工作!四点半下班,当然和大多数打工人一样,有时候会加班。一般回到家后开始做饭(黑暗料理):有时煎个饼,有时来个煎饺!差不多下午六点就打开游戏 🎮,并且下定决心打完这一把后就开始工作,结果打完一把又一把,最终打到八九点钟的样子,打开群水两句,水完洗个澡就去睡觉!
悄悄问下,张师傅花这么多时间做开源,你老板不会生气吗?
张师傅: 首先我的开源工作都是在下班时间完成的,与工作没关系,这属于生活!第二点呢,如果我的本职工作没有做好,在其他方面大放异彩,那我的老板肯定会生气!所以不要让老板知道我在干什么 🤫。只要让老板知道我有自己的生活,跟工作不冲突就可以了。
我了解到你是“飞桨开源之星”,也是“AI Studio 杰出创作者”,那么张师傅肯定有自己的开源心得。你认为对于刚来到社区的小伙伴,应该怎样学习才能和你一样逐渐成为技术大佬?
张师傅: 其实没有什么技术路线。可能很多人都在问:“我看你代码写这么好,我怎么样才能像你一样?”这个东西没有任何的窍门可言。就比如你在学 C 的时候,成日成夜的把时间耗费在机房里,然后照着书本或者其他东西一个代码一个代码的敲。可能最开始 Debug 工具不会用,IDE 也不会用,也没有那么多经验,但是得这样一步步走过来。当有了这个基础后,可以去做一些其他事情(eg:修改 Paddle 底层框架),你可能又会发现特别困难,但是我们 Paddle 的快乐开源活动已经把项目拆解好了,你可以凭这些先入入门,上个手,然后一点点进步。
你曾说在社区中你交到了很多开发者朋友,那么哪位开发者令你印象深刻,或者说社区里哪位大佬让你觉得最不像程序员?
张师傅: 每位开发者都印象深刻,嘿嘿,开始端水了!最印象深刻的当然是笠雨聆月,顶着一个女性的头像,然后 GitHub 还没有地铁站努力。最不像程序员的那必然是 001(@SigureMo ),虽然他很社恐,头发还很长,但他在我心中就是腼腆的邻家大男孩,他的气质就是腼腆的邻家大男孩。
你是如何定义开源社区的?你认为你在开源社区中收获最大的是什么呢?
张师傅: 开源社区就是一个开放的用于交流的平台。其实开源社区的定义大家已经给了太多了,我想补充的就是:开源社区从最早的 Linux 到其他一些软件其实都可以接触到!大家在社区无偿贡献代码或者知识,大家一起交流进步。最大的特点可能是公益性!
你在 Paddle 社区做过让你最有成就感的项目是哪个呢?为什么?
张师傅: 在 Paddle 社区里几乎没有做过什么有成就感的项目。一直在烂尾,一直在捡别人剩饭,一直在拾人牙慧。
编者注:张师傅可真是认真努力且谦虚的男人!
在水群时经常看到你说想找个女朋友。那么张师傅想找一个什么类型的呢?给我们描述一下吧 😁😆😂!
张师傅: 我喜欢温柔一点的,儒雅随和的,不说脏话 🤬 的,遵守交通规则的(过马路看红绿灯 🚥)女孩子。她可以不遵守规则,像我一样。但是交通规则得遵守!最好有一头乌黑的长发 😁!
张师傅注:谁家好人三十岁还没有女朋友啊~ 哇哇哇
张师傅在做饭方面颇有造诣,那么你是如何突发奇思妙想用最简单的食材烹饪出这一道道高级的美食呢?
张师傅: 做饭心得就是每天睡觉前坚持学习烹饪技巧,比如打开哔哩哔哩观看 「世界美食 official」 的最新视频!我们要谦虚学习别人是如何把这种简单的食材最终做成高级的糊状物的!日常就喜欢观看印度美食的制作过程~~
张师傅经常观看的B站up主 马上 2024 年了,可以分享一下新的一年里你有什么计划么?
张师傅: 2024 年计划就是 2023 年的计划。女朋友这一条还是可以不完成!
张师傅 2023 和 2024 的计划 三、生活中的点点滴滴——张师傅篇 张师傅的日常 张师傅的精心制作的黑暗料理 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',12)])))}});export{y as __pageData,m as default};
diff --git a/assets/posts_zheng-story.md.tkyMPqZ3.js b/assets/posts_zheng-story.md.tkyMPqZ3.js
new file mode 100644
index 0000000..be1aad4
--- /dev/null
+++ b/assets/posts_zheng-story.md.tkyMPqZ3.js
@@ -0,0 +1 @@
+import{M as o,_ as s}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as e,i as r,s as n,o as g,v as a,a as i}from"./chunks/framework.D1-4jGi8.js";const h="/assets/Captain-01.gy7CxJts.jpg",p="/assets/Captain-03.D6Fwywaf.jpg",u="/assets/Captain-05.B2PP1fn2.jpeg",d="/assets/Captain-04.DSnRKHge.jpeg",c="/assets/Captain-02.oqPjuBMJ.jpg",b="/assets/Captain-06.B04Ukp-4.jpg",y=JSON.parse('{"title":"【开源江湖闲聊录】产品经理?程序员?郑师傅教你如何双双拿下❗","description":"","frontmatter":{"title":"【开源江湖闲聊录】产品经理?程序员?郑师傅教你如何双双拿下❗","date":"2023-12-23T00:00:00.000Z","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"郑必城(郑师傅)","github":"Zheng-Bicheng"}]},"headers":[],"relativePath":"posts/zheng-story.md","filePath":"posts/zheng-story.md"}'),f={name:"posts/zheng-story.md"},_=Object.assign(f,{setup(m){return(k,t)=>(g(),l("div",null,[t[1]||(t[1]=e('集百家之阴阳,合一家之糟粕。好消息!好消息!自称 Paddle 社区“最想当 PM 的程序员” 、“Paddle 首席阴阳家”—— Zheng-bicheng,闪亮登场 🥳🎉🎉🎉。你想掌握最前沿的阴阳技巧么?你想成为和他一样优秀的开发者吗?你想和他一样眼神 👀 中透露着睿智的光芒,小脑袋瓜里装满各种各样的知识么?那就快来看看这篇博客吧!🌹
一、个人名片
',4)),r(o,null,{default:n(()=>[r(s,{name:"郑师傅",github:"Zheng-Bicheng"},{default:n(()=>t[0]||(t[0]=[a(" 网络上躁皮不用多说,臊皮领域涉及抖音、微博、小红书、贴吧、知乎、B 站等多个社交软件。你问我躁皮能力有多强,我得问问你懂不懂活了 23 年,吧龄有 13.4 年的含金量(如下图)。人家小学玩泥巴,我的小学玩贴吧,抽象要从小培养。 "),i("br",null,null,-1),a(" 我涉及的游戏领域的主要是 Steam 上的 RPG 游戏和 Switch 上的战旗游戏。我的游戏方式讲究一个另辟蹊径,例如玩神界原罪的时候,大多数人都忙着通主线,我主打一个小偷玩法,所到之处能偷的东西全给我偷光了。与之相反的是,我在游戏里大偷四方,现实里却被称为“电瓶侠”。截止至目前为止,已经被偷了 20 颗电瓶,快说谢谢电瓶侠 😭。 "),i("br",null,null,-1),a(" 顺便有没有大佬带我玩《双人成行》的,一缺一现在~ ")])),_:1})]),_:1}),t[2]||(t[2]=e('郑师傅吧龄 郑师傅注:提一嘴,我玩了 13.4 年贴吧,臊皮能力不足梦师傅十分之一,鬼知道这姐妹经历了啥!
编者注✍️:提到的梦师傅(@Ligoml )是我们飞桨社区非常优秀的美女产品经理 ❤️!!
二、采访内容 先介绍一下自己吧,郑师傅!
郑师傅: 各位大佬好,我是郑必城(@Zheng-Bicheng )🐶🐶,开源社区的菜鸟一枚,毕业于普普通通的闽江学院。
大学时你的专业是人工智能,为什么当时选择这个专业?
郑师傅: 其实我最开始学的是电子信息与工程,无奈于电路天赋极其有限,通宵 4 个晚上做了 13 块板子才搞出一个 5 倍放大电路,与此同时身边的资源大多都开始向 AI 转型,于是随大流转专业到了比较热门的人工智能专业。
在大学的四年,你学习了些什么技术?又是怎么精进你的技术的呢?
郑师傅: 鉴于闽江学院给我画了 4 年大饼,迟迟升不上本一,我仅代表个人将其本降专,将其简称“闽带”。在闽带的 4 年生活里,承蒙老师关爱,我得以同时加入了软件和硬件的实验室。我的两位指导老师又刚好都是系主任,这就意味着我能比较自由的使用各种电子元器件以及超算,这让我在学习上有了极大的探索空间。软硬都有所了解后,技术栈也从常见的后端研发慢慢转成了嵌入式部署。
听说郑师傅现在在导师公司底下工作,是在哪里工作呢?具体工作是关于哪方面的?
郑师傅: 目前我在福州凌智电子工作,公司业务主要是仪器仪表(高速信号采集)以及各种 Sensor 的开发。工作内容就比较杂了,小公司没有产品,人手也不足,因此一个对外的产品,我的工作内容覆盖了软件端产品设计,研发,测试三个环节。我在公司主要负责的业务是高速采集卡的上位机,各种模块的对外 SDK 开发以及 AI 边缘端计算项目后端框架开发。
作为一个 01 年的小社畜,平时工作忙么?加班多么 😂😂?
郑师傅: 忙的时候忙,不忙的时候不忙。加班多的时候多,加班不多的时候少。
编者注✍️:郑师傅是会总结的!!🤭
你对 Paddle 社区的理解是什么样的?你在 Paddle 社区,做过最有影响力的项目是什么?
郑师傅: Paddle 社区给我的感觉就是包容性强。
从实力上,不管你的实力是强是弱,在社区里都有属于你的位置,各种任务任你挑,研发大哥人也都很好,即使很忙也愿意抽时间出来和你讲思路讲方法。
在 Paddle 社区里,我比较活跃的项目其实就是 FastDeploy 。FD 的定位是端到端的部署框架,希望让即使是 AI 初学者的用户也能用极少的代码量跑通模型部署。我主要负责的部分都是和移植相关,涉及到的部分包括 Rockchip 推理后端的移植,几个社区 CV 模型的移植,类似人脸对齐这种后端算法的移植。
要是提到影响力,FastDeploy 的定位其实就比较尴尬了。由于适配了非常多的底层推理框架,FD 内部为了兼容性是牺牲了一部分的性能的。从公司的角度看,对于小公司来说,用 FD 基本上会做一些魔改,来达到最优的性能(这也是后期我维护 FD 次数慢慢变少的原因,在我们公司内部,我基于 FD 做了大量的魔改,已经和现在的 FD 主分支几乎不兼容了);大公司有自己的高水平研发工程师,也不会去用 FD,因此 FD 的使用场景还是有一定的局限性的。
从用户的角度看,对于学生这类 AI 部署水平较差的用户来说,FD 是相当友好的,毕竟几行代码就能搞定深度学习部署,用来做毕业设计再合适不过了;对于编程水平较高的研发工程师来说,FD 更多的还是作为一个项目推理框架的模版代码,各个开发者可以在这个模版上快速定制自己所需要的代码。
可以和我们讲讲你的开源故事么?期待 😚 期待~~~~
郑师傅: 我第一次接触到 Paddle 开源社区是在 2022 年 Q3 的黑客松第三期活动。
刚开始参加开源时,第一个带我的师傅是 001。谁能想到晚上 11 点,001 这个内向萌骚怪搁那滔滔不绝的教我怎么同步远程仓库代码,我搁那嘎嘎猛困,他搁那嘎嘎猛教。没办法,不能辜负大佬的一番好意,我只能被迫学习。学着学着,把自己的知识用到了开源里,还真一不小心就做出了黑客松的两道题,从此入门了开源。
编者注✍️:黑客松是百度飞桨举办的深度学习领域编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。 PPDE(Paddle Paddle Developers Experts):飞桨开发者技术专家。 PFCC(Paddle Framework Contributor Club):飞桨框架贡献者俱乐部。
刚开始做适配时,RK3588 的工具链还不完善,我苦于没办法和 RK 官方的人沟通,效率一直很低。但青姐这人主打就是一个给力,我真敢提代码,她真敢拉群,直接给我这个开源菜鸟拉到了 RK 的适配群里和 RK 的研发工程师真人 1V1 大战。有了 RK 工程师的支持,项目也就慢慢开始推进了。
在持续将近一年的贡献后,不知不觉的,我这么个一心向钱看齐的人莫名其妙的就成为了仓库的维护者,参与起了和 RK 相关的维护工作。在青姐的支持下,我甚至还参加了 RK 的开发者大会。要知道,在前一年,我还是坐在讲台下听着 RK 工作人员演讲的开发者,第二年就借着 Paddle 的风到 RK 开发者大会上给讲台下的嘉宾讲 FastDeploy 了。
上图为 RK 开发者大会的合照 随后就是参加了新的黑客松,认识了 Arm 的 Liliya 姐。Liliya 姐在 Arm 领域给了我很多的帮助,在她的支持下,我了解了很多 Arm 相关的最新技术,也参与到了 Paddle 模型 -> Arm 虚拟硬件部署链路的移植工作中。在她的帮助下,我移植了 Paddle 的多个模型到 Arm 虚拟硬件上,然后就是参加了 Arm 虚拟硬件的小发布会,一不小心成为了 Arm Ambassadors,顺便蹭了她一顿饭。
上图为郑师傅和上文的 Liliya 姐 郑师傅做开源这么久了,现在开源对你来说是一个什么感觉?你觉得你热爱它么?那又是怎么体现你的这种感觉的?
郑师傅: 咱主打一个真实。读书的时候,开源是我装逼的方式;工作以后,开源对我来说是生活的调剂品,在心有余力的时候是我放松时的选项之一。我很爱开源,开源既让我拿到了很多 Title,也让我学到很多东西,面子里子都赚到了。
你自诩为“Paddle 社区阴阳怪气第一人”(和阿梦实力相当),那你是如何把阴阳怪气这种 🥰 贱贱的说话方式使用的如此炉火纯青的?可以教教我们么?
郑师傅: 我这么正直的人怎么会阴阳怪气呢?比起阴阳怪气和口嗨,李梦柳和神可比我强多了。至于练习阴阳怪气嘛,多亏了啵啵姐。世上本没有阴阳师,阴阳啵啵姐多了,也便成了阴阳师。
编者注✍️:啵啵姐是指飞桨社区优优优秀的美女运营花花(@Tulip-hua )。
梦师傅本人注✍️:郑必城根本不会阴阳怪气!
你口中的“神”是谁? 为什么称他为神呢?
郑师傅: 神是衍哥,第一次把衍哥叫做神是和梦师傅打嘴炮的时候没过脑子说出来的话。但是后面了解到神的事迹以后,衍哥我只能说比神还神。
你有谈到想成为一位 PM,那可以和我们简单分享一下你的职业规划么?或者说:你想未来一年在职业上取得什么进展?🆕🆕
郑师傅: 我职业规划基本上是:先当研发广泛学习,再当产品经理输出价值!
在我的认知里 PM 的知识面首先是广,然后是深。带一个产品,我得懂需求;和研发吵架,我得懂代码大致的底层逻辑;对外输出,我得懂基本商业逻辑;产品的迭代,我得懂客户的工作流程。
对应我的工作,看上去干的事情和 AI 没啥关系,实际上是 AI 落地的一整套的流程。我的工作涵盖了数据采集,数据标注和数据清洗,模型调参和训练以及模型部署。这几乎覆盖了边缘端 AI 部署的全场景。而其他知识,一般靠和大佬沟通,取长补短搞定。在工作以后,我定期的会去拜访一些上游链路的大佬,如某开发板的硬件负责人,某芯片厂商的事务负责人以及某产商的视觉算法负责人。和大佬沟通是我拓展视野和补充知识面的手段之一,毕竟人能坐到那个位置上,对某个方向一定是有自己的理解的。
前段时间和百度某个产品已经聊过了。某法师说:"真正要做的事,连神明都不要说,不要告诉别人你的计划,让他们看结果。”对于我要做的事,一般是不立 Flag 的,这里就埋个伏笔。
相信你也接触到很多飞桨以及其他的 PM,哪位 PM 给你留下来最深的印象?哪位 PM 是你未来职业的模板?
郑师傅: Paddle 的 PM 大佬们其实都很有特色也都给我留下挺深的印象。比如梦柳不但能力很强,嘴炮也很厉害,看上去很渣,其实比谁都纯;雷青姐经常工作到深夜,非常努力;军哥专业素养很高,表面上话不多像是个糙汉子,接触了以后让我感觉居然像个小文青;衍神表面看上去吊儿郎当的,实际上很强,对各种问题看的很透彻;孙哥表面看上去很能嘴,其实我觉得还有点内敛;佳维姐姐人非常漂亮,普通话也超级标准;凯哥居然能用英语和阿三交流的好好的。
谁是我职业模版的话,我感觉我这 🐶 脑能把大家的优点全学会是不太可能的,但是都学个 10% 当个及格的 PM 还是有可能的
左图为参观百度时小度拍的合照,右图为郑师傅最喜欢的喵喵喵雪糕 最后,你想对和你一样努力 💪 开源的开源者说些什么呢?
郑师傅: 和张师傅(@liyulingyue )这群开源奋斗逼相比,我实在太摸鱼了。希望大家都能向张师傅学习,在开源中贡献自己的力量。
三、从你的全世界路过——郑师傅篇 前几篇博客上都有板块谈大家对被采访者的印象,但是今天郑师傅想来个板块单独谈谈他对社区大佬的印象 🤩🤩🤩。由于在 Paddle 社区,大佬实在太多了,郑师傅就抽一部分大佬讲讲他对他们的印象。
我对 001 的第一印象就是代码能力很强,但是有点闷骚。作为带我入门的大佬,肯定是要感谢 001 的,因为 001 人实在太好了 ❤️,不光带我开源还带我“开原”,属于是工作生活两不误了。
应晟大佬是个很帅的糙汉子,刚认识他的时候给我的第一感觉就是相当的程序员,但是他参加直播的时候打理了一下,卧槽,嘎嘎帅啊。在我第一次参加黑客松的时候他给了我非常多的帮助,帮我积极协调了项目的各种进度内容,也让我了解到了一些职场相关的内容。
原谅我管百度唯一指定童工叫姐。刚开始认识她的时候,她说别人叫她“芋泥妹” 👧,我想着我一 00 后也这么叫不是显得我太老了?所以叫她“啵啵姐”,后来发现大家都挺爱这么叫的。这位更是重量级,又能给我开源资源又能带我玩。世界可以没有耶路撒冷,但开源不能没有啵啵姐。
雷青大佬在我参与开源的初期给了我很大很大的帮助,没有她做为桥梁我就没办法认识到那么多的百度研发工程师。雷青姐人也超级好,还记得她来福州的时候我请她吃饭,结账的时候她觉得不能让我一学生请客,把我手机藏起来买单,这才是神仙姐姐 🙍🏻♀️ 啊。算起来已经欠她两顿饭了,有机会一定要还了。
蒋大佬的代码我只能说,牛逼,真他妈牛逼。人跟人的差距真大,一个在我看来很难的问题,他总是能一下子就找到关键点。在我开源生涯中他是各种指点,牛逼,真的牛逼。说起来还画了好多的饼给这位大佬,但是这些饼的工作量都有点大,最后大部分都慢慢不了了之了,现在正在慢慢捡起来做。
延君大佬人很热情,帮我审核了很多的代码,他不但在 coding 上给了我很大的帮助,还对我的职业生涯规划起了很大作用,在我两难的时候给了我很正确的建议。
这位也是重量级,Paddle 除了神以外的嘴炮王。她在我这 Title 太多,包括但不限于我的 Github 头像拥有者、最帅猫拥有者、最肥猫拥有者、最傻猫拥有者。
一见如故,和我一样惨。我是扑克牌里的小王那孙哥就是扑克牌里的大王 🤡。
很感谢军哥帮忙推动了 Paddle 框架在 Arm 上的 whl 包的适配,没有军哥,Arm 虚拟硬件在百度云上的部署就没办法推动了,就是啥时候能上线 Paddle 官网就更好了。
就一个字,神!
四、郑师傅的名言集 上图为郑师傅经典语录集 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',33))]))}});export{y as __pageData,_ as default};
diff --git a/assets/posts_zheng-story.md.tkyMPqZ3.lean.js b/assets/posts_zheng-story.md.tkyMPqZ3.lean.js
new file mode 100644
index 0000000..be1aad4
--- /dev/null
+++ b/assets/posts_zheng-story.md.tkyMPqZ3.lean.js
@@ -0,0 +1 @@
+import{M as o,_ as s}from"./chunks/MessageBox.CshcSYCA.js";import{c as l,k as e,i as r,s as n,o as g,v as a,a as i}from"./chunks/framework.D1-4jGi8.js";const h="/assets/Captain-01.gy7CxJts.jpg",p="/assets/Captain-03.D6Fwywaf.jpg",u="/assets/Captain-05.B2PP1fn2.jpeg",d="/assets/Captain-04.DSnRKHge.jpeg",c="/assets/Captain-02.oqPjuBMJ.jpg",b="/assets/Captain-06.B04Ukp-4.jpg",y=JSON.parse('{"title":"【开源江湖闲聊录】产品经理?程序员?郑师傅教你如何双双拿下❗","description":"","frontmatter":{"title":"【开源江湖闲聊录】产品经理?程序员?郑师傅教你如何双双拿下❗","date":"2023-12-23T00:00:00.000Z","author":{"name":"文潇","github":"wenxiaohahaha"},"co_authors":[{"name":"孙钟恺","github":"sunzhongkai588"},{"name":"郑必城(郑师傅)","github":"Zheng-Bicheng"}]},"headers":[],"relativePath":"posts/zheng-story.md","filePath":"posts/zheng-story.md"}'),f={name:"posts/zheng-story.md"},_=Object.assign(f,{setup(m){return(k,t)=>(g(),l("div",null,[t[1]||(t[1]=e('集百家之阴阳,合一家之糟粕。好消息!好消息!自称 Paddle 社区“最想当 PM 的程序员” 、“Paddle 首席阴阳家”—— Zheng-bicheng,闪亮登场 🥳🎉🎉🎉。你想掌握最前沿的阴阳技巧么?你想成为和他一样优秀的开发者吗?你想和他一样眼神 👀 中透露着睿智的光芒,小脑袋瓜里装满各种各样的知识么?那就快来看看这篇博客吧!🌹
一、个人名片
',4)),r(o,null,{default:n(()=>[r(s,{name:"郑师傅",github:"Zheng-Bicheng"},{default:n(()=>t[0]||(t[0]=[a(" 网络上躁皮不用多说,臊皮领域涉及抖音、微博、小红书、贴吧、知乎、B 站等多个社交软件。你问我躁皮能力有多强,我得问问你懂不懂活了 23 年,吧龄有 13.4 年的含金量(如下图)。人家小学玩泥巴,我的小学玩贴吧,抽象要从小培养。 "),i("br",null,null,-1),a(" 我涉及的游戏领域的主要是 Steam 上的 RPG 游戏和 Switch 上的战旗游戏。我的游戏方式讲究一个另辟蹊径,例如玩神界原罪的时候,大多数人都忙着通主线,我主打一个小偷玩法,所到之处能偷的东西全给我偷光了。与之相反的是,我在游戏里大偷四方,现实里却被称为“电瓶侠”。截止至目前为止,已经被偷了 20 颗电瓶,快说谢谢电瓶侠 😭。 "),i("br",null,null,-1),a(" 顺便有没有大佬带我玩《双人成行》的,一缺一现在~ ")])),_:1})]),_:1}),t[2]||(t[2]=e('郑师傅吧龄 郑师傅注:提一嘴,我玩了 13.4 年贴吧,臊皮能力不足梦师傅十分之一,鬼知道这姐妹经历了啥!
编者注✍️:提到的梦师傅(@Ligoml )是我们飞桨社区非常优秀的美女产品经理 ❤️!!
二、采访内容 先介绍一下自己吧,郑师傅!
郑师傅: 各位大佬好,我是郑必城(@Zheng-Bicheng )🐶🐶,开源社区的菜鸟一枚,毕业于普普通通的闽江学院。
大学时你的专业是人工智能,为什么当时选择这个专业?
郑师傅: 其实我最开始学的是电子信息与工程,无奈于电路天赋极其有限,通宵 4 个晚上做了 13 块板子才搞出一个 5 倍放大电路,与此同时身边的资源大多都开始向 AI 转型,于是随大流转专业到了比较热门的人工智能专业。
在大学的四年,你学习了些什么技术?又是怎么精进你的技术的呢?
郑师傅: 鉴于闽江学院给我画了 4 年大饼,迟迟升不上本一,我仅代表个人将其本降专,将其简称“闽带”。在闽带的 4 年生活里,承蒙老师关爱,我得以同时加入了软件和硬件的实验室。我的两位指导老师又刚好都是系主任,这就意味着我能比较自由的使用各种电子元器件以及超算,这让我在学习上有了极大的探索空间。软硬都有所了解后,技术栈也从常见的后端研发慢慢转成了嵌入式部署。
听说郑师傅现在在导师公司底下工作,是在哪里工作呢?具体工作是关于哪方面的?
郑师傅: 目前我在福州凌智电子工作,公司业务主要是仪器仪表(高速信号采集)以及各种 Sensor 的开发。工作内容就比较杂了,小公司没有产品,人手也不足,因此一个对外的产品,我的工作内容覆盖了软件端产品设计,研发,测试三个环节。我在公司主要负责的业务是高速采集卡的上位机,各种模块的对外 SDK 开发以及 AI 边缘端计算项目后端框架开发。
作为一个 01 年的小社畜,平时工作忙么?加班多么 😂😂?
郑师傅: 忙的时候忙,不忙的时候不忙。加班多的时候多,加班不多的时候少。
编者注✍️:郑师傅是会总结的!!🤭
你对 Paddle 社区的理解是什么样的?你在 Paddle 社区,做过最有影响力的项目是什么?
郑师傅: Paddle 社区给我的感觉就是包容性强。
从实力上,不管你的实力是强是弱,在社区里都有属于你的位置,各种任务任你挑,研发大哥人也都很好,即使很忙也愿意抽时间出来和你讲思路讲方法。
在 Paddle 社区里,我比较活跃的项目其实就是 FastDeploy 。FD 的定位是端到端的部署框架,希望让即使是 AI 初学者的用户也能用极少的代码量跑通模型部署。我主要负责的部分都是和移植相关,涉及到的部分包括 Rockchip 推理后端的移植,几个社区 CV 模型的移植,类似人脸对齐这种后端算法的移植。
要是提到影响力,FastDeploy 的定位其实就比较尴尬了。由于适配了非常多的底层推理框架,FD 内部为了兼容性是牺牲了一部分的性能的。从公司的角度看,对于小公司来说,用 FD 基本上会做一些魔改,来达到最优的性能(这也是后期我维护 FD 次数慢慢变少的原因,在我们公司内部,我基于 FD 做了大量的魔改,已经和现在的 FD 主分支几乎不兼容了);大公司有自己的高水平研发工程师,也不会去用 FD,因此 FD 的使用场景还是有一定的局限性的。
从用户的角度看,对于学生这类 AI 部署水平较差的用户来说,FD 是相当友好的,毕竟几行代码就能搞定深度学习部署,用来做毕业设计再合适不过了;对于编程水平较高的研发工程师来说,FD 更多的还是作为一个项目推理框架的模版代码,各个开发者可以在这个模版上快速定制自己所需要的代码。
可以和我们讲讲你的开源故事么?期待 😚 期待~~~~
郑师傅: 我第一次接触到 Paddle 开源社区是在 2022 年 Q3 的黑客松第三期活动。
刚开始参加开源时,第一个带我的师傅是 001。谁能想到晚上 11 点,001 这个内向萌骚怪搁那滔滔不绝的教我怎么同步远程仓库代码,我搁那嘎嘎猛困,他搁那嘎嘎猛教。没办法,不能辜负大佬的一番好意,我只能被迫学习。学着学着,把自己的知识用到了开源里,还真一不小心就做出了黑客松的两道题,从此入门了开源。
编者注✍️:黑客松是百度飞桨举办的深度学习领域编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。 PPDE(Paddle Paddle Developers Experts):飞桨开发者技术专家。 PFCC(Paddle Framework Contributor Club):飞桨框架贡献者俱乐部。
刚开始做适配时,RK3588 的工具链还不完善,我苦于没办法和 RK 官方的人沟通,效率一直很低。但青姐这人主打就是一个给力,我真敢提代码,她真敢拉群,直接给我这个开源菜鸟拉到了 RK 的适配群里和 RK 的研发工程师真人 1V1 大战。有了 RK 工程师的支持,项目也就慢慢开始推进了。
在持续将近一年的贡献后,不知不觉的,我这么个一心向钱看齐的人莫名其妙的就成为了仓库的维护者,参与起了和 RK 相关的维护工作。在青姐的支持下,我甚至还参加了 RK 的开发者大会。要知道,在前一年,我还是坐在讲台下听着 RK 工作人员演讲的开发者,第二年就借着 Paddle 的风到 RK 开发者大会上给讲台下的嘉宾讲 FastDeploy 了。
上图为 RK 开发者大会的合照 随后就是参加了新的黑客松,认识了 Arm 的 Liliya 姐。Liliya 姐在 Arm 领域给了我很多的帮助,在她的支持下,我了解了很多 Arm 相关的最新技术,也参与到了 Paddle 模型 -> Arm 虚拟硬件部署链路的移植工作中。在她的帮助下,我移植了 Paddle 的多个模型到 Arm 虚拟硬件上,然后就是参加了 Arm 虚拟硬件的小发布会,一不小心成为了 Arm Ambassadors,顺便蹭了她一顿饭。
上图为郑师傅和上文的 Liliya 姐 郑师傅做开源这么久了,现在开源对你来说是一个什么感觉?你觉得你热爱它么?那又是怎么体现你的这种感觉的?
郑师傅: 咱主打一个真实。读书的时候,开源是我装逼的方式;工作以后,开源对我来说是生活的调剂品,在心有余力的时候是我放松时的选项之一。我很爱开源,开源既让我拿到了很多 Title,也让我学到很多东西,面子里子都赚到了。
你自诩为“Paddle 社区阴阳怪气第一人”(和阿梦实力相当),那你是如何把阴阳怪气这种 🥰 贱贱的说话方式使用的如此炉火纯青的?可以教教我们么?
郑师傅: 我这么正直的人怎么会阴阳怪气呢?比起阴阳怪气和口嗨,李梦柳和神可比我强多了。至于练习阴阳怪气嘛,多亏了啵啵姐。世上本没有阴阳师,阴阳啵啵姐多了,也便成了阴阳师。
编者注✍️:啵啵姐是指飞桨社区优优优秀的美女运营花花(@Tulip-hua )。
梦师傅本人注✍️:郑必城根本不会阴阳怪气!
你口中的“神”是谁? 为什么称他为神呢?
郑师傅: 神是衍哥,第一次把衍哥叫做神是和梦师傅打嘴炮的时候没过脑子说出来的话。但是后面了解到神的事迹以后,衍哥我只能说比神还神。
你有谈到想成为一位 PM,那可以和我们简单分享一下你的职业规划么?或者说:你想未来一年在职业上取得什么进展?🆕🆕
郑师傅: 我职业规划基本上是:先当研发广泛学习,再当产品经理输出价值!
在我的认知里 PM 的知识面首先是广,然后是深。带一个产品,我得懂需求;和研发吵架,我得懂代码大致的底层逻辑;对外输出,我得懂基本商业逻辑;产品的迭代,我得懂客户的工作流程。
对应我的工作,看上去干的事情和 AI 没啥关系,实际上是 AI 落地的一整套的流程。我的工作涵盖了数据采集,数据标注和数据清洗,模型调参和训练以及模型部署。这几乎覆盖了边缘端 AI 部署的全场景。而其他知识,一般靠和大佬沟通,取长补短搞定。在工作以后,我定期的会去拜访一些上游链路的大佬,如某开发板的硬件负责人,某芯片厂商的事务负责人以及某产商的视觉算法负责人。和大佬沟通是我拓展视野和补充知识面的手段之一,毕竟人能坐到那个位置上,对某个方向一定是有自己的理解的。
前段时间和百度某个产品已经聊过了。某法师说:"真正要做的事,连神明都不要说,不要告诉别人你的计划,让他们看结果。”对于我要做的事,一般是不立 Flag 的,这里就埋个伏笔。
相信你也接触到很多飞桨以及其他的 PM,哪位 PM 给你留下来最深的印象?哪位 PM 是你未来职业的模板?
郑师傅: Paddle 的 PM 大佬们其实都很有特色也都给我留下挺深的印象。比如梦柳不但能力很强,嘴炮也很厉害,看上去很渣,其实比谁都纯;雷青姐经常工作到深夜,非常努力;军哥专业素养很高,表面上话不多像是个糙汉子,接触了以后让我感觉居然像个小文青;衍神表面看上去吊儿郎当的,实际上很强,对各种问题看的很透彻;孙哥表面看上去很能嘴,其实我觉得还有点内敛;佳维姐姐人非常漂亮,普通话也超级标准;凯哥居然能用英语和阿三交流的好好的。
谁是我职业模版的话,我感觉我这 🐶 脑能把大家的优点全学会是不太可能的,但是都学个 10% 当个及格的 PM 还是有可能的
左图为参观百度时小度拍的合照,右图为郑师傅最喜欢的喵喵喵雪糕 最后,你想对和你一样努力 💪 开源的开源者说些什么呢?
郑师傅: 和张师傅(@liyulingyue )这群开源奋斗逼相比,我实在太摸鱼了。希望大家都能向张师傅学习,在开源中贡献自己的力量。
三、从你的全世界路过——郑师傅篇 前几篇博客上都有板块谈大家对被采访者的印象,但是今天郑师傅想来个板块单独谈谈他对社区大佬的印象 🤩🤩🤩。由于在 Paddle 社区,大佬实在太多了,郑师傅就抽一部分大佬讲讲他对他们的印象。
我对 001 的第一印象就是代码能力很强,但是有点闷骚。作为带我入门的大佬,肯定是要感谢 001 的,因为 001 人实在太好了 ❤️,不光带我开源还带我“开原”,属于是工作生活两不误了。
应晟大佬是个很帅的糙汉子,刚认识他的时候给我的第一感觉就是相当的程序员,但是他参加直播的时候打理了一下,卧槽,嘎嘎帅啊。在我第一次参加黑客松的时候他给了我非常多的帮助,帮我积极协调了项目的各种进度内容,也让我了解到了一些职场相关的内容。
原谅我管百度唯一指定童工叫姐。刚开始认识她的时候,她说别人叫她“芋泥妹” 👧,我想着我一 00 后也这么叫不是显得我太老了?所以叫她“啵啵姐”,后来发现大家都挺爱这么叫的。这位更是重量级,又能给我开源资源又能带我玩。世界可以没有耶路撒冷,但开源不能没有啵啵姐。
雷青大佬在我参与开源的初期给了我很大很大的帮助,没有她做为桥梁我就没办法认识到那么多的百度研发工程师。雷青姐人也超级好,还记得她来福州的时候我请她吃饭,结账的时候她觉得不能让我一学生请客,把我手机藏起来买单,这才是神仙姐姐 🙍🏻♀️ 啊。算起来已经欠她两顿饭了,有机会一定要还了。
蒋大佬的代码我只能说,牛逼,真他妈牛逼。人跟人的差距真大,一个在我看来很难的问题,他总是能一下子就找到关键点。在我开源生涯中他是各种指点,牛逼,真的牛逼。说起来还画了好多的饼给这位大佬,但是这些饼的工作量都有点大,最后大部分都慢慢不了了之了,现在正在慢慢捡起来做。
延君大佬人很热情,帮我审核了很多的代码,他不但在 coding 上给了我很大的帮助,还对我的职业生涯规划起了很大作用,在我两难的时候给了我很正确的建议。
这位也是重量级,Paddle 除了神以外的嘴炮王。她在我这 Title 太多,包括但不限于我的 Github 头像拥有者、最帅猫拥有者、最肥猫拥有者、最傻猫拥有者。
一见如故,和我一样惨。我是扑克牌里的小王那孙哥就是扑克牌里的大王 🤡。
很感谢军哥帮忙推动了 Paddle 框架在 Arm 上的 whl 包的适配,没有军哥,Arm 虚拟硬件在百度云上的部署就没办法推动了,就是啥时候能上线 Paddle 官网就更好了。
就一个字,神!
四、郑师傅的名言集 上图为郑师傅经典语录集 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
',33))]))}});export{y as __pageData,_ as default};
diff --git a/assets/posts_zuckerberg-letter-post.md.DLLobXDS.js b/assets/posts_zuckerberg-letter-post.md.DLLobXDS.js
new file mode 100644
index 0000000..5c675ec
--- /dev/null
+++ b/assets/posts_zuckerberg-letter-post.md.DLLobXDS.js
@@ -0,0 +1 @@
+import{_ as t,c as e,k as r,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/zuck_point.DdBiB58Z.jpg",i="/assets/robin_point.CkKI1JvS.jpeg",A=JSON.parse('{"title":"【睁眼看世界 🌍】|扎克伯克写给开发者的一封信:开源 AI 是未来的前进之路","description":"","frontmatter":{"title":"【睁眼看世界 🌍】|扎克伯克写给开发者的一封信:开源 AI 是未来的前进之路","date":"2024-10-17T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"pinned":true},"headers":[],"relativePath":"posts/zuckerberg-letter-post.md","filePath":"posts/zuckerberg-letter-post.md"}'),n={name:"posts/zuckerberg-letter-post.md"};function p(s,a,h,c,u,b){return o(),e("div",null,a[0]||(a[0]=[r('本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
原文:https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/ ✍️ 写于 2024 年 7 月 23 日 By 马克·扎克伯格,创始人兼 CEO
开源 AI 是未来的前进之路 在高性能计算的早期阶段,当时大部分科技公司都大力投资于开发自己的闭源版本 Unix。在那个时代,是很难想象可以有其他方法来发展出先进的软件。然而,最终是开源 Linux 脱颖而出获得了广泛的认可 —— 起初是因为它允许开发者可以按自己的想法随意修改其代码,并且更加省钱。而随着时间的推移,它变得更加先进、更加安全,并且拥有一个比任何闭源 Unix 更广泛的生态,能够支持更多功能。如今,Linux 已经成为云计算和大多数移动设备操作系统的行业标准基础——并且我们都受益于其衍生的优秀产品。
我相信人工智能将以类似的方式发展。如今,几家科技公司正在开发领先的闭源模型,但是开源模型正在迅速缩小差距。去年,Llama 2 只能与过时的模型相比较,而在今年,Llama 3 已经能与最先进的模型进行竞争,并且在某些方面处于领先。明年开始,我们预计未来的 Llama 系列模型将成为行业内最先进的模型。但在此之前,Llama 已经在开放性、可修改性和成本效益方面处于领先地位。
今天,我们正在迈向开源人工智能成为行业标准的下一步。我们发布了 Llama 3.1 405B,这是第一个达到业内前沿水平的开源人工智能模型,同时还推出了新的改进版 Llama 3.1 70B 和 8B 模型。相对闭源模型,除了拥有明显更好的性价比之外,405B 模型开源的事实将使其成为进行微调和蒸馏小模型的最佳选择。
除了发布模型,我们还与一系列公司合作,推动更广泛的生态建设。
亚马逊、Databricks 和 NVIDIA 正在推出一整套服务,以支持开发者微调和蒸馏他们自己的模型。 像 Groq 这样的初创公司已经为所有新模型构建了低延迟、低成本的推理服务。 模型将在所有主流云厂商服务中可用,包括 AWS、Azure、Google、Oracle 等。 Scale.AI、DELL、德勤等公司已准备好帮助企业部署 Llama,并使用自有数据训练定制模型。 随着社区发展和更多公司开发新服务,我们可以共同将 Llama 打造为行业标准,并让 AI 普惠于每个人。
Meta 致力于开源人工智能。稍后我将阐述为什么我认为开源是最好的开发栈,为什么开源 Llama 对 Meta 有利,以及为什么开源 AI 对世界有益 。同时也正因如此,开源社区将会长期存在。
为什么开源 AI 对开发者有利 当我与全球的开发者、CEO、政府官员交流时,通常会听到几个主题:
我们需要训练、微调和蒸馏我们自己的模型。 每个组织都有不同的需求,不同规模的模型能够最好的满足这些需求,并且这些模型使用他们自己的特定数据进行训练或微调。端侧任务和分类任务需要小的模型,而更复杂的任务则需要更大的模型。现在,你可以使用最先进的 Llama 模型,使用自己的数据继续进行训练,然后将其蒸馏成最合适的模型尺寸——无需我们或任何其他人看到你的数据。我们需要掌控自己的命运,而不是被一个闭源模型厂商所束缚。 许多组织不希望依赖他们无法自行运行和控制的模型。他们不希望闭源模型厂商能够更改自己的模型、修改使用条款,甚至完全停止服务。他们也不希望被束缚在拥有模型专属权的某单一云服务厂商中。开源使得生态圈内的公司拥有兼容的工具链,你可以轻松的在他们之间横跳。我们需要保护我们自己的数据。 许多组织需要处理敏感的数据,这些数据需要保密,并且不能通过云 API 传输到闭源模型。而其他有些组织仅仅只是不信任闭源模型厂商提供的数据。开源解决了这些问题,你可以在任何地方运行这些模型。另外开源软件由于开发过程更加透明,往往也更加安全,公众也认同这一观点。我们需要一个高效、可负担得起的模型。 开发者可以在自己的基础设施上以闭源模型(如 GPT-4o)大约 50% 的成本运行 Llama 3.1 405B 进行推理,无论是在线还是离线推理任务。我们想投资于一个能长期成为事实标准的生态。 许多人看到开源模型比闭源模型发展得更快,他们更希望在能够长期带来巨大优势的架构上建立自己的系统。Meta 的商业模式是为用户建立最佳的体验和服务。为了实现这一目标,我们必须确保自己始终能够获得最先进的技术,并且不会被束缚在竞争对手的闭源生态系统中,这些系统可能会限制我们的产品创新。
我的一个重要经历是,在建设我们的服务时受到了 Apple 平台的诸多限制,从苹果的开发者税,到他们施加的任意规则,再到阻止我们推出的所有产品创新。显然,如果我们能够构建最好的产品,并且竞争对手不进行限制,Meta 和许多其他公司都将能够为用户建设更好的服务。从哲学层面上讲,这正是我如此坚定不移的为下一代 AI 和 AR/VR 领域建立开源生态的主要原因
人们经常问我是否担心开源 Llama 会让我们失去技术优势,但我认为这种担忧忽略了几个重要因素:
首先,为了确保我们拥有最先进的技术,并且不会被长期束缚在某一封闭生态里,Llama 需要发展成为一个完整的生态系统,包括开发工具、效率提升、芯片优化和其他集成软件。如果我们是唯一使用 Llama 的公司,这种生态系统就不会发展,我们将不会比当初的闭源 Unix 好到哪去。 其次,我预计 AI 的发展将持续伴随着激烈的竞争,这意味着在当前时点开源某个模型,并不会使我们在推出下一个最佳模型时失去优势。Llama 成为行业标准的路径是一代又一代的保持竞争力、效率和开放性。 第三,Meta 与闭源模型厂商的的关键区别在于,出售 AI 模型的访问权并不是我们的商业模式。这意味着公开发布 Llama 不会削减公司的收入、可持续性或者投资 research 的能力 ,而闭源厂商则完全相反(这也是为什么几家闭源厂商一直在积极游说政府反对开源的原因之一) 最后,Meta 拥有着深耕开源项目的悠久历史和成功经验。通过 Open Compute Project 共享我们的服务器、网络和数据中心设计,以及让供应链标准化了我们的设计,我们节省了数十亿美元。同时我们也受益于开源生态的创新,如 PyTorch、React 以及其他业内领先的开源项目。当我们长期坚持开源的方法时,它始终是对我们有利的。 为什么开源 AI 对全世界有利 我坚信在实现 AI 光明前景的过程中,开源是不可或缺的一环。AI 技术相比任何其他现代技术都展现出了更大的潜力,可以提升人类的生产力、创造力和生活质量,加速经济增长,同时推动医学和科学研究领域的进步。而开源将确保全球更多人能够获得 AI 带来的好处和机会,避免权力集中在少数公司手中,使得技术能够更公平、更安全地服务于整个社会。
关于开源 AI 模型的安全性一直存在争论,而我的观点是,开源 AI 将比闭源更安全。我认为政府将会认识到开源是符合他们的自身利益的,因为开源会促进全世界的繁荣和安全。
我对安全性的认知是,我们需要防范两类危害: unintentional and intentional (非故意危害和故意危害)。非故意危害指设计和运行 AI 系统的人没有故意造成伤害的意图,但该系统仍然可能无意中引发一些负面后果。例如,现代 AI 模型可能无意中给出错误的健康建议。或者在未来场景中,有些人担心模型可能会无意中自我复制或过度追求目标,进而对人类造成危害。故意危害则是指恶意使用 AI 模型来造成危害的行为。
值得注意的是,人们对 AI 的担忧主要集中在非故意危害方面——从 AI 系统对数十亿使用者的影响,到人类未来面临的许多真正灾难性的科幻场景。在这方面,开源技术明显是更安全的,因为其系统更加透明,能够经得起更广泛的审查。从历史上看,正是由于这些原因,开源软件在安全性方面表现更为出色。同样,使用像 Llama Guard 这样安全系统的 Llama 模型,可能比闭源模型更安全和可靠。因此,大多数关于开源 AI 安全性的讨论都集中在故意危害上。
我们的安全流程包括严格的测试和红队攻击,以评估我们的模型是否具有造成实质性危害的能力,目的是在发布模型之前减轻风险。由于这些模型是开源的,任何人都可以自行进行测试。我们必须牢记,这些模型是通过互联网上已有的信息进行训练的。因此在考虑危害时,应该从模型造成的危害,是否能够比从 Google 或其他搜索结果中快速获取的信息中造成的危害更大这一点开始。
在思考关于故意危害的问题时,将个人或小规模单位能够做的事情,与像国家等这类拥有大量资源的大型单位能够做的事情区分开来,是非常有帮助的。
未来的某个时刻,个别不法分子可能会利用 AI 模型的智能,从互联网上的信息中制造出全新的危害。在那时,“权力”的平衡将对 AI 安全至关重要。我认为,生活在一个 AI 被广泛部署的世界中会更好,因为这样一来,实力更强的大型机构可以制约小型的不法分子。这种方式与我们在社交网络上管理安全的方式类似——我们更强大的 AI 系统能够识别并阻止那些使用小型 AI 系统的低级别威胁者。更广泛地来看,大型机构大规模部署 AI 将会促进社会的安全和稳定。只要大家都能获得同代的 AI 模型(开源技术有助于实现这一点),拥有更多计算资源的政府和机构就能够对抗那些计算资源较少的不法分子。
接下来的问题是,…… 【请自行批判性阅读该段原文】 。
在你展望未来的机遇时,请记住,当今大多数行业领先的科技公司和科学研究都是建立在开源软件之上的。下一代企业和科学研究也将基于开源 AI,只要我们共同投入其中。这包括刚刚起步的初创企业,以及那些因缺乏资源无法从头开始开发 SOTA AI 的大学和国家。
归根结底,开源 AI 是我们充分利用这项技术、为世界上所有人创造最大经济机遇和安全性的最佳途径。
让我们共同构建这一切 在过去,Meta 是为自身开发这一系列 Llama 模型,然后对外发布,但并未专注于构建更广泛的生态系统。然而在这次发布中,我们采用了不同的方式。我们正在内部组建团队,以支持尽可能多的开发者和合作伙伴使用 Llama,并积极建立合作关系,使生态系统中的更多公司也能够为其客户提供独特的功能。 我相信,Llama 3.1 的发布将成为行业的一个转折点,届时大多数开发者将主要采用开源方案,而这一趋势只会向前加速。我希望你能加入我们,共同推动 AI 的普惠发展,让全世界都能享受到这项技术的益处。
💪, MZ
编者碎碎念 看完小扎同志写的信,再聊聊厂长 Robin 的观点。在此我就不细说具体的理念,而是做个总结和对比。
厂长的公开言论可以看 https://www.163.com/dy/article/JBSQH9HD0511DSSR.html (随便找的)
Robin 观点 1:论效率,开源模型没法跟闭源模型比 Robin 观点 2:“开源美好”的逻辑在大模型时代不成立 结论:表面是理念的分歧,但实际上是公司商业策略的差异 可以看到,Robin 更关注商业效率和闭源模型的市场应用,而扎克伯克则看重开源带来的长期生态建设和创新潜力。
往大的说,这两位科技领袖可能也反映了他们对 AI 未来发展的不同理解:Robin 代表着通过集中资源快速迭代获取竞争优势的中国模式,而小扎同志则提倡一种去中心化、开放合作的西方创新生态。
但往小的说,可能最根本的原因,就像小扎同志说的,公开发布 Llama 不会削减 Meta 公司的收入。但对于百度,公开发布开源大模型,可能真的会影响到自己的搜索业务收入。
写在最后 【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
',50)]))}const d=t(n,[["render",p]]);export{A as __pageData,d as default};
diff --git a/assets/posts_zuckerberg-letter-post.md.DLLobXDS.lean.js b/assets/posts_zuckerberg-letter-post.md.DLLobXDS.lean.js
new file mode 100644
index 0000000..5c675ec
--- /dev/null
+++ b/assets/posts_zuckerberg-letter-post.md.DLLobXDS.lean.js
@@ -0,0 +1 @@
+import{_ as t,c as e,k as r,o}from"./chunks/framework.D1-4jGi8.js";const l="/assets/zuck_point.DdBiB58Z.jpg",i="/assets/robin_point.CkKI1JvS.jpeg",A=JSON.parse('{"title":"【睁眼看世界 🌍】|扎克伯克写给开发者的一封信:开源 AI 是未来的前进之路","description":"","frontmatter":{"title":"【睁眼看世界 🌍】|扎克伯克写给开发者的一封信:开源 AI 是未来的前进之路","date":"2024-10-17T00:00:00.000Z","author":{"name":"孙钟恺","github":"sunzhongkai588"},"pinned":true},"headers":[],"relativePath":"posts/zuckerberg-letter-post.md","filePath":"posts/zuckerberg-letter-post.md"}'),n={name:"posts/zuckerberg-letter-post.md"};function p(s,a,h,c,u,b){return o(),e("div",null,a[0]||(a[0]=[r('本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
原文:https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/ ✍️ 写于 2024 年 7 月 23 日 By 马克·扎克伯格,创始人兼 CEO
开源 AI 是未来的前进之路 在高性能计算的早期阶段,当时大部分科技公司都大力投资于开发自己的闭源版本 Unix。在那个时代,是很难想象可以有其他方法来发展出先进的软件。然而,最终是开源 Linux 脱颖而出获得了广泛的认可 —— 起初是因为它允许开发者可以按自己的想法随意修改其代码,并且更加省钱。而随着时间的推移,它变得更加先进、更加安全,并且拥有一个比任何闭源 Unix 更广泛的生态,能够支持更多功能。如今,Linux 已经成为云计算和大多数移动设备操作系统的行业标准基础——并且我们都受益于其衍生的优秀产品。
我相信人工智能将以类似的方式发展。如今,几家科技公司正在开发领先的闭源模型,但是开源模型正在迅速缩小差距。去年,Llama 2 只能与过时的模型相比较,而在今年,Llama 3 已经能与最先进的模型进行竞争,并且在某些方面处于领先。明年开始,我们预计未来的 Llama 系列模型将成为行业内最先进的模型。但在此之前,Llama 已经在开放性、可修改性和成本效益方面处于领先地位。
今天,我们正在迈向开源人工智能成为行业标准的下一步。我们发布了 Llama 3.1 405B,这是第一个达到业内前沿水平的开源人工智能模型,同时还推出了新的改进版 Llama 3.1 70B 和 8B 模型。相对闭源模型,除了拥有明显更好的性价比之外,405B 模型开源的事实将使其成为进行微调和蒸馏小模型的最佳选择。
除了发布模型,我们还与一系列公司合作,推动更广泛的生态建设。
亚马逊、Databricks 和 NVIDIA 正在推出一整套服务,以支持开发者微调和蒸馏他们自己的模型。 像 Groq 这样的初创公司已经为所有新模型构建了低延迟、低成本的推理服务。 模型将在所有主流云厂商服务中可用,包括 AWS、Azure、Google、Oracle 等。 Scale.AI、DELL、德勤等公司已准备好帮助企业部署 Llama,并使用自有数据训练定制模型。 随着社区发展和更多公司开发新服务,我们可以共同将 Llama 打造为行业标准,并让 AI 普惠于每个人。
Meta 致力于开源人工智能。稍后我将阐述为什么我认为开源是最好的开发栈,为什么开源 Llama 对 Meta 有利,以及为什么开源 AI 对世界有益 。同时也正因如此,开源社区将会长期存在。
为什么开源 AI 对开发者有利 当我与全球的开发者、CEO、政府官员交流时,通常会听到几个主题:
我们需要训练、微调和蒸馏我们自己的模型。 每个组织都有不同的需求,不同规模的模型能够最好的满足这些需求,并且这些模型使用他们自己的特定数据进行训练或微调。端侧任务和分类任务需要小的模型,而更复杂的任务则需要更大的模型。现在,你可以使用最先进的 Llama 模型,使用自己的数据继续进行训练,然后将其蒸馏成最合适的模型尺寸——无需我们或任何其他人看到你的数据。我们需要掌控自己的命运,而不是被一个闭源模型厂商所束缚。 许多组织不希望依赖他们无法自行运行和控制的模型。他们不希望闭源模型厂商能够更改自己的模型、修改使用条款,甚至完全停止服务。他们也不希望被束缚在拥有模型专属权的某单一云服务厂商中。开源使得生态圈内的公司拥有兼容的工具链,你可以轻松的在他们之间横跳。我们需要保护我们自己的数据。 许多组织需要处理敏感的数据,这些数据需要保密,并且不能通过云 API 传输到闭源模型。而其他有些组织仅仅只是不信任闭源模型厂商提供的数据。开源解决了这些问题,你可以在任何地方运行这些模型。另外开源软件由于开发过程更加透明,往往也更加安全,公众也认同这一观点。我们需要一个高效、可负担得起的模型。 开发者可以在自己的基础设施上以闭源模型(如 GPT-4o)大约 50% 的成本运行 Llama 3.1 405B 进行推理,无论是在线还是离线推理任务。我们想投资于一个能长期成为事实标准的生态。 许多人看到开源模型比闭源模型发展得更快,他们更希望在能够长期带来巨大优势的架构上建立自己的系统。Meta 的商业模式是为用户建立最佳的体验和服务。为了实现这一目标,我们必须确保自己始终能够获得最先进的技术,并且不会被束缚在竞争对手的闭源生态系统中,这些系统可能会限制我们的产品创新。
我的一个重要经历是,在建设我们的服务时受到了 Apple 平台的诸多限制,从苹果的开发者税,到他们施加的任意规则,再到阻止我们推出的所有产品创新。显然,如果我们能够构建最好的产品,并且竞争对手不进行限制,Meta 和许多其他公司都将能够为用户建设更好的服务。从哲学层面上讲,这正是我如此坚定不移的为下一代 AI 和 AR/VR 领域建立开源生态的主要原因
人们经常问我是否担心开源 Llama 会让我们失去技术优势,但我认为这种担忧忽略了几个重要因素:
首先,为了确保我们拥有最先进的技术,并且不会被长期束缚在某一封闭生态里,Llama 需要发展成为一个完整的生态系统,包括开发工具、效率提升、芯片优化和其他集成软件。如果我们是唯一使用 Llama 的公司,这种生态系统就不会发展,我们将不会比当初的闭源 Unix 好到哪去。 其次,我预计 AI 的发展将持续伴随着激烈的竞争,这意味着在当前时点开源某个模型,并不会使我们在推出下一个最佳模型时失去优势。Llama 成为行业标准的路径是一代又一代的保持竞争力、效率和开放性。 第三,Meta 与闭源模型厂商的的关键区别在于,出售 AI 模型的访问权并不是我们的商业模式。这意味着公开发布 Llama 不会削减公司的收入、可持续性或者投资 research 的能力 ,而闭源厂商则完全相反(这也是为什么几家闭源厂商一直在积极游说政府反对开源的原因之一) 最后,Meta 拥有着深耕开源项目的悠久历史和成功经验。通过 Open Compute Project 共享我们的服务器、网络和数据中心设计,以及让供应链标准化了我们的设计,我们节省了数十亿美元。同时我们也受益于开源生态的创新,如 PyTorch、React 以及其他业内领先的开源项目。当我们长期坚持开源的方法时,它始终是对我们有利的。 为什么开源 AI 对全世界有利 我坚信在实现 AI 光明前景的过程中,开源是不可或缺的一环。AI 技术相比任何其他现代技术都展现出了更大的潜力,可以提升人类的生产力、创造力和生活质量,加速经济增长,同时推动医学和科学研究领域的进步。而开源将确保全球更多人能够获得 AI 带来的好处和机会,避免权力集中在少数公司手中,使得技术能够更公平、更安全地服务于整个社会。
关于开源 AI 模型的安全性一直存在争论,而我的观点是,开源 AI 将比闭源更安全。我认为政府将会认识到开源是符合他们的自身利益的,因为开源会促进全世界的繁荣和安全。
我对安全性的认知是,我们需要防范两类危害: unintentional and intentional (非故意危害和故意危害)。非故意危害指设计和运行 AI 系统的人没有故意造成伤害的意图,但该系统仍然可能无意中引发一些负面后果。例如,现代 AI 模型可能无意中给出错误的健康建议。或者在未来场景中,有些人担心模型可能会无意中自我复制或过度追求目标,进而对人类造成危害。故意危害则是指恶意使用 AI 模型来造成危害的行为。
值得注意的是,人们对 AI 的担忧主要集中在非故意危害方面——从 AI 系统对数十亿使用者的影响,到人类未来面临的许多真正灾难性的科幻场景。在这方面,开源技术明显是更安全的,因为其系统更加透明,能够经得起更广泛的审查。从历史上看,正是由于这些原因,开源软件在安全性方面表现更为出色。同样,使用像 Llama Guard 这样安全系统的 Llama 模型,可能比闭源模型更安全和可靠。因此,大多数关于开源 AI 安全性的讨论都集中在故意危害上。
我们的安全流程包括严格的测试和红队攻击,以评估我们的模型是否具有造成实质性危害的能力,目的是在发布模型之前减轻风险。由于这些模型是开源的,任何人都可以自行进行测试。我们必须牢记,这些模型是通过互联网上已有的信息进行训练的。因此在考虑危害时,应该从模型造成的危害,是否能够比从 Google 或其他搜索结果中快速获取的信息中造成的危害更大这一点开始。
在思考关于故意危害的问题时,将个人或小规模单位能够做的事情,与像国家等这类拥有大量资源的大型单位能够做的事情区分开来,是非常有帮助的。
未来的某个时刻,个别不法分子可能会利用 AI 模型的智能,从互联网上的信息中制造出全新的危害。在那时,“权力”的平衡将对 AI 安全至关重要。我认为,生活在一个 AI 被广泛部署的世界中会更好,因为这样一来,实力更强的大型机构可以制约小型的不法分子。这种方式与我们在社交网络上管理安全的方式类似——我们更强大的 AI 系统能够识别并阻止那些使用小型 AI 系统的低级别威胁者。更广泛地来看,大型机构大规模部署 AI 将会促进社会的安全和稳定。只要大家都能获得同代的 AI 模型(开源技术有助于实现这一点),拥有更多计算资源的政府和机构就能够对抗那些计算资源较少的不法分子。
接下来的问题是,…… 【请自行批判性阅读该段原文】 。
在你展望未来的机遇时,请记住,当今大多数行业领先的科技公司和科学研究都是建立在开源软件之上的。下一代企业和科学研究也将基于开源 AI,只要我们共同投入其中。这包括刚刚起步的初创企业,以及那些因缺乏资源无法从头开始开发 SOTA AI 的大学和国家。
归根结底,开源 AI 是我们充分利用这项技术、为世界上所有人创造最大经济机遇和安全性的最佳途径。
让我们共同构建这一切 在过去,Meta 是为自身开发这一系列 Llama 模型,然后对外发布,但并未专注于构建更广泛的生态系统。然而在这次发布中,我们采用了不同的方式。我们正在内部组建团队,以支持尽可能多的开发者和合作伙伴使用 Llama,并积极建立合作关系,使生态系统中的更多公司也能够为其客户提供独特的功能。 我相信,Llama 3.1 的发布将成为行业的一个转折点,届时大多数开发者将主要采用开源方案,而这一趋势只会向前加速。我希望你能加入我们,共同推动 AI 的普惠发展,让全世界都能享受到这项技术的益处。
💪, MZ
编者碎碎念 看完小扎同志写的信,再聊聊厂长 Robin 的观点。在此我就不细说具体的理念,而是做个总结和对比。
厂长的公开言论可以看 https://www.163.com/dy/article/JBSQH9HD0511DSSR.html (随便找的)
Robin 观点 1:论效率,开源模型没法跟闭源模型比 Robin 观点 2:“开源美好”的逻辑在大模型时代不成立 结论:表面是理念的分歧,但实际上是公司商业策略的差异 可以看到,Robin 更关注商业效率和闭源模型的市场应用,而扎克伯克则看重开源带来的长期生态建设和创新潜力。
往大的说,这两位科技领袖可能也反映了他们对 AI 未来发展的不同理解:Robin 代表着通过集中资源快速迭代获取竞争优势的中国模式,而小扎同志则提倡一种去中心化、开放合作的西方创新生态。
但往小的说,可能最根本的原因,就像小扎同志说的,公开发布 Llama 不会削减 Meta 公司的收入。但对于百度,公开发布开源大模型,可能真的会影响到自己的搜索业务收入。
写在最后 【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
',50)]))}const d=t(n,[["render",p]]);export{A as __pageData,d as default};
diff --git a/assets/pp-coffee.B6ybez7E.jpeg b/assets/pp-coffee.B6ybez7E.jpeg
new file mode 100644
index 0000000..0888ae1
Binary files /dev/null and b/assets/pp-coffee.B6ybez7E.jpeg differ
diff --git a/assets/robin_point.CkKI1JvS.jpeg b/assets/robin_point.CkKI1JvS.jpeg
new file mode 100644
index 0000000..0d446c2
Binary files /dev/null and b/assets/robin_point.CkKI1JvS.jpeg differ
diff --git a/assets/round-table.Bj71g6wR.jpeg b/assets/round-table.Bj71g6wR.jpeg
new file mode 100644
index 0000000..8f3dcc1
Binary files /dev/null and b/assets/round-table.Bj71g6wR.jpeg differ
diff --git a/assets/sanbu-01.BmLwkxl7.jpg b/assets/sanbu-01.BmLwkxl7.jpg
new file mode 100644
index 0000000..763f0ca
Binary files /dev/null and b/assets/sanbu-01.BmLwkxl7.jpg differ
diff --git a/assets/sanbu-02.CbmTx2S8.jpg b/assets/sanbu-02.CbmTx2S8.jpg
new file mode 100644
index 0000000..db509a1
Binary files /dev/null and b/assets/sanbu-02.CbmTx2S8.jpg differ
diff --git a/assets/sanbu-03.CN4yarz2.jpg b/assets/sanbu-03.CN4yarz2.jpg
new file mode 100644
index 0000000..000eba7
Binary files /dev/null and b/assets/sanbu-03.CN4yarz2.jpg differ
diff --git a/assets/sanbu-04.xtcdIdF6.jpg b/assets/sanbu-04.xtcdIdF6.jpg
new file mode 100644
index 0000000..48f3fa0
Binary files /dev/null and b/assets/sanbu-04.xtcdIdF6.jpg differ
diff --git a/assets/sanbu-05.DXN_Ieqp.jpg b/assets/sanbu-05.DXN_Ieqp.jpg
new file mode 100644
index 0000000..f31d5e7
Binary files /dev/null and b/assets/sanbu-05.DXN_Ieqp.jpg differ
diff --git a/assets/sanbu-06.UwhvCp2U.jpg b/assets/sanbu-06.UwhvCp2U.jpg
new file mode 100644
index 0000000..92f9dd2
Binary files /dev/null and b/assets/sanbu-06.UwhvCp2U.jpg differ
diff --git a/assets/sanbu-07.DmjkGGLp.jpg b/assets/sanbu-07.DmjkGGLp.jpg
new file mode 100644
index 0000000..a72c627
Binary files /dev/null and b/assets/sanbu-07.DmjkGGLp.jpg differ
diff --git a/assets/sanbu-08.Ck6rEVYm.jpg b/assets/sanbu-08.Ck6rEVYm.jpg
new file mode 100644
index 0000000..6b02a5e
Binary files /dev/null and b/assets/sanbu-08.Ck6rEVYm.jpg differ
diff --git a/assets/sanbu-09.Dddg5DQv.jpg b/assets/sanbu-09.Dddg5DQv.jpg
new file mode 100644
index 0000000..3513988
Binary files /dev/null and b/assets/sanbu-09.Dddg5DQv.jpg differ
diff --git a/assets/sanbu-10.CLzscM3v.jpg b/assets/sanbu-10.CLzscM3v.jpg
new file mode 100644
index 0000000..db25ee3
Binary files /dev/null and b/assets/sanbu-10.CLzscM3v.jpg differ
diff --git a/assets/sanbu-11.zJPpyF50.jpg b/assets/sanbu-11.zJPpyF50.jpg
new file mode 100644
index 0000000..b0fa283
Binary files /dev/null and b/assets/sanbu-11.zJPpyF50.jpg differ
diff --git a/assets/sanbu-12.4-hUXVF8.jpg b/assets/sanbu-12.4-hUXVF8.jpg
new file mode 100644
index 0000000..71e5a10
Binary files /dev/null and b/assets/sanbu-12.4-hUXVF8.jpg differ
diff --git a/assets/shun-01.CWHiLdW6.jpg b/assets/shun-01.CWHiLdW6.jpg
new file mode 100644
index 0000000..0aa3736
Binary files /dev/null and b/assets/shun-01.CWHiLdW6.jpg differ
diff --git a/assets/shun-02.D_d2jXpo.jpg b/assets/shun-02.D_d2jXpo.jpg
new file mode 100644
index 0000000..be46d7d
Binary files /dev/null and b/assets/shun-02.D_d2jXpo.jpg differ
diff --git a/assets/shun-03.DUtFi7rq.jpg b/assets/shun-03.DUtFi7rq.jpg
new file mode 100644
index 0000000..41d3ca0
Binary files /dev/null and b/assets/shun-03.DUtFi7rq.jpg differ
diff --git a/assets/shun-04.CQ3SJyp9.jpg b/assets/shun-04.CQ3SJyp9.jpg
new file mode 100644
index 0000000..9c6f282
Binary files /dev/null and b/assets/shun-04.CQ3SJyp9.jpg differ
diff --git a/assets/shun-05.BnKWAdLF.jpg b/assets/shun-05.BnKWAdLF.jpg
new file mode 100644
index 0000000..609fe30
Binary files /dev/null and b/assets/shun-05.BnKWAdLF.jpg differ
diff --git a/assets/starter-01.BQhXy2TN.png b/assets/starter-01.BQhXy2TN.png
new file mode 100644
index 0000000..bb7d0be
Binary files /dev/null and b/assets/starter-01.BQhXy2TN.png differ
diff --git a/assets/starter-02.Bf2WfiHX.png b/assets/starter-02.Bf2WfiHX.png
new file mode 100644
index 0000000..b38da10
Binary files /dev/null and b/assets/starter-02.Bf2WfiHX.png differ
diff --git a/assets/starter-03.BOZeuzfN.png b/assets/starter-03.BOZeuzfN.png
new file mode 100644
index 0000000..4dbf4a2
Binary files /dev/null and b/assets/starter-03.BOZeuzfN.png differ
diff --git a/assets/starter-04.zLBRTWXy.png b/assets/starter-04.zLBRTWXy.png
new file mode 100644
index 0000000..11299d8
Binary files /dev/null and b/assets/starter-04.zLBRTWXy.png differ
diff --git a/assets/starter-05.B8V6TaI0.png b/assets/starter-05.B8V6TaI0.png
new file mode 100644
index 0000000..dfdca45
Binary files /dev/null and b/assets/starter-05.B8V6TaI0.png differ
diff --git a/assets/starter-06.CtTR9ub7.png b/assets/starter-06.CtTR9ub7.png
new file mode 100644
index 0000000..5c6de61
Binary files /dev/null and b/assets/starter-06.CtTR9ub7.png differ
diff --git a/assets/starter-07.CmzgjHu_.png b/assets/starter-07.CmzgjHu_.png
new file mode 100644
index 0000000..25f98de
Binary files /dev/null and b/assets/starter-07.CmzgjHu_.png differ
diff --git a/assets/starter-08.BWHELzJ3.png b/assets/starter-08.BWHELzJ3.png
new file mode 100644
index 0000000..33506d5
Binary files /dev/null and b/assets/starter-08.BWHELzJ3.png differ
diff --git a/assets/starter-11.jq6tV3JA.png b/assets/starter-11.jq6tV3JA.png
new file mode 100644
index 0000000..85b3a3d
Binary files /dev/null and b/assets/starter-11.jq6tV3JA.png differ
diff --git a/assets/style.CA8M-uRU.css b/assets/style.CA8M-uRU.css
new file mode 100644
index 0000000..aba3e6a
--- /dev/null
+++ b/assets/style.CA8M-uRU.css
@@ -0,0 +1 @@
+figure{text-align:center}figcaption{color:orange;border-bottom:1px solid #d9d9d9;display:inline-block;color:#999;padding:2px}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px rgb(var(--tw-prose-kbd-shadows) / 10%),0 3px rgb(var(--tw-prose-kbd-shadows) / 10%);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: 17 24 39;--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: 255 255 255;--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.fixed{position:fixed}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.\!mt-0{margin-top:0!important}.mb-3{margin-bottom:.75rem}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.mr-10{margin-right:2.5rem}.mr-2{margin-right:.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.hidden{display:none}.h-10{height:2.5rem}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.max-w-3xl{max-width:48rem}.max-w-none{max-width:none}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity))}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.border{border-width:1px}.bg-green-200{--tw-bg-opacity: 1;background-color:rgb(187 247 208 / var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity))}.p-0{padding:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-10{padding-bottom:2.5rem}.pb-16{padding-bottom:4rem}.pb-8{padding-bottom:2rem}.pl-10{padding-left:2.5rem}.pt-10{padding-top:2.5rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-medium{font-weight:500}.uppercase{text-transform:uppercase}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-9{line-height:2.25rem}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.outline{outline-style:solid}.outline-green-700{outline-color:#15803d}.vp-code span{color:var(--shiki-dark, inherit)}:root{--c-brand: #3eaf7c;--c-brand-light: #4abf8a}nav img{vertical-align:middle}p img{margin:0 auto}.prose hr{border-top:1px solid #e5e7eb}.link{color:var(--c-brand)}.link:hover{color:var(--c-brand-light)}.header-anchor{display:none}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:#999}.token.punctuation{color:#ccc}.token.tag,.token.attr-name,.token.namespace,.token.deleted{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.number,.token.function{color:#f08d49}.token.property,.token.class-name,.token.constant,.token.symbol{color:#f8c555}.token.selector,.token.important,.token.atrule,.token.keyword,.token.builtin{color:#cc99cd}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable{color:#7ec699}.token.operator,.token.entity,.token.url{color:#67cdcc}.token.important,.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:#67cdcc}button.copy{display:none}span.lang{position:absolute;right:.5em;font-size:.75em;color:#999;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.custom-block{margin:28px 0;padding:0 24px 2px;border-radius:8px;overflow-x:auto;position:relative;font-size:14px;line-height:1.3;font-weight:500;color:#444;background-color:#f9f9f9}.custom-block .custom-block-title{margin-bottom:8px;font-size:15px;font-weight:700}.custom-block.tip{border:1px solid #42b883}.custom-block.tip:before{color:#42b883}@media (prefers-color-scheme: dark){.dark\:prose-invert{--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders)}}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.hover\:outline:hover{outline-style:solid}@media (min-width: 640px){.sm\:inline{display:inline}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:leading-10{line-height:2.5rem}}@media (min-width: 768px){.md\:inline{display:inline}.md\:flex-row{flex-direction:row}.md\:justify-center{justify-content:center}.md\:space-x-12>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(3rem * var(--tw-space-x-reverse));margin-left:calc(3rem * calc(1 - var(--tw-space-x-reverse)))}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.md\:space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.md\:pl-0{padding-left:0}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 1280px){.xl\:col-span-3{grid-column:span 3 / span 3}.xl\:col-start-1{grid-column-start:1}.xl\:row-span-2{grid-row:span 2 / span 2}.xl\:row-start-2{grid-row-start:2}.xl\:block{display:block}.xl\:grid{display:grid}.xl\:max-w-5xl{max-width:64rem}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:items-baseline{align-items:baseline}.xl\:gap-x-10{column-gap:2.5rem}.xl\:space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(0px * var(--tw-space-x-reverse));margin-left:calc(0px * calc(1 - var(--tw-space-x-reverse)))}.xl\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.xl\:space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.xl\:divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.xl\:divide-y-0>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(0px * var(--tw-divide-y-reverse))}.xl\:divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(229 231 235 / var(--tw-divide-opacity))}.xl\:border-b{border-bottom-width:1px}.xl\:border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity))}.xl\:px-0{padding-left:0;padding-right:0}.xl\:pb-0{padding-bottom:0}.xl\:pb-10{padding-bottom:2.5rem}.xl\:pb-20{padding-bottom:5rem}.xl\:pt-11{padding-top:2.75rem}}@media (prefers-color-scheme: dark){.dark\:divide-slate-200\/5>:not([hidden])~:not([hidden]){border-color:#e2e8f00d}.dark\:bg-green-700{--tw-bg-opacity: 1;background-color:rgb(21 128 61 / var(--tw-bg-opacity))}.dark\:bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity))}.dark\:bg-zinc-700{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity))}.dark\:text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.dark\:text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity))}.dark\:text-neutral-400{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity))}.dark\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:hover\:text-gray-200:hover{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}@media (min-width: 1280px){.dark\:xl\:divide-slate-200\/5>:not([hidden])~:not([hidden]){border-color:#e2e8f00d}.dark\:xl\:border-slate-200\/5{border-color:#e2e8f00d}}}table{display:block;width:100%;width:max-content;max-width:100%;overflow:auto}div{word-wrap:break-word}.pwa-toast{position:fixed;right:0;bottom:0;margin:16px;padding:12px;border:1px solid #8885;border-radius:4px;z-index:100;text-align:left;box-shadow:3px 4px 5px #8885;background-color:#fff}.pwa-toast #pwa-message{margin-bottom:8px}.pwa-toast button{border:1px solid #8885;outline:none;margin-right:5px;border-radius:2px;padding:3px 10px}
diff --git a/assets/sun_host.BI4VmHmn.jpg b/assets/sun_host.BI4VmHmn.jpg
new file mode 100644
index 0000000..2642302
Binary files /dev/null and b/assets/sun_host.BI4VmHmn.jpg differ
diff --git a/assets/tao-01.BX6ijUAN.jpeg b/assets/tao-01.BX6ijUAN.jpeg
new file mode 100644
index 0000000..587f2f3
Binary files /dev/null and b/assets/tao-01.BX6ijUAN.jpeg differ
diff --git a/assets/tao-02.BUnT8yba.jpeg b/assets/tao-02.BUnT8yba.jpeg
new file mode 100644
index 0000000..b430796
Binary files /dev/null and b/assets/tao-02.BUnT8yba.jpeg differ
diff --git a/assets/tao-03.CuBFfcLy.jpeg b/assets/tao-03.CuBFfcLy.jpeg
new file mode 100644
index 0000000..c0767e6
Binary files /dev/null and b/assets/tao-03.CuBFfcLy.jpeg differ
diff --git a/assets/tao-04.V71B6Cdn.jpeg b/assets/tao-04.V71B6Cdn.jpeg
new file mode 100644
index 0000000..7653d13
Binary files /dev/null and b/assets/tao-04.V71B6Cdn.jpeg differ
diff --git a/assets/tao-05.P2XMQFEu.jpeg b/assets/tao-05.P2XMQFEu.jpeg
new file mode 100644
index 0000000..26dcad2
Binary files /dev/null and b/assets/tao-05.P2XMQFEu.jpeg differ
diff --git a/assets/tao-06.CAhJU0ix.jpeg b/assets/tao-06.CAhJU0ix.jpeg
new file mode 100644
index 0000000..ba8554d
Binary files /dev/null and b/assets/tao-06.CAhJU0ix.jpeg differ
diff --git a/assets/tao-07.TWwMfHJ4.jpeg b/assets/tao-07.TWwMfHJ4.jpeg
new file mode 100644
index 0000000..717d32f
Binary files /dev/null and b/assets/tao-07.TWwMfHJ4.jpeg differ
diff --git a/assets/tao-08.BKQPDZFR.jpeg b/assets/tao-08.BKQPDZFR.jpeg
new file mode 100644
index 0000000..8e6598f
Binary files /dev/null and b/assets/tao-08.BKQPDZFR.jpeg differ
diff --git a/assets/tao-09.DHjwEJQm.jpeg b/assets/tao-09.DHjwEJQm.jpeg
new file mode 100644
index 0000000..dfc6a5f
Binary files /dev/null and b/assets/tao-09.DHjwEJQm.jpeg differ
diff --git a/assets/tao-10.D1eqPGHg.jpeg b/assets/tao-10.D1eqPGHg.jpeg
new file mode 100644
index 0000000..7e5e8f0
Binary files /dev/null and b/assets/tao-10.D1eqPGHg.jpeg differ
diff --git a/assets/tao-11.Bt1BpI2J.jpeg b/assets/tao-11.Bt1BpI2J.jpeg
new file mode 100644
index 0000000..0971641
Binary files /dev/null and b/assets/tao-11.Bt1BpI2J.jpeg differ
diff --git a/assets/tao-12.CqVYWYYD.jpeg b/assets/tao-12.CqVYWYYD.jpeg
new file mode 100644
index 0000000..2b9fd01
Binary files /dev/null and b/assets/tao-12.CqVYWYYD.jpeg differ
diff --git a/assets/tao-13.Bm_8HEqz.jpeg b/assets/tao-13.Bm_8HEqz.jpeg
new file mode 100644
index 0000000..eb74b49
Binary files /dev/null and b/assets/tao-13.Bm_8HEqz.jpeg differ
diff --git a/assets/tao-14.LNcnxsAv.jpeg b/assets/tao-14.LNcnxsAv.jpeg
new file mode 100644
index 0000000..efd55e7
Binary files /dev/null and b/assets/tao-14.LNcnxsAv.jpeg differ
diff --git a/assets/tensor_pyi.CiRhhzaO.png b/assets/tensor_pyi.CiRhhzaO.png
new file mode 100644
index 0000000..646b460
Binary files /dev/null and b/assets/tensor_pyi.CiRhhzaO.png differ
diff --git a/assets/tensor_pyi_stub.Cx_PkEfX.png b/assets/tensor_pyi_stub.Cx_PkEfX.png
new file mode 100644
index 0000000..44cfa2b
Binary files /dev/null and b/assets/tensor_pyi_stub.Cx_PkEfX.png differ
diff --git a/assets/tianshuishifan.DkDfK8bz.jpg b/assets/tianshuishifan.DkDfK8bz.jpg
new file mode 100644
index 0000000..bfe385b
Binary files /dev/null and b/assets/tianshuishifan.DkDfK8bz.jpg differ
diff --git a/assets/track-1.92wc2X0b.jpg b/assets/track-1.92wc2X0b.jpg
new file mode 100644
index 0000000..7f41784
Binary files /dev/null and b/assets/track-1.92wc2X0b.jpg differ
diff --git a/assets/track-2.CNxDMruG.jpg b/assets/track-2.CNxDMruG.jpg
new file mode 100644
index 0000000..f6a14b3
Binary files /dev/null and b/assets/track-2.CNxDMruG.jpg differ
diff --git a/assets/track-3.B0IR02Ux.jpg b/assets/track-3.B0IR02Ux.jpg
new file mode 100644
index 0000000..661a352
Binary files /dev/null and b/assets/track-3.B0IR02Ux.jpg differ
diff --git a/assets/typing_ci.C7y7taHy.png b/assets/typing_ci.C7y7taHy.png
new file mode 100644
index 0000000..8c9f784
Binary files /dev/null and b/assets/typing_ci.C7y7taHy.png differ
diff --git a/assets/typing_doc.CCLKyBLL.png b/assets/typing_doc.CCLKyBLL.png
new file mode 100644
index 0000000..ad96075
Binary files /dev/null and b/assets/typing_doc.CCLKyBLL.png differ
diff --git a/assets/typing_ide.Cam_rouQ.png b/assets/typing_ide.Cam_rouQ.png
new file mode 100644
index 0000000..2fdf229
Binary files /dev/null and b/assets/typing_ide.Cam_rouQ.png differ
diff --git a/assets/typing_module.D14kdyIz.png b/assets/typing_module.D14kdyIz.png
new file mode 100644
index 0000000..96cf8a9
Binary files /dev/null and b/assets/typing_module.D14kdyIz.png differ
diff --git a/assets/typing_participants.C01E7pZu.png b/assets/typing_participants.C01E7pZu.png
new file mode 100644
index 0000000..7ee5714
Binary files /dev/null and b/assets/typing_participants.C01E7pZu.png differ
diff --git a/assets/wangxin-01.Hz-UX5vs.jpeg b/assets/wangxin-01.Hz-UX5vs.jpeg
new file mode 100644
index 0000000..2072cf0
Binary files /dev/null and b/assets/wangxin-01.Hz-UX5vs.jpeg differ
diff --git a/assets/wangxin-02.BGcXQipn.jpeg b/assets/wangxin-02.BGcXQipn.jpeg
new file mode 100644
index 0000000..5960a35
Binary files /dev/null and b/assets/wangxin-02.BGcXQipn.jpeg differ
diff --git a/assets/wangxin-03.CAFEHiKf.jpeg b/assets/wangxin-03.CAFEHiKf.jpeg
new file mode 100644
index 0000000..3ece174
Binary files /dev/null and b/assets/wangxin-03.CAFEHiKf.jpeg differ
diff --git a/assets/wangxin-04.DPt9W4dS.jpeg b/assets/wangxin-04.DPt9W4dS.jpeg
new file mode 100644
index 0000000..1d5622f
Binary files /dev/null and b/assets/wangxin-04.DPt9W4dS.jpeg differ
diff --git a/assets/wangxin-05.U63PCqJk.jpeg b/assets/wangxin-05.U63PCqJk.jpeg
new file mode 100644
index 0000000..218e0f2
Binary files /dev/null and b/assets/wangxin-05.U63PCqJk.jpeg differ
diff --git a/assets/wangxin-06.muvimoV2.jpeg b/assets/wangxin-06.muvimoV2.jpeg
new file mode 100644
index 0000000..5324135
Binary files /dev/null and b/assets/wangxin-06.muvimoV2.jpeg differ
diff --git a/assets/wangxin-07.CNOKyk_u.jpeg b/assets/wangxin-07.CNOKyk_u.jpeg
new file mode 100644
index 0000000..4f960fc
Binary files /dev/null and b/assets/wangxin-07.CNOKyk_u.jpeg differ
diff --git a/assets/wangxin-08.qkTnZ9Mk.jpeg b/assets/wangxin-08.qkTnZ9Mk.jpeg
new file mode 100644
index 0000000..c72c810
Binary files /dev/null and b/assets/wangxin-08.qkTnZ9Mk.jpeg differ
diff --git a/assets/wangxin-09.0-vCbkph.jpeg b/assets/wangxin-09.0-vCbkph.jpeg
new file mode 100644
index 0000000..08d1b75
Binary files /dev/null and b/assets/wangxin-09.0-vCbkph.jpeg differ
diff --git a/assets/wangxin-10.CRRtNptg.jpeg b/assets/wangxin-10.CRRtNptg.jpeg
new file mode 100644
index 0000000..84b012c
Binary files /dev/null and b/assets/wangxin-10.CRRtNptg.jpeg differ
diff --git a/assets/wangxin-11.R5oNZCsm.jpeg b/assets/wangxin-11.R5oNZCsm.jpeg
new file mode 100644
index 0000000..251ca8e
Binary files /dev/null and b/assets/wangxin-11.R5oNZCsm.jpeg differ
diff --git a/assets/wangxin-12.BsgnfET_.jpeg b/assets/wangxin-12.BsgnfET_.jpeg
new file mode 100644
index 0000000..beec438
Binary files /dev/null and b/assets/wangxin-12.BsgnfET_.jpeg differ
diff --git a/assets/xdoctest-1.twGhXbsV.jpg b/assets/xdoctest-1.twGhXbsV.jpg
new file mode 100644
index 0000000..b0b154e
Binary files /dev/null and b/assets/xdoctest-1.twGhXbsV.jpg differ
diff --git a/assets/xdoctest-10.C7e6x3bs.jpg b/assets/xdoctest-10.C7e6x3bs.jpg
new file mode 100644
index 0000000..692865f
Binary files /dev/null and b/assets/xdoctest-10.C7e6x3bs.jpg differ
diff --git a/assets/xdoctest-11.B_U6cpOH.jpg b/assets/xdoctest-11.B_U6cpOH.jpg
new file mode 100644
index 0000000..ed543fb
Binary files /dev/null and b/assets/xdoctest-11.B_U6cpOH.jpg differ
diff --git a/assets/xdoctest-12.6U1ca7Vv.jpg b/assets/xdoctest-12.6U1ca7Vv.jpg
new file mode 100644
index 0000000..78b982c
Binary files /dev/null and b/assets/xdoctest-12.6U1ca7Vv.jpg differ
diff --git a/assets/xdoctest-2.aPhS1ooI.jpg b/assets/xdoctest-2.aPhS1ooI.jpg
new file mode 100644
index 0000000..ea27540
Binary files /dev/null and b/assets/xdoctest-2.aPhS1ooI.jpg differ
diff --git a/assets/xdoctest-3.Bmde-M0u.jpg b/assets/xdoctest-3.Bmde-M0u.jpg
new file mode 100644
index 0000000..9c66b25
Binary files /dev/null and b/assets/xdoctest-3.Bmde-M0u.jpg differ
diff --git a/assets/xdoctest-4.CQRxEsNO.jpg b/assets/xdoctest-4.CQRxEsNO.jpg
new file mode 100644
index 0000000..25c2113
Binary files /dev/null and b/assets/xdoctest-4.CQRxEsNO.jpg differ
diff --git a/assets/xdoctest-5.DMtIpjJh.jpg b/assets/xdoctest-5.DMtIpjJh.jpg
new file mode 100644
index 0000000..5b18872
Binary files /dev/null and b/assets/xdoctest-5.DMtIpjJh.jpg differ
diff --git a/assets/xdoctest-6.4nJubk8N.jpg b/assets/xdoctest-6.4nJubk8N.jpg
new file mode 100644
index 0000000..5d0a125
Binary files /dev/null and b/assets/xdoctest-6.4nJubk8N.jpg differ
diff --git a/assets/xdoctest-7.Ddmk4eg3.jpg b/assets/xdoctest-7.Ddmk4eg3.jpg
new file mode 100644
index 0000000..f448501
Binary files /dev/null and b/assets/xdoctest-7.Ddmk4eg3.jpg differ
diff --git a/assets/xdoctest-8.BJQ47NZd.jpg b/assets/xdoctest-8.BJQ47NZd.jpg
new file mode 100644
index 0000000..9d6130c
Binary files /dev/null and b/assets/xdoctest-8.BJQ47NZd.jpg differ
diff --git a/assets/xdoctest-9.Abp2_MFf.jpg b/assets/xdoctest-9.Abp2_MFf.jpg
new file mode 100644
index 0000000..601b200
Binary files /dev/null and b/assets/xdoctest-9.Abp2_MFf.jpg differ
diff --git a/assets/xian-event-01.Bl9tVA4M.jpg b/assets/xian-event-01.Bl9tVA4M.jpg
new file mode 100644
index 0000000..6a74a88
Binary files /dev/null and b/assets/xian-event-01.Bl9tVA4M.jpg differ
diff --git a/assets/xian-event-02.Bfoq75hH.jpg b/assets/xian-event-02.Bfoq75hH.jpg
new file mode 100644
index 0000000..c3085d5
Binary files /dev/null and b/assets/xian-event-02.Bfoq75hH.jpg differ
diff --git a/assets/xian-event-03.l1r9R8wK.jpg b/assets/xian-event-03.l1r9R8wK.jpg
new file mode 100644
index 0000000..c363d3a
Binary files /dev/null and b/assets/xian-event-03.l1r9R8wK.jpg differ
diff --git a/assets/xian-event-04.D7GNRoue.jpg b/assets/xian-event-04.D7GNRoue.jpg
new file mode 100644
index 0000000..9cd59bd
Binary files /dev/null and b/assets/xian-event-04.D7GNRoue.jpg differ
diff --git a/assets/xian-event-05.CC4ZiPOX.jpg b/assets/xian-event-05.CC4ZiPOX.jpg
new file mode 100644
index 0000000..af018e6
Binary files /dev/null and b/assets/xian-event-05.CC4ZiPOX.jpg differ
diff --git a/assets/xian-event-06.BRqk--wM.jpg b/assets/xian-event-06.BRqk--wM.jpg
new file mode 100644
index 0000000..4438a7c
Binary files /dev/null and b/assets/xian-event-06.BRqk--wM.jpg differ
diff --git a/assets/zhangyiqiao-01.CoqpsD_Z.jpeg b/assets/zhangyiqiao-01.CoqpsD_Z.jpeg
new file mode 100644
index 0000000..6f8b238
Binary files /dev/null and b/assets/zhangyiqiao-01.CoqpsD_Z.jpeg differ
diff --git a/assets/zhangyiqiao-02.CMu3F1pB.jpeg b/assets/zhangyiqiao-02.CMu3F1pB.jpeg
new file mode 100644
index 0000000..527b24c
Binary files /dev/null and b/assets/zhangyiqiao-02.CMu3F1pB.jpeg differ
diff --git a/assets/zhangyiqiao-03.BdZmFXia.jpeg b/assets/zhangyiqiao-03.BdZmFXia.jpeg
new file mode 100644
index 0000000..92a1b63
Binary files /dev/null and b/assets/zhangyiqiao-03.BdZmFXia.jpeg differ
diff --git a/assets/zhangyiqiao-04.DdgZgJtk.jpeg b/assets/zhangyiqiao-04.DdgZgJtk.jpeg
new file mode 100644
index 0000000..719cd77
Binary files /dev/null and b/assets/zhangyiqiao-04.DdgZgJtk.jpeg differ
diff --git a/assets/zhangyiqiao-05.7wTCyzPp.jpeg b/assets/zhangyiqiao-05.7wTCyzPp.jpeg
new file mode 100644
index 0000000..1a26583
Binary files /dev/null and b/assets/zhangyiqiao-05.7wTCyzPp.jpeg differ
diff --git a/assets/zhangyiqiao-06.CaD7ITDx.jpeg b/assets/zhangyiqiao-06.CaD7ITDx.jpeg
new file mode 100644
index 0000000..9dccd19
Binary files /dev/null and b/assets/zhangyiqiao-06.CaD7ITDx.jpeg differ
diff --git a/assets/zhangyiqiao-07.rpQ_Tu3F.jpeg b/assets/zhangyiqiao-07.rpQ_Tu3F.jpeg
new file mode 100644
index 0000000..abe42df
Binary files /dev/null and b/assets/zhangyiqiao-07.rpQ_Tu3F.jpeg differ
diff --git a/assets/zhangyiqiao-08.DpkvL9rZ.jpeg b/assets/zhangyiqiao-08.DpkvL9rZ.jpeg
new file mode 100644
index 0000000..c9f579e
Binary files /dev/null and b/assets/zhangyiqiao-08.DpkvL9rZ.jpeg differ
diff --git a/assets/zhaomiaomiao.dXx6awBl.jpg b/assets/zhaomiaomiao.dXx6awBl.jpg
new file mode 100644
index 0000000..c655b67
Binary files /dev/null and b/assets/zhaomiaomiao.dXx6awBl.jpg differ
diff --git a/assets/zuck_point.DdBiB58Z.jpg b/assets/zuck_point.DdBiB58Z.jpg
new file mode 100644
index 0000000..5f7e705
Binary files /dev/null and b/assets/zuck_point.DdBiB58Z.jpg differ
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..84ad3cf
Binary files /dev/null and b/favicon.ico differ
diff --git a/feed.rss b/feed.rss
new file mode 100644
index 0000000..8904c2d
--- /dev/null
+++ b/feed.rss
@@ -0,0 +1,7786 @@
+
+
+
+ 飞桨开源社区博客
+ https://pfcc.blog
+ Wonderful stories from PaddlePaddle contributors
+ Tue, 05 Nov 2024 05:26:39 GMT
+ https://validator.w3.org/feed/docs/rss2.html
+ https://github.com/jpmonette/feed
+ zh-CN
+
+ 飞桨开源社区博客
+ https://pfcc.blog/logo.png
+ https://pfcc.blog
+
+ Copyright (c) 2023-present, PaddlePaddle contributors
+ -
+
+ https://pfcc.blog/posts/zuckerberg-letter-post
+ https://pfcc.blog/posts/zuckerberg-letter-post
+ Thu, 17 Oct 2024 00:00:00 GMT
+ 本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
+
+]]>
+ 本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
+
+
+
+原文:https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/
+✍️ 写于 2024 年 7 月 23 日
+By 马克·扎克伯格,创始人兼 CEO
+
+开源 AI 是未来的前进之路
+在高性能计算的早期阶段,当时大部分科技公司都大力投资于开发自己的闭源版本 Unix。在那个时代,是很难想象可以有其他方法来发展出先进的软件。然而,最终是开源 Linux 脱颖而出获得了广泛的认可 —— 起初是因为它允许开发者可以按自己的想法随意修改其代码,并且更加省钱。而随着时间的推移,它变得更加先进、更加安全,并且拥有一个比任何闭源 Unix 更广泛的生态,能够支持更多功能。如今,Linux 已经成为云计算和大多数移动设备操作系统的行业标准基础——并且我们都受益于其衍生的优秀产品。
+我相信人工智能将以类似的方式发展。如今,几家科技公司正在开发领先的闭源模型,但是开源模型正在迅速缩小差距。去年,Llama 2 只能与过时的模型相比较,而在今年,Llama 3 已经能与最先进的模型进行竞争,并且在某些方面处于领先。明年开始,我们预计未来的 Llama 系列模型将成为行业内最先进的模型。但在此之前,Llama 已经在开放性、可修改性和成本效益方面处于领先地位。
+今天,我们正在迈向开源人工智能成为行业标准的下一步。我们发布了 Llama 3.1 405B,这是第一个达到业内前沿水平的开源人工智能模型,同时还推出了新的改进版 Llama 3.1 70B 和 8B 模型。相对闭源模型,除了拥有明显更好的性价比之外,405B 模型开源的事实将使其成为进行微调和蒸馏小模型的最佳选择。
+除了发布模型,我们还与一系列公司合作,推动更广泛的生态建设。
+
+亚马逊、Databricks 和 NVIDIA 正在推出一整套服务,以支持开发者微调和蒸馏他们自己的模型。
+像 Groq 这样的初创公司已经为所有新模型构建了低延迟、低成本的推理服务。
+模型将在所有主流云厂商服务中可用,包括 AWS、Azure、Google、Oracle 等。
+Scale.AI、DELL、德勤等公司已准备好帮助企业部署 Llama,并使用自有数据训练定制模型。
+
+随着社区发展和更多公司开发新服务,我们可以共同将 Llama 打造为行业标准,并让 AI 普惠于每个人。
+Meta 致力于开源人工智能。稍后我将阐述为什么我认为开源是最好的开发栈,为什么开源 Llama 对 Meta 有利,以及为什么开源 AI 对世界有益 。同时也正因如此,开源社区将会长期存在。
+为什么开源 AI 对开发者有利
+当我与全球的开发者、CEO、政府官员交流时,通常会听到几个主题:
+
+我们需要训练、微调和蒸馏我们自己的模型。 每个组织都有不同的需求,不同规模的模型能够最好的满足这些需求,并且这些模型使用他们自己的特定数据进行训练或微调。端侧任务和分类任务需要小的模型,而更复杂的任务则需要更大的模型。现在,你可以使用最先进的 Llama 模型,使用自己的数据继续进行训练,然后将其蒸馏成最合适的模型尺寸——无需我们或任何其他人看到你的数据。
+我们需要掌控自己的命运,而不是被一个闭源模型厂商所束缚。 许多组织不希望依赖他们无法自行运行和控制的模型。他们不希望闭源模型厂商能够更改自己的模型、修改使用条款,甚至完全停止服务。他们也不希望被束缚在拥有模型专属权的某单一云服务厂商中。开源使得生态圈内的公司拥有兼容的工具链,你可以轻松的在他们之间横跳。
+我们需要保护我们自己的数据。 许多组织需要处理敏感的数据,这些数据需要保密,并且不能通过云 API 传输到闭源模型。而其他有些组织仅仅只是不信任闭源模型厂商提供的数据。开源解决了这些问题,你可以在任何地方运行这些模型。另外开源软件由于开发过程更加透明,往往也更加安全,公众也认同这一观点。
+我们需要一个高效、可负担得起的模型。 开发者可以在自己的基础设施上以闭源模型(如 GPT-4o)大约 50% 的成本运行 Llama 3.1 405B 进行推理,无论是在线还是离线推理任务。
+我们想投资于一个能长期成为事实标准的生态。 许多人看到开源模型比闭源模型发展得更快,他们更希望在能够长期带来巨大优势的架构上建立自己的系统。
+
+
+Meta 的商业模式是为用户建立最佳的体验和服务。为了实现这一目标,我们必须确保自己始终能够获得最先进的技术,并且不会被束缚在竞争对手的闭源生态系统中,这些系统可能会限制我们的产品创新。
+我的一个重要经历是,在建设我们的服务时受到了 Apple 平台的诸多限制,从苹果的开发者税,到他们施加的任意规则,再到阻止我们推出的所有产品创新。显然,如果我们能够构建最好的产品,并且竞争对手不进行限制,Meta 和许多其他公司都将能够为用户建设更好的服务。从哲学层面上讲,这正是我如此坚定不移的为下一代 AI 和 AR/VR 领域建立开源生态的主要原因
+人们经常问我是否担心开源 Llama 会让我们失去技术优势,但我认为这种担忧忽略了几个重要因素:
+
+首先,为了确保我们拥有最先进的技术,并且不会被长期束缚在某一封闭生态里,Llama 需要发展成为一个完整的生态系统,包括开发工具、效率提升、芯片优化和其他集成软件。如果我们是唯一使用 Llama 的公司,这种生态系统就不会发展,我们将不会比当初的闭源 Unix 好到哪去。
+其次,我预计 AI 的发展将持续伴随着激烈的竞争,这意味着在当前时点开源某个模型,并不会使我们在推出下一个最佳模型时失去优势。Llama 成为行业标准的路径是一代又一代的保持竞争力、效率和开放性。
+第三,Meta 与闭源模型厂商的的关键区别在于,出售 AI 模型的访问权并不是我们的商业模式。这意味着公开发布 Llama 不会削减公司的收入、可持续性或者投资 research 的能力 ,而闭源厂商则完全相反(这也是为什么几家闭源厂商一直在积极游说政府反对开源的原因之一)
+最后,Meta 拥有着深耕开源项目的悠久历史和成功经验。通过 Open Compute Project 共享我们的服务器、网络和数据中心设计,以及让供应链标准化了我们的设计,我们节省了数十亿美元。同时我们也受益于开源生态的创新,如 PyTorch、React 以及其他业内领先的开源项目。当我们长期坚持开源的方法时,它始终是对我们有利的。
+
+为什么开源 AI 对全世界有利
+我坚信在实现 AI 光明前景的过程中,开源是不可或缺的一环。AI 技术相比任何其他现代技术都展现出了更大的潜力,可以提升人类的生产力、创造力和生活质量,加速经济增长,同时推动医学和科学研究领域的进步。而开源将确保全球更多人能够获得 AI 带来的好处和机会,避免权力集中在少数公司手中,使得技术能够更公平、更安全地服务于整个社会。
+关于开源 AI 模型的安全性一直存在争论,而我的观点是,开源 AI 将比闭源更安全。我认为政府将会认识到开源是符合他们的自身利益的,因为开源会促进全世界的繁荣和安全。
+我对安全性的认知是,我们需要防范两类危害: unintentional and intentional (非故意危害和故意危害)。非故意危害指设计和运行 AI 系统的人没有故意造成伤害的意图,但该系统仍然可能无意中引发一些负面后果。例如,现代 AI 模型可能无意中给出错误的健康建议。或者在未来场景中,有些人担心模型可能会无意中自我复制或过度追求目标,进而对人类造成危害。故意危害则是指恶意使用 AI 模型来造成危害的行为。
+值得注意的是,人们对 AI 的担忧主要集中在非故意危害方面——从 AI 系统对数十亿使用者的影响,到人类未来面临的许多真正灾难性的科幻场景。在这方面,开源技术明显是更安全的,因为其系统更加透明,能够经得起更广泛的审查。从历史上看,正是由于这些原因,开源软件在安全性方面表现更为出色。同样,使用像 Llama Guard 这样安全系统的 Llama 模型,可能比闭源模型更安全和可靠。因此,大多数关于开源 AI 安全性的讨论都集中在故意危害上。
+我们的安全流程包括严格的测试和红队攻击,以评估我们的模型是否具有造成实质性危害的能力,目的是在发布模型之前减轻风险。由于这些模型是开源的,任何人都可以自行进行测试。我们必须牢记,这些模型是通过互联网上已有的信息进行训练的。因此在考虑危害时,应该从模型造成的危害,是否能够比从 Google 或其他搜索结果中快速获取的信息中造成的危害更大这一点开始。
+在思考关于故意危害的问题时,将个人或小规模单位能够做的事情,与像国家等这类拥有大量资源的大型单位能够做的事情区分开来,是非常有帮助的。
+未来的某个时刻,个别不法分子可能会利用 AI 模型的智能,从互联网上的信息中制造出全新的危害。在那时,“权力”的平衡将对 AI 安全至关重要。我认为,生活在一个 AI 被广泛部署的世界中会更好,因为这样一来,实力更强的大型机构可以制约小型的不法分子。这种方式与我们在社交网络上管理安全的方式类似——我们更强大的 AI 系统能够识别并阻止那些使用小型 AI 系统的低级别威胁者。更广泛地来看,大型机构大规模部署 AI 将会促进社会的安全和稳定。只要大家都能获得同代的 AI 模型(开源技术有助于实现这一点),拥有更多计算资源的政府和机构就能够对抗那些计算资源较少的不法分子。
+接下来的问题是,…… 【请自行批判性阅读该段原文】 。
+在你展望未来的机遇时,请记住,当今大多数行业领先的科技公司和科学研究都是建立在开源软件之上的。下一代企业和科学研究也将基于开源 AI,只要我们共同投入其中。这包括刚刚起步的初创企业,以及那些因缺乏资源无法从头开始开发 SOTA AI 的大学和国家。
+归根结底,开源 AI 是我们充分利用这项技术、为世界上所有人创造最大经济机遇和安全性的最佳途径。
+让我们共同构建这一切
+在过去,Meta 是为自身开发这一系列 Llama 模型,然后对外发布,但并未专注于构建更广泛的生态系统。然而在这次发布中,我们采用了不同的方式。我们正在内部组建团队,以支持尽可能多的开发者和合作伙伴使用 Llama,并积极建立合作关系,使生态系统中的更多公司也能够为其客户提供独特的功能。
+我相信,Llama 3.1 的发布将成为行业的一个转折点,届时大多数开发者将主要采用开源方案,而这一趋势只会向前加速。我希望你能加入我们,共同推动 AI 的普惠发展,让全世界都能享受到这项技术的益处。
+💪,
+MZ
+
+编者碎碎念
+看完小扎同志写的信,再聊聊厂长 Robin 的观点。在此我就不细说具体的理念,而是做个总结和对比。
+
+
+
+厂长的公开言论可以看 https://www.163.com/dy/article/JBSQH9HD0511DSSR.html (随便找的)
+
+Robin 观点 1:论效率,开源模型没法跟闭源模型比
+
+Robin 观点 2:“开源美好”的逻辑在大模型时代不成立
+
+结论:表面是理念的分歧,但实际上是公司商业策略的差异
+可以看到,Robin 更关注商业效率和闭源模型的市场应用,而扎克伯克则看重开源带来的长期生态建设和创新潜力。
+往大的说,这两位科技领袖可能也反映了他们对 AI 未来发展的不同理解:Robin 代表着通过集中资源快速迭代获取竞争优势的中国模式,而小扎同志则提倡一种去中心化、开放合作的西方创新生态。
+但往小的说,可能最根本的原因,就像小扎同志说的,公开发布 Llama 不会削减 Meta 公司的收入。但对于百度,公开发布开源大模型,可能真的会影响到自己的搜索业务收入。
+
+写在最后
+【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
+对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
+]]>
+
+ -
+
+ https://pfcc.blog/posts/type-hints-project
+ https://pfcc.blog/posts/type-hints-project
+ Sun, 01 Sep 2024 00:00:00 GMT
+ 【为 Paddle 框架 API 添加类型提示(Type Hints)】的项目总结。
+
+
+34 位开发者参与,16 项主任务,337 个子任务,2191 个 API,340+ 个 PR,自 2024 年 4 月起,至 8 月 30 日主体项目完结,近 5 个月 SAN 值归零的夜晚,Type Hints 总归算是有始有终、小有成果,这里就简单回顾与总结一下。
+项目介绍
+此次项目是第六期飞桨黑客松引入 Fundable Projects 中的一个:为 Paddle 框架 API 添加类型提示(Type Hints) 。
+
+Fundable Projects 本身定位具有一定的挑战性,有兴趣的同学可以移步 【Hackathon 6th】Fundable Projects
+
+Python 在 3.5 版本通过 PEP 484 – Type Hints 正式规范了「类型提示」功能。之后随着相关规范和工具的逐渐完善,类型提示逐渐成为 Python 代码中的标准实践,如今较新的主流库也基本都提供了类型提示。由于 Python 本身类型高度动态化,类型提示的存在可以帮助开发者更快地了解代码的类型信息,提高代码的可读性和可维护性,结合工具还可以提供静态类型检查,在开发阶段就能发现一些潜在的类型错误。Paddle 框架由于历史原因尚未提供类型提示,本项目希望引入尽可能多的对 Paddle 有利的类型提示。
+以一段简单的 Python 代码为例:
+python def greeting (name):
+ return 'Hello' + name
+
添加上类型提示之后:
+python def greeting (name: str ) -> str :
+ return 'Hello' + name
+
正如前文所讲,类型提示功能有诸多好处,如:
+
+帮助开发者了解代码类型信息
+提高代码的可读性和可维护性
+结合工具在开发阶段发现错误
+
+而最直观的反映就是,我们在诸如 VSCode 等 IDE 中,能够获取到接口的类型提示,并进行连续推导了:
+
+
+
+
+ IDE 中使用类型提示
+
+
+项目的 RFC 【Hackathon 6th】为 Paddle 框架 API 添加类型提示(Type Hints) 经过大家讨论之后,将此次项目的目标最终标定为:
+
+正确完成 Paddle 公开 API 的类型标注,但不声明 Paddle 类型标注的完备性。
+
+这里需要单独说明一下「标注的完备性」。类型标注是个循序渐进的过程,Paddle 是个相对较大且复杂的项目,除了公开 API 之外,还存在较多非公开 API 与 C++ 接口,此次项目无法保证完成以上所有接口的类型标注,故此,不做 Paddle 类型标注的完备性说明。或者,换个说法,如果熟悉 Python 的类型标注和相关工具的使用,那么,此次项目不保证完成 Paddle 这个项目本身通过类型工具的检查,但是,需要保证外部项目使用 Paddle 时,能够正确识别、提示与检查 Paddle 所提供的公开 API。
+项目中的任务,以任务模块的角度,分解为:
+
+_typing
模块的引入
+CI 流水线的建设
+文档建设
+公开 API 的类型标注
+
+具体的执行过程,通过 Tracking Issue 跟踪项目进展,分解为:
+
+第一阶段的前置任务
+第二阶段的代码标注主体任务
+第三阶段的补充测试
+第四阶段的收尾与总结
+
+项目实施
+方案总览
+Python 官方提出了三种支持类型提示的 包分发方式 :
+
+inline
,行内
+stubs
,文件
+third party
,第三方
+
+结合 Paddle 项目本身的结构,这里采用 Inline type annotation + Stub files in package 的方案实施类型提示,具体为:
+
+Python 接口,使用 inline
方式标注
+非 Python 接口,提供 stub
标注文件,并打包在 Paddle 中
+
+所谓 inline
,是将类型直接标注在源文件的接口定义中,如:
+python def log (x, name = None ):
+ ...
+
直接修改接口代码为:
+python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ ...
+
而有些接口,Paddle 是通过 pybind 或 patch 的方式提供,则需要增加对应的 stub
文件。最基本的,如 Tensor
类,需要提供 tensor.pyi
文件:
+
+
+
+
+ 生成 tensor.pyi 文件
+
+
+stub
文件的写法与 Python 代码的写法相同,只是不需要写具体的实现部分。
+另外,由于 Python 的类型标注特性一直在不断完善的过程之中,初期的一些特性很难支撑 Paddle 如此体量的项目,因此,我们提出项目实施过程中的一项基本原则:
+在不违背 Paddle 最低支持版本 3.8 语法的基础上,尽可能使用新版本 typing 特性
+所谓「不违背 Paddle 最低支持版本 3.8 语法」,一个典型的例子是,Python 3.8 版本不能在类型别名中使用 |
代替 UnionType,如:
+python from typing_extensions import TypeAlias
+from typing import Union
+t: TypeAlias = Union[ str , int ]
+
在 Python 3.8 的语法中无法转写为:
+python from typing_extensions import TypeAlias
+t: TypeAlias = str | int
+
但,我们希望「尽可能使用新版本 typing 特性」,因此,通过 PEP 563 – Postponed Evaluation of Annotations ,我们可以在函数签名中使用 Python 3.10 的语法特性,如:
+python from __future__ import annotations
+def foo (bar: str | int ) -> None :
+ ...
+
以上,为本项目实施的总体方案与基本原则,接下来,按照前文所讲的「以任务模块的角度」,简单拆分讲解一下。
+_typing
模块的引入
+Paddle 中会用到很多公用的标注类型,比如数据布局 NCHW
、NHWC
等。_typing
模块的引入,一方面可以统一规范开发者的标注行为,减少维护成本,另一方面,也可以减少各类书写错误。可以将 _typing
模块的地位与 Python 中的 int
、str
等基础类型等同,由此,整个 Paddle 项目的标注体系可以分为:
+
+三个部分。
+
+
+
+
+ 类型层级结构
+
+
+具体到 _typing
模块,其本身作为 Paddle 的一个私有模块放置于 python/paddle
目录下:
+
+
+
+
+ _typing 模块
+
+
+其内部包括基础公共类型(basic.py
)、数据布局(layout.py
)等。
+回顾项目整体实施过程中 _typing
模块的建设与使用,最大的收益是规范了一些公共类型的标注行为。比如,NCHW
、NHWC
等这类数据布局,很容易出现书写错误,也确实发现过 Paddle 源码中错误的类型标注问题。再如,Paddle 中的设备类型 CPUPlace
、CUDAPlace
等,与 Place
,实际上没有继承关系,这就需要在众多使用 Place
的地方引入 PlaceLike
类型。
+但是,_typing
建设的过程中,也逐渐暴露出一些问题,最主要的有两个:
+
+所谓「粒度控制」是指,很难用统一的标注来划分哪些类型需要归类入 _typing
,哪些则直接使用 Python 的基础类型进行组合。比如,_typing
中的 IntSequence = Sequence[int]
,很多地方都会用到,但,具体到每个接口,也许直接标注 Sequence[int]
会更简单。
+对于 _typing
模块缺少单元测试也是一个比较大的遗憾。这就不得不说明一下我们是如何保证项目类型标注的正确性这个问题了。
+最理想的方式当然是对每个接口做类型检测的单元测试,但是,由于项目本身的人力与时间投入不允许我们这么做,我们选择通过对接口中的「示例代码」做类型检查这种方式。
+python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ r """
+ Calculates the natural log of the given input Tensor, element-wise.
+
+ .. math::
+
+ Out = \ln(x)
+
+ Args:
+ x (Tensor): Input Tensor. Must be one of the following types: int32, int64, float16, bfloat16, float32, float64, complex64, complex128.
+ name (str|None): The default value is None. Normally there is no need for user to set this property. For more information, please refer to :ref:`api_guide_Name`
+
+ Returns:
+ Tensor: The natural log of the input Tensor computed element-wise.
+
+ Examples:
+
+ .. code-block:: python
+
+ >>> import paddle
+
+ >>> x = [[2, 3, 4], [7, 8, 9]]
+ >>> x = paddle.to_tensor(x, dtype='float32')
+ >>> print(paddle.log(x))
+ Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
+ [[0.69314718, 1.09861231, 1.38629436],
+ [1.94591010, 2.07944155, 2.19722462]])
+ """
+
也就是上面这段代码中的「Examples」部分。
+由于 Paddle 之前对接口的建设都要求书写「示例代码」,其中包括了接口基本的使用方式,那么,我们就可以通过对其进行类型检查,从而保证 Paddle 整体接口的基础类型检查的正确性了。
+不过,这样会牵扯出另一个问题:接口依赖。
+如果仔细观察上述的示例代码,会发现,其中同时应用到了 paddle.to_tensor
与 paddle.log
两个接口。那么,如果需要保证 paddle.log
这段示例代码检查正确,就需要先把 paddle.to_tensor
这个接口标注正确。类似的依赖问题层出不穷,由于我们使用的工具 mypy
会将没有标注的接口统一识别为 Any
,这就导致,如果 review 不仔细就会放过一些实际上错误的标注问题。为了解决这个问题,一方面,我们在整理项目标注任务的时候,根据优先级进行排序,使相对基础或者简单的接口尽早完成;另一方面,我们单独创建了一个 PR 用于对所有接口做全量检查的监测,也就是说,即使有上述所谓的漏网之鱼,一旦依赖的接口进行了类型标注,不再是 Any
,那么问题则可以在这个 PR 中及时被发现并修正过来。
+以上,便是 _typing
模块的引入以及一系列需要在项目主体标注前需要完成的任务。
+CI 流水线的建设
+前面提到,我们使用 mypy
来保证类型标注的准确性,这就涉及到 CI 流水线的建设问题。
+
+
+
+
+ CI 流水线
+
+
+上图简单描述了 CI 流水线的整体流程:
+
+这里不再详述赘述 CI 流水线的建设过程,主要有两处考量与大家分享:
+
+所谓「性能问题」,如果使用过 mypy
的同学可能深有体会,这东西太慢了。我们在项目中同样遇到了性能问题,Paddle 中 2000+ 个接口,检查一遍需要 2 个多小时。因此,我们使用进程池的方式对接口做并行检查,也将整体检查时间缩减到 10 分钟左右(虽然有同学反馈,内存占用可能有几十个 GB,whatever,反正是在 CI 上做检查,而且也没有崩,就当是啥都没发生吧……)。
+
+
+
+
+ 并行处理
+
+
+另外「流程问题」也是需要重点关注的。正如前文所讲,我们需要对接口做全量检查,但是,具体到每个接口的修改,则只能针对当前接口进行检查,否则问题无法收敛。因此,在整体类型标注完成之前,CI 的行为:
+
+默认:不检查类型
+[Typing]
的 PR 做增量检查;也就是只检查 PR 中修改的接口
+[Typing all]
的 PR 做全量检查;也就是检查所有接口
+
+由此,可以在容忍一定错误的状态下,逐步推进整体项目的进展。
+截止到本文发表为止,CI 已经切换到常规行为:
+
+默认:PR 做增量检查;也就是只检查 PR 中修改的接口
+[Typing]
的 PR 做全量检查;也就是检查所有接口
+
+这里还需要单独说明一下,实际上,我们更推荐项目做「全量检查」作为默认行为,但是,由于全量检查对于资源的消耗实在太大,这里才退而求其次使用增量检查。
+
+
+
+
+ CI 流水线切换
+
+
+文档建设
+文档建设是另一个需要单独关注的问题。Python 的类型标注虽然仍然是 Python 语言的一部分,但是,对于大部分没有接触过的同学来说,这东西就像是 Python 和 C++ 或者 Rust 的结合体。而且,类型标注本身不仅仅需要对标注熟悉,还需要明确各个接口的实际运行过程才能完成一个正确的标注过程。代码的运行流程需要同学在标注的过程中层层分析,而文档建设需要做的,相当于一个引子,引导大家进入到 Paddle 类型标注的最佳实践中来。
+这里涉及到几个问题:
+
+What
:Paddle 的类型标注关注什么
+How
:Paddle 的类型标注怎么做
+
+首先 What
,也就是明确任务的具体范围,如,公开 API ,函数的 signature,文档等。其次 How
,也就是 Paddle 做类型标注的最佳实践。比如「使用 PEP 563,延迟类型注解计算」。(这里有更详细的文档 《Python 类型提示标注规范》 )
+文档的建设也不是一蹴而就的,由于类型标注这个主题本身就非常庞大,我们的做法是,先在「Tracking Issue」中添加一个「Q&A」章节,让大家有个基础的入手指南,后续再逐步完善,并最终完成文档,形成 Paddle 项目本身的最佳实践。
+
+
+
+
+ 类型标注文档
+
+
+公开 API 的类型标注
+这个任务是整个项目的主体任务,可以根据参与者的范围不同划分为:
+
+内部,实现辅助的 stub
文件
+开放,实现其他公开接口的类型标注,也就是 Inline type annotation
;占主要工作部分。
+
+我们在开展主要的类型标注任务之前,首先在内部完成了必要的 stub
文件的生成与编写任务。
+如前文所述,Paddle 很多接口是通过 pybind 或 patch 的方式对外开放的,这里最基础,也是最主要的是 Tensor
的实现。我们没有借鉴 PyTorch
等框架的做法使用「静态解析」的方式生成 tensor.pyi
文件,而是「动态解析」:
+
+
+
+
+ 静态解析 vs 动态解析
+
+
+如上图所示,「静态解析」是指,通过解析 yaml
的配置项,结合模板与硬编码的方式生成 stub
文件。这样做的好处是,不会产生运行时依赖,也就是说,可以在项目编译的任意阶段导入。但是,这样的做法极其繁琐,非常容易出错,而且后续维护也会异常困难。由此,我们采用「动态解析」的方式,即,在项目编译的完成阶段,直接 import paddle
,再把相应的接口填入模板中一并打包进行分发。Python 目前最常采用,也是 Paddle 主要的分发方式是 wheel
,也就是将编译与打包分离,这也为「动态解析」提供了可行性。
+_typing
模块导入、CI 流水线建设、文档建设、stub
文件的生成,以上诸多任务的目的,便是推动「公开接口的类型标注」这个主体任务的进行。
+借助飞桨的完善的开源社区建设,6 月初,我们开放了 [Type Hints] 为公开 API 标注类型提示信息 这个主体标注任务。任务划分为三批,共 337 个子任务,前后有 30 多位开发者参与,完成了 Paddle 的 2000 多个 API 的类型标注,PR 数量有 300 多个。
+
+说明:这里 API 的数量以函数或方法为计数单位,如,一个类有两个公开接口,则计数为 2 。
+
+项目的整体工程量,不应该只以数量的多少进行计算,因为,这个任务不仅仅是数量多,难度也不是修改一两个字符这么简单。
+这里就不得不再提一下,很多人认为 Python 太简单没什么技术难度这个认知偏见。Python 从编程语言的学习曲线上来说,确实适合新手入门,但是,写代码或者编程,实际上是个工程问题,而不是简单的代码堆砌。在整个类型标注的任务过程中,我们发现太多的,不仅仅是编码习惯上的问题,更是工程问题,从基础上影响了 Paddle 这个项目的构建。比如上面提到的 Place
与 CPUPlace
的继承关系问题;再如,项目中用到了诸多的枚举方式,而没有使用 enum
;各个接口所使用的参数类型、范围不一致问题更是比比皆是。
+说回项目的难度问题,由于 Python 语言的动态性,标注的过程中虽然有文档可以参考,但仍然需要人工逐个进行代码的跟踪,才能对具体的类型较为有把握。一旦接口的调用涉及到私有 API ,跟踪起来则尤为困难。这也是为何到目前为止,仍然没有一款工具,可以很好的辅助人工进行类型标注这个问题的根本原因。就算是目前大火的大模型也无法取代人工的标注工作,修改大模型的错误,与人工直接标注的工作量基本相当。
+我们这里以 10
分钟一个接口(修改 + review)的工作量进行计算:
+10 min/task * 2191 task / 60 min / 8 hour ≈ 46 day
+也就是大约两个月的工作量,可以大体上估算所需投入的成本。
+开源社区的介入,一方面缓解了项目的人力问题,使项目的完成成为可能;另一方面,也让更多的开发者接触到了类型标注这个特性。未来,Paddle 应该会将类型标注作为标准的编码行为,早点入坑也不至于开发的时候再抓瞎。
+
+
+
+
+ 开源贡献者
+
+
+项目结语
+将近 5 个月的时间,痛苦、喜悦、烦恼或者豁然开朗都已成过去,有始有终,项目总算有个交代,正如《黑神话:悟空》,完成比完美更重要。
+如果说未来有什么计划,完善私有接口的标注、完善测试用例、完善文档与最佳实践,等等……
+要做的可以有很多,而对于还没有接触过类型标注的同学,或者还在犹豫是否使用类型标注这个特性,今天突然想到一个不是很雅的比喻:
+上完厕所,走出十丈远,突然意识到自己没有擦屁股……你要如何做呢?
+最后,感谢飞桨各位大佬的支持,感谢开源社区的贡献!!!
+导师:
+
+开发者:
+
+参考链接
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/hackathon-6th-summary
+ https://pfcc.blog/posts/hackathon-6th-summary
+ Fri, 23 Aug 2024 00:00:00 GMT
+ 飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
+
+不论是再次相遇的老朋友,还是志同道合的新朋友,每个人都可以在这里共同探索无限可能。
+这是一场真正的 Hacker 盛宴,同时也是一次硬核的较量,更是与飞桨研发团队和社区伙伴协作的绝佳机会!
+期待见证你在这个舞台上的成长和进步。
+彻底释放你的创造力,“码”上见真章!
+经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
+]]>
+ 飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
+
+不论是再次相遇的老朋友,还是志同道合的新朋友,每个人都可以在这里共同探索无限可能。
+这是一场真正的 Hacker 盛宴,同时也是一次硬核的较量,更是与飞桨研发团队和社区伙伴协作的绝佳机会!
+期待见证你在这个舞台上的成长和进步。
+彻底释放你的创造力,“码”上见真章!
+经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
+
+01 - 更硬核的飞桨黑客松活动
+PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第六期于 2024 年 3 月 20 日正式上线。本期活动提高了整体难度和结题要求,并且受到了开发者的热情响应。他们前赴后继,挑战自我,最终在经过三个月的激烈竞争后圆满落幕!
+本次飞桨黑客松延续了往期深受开发者喜爱的两大活动形式——开源贡献个人挑战赛和飞桨护航集训营,并首次引入了「Fundable Projects」赛道,专注解决飞桨框架的核心技术难题。在这一赛道中,社区高水平开发者领导并规划技术路线,号召社区共同完成课题项目。此外,还新增了「优秀稿件征集与传播」赛道,鼓励开发者撰写基于飞桨框架新功能的科技文章,进一步扩展飞桨的影响力。
+共有 49 位社区开发者参与并完成本期飞桨黑客松的任务,本次活动在任务完成难度、参与团队规模、项目类型丰富度等方面均有提升,充分展示了开发者们对于建设飞桨开源生态的热情和奉献精神。 我们期待这些开发者团队在飞桨开源生态中继续迸发出光彩和力量,与飞桨一路同行,共同打造更加优秀的开源社区。
+
+02 - 四大赛道 开源贡献
+飞桨与生态伙伴 OpenVINO™ 携手,发布了四大赛道共计 46 个方向的开源贡献任务,从框架开发、套件建设、论文复现、基础设施到技术文章任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
+总览
+
+开源贡献个人挑战赛:共发布 55 个开源贡献任务,最终由 13 位开发者完成 38 个任务。
+护航计划集训营:共发布 27 个实训项目,涵盖多个救技术方向,最终 28 位同学参与答辩并顺利结营,加速了飞桨的功能迭代。
+Fundable Projects:定位为硬核社区项目,本期由社区完成了 5 个关键技术项目的研发。
+优秀稿件征集与传播:社区完成 9 篇高质量稿件,并在 CSDN 等平台传播。
+
+一、开源贡献个人挑战赛
+开源贡献个人挑战赛以开源贡献为核心,基于 GitHub 的飞桨及生态伙伴开源项目进行代码贡献。本期个人挑战赛发共布 55 个开源贡献任务,涵盖飞桨核心框架、科学计算、Paddle2ONNX 套件和生态伙伴项目,所有任务均完成认领,43 个任务提交作品,38 个任务顺利完成,完成率 69% 。 感谢各位开发者的积极参与,致敬每一位开源贡献者!本期完成的框架开发任务也将进入飞桨框架 3.0 发版流程,贡献者成果被全体飞桨框架用户共享 。
+此外,本次黑客松 Paddle2ONNX 方向三道赛题的奖励(共 4500 元)均为社区捐赠,因此最后的奖励由 Paddle2ONNX PMC 向社区热心开发者直接颁发 。感谢 Paddle2ONNX 社区的六位金主:chenwhql 、luotao1 、goocody 、jeff41404 、 jzhang553 、ZhengBicheng 。
+
+更多详情请查看任务 issue 📄: https://github.com/PaddlePaddle/Paddle/issues/62905
+
+二、飞桨护航计划集训营
+飞桨护航计划集训营是本期黑客松的核心赛道之一,专注于为开发者提供一个实践、学习与成长的远程集训营。营员以远程的方式,导师 1 对 1 带教深度参与飞桨重要开源项目开发实践。本次计划分两批共发布 27 个实训项目,涵盖多个技术方向,完成招募 32 名营员。三个月集训期间共计 提交 6 期周报,组织 2 期技术分享会,最终 28 位营员参与答辩并顺利结营 ,极大加速了飞桨的功能迭代。
+
+集训营开源项目地址:https://github.com/PFCCLab/Camp ,所有学习笔记与周报记录均留痕~
+
+本期飞桨护航计划集训营开发项目内容硬核,既包括 PIR、CINN、组合算子等专项机制建设工作,也包括模型迁移工具建设、框架 API 易用性提升、CMake 治理和编译优化、分布式自动并行架构升级和性能优化等框架核心组件开发工作,还有科学计算领域拓展专项、PaddleMIX 多模态大模型能力建设等重要套件能力建设工作...营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了内部研发经理的肯定,并有多名同学获得百度正式实习生 Offer。
+
+更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/61006
+
+三、优秀稿件征集与传播
+随着版本的更新,飞桨功能发生了非常大的变化,为了让更多的开发者了解这些信息,本期黑客松新增了优秀稿件征集与传播赛道 。该赛道共开放了 7 个稿件选题,涵盖 0 维 Tensor、复数计算、稀疏计算、高阶微分等技术点的使用指南及学习心得。所有参赛选手共提交了 12 篇稿件,最终 3 名选手合计 9 篇高质量稿件顺利通过审核并合入 ,并在 AIStudio、CSDN 等内容社区平台进行推广,帮助飞桨传播正面技术影响力。
+
+更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62907
+
+四、Fundable Projects
+Fundable Projects 是本期黑客松的创新赛道之一,核心聚焦于攻克飞桨面临的硬核技术课题 。参赛选手需要能够独立剖析复杂的任务需求、精心规划技术实施路径,并倡导携手社区力量,共同推进关键功能需求的落地实现。本赛道共发布了 6 个亟待解决的飞桨关键技术项目 —— 为 Paddle 框架 API 添加类型提示、引入 clang-tidy 工具、旧动态图和执行器机制清理、全套件模型实现动转静训练功能、解决长期存在的 PaddleOCR 问题。所有开发课题均已被社区积极认领,并且其中 5 个项目课题的研发在社区的共同努力下圆满完成。
+鉴于 Fundable Projects 赛道在本期黑客松中取得的超乎预期的成功与影响力,我们决定在未来的黑客松活动中继续深化这一赛道,并诚邀所有怀揣技术梦想、勇于攀登技术高峰的社区成员加入这场硬核技术的挑战之旅。为了表彰并激励更多的优秀贡献,我们也将加大该赛道的奖励力度哦~
+
+更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62908
+
+未来计划
+
+个人贡献挑战赛: 持续运转,征集并发布飞桨研发赛题,扩大开源声量。
+护航计划集训营: 重点开展 ,扩大集训营的规模、批次,结合 GLCC、开源之夏共同运营远程实习项目。
+Fundable Projects: 重点开展 ,尝试将更多硬核研发课题、产品新特性交由社区开发完成。
+其他(待定)
+
+
+03 - 飞桨黑客松完成榜单
+2024 PaddlePaddle Hackathon 飞桨黑客马拉松第六期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方共同出品,以线上认领任务的形式进行。本次共有四大赛道:开源贡献个人挑战赛、飞桨护航计划集训营、Fundable Projects、优秀稿件征集与传播,多样的活动形式为大家提供丰富的深度学习开发体验。对飞桨黑客松第六期公示榜单如有异议,请于 2024 年 08 月 30 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 08 月 31 日前对您的异议进行复核反馈。
+
+
+
+
+恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
+
+04 - 新的身份等你点亮
+在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
+
+关于 PFCC
+PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
+
+加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
+戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
+]]>
+
+ -
+
+ https://pfcc.blog/posts/ijcai-2024-competition
+ https://pfcc.blog/posts/ijcai-2024-competition
+ Mon, 19 Aug 2024 00:00:00 GMT
+ 🎉🎉2024 年 8 月 8 日,“ IJCAI 2024: 任意三维几何外形车辆的风阻快速预测竞赛 ”在韩国济州国际会议中心(Jeju ICC)火热举行,并且取得了超级圆满的成功!💰💰价值 $35,000 的大奖到底花落谁家了呢?参赛选手们的技术方案是不是赛博朋克风爆棚?快来围观,别错过啦~
+👀另外,就在前一天,2024 年 8 月 7 日,飞桨开源社区也在 IJCAI Industry Day 论坛上进行了超赞的路演。在美丽又浪漫的韩国济州岛上(虽然天气有点热哈哈🔥),百度飞桨和海内外的科研人员、企业工程师以及 AI 开发者们成功“汇合”,和众多 AI 领域的大咖们进行了深度的交流,氛围超级愉快😊!
+
+大赛背景
+📚说到这个大赛的背景,开放原子开源基金会可是个致力于推动全球开源事业发展的非营利机构哦!他们的目标就是搭建一个前沿技术竞争、优秀人才选拔、创新成果展示、商业转化引导和对接交流合作的平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态的繁荣和可持续发展提供动力。
+🤝而百度飞桨开源社区与开放原子开源基金会的目标和愿景可是高度重合的哦!所以他们自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了“飞桨 PaddlePaddle 开源贡献挑战赛”后,这次飞桨团队再度受邀,和开放原子共同举办了这次超酷的竞赛!
+🏁这个算法模型挑战赛可是有三个赛道哦!分别是基于 ShapeNetCar 的简化汽车数据、基于 DrivAer 复杂几何的工业级别汽车数据,以及多类型汽车融合数据。选手们需要使用 AI 进行快速分钟级的预测,看看汽车在不同工况下的风阻会是多少。要知道,风阻对汽车设计可是非常重要的哦!它可是会直接影响汽车的燃油和电池续航呢~(详情请参考:雷军“上课”讲风阻,小米汽车风阻全球量产车“最低”)🚗💨
+🧠💻 选手们这次可是要放大招了!他们得把流体力学(哎呀,听起来就头疼🤯)和 AI 深度学习这两大领域的知识融合在一起,进行深度的模型设计和探索。这可不是闹着玩的,得在 ABC 三个赛道的测试数据集上,精准预测风阻,还得尽量减小风阻预测的 L2 误差。这可是个技术活🚀💨。
+
+赛程回顾
+大赛 4 月 23 日一上线,报名就火热启动了!经过两个半月的激烈打榜,选手们拼尽全力,终于在 7 月 21 日迎来了封榜时刻。之后,经过严格的代码审查和线上初审,我们最终在 8 月 8 日韩国济州国际会议中心迎来了超燃的决赛路演!
+比赛过程中,选手们在官方交流群里可是热闹非凡,他们积极讨论、互帮互助,甚至还主动给官方提建议,帮我们改进比赛平台,真是太给力了😄!虽然中间有些小插曲,但只要我们一沟通,选手们的需求就能迅速得到解决,真是效率满满!
+
+最终,大赛迎来了 323 支团队的热情报名!虽然赛题难度不小,但还是有 15 支超厉害的队伍成功提交了作品,其中 9 支队伍更是脱颖而出,入围了决赛答辩,真是让人热血沸腾啊!
+选手们纷纷表示,流体仿真真是个“磨人”的活儿,太消耗资源和人力了(尤其是仿真工程师的头发和脑细胞,哈哈)!不过,大家也都觉得,能快速预测风阻的价值和意义非凡,绝对是值得努力的!
+
+通过大家的开源以及互相学习,相信 AI 空气动力学通用模型能够早日实现。——— 赛道 A 第 10 名 hnu
+
+Industry Day & 大赛-AI 流体平行论坛 路演现场
+
+
+Industry Day
+军哥(@jzhang533)他用全英文的 PPT 给大家带来了一场超级精彩的介绍,带着 IJCAI 会议的观众们一起领略了百度飞桨在 NLP、自动驾驶等工业领域的落地应用和解决方案。那发音,标准又流畅,和海外的专家学者们问答沟通起来也是毫无压力,受到大家的一致好评,太起范了! 😄🎉🎉🎉
+
+
+
+
+AI 流体平行论坛
+这次我们可是请到了几位大咖哦!北京航空航天大学软件学院的副教授周号益、惠尔科技的 CEO 常宇飞、NVIDIA 的解决方案架构师况吕林,还有四川大学工程数值模拟基础算法与模型全国重点实验室的副研究员张明洁,他们都来到了现场做报告!介绍了 AI 在自动驾驶,汽车设计,气象预报,流体仿真等领域的应用,大家听得全神贯注,认认真真,一点都不敢错过呢!👏👏👏
+
+此外在会场,也分别为大家呈现了第二届开放原子开源大赛赛项共建方招募的宣讲,和百度飞桨 PaddleScience 的相关的科学计算产品建设和探索:
+再给大家隆重介绍一下 PaddleScience!这可是个发论文、打比赛的利器啊!它不仅面向 AI 领域的开发者们,还特别适合流体力学、材料科学、气象科学等领域的科研人员们使用。简直就是科研神器,有没有!大家赶紧来试试看吧!🎉🎉🎉
+欢迎大家体验 PaddleScience,并参与我们的共建计划 https://github.com/PaddlePaddle/PaddleScience (合作邮箱 paddle_science@baidu.com )
+
+
+选手们也是个个都不含糊,纷纷展示了自己的解决方案,那场面可真是热闹非凡!获奖选手的代码仓库也已经在 PaddleScience GitHub 上公开啦,大家快去围观吧!链接在这里 ➡️ 获奖选手代码仓库
+
+
+
+会后采访现场
+
+
+
+比赛颁奖现场
+比赛颁奖现场,一览选手风采~
+
+
+恭喜所有的获奖队伍!🎉🎉🎉开源创新之路上飞桨与你们同行!🚀🚀🚀
+平行论坛合影留念
+平行论坛,热闹非凡,合影一张,留住精彩瞬间!📸🎉
+
+百度+开放原子展台小分队
+除了精彩的会议,百度还在 IJCAI 会场设置了一个超酷的展台!在这里,我们给海内外的科研人员和企业工程师们详细介绍了开放原子开源基金会、百度 Apollo 汽车、百度文心一言,百度飞桨框架和飞桨科学计算这些超棒的项目!
+真的要感谢百度、开放原子、IJCAI 的运营和宣发工作人员们,你们齐心协力,让这次活动如此成功!
+话不多说,直接点赞!👍👍👍
+
+最后最后,告诉大家一个好消息!新的比赛已经火热上线啦!这次可是 CIKM 2024 的大赛哦!主题是“AI 辅助的先进空气动力学-优化汽车设计以实现最佳性能”,听起来就超级高大上有没有!大家快来报名吧,一起用 AI 的力量来优化汽车设计,挑战最佳性能!期待你们的精彩表现哦!🎉🎉🎉
+
+报名链接:https://competition.atomgit.com/competitionInfo?id=cda4e961b0c25858ca0fd2a4bdf87520
+
+AIStudio 快速开始:CIKM 2024: AI Aided Advanced Aerodynamic - 飞桨 AI Studio 星河社区
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/ligoml-story
+ https://pfcc.blog/posts/ligoml-story
+ Fri, 09 Aug 2024 00:00:00 GMT
+ All over the place was six pence, but he looked up at the moon.
+
+
+
+一、前言
+
+省流总结:梦师傅跑路了,写篇 blog 庆祝一下 🎉
+
+这是半个月前完成的采访,但应梦师傅的要求,文章在她的 last day(8 月 9 日)才发布。相信社区里的各位对梦师傅已经非常熟悉了。在飞桨开源社区的建设过程中,Ligoml 这个 GitHub ID 几乎无处不在,而她那一头粉色头发和猫猫更是给大家留下了深刻的印象。作为同事,她十分靠谱;作为朋友,她非常有趣。我还清晰地记得,刚来飞桨实习时接的梦师傅的活儿,当时她正好在毕业旅行,交接时跟我说她在雪山上信号不好...Anyway,希望梦师傅裸辞后身体健康,万事顺遂~
+二、采访内容
+
+
+介绍一下自己吧!
+梦师傅: 我叫李梦柳,前百度 AI 产品经理,GitHub ID:Ligoml,因为平时爱水群和答疑,大家都叫我梦师傅。
+
+
+
+ 微信截图
+
+
+
+都说 21 世纪是生物的世纪,为什么研究生跨专业学 CV 了?
+梦师傅: 我本科专业是生物医学工程,当初选专业主要是两个原因,一个是生物学的最好,另一个是喜欢小动物(后来发现我只是单纯的喜欢猫)。
+进到大学以后参加了一些实验室项目,印象很深的一个项目叫:还原型谷胱甘肽控制金纳米棒制备研究,那时候感觉这个课题名称明明都是汉字,却那么难以理解。简单来说就是根据特定配方,把各种液体混合在一起,然后等 8 个小时后金纳米棒长出来,并试图解释电镜下的折线含义。其实很符合对生科人的刻板印象,穿着白大褂,操作移液枪,混合各种彩色液体(实际上是无色的),养细胞做实验。每一次的漫长等待,对结果的未知性,都在坚定我跑路的心。所幸我的成绩还不错,拿到了保研资格后,就找到了我的研究生导师,转投到了 CV 这个赛道,然后发现炼一次丹的时间,可能不止 8 小时……当然这就是后话了。
+
+
+听说大学期间你还当过某公司 CEO,细说
+梦师傅: 对,那个时候在鼓励“大众创业,万众创新”,开公司的成本非常低,刚好我所在的社团有一些拍片子做网站的特长,有一个公司实体会方便一些,于是就和当时的几个社团负责人联合创立了一家公司,叫西咸新区挑战信息科技有限公司(因为社团名叫挑战网),我是法人代表。当时想的就是,只要我们不玩金融游戏,踏踏实实赚点生活费还是够活的。毕业以后把社团和公司一起留给学弟学妹了,现在应该还活着。当年一起开公司的伙伴们,直到现在也是我非常好的朋友,会约一起出去旅行什么的。
+
+
+
+
+ 毕业典礼
+
+
+
+ 可可托海
+
+
+
+
+为什么毕业加入了百度?以及为什么开始搞开源社区了?
+梦师傅: 当时研究生毕业的时候手里有几个 offer,因为代码写的菜,不太想为难自己,所以选了做产品经理,这样可以指挥别人给我写代码,嘻嘻。
+作为校招生刚来,肯定是以培养为主的,经理就安排我去做开源社区的 issue 管理员,每天解答各种 issue,以及找人帮我解答 issue。那个时候飞桨刚发布 2.0 版本,易用性得到了极大的提升,具备了建设开源社区的技术基础,我的性格比较活泼,还懂点 AI 技术,就很顺理成章的被分配去搞开源社区了。我们飞桨的社区开发者个个都是人才,代码写得漂亮,说话又好听,每天上班跟大家水水群,还是蛮快乐的。
+
+
+建设开源社区的过程中,有没有遇到印象特别深的事或人?为什么?
+梦师傅: 那可太多了,为此我还专门写了一篇博客 👉 https://pfcc.blog/posts/2023-os-report ,我就只提几个关键词,大家自己对号入座:春节 18 响 🧨,雪糕狂热粉丝 🐱,最强水群人📱,开源强迫症 001 👓,还有一些人菜瘾大的小甜水爱好者,请坐小孩那桌(误
+
+编者注 ✍️:春节十八响这些梗永流传了属于是
+
+
+
+搞开源社区的时候快乐吗(狗头)?对于开源社区的价值和意义是怎样理解的?
+梦师傅: 是真的快乐,当时我还在厂内做了一场《我在飞桨 快乐开源》的演讲,很多同事都有印象。在开源社区,人的主体性得到了充分的尊重,我们相聚在一起,只是因为纯粹的热爱,只做自己感兴趣的东西,没有利益和投入产出的权衡,怎么会不快乐呢?
+我认为开源会给一个项目带来无穷的生命力,即使许久无人维护,后面的开发者仍旧可以基于这个开源项目去生长出其他有价值有意义的项目,大家共同为开源项目添砖加瓦,持续不断的推进技术向前发展。而且由于你需要把代码开源出来给大家看,那么就会有一些个人包袱在,会关注代码规范性、文档完整性,这样会使得整个生态良性发展,越来越好。
+
+编者注 ✍️:拿着工资上班水群确实挺快乐的
+
+
+
+厂长近期关于开源有一些表态(开源大模型会越来越落后),你怎么看?
+梦师傅: 猜猜我为什么离职 我觉得厂长应该是有自己的考虑,而选择了文心大模型走闭源的道路,这本身无可厚非,OpenAI 也没有开源 ChatGPT,但是踩一捧一就没有必要了吧,这样的发言也把开源的飞桨放到了一个尴尬的位置上,就很难评。
+
+
+在百度飞桨工作的三年里,最快乐的一件事&一些事?
+梦师傅: 我还是蛮会在工作中找乐子的,遇到了好多合得来的同事朋友 👭,工作之余约个咖啡约个酒 🍹 什么的,都让我十分放松。最快乐的时光可能是去年的 7 月,先是去了日本团建 👗,然后五月天演唱会 🎤、梅西球赛 ⚽️,在上海办了开发者嘉年华 👻,面基了好多只认识 GitHub 🆔 的网友,我的头发也是那段时间变了很多颜色 🌈,差不多一周就会换一个,那时候的生活是非常多彩且自由的。
+
+注:换颜色的原因是我的护发素有颜色,不是每次都需要去理发店重新染的,而且因为是护发素所以不伤头发 hhh
+
+
+
+
+
+ 日本团建
+
+
+
+ PFCC 线下 meetup
+
+
+
+ 限定皮肤
+
+
+
+
+最想吐槽百度&飞桨&领导的是什么?至少说出一个百度最大的病症(狗头)
+梦师傅: 经常有人评价百度:起个大早,赶个晚集。我对此有深刻的体会。百度其实不缺有想法有能力的人,整体的氛围也是鼓励探索的,所以我们经常能看到很多在厂内已经聊过做过的项目,成为了别家打造的爆款产品,互联网行业的黄埔军校名副其实。
+在我看来,上层定位不清晰,中层摇摆不定,会让我们这些一线打工人非常心累。以我后来做的 AI Studio 为例,不到一年时间平台定位更换了三四次,从学习与实训社区到大模型社区,再到个人开发工作台,现在回归了大模型学习平台,每一次的变更都会带来整体功能和交互逻辑的大调整,出走半生,归来仍在原地,甚至可能更差。这期间 ModelScope、HuggingFace、Coze 等平台均以自己准确的定位和优质的产品体验成为了各自领域的头部,我们输在哪了呢?
+
+
+跑路的原因?裸辞之后有什么打算吗?
+梦师傅: 卷不动了,想歇一段时间,刚好手里的工作告一段落,觉得现在离开会是一个比较负责任的时机,所以就提了离职。
+我其实很感谢百度能给我一个宽松的工作环境和成长空间,以及足够裸辞的存款作为底气。之后的打算嘛,应该还是会找个班上,想折腾点 AI 工具,搞点有意思的项目或者视频,我没做过的事情,都可以一试。
+
+
+不考虑薪资,最想做的工作是什么?
+梦师傅: 做开源应用仙人(别笑)。
+之前选择做产品经理,主要还是代码写的菜,那假如我基于别人的开源项目,让 AI 给我写呢?我就动动嘴皮子,搞点没啥用但是有趣的应用给大家玩,代码开源出来,感觉也挺有意思的,我甚至可以录个视频给大家当乐子。
+
+
+三、来自社区的拷问
+
+
+ 梦师傅跑路了?
+
+
+
+
+ 跑路了💨
+
+
+
+
+ 梦师傅头发换了几种颜色?
+
+
+
+
+ 我数数啊,粉色、金色、蓝色、绿色、紫色、灰色、奶茶色、水蓝色、粉紫色、玫红色......
+
+
+
+
+ 梦师傅会打算开小红书、b 站或者公众号吗?
+
+
+
+
+ 全网都叫 Ligoml,不过是我的个人账号,我比较懒,还没有运营规划哈哈哈~
+
+
+
+
+ 推荐几款酒和配酒的菜
+
+
+
+
+ 你去坐小孩那桌
+
+
+
+
+ 以后还有机会见到梦师傅的猫吗?
+
+
+
+
+ 有的呀,想看可以群里@我,有趣的照片和视频我也会分享到朋友圈,看完记得点赞
+
+
+
+
+ 想问问梦师傅裸辞之后有机会来亦庄这边发展吗?
+
+
+
+
+ 去开无人车嘛?
+
+
+
+
+ 转行当美食博主吗?
+
+
+
+
+ 那恐怕有点困难,我只会煮方便面🍜
+
+
+
+
+ 问问梦师傅以后还打算从事AI相关工作吗
+
+
+
+
+ 应该还是在AI这个圈子里吧,毕竟我也只会这个
+
+
+
+
+ 那你H2会给飞桨框架贡献代码吗?
+
+
+
+
+ 我可以让文心一言替我写吗?
+
+
+
+
+ 觉得社区里的哪个小哥比较帅?(如实回答)
+
+
+
+
+ 我的审美还挺单一的,就喜欢高高瘦瘦长相清爽的男孩子,我们社区可多了,点名都点不过来(端水
+
+
+四. 大龄失业粉毛女青年旅行 Vlog
+戳戳 Vlog ➡️ 【离职日记|裸辞后我都去玩了点什么】
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
+]]>
+ All over the place was six pence, but he looked up at the moon.
+
+
+
+一、前言
+
+省流总结:梦师傅跑路了,写篇 blog 庆祝一下 🎉
+
+这是半个月前完成的采访,但应梦师傅的要求,文章在她的 last day(8 月 9 日)才发布。相信社区里的各位对梦师傅已经非常熟悉了。在飞桨开源社区的建设过程中,Ligoml 这个 GitHub ID 几乎无处不在,而她那一头粉色头发和猫猫更是给大家留下了深刻的印象。作为同事,她十分靠谱;作为朋友,她非常有趣。我还清晰地记得,刚来飞桨实习时接的梦师傅的活儿,当时她正好在毕业旅行,交接时跟我说她在雪山上信号不好...Anyway,希望梦师傅裸辞后身体健康,万事顺遂~
+二、采访内容
+
+
+介绍一下自己吧!
+梦师傅: 我叫李梦柳,前百度 AI 产品经理,GitHub ID:Ligoml,因为平时爱水群和答疑,大家都叫我梦师傅。
+
+
+
+ 微信截图
+
+
+
+都说 21 世纪是生物的世纪,为什么研究生跨专业学 CV 了?
+梦师傅: 我本科专业是生物医学工程,当初选专业主要是两个原因,一个是生物学的最好,另一个是喜欢小动物(后来发现我只是单纯的喜欢猫)。
+进到大学以后参加了一些实验室项目,印象很深的一个项目叫:还原型谷胱甘肽控制金纳米棒制备研究,那时候感觉这个课题名称明明都是汉字,却那么难以理解。简单来说就是根据特定配方,把各种液体混合在一起,然后等 8 个小时后金纳米棒长出来,并试图解释电镜下的折线含义。其实很符合对生科人的刻板印象,穿着白大褂,操作移液枪,混合各种彩色液体(实际上是无色的),养细胞做实验。每一次的漫长等待,对结果的未知性,都在坚定我跑路的心。所幸我的成绩还不错,拿到了保研资格后,就找到了我的研究生导师,转投到了 CV 这个赛道,然后发现炼一次丹的时间,可能不止 8 小时……当然这就是后话了。
+
+
+听说大学期间你还当过某公司 CEO,细说
+梦师傅: 对,那个时候在鼓励“大众创业,万众创新”,开公司的成本非常低,刚好我所在的社团有一些拍片子做网站的特长,有一个公司实体会方便一些,于是就和当时的几个社团负责人联合创立了一家公司,叫西咸新区挑战信息科技有限公司(因为社团名叫挑战网),我是法人代表。当时想的就是,只要我们不玩金融游戏,踏踏实实赚点生活费还是够活的。毕业以后把社团和公司一起留给学弟学妹了,现在应该还活着。当年一起开公司的伙伴们,直到现在也是我非常好的朋友,会约一起出去旅行什么的。
+
+
+
+
+ 毕业典礼
+
+
+
+ 可可托海
+
+
+
+
+为什么毕业加入了百度?以及为什么开始搞开源社区了?
+梦师傅: 当时研究生毕业的时候手里有几个 offer,因为代码写的菜,不太想为难自己,所以选了做产品经理,这样可以指挥别人给我写代码,嘻嘻。
+作为校招生刚来,肯定是以培养为主的,经理就安排我去做开源社区的 issue 管理员,每天解答各种 issue,以及找人帮我解答 issue。那个时候飞桨刚发布 2.0 版本,易用性得到了极大的提升,具备了建设开源社区的技术基础,我的性格比较活泼,还懂点 AI 技术,就很顺理成章的被分配去搞开源社区了。我们飞桨的社区开发者个个都是人才,代码写得漂亮,说话又好听,每天上班跟大家水水群,还是蛮快乐的。
+
+
+建设开源社区的过程中,有没有遇到印象特别深的事或人?为什么?
+梦师傅: 那可太多了,为此我还专门写了一篇博客 👉 https://pfcc.blog/posts/2023-os-report ,我就只提几个关键词,大家自己对号入座:春节 18 响 🧨,雪糕狂热粉丝 🐱,最强水群人📱,开源强迫症 001 👓,还有一些人菜瘾大的小甜水爱好者,请坐小孩那桌(误
+
+编者注 ✍️:春节十八响这些梗永流传了属于是
+
+
+
+搞开源社区的时候快乐吗(狗头)?对于开源社区的价值和意义是怎样理解的?
+梦师傅: 是真的快乐,当时我还在厂内做了一场《我在飞桨 快乐开源》的演讲,很多同事都有印象。在开源社区,人的主体性得到了充分的尊重,我们相聚在一起,只是因为纯粹的热爱,只做自己感兴趣的东西,没有利益和投入产出的权衡,怎么会不快乐呢?
+我认为开源会给一个项目带来无穷的生命力,即使许久无人维护,后面的开发者仍旧可以基于这个开源项目去生长出其他有价值有意义的项目,大家共同为开源项目添砖加瓦,持续不断的推进技术向前发展。而且由于你需要把代码开源出来给大家看,那么就会有一些个人包袱在,会关注代码规范性、文档完整性,这样会使得整个生态良性发展,越来越好。
+
+编者注 ✍️:拿着工资上班水群确实挺快乐的
+
+
+
+厂长近期关于开源有一些表态(开源大模型会越来越落后),你怎么看?
+梦师傅: 猜猜我为什么离职 我觉得厂长应该是有自己的考虑,而选择了文心大模型走闭源的道路,这本身无可厚非,OpenAI 也没有开源 ChatGPT,但是踩一捧一就没有必要了吧,这样的发言也把开源的飞桨放到了一个尴尬的位置上,就很难评。
+
+
+在百度飞桨工作的三年里,最快乐的一件事&一些事?
+梦师傅: 我还是蛮会在工作中找乐子的,遇到了好多合得来的同事朋友 👭,工作之余约个咖啡约个酒 🍹 什么的,都让我十分放松。最快乐的时光可能是去年的 7 月,先是去了日本团建 👗,然后五月天演唱会 🎤、梅西球赛 ⚽️,在上海办了开发者嘉年华 👻,面基了好多只认识 GitHub 🆔 的网友,我的头发也是那段时间变了很多颜色 🌈,差不多一周就会换一个,那时候的生活是非常多彩且自由的。
+
+注:换颜色的原因是我的护发素有颜色,不是每次都需要去理发店重新染的,而且因为是护发素所以不伤头发 hhh
+
+
+
+
+
+ 日本团建
+
+
+
+ PFCC 线下 meetup
+
+
+
+ 限定皮肤
+
+
+
+
+最想吐槽百度&飞桨&领导的是什么?至少说出一个百度最大的病症(狗头)
+梦师傅: 经常有人评价百度:起个大早,赶个晚集。我对此有深刻的体会。百度其实不缺有想法有能力的人,整体的氛围也是鼓励探索的,所以我们经常能看到很多在厂内已经聊过做过的项目,成为了别家打造的爆款产品,互联网行业的黄埔军校名副其实。
+在我看来,上层定位不清晰,中层摇摆不定,会让我们这些一线打工人非常心累。以我后来做的 AI Studio 为例,不到一年时间平台定位更换了三四次,从学习与实训社区到大模型社区,再到个人开发工作台,现在回归了大模型学习平台,每一次的变更都会带来整体功能和交互逻辑的大调整,出走半生,归来仍在原地,甚至可能更差。这期间 ModelScope、HuggingFace、Coze 等平台均以自己准确的定位和优质的产品体验成为了各自领域的头部,我们输在哪了呢?
+
+
+跑路的原因?裸辞之后有什么打算吗?
+梦师傅: 卷不动了,想歇一段时间,刚好手里的工作告一段落,觉得现在离开会是一个比较负责任的时机,所以就提了离职。
+我其实很感谢百度能给我一个宽松的工作环境和成长空间,以及足够裸辞的存款作为底气。之后的打算嘛,应该还是会找个班上,想折腾点 AI 工具,搞点有意思的项目或者视频,我没做过的事情,都可以一试。
+
+
+不考虑薪资,最想做的工作是什么?
+梦师傅: 做开源应用仙人(别笑)。
+之前选择做产品经理,主要还是代码写的菜,那假如我基于别人的开源项目,让 AI 给我写呢?我就动动嘴皮子,搞点没啥用但是有趣的应用给大家玩,代码开源出来,感觉也挺有意思的,我甚至可以录个视频给大家当乐子。
+
+
+三、来自社区的拷问
+
+
+ 梦师傅跑路了?
+
+
+
+
+ 跑路了💨
+
+
+
+
+ 梦师傅头发换了几种颜色?
+
+
+
+
+ 我数数啊,粉色、金色、蓝色、绿色、紫色、灰色、奶茶色、水蓝色、粉紫色、玫红色......
+
+
+
+
+ 梦师傅会打算开小红书、b 站或者公众号吗?
+
+
+
+
+ 全网都叫 Ligoml,不过是我的个人账号,我比较懒,还没有运营规划哈哈哈~
+
+
+
+
+ 推荐几款酒和配酒的菜
+
+
+
+
+ 你去坐小孩那桌
+
+
+
+
+ 以后还有机会见到梦师傅的猫吗?
+
+
+
+
+ 有的呀,想看可以群里@我,有趣的照片和视频我也会分享到朋友圈,看完记得点赞
+
+
+
+
+ 想问问梦师傅裸辞之后有机会来亦庄这边发展吗?
+
+
+
+
+ 去开无人车嘛?
+
+
+
+
+ 转行当美食博主吗?
+
+
+
+
+ 那恐怕有点困难,我只会煮方便面🍜
+
+
+
+
+ 问问梦师傅以后还打算从事AI相关工作吗
+
+
+
+
+ 应该还是在AI这个圈子里吧,毕竟我也只会这个
+
+
+
+
+ 那你H2会给飞桨框架贡献代码吗?
+
+
+
+
+ 我可以让文心一言替我写吗?
+
+
+
+
+ 觉得社区里的哪个小哥比较帅?(如实回答)
+
+
+
+
+ 我的审美还挺单一的,就喜欢高高瘦瘦长相清爽的男孩子,我们社区可多了,点名都点不过来(端水
+
+
+四. 大龄失业粉毛女青年旅行 Vlog
+戳戳 Vlog ➡️ 【离职日记|裸辞后我都去玩了点什么】
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/paddleocr-release
+ https://pfcc.blog/posts/paddleocr-release
+ Mon, 08 Jul 2024 00:00:00 GMT
+ 在开源社区的热烈期待与共同努力下,PaddleOCR 迎来了里程碑式的版本更新——v2.8.0!本次更新不仅引入了前沿的 OCR 技术成果 ,还对项目结构进行了深度优化 ,解决了若干历史疑难问题 ,旨在为广大开发者提供更加高效、便捷的 OCR 解决方案。让我们一同探索 PaddleOCR v2.8.0 带来的全新体验与无限可能!
+
+顶尖模型引入,引领 OCR 技术潮流
+PaddleOCR v2.8.0 版本隆重引入了PaddleOCR 算法模型挑战赛的冠军方案 ,为 OCR 领域树立了新的标杆。
+其中,赛题一“OCR 端到端识别任务 ”的冠军方案——场景文本识别算法 SVTRv2 ,以其卓越的识别性能与泛化能力,为用户带来了前所未有的识别体验。
+
+赛题二“通用表格识别任务 ”的冠军方案——表格识别算法 SLANet-LCNetV2 ,则以其精准高效的表格识别能力,为数据处理与分析提供了强有力的支持。
+
+项目结构优化,聚焦 OCR 核心
+为了进一步提升 PaddleOCR 项目的专业性与易用性,我们决定将非核心模块 PPOCRLabel 和 StyleText 迁移至新的仓库,使 PaddleOCR 项目更加专注于 OCR 与版面识别 的核心技术。这一举措不仅简化了项目结构,也为开发者提供了更加清晰的项目导航与资源访问路径。
+
+详见:Notice of PPOCRLabel and StyleText Project Migration
+
+历史疑难问题解决,提升用户体验
+半年多来,PaddleOCR 存在若干历史疑难问题,影响了开发者的使用体验。因此,在新版本中,我们重点解决了更新 Backbone 后无法运行模型、numpy 版本依赖冲突、Mac 系统中运行卡顿 等一系列历史疑难问题。部分疑难问题还在解决过程中,欢迎广大开发者一起参与!
+
+详见:【疑难解决】解决 PaddleOCR 历史存在的疑难 Issue
+
+其它优化改进,持续精进
+除了上述重大更新外,PaddleOCR v2.8.0 版本还包含了一系列细微但重要的优化改进。包括但不限于:
+
+解决版面分析中,OCR 结果偶尔丢失的问题
+添加 pyproject.toml,使 PaddleOCR 符合 PEP 518 规范
+对于大图推理,引入滑动窗口操作
+
+这些改进旨在进一步提升软件的稳定性、兼容性和性能表现 ,确保 PaddleOCR 能够在更广泛的场景中得到应用。
+开源共建,共创辉煌
+需要特别强调的是,PaddleOCR v2.8.0 版本的每一个进步与成就都离不开开源社区的支持与贡献。在 PMC(Project Management Committee) 的统一管理下,众多社区开发者携手并进、共同努力,才使得 PaddleOCR 能够不断前行、日益完善。这里要特别感谢 PaddleOCR PMC 成员:@GreatV (PMC Chair)、@tink2123 (PMC Chair)、@Topdu 、@SWHL 、@Liyulingyue 、@Sunting78 、@jzhang533 ,也感谢虽然暂未加入 PMC 但是作出了大量贡献的热心开发者。
+
+新版本 contributors 列表,贡献者数量创历史新高!
+
+
+这里预告一下,为了更好地服务广大开发者,PaddleOCR 文档教程专属站点 正在由 PMC 展开建设。该站点将汇集仓库中原先散落在各处的文档资源,支持关键词检索 功能,界面优雅舒适,相信大家一定会喜欢。
+
+我们诚挚地邀请更多开发者和开源爱好者加入我们的行列,一起将 PaddleOCR 越做越好!
+结语
+PaddleOCR v2.8.0 版本的发布是我们迈向新征程的重要一步。我们坚信,在未来的日子里,在大家的共同努力下,PaddleOCR 将不断创新、持续进步,为 OCR 领域的发展贡献更多的智慧与力量!
+]]>
+
+ -
+
+ https://pfcc.blog/posts/paddle-pipeline-parallel
+ https://pfcc.blog/posts/paddle-pipeline-parallel
+ Fri, 05 Jul 2024 00:00:00 GMT
+ paddle3.0 中自动并行是一项重要的升级点,今天我们来聊一聊 Paddle 中的静态图流水并行。大家也可以去翻一翻我的个人博客 ,里面有很多好康的(X)
+
+一、分布式集合通信模式
+集合通信模型适合处理 CV/NLP 领域这样具有稠密参数的模型。它有多种方式将数据/模型切分到多个设备上。每个设备可以成为一个 Worker,每个 Worker 都需要及时的知道全局梯度信息。这样的话,每个 Worker 都需要将自己的梯度信息发送给其他的 Worker ,同时也需要接收其他 Worker 的梯度信息。这样的通信方式就是集合通信模式。
+集合通信有好几种并行方式:
+
+数据并行
+模型并行
+流水线并行
+混合并行
+
+下面我们分别进行介绍:
+1.1 数据并行
+纯数据并行模式下数据集被平均分为多份,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。
+
+数据并行适用于模型参数较少的情况,一张卡可以放下完整的模型参数。这样的策略能让我们增加 batch_size,加快训练速度
+
+下图详细的说明了纯数据并行的训练流程:
+
+如图数据集平均分为多份 data partition1
和 data partition2
,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。在数据并行训练过程中,每个卡上的输入数据是不同的。各个卡独立地执行网络的前向运算和反向计算,计算出各自卡上的参数梯度。随后,使用 AllReduce 等集合通信原语,将各个卡上计算出的参数梯度进行累加聚合,得到最终的全局参数梯度。最后,全局参数梯度进入优化器进行参数更新,完成一个完整的 mini-batch 训练流程。图中的箭头表示了各个卡之间的通信过程。
+
+集合通信原语是集合通信的基础操作的集合,如广播(Broadcast)、收集(Gather)、分散(Scatter)、规约(Reduce)等。其中规约是指将集群内多个节点将数据发送给一个节点,这个节点会使用接收到的数据集中运算,如累加、累积、均值、方差等等。而上文提到的 AllReduce 则是指多对多的规约,即有多个数据发送节点和多个数据接收节点,所有节点的规约运算结果会广播到所有节点上。
+
+当数据集较大,模型较小时,由于反向过程中为同步梯度产生的通信代价较小,此时选择数据并行一般比较有优势,常见的视觉分类模型,如 ResNet50,比较适合采用数据并行。
+1.2 模型并行
+在模型参数较多的情况下,一张卡无法放下完整的模型参数,这时候就需要将模型参数切分到多张卡上,让我们先通过一张图了解一下模型并行的原理:
+
+模型并行的情况下每个设备上的数据都是一样的,只有模型被拆分到了各个设备上。每个设备只拥有模型的一部分,所有计算设备上的模型拼在一起,才是完整的模型。
+如图想要得到最终的计算结果需要将 Device0
和 Device1
的计算结果进行拼接后才能得到最终的计算结果。
+1.3 流水并行
+1.3.1 朴素流水并行
+流水线并行是模型并行的一种,其原理是把模型的不同层放置在不同卡上运行,参数也按层分配到不同的卡上,以降低模型的显存占用。
+如下图所示,网络共包含 4 层,我们可以把第 0 层放置在卡 0 上运行,第 1 层和第 2 层放置在卡 1 上运行,第 4 层放置在卡 2 上运行。在训练过程中,卡 0 接收输入数据进行计算,并将计算结果发送给卡 1;卡 1 接收到卡 0 的计算结果后进行计算,并将计算结果发送给卡 2;卡 2 接收到卡 1 的计算结果后进行计算,得到损失函数值,完成前向计算。反向计算逻辑与前向刚好相反。 这个过程就像是流水线一样,每个卡都在处理不同的数据,从而提高了训练效率。
+
+
+朴素流水并行的缺点:
+在任意给定时刻,除了一个 GPU 之外的其他所有 GPU 都是空闲的。因此,如果使用 4 个 GPU,则几乎等同于将单个 GPU 的内存量增加四倍,而其他资源 (如计算) 相当于没用上。所以,朴素流水线存在很多的 Bubble 。因此,朴素的流水线并行将会导致 GPU 使用率过低。
+
+
+1.3.2 微批次流水线并行
+微批次流水线并行是指将一个训练迭代划分为多个子阶段,每个子阶段都是一个微批次,每个微批次都会在不同的设备上进行计算。在每个子阶段中,每个设备都会计算出一个梯度,然后将这些梯度进行累加,得到最终的梯度,最后使用这个梯度更新模型参数。
+
+1.4 混合并行
+混合并行是指同时使用数据并行和流水线并行的方式,以 GPT-3 为例,以下是它训练时的设备并行方案:
+它首先被分为 64 个阶段,进行流水并行。每个阶段都运行在 6 台 DGX-A100 主机上。在 6 台主机之间,进行的是数据并行训练;每台主机有 8 张 GPU 显卡,同一台机器上的 8 张 GPU 显卡之间是进行模型并行训练 $^{[1]}$。
+
+二、Paddle 静态图流水并行
+在 Paddle 的静态图在流水线并行中,一个训练迭代通常被划分为三个子阶段:
+
+Forward:前向计算,每个阶段计算并输出中间结果给下一个阶段;
+Backward:反向传播,每个阶段根据上一个阶段的梯度计算并传递当前阶段的梯度;
+Optimize:参数更新,收集所有阶段的梯度并更新模型参数。
+
+Paddle 目前已经实现的流水线编排方式有两种,分别是: FThenB 和 1F1B。下面我们分别进行介绍:
+2.1 FThenB 编排模式
+FThenB
的编排模式也就是上面说到的微批次流水线并行,之所以叫做 FThenB
是因为在这种编排模式下,每个设备先执行前向计算,然后再执行反向传播。等待所有设备都执行完前向计算之后,再开始执行反向传播。
+FThenB
的编排模式将 mini-batch 细分为多个更小的 micro-batch(微批),送入 GPU 进行训练,来提高并行程度。但是这样做也有一个坏处就是,那就是把 batch 拆小了之后,对于那些需要统计量的层(如:Batch Normalization),就会导致计算变得麻烦,需要重新实现。而且 Fthen-B
模式由于缓存了多个 micro-batch 的中间变量和梯度,显存的实际利用率并不高。
+2.2 FThenB 相关代码解读
+在初始化 engine 类的时候会传入 strategy
参数,这个参数是一个 auto.Strategy
类的实例,用于配置流水线并行的策略。在 Strategy 类中,有一个 pipeline
属性,用于指定流水并行的编排模式。
+在 Parallelizer 执行 parallel
时候会在 _apply_post_optimization
中将编排模式(schedule_mode)保存到 main_program._pipeline_opt["standalone_opt"]
中。这个属性会在 ExecutorCache 中的 _get_program_and_executor
中被读取,用于编排 Program。下面是相关代码:
+python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
+
在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。下面是 apply_pass
的相关代码:
+python def apply_pass (main_program, startup_program, pass_name, pass_attr = {}):
+ assert pass_name in [
+ "FThenB" ,
+ "1F1B" ,
+ "Eager1F1B" ,
+ ], f "pipeline scheduler only support FThenB, 1F1B and Eager1F1B, but recieve { pass_name } "
+
+ if pass_name == "1F1B" :
+ pass_attr[ "enable_backward_forward_overlap" ] = int (
+ os.environ.get( "FLAGS_1f1b_backward_forward_overlap" , 0 )
+ )
+
+ # 初始化 pipeline_scheduler pass
+ pipeline_pass = new_pass( "pipeline_scheduler_" + pass_name, pass_attr)
+ pass_context = PassContext()
+ # 编排的主要入口
+ pipeline_pass.apply([main_program], [startup_program], pass_context)
+ # 获取编排后的 plan
+ plan = pass_context.get_attr( "plan" )
+ return plan
+
编排的主要入口是 pipeline_pass.apply
,FThenB
和 1F1B
的核心代码在 pipeline_scheduler_pass.py
中,其中还使用了一些继承类。下面我们先来梳理一下类之间的继承关系。其中主要涉及到的类包括:PassBase、PipelinePassBase、PipelineFThenBPass 和 Pipeline1F1BPass。
+PassBase 是所有 Pass 的基类,PipelinePassBase 是所有流水线编排 Pass 的基类,PipelineFThenBPass 和 Pipeline1F1BPass 分别是 FThenB 和 1F1B 的编排 Pass。
+python PassBase - PipelinePassBase - PipelineFThenBPass
+ - Pipeline1F1BPass
+
在 PassBase 中定义了 apply
方法,apply
来方法中又进一步封装了 _apply_impl
和 _apply_single_impl
方法。PipelinePassBase 中重写了 _apply_single_impl
方法:
+python # python/paddle/distributed/passes/pipeline_pass_base.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ """
+ 执行并行计算的具体实现逻辑
+
+ Args:
+ main_program (Program): 主Program。
+ startup_program (Program): 启动Program。
+ context (PassContext): Pass的上下文信息。
+ """
+ # 获取到拆分后的子 Program 和对应的类型
+ job_types, sub_programs = self ._partial_programs(main_program)
+
+ jobs = self ._create_job_list()
+
+ type_to_program = dict ( zip (job_types, sub_programs))
+ set_skip_gc_vars(
+ self .get_attr( "num_micro_batches" ), type_to_program, jobs
+ )
+
+ for type in type_to_program.keys():
+ type_to_program[ type ] = type_to_program[ type ].desc
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
+
可以看到进行编排的核心逻辑在 _partial_programs
和 _create_job_list
中,不同的编排策略会有不同的实现。下面我们来看看 FThenB
和 1F1B
的实现。
+FThenB 编排的实现逻辑在 PipelineFThenBPass 类中实现,它继承自 PipelinePassBase 类。PipelineFThenBPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
+python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _partial_programs (self, program):
+ """
+ 将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。
+
+ Args:
+ program (Program): 主Program。
+
+ Returns:
+ tuple: 包含两个列表,第一个列表包含子 Program 的类型(如 LR、FORWARD、BACKWARD、OPT),第二个列表包含相应的子 Program。
+ """
+ # 注意:标志 "enable_send_recv_overlap" 可能会增加 GPU 的保留内存。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 获取前向和后向子 Program 的列表
+ sub_program_list = _program_for_fthenb_and_1f1b(
+ program, enable_send_recv_overlap
+ )
+ return types, sub_program_list
+
其中 _program_for_fthenb_and_1f1b
的主要作用是将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。 这里我们暂时不讨论任务重叠的实现,只关注拆分的实现逻辑。下面是 _program_for_fthenb_and_1f1b
的实现逻辑:
+python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _program_for_fthenb_and_1f1b (program, enable_send_recv_overlap = False ):
+ # 为 fthenb 和1f1bProgram创建子 Program 列表
+
+ if enable_send_recv_overlap:
+ # 如果启用了发送接收操作的重叠,调用函数以进行重叠
+ _overlap_send_recv(program)
+ else :
+ # 否则,插入同步操作以确保顺序执行
+ _insert_sync_for_fthenb_1f1b(program)
+
+ # 创建四个子 Program,分别用于 LR、FORWARD、BACKWARD和 OPT 任务
+ lr_prog = Program()
+ fwd_prog = Program()
+ bwd_prog = Program()
+ opt_prog = Program()
+
+ # 分割 Program 并将操作添加到各个子 Program 中
+ def _split_ops (block):
+ # 根据操作的角色将操作分成四类:LR、FORWARD、BACKWARD和OPT
+ lr_ops = []
+ fwd_ops = []
+ bwd_ops = []
+ opt_ops = []
+ for op in src_block.ops:
+ if is_lr_sched_op(op):
+ lr_ops.append(op)
+ elif is_forward_op(op):
+ fwd_ops.append(op)
+ elif is_backward_op(op):
+ bwd_ops.append(op)
+ elif is_optimize_op(op):
+ opt_ops.append(op)
+ else :
+ raise ValueError (
+ "The op role: "
+ + str (op.attr( 'op_role' ))
+ + " isn't one of LRSched, Forward, Backward or Optimizer."
+ )
+ return lr_ops, fwd_ops, bwd_ops, opt_ops
+
+ def _add_ops_into_block (src_block, dst_block, ops):
+ # 将操作添加到指定的子 Program 块中
+ for op in ops:
+ _create_program(src_block, dst_block, op)
+
+ for idx, src_block in enumerate (program.blocks):
+ # 遍历主 Program 的块
+ lr_ops, fwd_ops, bwd_ops, opt_ops = _split_ops(src_block)
+ if idx == 0 :
+ # 对于第一个块,添加 LR、FORWARD、BACKWARD和 OPT 操作到相应子 Program 块
+ lr_block = lr_prog.block( 0 )
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ fwd_block = fwd_prog.block( 0 )
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ bwd_block = bwd_prog.block( 0 )
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ opt_block = opt_prog.block( 0 )
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+ else :
+ if len (lr_ops):
+ # 对于后续块,如果有 LR 操作,创建新的 LR 子 Program 块并将 LR 操作添加到其中
+ lr_block = lr_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ lr_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ if len (fwd_ops):
+ # 同样,为 FORWARD 操作创建新子 Program 块
+ fwd_block = fwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ fwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ if len (bwd_ops):
+ # 为 BACKWARD 操作创建新子 Program 块
+ bwd_block = bwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ bwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ if len (opt_ops):
+ # 为 OPT 操作创建新子 Program 块
+ opt_block = opt_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ opt_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+
+ for fetch_op in src_block.ops:
+ if fetch_op.type in [ "fetch" , "fetch_v2" ]:
+ in_name = fetch_op.input_arg_names[ 0 ]
+ dst_block = None
+ for block in [lr_block, fwd_block, bwd_block, opt_block]:
+ if block._find_var_recursive(in_name):
+ dst_block = block
+ break
+ if dst_block:
+ _create_program(src_block, dst_block, fetch_op)
+
+ lr_prog._sync_with_cpp()
+ fwd_prog._sync_with_cpp()
+ bwd_prog._sync_with_cpp()
+ opt_prog._sync_with_cpp()
+
+ lr_prog._rollback()
+ fwd_prog._rollback()
+ bwd_prog._rollback()
+ opt_prog._rollback()
+
+ # 返回四个子 Program,依次为 LR、FORWARD、BACKWARD和OPT
+ return [lr_prog, fwd_prog, bwd_prog, opt_prog]
+
其中 _insert_sync_for_fthenb_1f1b
的作用是插入同步操作,以实现"F-Then-B"和"1F-1B"流水线并行模式。插入同步操作的主要目的是确保在流水线并行训练中各个阶段(前向传播、后向传播、优化等)的计算流和通信流之间能够协同工作,以保持数据的一致性和正确性。这里我们不做详细介绍,感兴趣的小伙伴可以自行阅读源码 (_insert_sync_for_fthenb_1f1b )。
+_program_for_fthenb_and_1f1b
剩下的主要逻辑就是将主 Program 进行拆分,然后将操作添加到各个子 Program 中,我们一共有四个子 Program,分别用于 LR、FORWARD、BACKWARD 和 OPT 任务。
+在获得了 job_types
和 sub_programs
之后,我们就可以调用 _create_job_list
方法来创建 Job 列表。下面是 _create_job_list
的实现逻辑:
+python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ """
+ 创建前向-后向流水线并行计算任务的任务列表。
+
+ Returns:
+ list: 包含不同类型计算任务的列表,如 LR、FORWARD、BACKWARD、OPT。
+ """
+ # 获取micro-batch的数量,通常由外部传递给流水线并行计算。
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+
+ # 创建一个空的任务列表,用于存储不同类型的计算任务。
+ job_list = []
+
+ # 创建LR(学习率计算)任务,并将其添加到任务列表中。
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 为每个micro-batch创建前向计算任务。
+ for i in range (num_micro_batches):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(i)
+ job_list.append(forward_job)
+
+ # 为每个micro-batch创建后向计算任务。
+ for i in range (num_micro_batches):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(i)
+ job_list.append(backward_job)
+
+ # 创建一个优化任务,通常在所有micro-batch计算后执行。
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 ) # 通常只有一个优化任务,所以micro-batch次 ID 为0
+ job_list.append(opt_job)
+
+ # 返回包含不同类型计算任务的任务列表。
+ return job_list
+
由于 FThanB
编排策略就是在所有的 Forward 计算完成之后才会进行 Backward 计算,所以在 _create_job_list
中,我们会为每个 micro-batch 创建前向计算任务和后向计算任务。最后添加一个优化任务。 在获取了 jobs 之后,我们就可以将它们添加到 plan
中,然后返回 plan
。
+python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ ...
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
+
+jobs 和 type_to_program 之间的关系是怎样的?
+jobs 是一个列表,包含了不同类型的计算任务,如 LR、FORWARD、BACKWARD、OPT。type_to_program 是一个字典,key 是计算任务的类型,value 是对应的子 Program。
+
+2.3 1F1B 编排模式
+在 1F1B
的编排模式下,每个设备先执行前向计算,然后再执行反向传播。不等待所有设备都执行完前向计算,就开始执行反向传播。
+
+1F1B 示例如图所示,以 GPU3 的 F1(GPU3 的第 2 个 micro-batch 的前向计算)为例,F1 在计算前,F1 的反向 B1(GPU3 的第 1 个 micro-batch 的反向计算)已经计算结束,即可释放 F1 的中间变量,从而 F2 可以复用 F1 中间变量的显存。
+有研究文献表明,1F1B
方式相比于 FthenB
方式,峰值显存可以节省 37.5%,对比朴素流水线并行峰值显存明显下降,设备资源利用率显著提升。
+2.4 1F1B 相关代码解读
+1F1B 的编排策略顾名思义就是一个 Forward 之后跟一个 Backward,这里的 Forward 和 Backward 都是指一个 micro-batch 的计算。1F1B 编排的实现逻辑在 Pipeline1F1BPass 类中实现,它继承自 PipelinePassBase 类。Pipeline1F1BPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
+python def _partial_programs (self, program):
+ # 获取 "enable_send_recv_overlap" 标志,该 FLAG 可能增加显存消耗。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+
+ # 定义计算任务的类型列表,包括 LR、FORWARD、BACKWARD 和 OPT。
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 调用 _program_for_fthenb_and_1f1b 函数,根据输入的 program 和 enable_send_recv_overlap 创建子程序。
+ sub_programs = _program_for_fthenb_and_1f1b(program, enable_send_recv_overlap)
+
+ # 获取 "enable_backward_forward_overlap" 标志,用于确定是否启用前向传播和后向传播之间的交叠。
+ enable_backward_forward_overlap = self .get_attr( "enable_backward_forward_overlap" )
+
+ if enable_backward_forward_overlap:
+ # 如果启用了前向传播和后向传播之间的交叠,记录日志以指示启用。
+ logger.info( "Backward forward overlap enabled in 1F1B." )
+
+ # 从子程序列表中获取前向传播和后向传播的程序。
+ forward_program, backward_program = sub_programs[ 1 ], sub_programs[ 2 ]
+
+ # 调用 _backward_forward_overlap 方法,将前向传播和后向传播的程序进行重组,
+ # 以确保它们可以正确地交替执行。
+ (
+ splitted_backward_job_types,
+ splitted_backward_programs,
+ splitted_forward_job_types,
+ splitted_forward_programs,
+ ) = self ._backward_forward_overlap(backward_program, forward_program)
+
+ # 更新计算任务的类型列表和子程序列表,将交叠后的任务类型和程序添加进去。
+ types += splitted_forward_job_types + splitted_backward_job_types
+ sub_programs += (
+ splitted_forward_programs + splitted_backward_programs
+ )
+
+ for i in range ( len (types)):
+ logger.debug(
+ f "type = { types[i] } , sub_programs = { sub_programs[i] }\n "
+ )
+
+ # 记录调试信息,打印在稳定阶段执行的计算任务类型。
+ logger.debug( f "jobs_in_stable_phase = {self .jobs_in_stable_phase } " )
+
+ # 返回计算任务类型列表和相应的子程序列表。
+ return types, sub_programs
+
这里面的 _backward_forward_overlap
主要是用于实现前向传播和后向传播之间的交叠,是 1F1B 调度的优化算法。我们这里不做详细介绍,感兴趣的小伙伴可以自行阅读源码。除了 _backward_forward_overlap
之外,1F1B 的 _partial_programs
和 FThenB 的 _partial_programs
逻辑是一样的,都是调用 _program_for_fthenb_and_1f1b
函数,根据输入的 program 和 enable_send_recv_overlap 创建子 Program。
+下面我们来看看 _create_job_list
的实现逻辑:
+python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+ pp_stage = self .get_attr( "pp_stage" )
+ pp_degree = self .get_attr( "pp_degree" )
+
+ job_list = []
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 确保micro-batch数大于等于计算任务的度数
+ assert (
+ pp_degree <= num_micro_batches
+ ), "Num of micro batches should larger than or equal to pp degree."
+
+ micro_batch_in_warmup = pp_degree - pp_stage
+ micro_batch_in_1f1b = num_micro_batches - micro_batch_in_warmup
+
+ # 预热阶段
+ forward_micro_batch_id = 0
+ for i in range (micro_batch_in_warmup):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(forward_micro_batch_id)
+ job_list.append(forward_job)
+ forward_micro_batch_id += 1
+
+ backward_micro_batch_id = 0
+ for i in range (micro_batch_in_1f1b):
+ # 为稳定阶段中的每个计算任务(BACKWARD和FORWARD)创建对应的任务
+ # 每个micro-batch中都有一个 BACKWARD 和一个 FORWARD 计算任务
+ for job_type in self .jobs_in_stable_phase:
+ job = core.Job(job_type)
+ micro_batch_id = (
+ forward_micro_batch_id
+ if job_type.startswith( FORWARD )
+ else backward_micro_batch_id
+ )
+ job.set_micro_batch_id(micro_batch_id)
+ job_list.append(job)
+ forward_micro_batch_id += 1
+ backward_micro_batch_id += 1
+
+ for i in range (micro_batch_in_warmup):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(backward_micro_batch_id)
+ job_list.append(backward_job)
+ backward_micro_batch_id += 1
+
+ # 创建优化任务
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 )
+ job_list.append(opt_job)
+ return job_list
+
可以看到,1F1B 的 _create_job_list
和 FThenB 的逻辑略有不同,1F1B 的 _create_job_list
中会根据 pp_stage
和 pp_degree
来确定前向计算任务和后向计算任务的数量。在稳定阶段中,每个 micro-batch 中都有一个 BACKWARD 和一个 FORWARD 计算任务。最后添加一个优化任务。
+
+预热过程是什么?
+根据 1F1B 的流水编排图可以发现,在训练刚刚开始的时候,gpu 中会有很大的空闲,这个时候任务的执行顺序不是完全按照 1F1B 的编排方式,预热阶段就是对应这个过程。
+
+2.5 流水并行执行过程
+没启动多卡训练的时候,paddle 的训练命令类似于:
+bash python -m paddle.distributed.launch --gpus 0,1,2,3 train.py
+
这个 paddle.distributed.launch
模块会启动多个进程,每个进程都会执行 train.py
,并且会传入不同的环境变量,用于指定当前进程的角色和进程数量。下面分析一下每个进程里面上面拆分出来的 job 是如何执行的。
+在获取到编排好的 job_list
之后,我们就可以初始化 Executor
对象,然后执行 Executor
的 run
方法。下面是初始化 StandaloneExecutor
对象的代码:
+python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
+else :
+ ...
+ plan = core.Plan([default_job], type_to_program)
+
+new_exe = _StandaloneExecutor(place, plan, scope)
+return new_program, new_exe
+
其中的核心代码 apply_pass
在上面已经介绍过了。 在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。
+_StandaloneExecutor 是 C++ 端的一个类,下面是它的构造函数:
+cpp StandaloneExecutor :: StandaloneExecutor ( const platform ::Place & place,
+ const interpreter ::Plan & plan,
+ Scope * scope)
+ : place_ (place), plan_ (plan), scope_ (scope) {
+ // 获取计划中micro-batch的数量。
+ int64_t micro_batch_num = plan_. MicroBatchNum ();
+
+ // 调整待等待的强制事件向量的大小,以匹配micro-batch的数量。
+ vec_force_events_to_wait_. resize (micro_batch_num);
+
+ // 为每个micro-batch创建新的 Scope,并将其存储在 micro_batch_scopes_ 中。
+ for ( int64_t i = 0 ; i < micro_batch_num; ++ i) {
+ micro_batch_scopes_. emplace_back ( & scope-> NewScope ());
+ }
+
+ // 创建一个用于日志记录的字符串流,显示micro-batch的创建。
+ std ::stringstream ss;
+ ss << "Create " << micro_batch_num << " micro_batch_scopes for scope "
+ << scope_ << " : " ;
+ for (Scope * scope : micro_batch_scopes_) {
+ ss << scope << ", " ;
+ }
+ VLOG ( 6 ) << ss. str ();
+
+ // 获取计划中的所有Job
+ const auto& jobs = plan_. JobList ();
+
+ // 对每个 Job 执行以下操作。
+ for ( const auto& job : jobs) {
+ const std ::string & job_type = job-> Type ();
+ std ::shared_ptr < ProgramDesc > program = nullptr ;
+ std ::shared_ptr < :: pir ::Program > ir_program = nullptr ;
+
+ if (FLAGS_enable_pir_api || FLAGS_enable_new_ir_in_executor) {
+ ir_program = plan_. IrProgram (job_type);
+ } else {
+ program = std :: make_shared < ProgramDesc >( * (plan_. Program (job_type)));
+ }
+
+ int64_t micro_batch_id = job-> MicroBatchId ();
+
+ // 检查micro-batch ID 是否在合理范围内。
+ PADDLE_ENFORCE (
+ micro_batch_id >= 0 && micro_batch_id < micro_batch_num,
+ phi :: errors :: Unavailable ( "The micro batch id ( %lld ) out of bound, "
+ "which should be in the range of [0, %lld ]." ,
+ micro_batch_id,
+ micro_batch_num));
+
+ // 如果存在多个micro-batch并且未启用 PIR API,则设置 Feed 和 Fetch 操作的列属性。
+ if (micro_batch_num > 1 && ! FLAGS_enable_pir_api) {
+ SetColAttrForFeedFetchOps (program, micro_batch_num, micro_batch_id);
+ }
+
+ interpreter ::ExecutionConfig execution_config;
+ execution_config.create_local_scope = false ;
+ execution_config.skip_gc_vars = job-> SkipGcVars ();
+
+ // 当前仅支持 CPU。
+ // 如果启用新 IR,创建一个包含计算的 IR 程序并将其更新为计划。
+ if (FLAGS_enable_new_ir_in_executor) {
+ ... // 新 IR 相关代码暂不讨论
+ } else {
+ // 创建 InterpreterCore 并将其存储在 interpretercores_ 中。
+ interpretercores_. emplace_back (
+ std :: make_shared < InterpreterCore >(place_,
+ program-> Block ( 0 ),
+ micro_batch_scopes_[micro_batch_id],
+ execution_config));
+ interpretercores_. back ()-> SetCopyProgram (program);
+
+ auto prog_inter = const_cast< ProgramInterpreter *> (
+ static_cast<const ProgramInterpreter *> (
+ interpretercores_. back ()-> Impl ()));
+ prog_inter-> SetForceEventsToWaitInfo (
+ & (vec_force_events_to_wait_[micro_batch_id]));
+
+ ...
+ }
+ }
+ }
+}
+
在初始化的时候,Paddle 会为每个 job 都创建一个 InterpreterCore
对象,然后将这些 InterpreterCore
对象存储在 interpretercores_
中。在后续的执行过程中,Paddle 会根据不同 job 执行不同 InterpreterCore
对象。初始化了 StandaloneExecutor 对象之后,我们就可以执行 run
方法了。下面是 C++ 端 run
方法的实现逻辑:
+cpp paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ // 创建一个事件记录器,用于跟踪 StandaloneExecutor::run 方法的执行。
+ platform ::RecordEvent record_event (
+ "StandaloneExecutor::run" , platform :: TracerEventType ::UserDefined, 1 );
+
+ // 获取计划中的所有作业。
+ const auto& jobs = plan_. JobList ();
+
+ // 用于跟踪不同类型的作业的第一个出现位置的映射。
+ std ::map < std ::string, size_t> type_to_first_id;
+
+ // 如果共享构建结果的标志为假,执行以下操作。
+ if ( ! is_interpretercore_build_result_shared_) {
+ // 为第一个作业设置其类型的映射,并确保所有其他相同类型的作业共享工作队列。
+ type_to_first_id[jobs[ 0 ]-> Type ()] = 0 ;
+ for ( size_t job_idx = 1 ; job_idx < jobs. size (); ++ job_idx) {
+ interpretercores_[job_idx]-> ShareWorkQueueFrom (interpretercores_[ 0 ]);
+ if (type_to_first_id. count (jobs[job_idx]-> Type ()) == 0 ) {
+ type_to_first_id[jobs[job_idx]-> Type ()] = job_idx;
+ }
+ }
+ // 将共享构建结果的标志设置为真。
+ is_interpretercore_build_result_shared_ = true ;
+ }
+
+ // 迭代所有作业。
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+
+ // 创建一个事件记录器,用于跟踪每个作业的执行。
+ platform ::RecordEvent record_event (
+ job_type + "-" + std :: to_string (job-> MicroBatchId ()),
+ platform :: TracerEventType ::UserDefined,
+ 1 );
+
+ // 记录详细日志,显示作业的索引、类型和micro-batch ID。
+ VLOG ( 6 ) << "Run job (" << job_idx << "), type = " << job_type
+ << ", micro_batch_id =" << job-> MicroBatchId ();
+
+ // 如果作业类型已经在 type_to_first_id 中,且未启用新 IR,则共享构建结果。
+ if (type_to_first_id. count (job_type) != 0 &&
+ ! FLAGS_enable_new_ir_in_executor) {
+ interpretercores_[job_idx]-> ShareBuildResultsFrom (
+ interpretercores_[type_to_first_id[job_type]]);
+ }
+
+ // 如果作业的数量大于 1 且作业类型不是 "forward",则运行作业(使用一个空的临时 feed 名称列表)。
+ // 否则,运行作业并传递真正的 feed 名称列表。
+ if (jobs. size () > 1 && job_type != "forward" ) {
+ const std ::vector < std ::string > tmp_feed_names = {};
+ interpretercores_[job_idx]-> Run (tmp_feed_names, /*need_fetch = */ false );
+ } else {
+ interpretercores_[job_idx]-> Run (feed_names, /*need_fetch = */ false );
+ }
+ }
+
+ // 记录每个作业的运行时间,如果启用了 CUDA 且自动并行分析器被激活。
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+
+ // 返回 Fetch Tensors,根据是否启用新 IR 采取不同的操作。
+ if (FLAGS_enable_new_ir_in_executor) {
+ // 创建一个 FetchList,包含需要获取的张量。
+ framework ::FetchList fetch_res;
+ for ( auto& var_name : fetch_var_names_) {
+ auto* var = scope_-> FindVar (var_name);
+ fetch_res. push_back (var->Get < phi ::DenseTensor > ());
+ }
+
+ return fetch_res;
+ } else {
+ // 获取 "interpreter::kFetchVarName" 变量,其中包含需要返回的 Fetch Tensors。
+ auto* fetch_var = scope_-> FindVar ( interpreter ::kFetchVarName);
+ if (fetch_var) {
+ return std :: move ( * fetch_var->GetMutable < framework ::FetchList > ());
+ } else {
+ return {};
+ }
+ }
+}
+
三、流水并行可视化工作
+3.1 工作背景
+当下大模型的训练时间较长,分布式训练时序图的可视化对于调试和分析模型的训练过程非常重要。当下没有工具能够直接给出各个 GPU 设备上不同 Job 的运行区间,因此我们需要设计一个可视化工具来实现这个功能。
+当下的工作大多是可视化出 cpu 端的各个 Job 的运行区间。由于 gpu 任务的异步性,在 cpu 端启动的 Job 并不一定在 gpu 端立即执行,因此 cpu 端的可视化并不能直接反映出 gpu 端的运行情况 。
+
+3.2 可视化实现思路
+我们的可视化工具的实现思路是:在 gpu 端各个 Job 结束的时候,打印出 Job 的类型和结束时间,然后在使用 python 脚本这些信息,绘制出各个 Job 的运行区间 。
+
+3.3 准确定位 Job 的开始与结束时间
+Paddle 中所有的计算任务都是在一个流上完成的,这个流我们叫做计算流。为了能够准确定位 Job 的开始与结束,我们需要找到每个 Job 中第一个计算算子,和最后一个计算算子,并在第一个计算算子之前插入一个 cuda stream callback
,在最后一个计算算子之后插入一个 cuda callback
。由于 cuda stream callback
会等待计算流中前面的任务执行完毕后才会执行,因此我们可以准确的定位出 Job 的开始时间和结束时间。
+前面说到过每个 Job 都是由一个 InterpreterCore
对象来执行的,我们在每个 InterpreterCore
对象中使用自定义类来存储 Job 的开始时间和结束时间。下面是每个 InterpreterCore
对象中插入 cuda stream callback
和 cuda callback
的代码:
+cpp // paddle/fluid/framework/new_executor/program_interpreter.cc
+void ProgramInterpreter :: RunInstruction ( const Instruction & instr_node ) {
+ ...
+ try {
+ instr_node. WaitEvent (place_);
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 如果 timer 还没插入开始的 callback 并且当前的 op 不是通信 op,那么就插入开始的callback
+ if ( ! calculate_stream_timer_-> IsStarted () &&
+ ! interpreter :: IsCommunicationOp (instr_node)) {
+ VLOG ( 3 ) << "Start calculated stream timer from op: " << op-> Type ();
+ calculate_stream_timer_-> Start ();
+ }
+ }
+#endif
+ ...
+}
+
上面的代码给出了在第一个计算算子之前插入 cuda stream callback
的逻辑,下面是在最后一个计算算子之后插入 cuda callback
的逻辑:
+cpp void ProgramInterpreter :: ExecuteInstructionList (
+ const std :: vector < Instruction > & vec_instr ) {
+ ...
+ if (enable_job_schedule_profiler_) {
+ for ( int i = vec_instr. size () - 1 ; i >= 0 ; -- i) {
+ auto& instr_node = vec_instr[i];
+ if ( ! interpreter :: IsCommunicationOp (instr_node)) {
+ // 记录下来最后一个计算 op 的id
+ VLOG ( 3 ) << "Last calculated op type: " << instr_node. OpBase ()-> Type ();
+ last_calculate_instr_id_ = i;
+ break ;
+ }
+ }
+ }
+ ...
+}
+
+void ProgramInterpreter :: RunInstructionAsync ( size_t instr_id ) {
+ ...
+ while ( ! ready_ops. empty ()) {
+ instr_id = ready_ops. top ();
+ ready_ops. pop ();
+ auto& instr_node = vec_instruction_. at (instr_id);
+
+ RunInstruction (instr_node);
+
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 给最后一个计算 op 之后插入一个callback
+ if (instr_id == last_calculate_instr_id_ &&
+ calculate_stream_timer_-> IsStarted ()) {
+ VLOG ( 3 ) << "Stop calculated stream timer from op: "
+ << instr_node. OpBase ()-> Type ();
+ calculate_stream_timer_-> Stop ();
+ }
+ }
+#endif
+}
+
当所有的 Job 都执行完毕之后,我们就可以 StandAloneExecutor
的 Run
方法中获取到每个 Job 的开始时间和结束时间了。下面是获取 Job 开始时间和结束时间的代码:
+cpp // paddle/fluid/framework/new_executor/standalone_executor.cc
+paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ ...
+ // record each job's run time
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+ ...
+}
+
+// paddle/fluid/framework/new_executor/interpretercore.cc
+std :: tuple < double , double > ProgramInterpreter :: InterpreterRunTime () {
+ double start_time = 0 , end_time = 0 ;
+#if defined ( PADDLE_WITH_CUDA )
+ start_time = calculate_stream_timer_-> StartTime ();
+ end_time = calculate_stream_timer_-> EndTime ();
+#endif
+ return std :: make_tuple (start_time, end_time);
+}
+
3.4 可视化工具的实现
+在获取到每个 Job 的开始时间和结束时间之后,我们就可以使用 python 脚本来绘制出各个 Job 的运行区间了。可视化工具的实现思路是将每个 Job 的开始时间和结束时间保存成 Chrome Trace Event 的格式,然后使用 chrome://tracing
工具来绘制出各个 Job 的运行区间。以下是绘制效果图:
+
+参考文献
+
+https://docs.oneflow.org/master/parallelism/01_introduction.html#_5
+https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_parallel_end_to_end/index_cn.html
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/nknan-story
+ https://pfcc.blog/posts/nknan-story
+ Fri, 26 Apr 2024 00:00:00 GMT
+ 大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
+
+
+
+一、前言
+NKNaN 是我们社区中的一位特别的成员,她不仅是我们社区中少有的女性猛将,更是一个勇敢跨界的探索者。从西安的古城墙到香港的繁华街道,再到可能的北美新生活,她的脚步从未停歇。她的学术之旅横跨金融、数学和计算机科学,每一步都显得那么自然而充满挑战。
+NKNaN 的职业生涯同样精彩纷呈——她曾冲动地辞去稳定的工作,追寻博士学位的梦想,但在一年后,她又勇敢地决定放弃,选择重新探索适合自己的道路。无论是在学术界还是生活中,NKNaN 都以她独有的风格和魅力,展示了自己对生活的热情和对技术的执着。
+她的故事不仅充满了色彩,还散发着温暖的光芒。让我们一起走进 NKNaN 的世界,看她如何在技术的大潮中保持真我,用代码和智慧编织自己的梦想,享受那份难得的轻松和自在。
+二、采访内容
+
+
+介绍一下自己吧,Nan 佬!
+NKNaN: 哈喽大家好,我是百度飞桨社区的个人开发者 NKNaN,非常荣幸能够被选中参与这次采访~我老家在西安,本科毕业于香港理工大学金融服务专业,(水)master 毕业于香港科技大学金融科技专业。因为想要出国看看外面的世界,目前正在申请北美的 CS 项目。关于我自己的话,平时比较宅,喜欢室内的活动,撸猫、弹钢琴、看动画片、写代码;偶尔外出,外出的话喜欢随手拍拍风景?MBTI 是 INFJ,还被人誉为 I 人中的 I 人。
+
+
+
+
+ 撸猫
+
+
+
+ 看透一切的猫猫
+
+
+
+
+ 随拍
+
+
+
+看到你本科在香港理工大学就读工商管理专业,可以聊聊当时为什么选择这个专业呀?以及为什么选择去香港读书?
+NKNaN: 专业是家里人给我选的。因为我爸妈都在银行工作,他们就觉得学了这个,以后进银行比较方便呗~
+选择去香港也是父母决定,他们可能觉得香港是亚洲金融中心之类的,更加国际化一点。所以当时高考完了之后,父母告诉我可以选择香港这条路,就用高考成绩给我报了香港的学校。当时香港所有学校都申了,但港前三所都要面试,我英语口语又差,就挂掉了,最后还是选择了港理工。
+但现在回过头看看决策还挺失误的,一开始就没有规划好就选择了去香港。这人生地不熟的,又不能转专业,还是太听父母话了。
+
+
+
+ 本科大二最后一次去维港,之后疫情就回家网课了qaq
+
+
+
+觉得失误是因为对本科专业不太喜欢吗?但看你本科专业学的很好、绩点非常高,还获得了学院杰出学术成就奖!
+NKNaN: 这个奖是按每一年小专业的排名发的,如果在本专业排前三的话就能获得。可能我们专业比较废,大部分人都比较菜,像其他那些小专业的获奖大佬,他们的分数就比我高。
+而且其实我的专业算是文科。文科怎么说呢,学和不学感觉好像没啥区别?像我们绝大部分课程的 assessment,很大一部分得分占比是通过写 essay 来拿分,但 essay 人家愿意给你几分就给你几分,纯看人家的心情。所以这边也奉劝大家,如果对自己写文商课小论文的能力没有十足把握千万不要来学商科!!
+另外,商科如果想学得好,英语好是最基础的。家里资源也要好,还不能是 i 人!像做 presentation 的时候,必须要表现的很 expressive,要能说(吹)出来好多东西。但我就是 i 人,不太适合商科这种风格,还是喜欢做一些具象化的成果。
+所以本科的时候就想转计算机了,但学校太坑太死板了,不让转专业,就只能去辅修。当时成绩好的人都会去辅修数学或者计算机(好多人都去辅修计算机)因为我的 GPA 不够,最后就选择辅修数学了~其实自己也想往计算机方面靠,就自学了 Machine Learning 之类的课程,后来读的 master 也是香港科技大学的金融科技专业。
+
+
+想学计算机是因为兴趣吗?还是因为赚钱多呀(笑)
+NKNaN: 一开始确实是基于自己兴趣吧,后来发现这个赚钱确实也挺多的~不过感觉对计算机感兴趣的女孩子确实可能比较少一点。
+
+
+研究生毕业之后,你在上海某银行的金融科技子公司短暂工作了一年,可以讲讲吗?
+NKNaN: (先给公司打个码)我当时入职了智能风控组,主要是用机器学习模型给风控项目做建模,比较传统和偏业务。但实际上做的事情挺杂的,还会做一些客户信用评分卡评级之类的事,会用到一些统计学习模型,基本就是调调参数。我自己对这种工作没有非常大的热情,想看看能不能读个博提升一下(虽然后来发现读错了),就有点冲动的裸辞了,也不建议大家学习。
+不过那里的团队氛围真心很 nice,大家的关系都很融洽,比较扁平化,入职之后会有很多破冰以及团建的活动,平时也会互相分享技术心得。
+
+
+
+
+ 上海某公园团建-1
+
+
+
+ 上海某公园团建-2
+
+
+
+
+冲动是因为受到刺激了吗?
+NKNaN: 对,确实有点受刺激。那份工作工资很少,一个月没有补贴的时候只有 9k,有补贴的时候也只有一万多一点(应届生刚进来的工资),这还是在上海!向上发展的路线我也比较迷茫,走技术路线在那里好像待遇一般,走管理路线又不太适合我。而且杂事也多,像处理一些数据都算正事了,很多时候会做和工作完全无关的事,就比如说组织什么活动、清点一下资产、给部门 HR 做助理……给人分工很不明确的感觉。
+但其实如果一直待在那里也可以安安稳稳的,只是我自己不太喜欢能一眼望得到头的生活,每个人的选择不一样啦。
+
+
+那之后去读博是什么感觉~以及读了一年后为什么又选择 quit?
+NKNaN: 在 2023 年 9 月我去港理工攻读 PhD,但工作其实 5 月就辞了,因为那会儿导师已经开始给我做一些数学基础和科研能力的训练(做题和读 paper)。我导师挺 push 的,一周要开三次组会,其中我要主讲两次——一次是论文进度、一次是讲做的习题。然后还有一次相当于旁听,但是旁听也不能只听着,得发表意见参与进来,很累。
+而且我导师是属于应用数学学院下的,她是想把传统的统计学和 Machine Learning 结合,做一些统计迁移学习,而不是用目前流行的 Deep Learning,这就对数学能力要求比较高。虽然我本科辅修了数学,但还是觉得自己的数学基础能力不太够,可能看 paper 的时候理解的会容易一点,不过理解和自己推出来这两者差别是很大的(真的推不了一点)。
+可是我能力太差了,光是训练就把我搞懵了。如果按我当前这个速度去读博,可能得要五年……导师对我期望值也很高,想着三年就毕业吧,弄得我压力很大。而且对于这个方向我也不是很感兴趣,感觉太传统了,所以最后还是决定 quit。
+
+
+所以选择 quit 一方面是压力大,另一方面是方向不太合适?
+NKNaN: 是的。除非你本科就是学数学的,已经经过三到四年的严格专业训练,然后再去读这个博士,可能收获会更大吧~或者找一个计算机系的教授,跟着做深度学习可能更适合我。
+
+
+你这些年在香港待了也挺久的,喜欢香港文化吗?粤语会说吗?
+NKNaN: 我觉得对香港没有那么喜欢,因为有时候遇到一些比较排外的 local,体验会挺差的。
+粤语的话我到现在还不太会说,可能我语言天赋太差了。像我室友她语言就比我好的多,我跟她一起备考 GRE,她只复习了一两个月就考到了 325,而我当时考的可低了,后面又复习了两个月才考到了这分数。她一开始英语说的就很好,之后粤语学也很快,一两年就学会了,我到现在还会听不懂一些对话。另外主要是自己也不太想学粤语,感觉可难了,音调那么多,粤语的拼音发音又和中文的拼音不一样,不太规则。
+
+
+
+ 港科食堂,风景属实不戳
+
+
+
+那在日常生活中,你一般会做什么呀?
+NKNaN: 生活上我感觉因为我是 I 所以就很少社交了,除了前面提到的那些,还喜欢自己研究一些好玩的东西~比如一开始在中国大学慕课网学 Python 编程的时候,就会跟着做一些比较有意思的小项目。在学校里也修了 C++,后面为了找开发工作还学了 Java,顺便自己做了康威生命游戏 ,就是一个界面,里面有黑白小格子可以点点点,现在看是个挺无聊的一游戏了~其实本来想着学机器学习,但后来跟着做了这些开发项目后,觉得这些语言也挺有意思的,包括最近我还在学习一些前端知识。
+
+
+
+
+ 当然也用照片套模型炼过自己(雾)
+
+
+
+ 为数不多的主角是自己的外出照片
+
+
+
+
+聊聊开源吧~是什么契机接触飞桨的呀?
+NKNaN: 在去年五六月的时候,我想做一些开源项目提升一下。因为当时抱有一个目的——进大厂,所以觉得做一些开源项目应该是有好处的,然后想做深度学习领域的开源项目,就去 GitHub 搜一些国内的深度学习社区嘛,看到 Paddle 仓库有一个 project —— call for contribution,在里边的列表里看到 PaddleScience 有个题目,需要做 HamiltonianMonteCarlo(HMC)API。MonteCarlo 我肯定是知道的,但对 HMC 不太熟悉,我就搜了一下是啥样子的,感觉应该还挺好实现的,就帮着做了一下。
+
+
+像科学计算、API 功能增强之类的开源任务都有一定挑战性的,但对你这样的大佬来说是不是难度不大?
+NKNaN: 难度我觉得对我而言主要还是在于理解这个框架吧,就是理解框架背后的原理。因为像 MonteCarlo 这样的 API 底层本身应该是很好写的,给一个数学公式,如果能看懂就可以写出来吧!但要把它适配到这个框架里面,是需要花一定时间的。我自己的开发经验少,接触的开发项目也少,所以当时半天看不懂为什么这块儿要这么写,那块要那么写~
+
+
+身为一名很厉害的女性开发者,你觉得在工作或者学术中会存在大家对女性的一些刻板印象吗?
+NKNaN: 这个我感觉可能国内有的地方确实会有这种现象吧,就是说比如说找工作的时候,像涛姐写的那样,在简历上就不会写上自己的性别。然后不仅是开发者这个职业,包括其他的一些工作,在一些国企里面,好像也更偏向于男生,可能因为出于传统刻板印象,他们觉得女生事儿多,担不起大梁。
+读 PhD 的时候倒是完全没有这类问题,因为导师本身自己也是女性。她也非常提倡有女孩子能来跟她读博,她不会觉得性别是一个做研究上的一个障碍吧。这方面可能在发达地区不会有那么严重的性别歧视。
+
+
+之后有什么打算吗?是继续深造还是工作~
+NKNaN: 现在想准备去加拿大读一个 master 之类的,因为想要去国外看看。
+我感觉自己年纪有点大了,都 25 了,也有点年龄焦虑。我父母也会觉得读出来都二十七八了,有点晚了,所以大概率就是读完 master 之后找个开发的工作~
+其实我一开始还挺想去做学术研究的,但是后来发现做研究就得没日没夜,有点不对劲,完全没有 work life balance。你可能每天都得干到晚上 12 点,一点都不快乐,所以现在看起来开发应该会比做研究轻松一点吧~
+
+
+最后给我们社区的小伙伴说几句话吧!
+NKNaN: 我感觉来社区里的大家,肯定都是很有自己想法的开发者~我自己也很随性很散漫,所以就希望大家能去做自己想做的,成为自己想成为的人,不要在意外界的闲言碎语,遵从自己的内心就好~
+
+
+
+
+ GitHub头像原图照骗
+
+
+
+
+三、两分钟快问快答
+
+
+ 最喜欢的编程语言?
+
+
+
+
+ Python
+
+
+
+
+ 早起还是夜猫子?
+
+
+
+
+ 夜猫子
+
+
+
+
+ 最喜欢的科技产品?
+
+
+
+
+ 平板电脑?
+
+
+
+
+ 最常用的app?
+
+
+
+
+ 微信
+
+
+
+
+ 最近读的一本书?
+
+
+
+
+ 海伯利安
+
+
+
+
+ 最喜欢的电影或电视剧?
+
+
+
+
+ 盗梦空间
+
+
+
+
+ 必备的零食?
+
+
+
+
+ 可乐
+
+
+
+
+ 喜欢的音乐类型或歌手?
+
+
+
+
+ 中世纪吟唱风
+
+
+
+
+ 喜欢猫还是狗?
+
+
+
+
+ 猫
+
+
+
+
+ 出门必备的三样东西是什么?
+
+
+
+
+ 伞,口罩,手机
+
+
+
+
+ 如果不做开发,最想尝试的职业?
+
+
+
+
+ 自由职业
+
+
+]]>
+ 大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
+
+
+
+一、前言
+NKNaN 是我们社区中的一位特别的成员,她不仅是我们社区中少有的女性猛将,更是一个勇敢跨界的探索者。从西安的古城墙到香港的繁华街道,再到可能的北美新生活,她的脚步从未停歇。她的学术之旅横跨金融、数学和计算机科学,每一步都显得那么自然而充满挑战。
+NKNaN 的职业生涯同样精彩纷呈——她曾冲动地辞去稳定的工作,追寻博士学位的梦想,但在一年后,她又勇敢地决定放弃,选择重新探索适合自己的道路。无论是在学术界还是生活中,NKNaN 都以她独有的风格和魅力,展示了自己对生活的热情和对技术的执着。
+她的故事不仅充满了色彩,还散发着温暖的光芒。让我们一起走进 NKNaN 的世界,看她如何在技术的大潮中保持真我,用代码和智慧编织自己的梦想,享受那份难得的轻松和自在。
+二、采访内容
+
+
+介绍一下自己吧,Nan 佬!
+NKNaN: 哈喽大家好,我是百度飞桨社区的个人开发者 NKNaN,非常荣幸能够被选中参与这次采访~我老家在西安,本科毕业于香港理工大学金融服务专业,(水)master 毕业于香港科技大学金融科技专业。因为想要出国看看外面的世界,目前正在申请北美的 CS 项目。关于我自己的话,平时比较宅,喜欢室内的活动,撸猫、弹钢琴、看动画片、写代码;偶尔外出,外出的话喜欢随手拍拍风景?MBTI 是 INFJ,还被人誉为 I 人中的 I 人。
+
+
+
+
+ 撸猫
+
+
+
+ 看透一切的猫猫
+
+
+
+
+ 随拍
+
+
+
+看到你本科在香港理工大学就读工商管理专业,可以聊聊当时为什么选择这个专业呀?以及为什么选择去香港读书?
+NKNaN: 专业是家里人给我选的。因为我爸妈都在银行工作,他们就觉得学了这个,以后进银行比较方便呗~
+选择去香港也是父母决定,他们可能觉得香港是亚洲金融中心之类的,更加国际化一点。所以当时高考完了之后,父母告诉我可以选择香港这条路,就用高考成绩给我报了香港的学校。当时香港所有学校都申了,但港前三所都要面试,我英语口语又差,就挂掉了,最后还是选择了港理工。
+但现在回过头看看决策还挺失误的,一开始就没有规划好就选择了去香港。这人生地不熟的,又不能转专业,还是太听父母话了。
+
+
+
+ 本科大二最后一次去维港,之后疫情就回家网课了qaq
+
+
+
+觉得失误是因为对本科专业不太喜欢吗?但看你本科专业学的很好、绩点非常高,还获得了学院杰出学术成就奖!
+NKNaN: 这个奖是按每一年小专业的排名发的,如果在本专业排前三的话就能获得。可能我们专业比较废,大部分人都比较菜,像其他那些小专业的获奖大佬,他们的分数就比我高。
+而且其实我的专业算是文科。文科怎么说呢,学和不学感觉好像没啥区别?像我们绝大部分课程的 assessment,很大一部分得分占比是通过写 essay 来拿分,但 essay 人家愿意给你几分就给你几分,纯看人家的心情。所以这边也奉劝大家,如果对自己写文商课小论文的能力没有十足把握千万不要来学商科!!
+另外,商科如果想学得好,英语好是最基础的。家里资源也要好,还不能是 i 人!像做 presentation 的时候,必须要表现的很 expressive,要能说(吹)出来好多东西。但我就是 i 人,不太适合商科这种风格,还是喜欢做一些具象化的成果。
+所以本科的时候就想转计算机了,但学校太坑太死板了,不让转专业,就只能去辅修。当时成绩好的人都会去辅修数学或者计算机(好多人都去辅修计算机)因为我的 GPA 不够,最后就选择辅修数学了~其实自己也想往计算机方面靠,就自学了 Machine Learning 之类的课程,后来读的 master 也是香港科技大学的金融科技专业。
+
+
+想学计算机是因为兴趣吗?还是因为赚钱多呀(笑)
+NKNaN: 一开始确实是基于自己兴趣吧,后来发现这个赚钱确实也挺多的~不过感觉对计算机感兴趣的女孩子确实可能比较少一点。
+
+
+研究生毕业之后,你在上海某银行的金融科技子公司短暂工作了一年,可以讲讲吗?
+NKNaN: (先给公司打个码)我当时入职了智能风控组,主要是用机器学习模型给风控项目做建模,比较传统和偏业务。但实际上做的事情挺杂的,还会做一些客户信用评分卡评级之类的事,会用到一些统计学习模型,基本就是调调参数。我自己对这种工作没有非常大的热情,想看看能不能读个博提升一下(虽然后来发现读错了),就有点冲动的裸辞了,也不建议大家学习。
+不过那里的团队氛围真心很 nice,大家的关系都很融洽,比较扁平化,入职之后会有很多破冰以及团建的活动,平时也会互相分享技术心得。
+
+
+
+
+ 上海某公园团建-1
+
+
+
+ 上海某公园团建-2
+
+
+
+
+冲动是因为受到刺激了吗?
+NKNaN: 对,确实有点受刺激。那份工作工资很少,一个月没有补贴的时候只有 9k,有补贴的时候也只有一万多一点(应届生刚进来的工资),这还是在上海!向上发展的路线我也比较迷茫,走技术路线在那里好像待遇一般,走管理路线又不太适合我。而且杂事也多,像处理一些数据都算正事了,很多时候会做和工作完全无关的事,就比如说组织什么活动、清点一下资产、给部门 HR 做助理……给人分工很不明确的感觉。
+但其实如果一直待在那里也可以安安稳稳的,只是我自己不太喜欢能一眼望得到头的生活,每个人的选择不一样啦。
+
+
+那之后去读博是什么感觉~以及读了一年后为什么又选择 quit?
+NKNaN: 在 2023 年 9 月我去港理工攻读 PhD,但工作其实 5 月就辞了,因为那会儿导师已经开始给我做一些数学基础和科研能力的训练(做题和读 paper)。我导师挺 push 的,一周要开三次组会,其中我要主讲两次——一次是论文进度、一次是讲做的习题。然后还有一次相当于旁听,但是旁听也不能只听着,得发表意见参与进来,很累。
+而且我导师是属于应用数学学院下的,她是想把传统的统计学和 Machine Learning 结合,做一些统计迁移学习,而不是用目前流行的 Deep Learning,这就对数学能力要求比较高。虽然我本科辅修了数学,但还是觉得自己的数学基础能力不太够,可能看 paper 的时候理解的会容易一点,不过理解和自己推出来这两者差别是很大的(真的推不了一点)。
+可是我能力太差了,光是训练就把我搞懵了。如果按我当前这个速度去读博,可能得要五年……导师对我期望值也很高,想着三年就毕业吧,弄得我压力很大。而且对于这个方向我也不是很感兴趣,感觉太传统了,所以最后还是决定 quit。
+
+
+所以选择 quit 一方面是压力大,另一方面是方向不太合适?
+NKNaN: 是的。除非你本科就是学数学的,已经经过三到四年的严格专业训练,然后再去读这个博士,可能收获会更大吧~或者找一个计算机系的教授,跟着做深度学习可能更适合我。
+
+
+你这些年在香港待了也挺久的,喜欢香港文化吗?粤语会说吗?
+NKNaN: 我觉得对香港没有那么喜欢,因为有时候遇到一些比较排外的 local,体验会挺差的。
+粤语的话我到现在还不太会说,可能我语言天赋太差了。像我室友她语言就比我好的多,我跟她一起备考 GRE,她只复习了一两个月就考到了 325,而我当时考的可低了,后面又复习了两个月才考到了这分数。她一开始英语说的就很好,之后粤语学也很快,一两年就学会了,我到现在还会听不懂一些对话。另外主要是自己也不太想学粤语,感觉可难了,音调那么多,粤语的拼音发音又和中文的拼音不一样,不太规则。
+
+
+
+ 港科食堂,风景属实不戳
+
+
+
+那在日常生活中,你一般会做什么呀?
+NKNaN: 生活上我感觉因为我是 I 所以就很少社交了,除了前面提到的那些,还喜欢自己研究一些好玩的东西~比如一开始在中国大学慕课网学 Python 编程的时候,就会跟着做一些比较有意思的小项目。在学校里也修了 C++,后面为了找开发工作还学了 Java,顺便自己做了康威生命游戏 ,就是一个界面,里面有黑白小格子可以点点点,现在看是个挺无聊的一游戏了~其实本来想着学机器学习,但后来跟着做了这些开发项目后,觉得这些语言也挺有意思的,包括最近我还在学习一些前端知识。
+
+
+
+
+ 当然也用照片套模型炼过自己(雾)
+
+
+
+ 为数不多的主角是自己的外出照片
+
+
+
+
+聊聊开源吧~是什么契机接触飞桨的呀?
+NKNaN: 在去年五六月的时候,我想做一些开源项目提升一下。因为当时抱有一个目的——进大厂,所以觉得做一些开源项目应该是有好处的,然后想做深度学习领域的开源项目,就去 GitHub 搜一些国内的深度学习社区嘛,看到 Paddle 仓库有一个 project —— call for contribution,在里边的列表里看到 PaddleScience 有个题目,需要做 HamiltonianMonteCarlo(HMC)API。MonteCarlo 我肯定是知道的,但对 HMC 不太熟悉,我就搜了一下是啥样子的,感觉应该还挺好实现的,就帮着做了一下。
+
+
+像科学计算、API 功能增强之类的开源任务都有一定挑战性的,但对你这样的大佬来说是不是难度不大?
+NKNaN: 难度我觉得对我而言主要还是在于理解这个框架吧,就是理解框架背后的原理。因为像 MonteCarlo 这样的 API 底层本身应该是很好写的,给一个数学公式,如果能看懂就可以写出来吧!但要把它适配到这个框架里面,是需要花一定时间的。我自己的开发经验少,接触的开发项目也少,所以当时半天看不懂为什么这块儿要这么写,那块要那么写~
+
+
+身为一名很厉害的女性开发者,你觉得在工作或者学术中会存在大家对女性的一些刻板印象吗?
+NKNaN: 这个我感觉可能国内有的地方确实会有这种现象吧,就是说比如说找工作的时候,像涛姐写的那样,在简历上就不会写上自己的性别。然后不仅是开发者这个职业,包括其他的一些工作,在一些国企里面,好像也更偏向于男生,可能因为出于传统刻板印象,他们觉得女生事儿多,担不起大梁。
+读 PhD 的时候倒是完全没有这类问题,因为导师本身自己也是女性。她也非常提倡有女孩子能来跟她读博,她不会觉得性别是一个做研究上的一个障碍吧。这方面可能在发达地区不会有那么严重的性别歧视。
+
+
+之后有什么打算吗?是继续深造还是工作~
+NKNaN: 现在想准备去加拿大读一个 master 之类的,因为想要去国外看看。
+我感觉自己年纪有点大了,都 25 了,也有点年龄焦虑。我父母也会觉得读出来都二十七八了,有点晚了,所以大概率就是读完 master 之后找个开发的工作~
+其实我一开始还挺想去做学术研究的,但是后来发现做研究就得没日没夜,有点不对劲,完全没有 work life balance。你可能每天都得干到晚上 12 点,一点都不快乐,所以现在看起来开发应该会比做研究轻松一点吧~
+
+
+最后给我们社区的小伙伴说几句话吧!
+NKNaN: 我感觉来社区里的大家,肯定都是很有自己想法的开发者~我自己也很随性很散漫,所以就希望大家能去做自己想做的,成为自己想成为的人,不要在意外界的闲言碎语,遵从自己的内心就好~
+
+
+
+
+ GitHub头像原图照骗
+
+
+
+
+三、两分钟快问快答
+
+
+ 最喜欢的编程语言?
+
+
+
+
+ Python
+
+
+
+
+ 早起还是夜猫子?
+
+
+
+
+ 夜猫子
+
+
+
+
+ 最喜欢的科技产品?
+
+
+
+
+ 平板电脑?
+
+
+
+
+ 最常用的app?
+
+
+
+
+ 微信
+
+
+
+
+ 最近读的一本书?
+
+
+
+
+ 海伯利安
+
+
+
+
+ 最喜欢的电影或电视剧?
+
+
+
+
+ 盗梦空间
+
+
+
+
+ 必备的零食?
+
+
+
+
+ 可乐
+
+
+
+
+ 喜欢的音乐类型或歌手?
+
+
+
+
+ 中世纪吟唱风
+
+
+
+
+ 喜欢猫还是狗?
+
+
+
+
+ 猫
+
+
+
+
+ 出门必备的三样东西是什么?
+
+
+
+
+ 伞,口罩,手机
+
+
+
+
+ 如果不做开发,最想尝试的职业?
+
+
+
+
+ 自由职业
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/suzhou-kaifangyuanzi
+ https://pfcc.blog/posts/suzhou-kaifangyuanzi
+ Wed, 17 Apr 2024 00:00:00 GMT
+ 2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
+BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
+
+大赛背景
+开放原子开源基金会 是致力于推动全球开源事业 发展的非营利机构。其目标是搭建面向全球开源领域的前沿技术竞争、优秀人才选拔创新成果展示、商业转化引导和对接交流合作平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态繁荣 和可持续发展 提供动力。
+百度飞桨开源社区与开放原子开源基金会的目标和愿景有高度的重合,因此自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了「飞桨 PaddlePaddle 开源贡献挑战赛」后(大赛回顾请看 这里 ),这次飞桨团队再度受邀,发布了「PaddleOCR 算法模型挑战赛」。PaddleOCR 算法模型挑战赛包括两道赛题,分别是 OCR 端到端识别任务与通用表格识别任务,要求选手在 PaddleOCR 的基线模型之上,尽可能提升模型精度,同时保证模型的推理速度与基线模型相当(降速不超过 10%)。
+赛题有一定难度,但同时奖金也颇为丰厚🤩:
+
+赛题一:OCR 端到端识别任务
+
+一等奖:1 支队伍,每支队伍奖金 15 万元
+二等奖:1 支队伍,每支队伍奖金 4 万元
+三等奖:1 支队伍,每支队伍奖金 1 万元
+开源贡献奖:7 支队伍,荣誉证书
+
+
+赛题二:通用表格识别任务
+
+一等奖:1 支队伍,每支队伍奖金 7 万元
+二等奖:1 支队伍,每支队伍奖金 2 万元
+三等奖:1 支队伍,每支队伍奖金 1 万元
+开源贡献奖:7 支队伍,荣誉证书
+
+
+
+赛程回顾
+大赛从 1 月 15 日上线,启动报名。经过两个半月的紧张打榜后,于 3 月 31 日正式封榜。经过代码审查与线上初审后,最终在 4 月 12 日在美丽的苏州工业园区举行了决赛路演。
+在打榜过程中,选手们在官方交流群中积极讨论,互帮互助,还不忘给官方提需求😅。
+
+热心选手树先生,无私贡献了针对赛题二快速测试模型精度的脚本,得到了群友们的一致好评!开源精神拉满了!😉
+赛题一 B 榜阶段,选手反馈能不能把报错信息展示为实际的报错信息,而不是简单的"没有生成 result.txt",这样才好定位并解决问题。飞桨运营同学快速评估并作出反应,认为这是一个很合理的需求,必须安排!奈何研发人手实在是紧张,直到午夜 1 点多,才完成改动并上线,保证了选手们顺利通关 B 榜。飞桨的研发小姐姐很拼有木有!✊
+最终,大赛共报名 211 支团队,总人数达到空前的 671 人。 不过由于赛题本身还是有一定难度,最后 10 支队伍提交了作品,8 支队伍通过了代码审查,5 支队伍入围了决赛答辩。
+
+飞桨官方的模型已经很强了,要在此基础上继续提分,还得保证推理速度不下降,真的很难 。👿 ———— 某个不愿透露姓名的选手
+
+路演现场
+孙师傅被我抓去现场当主持人,那叫一个专业!😄
+
+我则有幸抱住军哥(@jzhang533 )和涛姐的大腿,当了一回评审。😎
+
+选手们的答辩也十分精彩!复旦大学的杜永坤和北京交通大学的赵苗苗,分别针对赛题一和赛题二的模型架构进行了多方面的优化,可以说相当硬核。两位也分别摘得两个赛题的一等奖桂冠,实至名归!
+
+
+令人印象深刻的是,赛题二的「识别先锋」队,是天水师范大学的吴衡老师带领三个本科生来参赛,还都是 AI Studio 的忠实用户🤗。尽管他们的显卡资源并不充裕(据说只有几张消费级显卡),但依然阻止不了他们的参赛热情。在他们的脸上,有一丝羞怯,也洋溢着激动和开心。我从他们身上看到了开源的魅力。
+
+路演结束,大合照来一张。
+
+获奖情况
+经过紧张的路演和现场打分,最终决出了我们两个赛题的获奖队伍,如下表所示。
+| 赛题 | 奖项 | 团队名称(括号内为 AI Studio 团队名) | 仓库地址 |
+|
+]]>
+ 2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
+BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
+
+大赛背景
+开放原子开源基金会 是致力于推动全球开源事业 发展的非营利机构。其目标是搭建面向全球开源领域的前沿技术竞争、优秀人才选拔创新成果展示、商业转化引导和对接交流合作平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态繁荣 和可持续发展 提供动力。
+百度飞桨开源社区与开放原子开源基金会的目标和愿景有高度的重合,因此自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了「飞桨 PaddlePaddle 开源贡献挑战赛」后(大赛回顾请看 这里 ),这次飞桨团队再度受邀,发布了「PaddleOCR 算法模型挑战赛」。PaddleOCR 算法模型挑战赛包括两道赛题,分别是 OCR 端到端识别任务与通用表格识别任务,要求选手在 PaddleOCR 的基线模型之上,尽可能提升模型精度,同时保证模型的推理速度与基线模型相当(降速不超过 10%)。
+赛题有一定难度,但同时奖金也颇为丰厚🤩:
+
+赛题一:OCR 端到端识别任务
+
+一等奖:1 支队伍,每支队伍奖金 15 万元
+二等奖:1 支队伍,每支队伍奖金 4 万元
+三等奖:1 支队伍,每支队伍奖金 1 万元
+开源贡献奖:7 支队伍,荣誉证书
+
+
+赛题二:通用表格识别任务
+
+一等奖:1 支队伍,每支队伍奖金 7 万元
+二等奖:1 支队伍,每支队伍奖金 2 万元
+三等奖:1 支队伍,每支队伍奖金 1 万元
+开源贡献奖:7 支队伍,荣誉证书
+
+
+
+赛程回顾
+大赛从 1 月 15 日上线,启动报名。经过两个半月的紧张打榜后,于 3 月 31 日正式封榜。经过代码审查与线上初审后,最终在 4 月 12 日在美丽的苏州工业园区举行了决赛路演。
+在打榜过程中,选手们在官方交流群中积极讨论,互帮互助,还不忘给官方提需求😅。
+
+热心选手树先生,无私贡献了针对赛题二快速测试模型精度的脚本,得到了群友们的一致好评!开源精神拉满了!😉
+赛题一 B 榜阶段,选手反馈能不能把报错信息展示为实际的报错信息,而不是简单的"没有生成 result.txt",这样才好定位并解决问题。飞桨运营同学快速评估并作出反应,认为这是一个很合理的需求,必须安排!奈何研发人手实在是紧张,直到午夜 1 点多,才完成改动并上线,保证了选手们顺利通关 B 榜。飞桨的研发小姐姐很拼有木有!✊
+最终,大赛共报名 211 支团队,总人数达到空前的 671 人。 不过由于赛题本身还是有一定难度,最后 10 支队伍提交了作品,8 支队伍通过了代码审查,5 支队伍入围了决赛答辩。
+
+飞桨官方的模型已经很强了,要在此基础上继续提分,还得保证推理速度不下降,真的很难 。👿 ———— 某个不愿透露姓名的选手
+
+路演现场
+孙师傅被我抓去现场当主持人,那叫一个专业!😄
+
+我则有幸抱住军哥(@jzhang533 )和涛姐的大腿,当了一回评审。😎
+
+选手们的答辩也十分精彩!复旦大学的杜永坤和北京交通大学的赵苗苗,分别针对赛题一和赛题二的模型架构进行了多方面的优化,可以说相当硬核。两位也分别摘得两个赛题的一等奖桂冠,实至名归!
+
+
+令人印象深刻的是,赛题二的「识别先锋」队,是天水师范大学的吴衡老师带领三个本科生来参赛,还都是 AI Studio 的忠实用户🤗。尽管他们的显卡资源并不充裕(据说只有几张消费级显卡),但依然阻止不了他们的参赛热情。在他们的脸上,有一丝羞怯,也洋溢着激动和开心。我从他们身上看到了开源的魅力。
+
+路演结束,大合照来一张。
+
+获奖情况
+经过紧张的路演和现场打分,最终决出了我们两个赛题的获奖队伍,如下表所示。
+
+恭喜所有的获奖队伍!🎉🎉🎉你们都是开源创新之路上的佼佼者!🚀🚀🚀
+
+PaddleOCR 开源共建研讨会
+路演结束之后,距离午饭还有一段时间。我们便借着这个机会,邀请了参赛选手们举行了一场主题为「PaddleOCR 开源共建」的研讨会。
+军哥表达了希望能够以 PaddleOCR 作为试点项目,启动飞桨开源项目社区化治理的想法。纵观国际上优秀的开源项目,都是由社区驱动的,而国内的很多开源项目,却往往只由某一家公司主导,这样其实不利于开源项目的可持续发展。大家纷纷表示了认同,但也提出了国内拿来主义盛行、开发者生存压力大、做开源只能用爱发电 等现实的问题。
+虽然在国内开源项目的纯社区化治理道阻且艰,但飞桨团队还是要积极推动尝试。如果做成了,将是非常有意义的一件事。👊
+
+大家讨论的太入神,都忘记拍照留念了 😭
+
+杭州开发者线下 Meetu 剪影
+在 4 月 14 日,我们也邀请了 14 位(其中🐦了一位)飞桨开源社区的开发者,在西湖虎跑胖的餐厅里面基交友~军哥给每人都准备了一份神秘礼品哦 🎁。
+
+
+以下为痛失真名现场
+
+
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/pfcc-36th
+ https://pfcc.blog/posts/pfcc-36th
+ Fri, 29 Mar 2024 00:00:00 GMT
+ 在第 36 次 PFCC 会议上,我们有幸邀请了 Ivy 社区的英国小哥 Daniel(@djl11 )和 Paddle 社区开发者莱师傅(@RedContritio )分别分享了代码转换工具 Ivy、PaConvert。
+
+
+
+会议议程
+
+
+如何通过 Ivy 将 PyTorch 和 TensorFlow 模型进行转换,并直接在 Paddle 项目中使用。(35 min) @djl11
+
+
+
+
+
+ Ivy 模型转换 demo 讲解(截图)
+
+
+
+
+@RedContritio PaConvert 代码转换工具介绍 (10 ~ 20min)
+
+
+
+
+
+ PaConvert 介绍(截图)
+
+
+
+
+
+会议材料及回放见百度网盘链接: https://pan.baidu.com/s/16vAVoXpCgdrrRK5e_-w7Ig ,提取码见 PFCC 微信群公告。
+
+QA 环节
+所有 QA 内容均已记录在「第三十六次 PFCC 会议纪要」 中。
+Part-1: Ivy (部分)
+
+
+问题 1: 你有测试过多少模型能够转换成功?
+
+
+ 目前测试了 30 个主流模型,均能转换成功。目前我们正在测试更多 hugging face 上的模型,大概 70 ~ 75% 能够转换成功。我们也欢迎和鼓励社区告诉我们哪些模型无法有效转换,我们有信心能够解决这些问题。
+
+
+
+
+问题 2: 对于成功转换的模型,它会影响性能吗?或者可能需要更多的时间来训练嘛?
+
+
+ 这是一个好问题,也是我们目前正在测试的东西。我们现在看到在 Paddle 上会有 30% 到 40% 的性能损失, 这是因为在我们的 Paddle 后端上有一些低效,我们目前正在努力解决这个问题。
+
+ 性能问题取决于模型,但通常来讲并不会影响训练性能。当我们从 Pytorch 转换到 Tensorflow 时,经常看到训练速度的提高。特别是当我们从一个框架转化到 Jax,经常看到一个大幅度的提升,尤其是在 TPU 上。
+
+ 所以可能有一些开销,但总的来讲不会有特别大幅度的降低。即使存在个别问题,我们也会很快修复他们。话说回来,这也是一个长期的过程,因为我们正在开发许多不同的框架,并与许多不同的生态伙伴合作。我们把精力集中在用户反馈的真实用例上,而不是试图修复所有东西。所以当你使用过程中确实出问题了,请在 discord 上联系我们,我们会把它添加到高优先级的列表中,并尽快解决。
+
+
+
+
+问题 3: 请问是否有覆盖率相关的工作,类似 PyTorch 那样对后端支持覆盖率有表单或者对应的 CI 流水线
+
+
+我们做覆盖的方式是详尽的单元测试,所以答案是有。我们在 Github 上 的 CI 已经达到了最大值,我们一直在运行单元测试,在 CPU 和 GPU 上测试每个框架、每个函数,所以我们确实有扩展函数覆盖范围。
+
+但在每个设备上,支持每个框架、每个版本的每个功能,是一个非常大的、指数爆炸级的工作。基本上有数百万个这样的测试。所以我们真正关注的是什么?这是一个很长的答案,但就像生活中的许多事情一样,我们需要关注重要的事情。我们把更多的注意力放在真正常见的函数上(relu、add、matmul 等)那些真正不常见的、较少使用的函数,我们关注的比较少。在我们看来,我们可能永远不会达到完全覆盖,但只要覆盖到 99% 的模型就是 OK 的,这比支持每个版本每个函数更重要。
+
+
+
+
+问题 4: PyTorch 大概有两千多个 API,包括很多废弃的、不常见的 API,有多少可以通过 Ivy 转换?
+
+
+我们只关注当前最新版本的 pytorch,以及其 functional API。 在 ivy/functional/frontends 你可以看到所有这些细节,包括我们在每个框架中都支持什么。
+
+主要的一点是我们支持 functional API,但我们不支持 ATen。我们并不把转换限制在 ATen 或很小的范围内(比如组成所有函数的函数子集),我们可以这么做,但不这样做的原因是我们想更高级别的代码转换。某种程度上,函数的越高层越好,因为当我们从高层 PyTorch 函数转换到高层 ivy 函数、高层 Tensorflow 函数时,把函数拆分成更小单位仍然是有可能的。但如果将底层 OP 重新创建为目标框架中能被优化的高级函数,要困难得多。这就是为什么我们专注于 functional API 和高级函数更重要(但我们也不重新实现的 class)。
+
+这是一个很长的回答,但这是有意义的。不过我们看到了良好的覆盖率,看到绝大多数模型都能正确转换。我们鼓励人们尝试它,如果它不起作用,让我们知道,我们会让它起作用。
+
+
+
+编者注:细节戳 ➡️ ivy/functional/frontends
+
+
+
+问题 5: 我们刚看到的前端,目前支持了很多。但现在还有很多 API 不能转换,那我该怎么做?怎么处理它们?
+
+
+基本上,如果我们看到开发者对某 API 有足够的兴趣,届时我们会支持。对于不那么常见的 API,Ivy 也是可以支持这些的。如果有一个模型不能转换成功,而我们有信心能让他转换成功,那么我们可以添加对那些 API 的支持。
+
+如果用户有自定义的 C++ 代码,那么默认情况下不能转换,但我们提供一个接口,你可以在其中指定 C++ 的 torch 实现,这样就可以转换了。
+
+
+
+
+问题 6: PyTorch API 有很多参数,不同参数可以组成各种组合,如果某些参数不支持,则如何处理?
+
+
+基本上我们支持 PyTorch 的所有行为,包括所有额外的参数等。我们通过构建基于 Ivy 的统一的 functional API(如 ivy.matmul、ivy.add、ivy.reshape 等),重新创建 PyTorch 函数,以完美模仿 PyTorch 的任何可能行为。这可能需要一个 Ivy 函数来重新创建,但如果是一个具有多种不同模式的复杂 Python 函数,可能就需要十个。然后,使用 Ivy 重新创建所有这些行为,每个 Ivy 函数都有特定的 Paddle 后端。因此,一个 PyTorch 函数可能需要多个 Ivy 函数,而这些 Ivy 函数又可能需要多个 Paddle 函数来完全重新创建该行为。所有变体、额外的参数和边缘情况都可以通过中间表示和 API 得到支持。在这些情况下,需要将其作为 Paddle 函数的组合重新创建,尽管这可能以运行时间速度为代价,但通常不会看到大的损失。
+
+
+
+
+问题 7: 目前大模型很流行。对于预训练的大模型,有大量的预训练权重,是否有更快的方式进行转换。
+
+
+在从 PyTorch 转换模型到 Paddle 后,因为现在 Paddle 模型就是一个加强版的 PyTorch 模型,转换权重可以相对简单,比如将它们转换为 Numpy 数组,然后加载到 Paddle 中。实际上,Ivy 在模型转换过程中,会自动把所有的 PyTorch 权重转换为 Paddle 权重。
+
+目前没有更快的转换方式,通常使用 DLPack(张量数据结构的中间表示标准)作为中间件,但由于不同框架对 DLPack 的支持不一致,最终选择使用 Numpy 作为中介。我们把将权重转移到 CPU,以高精度格式存储并转换为 Numpy 数组,然后转移到新框架中,这种方法在 demo 演示中以及对于大型模型都能很好地工作。
+
+实际上目前的转换是基于 function tracing,如果大型语言模型需要多个 GPU 运行,这可能会有些复杂。不过,我们将很快转向使用纯 symbolic tracing 方法,届时就不需要存储所有权重和中间数组,而是基于符号追踪的代理数组,这将意味着不需要启动大量 GPU 来完成函数追踪。
+
+
+
+
+问题 8: 当引入一个新 API 时,支持新 API 的成本有多大?
+
+
+从工程成本的角度来看,支持一个新 API 并不困难,也不是我们特别关注的问题。我们大部分时间都花在了 function tracing 的逻辑、抽象语法树(AST)逻辑以及编译器和追踪器上。
+
+添加一个新的前端功能并不难,做起来相当快速和容易。事实上,所有前端 API 和后端 API 都是完全开源的(Apache 2 许可),任何人都可以为其贡献代码。如果在转换模型时失败,并且报错消息指出模型转换失败是因为缺少来自 Ivy/PyTorch 前端的某个函数,我们还提供了如何提交拉取请求以及如何自行添加该功能的链接。真正困难的部分是处理动态控制流、以可扩展的方式进行函数追踪、获取正确的抽象语法树表示,这些都是与框架无关的工作,我们以一种不特定于任何框架的方式进行这些工作。因此,简短的回答是添加新 API 相对容易,真正困难的是其他部分。
+
+
+
+
+问题 9: Ivy 是有特定的前端 API,还是只转译其他框架?
+
+
+Ivy 本身也是一个框架,拥有自己的前端 API(如 TensorFlow、PyTorch、JAX 等)以及自己的一套函数。Ivy 的 function API 有两个用途:第一个用途是作为一个中间表示,用于从一个框架转换到另一个框架,即 Ivy 的 API 充当中间表示;第二个用途是作为其自身的框架,允许直接在 Ivy 中编写新代码,可以在 Ivy 中编写整个模型,并使用 Ivy 类和 Ivy 函数,然后可以切换后端,使用 Paddle、TensorFlow、PyTorch 或 JAX 等。因此,Ivy 既能自身作为框架,也能转译其他框架。但我们认为最有价值并且最直接的是转译器功能,因为这样已有的所有代码都可以直接使用,而无需任何人编写新的 Ivy 代码。
+
+
+
+
+问题 10: 听起来和 keras 很相似?
+
+
+是的!如果忽略前端,Ivy 和 Keras 非常相似。
+
+
+
+
+问题 11: 我们是否需要使用更高的内存来转换模型?因为也许转换模型过程中需要保存中间信息,所以可能会占用一些内存。所以我想问问,像转换 llama 这样的大模型是否 ok?
+
+
+这是一个很好的问题。目前,鉴于转译器是基于函数追踪(function tracing)的,确实需要调用模型以追踪图(graph),这意味着在转换时需要能够对模型进行推理。现在,转换本身不需要在目标设备上进行,只要你有一台内存足够的机器,就可以在 CPU 上完成转换,并且默认情况下转换是在 CPU 上进行的,因为通常 CPU 有的 RAM 比 GPU 多。
+
+在转译器的一个很旧的版本中,我们曾同时获取所有 PyTorch 权重和所有 Paddle 权重,并让它们同时存在于内存中,这是非常糟糕的做法。现在,权重从 A 转换到 B 是逐步进行的,我们先取第一个权重,将其转换为 Numpy,然后转换为 Paddle,接着转换第二个权重,这样我们就不会重复获取权重。但是,我们避免尽可能多的函数追踪(function tracing),我们现在有自己的 AST(抽象语法树)方法,这个方法工作得很好、非常稳定,我们正在与几家公司合作开发这一点。
+
+最终设计基于 AST,基于符号追踪,我们将实际的函数追踪作为最后的手段,因此内存使用将会非常低。但是,正如你所说,现在确实需要一些 RAM 来转换一个非常大的模型,但希望在几个月内,这将不再是问题。
+
+
+
+
+问题 12: 你如何平衡你的生活和工作,以及保持你对开源的热情呢?
+
+
+平衡生活和工作非常困难,但幸运的是,我真的很热爱我正在做的事情,这是保持我动力的原因。我们不仅仅是在做一个开源项目,还在建立一家公司,需要与客户进行沟通。虽然我是唯一的创始人(并非是原本的设计),而且这确实需要付出大量的工作,但我对统一人工智能领域的景象充满热情,总是对看到的碎片化情况感到沮丧,无论是在 AI 框架还是在大型语言模型(LMM)的领域。目前我们正在努力统一这些领域,保持激情和兴奋是我继续前进的动力,如果我不再感到兴奋,可能就不会那么有趣了。幸好,我始终保持着兴奋感,所以工作并不感觉艰难。确实,因为这些并不感觉像是工作,所以更容易保持。
+
+此外,帝国理工学院的学习经历非常紧张,这让我掌握了之前缺少的知识教育和时间管理经验。
+
+但我也要说,我会把周日作为休息日,我认为你也需要休息,否则很快就会感到疲惫不堪。
+
+
+
+
+问题 13: 英国的人工智能环境怎么样?是否会有官方活动之类的?
+
+
+英国的人工智能环境还是不错的。虽然我经常到处旅行,在欧洲和美国都呆过相当长的时间,所以并不算是英国本地人,但英国的 AI 环境绝对是值得关注的。比如,DeepMind 就设在英国,谷歌的主要 AI 分支也在伦敦。显然,Meta、亚马逊以及其他几家公司也在伦敦设有 AI 办公室。伦敦还有很多有趣的初创公司,所以我觉得很幸运能住在伦敦,特别是在靠近国王十字的伊斯灵顿区,那里可以说是整个科技圈的中心。我遇到的很多很酷的初创公司以及举办的活动数目都令人惊叹,所以我认为这里的环境非常好。我很高兴能在伦敦,与这么多创造酷炫事物的人在一起。
+
+我认为最大的 AI 人才集中地是旧金山,那里又是另一个水平,但我仍感觉英国很棒,伦敦也很棒,虽然它还没有达到旧金山的水平,但也许将来会有所改变。
+
+
+
+
+Part-2: PaConvert (部分)
+
+
+编者注 ✍️:主要是英国小哥在问莱师傅 😛
+
+会议剪影
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/wangxin-story
+ https://pfcc.blog/posts/wangxin-story
+ Mon, 18 Mar 2024 00:00:00 GMT
+ 无论是工作还是生活,他都认真对待!无论是开源世界还是家庭亲情他都怀抱深沉热爱!从一开始提修改文档 PR 的边缘者到如今横扫各大开源任务的 Paddle 扫地僧!汪师傅一直在开源界默默努力💪深耕~今天,就让我们一起揭开这位神秘大佬的面纱,探寻他的故事吧!✨✨✨
+
+
+
+一、汪师傅幸福瞬间
+
+
+
+
+ 汪师傅幸福瞬间 1
+
+
+
+
+
+
+ 汪师傅幸福瞬间 2
+
+
+二、采访内容
+
+
+汪师傅给我们介绍一下自己吧!
+汪师傅: 我硕士毕业于兰州理工大学,通信与信息系统专业。老家在安徽安庆,目前在宁波工作,工作 4 年多了。兴趣爱好就是写代码、吃美食、喝酒。
+
+
+你在兰州理工大学攻读硕士期间,最难忘的经历是什么?
+汪师傅: 在兰州最难忘的就是各种各样的美食。吃得最多的是兰州牛肉面(兰州市以外地区常见的“兰州拉面”与兰州牛肉面并非同一种食物,多为青海化隆拉面)。记得学校里有一个食堂专门做牛肉面,本地人喜欢说去吃一碗牛大。牛肉面讲究一清、二白、三红、四绿、五黄,即汤清、萝卜片白、辣椒油红、香菜和蒜苗绿,以及面条黄亮。面形又分为毛细、细、二细、三细、二柱子、韭叶、薄宽、宽、大宽等等,让人选择不过来。我一般选二细加鸡蛋加一碟牛肉。放哈(“放哈”在兰州方言中意思是"发酵”)的甜胚子奶茶是另一种难忘的美食,点一杯奶茶和三五好友坐在一起聊聊天也是一种享受。
+
+
+
+
+ 汪师傅拍的兰州牛肉面
+
+
+
+
+你本科在安徽又在兰州读硕士,为什么选择在宁波工作?可以简单讲讲现在工作在做什么呢?
+汪师傅: 找工作的时候,一个亲戚正好拍了一张招聘广告,并且发给我了。招聘的公司在宁波,我就顺手投了一份简历,后面被录用了,就去宁波了。工作主要是做生化、免疫、血脂、血球、尿液分析仪里面涉及算法的部分。
+
+笔者注 ✍️:汪师傅本科毕业于安徽的淮北师范大学!
+
+
+
+汪师傅工作四年多了,觉得工作后自己最大的变化是什么呢?
+汪师傅: 从萌新变成了老油条。
+
+
+听你说平时喜欢吃美食,可以给我们推荐一下宁波/安徽/兰州分别有啥好吃的东西吗?
+汪师傅: 宁波烤菜年糕、鳗鲞、红膏呛蟹和泥螺都还不错。安徽的话推荐臭鳜鱼和山粉圆子。兰州必须来一碗牛肉面和一杯甜胚子奶茶😁。
+
+
+通信这类专业好像和深度学习关联不大,你怎么想到去接触深度学习?
+汪师傅: 读研的时候做的是传感器网络和优化算法,对深度学习有些了解。工作的时候开始做信号处理算法和图像处理算法,后面做项目发现用深度学习的方法效果更好,就开始学深度学习了。
+
+
+你在 Paddle 社区中做了很多贡献,当时为什么想着加入 Paddle 开源社区?后来又为什么一直坚持给 Paddle 做贡献?你觉得这些贡献有什么意义?
+汪师傅: 我是从学习 OCR 接触到 Paddle 社区的。当时在 AI Studio 上有一门课叫「动手学 OCR·十讲」,学习的过程中开始看 PaddleOCR 的代码和文档。在阅读文档的时候会发现错误,就慢慢开始提一些 typo fix 的 PR。而给 Paddle 框架做贡献则是从 Paddle 黑客松和快乐开源任务开始的。我做的第一个 Paddle 框架的贡献是 [CodeStyle] Compiler Warning tracking issue 相关的。这些开源贡献的意义大概是加深了对开源框架的理解、提升了自己写代码的能力,对代码质量有了更高的追求。
+
+
+
+
+ 汪师傅部分开源任务展示 1
+
+
+
+
+
+
+ 汪师傅部分开源任务展示 2
+
+
+
+
+听说你加入了飞桨社区开源发展工作组 🙌🏻,对于该工作组你有什么看法呢?
+汪师傅: 加入 PPOSDWG 后评选新一期开源之星、为社区未来的建设和发展提了一些建议,Paddle2ONNX PMC 也是在工作组讨论中诞生的。PPOSDWG 确实起到了部分社区治理的作用。
+
+
+听说你也加入了Paddle2ONNX PMC ,对于自己加入这个组织你又有什么看法?加入这个组织你想达成一些什么成就呢?
+汪师傅: 我是以 Paddle2ONNX 的用户角色加入的。郑师傅(@Zheng-Bicheng )是 PMC Chair,已经提了很多 PR,是主要力量。后面我可能就是多解答一些 issue。
+
+笔者注 ✍️:为了 Paddle2ONNX 项目的可持续健康发展和加强社区治理, 飞桨社区开源发展工作组决定设立 Paddle2ONNX PMC(Project Management Committee) 来负责 Paddle2ONNX 项目的技术决策和维护。
+
+
+
+据我所知,汪师傅在一家生物公司工作。为什么在生物公司你还是坚持 AI 开源,而且还是 AI 框架开源?
+汪师傅: 生物公司也有很多项目要用到 AI,例如血细胞分类、识别尿液官型、识别液面高度等等。坚持开源主要是下班时间比较早,而我又不喜欢出门玩,只能在家写写代码消磨一下时间。
+
+
+看你的 GitHub 热力图是全绿的,是怎么做到的呀?真的在 7*24 小时搞开源吗?
+汪师傅: 下班时候比较早,每天都能写写代码。例如做一做快乐开源任务、做一做黑客松题目,写一写自己的开源项目等等。
+
+
+
+
+ 汪师傅的 GitHub 热力图
+
+
+
+
+你觉得参与开源社区对你的事业会有帮助吗?
+汪师傅: 参与开源社区认识了很多有趣的小伙伴,同时也能提升写代码的能力,这些都会对事业有一定的帮助。
+
+
+汪师傅有在参与其他社区的开源项目么?有没有什么有趣的开源项目可以分享一下?
+汪师傅: 其他开源项目大部分都是阅读文档时,看到文档有错误,顺手提的 typos fix。如 scipy DOC: fix typo in cluster/_hierarchy.pyx 、yolov5 Ignore *_paddle_model/ dir 和 labelme Remove a duplicate statement 。
+
+
+八卦一下,汪师傅和你的妻子是怎么认识的呀?
+汪师傅: 通过我奶奶介绍认识的,她家当时正好在我奶奶家隔壁开店。然后加上了微信,聊聊天,见见面,这样子就认识了。
+
+
+
+
+ 汪师傅老婆照片集 1
+
+
+
+
+
+
+ 汪师傅老婆照片集 2
+
+
+
+
+
+
+ 汪师傅与老婆合照
+
+
+
+
+
+
+ 汪师傅与家人合照
+
+
+
+
+你有什么想对社区小伙伴说的么?
+汪师傅: 热爱生活,热爱开源。
+
+笔者注✍️:汪师傅也有博客哦!大家可以去看看👉 https://vlight.me/ ❤️ 一起交流技术,共同进步!
+
+
+
+
+
+ 汪师傅喝酒拍的照片集 1
+
+
+
+
+
+
+ 汪师傅喝酒拍的照片集 2
+
+
+
+
+三、神秘汪佬的评论区
+
+
+
+ 汪师傅在我印象中全能,啥类型的 Paddle 题目都能做,非常 NB。而且是上班的业余时间用来 Paddle 开源,真的太感动了,对 Paddle 是真爱了。
+
+
+
+
+
+ 汪师傅!人如其头像!一直感觉是一个什么都会的大佬!
+
+
+
+
+
+ 神秘而强大的 G 佬,和 002 并称飞桨巨头之一的 greatx (但比 002 多了个核心条件😂),clang-tidy 的领头者,有硬件,有时间,有技术,有想法,多边形战士。
+
+
+
+
+
+ 感觉汪师傅是 Paddle 扫地僧之一,是很低调很有才华的大神,人狠话不多!😄
+
+
+
+
+
+ 去年在上海办 meetup,对汪佬的初印象就是很 i,在一群 i 人中都非常明显哈哈哈,但是很有自己的想法和行动力,提出了很多对开源社区有益的想法,也在积极带领新伙伴融入飞桨快乐开源的氛围,有各位可爱的开发者是飞桨的福气~
+
+
+]]>
+ 无论是工作还是生活,他都认真对待!无论是开源世界还是家庭亲情他都怀抱深沉热爱!从一开始提修改文档 PR 的边缘者到如今横扫各大开源任务的 Paddle 扫地僧!汪师傅一直在开源界默默努力💪深耕~今天,就让我们一起揭开这位神秘大佬的面纱,探寻他的故事吧!✨✨✨
+
+
+
+一、汪师傅幸福瞬间
+
+
+
+
+ 汪师傅幸福瞬间 1
+
+
+
+
+
+
+ 汪师傅幸福瞬间 2
+
+
+二、采访内容
+
+
+汪师傅给我们介绍一下自己吧!
+汪师傅: 我硕士毕业于兰州理工大学,通信与信息系统专业。老家在安徽安庆,目前在宁波工作,工作 4 年多了。兴趣爱好就是写代码、吃美食、喝酒。
+
+
+你在兰州理工大学攻读硕士期间,最难忘的经历是什么?
+汪师傅: 在兰州最难忘的就是各种各样的美食。吃得最多的是兰州牛肉面(兰州市以外地区常见的“兰州拉面”与兰州牛肉面并非同一种食物,多为青海化隆拉面)。记得学校里有一个食堂专门做牛肉面,本地人喜欢说去吃一碗牛大。牛肉面讲究一清、二白、三红、四绿、五黄,即汤清、萝卜片白、辣椒油红、香菜和蒜苗绿,以及面条黄亮。面形又分为毛细、细、二细、三细、二柱子、韭叶、薄宽、宽、大宽等等,让人选择不过来。我一般选二细加鸡蛋加一碟牛肉。放哈(“放哈”在兰州方言中意思是"发酵”)的甜胚子奶茶是另一种难忘的美食,点一杯奶茶和三五好友坐在一起聊聊天也是一种享受。
+
+
+
+
+ 汪师傅拍的兰州牛肉面
+
+
+
+
+你本科在安徽又在兰州读硕士,为什么选择在宁波工作?可以简单讲讲现在工作在做什么呢?
+汪师傅: 找工作的时候,一个亲戚正好拍了一张招聘广告,并且发给我了。招聘的公司在宁波,我就顺手投了一份简历,后面被录用了,就去宁波了。工作主要是做生化、免疫、血脂、血球、尿液分析仪里面涉及算法的部分。
+
+笔者注 ✍️:汪师傅本科毕业于安徽的淮北师范大学!
+
+
+
+汪师傅工作四年多了,觉得工作后自己最大的变化是什么呢?
+汪师傅: 从萌新变成了老油条。
+
+
+听你说平时喜欢吃美食,可以给我们推荐一下宁波/安徽/兰州分别有啥好吃的东西吗?
+汪师傅: 宁波烤菜年糕、鳗鲞、红膏呛蟹和泥螺都还不错。安徽的话推荐臭鳜鱼和山粉圆子。兰州必须来一碗牛肉面和一杯甜胚子奶茶😁。
+
+
+通信这类专业好像和深度学习关联不大,你怎么想到去接触深度学习?
+汪师傅: 读研的时候做的是传感器网络和优化算法,对深度学习有些了解。工作的时候开始做信号处理算法和图像处理算法,后面做项目发现用深度学习的方法效果更好,就开始学深度学习了。
+
+
+你在 Paddle 社区中做了很多贡献,当时为什么想着加入 Paddle 开源社区?后来又为什么一直坚持给 Paddle 做贡献?你觉得这些贡献有什么意义?
+汪师傅: 我是从学习 OCR 接触到 Paddle 社区的。当时在 AI Studio 上有一门课叫「动手学 OCR·十讲」,学习的过程中开始看 PaddleOCR 的代码和文档。在阅读文档的时候会发现错误,就慢慢开始提一些 typo fix 的 PR。而给 Paddle 框架做贡献则是从 Paddle 黑客松和快乐开源任务开始的。我做的第一个 Paddle 框架的贡献是 [CodeStyle] Compiler Warning tracking issue 相关的。这些开源贡献的意义大概是加深了对开源框架的理解、提升了自己写代码的能力,对代码质量有了更高的追求。
+
+
+
+
+ 汪师傅部分开源任务展示 1
+
+
+
+
+
+
+ 汪师傅部分开源任务展示 2
+
+
+
+
+听说你加入了飞桨社区开源发展工作组 🙌🏻,对于该工作组你有什么看法呢?
+汪师傅: 加入 PPOSDWG 后评选新一期开源之星、为社区未来的建设和发展提了一些建议,Paddle2ONNX PMC 也是在工作组讨论中诞生的。PPOSDWG 确实起到了部分社区治理的作用。
+
+
+听说你也加入了Paddle2ONNX PMC ,对于自己加入这个组织你又有什么看法?加入这个组织你想达成一些什么成就呢?
+汪师傅: 我是以 Paddle2ONNX 的用户角色加入的。郑师傅(@Zheng-Bicheng )是 PMC Chair,已经提了很多 PR,是主要力量。后面我可能就是多解答一些 issue。
+
+笔者注 ✍️:为了 Paddle2ONNX 项目的可持续健康发展和加强社区治理, 飞桨社区开源发展工作组决定设立 Paddle2ONNX PMC(Project Management Committee) 来负责 Paddle2ONNX 项目的技术决策和维护。
+
+
+
+据我所知,汪师傅在一家生物公司工作。为什么在生物公司你还是坚持 AI 开源,而且还是 AI 框架开源?
+汪师傅: 生物公司也有很多项目要用到 AI,例如血细胞分类、识别尿液官型、识别液面高度等等。坚持开源主要是下班时间比较早,而我又不喜欢出门玩,只能在家写写代码消磨一下时间。
+
+
+看你的 GitHub 热力图是全绿的,是怎么做到的呀?真的在 7*24 小时搞开源吗?
+汪师傅: 下班时候比较早,每天都能写写代码。例如做一做快乐开源任务、做一做黑客松题目,写一写自己的开源项目等等。
+
+
+
+
+ 汪师傅的 GitHub 热力图
+
+
+
+
+你觉得参与开源社区对你的事业会有帮助吗?
+汪师傅: 参与开源社区认识了很多有趣的小伙伴,同时也能提升写代码的能力,这些都会对事业有一定的帮助。
+
+
+汪师傅有在参与其他社区的开源项目么?有没有什么有趣的开源项目可以分享一下?
+汪师傅: 其他开源项目大部分都是阅读文档时,看到文档有错误,顺手提的 typos fix。如 scipy DOC: fix typo in cluster/_hierarchy.pyx 、yolov5 Ignore *_paddle_model/ dir 和 labelme Remove a duplicate statement 。
+
+
+八卦一下,汪师傅和你的妻子是怎么认识的呀?
+汪师傅: 通过我奶奶介绍认识的,她家当时正好在我奶奶家隔壁开店。然后加上了微信,聊聊天,见见面,这样子就认识了。
+
+
+
+
+ 汪师傅老婆照片集 1
+
+
+
+
+
+
+ 汪师傅老婆照片集 2
+
+
+
+
+
+
+ 汪师傅与老婆合照
+
+
+
+
+
+
+ 汪师傅与家人合照
+
+
+
+
+你有什么想对社区小伙伴说的么?
+汪师傅: 热爱生活,热爱开源。
+
+笔者注✍️:汪师傅也有博客哦!大家可以去看看👉 https://vlight.me/ ❤️ 一起交流技术,共同进步!
+
+
+
+
+
+ 汪师傅喝酒拍的照片集 1
+
+
+
+
+
+
+ 汪师傅喝酒拍的照片集 2
+
+
+
+
+三、神秘汪佬的评论区
+
+
+
+ 汪师傅在我印象中全能,啥类型的 Paddle 题目都能做,非常 NB。而且是上班的业余时间用来 Paddle 开源,真的太感动了,对 Paddle 是真爱了。
+
+
+
+
+
+ 汪师傅!人如其头像!一直感觉是一个什么都会的大佬!
+
+
+
+
+
+ 神秘而强大的 G 佬,和 002 并称飞桨巨头之一的 greatx (但比 002 多了个核心条件😂),clang-tidy 的领头者,有硬件,有时间,有技术,有想法,多边形战士。
+
+
+
+
+
+ 感觉汪师傅是 Paddle 扫地僧之一,是很低调很有才华的大神,人狠话不多!😄
+
+
+
+
+
+ 去年在上海办 meetup,对汪佬的初印象就是很 i,在一群 i 人中都非常明显哈哈哈,但是很有自己的想法和行动力,提出了很多对开源社区有益的想法,也在积极带领新伙伴融入飞桨快乐开源的氛围,有各位可爱的开发者是飞桨的福气~
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/pytorch-conference-01
+ https://pfcc.blog/posts/pytorch-conference-01
+ Sun, 03 Mar 2024 00:00:00 GMT
+ 本文是对 PyTorch Conference 2023 中的《State of PyTorch 》部分进行了精准的中文翻译和详细的文字总结,旨在向读者介绍 PyTorch 社区的 2023 年动态 。同时也特别参考了散步 大佬的《PyTorch Conference 2023 翻译系列文章 》,在此基础上,进行了细致的校对和优化,确保翻译准确无误。对散步大佬之前的辛勤翻译和对开源社区的贡献,表示衷心的感谢和敬意。
+
+]]>
+ 本文是对 PyTorch Conference 2023 中的《State of PyTorch 》部分进行了精准的中文翻译和详细的文字总结,旨在向读者介绍 PyTorch 社区的 2023 年动态 。同时也特别参考了散步 大佬的《PyTorch Conference 2023 翻译系列文章 》,在此基础上,进行了细致的校对和优化,确保翻译准确无误。对散步大佬之前的辛勤翻译和对开源社区的贡献,表示衷心的感谢和敬意。
+
+
+写在最前
+【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
+对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
+
+Lightning Talk
+我的名字是 Alban,是 META 的一名软件工程师,已经在 PyTorch 工作了很长时间,并且主要在 PyTorch 核心库维护方面做了很多工作。
+在今天这个快速闪电演讲中,我要给大家介绍一下 PyTorch 的现状。以前参加过大会的人,也许知道我们每年都在进行着类似的讨论。Joe 去年就在这里做了类似演讲。今天我想谈论的是三个重要的 PyTorch 里程碑,以及今年发生的三个重要活动,还会谈论一些有趣的数字。Joe 之前已经给大家展示过其中的一些,但能亲眼看到这些数据总归是很有趣的。而在最后,我会给大家介绍一下如何参与 PyTorch ,以及如何帮助我们一起建设 PyTorch。
+PyTorch Milestones
+1. PyTorch 2.0
+
+
+20M+ downloads
+Adds:
+
+torch.compile
+MPS backend for Apple M1/M2
+torch.func
+set_default_device
+Better transformer
+
+
+
+
+第一个重要的 PyTorch 里程碑是:今年(2023 年)年初发布了 PyTorch 2.0 版本 。它在所有平台上下载超过 2000 万次,所以对我们来说,这是一个相当重要的发版。并且,下载数量仍在增加。它添加了一系列非常重要的功能:
+
+torch.compile 。我们已经讨论过它很多次,因此在这里不再讨论。
+MPS 后端 。一个重要功能是支持 MPS 后端,能够充分利用 Apple M1/M2 芯片的 GPU 部分。现在该功能处于测试阶段,随着覆盖范围和稳定性的提升,会支持更多新功能。
+torch.func 。对于了解这的人来说,它又叫 functorch。和 Jax 类似,它新增支持函数式 API,并且融入在 “PyTorch 世界”中,因此能兼容其他所有 PyTorch 功能。
+set_default_device 。我不知道大家是否熟悉这个功能。它可以通过改变创建 PyTorch 模型时使用的默认设备,来显著加速初始化(initialization),例如直接在设备上进行初始化。或者如你在一些主题演讲中看到的例子一样,快速的创建模型。通过使用元设备(meta device),即一个没有数据的伪设备(fake device),来跳过模型的初始化过程,直接加载权重。这样就可以避免占用太多内存,进行不必要的初始化等类似事情。
+更好的 transformer 。这是由 PyTorch 团队和众多 maintainers 共同努力做出的重大推进,一起改进 PyTorch 中的 transformer 模型。无论是 transofmer 相关的高层 API ,还是底层运算,你都可以拥有目前的最佳实现。
+
+
+编者注 ✍️:这部分演讲内容是对 PyTorch 2.0 简略概括,详细内容可以看 Blog 或 2.0 Release notes 。
+
+2. Spring Docathon
+
+
+27 active partipants
+5 new tutorials & examples
+45+ PRs merged
+53+ issues closed
+
+
+另一个值得一提的重要里程碑是:今年(2023 年)发起的 Spring Docathon 活动 。该活动共吸引了 27 位开发者参与,成功合入了超过 45 个 PR(Pull Request),解决了 53 个 Issues。非常有效地促进了我们 tutorials 仓库 的改进,不仅提高了教程的质量,还增加了新的教程内容,确保我们的教程始终保持最新。
+
+编者注 ✍️:其实飞桨也提供了 Paddle Docathon ,活动初衷和 PyTorch 是一样的,但整体难度和质量比起 PyTorch Docathon 来说要低一些。第六期黑客松会有一个专门的赛道:优秀稿件征集与传播,大家也可以敬请期待。
+
+3. First Year of the Foundation
+
+
+Open to new membership June 2023
+New premier members (IBM, Intel, Hugging-facing)
+New general members (Graphcore)
+
+
+最后,正如 Joe 和 Ibrahim 所提到的,今年(2023)是基金会成立的第一年。并且在今年六月,基金会向新成员敞开了大门。面对当前的发展,我们感到无比兴奋。
+在我撰写这篇演讲稿时,我们已经迎来了四名新成员,而现在又新增了两名,增长的速度甚至超过了我制作幻灯片的速度。我对我们吸引到的成员的多样性感到非常激动,既有专注于底层组件和后端技术的企业,如 IBM 和 Intel,也有更注重高层应用、面向终端用户的企业,如 Graphcore 和 Hugging Face。看到我们在各个方面都在取得增长,对基金会和整个生态系统来说,确实是非常令人振奋的。
+
+编者注 ✍️:Ibrahim Haddad 是 Linux 基金会副总裁(AI & DATA 方向),也是 PyTorch Foundation 董事会的执行官。
+
+PyTorch in Numbers
+接下来,让我们来看一些数字。
+1. The pytorch/pytorch codebase
+对于那些密切关注代码库的人而言,过去的一年(2022 年),我们总共有 12000 次 commits。并且我们非常高兴看到开源贡献增长了 8%,这里的增长特指来自于除日常核心维护人员之外 的开源贡献者。
+图表展示了每年我们代码库的 commits 数量。如你所见,它正在不断增长,并且未来也会越来越多。
+
+2. The pytorch/pytorch top contributors
+
+
+1128 Contributors this year (+10% more than last year)
+Top OSS Contributors
+
+
+
+
+所有的开源贡献增长都离不开我们每一位贡献者的共同努力。今年,我们共有 1,128 名贡献者对代码库作出了贡献,相较去年增长了 10%。看到这么多人投身于 PyTorch 的开源工作,实在是让人感到非常振奋。
+我在此列出了一些提交量最多的贡献者的 GitHub ID,他们的活跃度非常高。当然,还有许多人虽然只提交了少量代码,但他们对代码的改进和贡献的多样性也极为关键。
+这所有的努力共同促成了,GitHub 上使用 PyTorch 的仓库数量超过 600,000 个,比去年增长了 20%。因此,看到越来越多的人不仅使用 PyTorch,还发布基于 PyTorch 实现的代码,这确实非常让人兴奋。
+
+3. Driving state-of-the-art AI research
+其中,大部分代码来自于科研领域 ,PyTorch 在推动许多前沿 AI 技术的发展方面发挥了重要作用。今年,已有超过 7,000 个 AI 科研论文相关的 GitHub 仓库用到了 PyTorch。事实上,60%的 AI 研究成果是基于 PyTorch 来实现的。因此,见证这样一个开放、繁荣的科研生态,我们感到无比兴奋。
+
+4. Powering the AI indusry
+
+
+65K+ PyTorch professionals(on LinkedIn)
+
+
+3K new jobs requiring PyTorch
+
+
+如今,PyTorch 在工业界的发展也取得了显著进步,正在迅速弥补之前的落后处境。以 LinkedIn 的统计数据为例,我们观察到将 PyTorch 作为核心技能的求职者每年增长率达到 50%,同时,越来越多的职位也开始要求应聘者掌握 PyTorch。
+5. Talk of the town
+我们的一切成就,都离不开我们庞大社区的支持。接下来,我想分享一些关于社区的有趣数据。Discuss Forum 是 PyTorch 为用户、开发者及其他所有人提供的互动论坛。每月,我们有大约 400 名新成员加入,网站浏览量超过 200 万次。同时,我们的网站也非常活跃,每月约有 2000 篇新帖子发布。我们非常需要活跃的社区,让更多成员帮忙解答用户和开发者的问题。
+
+Join us
+在这里,我想呼吁大家加入我们!PyTorch 不仅是一个开源项目,它也是我们共同奋斗的目标。只有依靠一个庞大而活跃的社区,我们才能不断推动 PyTorch 向前发展。因此,我们做了很多工作来尝试巩固我们的社区生态。
+1. How to get involved
+我们根据社区里很不错的反馈(包括如何帮助新成员融入、如何让他们共同参与到 PyTorch 的建设中来),创建了一个新页面——PyTorch 终极贡献指南。点击下面的链接可以查看,接下来我也会讲一下如何参与其中。
+
+PyTorch 终极贡献指南:https://github.com/pytorch/pytorch/wiki/The-Ultimate-Guide-to-PyTorch-Contributions
+
+2.Non-code contributions
+首先我想和大家讲的是,我们是有很多非代码的贡献 。所以对 PyTorch 的贡献远不止编写代码,还有很多其他方面的工作。
+
+在左边可以看到我之前提到的论坛。同时我们还有一个开发者论坛 Dev-Discuss ,在这里,你可以提问、回答问题或与社区成员讨论各种话题。这些都是非常重要的贡献方式,而且每个人都可以参与其中。另外,因为社区中的所有人都可以建设 PyTorch,所以报告问题、提出新功能建议等也是你可以做出的重要贡献。例如,我们非常欢迎大家对我今天提到的新功能提出反馈,无论是 torch.compile 还是其他功能。请告诉我们什么地方做得不够好,什么工作得很好,以及你还需要什么功能。
+3. Code contributions
+
+
+Reproduce and investigate issues
+Bugfix/FeaturePullReguests
+Review/maintain
+Documentationch
+
+
+当然,众所周知,代码贡献 自然也是非常重要的。这里我认为第一点(Reproduce and investigate issues)特别有趣,这可能不是每个人都会想到的贡献方式,但帮助复现和调查 issues 是非常非常有价值的一件事情,即使这并不是在“编写代码”,并且也比较耗时。多年前,当我开始为 PyTorch 做贡献时,我做的第一件事就是 debugging issues,并在论坛上回答问题。这不仅有趣,也非常有帮助,因为一旦我们明确了问题所在,接下来的修复 bug 和增加新功能的工作就会变得更加简单。在 PyTorch 社区,提交 bug 修复或新功能的 PR 往往是解决问题过程中最迅速的一步。找到问题所在,弄清楚需要做什么,实际上才是最关键的的。
+第三点是,我鼓励任何感兴趣的开发者不只是提交代码,也帮助我们审查代码和维护代码库。现在基金会完全开放了,我们有来自世界各地的许多贡献者帮助我们维护 PyTorch 的子仓库,我们鼓励所有感兴趣的人参与进来。
+最后,我们也非常重视文档的编写和改进。我相信许多人都知道我们的文档网站和教程网站,我们也在努力的增加更多文档内容,所以任何文档相关的贡献都非常欢迎。对于那些对此感兴趣的人,我们下个月将举办一个 PyTorch Docathon 文档马拉松活动。如果你想参加,学习新技能并获得认可,请关注我们的博客文章了解更多信息。
+
+
+编者注 ✍️:活动已经结束了哦~
+
+编者最后的碎碎念
+
+PyTorch 生态力量非常强大,是目前 Paddle 或者国内任何一个深度学习框架都无法企及的一个高度。
+Paddle 本身的社区治理结构、运作方式,其实是带有一定国内特色的。
+翻译会议真的很花时间,比单纯的翻译文章累多了,散步能翻译到 30 篇后(总共 60 多篇) 的会议内容真的太强了。目前散步在和 Linux 基金会取得联系,可能会有专门的团队进行翻译,有兴趣加入的也可以联系他。
+散步做的一个英文转录翻译的工具,可以看看:https://github.com/sanbuphy/WhisperTranslator
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/starter-camp
+ https://pfcc.blog/posts/starter-camp
+ Sun, 18 Feb 2024 00:00:00 GMT
+ 在 2023 年的 11 月 14 日,飞桨开源社区开启了一个新项目(新坑 )—— 启航计划集训营 。经过为期两个月紧张而充实的集训后,启航计划集训营于 1 月 30 日 正式圆满完成所有集训计划。在集训期间,大家出色地完成了三项热身打卡任务,并且有 19 位营员合入了超过 110 个 PR。衷心感谢各位营员的积极参与和卓越贡献!在这里,也向开源社区的各位 “汇报” 一下活动情况~
+
+01 - 启航计划是什么?
+「启航计划」 是飞桨社区发起的远程代码集训项目 ,也是「护航计划 」的前置活动。我们以开展为期 2 个月集训营的形式,鼓励开发者积极参与开发 2 个方向的快乐开源任务 ,以此提升自己的代码实践能力,与社区共同成长 💪。
+
+基础方向 :Paddle 核心框架 + Paddle CV 套件的快乐开源任务,将有机会参与社区里最轻松愉快的开源开发活动。
+大模型方向 :参与 PaddleMIX 跨模态大模型套件的快乐开源任务,将有机会接触社区里最前沿的大模型应用开发与工具建设。
+
+
+活动详情见 Issue: #58497
+
+
+与护航计划的区别?
+
+不限定开发者背景,企业和学生开发者均可参与。
+不进行面试,直接进行简历筛选 。
+集训内容为完成 【快乐开源任务】 ,合入 1 个 PR 即满足结营条件,相对轻松。
+提供高质量集训课程 ,并以 PR review 交流的形式进行沟通,而非导师一对一带教的形式。
+时间周期更短(2 个月),门槛相对更低。
+
+参与者需要做什么?
+1. 自选任务,并投递简历报名,通过筛选后即可入营。集训营持续 2 个月,上限 30 人
+
+共有 36 名候选人参与报名并投递简历。内部筛选后,最终通过 29 位学员。
+入选学员中,22 名学生(电子科大、西交、杭电、浙大、清华……)、7 名企业开发者。
+入选学员中,13 名 PFCC 成员,16 名新人。
+
+
+入选营员:@NKNaN 、@shiofjsaio 、@YangWulve 、@Hhankyangg 、@sanbuphy 、@Atlantisming 、@GreatV 、@Tsaiyue 、@Kaedeharai 、@wyyang23 、@jiongjiongli 、@rhmaaa 、@cocoshe 、@zbt78 、@YibinLiu666 、@Turingg 、@ooooo-create 、@ccsuzzh 、@zade23 、@challengewly 、@zoey333 、@unicornshell 、@storm-ice 、@YinKeYu 、@Olive-2019 、@fsczz 、@jiangziyan-693 、@isLinXu 、@jingsongliujing
+
+2. 按兴趣参与集训课程(一周一次)并按时提交双周周报
+
+以实际开发为导向,每周开展一次课程,总计安排 6 次课程。
+营员每双周提交一次周报,追踪集训进展和计划,总计提交 4 期双周报。
+
+
+
+
+ 课程以腾讯会议形式开展
+
+
+
+ 周报截图
+
+
+3. 完成 3 个打卡任务,并至少合入 1 个快乐开源 PR
+
+打卡任务一:修改飞桨文档。25 人完成
+打卡任务二:Paddle 本地编译。13 人完成
+打卡任务三:跑通 SD 训练推理。15 人完成
+
+
+
+
+ 热身任务打卡情况(部分)
+
+
+4. 结营期间,可自愿申请一、二、三等奖,并参加答辩
+
+
+结营考核详情见 Issue:#123
+
+
+
+
+ 答辩现场
+
+
+飞桨官方提供什么?
+1. 开发导向的每周课程
+
+由飞桨研发和 PM 根据营员的诉求和实际开发情况,来提供每周的课程。
+
+
+
+
+ 课程安排
+
+
+2. 周报管理
+
+助教负责对每双周的周报进行管理,确保提交周报的数量和质量。
+
+
+
+
+ 其中一期周报提及截图
+
+
+3. 技术答疑
+
+在微信群以及课程中,飞桨研发会针对营员的疑惑进行一一解答。
+同时,会有热心、能力强的营员解答别人的问题。
+
+4. 活动运营支持
+
+PM 和助教会对活动的各个环节提供支持,保障整体活动的顺利进行。
+
+
+
+
+ 整体活动节奏
+
+
+5. 成绩评估
+
+PM 和助教会根据结营要求,在结营期间对每位学员进行评估,判断是否满足结营条件。
+针对一、二、三等奖的答辩,会邀请相应方向的研发导师进行评估。同时,这也是进入护航计划的绝佳机会 ,因为研发导师会有充足的时间来了解你~
+
+02 - 活动成果
+数字上的成果
+
+共有 19 位营员合入了超过 110 个快乐开源 PR。
+社区新加入 11 名 contributor。
+15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。
+@cocoshe 在开发过程中沉淀 1 篇《 PHI 算子库 kernel 注册全流程源码阅读》 。
+
+数字背后的情况
+
+
+共有 19 位营员合入了超过 110 个快乐开源 PR。
+
+
+完成 80+ 文档、15+ 新 IR 适配、15+ 静态图推全、 5+ cmake 治理、 5+ 复数算子等等题目,文档相关任务约占总体完成任务的一半左右.
+
+
+社区新加入 11 名 contributor。
+
+
+其中 7 名 contributor 只合入了一个文档相关 PR,活动后续缺少延续性。
+
+
+15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。
+
+
+考核通过的营员中,有 10 名是原 PFCC 成员,纯新人通过率不高(31%),猜测是启航计划的活动缺乏引导。
+03 - 新的尝试——Docs 偶像女团(精品小团)
+是什么?
+自愿参与文档开发、维护的社区化小团体,氛围活跃,开发意愿很积极。
+由谁组成?
+
+3 名大二女生(2 名启航计划学员 @Turingg @Kaedeharai ,1 名社区开发者@entired ),主要负责开发和维护。
+1 名热心社区开发者(O 师傅 ,大三),负责日常手把手指导 3 名女生。
+2 名飞桨内部同学,负责维持团体运转、答疑解惑。
+
+为什么组成这个团体?
+集训期间,2 位女生开发意愿比较强烈,但对具体做什么事情感到迷茫,因此孙师傅就把她们拉入(骗进 )了 docs 小组。
+运转机制?
+
+每周一次例会 ,由 3 名女生轮流主持,主要通过每周开发进度、布置新任务,所有人必须参会。
+每周一次会议纪要 ,由会议主持负责写会议内容和 Todo。
+如流群日常沟通交流 。
+
+
+
+详细资料见:community/docs_group
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/tao-story
+ https://pfcc.blog/posts/tao-story
+ Tue, 06 Feb 2024 00:00:00 GMT
+ 嘿,你知道飞桨社区里的 DDL 战士是谁么?嘿,你知道大家心中的 Paddle 社区妈妈是谁么?那你又知道谁是(仓库管理员 )飞桨仓库的实际控制人?谁是飞桨仓库的守护者?谁是飞桨从闭源到开源的见证者?是的,本期要采访的就是我们 Paddle 的资深研发女神——涛姐!
+
+
+
+一、采访内容
+
+
+涛姐,给大家介绍一下自己吧!
+涛姐: 大家好,我是骆涛😊(@luotao1 )!现在是百度飞桨的资深研发工程师~同时,也是长期的开源贡献者!我博士毕业于中国科学技术大学高性能计算方向,师从陈国良院士,在深度学习领域有 20 多项专利。我参与训练/推理/高性能/工程效率等多个方向,目前致力于活跃飞桨框架开源社区。💗💗💗
+
+
+涛姐是什么时候入职 Paddle 的?是以哪种方式呢?你觉得当时获得这份工作最大的竞争力是什么?
+涛姐: 😲大概八年前,我入职了百度。当时我是校招进的 Paddle 团队,但我投的不是校招岗位,而是社招岗位。因为之前我给阿里投了校招,阿里也给我发了录取的邮件。但后来他们告诉我说是外包员工把邮件发错了,我也很无语。等我后面知道这个事情的时候,校招已经快结束了,那剩下的就只有社招这一个选择了。
+当时 Paddle 还在百度深度学习研究院(IDL)下,我觉得肯定是进不了的。但因为没有找到合适的工作,也管不了这么多就投了,结果第二天就收到 offer。
+我觉得最大的竞争力可能是在英特尔做过 Caffe 上的一些优化,所以能力还是比较匹配的。当时,我是带着我的 PPT 去面试(在英特尔有一个比较好的习惯,就是会整理之前所做的工作,因为外企都非常注重工作内容的呈现,所以当时这些 PPT 都是英特尔期间整理的已有素材)。但对面试官来说,拿着 PPT 去讲这些内容来面试,还是比较新颖的。
+还有一个 tip 是:我的简历上没有提及性别,也没有附上照片,所以面试官可能一开始以为我是男生,否则我觉得可能一面就进不了。然后面试的时候,运气比较好,代码题目都是之前复习过的,整体的表现也比较好。此外,还有一点,是我听说面试官在前面的面试里要求比较高,面了好多人都没有满意的。面了 30 多个后,再不招一个,那 Head Count 可能就没了,而我当时确实也投的比较晚。所以在各种机缘巧合下就录取了。
+总的来说,最大的竞争力我觉得第一是博士的身份;第二是已经在英特尔实习,有一些经验;第三是自己的工作有一个比较好的展现,呈现的形式还是很有吸引力的。
+
+
+可以给我们谈谈 Paddle 的发展史么?听说 Paddle 最初是是闭源的,为什么后来选择开源?
+涛姐: 最初,Paddle 确实是闭源的。但是由于 IDL 研究院非常前沿,当时也请了吴恩达过来,而且还有很多研究员都是在美国。本身国外开源的氛围又很浓厚,就有了开源的想法💡。当时主流的开源深度学习框架有 Caffe、TensorFlow,至于 PyTorch 都还没有发展起来。如果 Paddle 不开源,实际上是没办法和国外主流的深度学习框架竞争。
+此外,当时公司内部还有很多同类产品,比如 Lego(乐高)、Anakin 等等。这些产品当时都服务于公司内部的业务线,而 Paddle 在当时是一个比较新的东西,实际在公司内业务线上的使用非常有限。后来还制定了 1 到 2 年的计划,就是要把公司内所有产品线都用 Paddle 跑起来。如果 Paddle 不开源,其实在公司内是死路一条。正是因为 Paddle 选择了开源这一路线,之后吞并了 Lego 和 Anakin,逐渐壮大,我认为这是开源最大的一个魅力。同时开源也是一个战略性的决策,如果 Paddle 不开源,在公司内都无法生存,更别提在国际上立足。
+
+编者注✍️: 军哥曾经是 Lego 的初创研发成员之一哦~
+
+
+
+
+ 18 年 Paddle 团建
+
+
+
+ 18 年 10 月发布 1.0 版本
+
+
+
+ 18 年 Paddle 团建
+
+
+
+
+给我们讲讲你的求学之路吧!
+涛姐: 我本科、硕士和博士都是在中科大,博二时去了中科院北京软件所学习,可以说是一个联合培养计划吧!之后又去了英特尔实习,这些大致就是我的学习经历~一路走来,真的太不容易了,特别是读博期间非常受挫,心理压力巨大!读完博士的时候感觉整个人脱胎换骨了。
+
+
+
+ 涛姐大一中科大西洋乐团新年音乐会
+
+
+
+ 涛姐大一冬天
+
+
+
+
+你刚刚谈到读博于你而言简直脱胎换骨,当时为什么选择读博?读博对于你来说获得了什么?
+涛姐: 当时选择读博,是因为本科毕业的时候没有考虑过就业。而且虽然当时成绩比较好,但觉得自己除了成绩好,其他什么都不会,就想还是得深造(是真实的情况,不是凡尔赛 )。此外,我们学校当时并没有提供保研这个选项,只能考研或者保送直博升学,所以我最后选择了直博。
+当时我是可以自己选择直博校外还是本校,可能班主任也比较喜欢我,他就强力推荐我留在学校读博。其实我当时也想去国防科大呀、复旦呀,但是都被班主任无情拒绝了。他给我分析了一些利弊,后面给我找的导师也非常好,是一位院士。这也为我后面能去软件所或者英特尔这些大的平台提供了一个非常有力的保障。所以,我在这里也非常感谢我的班主任,他真的是一个非常好的老师!
+读博给我带来了很多收获!对于我的职业生涯来说,如果我没有读博士,我肯定进不了百度或者英特尔,这一点毫无疑问。对学业方面来说,读博极大锻炼了我自己,也包括提高了心理承受能力、抗压能力。还有一点就是读博扩大了我的学术圈子,如果我没有继续深造,我将无法接触到如此多优秀的同学和高 level 的大佬。此外,博士身份在之后的许多场景中都还是非常有用的!
+
+编者注✍️:Family who konws🐮!涛姐说自己大学不是特别用功,没有搞绩点,但是成绩就是 top 10!是谁羡慕了我不说~
+
+
+
+
+
+ 涛姐15年博士毕业
+
+
+
+
+读博有遇到什么困难吗?博二时去到了北京软件所进一步学习培养,当时为什么去争取这个机会?
+涛姐: 刚开始读博的时候非常迷茫 。因为本科的时候就没有进实验室,当时年纪小还没有这个意识,也没有现在这样环境氛围。而且本科期间成绩也还行,所以那时除了读书就是看韩剧、台剧、综艺、小说。像之前说的那样,本科毕业的时候就处于“除了成绩好,其他什么都不会”的状态。但会考试,不代表在计算机方面的能力强,因为考一个好成绩很容易,我这样说有点凡尔赛,但确实就是这样的。
+
+编者注✍️:涛姐特别喜欢在学校图书馆看小说,像是沧月、新武侠、古典武侠、卫斯理系列·····
+
+但当读博进了实验室之后,就会发现差距很大。因为读博需要做研究发论文,这和本科期间单纯的学习考试是存在很大的 gap。而且导师又坚信学生应该自我驱动型的(因为老板是院士,他觉得招进这么好一个学生,应该能够自己解决自己的问题),我完全不知道要做什么,代码也调不出来,就一下子陷入一个很迷茫的状态,和之前上课的阶段完全不一样。所以那个阶段其实是蛮难熬的,包括学校里很多老师也不会带你做实验,不会像咱们护航计划 的研发同学那样手把手带。代码都要由自己调试,而遇到问题时也不知道该向谁求助,这种情况让人会感到非常痛苦。
+所以当时就争取了去北京的联合培养计划。去了北京之后,可能因为实验室风格和之前不一样,发现确实还是要有年轻老师或项目带着会好一点~
+
+
+去英特尔实习是在什么时候呢?你在那段时间收获了什么?你觉得它与百度有什么不一样?
+涛姐: 嗯~我在英特尔实习是在博士的最后两年(博士第一年在学校念书,接下来的两年中科院软件所联合培养,第四年和第五年在英特尔实习),这两年的经历对我的个人成长产生了巨大的影响。
+收获的是真实的研究院实习经历(当时比较好的研究院就是 MSRA 和英特尔中国研究院这两个)。能明显感觉到企业和学校的风格是完全不一样的,接触的东西也很前沿,组里氛围也很好。而且研究院的指导和学校相比,整体的科研 sense 会拔高很多。比如当时在英特尔期间,我接触了第一代深度学习框架 Caffe,并在其中进行了一些工作。尽管我没有做很多东西,但当时写的论文(博士学位论文)因为抓住到 Caffe 这个热点,而且英特尔做的也比较好,因此论文引用量到现在已经超过 7000 次,相比起来其他很多人的论文都没人看。
+而且这段研究院经历,也帮助我获得了百度深度学习研究院(IDL)的 offer。这个 offer 在当时是挺难拿的,竞争很激烈,我自己也没想到能拿到。这也让我意识到平台的重要性。
+还有一点是在英特尔实习也开拓了我的眼界。像隔壁组是在给 Spark repo 做贡献,当时负责带队的老师后来成了英特尔研究院的院长,不过我的指导老师后来也成了院长,他们都是非常厉害的人。此外,英特尔老师在就业指导上面,会看的比较远(相对于学校老师)。当时我有两个 offer:一个是 IBM 的,一个是百度。IBM 给的还比百度多,但英特尔的老师就建议我去百度锻炼和提升一下自己。
+英特尔和百度不一样的地方就和网上说的一样:英特尔比较轻松,准时六点就能下班。一周实习工作其实我两到三天就能完成,然后剩下一半的时间都是在写我的论文。但对百度来说,即使是百度深度学习研究院(IDL),工作也会更偏向工程和产品落地,所以很忙。
+哦!再补充一下:就是,英特尔里面的女性研究员真的非常多。和百度不同,百度这边男性工程师会占大半部分!
+
+涛姐注✍️:在英特尔实习那两年是我最开心的时候。在外面租着房子,自己又有钱下班又早。虽然都是月光,但真的很开心😄!一下班,就可以自己追韩剧,然后做做瑜伽,自己美美容,买买衣服,逛逛淘宝~
+
+
+
+涛姐有没有一直在坚持的兴趣爱好?大学时的爱好有哪些呢?
+涛姐: 以前的空闲时间我喜欢练瑜伽,但现在所有的空闲时间都在带娃!瑜伽是在大学时期就开始坚持的,当时是有参加一些社团,但并没有特别深入。后来在英特尔实习有钱了,就开始外面报班,参加了一些瑜伽课。感觉练瑜伽相对容易,而且让人心情平和!
+但现在我已经没有坚持了,主要原因是我几乎没有自己的闲暇时间。不加班的时候,下班后我得等娃睡觉了之后才能刷手机。而有时候还需要开会,更没有自己的时间。因为互联网工作不是传统的上下班制度,而是根据绩效和产出来衡量的。现在每天的生活节奏通常是:起床、上班、下班、带娃、睡觉,这样一个不断循环的过程。
+
+编者注✍️:涛姐也有和老公一起练双人瑜伽哦,大家可以去涛姐朋友圈看👀照片,哈哈哈~
+
+
+
+
+
+ 涛姐练瑜伽
+
+
+
+
+学生时代你有参加过开源吗?向哪些项目/组织提交过 PR 呢?
+涛姐: 学生时代只向 Caffe 提交过 PR。那个时候是在英特尔实习,然后实习的题目也和我的论文比较相关:需要做一个 CPU 多线程加速的优化。所以就给 Caffe 提了一个 PR。但那个 PR 没有被合入,因为有一些工程上的问题会影响 Caffe 的整体。提 PR 和发论文不太一样,发论文只要性能数据达标了就可以,但是 PR 合入到主干中还要考虑到很多其他的问题。
+
+
+作为过来人,涛姐在职场上有什么建议给大家?
+涛姐: 在学生时代,你就要有自己的职业生涯规划。从学生到职场会有一个心理转变的过程。特别像职场,有时候会比较复杂。经常会出现:人家晋升你没有晋升或者人家年终奖比你高(反正公司内是不允许大家讨论薪酬的)。但是谁晋升谁没晋升这些大家都知道,所以这时候你就要有:“他强任他强,清风拂山岗”的心态,你一定不要纠结于经理保谁没保谁。当你做到大家公认比较好的时候,你肯定能升职。
+然后职场里还有一个很重要的点就是:你要坚持!大家有时候 2 到 3 年会想跳槽或者每 5 年想跳槽,这个时候得看你自己的想法。我自己在百度呆了八年,没有跳槽,很大一个原因是我现在做的事情,像是开源这一类的是我比较喜欢的,我对这类事比较有热情,现在对自己的工作状态也比较满意。还有我们家那位就是跳来跳去的,之后他就劝我:还是别跳!
+
+编者注✍️:涛姐是校园恋爱哦~老公是以前一个实验室的!🤭
+
+
+
+
+
+ 涛姐参加活动时照片
+
+
+
+
+在恋爱上有什么建议给大家?
+涛姐: 学校里还是相对比较单纯一点,所以如果可以,最好在学校解决恋爱问题。工作之后,你也没有心情去解决个人问题。事情很多(你进入职场之后,你马上面临的是买房子、经济压力、赡养老人等等事情,你要变成一个成年人负担起一个家庭的责任。所以大家趁年轻多多拼搏一下,你要是有一些经济基础的话,那相对会好一点!),职场的压力是远比学校的压力更大。而且你一年一年拖下去之后,优秀的师兄师姐们的数量是会减少的!所以要稍稍早一点!然后一定要找长得好看的,这样生出来的娃才好看!我当时的要求就是:学历要跟我同等,长得帅,然后还得是党员。其他我没有要求,再挑就挑不出来了。找对象,只能挑几个最重要的点,你要搞清楚自己最想要的是什么?你不能啥都要,那是不可能的!
+
+编者注✍️:涛姐人送外号「百度红娘」~
+
+
+
+
+
+
+
+ 涛姐 7 个月的孕妇照
+
+
+
+
+作为女性研发,你在工作上有没有遇到什么难题?与男性研发相比,你觉得有什么区别?
+涛姐: 我觉得和男生没什么区别。现在 Paddle 里的一些女性研发都非常厉害的,比如和我同一期加入 Paddle 的青青(@qingqing01 )、益群(@Xreki )一起工作已经八年了,以及时间更久的志华姐、渝娟姐(虽然离职了),包括新进来的雅美(@liym27 )、张婷(@zhangting2020 ),她们都是非常出色!你能看到的、存活到现在的 Paddle 研发都非常厉害!(因为不厉害的早就被淘汰了 )而且包括我们的两个副总裁也都是女生,能坐到这么高的位置,很大程度能说明能力很强!
+所以,女孩子们一定要有自信,并且多努力学习!不要觉得是男生才能主导,要相信自己也能做成!同时,内心强大一点,知道自己的定位,要明白自己擅长什么,在工作中去充分的扬长避短!
+可能会有一个比较大的区别就是生娃。生育是女性需要面临的一个无法避免的问题,会对事业产生不同程度的影响,所以女性可能要在生娃之前多多奋斗几年。不过这个问题对于还是学生的女生来说,考虑的还有点早啦~
+另外,女生学计算机的话,热爱还是很重要的。只有热爱它,才能坚持下来~在我们的开源社区中,像孙师傅带的三个「Docs 偶像女团 」的女生,我觉得是能从她们那儿看到我以前的影子!虽然她们做的事情并不难,但展现出的热爱,是非常可贵的。每次这个精品小团开会,我看她们跟孙师傅交流的时候,都是闪闪发光的。
+
+编者注✍️:精品小团体是飞桨启航计划的一次尝试,是招募有意愿的营员参与到某⼀具体⽅向的⼩团体。未来会推广该模式,所以大家多多参与哦!
+
+
+
+
+
+
+
+ 15 年 Team buiding
+
+
+二、涛姐有话说
+
+
+
+Paddle 这个平台其实很不错。说实话,在国内 Paddle 已经站在了顶尖的位置。在我的学生时代,国内是没有这样丰富的开源机会,当时开源活动只有像 Caffe 和 Intel 在办,但这些都是国外的。你要考虑很多:如何参加活动?活动符不符合你的能力?改的代码在不在点上?提了 PR 之后,别人会不会像我们 Paddle 现在这样,每个 PR 给你快速的安排研发 review?而且我们还会催大家,也给大家发礼品。这些在国外的开源开源社区几乎都是没有的。
+在当时,想要合入一个 PR 可难了。如果没有认识的人,PR 合进去的难度非常高,因为代码改不到他们的点上,而且也不了解他们的活动和进展,也没有类似于我们现在的 PFCC 例会和社区做分享。
+我现在觉得,当时能靠着没合进去的 PR 进入了百度,现在大家也能做的更好。所以鼓励大家多多参加开源活动~不仅获得好的实习项目,还可以拓宽眼界!
+此外,如果一些同学没有什么项目,又想找到好的实习机会,其实现在可以在参与一些开源社区的任务。因为找到第一份工作其实是最难的,你只有找到第一份工作,后面慢慢的才会越来越顺利。但这确实很难!因为名额很珍贵,所以面试考核就是一种很公式、很官方的流程。
+如果靠着自己在学校期间做的项目,面试阶段是讲不清楚的。即使讲清楚,面试官也会一带而过。因为这些都是网上查不到的,所以面试最终只能考代码。但像提 PR 或者发论文,面试官都能一眼看明白你做的工作,并且在网上都能查到。所以如果像参加护航计划 ,那可能就是立马拿到工作机会,我们有三个做过护航计划的同学都是立刻得到工作机会,面试流程只是走一下。
+最后送大家一句话:世界会更加广阔,前途更加无限。
+
+
+
+编者注✍️:涛姐在上面提到没合入的 PR 是关于在 Caffe 上做 CPU 多线程优化~
+
+三、快乐晒娃时刻
+
+
+
+
+ 涛姐童年照
+
+
+
+ 涛姐两岁半的可爱小宝贝
+
+
+
+
+
+
+ 涛姐全家福照片
+
+
+最后再来一张宝贝的可爱九宫格😊~
+
+
+
+
+ 涛姐宝贝九宫格
+
+
+]]>
+ 嘿,你知道飞桨社区里的 DDL 战士是谁么?嘿,你知道大家心中的 Paddle 社区妈妈是谁么?那你又知道谁是(仓库管理员 )飞桨仓库的实际控制人?谁是飞桨仓库的守护者?谁是飞桨从闭源到开源的见证者?是的,本期要采访的就是我们 Paddle 的资深研发女神——涛姐!
+
+
+
+一、采访内容
+
+
+涛姐,给大家介绍一下自己吧!
+涛姐: 大家好,我是骆涛😊(@luotao1 )!现在是百度飞桨的资深研发工程师~同时,也是长期的开源贡献者!我博士毕业于中国科学技术大学高性能计算方向,师从陈国良院士,在深度学习领域有 20 多项专利。我参与训练/推理/高性能/工程效率等多个方向,目前致力于活跃飞桨框架开源社区。💗💗💗
+
+
+涛姐是什么时候入职 Paddle 的?是以哪种方式呢?你觉得当时获得这份工作最大的竞争力是什么?
+涛姐: 😲大概八年前,我入职了百度。当时我是校招进的 Paddle 团队,但我投的不是校招岗位,而是社招岗位。因为之前我给阿里投了校招,阿里也给我发了录取的邮件。但后来他们告诉我说是外包员工把邮件发错了,我也很无语。等我后面知道这个事情的时候,校招已经快结束了,那剩下的就只有社招这一个选择了。
+当时 Paddle 还在百度深度学习研究院(IDL)下,我觉得肯定是进不了的。但因为没有找到合适的工作,也管不了这么多就投了,结果第二天就收到 offer。
+我觉得最大的竞争力可能是在英特尔做过 Caffe 上的一些优化,所以能力还是比较匹配的。当时,我是带着我的 PPT 去面试(在英特尔有一个比较好的习惯,就是会整理之前所做的工作,因为外企都非常注重工作内容的呈现,所以当时这些 PPT 都是英特尔期间整理的已有素材)。但对面试官来说,拿着 PPT 去讲这些内容来面试,还是比较新颖的。
+还有一个 tip 是:我的简历上没有提及性别,也没有附上照片,所以面试官可能一开始以为我是男生,否则我觉得可能一面就进不了。然后面试的时候,运气比较好,代码题目都是之前复习过的,整体的表现也比较好。此外,还有一点,是我听说面试官在前面的面试里要求比较高,面了好多人都没有满意的。面了 30 多个后,再不招一个,那 Head Count 可能就没了,而我当时确实也投的比较晚。所以在各种机缘巧合下就录取了。
+总的来说,最大的竞争力我觉得第一是博士的身份;第二是已经在英特尔实习,有一些经验;第三是自己的工作有一个比较好的展现,呈现的形式还是很有吸引力的。
+
+
+可以给我们谈谈 Paddle 的发展史么?听说 Paddle 最初是是闭源的,为什么后来选择开源?
+涛姐: 最初,Paddle 确实是闭源的。但是由于 IDL 研究院非常前沿,当时也请了吴恩达过来,而且还有很多研究员都是在美国。本身国外开源的氛围又很浓厚,就有了开源的想法💡。当时主流的开源深度学习框架有 Caffe、TensorFlow,至于 PyTorch 都还没有发展起来。如果 Paddle 不开源,实际上是没办法和国外主流的深度学习框架竞争。
+此外,当时公司内部还有很多同类产品,比如 Lego(乐高)、Anakin 等等。这些产品当时都服务于公司内部的业务线,而 Paddle 在当时是一个比较新的东西,实际在公司内业务线上的使用非常有限。后来还制定了 1 到 2 年的计划,就是要把公司内所有产品线都用 Paddle 跑起来。如果 Paddle 不开源,其实在公司内是死路一条。正是因为 Paddle 选择了开源这一路线,之后吞并了 Lego 和 Anakin,逐渐壮大,我认为这是开源最大的一个魅力。同时开源也是一个战略性的决策,如果 Paddle 不开源,在公司内都无法生存,更别提在国际上立足。
+
+编者注✍️: 军哥曾经是 Lego 的初创研发成员之一哦~
+
+
+
+
+ 18 年 Paddle 团建
+
+
+
+ 18 年 10 月发布 1.0 版本
+
+
+
+ 18 年 Paddle 团建
+
+
+
+
+给我们讲讲你的求学之路吧!
+涛姐: 我本科、硕士和博士都是在中科大,博二时去了中科院北京软件所学习,可以说是一个联合培养计划吧!之后又去了英特尔实习,这些大致就是我的学习经历~一路走来,真的太不容易了,特别是读博期间非常受挫,心理压力巨大!读完博士的时候感觉整个人脱胎换骨了。
+
+
+
+ 涛姐大一中科大西洋乐团新年音乐会
+
+
+
+ 涛姐大一冬天
+
+
+
+
+你刚刚谈到读博于你而言简直脱胎换骨,当时为什么选择读博?读博对于你来说获得了什么?
+涛姐: 当时选择读博,是因为本科毕业的时候没有考虑过就业。而且虽然当时成绩比较好,但觉得自己除了成绩好,其他什么都不会,就想还是得深造(是真实的情况,不是凡尔赛 )。此外,我们学校当时并没有提供保研这个选项,只能考研或者保送直博升学,所以我最后选择了直博。
+当时我是可以自己选择直博校外还是本校,可能班主任也比较喜欢我,他就强力推荐我留在学校读博。其实我当时也想去国防科大呀、复旦呀,但是都被班主任无情拒绝了。他给我分析了一些利弊,后面给我找的导师也非常好,是一位院士。这也为我后面能去软件所或者英特尔这些大的平台提供了一个非常有力的保障。所以,我在这里也非常感谢我的班主任,他真的是一个非常好的老师!
+读博给我带来了很多收获!对于我的职业生涯来说,如果我没有读博士,我肯定进不了百度或者英特尔,这一点毫无疑问。对学业方面来说,读博极大锻炼了我自己,也包括提高了心理承受能力、抗压能力。还有一点就是读博扩大了我的学术圈子,如果我没有继续深造,我将无法接触到如此多优秀的同学和高 level 的大佬。此外,博士身份在之后的许多场景中都还是非常有用的!
+
+编者注✍️:Family who konws🐮!涛姐说自己大学不是特别用功,没有搞绩点,但是成绩就是 top 10!是谁羡慕了我不说~
+
+
+
+
+
+ 涛姐15年博士毕业
+
+
+
+
+读博有遇到什么困难吗?博二时去到了北京软件所进一步学习培养,当时为什么去争取这个机会?
+涛姐: 刚开始读博的时候非常迷茫 。因为本科的时候就没有进实验室,当时年纪小还没有这个意识,也没有现在这样环境氛围。而且本科期间成绩也还行,所以那时除了读书就是看韩剧、台剧、综艺、小说。像之前说的那样,本科毕业的时候就处于“除了成绩好,其他什么都不会”的状态。但会考试,不代表在计算机方面的能力强,因为考一个好成绩很容易,我这样说有点凡尔赛,但确实就是这样的。
+
+编者注✍️:涛姐特别喜欢在学校图书馆看小说,像是沧月、新武侠、古典武侠、卫斯理系列·····
+
+但当读博进了实验室之后,就会发现差距很大。因为读博需要做研究发论文,这和本科期间单纯的学习考试是存在很大的 gap。而且导师又坚信学生应该自我驱动型的(因为老板是院士,他觉得招进这么好一个学生,应该能够自己解决自己的问题),我完全不知道要做什么,代码也调不出来,就一下子陷入一个很迷茫的状态,和之前上课的阶段完全不一样。所以那个阶段其实是蛮难熬的,包括学校里很多老师也不会带你做实验,不会像咱们护航计划 的研发同学那样手把手带。代码都要由自己调试,而遇到问题时也不知道该向谁求助,这种情况让人会感到非常痛苦。
+所以当时就争取了去北京的联合培养计划。去了北京之后,可能因为实验室风格和之前不一样,发现确实还是要有年轻老师或项目带着会好一点~
+
+
+去英特尔实习是在什么时候呢?你在那段时间收获了什么?你觉得它与百度有什么不一样?
+涛姐: 嗯~我在英特尔实习是在博士的最后两年(博士第一年在学校念书,接下来的两年中科院软件所联合培养,第四年和第五年在英特尔实习),这两年的经历对我的个人成长产生了巨大的影响。
+收获的是真实的研究院实习经历(当时比较好的研究院就是 MSRA 和英特尔中国研究院这两个)。能明显感觉到企业和学校的风格是完全不一样的,接触的东西也很前沿,组里氛围也很好。而且研究院的指导和学校相比,整体的科研 sense 会拔高很多。比如当时在英特尔期间,我接触了第一代深度学习框架 Caffe,并在其中进行了一些工作。尽管我没有做很多东西,但当时写的论文(博士学位论文)因为抓住到 Caffe 这个热点,而且英特尔做的也比较好,因此论文引用量到现在已经超过 7000 次,相比起来其他很多人的论文都没人看。
+而且这段研究院经历,也帮助我获得了百度深度学习研究院(IDL)的 offer。这个 offer 在当时是挺难拿的,竞争很激烈,我自己也没想到能拿到。这也让我意识到平台的重要性。
+还有一点是在英特尔实习也开拓了我的眼界。像隔壁组是在给 Spark repo 做贡献,当时负责带队的老师后来成了英特尔研究院的院长,不过我的指导老师后来也成了院长,他们都是非常厉害的人。此外,英特尔老师在就业指导上面,会看的比较远(相对于学校老师)。当时我有两个 offer:一个是 IBM 的,一个是百度。IBM 给的还比百度多,但英特尔的老师就建议我去百度锻炼和提升一下自己。
+英特尔和百度不一样的地方就和网上说的一样:英特尔比较轻松,准时六点就能下班。一周实习工作其实我两到三天就能完成,然后剩下一半的时间都是在写我的论文。但对百度来说,即使是百度深度学习研究院(IDL),工作也会更偏向工程和产品落地,所以很忙。
+哦!再补充一下:就是,英特尔里面的女性研究员真的非常多。和百度不同,百度这边男性工程师会占大半部分!
+
+涛姐注✍️:在英特尔实习那两年是我最开心的时候。在外面租着房子,自己又有钱下班又早。虽然都是月光,但真的很开心😄!一下班,就可以自己追韩剧,然后做做瑜伽,自己美美容,买买衣服,逛逛淘宝~
+
+
+
+涛姐有没有一直在坚持的兴趣爱好?大学时的爱好有哪些呢?
+涛姐: 以前的空闲时间我喜欢练瑜伽,但现在所有的空闲时间都在带娃!瑜伽是在大学时期就开始坚持的,当时是有参加一些社团,但并没有特别深入。后来在英特尔实习有钱了,就开始外面报班,参加了一些瑜伽课。感觉练瑜伽相对容易,而且让人心情平和!
+但现在我已经没有坚持了,主要原因是我几乎没有自己的闲暇时间。不加班的时候,下班后我得等娃睡觉了之后才能刷手机。而有时候还需要开会,更没有自己的时间。因为互联网工作不是传统的上下班制度,而是根据绩效和产出来衡量的。现在每天的生活节奏通常是:起床、上班、下班、带娃、睡觉,这样一个不断循环的过程。
+
+编者注✍️:涛姐也有和老公一起练双人瑜伽哦,大家可以去涛姐朋友圈看👀照片,哈哈哈~
+
+
+
+
+
+ 涛姐练瑜伽
+
+
+
+
+学生时代你有参加过开源吗?向哪些项目/组织提交过 PR 呢?
+涛姐: 学生时代只向 Caffe 提交过 PR。那个时候是在英特尔实习,然后实习的题目也和我的论文比较相关:需要做一个 CPU 多线程加速的优化。所以就给 Caffe 提了一个 PR。但那个 PR 没有被合入,因为有一些工程上的问题会影响 Caffe 的整体。提 PR 和发论文不太一样,发论文只要性能数据达标了就可以,但是 PR 合入到主干中还要考虑到很多其他的问题。
+
+
+作为过来人,涛姐在职场上有什么建议给大家?
+涛姐: 在学生时代,你就要有自己的职业生涯规划。从学生到职场会有一个心理转变的过程。特别像职场,有时候会比较复杂。经常会出现:人家晋升你没有晋升或者人家年终奖比你高(反正公司内是不允许大家讨论薪酬的)。但是谁晋升谁没晋升这些大家都知道,所以这时候你就要有:“他强任他强,清风拂山岗”的心态,你一定不要纠结于经理保谁没保谁。当你做到大家公认比较好的时候,你肯定能升职。
+然后职场里还有一个很重要的点就是:你要坚持!大家有时候 2 到 3 年会想跳槽或者每 5 年想跳槽,这个时候得看你自己的想法。我自己在百度呆了八年,没有跳槽,很大一个原因是我现在做的事情,像是开源这一类的是我比较喜欢的,我对这类事比较有热情,现在对自己的工作状态也比较满意。还有我们家那位就是跳来跳去的,之后他就劝我:还是别跳!
+
+编者注✍️:涛姐是校园恋爱哦~老公是以前一个实验室的!🤭
+
+
+
+
+
+ 涛姐参加活动时照片
+
+
+
+
+在恋爱上有什么建议给大家?
+涛姐: 学校里还是相对比较单纯一点,所以如果可以,最好在学校解决恋爱问题。工作之后,你也没有心情去解决个人问题。事情很多(你进入职场之后,你马上面临的是买房子、经济压力、赡养老人等等事情,你要变成一个成年人负担起一个家庭的责任。所以大家趁年轻多多拼搏一下,你要是有一些经济基础的话,那相对会好一点!),职场的压力是远比学校的压力更大。而且你一年一年拖下去之后,优秀的师兄师姐们的数量是会减少的!所以要稍稍早一点!然后一定要找长得好看的,这样生出来的娃才好看!我当时的要求就是:学历要跟我同等,长得帅,然后还得是党员。其他我没有要求,再挑就挑不出来了。找对象,只能挑几个最重要的点,你要搞清楚自己最想要的是什么?你不能啥都要,那是不可能的!
+
+编者注✍️:涛姐人送外号「百度红娘」~
+
+
+
+
+
+
+
+ 涛姐 7 个月的孕妇照
+
+
+
+
+作为女性研发,你在工作上有没有遇到什么难题?与男性研发相比,你觉得有什么区别?
+涛姐: 我觉得和男生没什么区别。现在 Paddle 里的一些女性研发都非常厉害的,比如和我同一期加入 Paddle 的青青(@qingqing01 )、益群(@Xreki )一起工作已经八年了,以及时间更久的志华姐、渝娟姐(虽然离职了),包括新进来的雅美(@liym27 )、张婷(@zhangting2020 ),她们都是非常出色!你能看到的、存活到现在的 Paddle 研发都非常厉害!(因为不厉害的早就被淘汰了 )而且包括我们的两个副总裁也都是女生,能坐到这么高的位置,很大程度能说明能力很强!
+所以,女孩子们一定要有自信,并且多努力学习!不要觉得是男生才能主导,要相信自己也能做成!同时,内心强大一点,知道自己的定位,要明白自己擅长什么,在工作中去充分的扬长避短!
+可能会有一个比较大的区别就是生娃。生育是女性需要面临的一个无法避免的问题,会对事业产生不同程度的影响,所以女性可能要在生娃之前多多奋斗几年。不过这个问题对于还是学生的女生来说,考虑的还有点早啦~
+另外,女生学计算机的话,热爱还是很重要的。只有热爱它,才能坚持下来~在我们的开源社区中,像孙师傅带的三个「Docs 偶像女团 」的女生,我觉得是能从她们那儿看到我以前的影子!虽然她们做的事情并不难,但展现出的热爱,是非常可贵的。每次这个精品小团开会,我看她们跟孙师傅交流的时候,都是闪闪发光的。
+
+编者注✍️:精品小团体是飞桨启航计划的一次尝试,是招募有意愿的营员参与到某⼀具体⽅向的⼩团体。未来会推广该模式,所以大家多多参与哦!
+
+
+
+
+
+
+
+ 15 年 Team buiding
+
+
+二、涛姐有话说
+
+
+
+Paddle 这个平台其实很不错。说实话,在国内 Paddle 已经站在了顶尖的位置。在我的学生时代,国内是没有这样丰富的开源机会,当时开源活动只有像 Caffe 和 Intel 在办,但这些都是国外的。你要考虑很多:如何参加活动?活动符不符合你的能力?改的代码在不在点上?提了 PR 之后,别人会不会像我们 Paddle 现在这样,每个 PR 给你快速的安排研发 review?而且我们还会催大家,也给大家发礼品。这些在国外的开源开源社区几乎都是没有的。
+在当时,想要合入一个 PR 可难了。如果没有认识的人,PR 合进去的难度非常高,因为代码改不到他们的点上,而且也不了解他们的活动和进展,也没有类似于我们现在的 PFCC 例会和社区做分享。
+我现在觉得,当时能靠着没合进去的 PR 进入了百度,现在大家也能做的更好。所以鼓励大家多多参加开源活动~不仅获得好的实习项目,还可以拓宽眼界!
+此外,如果一些同学没有什么项目,又想找到好的实习机会,其实现在可以在参与一些开源社区的任务。因为找到第一份工作其实是最难的,你只有找到第一份工作,后面慢慢的才会越来越顺利。但这确实很难!因为名额很珍贵,所以面试考核就是一种很公式、很官方的流程。
+如果靠着自己在学校期间做的项目,面试阶段是讲不清楚的。即使讲清楚,面试官也会一带而过。因为这些都是网上查不到的,所以面试最终只能考代码。但像提 PR 或者发论文,面试官都能一眼看明白你做的工作,并且在网上都能查到。所以如果像参加护航计划 ,那可能就是立马拿到工作机会,我们有三个做过护航计划的同学都是立刻得到工作机会,面试流程只是走一下。
+最后送大家一句话:世界会更加广阔,前途更加无限。
+
+
+
+编者注✍️:涛姐在上面提到没合入的 PR 是关于在 Caffe 上做 CPU 多线程优化~
+
+三、快乐晒娃时刻
+
+
+
+
+ 涛姐童年照
+
+
+
+ 涛姐两岁半的可爱小宝贝
+
+
+
+
+
+
+ 涛姐全家福照片
+
+
+最后再来一张宝贝的可爱九宫格😊~
+
+
+
+
+ 涛姐宝贝九宫格
+
+
+
+
+编者注✍️:感谢郑必城(@Zheng-Bicheng )、散步(@sanbuphy )、张一乔(@Liyulingyue )、川川(@gouzil )四位师傅在引言为涛姐想的 title~顺序对应哦!
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/zhangyiqiao-story
+ https://pfcc.blog/posts/zhangyiqiao-story
+ Thu, 25 Jan 2024 00:00:00 GMT
+ 格子衬衫 👕,黑框眼镜 👓,他就是上天钦定的程序员!他狂卷技术,热爱开源;他喜欢摸鱼 🐟,疯狂水群;他“厨艺精湛”,堪称当代厨神。严寒冬日,别人有女朋友温暖手心,而他把 🥤 优乐美捧在手心!凌晨就寝,别人躺平酝酿睡意,他靠咖啡 ☕️ 进入梦境!工作一年半,至今单身汉!他就是来自安徽的吃辣小趴菜——张一乔 😆!
+
+
+
+一、张一乔专属定制海报
+
+
+
+ 张师傅专属定制海报
+
+
+
+张师傅注:我不会吉他 🎸,但是有一把!
+
+二、采访内容
+
+
+先介绍一下自己吧,张师傅!
+张师傅: 我是 96 年的,快三十岁了。感觉自己就是一个普普通通的,人到中年也没有女朋友的,独自一人在北京,住在一个小房子里(连个大阳台都没有)的可怜巴巴 🥺 的年轻人。而且,自己做饭还没有特别好吃,但还得自己做饭 😭。买的都是超市里一包一包的菜 🥬,一做就是两个人的饭,根本吃不完,然后剩菜又吃不下去·····大概这么个样子吧!
+
+张师傅注:我就像一整片沙滩上的一粒沙子,就很普通。可能比起其他沙子,更加适合在浪头飘摇而已!
+
+
+
+
+
+ 左为张师傅的自信照片,右为张师傅一整柜的格子衬衫
+
+
+
+
+现在你是在北京做全栈程序员,一个人在北京习惯吗?北京和你的家乡安徽相比,你更想留在哪?为什么?
+张师傅: 首先,在北京不一定是全栈程序员,也有可能是全方位打杂小工 😣。然后和家乡相比那肯定是家乡好,但是当时还是阴差阳错选择来北京!现在很后悔,很想回家。也不是说北京压力大(因为既不买房子,又没有女朋友。每个月生活也挺简单的,就是交个房租,然后吃饭上班睡觉·····钱肯定是够花的!),只是我自己比较思乡,不想离开家乡!家乡并没有给我留下什么糟糕的印象,父母也还不错。所以比起在外面晃悠,自己还是更加愿意回到家乡!
+
+
+你觉得程序员是一个怎样的工作?这份职业对你的生活中产生了什么影响?
+张师傅: 首先我不知道我自己是不是程序员。在公司,有什么活干什么活!然后工作给我产生的影响大概就是:打工后眼里失去了光!
+
+张师傅名言:公司是用来创造价值的地方,不是学习的地方!
+
+
+
+
+
+ 打工人精神状态表情包集 1
+
+
+
+
+
+
+ 打工人精神状态表情包集 2
+
+
+
+
+当初在武汉完成硕士学位后,你谈到过有读博的想法,为什么最终又决定直接工作?
+张师傅: 因为我太弱小了,所以没有导师要我!要是读了博选择可能会多一些,可以选择创业之类的。
+
+
+是什么时候开始接触到 Paddle 的呢 😂😂?
+张师傅: 硕士期间接触到的,当时闲的没事,打开百度搜了个东西。然后百度搜索引擎就安利了飞桨。
+
+
+在 Paddle 社区,很多人称张师傅为“002”,这是为什么呢?你对于这个称呼有什么想法 💡 呢?
+张师傅: 因为我是第二个拿 Committer 身份的,所以叫 “002”!对于这个称呼我没有什么看法,只是一个称呼罢了(高冷脸.jpg)
+
+
+社区里的开发者都觉得你在技术上很卷,那可以和我们分享一下你忙碌卷技术的日常么?
+张师傅: 我大概是早上 5 点钟起床 🛏️,磨磨蹭蹭到 6 点钟,然后出门吃一碗香喷喷的豆腐脑!之后回到家里,打开电脑耍会儿游戏,然后去公司上班,开启一天辛苦的忙碌的工作!四点半下班,当然和大多数打工人一样,有时候会加班。一般回到家后开始做饭(黑暗料理):有时煎个饼,有时来个煎饺!差不多下午六点就打开游戏 🎮,并且下定决心打完这一把后就开始工作,结果打完一把又一把,最终打到八九点钟的样子,打开群水两句,水完洗个澡就去睡觉!
+
+
+悄悄问下,张师傅花这么多时间做开源,你老板不会生气吗?
+张师傅: 首先我的开源工作都是在下班时间完成的,与工作没关系,这属于生活!第二点呢,如果我的本职工作没有做好,在其他方面大放异彩,那我的老板肯定会生气!所以不要让老板知道我在干什么 🤫。只要让老板知道我有自己的生活,跟工作不冲突就可以了。
+
+
+我了解到你是“飞桨开源之星”,也是“AI Studio 杰出创作者”,那么张师傅肯定有自己的开源心得。你认为对于刚来到社区的小伙伴,应该怎样学习才能和你一样逐渐成为技术大佬?
+张师傅: 其实没有什么技术路线。可能很多人都在问:“我看你代码写这么好,我怎么样才能像你一样?”这个东西没有任何的窍门可言。就比如你在学 C 的时候,成日成夜的把时间耗费在机房里,然后照着书本或者其他东西一个代码一个代码的敲。可能最开始 Debug 工具不会用,IDE 也不会用,也没有那么多经验,但是得这样一步步走过来。当有了这个基础后,可以去做一些其他事情(eg:修改 Paddle 底层框架),你可能又会发现特别困难,但是我们 Paddle 的快乐开源活动已经把项目拆解好了,你可以凭这些先入入门,上个手,然后一点点进步。
+
+
+你曾说在社区中你交到了很多开发者朋友,那么哪位开发者令你印象深刻,或者说社区里哪位大佬让你觉得最不像程序员?
+张师傅: 每位开发者都印象深刻,嘿嘿,开始端水了!最印象深刻的当然是笠雨聆月,顶着一个女性的头像,然后 GitHub 还没有地铁站努力。最不像程序员的那必然是 001(@SigureMo ),虽然他很社恐,头发还很长,但他在我心中就是腼腆的邻家大男孩,他的气质就是腼腆的邻家大男孩。
+
+
+你是如何定义开源社区的?你认为你在开源社区中收获最大的是什么呢?
+张师傅: 开源社区就是一个开放的用于交流的平台。其实开源社区的定义大家已经给了太多了,我想补充的就是:开源社区从最早的 Linux 到其他一些软件其实都可以接触到!大家在社区无偿贡献代码或者知识,大家一起交流进步。最大的特点可能是公益性!
+
+
+你在 Paddle 社区做过让你最有成就感的项目是哪个呢?为什么?
+张师傅: 在 Paddle 社区里几乎没有做过什么有成就感的项目。一直在烂尾,一直在捡别人剩饭,一直在拾人牙慧。
+
+编者注:张师傅可真是认真努力且谦虚的男人!
+
+
+
+在水群时经常看到你说想找个女朋友。那么张师傅想找一个什么类型的呢?给我们描述一下吧 😁😆😂!
+张师傅: 我喜欢温柔一点的,儒雅随和的,不说脏话 🤬 的,遵守交通规则的(过马路看红绿灯 🚥)女孩子。她可以不遵守规则,像我一样。但是交通规则得遵守!最好有一头乌黑的长发 😁!
+
+张师傅注:谁家好人三十岁还没有女朋友啊~ 哇哇哇
+
+
+
+张师傅在做饭方面颇有造诣,那么你是如何突发奇思妙想用最简单的食材烹饪出这一道道高级的美食呢?
+张师傅: 做饭心得就是每天睡觉前坚持学习烹饪技巧,比如打开哔哩哔哩观看 「世界美食 official」 的最新视频!我们要谦虚学习别人是如何把这种简单的食材最终做成高级的糊状物的!日常就喜欢观看印度美食的制作过程~~
+
+
+
+
+ 张师傅经常观看的B站up主
+
+
+
+
+马上 2024 年了,可以分享一下新的一年里你有什么计划么?
+张师傅: 2024 年计划就是 2023 年的计划。女朋友这一条还是可以不完成!
+
+
+
+
+ 张师傅 2023 和 2024 的计划
+
+
+
+
+三、生活中的点点滴滴——张师傅篇
+
+
+
+
+ 张师傅的日常
+
+
+
+ 张师傅的精心制作的黑暗料理
+
+
+]]>
+ 格子衬衫 👕,黑框眼镜 👓,他就是上天钦定的程序员!他狂卷技术,热爱开源;他喜欢摸鱼 🐟,疯狂水群;他“厨艺精湛”,堪称当代厨神。严寒冬日,别人有女朋友温暖手心,而他把 🥤 优乐美捧在手心!凌晨就寝,别人躺平酝酿睡意,他靠咖啡 ☕️ 进入梦境!工作一年半,至今单身汉!他就是来自安徽的吃辣小趴菜——张一乔 😆!
+
+
+
+一、张一乔专属定制海报
+
+
+
+ 张师傅专属定制海报
+
+
+
+张师傅注:我不会吉他 🎸,但是有一把!
+
+二、采访内容
+
+
+先介绍一下自己吧,张师傅!
+张师傅: 我是 96 年的,快三十岁了。感觉自己就是一个普普通通的,人到中年也没有女朋友的,独自一人在北京,住在一个小房子里(连个大阳台都没有)的可怜巴巴 🥺 的年轻人。而且,自己做饭还没有特别好吃,但还得自己做饭 😭。买的都是超市里一包一包的菜 🥬,一做就是两个人的饭,根本吃不完,然后剩菜又吃不下去·····大概这么个样子吧!
+
+张师傅注:我就像一整片沙滩上的一粒沙子,就很普通。可能比起其他沙子,更加适合在浪头飘摇而已!
+
+
+
+
+
+ 左为张师傅的自信照片,右为张师傅一整柜的格子衬衫
+
+
+
+
+现在你是在北京做全栈程序员,一个人在北京习惯吗?北京和你的家乡安徽相比,你更想留在哪?为什么?
+张师傅: 首先,在北京不一定是全栈程序员,也有可能是全方位打杂小工 😣。然后和家乡相比那肯定是家乡好,但是当时还是阴差阳错选择来北京!现在很后悔,很想回家。也不是说北京压力大(因为既不买房子,又没有女朋友。每个月生活也挺简单的,就是交个房租,然后吃饭上班睡觉·····钱肯定是够花的!),只是我自己比较思乡,不想离开家乡!家乡并没有给我留下什么糟糕的印象,父母也还不错。所以比起在外面晃悠,自己还是更加愿意回到家乡!
+
+
+你觉得程序员是一个怎样的工作?这份职业对你的生活中产生了什么影响?
+张师傅: 首先我不知道我自己是不是程序员。在公司,有什么活干什么活!然后工作给我产生的影响大概就是:打工后眼里失去了光!
+
+张师傅名言:公司是用来创造价值的地方,不是学习的地方!
+
+
+
+
+
+ 打工人精神状态表情包集 1
+
+
+
+
+
+
+ 打工人精神状态表情包集 2
+
+
+
+
+当初在武汉完成硕士学位后,你谈到过有读博的想法,为什么最终又决定直接工作?
+张师傅: 因为我太弱小了,所以没有导师要我!要是读了博选择可能会多一些,可以选择创业之类的。
+
+
+是什么时候开始接触到 Paddle 的呢 😂😂?
+张师傅: 硕士期间接触到的,当时闲的没事,打开百度搜了个东西。然后百度搜索引擎就安利了飞桨。
+
+
+在 Paddle 社区,很多人称张师傅为“002”,这是为什么呢?你对于这个称呼有什么想法 💡 呢?
+张师傅: 因为我是第二个拿 Committer 身份的,所以叫 “002”!对于这个称呼我没有什么看法,只是一个称呼罢了(高冷脸.jpg)
+
+
+社区里的开发者都觉得你在技术上很卷,那可以和我们分享一下你忙碌卷技术的日常么?
+张师傅: 我大概是早上 5 点钟起床 🛏️,磨磨蹭蹭到 6 点钟,然后出门吃一碗香喷喷的豆腐脑!之后回到家里,打开电脑耍会儿游戏,然后去公司上班,开启一天辛苦的忙碌的工作!四点半下班,当然和大多数打工人一样,有时候会加班。一般回到家后开始做饭(黑暗料理):有时煎个饼,有时来个煎饺!差不多下午六点就打开游戏 🎮,并且下定决心打完这一把后就开始工作,结果打完一把又一把,最终打到八九点钟的样子,打开群水两句,水完洗个澡就去睡觉!
+
+
+悄悄问下,张师傅花这么多时间做开源,你老板不会生气吗?
+张师傅: 首先我的开源工作都是在下班时间完成的,与工作没关系,这属于生活!第二点呢,如果我的本职工作没有做好,在其他方面大放异彩,那我的老板肯定会生气!所以不要让老板知道我在干什么 🤫。只要让老板知道我有自己的生活,跟工作不冲突就可以了。
+
+
+我了解到你是“飞桨开源之星”,也是“AI Studio 杰出创作者”,那么张师傅肯定有自己的开源心得。你认为对于刚来到社区的小伙伴,应该怎样学习才能和你一样逐渐成为技术大佬?
+张师傅: 其实没有什么技术路线。可能很多人都在问:“我看你代码写这么好,我怎么样才能像你一样?”这个东西没有任何的窍门可言。就比如你在学 C 的时候,成日成夜的把时间耗费在机房里,然后照着书本或者其他东西一个代码一个代码的敲。可能最开始 Debug 工具不会用,IDE 也不会用,也没有那么多经验,但是得这样一步步走过来。当有了这个基础后,可以去做一些其他事情(eg:修改 Paddle 底层框架),你可能又会发现特别困难,但是我们 Paddle 的快乐开源活动已经把项目拆解好了,你可以凭这些先入入门,上个手,然后一点点进步。
+
+
+你曾说在社区中你交到了很多开发者朋友,那么哪位开发者令你印象深刻,或者说社区里哪位大佬让你觉得最不像程序员?
+张师傅: 每位开发者都印象深刻,嘿嘿,开始端水了!最印象深刻的当然是笠雨聆月,顶着一个女性的头像,然后 GitHub 还没有地铁站努力。最不像程序员的那必然是 001(@SigureMo ),虽然他很社恐,头发还很长,但他在我心中就是腼腆的邻家大男孩,他的气质就是腼腆的邻家大男孩。
+
+
+你是如何定义开源社区的?你认为你在开源社区中收获最大的是什么呢?
+张师傅: 开源社区就是一个开放的用于交流的平台。其实开源社区的定义大家已经给了太多了,我想补充的就是:开源社区从最早的 Linux 到其他一些软件其实都可以接触到!大家在社区无偿贡献代码或者知识,大家一起交流进步。最大的特点可能是公益性!
+
+
+你在 Paddle 社区做过让你最有成就感的项目是哪个呢?为什么?
+张师傅: 在 Paddle 社区里几乎没有做过什么有成就感的项目。一直在烂尾,一直在捡别人剩饭,一直在拾人牙慧。
+
+编者注:张师傅可真是认真努力且谦虚的男人!
+
+
+
+在水群时经常看到你说想找个女朋友。那么张师傅想找一个什么类型的呢?给我们描述一下吧 😁😆😂!
+张师傅: 我喜欢温柔一点的,儒雅随和的,不说脏话 🤬 的,遵守交通规则的(过马路看红绿灯 🚥)女孩子。她可以不遵守规则,像我一样。但是交通规则得遵守!最好有一头乌黑的长发 😁!
+
+张师傅注:谁家好人三十岁还没有女朋友啊~ 哇哇哇
+
+
+
+张师傅在做饭方面颇有造诣,那么你是如何突发奇思妙想用最简单的食材烹饪出这一道道高级的美食呢?
+张师傅: 做饭心得就是每天睡觉前坚持学习烹饪技巧,比如打开哔哩哔哩观看 「世界美食 official」 的最新视频!我们要谦虚学习别人是如何把这种简单的食材最终做成高级的糊状物的!日常就喜欢观看印度美食的制作过程~~
+
+
+
+
+ 张师傅经常观看的B站up主
+
+
+
+
+马上 2024 年了,可以分享一下新的一年里你有什么计划么?
+张师傅: 2024 年计划就是 2023 年的计划。女朋友这一条还是可以不完成!
+
+
+
+
+ 张师傅 2023 和 2024 的计划
+
+
+
+
+三、生活中的点点滴滴——张师傅篇
+
+
+
+
+ 张师傅的日常
+
+
+
+ 张师傅的精心制作的黑暗料理
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/sanbu-story
+ https://pfcc.blog/posts/sanbu-story
+ Sun, 14 Jan 2024 00:00:00 GMT
+ “负暄檐宇下,散步池塘曲”,本期我们邀请到了热情好学的散步 🚶♀️ 师傅!你想知道他的人生理想么?你想了解他的学习历程么?你想知道他的日常生活么?你想得到他的真挚祝福么?点击此篇博客,让我们一起走进小散的浪漫人生~
+
+
+
+一、个人名片
+
+
+编者注✍️:潇某真的有很努力把小散的照片 P 得可爱,想看原图可以私聊 😁,反正肯定不会给滴 🐶!
+
+二、采访内容
+
+
+散师傅,给大家介绍一下自己吧!
+小散师傅: 大家好!我是散步🚶(@sanbuphy ),菜但是喜欢学。你们可能会在水群之旅中遇到我。如果觉得我话痨了,请喊我去学习;如果你也喜欢讨论问题,欢迎随时找我一起讨论进步 😁😁;如果你觉得我有缺点,很欢迎你直接指出,这是我自省并前进的动力之一;如果你喜欢做开源 & 没事喜欢做一些玩具,那更请你和我一起去快乐开源!!!!
+
+「散步」 名字由来(用小散原话):因为我想人生就这样 不要那么焦虑,也不要浪费;想要在一个茶足饭饱的午后,在阳光的指引下因生命的跳动而缓缓向前。最好的指代应该是散步,想要向前,但不至于拧巴,就这样的走下去了,也就像生活这般的过下去了。
+
+
+
+大家对你都比较熟悉,一方面是因为你在社区的贡献量,另一方面是因为你经常水群,能不能给大家讲讲 你是怎么做到同时水 5~10 个群的?
+小散师傅: 其实这个很简单。只要你和我一样宅 & 不打游戏 & 没有女朋友 & 打字飞快,就可以一次性水完全部群了!(群保安,不时保卫一下群里的业主们 😂😂)为数不多的好处就是因此可以认识各类大佬。
+
+
+
+
+ 小散四件套
+
+
+
+
+听说不只是 Paddle 的群,你也加了很多别的群,有没有比较有意思的群可以分享?
+小散师傅: 其实我加的大部分群都是技术群。可能也许,我觉得有意思的大家觉得无聊呢。。。
+最近觉得比较好玩的是:dlsys 相关的学习群和我自己的一个每周写博客打卡群(不写就发红包 🥹🥹)。但我觉得每一个有大佬愿意和我交流的群都很有趣,能和大佬们在一起学习成长是我的荣幸,也是我的快乐。我可以在聊天中获取对新事物的理解,我沉迷于此。
+
+编者注✍️:散佬有自己的博客哦 ➡️ https://www.aispacewalk.cn/
+
+
+
+你本科毕业于福州大学,给大家分享一下福大的吃喝玩乐攻略吧!在学校时,有没有什么好玩的事情发生?
+小散师傅:
+
+食堂对面的水果捞,都很好吃 😋😋,阿姨会很诚实的说水果 🍉 酸还是甜;
+湖边很好看,草坪很大,适合躺平;
+曾经参加学校管弦乐团 🎺,那是我最快乐的时光之一;
+水煮肉片 yyds,没有之一;
+曾经有一张神图火遍全网(一只狗望着楼梯下的情侣),没错,就是咱们教学楼拍的;
+食堂基本上可以随便吃,很难踩雷(我最爱吃的就是食堂)。
+
+
+
+
+
+ 上述谈到的小狗望情侣照片
+
+
+
+编者注✍️:下面有小散师傅参与管弦乐团的照片哦~
+
+
+
+我了解到:你是物理系出身,当时为什么会选这个专业呢?后来为什么又放弃对物理的学习?
+小散师傅:
+
+选物理专业原因:很简单,每个曾经中二的少年 🧒 都想研究宇宙和量子力学(你想掌握力量吗 😈?)
+对于放弃物理的学习:因为发现自己笨而且懒,也许做不出什么有价值的东西了,以及发现自己的本心并不在于物理,而物理应该属于本心就在于它的人,只有这样才配得上一直学下去。光是耍小聪明是不可能被物理之神眷顾的。
+
+
+
+后来你开始学经济,然后才转向深度学习。是什么让你开始学经济,后来又是怎么喜欢上深度学习的呢?
+小散师傅: 学经济是因为:看到了徐高老师的《宏观经济二十五讲》。他的讲课中有一张图让我很是触动且惭愧(我每次想偷懒就翻出来看看👀),我觉得让他们(下方图片中的人)过得更好是我想做的事情。但后来,做了一些经济学相关的事(研究金融危机和大衰退/做经济学实证研究)以及听到了老师说的一句话:“写是一回事,采纳又是一回事”,我就发现:只有能有实际用途和影响力的东西才是重要的。还记得《宏观经济学二十五讲:中国视角》中经典的一句话,凯恩斯说:“从长远看,我们都已死去”。所以,人生实属短暂,我们应当在短时间内接触更有为主义的事情,现在就要让他实现。
+喜欢上深度学习:它足够强,可以在短期内对人有帮助,仅此而已。
+
+
+
+
+ 徐高讲课中的图
+
+
+
+
+在转向深度学习的过程中,有没有遇到什么困难?又是如何克服的?
+小散师傅: 实际上,与学习物理和数学相比,深度学习稍微没那么抗压,难度大的反而在计算机基础。但总的来说,我一直遵守八个字:“不懂就问、不会就学”。我喜欢向所有比我厉害的人学习,只要朝着目标,随机梯度下降就行了。我没有特别的克服什么困难,那样听起来很痛苦;实际上更多的应该是快乐和珍惜,在 🫂 拥抱每一次难题中尝试进步。
+
+
+你觉得进入深度学习领域让你感觉到快乐么? 你觉得这一系列的转变对你的职业生涯和个人发展有何影响?
+小散师傅: 总的来说我认为还是快乐的!因为他拥有无限的创造力,也有很大的可能永远地改变人类的生产力。我觉得这个转变是我人生中的随机扰动因子,人生是一场锚定自身性格特质与价值观的随机游走,我们猜不到之后会发生什么,只能让命运沿着自己向前发展,也许等之后发生了各种各样的事情, 我就能找到一条看似靠谱理由回答今天的疑问了。不过,从价值观来说,也许没有影响,只是在愿景上的不同实现方式罢了。
+
+
+你提到选择计算机领域的决定源于对提高生产力的渴望,那么在你看来,深度学习和开源社区是如何实现这一目标的?
+小散师傅: 开源社区是深度学习发展的最大加速器之一,而深度学习则是创造力和智力普及化的最大加速器。
+
+
+你是怎么与飞桨相遇的呢?你个人对飞桨的印象如何呢?
+小散师傅: 其实我本来是在 OpenMMLab 社区混的,但是看到 Paddle 社区回复勤一点(没有拉踩!研发大哥确实多一些)以及大佬参与被拉入坑,然后发现了新大陆、接触了很多大佬。非常感谢能和 Paddle 相遇。我对 Paddle 的印象就是:在国内你很难找到一个那么多研发大哥和开源大佬陪你一起卷以及发各种奖励的社区了(甚至有时候周末都会回复你)。很多有趣的方向都可以尝试,和飞桨最好的相处方式就是和它一起变的更强。但很惭愧的是我由于太忙,现在参加的频率变低了,其实很多项目都非常好玩,希望大家有时间的话可以当游戏多多参与。
+
+
+在开源社区中,您认识了很多开发者或是社区运营者。他们给你留下了什么印象?能具体举例说说么?
+小散师傅: 有太多人所以我只能简短说明,有没提到的朋友我先道哥歉,因为太多了。
+
+
+
+你在 Paddle 社区中经历过最搞笑的事情是什么?
+小散师傅: 某次黑客松第四期 清一色取某人的名字玩梗(咳咳,这里打个谜语)
+
+编者注✍️:黑客松是百度飞桨社区举办的深度学习领域大型编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
+
+
+
+
+
+
+
+ 黑客松花花名字梗
+
+
+
+
+你是否有一些特别喜欢的开源项目或者技术?可以分享一下你喜欢的原因吗?
+小散师傅: 我最喜欢的技术其实没有特别的哪一个,我都很喜欢,都有它独特的美感,能不能都喜欢❤️!
+开源项目的话,那肯定是 Paddle ,当然其他开源项目我也很喜欢(比如 OpenVINO),只要拥有社区和快速答复的研发大哥,那一定就是我爱的社区。
+
+
+散师傅对开源肯定有自己独特的见解,那么你认为什么样的人才能称得上是一位优秀的开源者?
+小散师傅:
+
+能一个人召集一些贡献者;
+文能随手撕几百几千行代码,武能独立开设新仓库包括完整的体系架构建设;
+熟读几个开源项目源码(至少一个大项目);
+熟练 GitHub 操作(独立开设 CI、review PR、审核 issue 等);
+写一个漂亮的 README 而不感到烦躁。
+
+
+
+你的周末一般时这么度过的?会和朋友出去玩还是宅家呢?
+小散师傅: 很显然——宅,主要是每天都觉得自己很菜,还是花时间努力变强吧,向一切大佬们学习。而且,由于我的事情太多,每天几乎都要处理到比较晚,周末也是如此。不过我最开心的事情就是偶尔可以去拍拍照,安慰一下我的艺术脑的创作欲。
+
+编者注✍️:下方 🈶️ 散师傅的摄影作品。散师傅尤其喜欢运用光影!
+
+
+
+总结一下你最喜欢的一句话!
+小散师傅: 见善从之,闻义则服;见路不走,实事求是;不懂就问,不会就学。
+
+
+新的一年开始了~散师傅给我们小小总结一下你的 2023 年,展望一下 2024 年怎么样?
+小散师傅: 2023 有一些务虚,希望 2024 可以更加务实、专注、静下心,不要偷懒,聚焦于做一些长期主义、有用的事情(比如某个方向能够随手成百上千行),链接更多的有缘人并相互成长。希望自己可以变成更从容的人、能帮助别人的人、更阳光开朗的人、能传递快乐与希望的人。
+不过,比起展望自己的 2024,我更希望大家的 2024 都能变得越来越好;人间短暂,希望我们都能走在希望的田野上,无论岁月如何流淌,都能在梦想的道路上互相映照,让生命力在每一处角落绽放。我无比真诚祝愿每一位看过&没看过这篇博客的朋友都能寻找到自己的希翼与幸福。
+祝愿每一位人安好。
+
+编者注✍️:这是小散师傅非常非常认真写的祝福,酝酿了很久很久!
+
+
+
+三、小散的十八般武艺
+
+
+
+
+ 小散爱好词云图
+
+
+绘画篇 🎨
+
+
+
+
+ 小散绘画
+
+
+音乐篇 🪕
+
+
+
+
+ 最上图为小散参加学校管弦乐队照片 下左为小散的小号 下右为小散为乐队设计的标志
+
+
+ > 编者注✍️:小散师傅超级会拉二胡,还会小号🎺呢!!!
+摄影篇 📷
+
+
+
+
+ 小散的摄影作品集1
+
+
+
+
+
+
+ 小散的摄影作品集2
+
+
+厨艺篇😋
+
+
+
+
+ 小散厨艺展示集1
+
+
+
+
+
+
+ 小散厨艺展示集2
+
+
+四、著名大型评论平台——虎扑评论专区
+散师傅很活跃,尤其是在开源群里活跃(都是在问问题!好卷~),因此也就结识了很多朋友 👬。这次我们邀请到和小散师傅有着密切联系的大佬们来谈谈他们对于小散师傅的印象。大家快来看看吧 😄~~
+
+
+
+ 散师傅作为一个非人工智能相关专业的开发者,对各种新技术都充满热情,大部分时间都是靠业余时间自学新技术,虽然平时休息时间非常少,但是依然愿意花时间参与开源活动,并把自己看到的有趣的、有价值的开源项目分享出来,并留下自己的见解。同时散师傅的知识面也非常广,从半导体技术到计算机软件,再到硬件加速和大模型技术都有所涉猎,属于开发者中的佼佼者。
+
+
+
+
+
+ 养成系技术大佬,很有开源热情,厦门见到散师傅感觉散师傅是个很好的人,但是感觉散师傅在互联网上要更E一点哈哈哈哈,线下见面好像话不是特别多。
+
+
+
+
+
+ 散佬一直是我们社区的自学标兵,经常琢磨一些不同领域的技术问题,带着大家一起讨论学习,摇人参加快乐开源,很不错 👍。
+
+
+
+
+
+ 散师傅是一个对技术非常有热情的大佬,在各大技术群里都很活跃。白天在公司打工,晚上和周末抽空也会研究新东西。他对技术的热情真的很令人钦佩,与他交流让人感受到他在学习新技术时所迸发的喜悦。
+
+
+
+
+
+ 我是从黑客松 TRT 推理算子中认识散步师傅的,对散步师傅印象比较深的有几个:
+
+ 【开源社区对比研究】 以 CI 为例的调研,做的清晰明了;
+ 在群里常常和 @engineer1109 同学讨论技术问题;
+ 工作应该是推理方向的,但对性能优化、部署等其他方向也很有兴趣。
+
+
+
+
+
+
+ 一个神秘的大佬!似乎啥都会 🐮!
+
+
+
+
+
+ 散步师傅很爱学习,也很会学习。你如果翻看他的个人 blog 和 GitHub 主页,会发现他从系统到算法,无所不学。学会后,他就在飞桨社区里做开源,也就是挖坑和填坑,做了很多很出色的工作。当然可能因为学太多了,以致于,还有些坑他挖了,还没填。我记得他做过很精彩的关于 Python 虚拟机的分享,研究过很长时间 torchdynamo,期待以后能在社区里,挖个大坑,并一起填上。今天,还意外发现他竟然自学过绿导师的操作系统课,这门课非常棒,在这里,也推荐给看到这段文字的读者。
+
+
+
+
+
+ 和小散师傅聊天时,我能感觉到他是一个可爱的人。我从来没有见过那么多可爱的表情包(而我,很多沙雕的表情包,和小散形成鲜明对比)!除了可爱,我觉得小散是一个浪漫主义开源人,他有自己的崇高的理想和抱负(无关权财)。我希望他能坚持下去,实现自己的愿望!当然,他这个每天在群里问问题,清各种 ddl 的卷王,我是相信他的实力的!
+ 所以,继续闪闪发光吧,小散!
+ 再提一句:散师傅打字太快了,聊天我根本跟不上节奏!笑死 😆。
+
+
+]]>
+ “负暄檐宇下,散步池塘曲”,本期我们邀请到了热情好学的散步 🚶♀️ 师傅!你想知道他的人生理想么?你想了解他的学习历程么?你想知道他的日常生活么?你想得到他的真挚祝福么?点击此篇博客,让我们一起走进小散的浪漫人生~
+
+
+
+一、个人名片
+
+
+编者注✍️:潇某真的有很努力把小散的照片 P 得可爱,想看原图可以私聊 😁,反正肯定不会给滴 🐶!
+
+二、采访内容
+
+
+散师傅,给大家介绍一下自己吧!
+小散师傅: 大家好!我是散步🚶(@sanbuphy ),菜但是喜欢学。你们可能会在水群之旅中遇到我。如果觉得我话痨了,请喊我去学习;如果你也喜欢讨论问题,欢迎随时找我一起讨论进步 😁😁;如果你觉得我有缺点,很欢迎你直接指出,这是我自省并前进的动力之一;如果你喜欢做开源 & 没事喜欢做一些玩具,那更请你和我一起去快乐开源!!!!
+
+「散步」 名字由来(用小散原话):因为我想人生就这样 不要那么焦虑,也不要浪费;想要在一个茶足饭饱的午后,在阳光的指引下因生命的跳动而缓缓向前。最好的指代应该是散步,想要向前,但不至于拧巴,就这样的走下去了,也就像生活这般的过下去了。
+
+
+
+大家对你都比较熟悉,一方面是因为你在社区的贡献量,另一方面是因为你经常水群,能不能给大家讲讲 你是怎么做到同时水 5~10 个群的?
+小散师傅: 其实这个很简单。只要你和我一样宅 & 不打游戏 & 没有女朋友 & 打字飞快,就可以一次性水完全部群了!(群保安,不时保卫一下群里的业主们 😂😂)为数不多的好处就是因此可以认识各类大佬。
+
+
+
+
+ 小散四件套
+
+
+
+
+听说不只是 Paddle 的群,你也加了很多别的群,有没有比较有意思的群可以分享?
+小散师傅: 其实我加的大部分群都是技术群。可能也许,我觉得有意思的大家觉得无聊呢。。。
+最近觉得比较好玩的是:dlsys 相关的学习群和我自己的一个每周写博客打卡群(不写就发红包 🥹🥹)。但我觉得每一个有大佬愿意和我交流的群都很有趣,能和大佬们在一起学习成长是我的荣幸,也是我的快乐。我可以在聊天中获取对新事物的理解,我沉迷于此。
+
+编者注✍️:散佬有自己的博客哦 ➡️ https://www.aispacewalk.cn/
+
+
+
+你本科毕业于福州大学,给大家分享一下福大的吃喝玩乐攻略吧!在学校时,有没有什么好玩的事情发生?
+小散师傅:
+
+食堂对面的水果捞,都很好吃 😋😋,阿姨会很诚实的说水果 🍉 酸还是甜;
+湖边很好看,草坪很大,适合躺平;
+曾经参加学校管弦乐团 🎺,那是我最快乐的时光之一;
+水煮肉片 yyds,没有之一;
+曾经有一张神图火遍全网(一只狗望着楼梯下的情侣),没错,就是咱们教学楼拍的;
+食堂基本上可以随便吃,很难踩雷(我最爱吃的就是食堂)。
+
+
+
+
+
+ 上述谈到的小狗望情侣照片
+
+
+
+编者注✍️:下面有小散师傅参与管弦乐团的照片哦~
+
+
+
+我了解到:你是物理系出身,当时为什么会选这个专业呢?后来为什么又放弃对物理的学习?
+小散师傅:
+
+选物理专业原因:很简单,每个曾经中二的少年 🧒 都想研究宇宙和量子力学(你想掌握力量吗 😈?)
+对于放弃物理的学习:因为发现自己笨而且懒,也许做不出什么有价值的东西了,以及发现自己的本心并不在于物理,而物理应该属于本心就在于它的人,只有这样才配得上一直学下去。光是耍小聪明是不可能被物理之神眷顾的。
+
+
+
+后来你开始学经济,然后才转向深度学习。是什么让你开始学经济,后来又是怎么喜欢上深度学习的呢?
+小散师傅: 学经济是因为:看到了徐高老师的《宏观经济二十五讲》。他的讲课中有一张图让我很是触动且惭愧(我每次想偷懒就翻出来看看👀),我觉得让他们(下方图片中的人)过得更好是我想做的事情。但后来,做了一些经济学相关的事(研究金融危机和大衰退/做经济学实证研究)以及听到了老师说的一句话:“写是一回事,采纳又是一回事”,我就发现:只有能有实际用途和影响力的东西才是重要的。还记得《宏观经济学二十五讲:中国视角》中经典的一句话,凯恩斯说:“从长远看,我们都已死去”。所以,人生实属短暂,我们应当在短时间内接触更有为主义的事情,现在就要让他实现。
+喜欢上深度学习:它足够强,可以在短期内对人有帮助,仅此而已。
+
+
+
+
+ 徐高讲课中的图
+
+
+
+
+在转向深度学习的过程中,有没有遇到什么困难?又是如何克服的?
+小散师傅: 实际上,与学习物理和数学相比,深度学习稍微没那么抗压,难度大的反而在计算机基础。但总的来说,我一直遵守八个字:“不懂就问、不会就学”。我喜欢向所有比我厉害的人学习,只要朝着目标,随机梯度下降就行了。我没有特别的克服什么困难,那样听起来很痛苦;实际上更多的应该是快乐和珍惜,在 🫂 拥抱每一次难题中尝试进步。
+
+
+你觉得进入深度学习领域让你感觉到快乐么? 你觉得这一系列的转变对你的职业生涯和个人发展有何影响?
+小散师傅: 总的来说我认为还是快乐的!因为他拥有无限的创造力,也有很大的可能永远地改变人类的生产力。我觉得这个转变是我人生中的随机扰动因子,人生是一场锚定自身性格特质与价值观的随机游走,我们猜不到之后会发生什么,只能让命运沿着自己向前发展,也许等之后发生了各种各样的事情, 我就能找到一条看似靠谱理由回答今天的疑问了。不过,从价值观来说,也许没有影响,只是在愿景上的不同实现方式罢了。
+
+
+你提到选择计算机领域的决定源于对提高生产力的渴望,那么在你看来,深度学习和开源社区是如何实现这一目标的?
+小散师傅: 开源社区是深度学习发展的最大加速器之一,而深度学习则是创造力和智力普及化的最大加速器。
+
+
+你是怎么与飞桨相遇的呢?你个人对飞桨的印象如何呢?
+小散师傅: 其实我本来是在 OpenMMLab 社区混的,但是看到 Paddle 社区回复勤一点(没有拉踩!研发大哥确实多一些)以及大佬参与被拉入坑,然后发现了新大陆、接触了很多大佬。非常感谢能和 Paddle 相遇。我对 Paddle 的印象就是:在国内你很难找到一个那么多研发大哥和开源大佬陪你一起卷以及发各种奖励的社区了(甚至有时候周末都会回复你)。很多有趣的方向都可以尝试,和飞桨最好的相处方式就是和它一起变的更强。但很惭愧的是我由于太忙,现在参加的频率变低了,其实很多项目都非常好玩,希望大家有时间的话可以当游戏多多参与。
+
+
+在开源社区中,您认识了很多开发者或是社区运营者。他们给你留下了什么印象?能具体举例说说么?
+小散师傅: 有太多人所以我只能简短说明,有没提到的朋友我先道哥歉,因为太多了。
+
+
+
+你在 Paddle 社区中经历过最搞笑的事情是什么?
+小散师傅: 某次黑客松第四期 清一色取某人的名字玩梗(咳咳,这里打个谜语)
+
+编者注✍️:黑客松是百度飞桨社区举办的深度学习领域大型编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
+
+
+
+
+
+
+
+ 黑客松花花名字梗
+
+
+
+
+你是否有一些特别喜欢的开源项目或者技术?可以分享一下你喜欢的原因吗?
+小散师傅: 我最喜欢的技术其实没有特别的哪一个,我都很喜欢,都有它独特的美感,能不能都喜欢❤️!
+开源项目的话,那肯定是 Paddle ,当然其他开源项目我也很喜欢(比如 OpenVINO),只要拥有社区和快速答复的研发大哥,那一定就是我爱的社区。
+
+
+散师傅对开源肯定有自己独特的见解,那么你认为什么样的人才能称得上是一位优秀的开源者?
+小散师傅:
+
+能一个人召集一些贡献者;
+文能随手撕几百几千行代码,武能独立开设新仓库包括完整的体系架构建设;
+熟读几个开源项目源码(至少一个大项目);
+熟练 GitHub 操作(独立开设 CI、review PR、审核 issue 等);
+写一个漂亮的 README 而不感到烦躁。
+
+
+
+你的周末一般时这么度过的?会和朋友出去玩还是宅家呢?
+小散师傅: 很显然——宅,主要是每天都觉得自己很菜,还是花时间努力变强吧,向一切大佬们学习。而且,由于我的事情太多,每天几乎都要处理到比较晚,周末也是如此。不过我最开心的事情就是偶尔可以去拍拍照,安慰一下我的艺术脑的创作欲。
+
+编者注✍️:下方 🈶️ 散师傅的摄影作品。散师傅尤其喜欢运用光影!
+
+
+
+总结一下你最喜欢的一句话!
+小散师傅: 见善从之,闻义则服;见路不走,实事求是;不懂就问,不会就学。
+
+
+新的一年开始了~散师傅给我们小小总结一下你的 2023 年,展望一下 2024 年怎么样?
+小散师傅: 2023 有一些务虚,希望 2024 可以更加务实、专注、静下心,不要偷懒,聚焦于做一些长期主义、有用的事情(比如某个方向能够随手成百上千行),链接更多的有缘人并相互成长。希望自己可以变成更从容的人、能帮助别人的人、更阳光开朗的人、能传递快乐与希望的人。
+不过,比起展望自己的 2024,我更希望大家的 2024 都能变得越来越好;人间短暂,希望我们都能走在希望的田野上,无论岁月如何流淌,都能在梦想的道路上互相映照,让生命力在每一处角落绽放。我无比真诚祝愿每一位看过&没看过这篇博客的朋友都能寻找到自己的希翼与幸福。
+祝愿每一位人安好。
+
+编者注✍️:这是小散师傅非常非常认真写的祝福,酝酿了很久很久!
+
+
+
+三、小散的十八般武艺
+
+
+
+
+ 小散爱好词云图
+
+
+绘画篇 🎨
+
+
+
+
+ 小散绘画
+
+
+音乐篇 🪕
+
+
+
+
+ 最上图为小散参加学校管弦乐队照片 下左为小散的小号 下右为小散为乐队设计的标志
+
+
+ > 编者注✍️:小散师傅超级会拉二胡,还会小号🎺呢!!!
+摄影篇 📷
+
+
+
+
+ 小散的摄影作品集1
+
+
+
+
+
+
+ 小散的摄影作品集2
+
+
+厨艺篇😋
+
+
+
+
+ 小散厨艺展示集1
+
+
+
+
+
+
+ 小散厨艺展示集2
+
+
+四、著名大型评论平台——虎扑评论专区
+散师傅很活跃,尤其是在开源群里活跃(都是在问问题!好卷~),因此也就结识了很多朋友 👬。这次我们邀请到和小散师傅有着密切联系的大佬们来谈谈他们对于小散师傅的印象。大家快来看看吧 😄~~
+
+
+
+ 散师傅作为一个非人工智能相关专业的开发者,对各种新技术都充满热情,大部分时间都是靠业余时间自学新技术,虽然平时休息时间非常少,但是依然愿意花时间参与开源活动,并把自己看到的有趣的、有价值的开源项目分享出来,并留下自己的见解。同时散师傅的知识面也非常广,从半导体技术到计算机软件,再到硬件加速和大模型技术都有所涉猎,属于开发者中的佼佼者。
+
+
+
+
+
+ 养成系技术大佬,很有开源热情,厦门见到散师傅感觉散师傅是个很好的人,但是感觉散师傅在互联网上要更E一点哈哈哈哈,线下见面好像话不是特别多。
+
+
+
+
+
+ 散佬一直是我们社区的自学标兵,经常琢磨一些不同领域的技术问题,带着大家一起讨论学习,摇人参加快乐开源,很不错 👍。
+
+
+
+
+
+ 散师傅是一个对技术非常有热情的大佬,在各大技术群里都很活跃。白天在公司打工,晚上和周末抽空也会研究新东西。他对技术的热情真的很令人钦佩,与他交流让人感受到他在学习新技术时所迸发的喜悦。
+
+
+
+
+
+ 我是从黑客松 TRT 推理算子中认识散步师傅的,对散步师傅印象比较深的有几个:
+
+ 【开源社区对比研究】 以 CI 为例的调研,做的清晰明了;
+ 在群里常常和 @engineer1109 同学讨论技术问题;
+ 工作应该是推理方向的,但对性能优化、部署等其他方向也很有兴趣。
+
+
+
+
+
+
+ 一个神秘的大佬!似乎啥都会 🐮!
+
+
+
+
+
+ 散步师傅很爱学习,也很会学习。你如果翻看他的个人 blog 和 GitHub 主页,会发现他从系统到算法,无所不学。学会后,他就在飞桨社区里做开源,也就是挖坑和填坑,做了很多很出色的工作。当然可能因为学太多了,以致于,还有些坑他挖了,还没填。我记得他做过很精彩的关于 Python 虚拟机的分享,研究过很长时间 torchdynamo,期待以后能在社区里,挖个大坑,并一起填上。今天,还意外发现他竟然自学过绿导师的操作系统课,这门课非常棒,在这里,也推荐给看到这段文字的读者。
+
+
+
+
+
+ 和小散师傅聊天时,我能感觉到他是一个可爱的人。我从来没有见过那么多可爱的表情包(而我,很多沙雕的表情包,和小散形成鲜明对比)!除了可爱,我觉得小散是一个浪漫主义开源人,他有自己的崇高的理想和抱负(无关权财)。我希望他能坚持下去,实现自己的愿望!当然,他这个每天在群里问问题,清各种 ddl 的卷王,我是相信他的实力的!
+ 所以,继续闪闪发光吧,小散!
+ 再提一句:散师傅打字太快了,聊天我根本跟不上节奏!笑死 😆。
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/xdoctest-project
+ https://pfcc.blog/posts/xdoctest-project
+ Wed, 27 Dec 2023 00:00:00 GMT
+ 【将 xdoctest 引入飞桨工作流】的项目总结。
+
+
+【将 xdoctest 引入飞桨工作流 】 是第六届“中国软件开源创新大赛”开源任务挑战赛赛道——飞桨框架任务挑战赛 的赛题之一(赛题五),由社区开发者顺师傅 (@megemini )主导,是 Paddle 社区迄今为止影响范围最大的开源活动 🎊。该项目规模极其庞大,涉及一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同参与完成。
+
+本篇博客主要依据顺师傅的赛题答辩内容进行编写,从过去 、现在 、未来 三个角度,对项目进行分析、总结和展望。
+>>> print(past) 过去
+01 - 关于任务
+文档是用户了解项目最主要的方式,而 API 文档更是承担了用户了解每个 API 使用方式的重要入口。Paddle 为上千个公开 API 提供了详尽的 API 文档,每个 API 都有对应的示例代码,以便用户能够最直观的了解 API 的使用方式。
+但由于历史原因,Paddle 的 API 文档中的示例代码是直接使用 Python 代码块形式编写的,这使得我们无法对示例代码的输出进行自动化检查,从而无法保证展示给用户的示例代码的有效性,导致经常出现用户发现文档中的输出与实际运行结果不一致的情况。
+
+
+
+
+ 过去 API 文档示例代码格式
+
+
+而本任务,则是要求将 xdoctest 工具引入到 Paddle CI 检查流水线中,利用 xdoctest 能够自动执行示例代码,并对示例代码的输出进行检查的特性,对 Paddle API 文档中的示例代码进行检查,确保示例代码的输出结果与实际运行结果一致,从而提高 Paddle API 文档的质量。
+>>> print(why_do_it) 为什么做这个事情?
+文档是开发者接触 Paddle 的第一手学习资料,需要保证用户能够 快速、正确 地上手 Paddle 框架,代码示例的重要程度也就不言而喻。
+>>> print(do_it_fast) 何为快速?
+能够引导用户学习飞桨官方文档,并直接获得使用相应 API 接口的能力。
+>>> print(do_it_right) 何为正确?
+提供给用户正确运行、结果符合预期的示例代码。
+02 - 现有方案
+过去 Paddle 的 API 文档示例代码,对于普通 Python 语句没有提示符要求,对于输出则使用 #
进行注释。
+>>> print(problem) 过去这样做有什么问题?
+
+
+需要用户自己区分普通注释与代码输出
+不符合 Python 开源项目里对可交互示例的实践和习惯
+代码检查不严格,只保证运行,不保证正确
+
+>>> print(solutions) 都有哪些现成的解决方案?
+
+Python 标准库中内置了 doctest 可用于示例代码的自动执行和检查。但 doctest 是使用正则表达式来解析示例代码部分的,这使得示例代码的编写必须遵循严格的格式要求。
+xdoctest 是一个基于 AST 的 Python 示例代码自动执行和检查工具,相比 doctest,xdoctest 的示例代码格式要求更加宽松,xdoctest 作者在博客 Extending Python Doctests – xdoctest 详细阐述了这一点。
+显然后者是更适合 Paddle 的需求的,因此我们选择将 xdoctest 作为引入 Paddle CI 检查流水线的基础工具。这里为什么说是基础工具呢?是因为在后期迭代开发过程中发现 xdoctest 本身也有很多不足,因此我们在 xdoctest 的基础上进行了大量的二次开发,以满足 Paddle 的需求。
+03 - 挑战
+>>> 可以预见的挑战
+
+有 800 万开发者每天都在学习、使用 Paddle 框架,xdoctest 的引入需要无缝切换
+Paddle 框架包含 1400+ API,还涉及到版本更迭、API 迭代,框架庞大复杂
+由于深度学习特殊性,同一示例代码在不同设备环境(CPU、GPU)会有差异性,需要区别验证
+
+>>> 项目的三个大坑
+
+>>> print(now) 现在
+01 - 项目分解
+一切源于一场对设计文档(RFC) 的讨论。
+
+
+
+
+ RFC 设计文档
+
+
+>>> print(discussion) 都讨论了些什么?
+在顺师傅和我们的交流中,共同抛出了相当多的问题进行讨论。这个阶段也遇到了项目的第一个大坑——历史包袱重 。
+设计文档(抛开可以预见的那些挑战不说)
+
+Paddle 代码和 docs 都有代码检查逻辑
+代码检查逻辑还不尽相同
+Paddle 与 PyTorch 很多实现方式不一样
+PyTorch 的检查方式并不完整
+
+后知后觉
+
+文档中的示例代码未及时随着框架的演进和接口的的变化更新
+接口变动、逻辑变动
+与单元测试关注点不同,测试方案不同
+
+>>> print(rfc_for_project) 完成设计文档
+经过细致的讨论和顺师傅对上述问题的梳理,逐渐理清了项目设计思路,并最终完成设计文档,正式启动项目。
+
+各方参与几十轮的讨论
+11470 字
+36 页
+2 个大版本,3 个小版本
+
+>>> print(milestones) 里程碑
+在顺师傅完成项目拆解后,开始着手开发。此时遇到第二个大坑——项目管理难 。
+
+
+
+
+ 项目 milestones
+
+
+>>> print(just_use_it) 直接用 xdoctest 不行吗?
+xdoctest 并不适用如 Paddle 此类庞大复杂的框架。
+
+【接口遍历不全】 对于全局命名等情况无能为力
+【检查环境混用】 不能隔离多个示例检查的逻辑
+【无数据类型检查】 不能比对浮点数、复数等情况
+【无法进行全局控制】 如 timeout,错误语句等
+
+>>> print(technique_solutions) 主要的技术解决方案
+
+针对【接口遍历不全】 此次任务沿用飞桨原有的接口遍历逻辑,将原有的 xdoctest 的检查逻辑进行拆分
+针对【检查环境混用】 此次任务利用多进程技术对执行环境进行隔离,进而防止环境污染等情况
+针对【无数据类型检查】 此次任务对 xdoctest 的检查逻辑进行 patch,从而可以比对整数、浮点数、复数等情况
+针对【无法进行全局控制】 引入全局指令、全局语句检查机制
+
+>>> print(technique_solutions.__more__)
+进行重构,优化迁移环境
+
+全局指令转换
+抽象示例检查类
+解耦示例检查流程与检查类
+解耦示例检查结果
+日志级别分离
+
+>>> print(workload) 工作量有多大?
+由于 Paddle 的公开 API 数量众多,且需要全量的优化对应文档的示例代码,所以在该阶段遇到第三个大坑——工程量巨大 。
+因此,我们选择相信开源的力量 ,号召 Paddle 社区的伙伴一起参与进来!
+
+代码到文档全流程
+上千个 API
+数百个源文件
+数十万行代码
+已有 24 位开发者近 3 个月的贡献
+
+02 - 里程碑
+
+03 - 开源社区
+>>> print(happy_open_source) 社区快乐开源活动
+飞桨快乐开源活动旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。
+在本赛题中,顺师傅发起了 2 个衍生的快乐开源任务,借助社区的力量来一起全量优化 Paddle 文档的示例代码。
+>>> print(missions_0) 开源任务一 : 修改中英文示例一致
+修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM docs#5957
+
+
+
+
+ 中文文档示例代码全部以 COPY-FROM 的形式和英文保持一致
+
+
+>>> print(missions_1) 开源任务二 : 修改旧的示例代码
+[xdoctest] 分批次修改已有代码的示例 #55629
+
+
+
+
+ 修改已有示例以符合 Google Style样式
+
+
+在开源任务二中,由于需要把控示例代码的修改效果,顺师傅也从开发者的身份逐渐转变成 Reviewer 。
+>>> print(reviewer)
+
+更关注用户的体验
+更关注代码的质量
+更清楚开发者的诉求
+
+>>> print(reviewer.__task__)
+
+熟悉 review 工作流
+任务拆解
+
+第一批:简单,开发者熟悉环境与流程
+第二批:复杂,涉及 CPU/GPU 环境等情况
+第三批:困难,涉及 C++、并行、静态图等
+
+
+阶段总结,问题反馈
+开发、打磨工具 convert_doctest
+
+>>> print(convert_doctest.__doc__) 辅助工具
+为了方便社区开发者完成示例代码的修改,顺师傅开发了 convert_doctest 辅助工具,能够实现:
+
+对示例代码进行初步转换 :自动修改示例格式,节省大量人工修改的时间。
+对修改后的示例代码进行本地检查 :不用等待 CI 的运行结果,本地即可验证与修改。
+
+极大提升了社区开发者完成任务的效率。
+
+
+
+
+ convert_doctest 效果
+
+
+>>> print(missions_bravo) 整体开源贡献
+
+共有 24 位 开源开发者参与。
+涉及约 450 个 文件。
+涉及 数十万行 代码。
+已有约 150 个 PR 被合入。
+
+>>> 回顾三个大坑
+在项目的开发过程中,前文提到的三个大坑,也被顺师傅逐一击破。
+
+
+
+>>> print(future) 未来
+01 - 任务总结
+>>> 整体贡献
+主线 代码检查特性的迁移 >>> 主要由个人独立 完成。
+支线 新旧示例代码的修改 >>> 主要由开源社区 完成。
+
+RFC《将 xdoctest 引入到飞桨框架工作流中》。
+完成飞桨框架使用 xdoctest 进行示例代码检查的切换。
+退场飞桨文档原有的示例代码检查。
+完成飞桨框架全部示例代码对新格式的切换。
+完成飞桨文档遗留 COPY-FROM 的切换。
+完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新。
+完成飞桨文档官网对于新格式示例代码的兼容。
+开源社区任务一:修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM:
+
+涉及 PR:23 个 ;
+涉及文件:82 个 ;
+开源贡献者:7 人 。
+
+
+开源社区任务二:xdoctest 分批次修改已有代码的示例:
+
+涉及 PR:123 个 ;
+涉及文件:364 个 ;
+开源贡献者:19 人 。
+
+
+
+>>> 个人贡献
+
+调研分析、任务拆解、项目开发、代码 review。
+RFC《将 xdoctest 引入到飞桨框架工作流中》
+完成飞桨框架使用 xdoctest 进行示例代码检查的切换
+退场飞桨文档原有的示例代码检查
+完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新
+提交 PR:20 个
+开源社区 Review PR:59 个
+开发辅助工具 convert_doctest
+
+>>> 个人收获
+
+开源协作,开发者 与 Reviewer 身份的转换
+学习飞桨,更全面、更深入的学习;学习的越多,需要学习的更多
+编程能力,更直接的需求反馈与实现
+开拓视野,开源参与者之广,人外有人
+
+02 - 未来规划
+>>> CONVERT_DOCTEST
+
+合入 Paddle、发布到 PyPI,回馈开源社区
+思考是否有工具可以取代 xdoctest?是否单独开发 doctest 工具?
+
+03 - 开源贡献
+感谢以下参与开源任务的开发者们~
+>>> 开源任务一:修改中英文示例一致
+@Ainavo 、
+@Li-fAngyU 、
+@Liyulingyue 、
+@RedContritio 、
+@enkilee 、
+@gouzil 、
+@jjyaoao 。
+>>> 开源任务二:修改旧的示例代码
+@AndSonder 、
+@Candy2Tang 、
+@Difers 、
+@DrRyanHuang 、
+@Kaedeharai 、
+@KongAKun 、
+@Liyulingyue 、
+@PommesPeter 、
+@SigureMo 、
+@enkilee 、
+@gouzil 、
+@jinyouzhi 、
+@liyongchao911 、
+@longranger2 、
+@ooooo-create 、
+@sunzhongkai588 、
+@whisky-12 、
+@yoyoIcy 、
+@yuchen202 。
+>>> 飞桨工作人员
+@SigureMo 、
+@sunzhongkai588 、
+@luotao1 、
+@jzhang533 。
+]]>
+
+ -
+
+ https://pfcc.blog/posts/wuxi-kaifangyuanzi
+ https://pfcc.blog/posts/wuxi-kaifangyuanzi
+ Tue, 26 Dec 2023 00:00:00 GMT
+ 2023 年 12 月 15 日顺利完成「第一届开放原子开源大赛 - 飞桨 PaddlePaddle 开源贡献挑战赛」 决赛路演,产生 2 支一等奖队伍,16 日参加开放原子开源基金会举办的「2023 开放原子开发者大会」 ,与各开源组织与机构同行沟通交流,收获满满~
+
+开放原子开源大赛 - 飞桨 PaddlePaddle 开源任务挑战大赛 🏁
+开放原子开源基金会 是致力于推动全球开源事业发展的非营利机构。这次飞桨团队受邀参与了「第一届开放原子开源大赛」的共建,发布飞桨 PaddlePaddle 开源贡献挑战赛,本期共计发布 6 道赛题,报名 39 支团队,收到有效提交作品 8 个,经初步筛选有 5 个作品入围决赛答辩,经 6 位评委线下评审,选出一等奖 2 名、二等奖 2 名、三等奖 1 名。飞桨获「优秀共建方」荣誉 🥳。
+
+还有无锡市公证处的工作人员做现场公示,可正规呢~
+
+| 赛题 | 贡献 repo | 参赛团队 | 团队背景 | 获奖情况 | 提交情况 |
+|
+]]>
+ 2023 年 12 月 15 日顺利完成「第一届开放原子开源大赛 - 飞桨 PaddlePaddle 开源贡献挑战赛」 决赛路演,产生 2 支一等奖队伍,16 日参加开放原子开源基金会举办的「2023 开放原子开发者大会」 ,与各开源组织与机构同行沟通交流,收获满满~
+
+开放原子开源大赛 - 飞桨 PaddlePaddle 开源任务挑战大赛 🏁
+开放原子开源基金会 是致力于推动全球开源事业发展的非营利机构。这次飞桨团队受邀参与了「第一届开放原子开源大赛」的共建,发布飞桨 PaddlePaddle 开源贡献挑战赛,本期共计发布 6 道赛题,报名 39 支团队,收到有效提交作品 8 个,经初步筛选有 5 个作品入围决赛答辩,经 6 位评委线下评审,选出一等奖 2 名、二等奖 2 名、三等奖 1 名。飞桨获「优秀共建方」荣誉 🥳。
+
+还有无锡市公证处的工作人员做现场公示,可正规呢~
+
+
+
+
+
+梦师傅注✍️:很有精神!
+
+开放原子开发者大会 - 开源治理与开发者运营分论坛 💬
+这次大会规格很高,百度搜索「2023 开放原子开发者大会」可以看到很多新闻。飞桨受邀参加的是「开源治理与开发者运营分论坛」,梦师傅有一个关于飞桨开源社区的分享,同时也是分论坛的主持人和圆桌嘉宾,被现场导演戏称为「全场最忙的人」🤣。
+
+
+
+
+开放原子开发者大会 - 开发者之夜 🌠
+还没完!晚上的开发者之夜,有央视的主持人姐姐和无锡当地的 Rap 天团,各路整活层出不穷。现场颁发了「2023 年活力开源贡献者」和「2023 年生态项目」奖,咱们飞桨社区有 17 名开发者入选 🤩,同时拿到了生态项目奖哦 🥰,给各位优秀的贡献者和飞桨点赞 👍 ~
+
+
+
+
+
+最后展示一个大合照 🏆 ~ 2023 收获满满,2024 一定会更好!提前给大家拜个早年 🧧🧨
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/hackathon-5th-episode03
+ https://pfcc.blog/posts/hackathon-5th-episode03
+ Mon, 25 Dec 2023 00:00:00 GMT
+ 让我们看看哪些最强“Hacker”脱颖而出!
+
+这是一次好奇心的远航,也是一场创作激情与团队协作的较量。
+你懂技术,有想法,在这里可以尽情发挥!
+我们希望你,不只埋头创造,一起享受不确定的乐趣,才能涌现意想不到的灵感和收获。
+在这里,不止精益求精的竞技,去结识志同道合的小伙伴,去和研发导师 1V1 深度交流。
+在飞桨黑客松的舞台上,创造力释放,“码”上见真章!
+经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
+01 - 高手云集的飞桨黑客松活动
+PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第五期活动自 2023 年 9 月中旬发布后,开发者热情响应,比赛历经三个月完美收官!
+本次活动任务难度持续升级,飞桨联合 OpenVINO™ 等生态伙伴发布 100+ 开源贡献任务。赛制全新升级,本期黑客松活动在延续开源贡献个人挑战赛的基础上,首次探索以 Code Camp 形式组织开源活动,1 对 1 带教形式,并由开发者担任助教。并发布全新赛道——大模型应用与创意赛,基于文心大模型,创意无限,打开想象力,开发 AI 原生应用。
+共有 800+ 位社区开发者参与到飞桨黑客松中,160+ 支队伍进行任务认领,本期黑客松活动在任务完成数量、参与团队规模、项目类型丰富度等方面均有提升,足可见开发者们建设飞桨和文心生态的热情。 我们期待这些开发者团队持续在飞桨开源生态中迸发出光彩和力量,与飞桨一路同行,一起建设更优雅的飞桨开源社区。
+02 - 三大赛道 开源贡献
+飞桨与生态伙伴携手,发布了三大赛道共计 26 个方向的开源贡献任务,从框架开发、模型套件开发、论文复现、硬件部署到产业应用任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
+开源贡献个人挑战赛
+发布 124 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,120 个任务完成认领,96 个任务提交作品,85 个任务顺利完成,完成率 70% ,感谢各位开发者的积极参与,致敬每一个开源贡献!
+在第五期飞桨黑客松个人挑战赛中,开发者们码力全开,共计为飞桨新增 50+ API,增加 6 组共计 120+ API 转换规则,15 个 PHI 算子迁移、4 个分布式切分推导规则和 3 个转换函数,完成 9 篇 AI4S 领域论文代码复现,为大模型套件 PaddleMIX、PaddleNLP 及计算机视觉套件 PaddleSeg、PaddleClas、PaddleDetection 新增 10 个重要模型或新功能,为全套件模型接入动转静训练功能,为飞桨开源社区伙伴 OpenVINO™、Arm、InfiniTensor 新增 12 个新功能。
+
+注:部分任务还有细节需要沟通,暂未完成 PR 合入,请锁定任务的开发者尽快完成 PR 合入哦~
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
+大模型应用与创意赛
+作为飞桨星河社区五周年预热活动,共发布趣味创意与生产力工具 2 个方向的任务,鼓励开发者发挥想象力和创新精神,构思基于文心大模型的创意方案,开发创新应用,从技术创新到应用实践,共有 37 名开发者产出基于 EB SDK 的应用 60+ 个,作品种类多样,涵盖多领域 ,欢迎大家进入飞桨星河社区应用中心体验。
+
+趣味创意赛道一等奖作品:AI 数字人 | 数字诗人&数字发言人&数字人聊天
+生产力工具赛道一等奖作品:【Hackathon 5th】基于文心一言的日报系统
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
+飞桨护航计划集训营
+发布 18 个框架与套件开发项目,1 对 1 带教形式,完成 18 名学员招募,共计提交 4 期周报,组织 5 期技术分享会,9 名学员进行技术分享,15 名学员通过考核。这是飞桨开源社区首次 Code Camp 形式的开源活动,所有学习笔记与周报记录留存在开源项目 PFCCLab/Camp 中,欢迎大家围观交流 。
+
+集训营开源项目地址:https://github.com/PFCCLab/Camp
+
+本期飞桨护航计划集训营开发项目内容硬核,既包括自动微分、新 IR Pass、自动混合精度、组合机制前反向统一、量化推理、算子类型扩展到复数、分布式能力建设与架构升级等核心组件开发工作,还有科学计算领域拓展专项、套件压缩能力建设、多模态大模型全流程建设等重要套件能力建设工作,营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了研发经理的肯定,3 名同学获得百度正式实习生 Offer。
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
+03 - 飞桨黑客松完成榜单
+2023 PaddlePaddle Hackathon 飞桨黑客马拉松第五期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方,OpenVINO™、华为、海光、Arm、高通、Zilliz、开放麒麟社区等共同出品,以线上认领任务的形式进行。 本次共有三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营。根据开发难度分为基础任务和进阶任务,为大家提供丰富的深度学习开发体验。对飞桨黑客松第五期公示榜单如有异议,请于 2023 年 12 月 25 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 12 月 26 日前对您的异议进行复核反馈。
+
+
+
+恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
+04 - 新的身份等你点亮
+在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
+
+关于 PFCC
+PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到 ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
+
+加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
+戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
+原文链接:https://mp.weixin.qq.com/s/Yjvwj8br84sPard1lLoNOQ
+]]>
+
+ -
+
+ https://pfcc.blog/posts/zheng-story
+ https://pfcc.blog/posts/zheng-story
+ Sat, 23 Dec 2023 00:00:00 GMT
+ 集百家之阴阳,合一家之糟粕。好消息!好消息!自称 Paddle 社区“最想当 PM 的程序员” 、“Paddle 首席阴阳家”—— Zheng-bicheng,闪亮登场 🥳🎉🎉🎉。你想掌握最前沿的阴阳技巧么?你想成为和他一样优秀的开发者吗?你想和他一样眼神 👀 中透露着睿智的光芒,小脑袋瓜里装满各种各样的知识么?那就快来看看这篇博客吧!🌹
+
+
+
+一、个人名片
+
+
+
+
+ 网络上躁皮不用多说,臊皮领域涉及抖音、微博、小红书、贴吧、知乎、B 站等多个社交软件。你问我躁皮能力有多强,我得问问你懂不懂活了 23 年,吧龄有 13.4 年的含金量(如下图)。人家小学玩泥巴,我的小学玩贴吧,抽象要从小培养。
+
+ 我涉及的游戏领域的主要是 Steam 上的 RPG 游戏和 Switch 上的战旗游戏。我的游戏方式讲究一个另辟蹊径,例如玩神界原罪的时候,大多数人都忙着通主线,我主打一个小偷玩法,所到之处能偷的东西全给我偷光了。与之相反的是,我在游戏里大偷四方,现实里却被称为“电瓶侠”。截止至目前为止,已经被偷了 20 颗电瓶,快说谢谢电瓶侠 😭。
+
+ 顺便有没有大佬带我玩《双人成行》的,一缺一现在~
+
+
+
+
+
+ 郑师傅吧龄
+
+
+
+郑师傅注:提一嘴,我玩了 13.4 年贴吧,臊皮能力不足梦师傅十分之一,鬼知道这姐妹经历了啥!
+
+
+编者注✍️:提到的梦师傅(@Ligoml )是我们飞桨社区非常优秀的美女产品经理 ❤️!!
+
+二、采访内容
+
+
+先介绍一下自己吧,郑师傅!
+郑师傅: 各位大佬好,我是郑必城(@Zheng-Bicheng )🐶🐶,开源社区的菜鸟一枚,毕业于普普通通的闽江学院。
+
+
+大学时你的专业是人工智能,为什么当时选择这个专业?
+郑师傅: 其实我最开始学的是电子信息与工程,无奈于电路天赋极其有限,通宵 4 个晚上做了 13 块板子才搞出一个 5 倍放大电路,与此同时身边的资源大多都开始向 AI 转型,于是随大流转专业到了比较热门的人工智能专业。
+
+
+在大学的四年,你学习了些什么技术?又是怎么精进你的技术的呢?
+郑师傅: 鉴于闽江学院给我画了 4 年大饼,迟迟升不上本一,我仅代表个人将其本降专,将其简称“闽带”。在闽带的 4 年生活里,承蒙老师关爱,我得以同时加入了软件和硬件的实验室。我的两位指导老师又刚好都是系主任,这就意味着我能比较自由的使用各种电子元器件以及超算,这让我在学习上有了极大的探索空间。软硬都有所了解后,技术栈也从常见的后端研发慢慢转成了嵌入式部署。
+
+
+听说郑师傅现在在导师公司底下工作,是在哪里工作呢?具体工作是关于哪方面的?
+郑师傅: 目前我在福州凌智电子工作,公司业务主要是仪器仪表(高速信号采集)以及各种 Sensor 的开发。工作内容就比较杂了,小公司没有产品,人手也不足,因此一个对外的产品,我的工作内容覆盖了软件端产品设计,研发,测试三个环节。我在公司主要负责的业务是高速采集卡的上位机,各种模块的对外 SDK 开发以及 AI 边缘端计算项目后端框架开发。
+
+
+作为一个 01 年的小社畜,平时工作忙么?加班多么 😂😂?
+郑师傅: 忙的时候忙,不忙的时候不忙。加班多的时候多,加班不多的时候少。
+
+编者注✍️:郑师傅是会总结的!!🤭
+
+
+
+你对 Paddle 社区的理解是什么样的?你在 Paddle 社区,做过最有影响力的项目是什么?
+郑师傅: Paddle 社区给我的感觉就是包容性强。
+从实力上,不管你的实力是强是弱,在社区里都有属于你的位置,各种任务任你挑,研发大哥人也都很好,即使很忙也愿意抽时间出来和你讲思路讲方法。
+在 Paddle 社区里,我比较活跃的项目其实就是 FastDeploy 。FD 的定位是端到端的部署框架,希望让即使是 AI 初学者的用户也能用极少的代码量跑通模型部署。我主要负责的部分都是和移植相关,涉及到的部分包括 Rockchip 推理后端的移植,几个社区 CV 模型的移植,类似人脸对齐这种后端算法的移植。
+要是提到影响力,FastDeploy 的定位其实就比较尴尬了。由于适配了非常多的底层推理框架,FD 内部为了兼容性是牺牲了一部分的性能的。从公司的角度看,对于小公司来说,用 FD 基本上会做一些魔改,来达到最优的性能(这也是后期我维护 FD 次数慢慢变少的原因,在我们公司内部,我基于 FD 做了大量的魔改,已经和现在的 FD 主分支几乎不兼容了);大公司有自己的高水平研发工程师,也不会去用 FD,因此 FD 的使用场景还是有一定的局限性的。
+从用户的角度看,对于学生这类 AI 部署水平较差的用户来说,FD 是相当友好的,毕竟几行代码就能搞定深度学习部署,用来做毕业设计再合适不过了;对于编程水平较高的研发工程师来说,FD 更多的还是作为一个项目推理框架的模版代码,各个开发者可以在这个模版上快速定制自己所需要的代码。
+
+
+可以和我们讲讲你的开源故事么?期待 😚 期待~~~~
+郑师傅: 我第一次接触到 Paddle 开源社区是在 2022 年 Q3 的黑客松第三期活动。
+刚开始参加开源时,第一个带我的师傅是 001。谁能想到晚上 11 点,001 这个内向萌骚怪搁那滔滔不绝的教我怎么同步远程仓库代码,我搁那嘎嘎猛困,他搁那嘎嘎猛教。没办法,不能辜负大佬的一番好意,我只能被迫学习。学着学着,把自己的知识用到了开源里,还真一不小心就做出了黑客松的两道题,从此入门了开源。
+
+编者注✍️:黑客松是百度飞桨举办的深度学习领域编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
+
+PPDE(Paddle Paddle Developers Experts):飞桨开发者技术专家。
+
+PFCC(Paddle Framework Contributor Club):飞桨框架贡献者俱乐部。
+
+刚开始做适配时,RK3588 的工具链还不完善,我苦于没办法和 RK 官方的人沟通,效率一直很低。但青姐这人主打就是一个给力,我真敢提代码,她真敢拉群,直接给我这个开源菜鸟拉到了 RK 的适配群里和 RK 的研发工程师真人 1V1 大战。有了 RK 工程师的支持,项目也就慢慢开始推进了。
+在持续将近一年的贡献后,不知不觉的,我这么个一心向钱看齐的人莫名其妙的就成为了仓库的维护者,参与起了和 RK 相关的维护工作。在青姐的支持下,我甚至还参加了 RK 的开发者大会。要知道,在前一年,我还是坐在讲台下听着 RK 工作人员演讲的开发者,第二年就借着 Paddle 的风到 RK 开发者大会上给讲台下的嘉宾讲 FastDeploy 了。
+
+
+
+
+ 上图为 RK 开发者大会的合照
+
+
+随后就是参加了新的黑客松,认识了 Arm 的 Liliya 姐。Liliya 姐在 Arm 领域给了我很多的帮助,在她的支持下,我了解了很多 Arm 相关的最新技术,也参与到了 Paddle 模型 -> Arm 虚拟硬件部署链路的移植工作中。在她的帮助下,我移植了 Paddle 的多个模型到 Arm 虚拟硬件上,然后就是参加了 Arm 虚拟硬件的小发布会,一不小心成为了 Arm Ambassadors,顺便蹭了她一顿饭。
+
+
+
+
+ 上图为郑师傅和上文的 Liliya 姐
+
+
+
+
+郑师傅做开源这么久了,现在开源对你来说是一个什么感觉?你觉得你热爱它么?那又是怎么体现你的这种感觉的?
+郑师傅: 咱主打一个真实。读书的时候,开源是我装逼的方式;工作以后,开源对我来说是生活的调剂品,在心有余力的时候是我放松时的选项之一。我很爱开源,开源既让我拿到了很多 Title,也让我学到很多东西,面子里子都赚到了。
+
+
+你自诩为“Paddle 社区阴阳怪气第一人”(和阿梦实力相当),那你是如何把阴阳怪气这种 🥰 贱贱的说话方式使用的如此炉火纯青的?可以教教我们么?
+郑师傅: 我这么正直的人怎么会阴阳怪气呢?比起阴阳怪气和口嗨,李梦柳和神可比我强多了。至于练习阴阳怪气嘛,多亏了啵啵姐。世上本没有阴阳师,阴阳啵啵姐多了,也便成了阴阳师。
+
+编者注✍️:啵啵姐是指飞桨社区优优优秀的美女运营花花(@Tulip-hua )。
+
+
+梦师傅本人注✍️:郑必城根本不会阴阳怪气!
+
+
+
+你口中的“神”是谁? 为什么称他为神呢?
+郑师傅: 神是衍哥,第一次把衍哥叫做神是和梦师傅打嘴炮的时候没过脑子说出来的话。但是后面了解到神的事迹以后,衍哥我只能说比神还神。
+
+
+你有谈到想成为一位 PM,那可以和我们简单分享一下你的职业规划么?或者说:你想未来一年在职业上取得什么进展?🆕🆕
+郑师傅: 我职业规划基本上是:先当研发广泛学习,再当产品经理输出价值!
+在我的认知里 PM 的知识面首先是广,然后是深。带一个产品,我得懂需求;和研发吵架,我得懂代码大致的底层逻辑;对外输出,我得懂基本商业逻辑;产品的迭代,我得懂客户的工作流程。
+对应我的工作,看上去干的事情和 AI 没啥关系,实际上是 AI 落地的一整套的流程。我的工作涵盖了数据采集,数据标注和数据清洗,模型调参和训练以及模型部署。这几乎覆盖了边缘端 AI 部署的全场景。而其他知识,一般靠和大佬沟通,取长补短搞定。在工作以后,我定期的会去拜访一些上游链路的大佬,如某开发板的硬件负责人,某芯片厂商的事务负责人以及某产商的视觉算法负责人。和大佬沟通是我拓展视野和补充知识面的手段之一,毕竟人能坐到那个位置上,对某个方向一定是有自己的理解的。
+前段时间和百度某个产品已经聊过了。某法师说:"真正要做的事,连神明都不要说,不要告诉别人你的计划,让他们看结果。”对于我要做的事,一般是不立 Flag 的,这里就埋个伏笔。
+
+
+相信你也接触到很多飞桨以及其他的 PM,哪位 PM 给你留下来最深的印象?哪位 PM 是你未来职业的模板?
+郑师傅: Paddle 的 PM 大佬们其实都很有特色也都给我留下挺深的印象。比如梦柳不但能力很强,嘴炮也很厉害,看上去很渣,其实比谁都纯;雷青姐经常工作到深夜,非常努力;军哥专业素养很高,表面上话不多像是个糙汉子,接触了以后让我感觉居然像个小文青;衍神表面看上去吊儿郎当的,实际上很强,对各种问题看的很透彻;孙哥表面看上去很能嘴,其实我觉得还有点内敛;佳维姐姐人非常漂亮,普通话也超级标准;凯哥居然能用英语和阿三交流的好好的。
+谁是我职业模版的话,我感觉我这 🐶 脑能把大家的优点全学会是不太可能的,但是都学个 10% 当个及格的 PM 还是有可能的
+
+
+
+
+ 左图为参观百度时小度拍的合照,右图为郑师傅最喜欢的喵喵喵雪糕
+
+
+
+
+最后,你想对和你一样努力 💪 开源的开源者说些什么呢?
+郑师傅: 和张师傅(@liyulingyue )这群开源奋斗逼相比,我实在太摸鱼了。希望大家都能向张师傅学习,在开源中贡献自己的力量。
+
+
+三、从你的全世界路过——郑师傅篇
+前几篇博客上都有板块谈大家对被采访者的印象,但是今天郑师傅想来个板块单独谈谈他对社区大佬的印象 🤩🤩🤩。由于在 Paddle 社区,大佬实在太多了,郑师傅就抽一部分大佬讲讲他对他们的印象。
+
+我对 001 的第一印象就是代码能力很强,但是有点闷骚。作为带我入门的大佬,肯定是要感谢 001 的,因为 001 人实在太好了 ❤️,不光带我开源还带我“开原”,属于是工作生活两不误了。
+
+应晟大佬是个很帅的糙汉子,刚认识他的时候给我的第一感觉就是相当的程序员,但是他参加直播的时候打理了一下,卧槽,嘎嘎帅啊。在我第一次参加黑客松的时候他给了我非常多的帮助,帮我积极协调了项目的各种进度内容,也让我了解到了一些职场相关的内容。
+
+原谅我管百度唯一指定童工叫姐。刚开始认识她的时候,她说别人叫她“芋泥妹” 👧,我想着我一 00 后也这么叫不是显得我太老了?所以叫她“啵啵姐”,后来发现大家都挺爱这么叫的。这位更是重量级,又能给我开源资源又能带我玩。世界可以没有耶路撒冷,但开源不能没有啵啵姐。
+
+雷青大佬在我参与开源的初期给了我很大很大的帮助,没有她做为桥梁我就没办法认识到那么多的百度研发工程师。雷青姐人也超级好,还记得她来福州的时候我请她吃饭,结账的时候她觉得不能让我一学生请客,把我手机藏起来买单,这才是神仙姐姐 🙍🏻♀️ 啊。算起来已经欠她两顿饭了,有机会一定要还了。
+
+蒋大佬的代码我只能说,牛逼,真他妈牛逼。人跟人的差距真大,一个在我看来很难的问题,他总是能一下子就找到关键点。在我开源生涯中他是各种指点,牛逼,真的牛逼。说起来还画了好多的饼给这位大佬,但是这些饼的工作量都有点大,最后大部分都慢慢不了了之了,现在正在慢慢捡起来做。
+
+延君大佬人很热情,帮我审核了很多的代码,他不但在 coding 上给了我很大的帮助,还对我的职业生涯规划起了很大作用,在我两难的时候给了我很正确的建议。
+
+这位也是重量级,Paddle 除了神以外的嘴炮王。她在我这 Title 太多,包括但不限于我的 Github 头像拥有者、最帅猫拥有者、最肥猫拥有者、最傻猫拥有者。
+
+一见如故,和我一样惨。我是扑克牌里的小王那孙哥就是扑克牌里的大王 🤡。
+
+很感谢军哥帮忙推动了 Paddle 框架在 Arm 上的 whl 包的适配,没有军哥,Arm 虚拟硬件在百度云上的部署就没办法推动了,就是啥时候能上线 Paddle 官网就更好了。
+
+就一个字,神!
+四、郑师傅的名言集
+
+
+
+ 上图为郑师傅经典语录集
+
+
+]]>
+ 集百家之阴阳,合一家之糟粕。好消息!好消息!自称 Paddle 社区“最想当 PM 的程序员” 、“Paddle 首席阴阳家”—— Zheng-bicheng,闪亮登场 🥳🎉🎉🎉。你想掌握最前沿的阴阳技巧么?你想成为和他一样优秀的开发者吗?你想和他一样眼神 👀 中透露着睿智的光芒,小脑袋瓜里装满各种各样的知识么?那就快来看看这篇博客吧!🌹
+
+
+
+一、个人名片
+
+
+
+
+ 网络上躁皮不用多说,臊皮领域涉及抖音、微博、小红书、贴吧、知乎、B 站等多个社交软件。你问我躁皮能力有多强,我得问问你懂不懂活了 23 年,吧龄有 13.4 年的含金量(如下图)。人家小学玩泥巴,我的小学玩贴吧,抽象要从小培养。
+
+ 我涉及的游戏领域的主要是 Steam 上的 RPG 游戏和 Switch 上的战旗游戏。我的游戏方式讲究一个另辟蹊径,例如玩神界原罪的时候,大多数人都忙着通主线,我主打一个小偷玩法,所到之处能偷的东西全给我偷光了。与之相反的是,我在游戏里大偷四方,现实里却被称为“电瓶侠”。截止至目前为止,已经被偷了 20 颗电瓶,快说谢谢电瓶侠 😭。
+
+ 顺便有没有大佬带我玩《双人成行》的,一缺一现在~
+
+
+
+
+
+ 郑师傅吧龄
+
+
+
+郑师傅注:提一嘴,我玩了 13.4 年贴吧,臊皮能力不足梦师傅十分之一,鬼知道这姐妹经历了啥!
+
+
+编者注✍️:提到的梦师傅(@Ligoml )是我们飞桨社区非常优秀的美女产品经理 ❤️!!
+
+二、采访内容
+
+
+先介绍一下自己吧,郑师傅!
+郑师傅: 各位大佬好,我是郑必城(@Zheng-Bicheng )🐶🐶,开源社区的菜鸟一枚,毕业于普普通通的闽江学院。
+
+
+大学时你的专业是人工智能,为什么当时选择这个专业?
+郑师傅: 其实我最开始学的是电子信息与工程,无奈于电路天赋极其有限,通宵 4 个晚上做了 13 块板子才搞出一个 5 倍放大电路,与此同时身边的资源大多都开始向 AI 转型,于是随大流转专业到了比较热门的人工智能专业。
+
+
+在大学的四年,你学习了些什么技术?又是怎么精进你的技术的呢?
+郑师傅: 鉴于闽江学院给我画了 4 年大饼,迟迟升不上本一,我仅代表个人将其本降专,将其简称“闽带”。在闽带的 4 年生活里,承蒙老师关爱,我得以同时加入了软件和硬件的实验室。我的两位指导老师又刚好都是系主任,这就意味着我能比较自由的使用各种电子元器件以及超算,这让我在学习上有了极大的探索空间。软硬都有所了解后,技术栈也从常见的后端研发慢慢转成了嵌入式部署。
+
+
+听说郑师傅现在在导师公司底下工作,是在哪里工作呢?具体工作是关于哪方面的?
+郑师傅: 目前我在福州凌智电子工作,公司业务主要是仪器仪表(高速信号采集)以及各种 Sensor 的开发。工作内容就比较杂了,小公司没有产品,人手也不足,因此一个对外的产品,我的工作内容覆盖了软件端产品设计,研发,测试三个环节。我在公司主要负责的业务是高速采集卡的上位机,各种模块的对外 SDK 开发以及 AI 边缘端计算项目后端框架开发。
+
+
+作为一个 01 年的小社畜,平时工作忙么?加班多么 😂😂?
+郑师傅: 忙的时候忙,不忙的时候不忙。加班多的时候多,加班不多的时候少。
+
+编者注✍️:郑师傅是会总结的!!🤭
+
+
+
+你对 Paddle 社区的理解是什么样的?你在 Paddle 社区,做过最有影响力的项目是什么?
+郑师傅: Paddle 社区给我的感觉就是包容性强。
+从实力上,不管你的实力是强是弱,在社区里都有属于你的位置,各种任务任你挑,研发大哥人也都很好,即使很忙也愿意抽时间出来和你讲思路讲方法。
+在 Paddle 社区里,我比较活跃的项目其实就是 FastDeploy 。FD 的定位是端到端的部署框架,希望让即使是 AI 初学者的用户也能用极少的代码量跑通模型部署。我主要负责的部分都是和移植相关,涉及到的部分包括 Rockchip 推理后端的移植,几个社区 CV 模型的移植,类似人脸对齐这种后端算法的移植。
+要是提到影响力,FastDeploy 的定位其实就比较尴尬了。由于适配了非常多的底层推理框架,FD 内部为了兼容性是牺牲了一部分的性能的。从公司的角度看,对于小公司来说,用 FD 基本上会做一些魔改,来达到最优的性能(这也是后期我维护 FD 次数慢慢变少的原因,在我们公司内部,我基于 FD 做了大量的魔改,已经和现在的 FD 主分支几乎不兼容了);大公司有自己的高水平研发工程师,也不会去用 FD,因此 FD 的使用场景还是有一定的局限性的。
+从用户的角度看,对于学生这类 AI 部署水平较差的用户来说,FD 是相当友好的,毕竟几行代码就能搞定深度学习部署,用来做毕业设计再合适不过了;对于编程水平较高的研发工程师来说,FD 更多的还是作为一个项目推理框架的模版代码,各个开发者可以在这个模版上快速定制自己所需要的代码。
+
+
+可以和我们讲讲你的开源故事么?期待 😚 期待~~~~
+郑师傅: 我第一次接触到 Paddle 开源社区是在 2022 年 Q3 的黑客松第三期活动。
+刚开始参加开源时,第一个带我的师傅是 001。谁能想到晚上 11 点,001 这个内向萌骚怪搁那滔滔不绝的教我怎么同步远程仓库代码,我搁那嘎嘎猛困,他搁那嘎嘎猛教。没办法,不能辜负大佬的一番好意,我只能被迫学习。学着学着,把自己的知识用到了开源里,还真一不小心就做出了黑客松的两道题,从此入门了开源。
+
+编者注✍️:黑客松是百度飞桨举办的深度学习领域编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
+
+PPDE(Paddle Paddle Developers Experts):飞桨开发者技术专家。
+
+PFCC(Paddle Framework Contributor Club):飞桨框架贡献者俱乐部。
+
+刚开始做适配时,RK3588 的工具链还不完善,我苦于没办法和 RK 官方的人沟通,效率一直很低。但青姐这人主打就是一个给力,我真敢提代码,她真敢拉群,直接给我这个开源菜鸟拉到了 RK 的适配群里和 RK 的研发工程师真人 1V1 大战。有了 RK 工程师的支持,项目也就慢慢开始推进了。
+在持续将近一年的贡献后,不知不觉的,我这么个一心向钱看齐的人莫名其妙的就成为了仓库的维护者,参与起了和 RK 相关的维护工作。在青姐的支持下,我甚至还参加了 RK 的开发者大会。要知道,在前一年,我还是坐在讲台下听着 RK 工作人员演讲的开发者,第二年就借着 Paddle 的风到 RK 开发者大会上给讲台下的嘉宾讲 FastDeploy 了。
+
+
+
+
+ 上图为 RK 开发者大会的合照
+
+
+随后就是参加了新的黑客松,认识了 Arm 的 Liliya 姐。Liliya 姐在 Arm 领域给了我很多的帮助,在她的支持下,我了解了很多 Arm 相关的最新技术,也参与到了 Paddle 模型 -> Arm 虚拟硬件部署链路的移植工作中。在她的帮助下,我移植了 Paddle 的多个模型到 Arm 虚拟硬件上,然后就是参加了 Arm 虚拟硬件的小发布会,一不小心成为了 Arm Ambassadors,顺便蹭了她一顿饭。
+
+
+
+
+ 上图为郑师傅和上文的 Liliya 姐
+
+
+
+
+郑师傅做开源这么久了,现在开源对你来说是一个什么感觉?你觉得你热爱它么?那又是怎么体现你的这种感觉的?
+郑师傅: 咱主打一个真实。读书的时候,开源是我装逼的方式;工作以后,开源对我来说是生活的调剂品,在心有余力的时候是我放松时的选项之一。我很爱开源,开源既让我拿到了很多 Title,也让我学到很多东西,面子里子都赚到了。
+
+
+你自诩为“Paddle 社区阴阳怪气第一人”(和阿梦实力相当),那你是如何把阴阳怪气这种 🥰 贱贱的说话方式使用的如此炉火纯青的?可以教教我们么?
+郑师傅: 我这么正直的人怎么会阴阳怪气呢?比起阴阳怪气和口嗨,李梦柳和神可比我强多了。至于练习阴阳怪气嘛,多亏了啵啵姐。世上本没有阴阳师,阴阳啵啵姐多了,也便成了阴阳师。
+
+编者注✍️:啵啵姐是指飞桨社区优优优秀的美女运营花花(@Tulip-hua )。
+
+
+梦师傅本人注✍️:郑必城根本不会阴阳怪气!
+
+
+
+你口中的“神”是谁? 为什么称他为神呢?
+郑师傅: 神是衍哥,第一次把衍哥叫做神是和梦师傅打嘴炮的时候没过脑子说出来的话。但是后面了解到神的事迹以后,衍哥我只能说比神还神。
+
+
+你有谈到想成为一位 PM,那可以和我们简单分享一下你的职业规划么?或者说:你想未来一年在职业上取得什么进展?🆕🆕
+郑师傅: 我职业规划基本上是:先当研发广泛学习,再当产品经理输出价值!
+在我的认知里 PM 的知识面首先是广,然后是深。带一个产品,我得懂需求;和研发吵架,我得懂代码大致的底层逻辑;对外输出,我得懂基本商业逻辑;产品的迭代,我得懂客户的工作流程。
+对应我的工作,看上去干的事情和 AI 没啥关系,实际上是 AI 落地的一整套的流程。我的工作涵盖了数据采集,数据标注和数据清洗,模型调参和训练以及模型部署。这几乎覆盖了边缘端 AI 部署的全场景。而其他知识,一般靠和大佬沟通,取长补短搞定。在工作以后,我定期的会去拜访一些上游链路的大佬,如某开发板的硬件负责人,某芯片厂商的事务负责人以及某产商的视觉算法负责人。和大佬沟通是我拓展视野和补充知识面的手段之一,毕竟人能坐到那个位置上,对某个方向一定是有自己的理解的。
+前段时间和百度某个产品已经聊过了。某法师说:"真正要做的事,连神明都不要说,不要告诉别人你的计划,让他们看结果。”对于我要做的事,一般是不立 Flag 的,这里就埋个伏笔。
+
+
+相信你也接触到很多飞桨以及其他的 PM,哪位 PM 给你留下来最深的印象?哪位 PM 是你未来职业的模板?
+郑师傅: Paddle 的 PM 大佬们其实都很有特色也都给我留下挺深的印象。比如梦柳不但能力很强,嘴炮也很厉害,看上去很渣,其实比谁都纯;雷青姐经常工作到深夜,非常努力;军哥专业素养很高,表面上话不多像是个糙汉子,接触了以后让我感觉居然像个小文青;衍神表面看上去吊儿郎当的,实际上很强,对各种问题看的很透彻;孙哥表面看上去很能嘴,其实我觉得还有点内敛;佳维姐姐人非常漂亮,普通话也超级标准;凯哥居然能用英语和阿三交流的好好的。
+谁是我职业模版的话,我感觉我这 🐶 脑能把大家的优点全学会是不太可能的,但是都学个 10% 当个及格的 PM 还是有可能的
+
+
+
+
+ 左图为参观百度时小度拍的合照,右图为郑师傅最喜欢的喵喵喵雪糕
+
+
+
+
+最后,你想对和你一样努力 💪 开源的开源者说些什么呢?
+郑师傅: 和张师傅(@liyulingyue )这群开源奋斗逼相比,我实在太摸鱼了。希望大家都能向张师傅学习,在开源中贡献自己的力量。
+
+
+三、从你的全世界路过——郑师傅篇
+前几篇博客上都有板块谈大家对被采访者的印象,但是今天郑师傅想来个板块单独谈谈他对社区大佬的印象 🤩🤩🤩。由于在 Paddle 社区,大佬实在太多了,郑师傅就抽一部分大佬讲讲他对他们的印象。
+
+我对 001 的第一印象就是代码能力很强,但是有点闷骚。作为带我入门的大佬,肯定是要感谢 001 的,因为 001 人实在太好了 ❤️,不光带我开源还带我“开原”,属于是工作生活两不误了。
+
+应晟大佬是个很帅的糙汉子,刚认识他的时候给我的第一感觉就是相当的程序员,但是他参加直播的时候打理了一下,卧槽,嘎嘎帅啊。在我第一次参加黑客松的时候他给了我非常多的帮助,帮我积极协调了项目的各种进度内容,也让我了解到了一些职场相关的内容。
+
+原谅我管百度唯一指定童工叫姐。刚开始认识她的时候,她说别人叫她“芋泥妹” 👧,我想着我一 00 后也这么叫不是显得我太老了?所以叫她“啵啵姐”,后来发现大家都挺爱这么叫的。这位更是重量级,又能给我开源资源又能带我玩。世界可以没有耶路撒冷,但开源不能没有啵啵姐。
+
+雷青大佬在我参与开源的初期给了我很大很大的帮助,没有她做为桥梁我就没办法认识到那么多的百度研发工程师。雷青姐人也超级好,还记得她来福州的时候我请她吃饭,结账的时候她觉得不能让我一学生请客,把我手机藏起来买单,这才是神仙姐姐 🙍🏻♀️ 啊。算起来已经欠她两顿饭了,有机会一定要还了。
+
+蒋大佬的代码我只能说,牛逼,真他妈牛逼。人跟人的差距真大,一个在我看来很难的问题,他总是能一下子就找到关键点。在我开源生涯中他是各种指点,牛逼,真的牛逼。说起来还画了好多的饼给这位大佬,但是这些饼的工作量都有点大,最后大部分都慢慢不了了之了,现在正在慢慢捡起来做。
+
+延君大佬人很热情,帮我审核了很多的代码,他不但在 coding 上给了我很大的帮助,还对我的职业生涯规划起了很大作用,在我两难的时候给了我很正确的建议。
+
+这位也是重量级,Paddle 除了神以外的嘴炮王。她在我这 Title 太多,包括但不限于我的 Github 头像拥有者、最帅猫拥有者、最肥猫拥有者、最傻猫拥有者。
+
+一见如故,和我一样惨。我是扑克牌里的小王那孙哥就是扑克牌里的大王 🤡。
+
+很感谢军哥帮忙推动了 Paddle 框架在 Arm 上的 whl 包的适配,没有军哥,Arm 虚拟硬件在百度云上的部署就没办法推动了,就是啥时候能上线 Paddle 官网就更好了。
+
+就一个字,神!
+四、郑师傅的名言集
+
+
+
+ 上图为郑师傅经典语录集
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/loaf-sharing
+ https://pfcc.blog/posts/loaf-sharing
+ Mon, 18 Dec 2023 00:00:00 GMT
+ 本篇博客文章的内容,来源于作者在「第八届中国开源年会」上分享的一次主题为 「如何在开源社区摸 🐟」 的闪电演讲,以下的部分为演讲的具体内容。
+
+
+01-个人简介
+大家好,今天我想分享的主题是 「如何在开源社区摸 🐟」 。在演讲开始前先自我介绍一下,我叫孙钟恺,社区里的开发者都称呼我为 孙师傅 ,下图为我的 Github ID、头像和贡献热力图。
+
+从上面的职业标签可以看出,我是入职百度一年半(0.5🐔年)、目前负责 Paddle 开源社区以及官网文档的飞桨校招产品经理。作为一名新人,我也没有什么特长,唯一擅长的就是摸 🐟 吧~所以在这里也和大家分享一下我的摸 🐟 经验。
+02-摸 🐟 经验
+我的摸鱼经验其实从这幅图就可以说明白,就是工作上三思而后行 :
+
+第一,这工作能不能不做 ;
+第二,这工作能不能晚点做 ;
+第三,这工作能不能交给别人做 。
+
+
+但是,理想是丰满的,现实是骨感的。老板的回复也很直接:
+
+第一,你能不能滚蛋;
+第二,你能不能早点滚蛋。
+
+不过对于第三点呢,老板似乎不太抗拒(反正不是交给他做🐶)。于是我就在思考,也许可以通过“把工作转交给别人”的方式,来简单摸个 🐟。
+那么问题来了,具体交给谁做呢?我看向了我的同事和研发大爷们 。经过几百回的试探和心理博弈后,研发大爷们均以“人力不够”、“优先级低”等借口来拒绝我。而且咱们研发工作日做牛做马,一到周末直接原地消失了,一看 GitHub 热力图,周六、周日都是空的。
+
+补充:不过这也说明百度还算是一个遵守劳动法的公司,周末都是双休的~
+
+然后,我把我的目光转向了社区开发者们 。哎,发现他们的开源热情似乎还是很高涨的,有的开发者甚至把开源视为人生价值(“工作就是图一乐”、“人生价值实现还得靠开源”)我又翻了翻一些社区开发者的 GitHub 热力图,一看吓一跳 😮,绿油油的一片,7*24 小时全职开源。
+
+至此之后呢,我就把 “把活儿交给社区开发者” ,作为我摸 🐟 的核心思想。
+
+但是,怎么“把活儿交给社区开发者”,也是需要讲点基本法的,所以我总结了两条方法~
+03-「把活儿交给社区开发者」初级版
+首先,我先介绍一下初级版,即把一些 明确的轻量级任务 交给社区开发者做。
+怎么理解呢?其实很多问题已经由社区开发者和内部研发进行多轮讨论了,并经过 任务拆解 后,形成了可以直接去上手做的轻量级任务。这些轻量级任务最终会公布到社区,并以 tracking issue 的形式进行发布和追踪,下图右方就是部分的这类任务。
+
+因为这些任务相对简单、好上手,社区开发者反馈其实非常好,有些人可能周末会去做,有些人甚至上班摸鱼的时候也在做。
+发布这类任务的优点 在于——因为任务比较简单,“啪”的一下做的很快,完成率又特别高。更重要的是,开发者也会很愉悦,比如花一个小时提一个 PR 上来,就能把任务做完了,很容易带来满足感~(而且也会有小礼品)
+不过这类任务也有一些缺点 ——这些任务需要花精力进行任务的拆解、详细的描述,甚至还可能需要指导和大量的 Review。所以这 🐟 虽然摸了,但只摸了一半。
+
+03-「把活儿交给社区开发者」终极摸鱼版
+基于上述,我之后又总结了终极摸鱼版的方法,就是 把问题交由社区开发者来主导 。
+怎么理解呢?就是我们飞桨只提供大概的题目和方向,由社区开发者根据问题 自行进行拆解 ,然后在我们的指导下开展任务。比较典型的是 《将 xdoctest 引入飞桨工作流 》 ,这个题目是由社区开发者顺师傅(@megemini )来完成的。
+
+xdoctest 是一个文档示例代码的检查工具。
+
+从下面右半边可以看到,顺师傅按自己的理解对任务进行拆解,分为不同的阶段,并有条不紊的完成。并且还衍生出了一些批量的社区任务,比如全量的修改了飞桨一千多个 API 的示例代码。这是一个人完成不了的,需要号召更多的社区开发者来参与,因此这个项目也极大调动了整个社区的氛围和活力。
+
+所以说,其实把问题交给社区开发者主导,会有很多积极的方面~一方面能够帮我们分担了很大的研发精力(帮我们摸 🐟),另一方面也会不经意间对整个社区有正向的影响力。
+04-摸 🐟 的前提条件
+最后也提一下,其实摸鱼也有很多前提条件,需要有良好的社区氛围 、丝滑的社区交流 、研发的大力支持 和运营的宣传推广 ...这些条件都是缺一不可的~所以虽然是摸鱼,但也需要遵循很多客观规律。
+
+]]>
+ 本篇博客文章的内容,来源于作者在「第八届中国开源年会」上分享的一次主题为 「如何在开源社区摸 🐟」 的闪电演讲,以下的部分为演讲的具体内容。
+
+
+01-个人简介
+大家好,今天我想分享的主题是 「如何在开源社区摸 🐟」 。在演讲开始前先自我介绍一下,我叫孙钟恺,社区里的开发者都称呼我为 孙师傅 ,下图为我的 Github ID、头像和贡献热力图。
+
+从上面的职业标签可以看出,我是入职百度一年半(0.5🐔年)、目前负责 Paddle 开源社区以及官网文档的飞桨校招产品经理。作为一名新人,我也没有什么特长,唯一擅长的就是摸 🐟 吧~所以在这里也和大家分享一下我的摸 🐟 经验。
+02-摸 🐟 经验
+我的摸鱼经验其实从这幅图就可以说明白,就是工作上三思而后行 :
+
+第一,这工作能不能不做 ;
+第二,这工作能不能晚点做 ;
+第三,这工作能不能交给别人做 。
+
+
+但是,理想是丰满的,现实是骨感的。老板的回复也很直接:
+
+第一,你能不能滚蛋;
+第二,你能不能早点滚蛋。
+
+不过对于第三点呢,老板似乎不太抗拒(反正不是交给他做🐶)。于是我就在思考,也许可以通过“把工作转交给别人”的方式,来简单摸个 🐟。
+那么问题来了,具体交给谁做呢?我看向了我的同事和研发大爷们 。经过几百回的试探和心理博弈后,研发大爷们均以“人力不够”、“优先级低”等借口来拒绝我。而且咱们研发工作日做牛做马,一到周末直接原地消失了,一看 GitHub 热力图,周六、周日都是空的。
+
+补充:不过这也说明百度还算是一个遵守劳动法的公司,周末都是双休的~
+
+然后,我把我的目光转向了社区开发者们 。哎,发现他们的开源热情似乎还是很高涨的,有的开发者甚至把开源视为人生价值(“工作就是图一乐”、“人生价值实现还得靠开源”)我又翻了翻一些社区开发者的 GitHub 热力图,一看吓一跳 😮,绿油油的一片,7*24 小时全职开源。
+
+至此之后呢,我就把 “把活儿交给社区开发者” ,作为我摸 🐟 的核心思想。
+
+但是,怎么“把活儿交给社区开发者”,也是需要讲点基本法的,所以我总结了两条方法~
+03-「把活儿交给社区开发者」初级版
+首先,我先介绍一下初级版,即把一些 明确的轻量级任务 交给社区开发者做。
+怎么理解呢?其实很多问题已经由社区开发者和内部研发进行多轮讨论了,并经过 任务拆解 后,形成了可以直接去上手做的轻量级任务。这些轻量级任务最终会公布到社区,并以 tracking issue 的形式进行发布和追踪,下图右方就是部分的这类任务。
+
+因为这些任务相对简单、好上手,社区开发者反馈其实非常好,有些人可能周末会去做,有些人甚至上班摸鱼的时候也在做。
+发布这类任务的优点 在于——因为任务比较简单,“啪”的一下做的很快,完成率又特别高。更重要的是,开发者也会很愉悦,比如花一个小时提一个 PR 上来,就能把任务做完了,很容易带来满足感~(而且也会有小礼品)
+不过这类任务也有一些缺点 ——这些任务需要花精力进行任务的拆解、详细的描述,甚至还可能需要指导和大量的 Review。所以这 🐟 虽然摸了,但只摸了一半。
+
+03-「把活儿交给社区开发者」终极摸鱼版
+基于上述,我之后又总结了终极摸鱼版的方法,就是 把问题交由社区开发者来主导 。
+怎么理解呢?就是我们飞桨只提供大概的题目和方向,由社区开发者根据问题 自行进行拆解 ,然后在我们的指导下开展任务。比较典型的是 《将 xdoctest 引入飞桨工作流 》 ,这个题目是由社区开发者顺师傅(@megemini )来完成的。
+
+xdoctest 是一个文档示例代码的检查工具。
+
+从下面右半边可以看到,顺师傅按自己的理解对任务进行拆解,分为不同的阶段,并有条不紊的完成。并且还衍生出了一些批量的社区任务,比如全量的修改了飞桨一千多个 API 的示例代码。这是一个人完成不了的,需要号召更多的社区开发者来参与,因此这个项目也极大调动了整个社区的氛围和活力。
+
+所以说,其实把问题交给社区开发者主导,会有很多积极的方面~一方面能够帮我们分担了很大的研发精力(帮我们摸 🐟),另一方面也会不经意间对整个社区有正向的影响力。
+04-摸 🐟 的前提条件
+最后也提一下,其实摸鱼也有很多前提条件,需要有良好的社区氛围 、丝滑的社区交流 、研发的大力支持 和运营的宣传推广 ...这些条件都是缺一不可的~所以虽然是摸鱼,但也需要遵循很多客观规律。
+
+
+以上是我演讲的全部内容,感谢大家的观看~
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/huanggua-story
+ https://pfcc.blog/posts/huanggua-story
+ Tue, 12 Dec 2023 00:00:00 GMT
+ 他来了,他来了,他带着满满的故事,迈着自信的步伐向我们走来了!虽然刚满 15 岁,但小小黄瓜 的开源史却已有好几年!学校趣事?开源经历?迷人帅照?成山作业?你都能在本篇博客看到!
+
+
+
+一、前言
+Berniehuang2008 (人送外号:黄瓜),是深圳一位 15 岁的初中生,同时也是 OpenTeens(全国甚至全世界第一个青少年开源社区)创始人之一。黄瓜曾贡献过开源项目 SearXNG 和 GestureX 等,是一位优秀的青少年开发者。他在 10 月加入 Paddle 社区,并且以迅雷不及掩耳之势合入 PR,成为 Paddle 社区的 contributor。现在,他正在准备参加 Paddle 黑客松,让我们一起看看他的故事吧😀~
+二、采访内容
+
+
+简单介绍一下自己吧!
+
+
+我叫黄锦源,外号黄瓜,是深圳的一个初三学生。
+
+
+
+
+现在是一名初三学生,课程学习忙么?有什么喜欢的科目没有?😁😁
+
+
+忙啊,当然忙。每天周考,从四点半考到六点,放学回家一堆卷子烦的要死。最喜欢的是数学,没有原因,就是喜欢😳。
+
+
+
+
+学校最近有什么有趣的事情可以和大家分享一下!
+
+
+emmm,有趣的事情?没啥,天天考试有啥有趣的。。。不过昨天我还骑车来着,扫了一辆小黄车就一路骑到深圳湾,14 公里,挺开心的。我们几个朋友还去烧纸,哇塞,烧数学书真解气!(黄瓜自注:我们数学课从来不用书)
+
+
+
+
+当初你是如何被编程和开源世界吸引的?是什么驱使你成为了一名青少年开发者和开源社区创始人呢?
+
+
+我是从 Scratch 学起的,一开始就感觉 Scratch 这玩意很有意思,想让他干啥他就干啥,有一种掌控世界的感觉。后来,Scratch 写了一百多个游戏之后玩无聊了,转行 Python,才发现这玩意比 Scratch 好玩 10086 倍!
+
+初一的时候,被我们学校信竞老师征召入伍,但我对竞赛类的东西不感冒,学了一年就退坑了。
+
+
+
+
+之前看你的 GitHub 主页里,有对 SearXNG 提交过 PR,这是一个怎样的项目?你在 SearXNG 项目中的具体贡献是什么?你最喜欢的部分是什么?这个经历让你有什么样的收获?
+
+
+SearXNG 是一个开源的搜索引擎,我当时对搜索引擎算法特别着迷,就找了一个,最后发现这玩意就是从 Google、Bing 上面爬数据然后整理!
+
+不过既然点进去了,索性就帮他们修个 bug 吧,结果这就成为了我第一个参与的开源项目。现在越做越深入,跟 Maintainer 已经算得上认识了 hhh
+
+
+
+编者注✍️:现在初中生都已经开始接触算法了吗!
+
+
+
+除了在 SearXNG 项目中的贡献,我发现你还设计了一些开源小程序(eg:Dairy APP),能否分享一下你最引以为傲的作品是什么?你觉得这个作品的意义是什么?
+
+
+addd,Diary app 确实是我前几周的重点。我比较喜欢创新新功能,比如说一打开就弹出一篇以往的日记,配上符合当时心情的音乐,让你朝花夕拾一下。
+
+现在嘛,我写了一个 Python 库,叫做 MercurySQLite,提供了一个高级的接口,能不用写 SQL 语句就能操作数据库,贼方便告诉你。
+
+
+
+
+
+
+
+
+ Dairy APP 部分截图
+
+
+
+
+你如何了解到 Paddle 社区的,是什么吸引你加入这个社区并开始贡献?可以分享一下你和 Paddle 社区的小故事么?
+
+
+我也忘了第一次看 Paddle 是哪年了。。。不过当时我应该处于“AI 发烧友”阶段。后来,一年前?文心不是火了吗?我就想再看看 AI,就算是对 Paddle 有了一个大概的了解吧。
+
+直到今年的中国开源年会,我不是办青少年分论坛吗?我们接下来就是教育分论坛,然后我听了梦老师的演讲,觉得“快乐开源”这档子活动挺有意思的。
+
+其实我几个月前看过黑客松,那玩意儿实在是太难了做不来,但是快乐开源就挺好的啊,又不难,改文档也能学到很多,比如说文档的语法之类的,我的那个 SQL 项目文档就是受到了这个的启发。。
+
+
+
+
+加入 Paddle 社区后的第一次合并 PR 经历如何?有没有什么有趣的插曲或者教训🤓🤓🤓🤓?
+
+
+哈哈哈,第一次我故意挑了一个最简单的任务做,只有几行代码,属于是投机取巧摸鱼了。。不过第二次——也就是现在正在进行的 PR——没那么轻松了。原文档的格式超级乱,我都不理解他是什么意思。然后又是 CI 的报错看不懂。。。现在差不多改完了,还有亿点点小问题,也快了
+
+
+
+编者注✍️:文档任务很适合刚接触 Paddle 的开发者们,而相关的 PR 也很可能是大家在 Paddle 的第一个 PR。感兴趣可查看 ➡️文档 Docathon 系列任务
+
+
+
+你觉得今后 Paddle 社区对你的个人成长和技术发展有何影响?
+
+
+Paddle 社区的技术实力肯定是没得说的。能跟这么多大佬在一起,我觉得不管是现在还是未来,都会对我有很大的影响。就比如说吧,虽然我现在还没有深入地接触到 Paddle 的技术层面,但是我只是在 PFCC 那个群里面苟着,就能学到很多东西,比如说 Paddle 的 CI 啊、代码规范啊之类的。
+
+然后我准备试着,只是试着哈,参加下一次的黑客松,或者是黑客松简单版。我相信,只需要一次任务,就可以把那一块的相关知识掌握熟练,然后社交技能也可以上来,这绝对是一举两得。
+
+
+
+
+作为一名青少年开发者,你一般是如何学习技术的,听说你曾经以 AI 学 AI?哈哈哈 ~~
+
+
+以 AI 学 AI?试过,但是效果真的不咋地。那时候 GPT3.5 才刚出来,我问他啥都是乱答的。所以我还是觉得以前的学习方式比较好。我喜欢那种“在实际应用里学习”。也就是说,给我一个应用场景,或者是项目,然后我先想该怎么实现,遇到哪里有不懂的技术问题,再去搜,再去问别人(当然,嫌麻烦的话就问 AI /doge)
+
+我觉得这样的学习效率是最高的。
+
+
+
+
+在你的同龄人中,有多少人对编程和开发感兴趣?你是如何看待青少年参与开源的?
+
+
+我的同龄人。。。如果你指的是我们学校的话。。。那么应该不多,应该不超过五个。所有学计算机的,基本上都是为了信竞。剩下的为数不多的四五个人,也只是用 GitHub 找找东西,玩玩游戏而已。
+
+
+
+
+你对于即将参加 Paddle 黑客松有什么样的期待和目标?你希望在黑客松中取得什么样的成绩?
+
+
+我的目标就是试一下,看看自己的水平在哪,然后顺便学一些知识。所以?只能期待题目不要太难了 hhh
+
+至于成绩嘛,我也不奢求,能得一颗星就算是重大成就了,如果我是“有技术的”,也许可以尝试 may be 多弄一点星???
+
+
+
+
+那么在整个开源学习中,对你影响最深的是谁?为什么?(🤔🤔🤔)
+
+
+这个问题很难答啊 hhh,说谁都不太好。
+
+但是如果要说真话,这就必须提到 SearXNG 那个搜索引擎的 Maintainer。他特别有耐心,还跟我闲聊,那段时间我初出茅庐啥也不懂,要不是他,我到现在还没入门呢!
+
+当然啦,我必须希望以后能有更多影响我的人,超越他,对吧?
+
+
+
+
+对于其他年轻开发者来说,你有什么建议?或者你想鼓励他们参与到开源社区,特别是 Paddle 社区中么?
+
+
+我觉得开源社区的一大魅力就在于“社区”——你永远可以找到帮助,永远可以与志同道合的人一起 coding,Paddle 社区更是一个典型。
+
+在 Paddle,如果你有什么问题——无论白痴问题还是神级难度——都会有人来看,都会有人来帮助你解决。
+
+我觉得 Paddle 的一大优点就是他是任务式的这种贡献机制。你可以选择各种不同难度的任务,循序渐进,慢慢提升自己。任务式贡献也可以让你有一个明确的目标,甚至是一个明确的思路,该怎么解决这个问题。
+
+
+
+
+三、生活中的点点滴滴——黄瓜篇
+
+
+
+
+ 黄锦源同学的日常
+
+
+
+
+
+
+ 黄瓜的作业
+
+
+
+
+
+
+ 黄瓜的猫🐱
+
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/limin-story
+ https://pfcc.blog/posts/limin-story
+ Thu, 07 Dec 2023 00:00:00 GMT
+ 从对 Git 一窍不通到如今能够丝滑完成黑客松赛题,从曾经历鬼门关的生死挣扎到现在能够轻松跑几公里不喘气,从毕业于武大国软学的有志青年到佛系养生的新时代躺平中年,敏师傅 的人生经历就像是那瓶经年陈酿的老酒,醇厚细腻、回味无穷。
+
+
+
+一、前言
+是谁,天天说自己是 “老咸鱼” ?是谁,戏称自己是 “快奔 4️⃣的老头子” ?又是谁,自诩为 “摸🐟王者“ ?是他、是他、就是他~我们的朋友——敏师傅 !!!
+
+
+匿名回复: 我没有,假的,都是假的
+
+敏师傅毕业于武汉大学,目前在珠海某甲方企业工作。作为新时代中年人,敏师傅和许多开源者一样,喜欢躺平、宅家、吃吃吃!但敏师傅不仅喜欢吃,还喜欢做。不仅喜欢做,还擅长烹饪各式各样的美味佳肴,堪称“当代好男人”(敏:“相对的,比群里其他大佬差距还很大!”)、“顶级家庭煮夫”、“万千少女的理想老公🫰❤️(敏:“不是不是,我有主的,理想厨子是真!”)连米国五星上将麦克阿瑟见了都评价道:“不是米其林大厨请不起,而是李敏更具性价比!”
+
+后文有敏师傅的厨艺展示哦~
+
+在健身养身方面,李敏师傅也颇有经验。给他一根杠铃杆,他能撬动整个亚欧大陆!给他一套跑步装备,他能漫步宇宙!著名物理学家阿基米德曾说:“李敏所创造出来的物理奇迹足以改写人类此前所有的力学研究!”无论是极限深蹲、恐怖硬拉还是痛苦卧推,在李敏的面前都不过是老八进厕所手到擒来!
+
+匿名回复: 没有没有,都是瞎说的,手无缚鸡之力!
+
+而在开源方面,作为一个非专业的开源开发者,敏师傅从学习如何提交 PR 做起,到加入 Paddle 的 API 文档修改组,再到后面又积极参加一系列快乐开源活动和更具挑战性的黑客松。正如敏师傅所说:“自己在 Paddle 就像打怪升级一样做各种任务”。在这段 Paddle 的这段旅程中,他一点点精进了自己的技术,也结识了许多热爱开源的小伙伴。接下来让我们去瞧瞧这位多才多艺的“摸🐟老头子”(just kidding😉😉😉)!
+
+
+
+ 左图:李敏师傅
+
+
+
+ 右图:水群摸鱼日常
+
+
+二、采访内容
+
+
+介绍一下自己吧,敏师傅!
+敏师傅: 各位大佬好,专业摸鱼,日常躺平晒太阳的咸鱼就是我了。身高 183,体重 170。老胖鱼一条。
+
+
+敏师傅说个人爱好之一是宅,那么平时宅在家干什么呢?
+敏师傅: 宅家追剧,鉴于囊中羞涩,又秉持开源,所以都是看免费的(大家不要学我,要支持正版,知识产权法在头顶)。有时会神经质发现地脏,就做个简单的扫除;有时就去公园跑跑步、做做拉伸,尽量让自己活的久点,要不然养老金白交了;要么小主想逛苍蝇馆子,就祭出地图精准定位去吃,吃完回家。
+
+
+你曾经有提到在机器学习的过程中自己差点 “见了太祖”,请给大家分享一下这次惊险的经历😮
+
+匿名回复:不是学习中,是那会刚好在学基础,我出事跟学习无关啊~
+
+敏师傅: 某年,我在工作中,可能因为淋雨作业、感冒,加上伙食里有沙吧...多种原因叠加在一起,一天上午在办公室突然感到头昏。一开始估摸自己是低血压了,就去卫生队让值班人员量了个血压,结果 40/20。我估计自己身体出了大问题,赶忙让他们打了针 NE,然后喊队长把我送医院。
+到了医院迷迷糊糊的,不敢让自己睡着。一天下了 3 张病危,好像是急性胆囊炎合并肺炎,附加胸腔积液。指标各种超标,医生也不敢手术,一直发烧,让医生给打了丙球续命,中间因为升压药泵注射漏了,整个胳膊肿得不像样,让护士帮忙买土豆切片敷那吸收了才完事,同为三甲,简直了。
+过了 5 天医生估计受不了了,让转广州医院,还好领导派了个人跟着,就整了个车把我送到广总。那边直接说割胆囊,我怕,就说保守治疗,主任也同意了,就在广总住了一个多月。抽血都抽了三四十管,也没查出来病因,多科会诊好几次,像实验体一样躺着被几十人围观好几次。最后我看化验单,连非洲的传染病都查了,结果全是阴性。也就不了了之保守治疗了。先住传染科,然后呼吸内科,然后心内科。反正躺床上被推来推去,哈哈哈。
+那一个多月禁食,每天就是打营养针。就记得那脂肪乳,一瓶能打几个小时,每天从上午 8 点打到晚上 8 点。最后几天,医生才让吃流食,粥都不能喝,只能喝粥上面的米汤,唉。然后回到单位吃了半年的过汤菜(就是把所有菜都放水里洗洗尽量没有油),肚子上的肉都没了,皮都耷拉下来了😂
+
+编者注✍️:真・大难不死,必有后福啊。不过咱们社区开发者怎么什么离奇的经历都有...?
+
+
+
+听说敏师傅的工作经历也非常曲折有趣,能具体说说么?
+敏师傅: 这个,也没啥。毕业稀里糊涂进了某集团,一开始说干计算机的事,结果一点不沾边,各种其他技能点点了个遍。架设卫星锅,招待上级,液压系统维修,汽车机油液压油更换,气路维修,强电弱电架设,挖坑种树等各种。
+全国各地的沙漠,森林,海岛跑了大半,格尔木睡沙漠,半夜帐篷被吹飞去追帐篷,靖宇睡森林,半夜下暴雨水淹帐篷急忙转移,跟着护林工逛森林,吃野果,挖人参,烧松子,反正东北比西北好玩的多。海岛就懵了,坐船就吐的昏天暗地,然后各种晒脱皮,最难受的地儿。
+后面几年总算是接触计算机,做了个仿真训练系统,抄了一堆网站,各种借调打黑工。然后就想着赶紧滚蛋啥都不想干了,躺平。后面就是学机器学习,接着住院,接着佛系养生。
+
+
+你最早接触开源是在什么时候?
+敏师傅: 大学吧,那会为了看越狱、迷失、危机边缘那些。好用的播放器不多,关键是字幕。射手网开源了个播放器,就 SVN 拿下来看了看,支持各种制式视频,最大的特点是可以在线搜索字幕源并选择,在那个 RealPlayer 的年代,真的是非常的优秀。
+
+
+那你又是怎么加入到 Paddle 社区的?您对于开源社区的价值和意义是怎样理解的?你认为这些价值和意义在 Paddle 社区又是如何体现的?
+敏师傅: 好像是查飞桨文档学习时,梦师傅的文档修改任务,然后就上了大船。
+我觉得在国内做开源真的挺不容易,毕竟开源在绝大部分人认为就是免费,其实也就是免费,而且大家都信奉拿来主义,开源协议那块也不关心。开源需要投入的人力物力财力都是不小的,投入少了,社区和维护不够,BUG 就多了。但绝大多数软件,都是从开源起家的,操作系统、中间件、数据库、应用软件等等,所有层面都有开源的身影,是开源让计算机发展的更迅速,微软都不得不妥协进行开源,可想开源的力量。
+价值和意义的话,就用我接触的几个大佬概括下吧:
+
+
+涛姐 ,我所接触到飞桨负责开源的最高级别人物。涛姐从研发那割下来的开源任务,要考虑到我们的能力,不能太难,适众面又要广泛,对应负责的研发还要 Review,都是增加飞桨内部的工作量。然后做黑客松题目时发现,题目所需的,可以把开源题目串起来。这时才发现涛姐选题的前瞻性、系统性、大局观。对整体框架的全局把握才能轻车熟路深入浅出的发布出我们能做的题目。可想而知涛姐的能力有多强 👍。
+
+
+梦师傅 和花花 ,运营的核心 CP,原文档负责人,从任务发布、统计信息、数据到对接第三方,做过统计上报的都能懂,那就是个磨人想砸键盘的活,我们一堆人是一个个点,她们那是一整个面,但凡报上去的信息不对,就是反复的核实修改,线下的活动也组织的有声有色,从历次活动照片能看出参与者欢快的笑容,也反映出组织者的能力有多强。
+
+
+孙师傅 ,现 Docathon 发起人和文档总负责任。虽然他总是潜水,而且使用者总说文档有错误。但反过来看,那还不是因为 API 更新快,参数修复多。孙师傅负责的是很庞大的费眼睛的项目,代码嘛,能跑就行,有的使用者只关心 API 怎么用。但文档,是所有人必须要看的,严谨系数其实比代码要高的多,孙师傅劳心劳力确实不容易。
+
+
+
+编者注✍️:梦师傅是产品经理,不是运营哈哈哈。另外,我潜水是因为沉迷工作
+
+
+
+作为一个非专业的开发者,一开始接触 Paddle 的时候你遇了过什么困难或者问题,是怎么解决的?
+敏师傅: 刚开始,对流行的开发是一窍不通。对于 Git,只会把代码下下来自己用,从来没有提过 PR。那会在群里啥也不懂,连 PR 是啥也不知道,Git 其他命令也不会,只会 clone,后来在梦师傅和张师傅的帮助下,看教程。但是那会儿,前面几个 PR 只会在 GitHub 打开单文件修改提交,CI 流程过不去。后来看了张师傅的 PR 教程,才学会了命令提交。
+
+
+你有提到最初是看教程学习 Paddle 的,你觉得飞桨的文档和教程怎么样?
+敏师傅: 飞桨文档和教程,在主线这块是维护的很及时的,就是对于分支一些,教程和代码的不同步还是很明显的,记得有个给黑白视频上色的教程,怎么都跑不下来,最后才知道,得用老的仓库代码才行。但教程里的代码,clone 下来必然是最新的。
+
+
+你参加过哪些飞桨的开源项目?你最喜欢哪个项目,为什么?
+敏师傅: 参加的挺多,都是摸鱼做做边缘任务,最喜欢的应该是 001 带的任务,因为他基本 724 在线,改 PR 的速度赶不上他 Comment 的速度,哈哈哈哈哈哈。
+
+编者注✍️:001 (SigureMo )是 Paddle 社区出了名的劳模,望周知。由于是第一位社区 commiter 而被大家称为 001。
+
+
+
+听说你还参加了黑客松,那段经历一定很精彩,能否分享一下你在那期间遇到的有趣事情或者特别人呢?
+敏师傅: 在婷姐带领下做了点 FP16 的任务,在花花带领下写了个 API,跟其他大佬比起来,我这基本就是小学生水平,就记得那会 CI 各种拥挤(当然,责任在我,因为我没环境,只能靠 CI,哈哈哈哈)。
+
+
+你觉得 Paddle 社区在吸引和培养新的开发者方面做得如何?是否有一些改进的建议或者想法?
+敏师傅: 我觉得一直都很吸引人,梦师傅、花花、酥酥、孙师傅各种活动都能面面俱到(虽然没实地参加,但看照片能看得出)。
+建议想法啥的,我这四肢不发达头脑简单的脑子就算了,跟着大家学就好。🙂
+
+
+除了 Paddle 之外,您还参与过其他开源项目吗?如果有的话,您觉得 PaddlePaddle 与其他项目相比有哪些独特之处?
+敏师傅: 其他的么,好像真没,MMEngine 算么,当时要找框架,所以提了 1 个还是 2 个 PR 吧,后面就放弃了,因为没有免费算力可以用😀,还是咱飞桨好用。
+
+
+在与花花、孙师傅、梦师傅、涛姐和其他 Paddle 大佬的交流中,您学到了哪些知识和经验?对您的技术有哪些影响呢 ?
+敏师傅: 平时怕他们忙,基本不主动找各位大佬。我们这都是点,她(他)们那是面,所以她们的工作量肯定是非常大的,能不打扰就不打扰。
+
+
+对于在某甲方公司工作,敏师傅有没有一些摸鱼小技巧可以分享一下呢?你是如何平衡工作和生活的?
+敏师傅: 摸鱼技巧?开会带本书,看看会议就过去了,反正路人甲一个,一般就用“三不”回答:不会、不懂、不知道 。领导的决定都是对的,领导的决策都不会错,错了那也是我们马仔理解不够深,执行不彻底,落实不到位。
+平衡工作生活的话,下了班就 不干活,遵守 995,除了大值班,这都得参加,没啥说的。
+
+编者注✍️:学到了。
+
+
+
+对于那些想要成为开源贡献者的人,您有什么鼓励和建议?
+敏师傅: 不管是不是科班出身,大项目里开源一般有利无害的吧。我毕业太久,现在的应聘肯定卷出了天际,啥力扣 ACM 估计都是基操,能用开源项目加分的话,先进大厂实习再氪肝留大厂也是条路吧。说的不一定对,请客观看待。
+
+
+最后,敏师傅还有什么想和大家说的么?
+敏师傅: 有新手怪的话,大佬们给我留点。我还是砍砍史莱姆和稻草人就好😀。
+
+
+三、著名大型评论平台——虎扑评论专区
+敏师傅和太多的人打过交道了。由于篇幅的原因,我们邀请了部分和敏师傅有过合作经历的朋友们,贡献一下他们和敏师傅发生的故事,或者对敏师傅的评价~以下均为真心话,请放心食用!
+
+
+
+
+ 一开始对敏哥印象深刻,是因为敏哥的微信昵称拼音——讷言敏行(nè yán mǐn xíng),总共 4 个,有位前同事能把其中 2 个读错成 nà ... ... háng。🤣
+
+ 之后,从提文档修复的 PR 开始,就能明显感觉到敏哥的进步,再到后来敏哥能一口气把好多快乐开源任务都认领完成了,真的非常厉害。
+
+
+
+
+
+ 敏师傅领题目、push 研发超积极。最厉害的是自己不做测试的,都是一把改完 push 上去看 CI 结果,也不需要 GPU 算力(手动狗头),以充分利用婷姐的脑力资源为主。
+
+
+
+
+
+ 敏师傅,当然是实力超强的摸鱼仙人
+
+
+
+
+
+ 众所周知,飞桨开源社区分为两股势力:以敏师傅为首的好人阵营,以 002 为首的时好时坏阵营。
+
+
+
+编者注✍️:下面这位就是花师傅说的时好时坏的 002 ⬇️
+
+
+
+
+ 敏师傅简直是吾辈楷模,能愉快的摸鱼提 PR,还有老婆,真让人羡慕。
+
+
+
+
+
+ 敏师傅给我的感觉就如同金庸武侠小说里的扫地僧,活跃在飞桨各大大小小的社区当中,神秘而且武功深不可测,有极高技艺却又深藏不露。嘴上说着摸鱼,但上班的时候提起 PR 毫不手软(敏师傅,咱贵公司还招人吗[可怜])。敏师傅也是一部行走的百科全书,上知天文,下知地理,尤其对吃的颇有造诣,如果你想知道不同地方的美食,问敏师傅就对了。
+
+ 不过我也得来吐槽下敏师傅,平时我认领的任务还没开始做的时候,张师傅都是口嗨说要背刺我,但只有敏师傅是来真的,直接把我认领的任务做了,希望敏师傅下次能给我留口汤喝,ball ball you 了😭
+
+
+
+
+
+ 敏师傅是我人生重要的领路人之一,每次抉择迷茫时候,敏师傅总会用他经验满满的信息差对我的迷茫分叉口进行降维打击!最后让我拨云见月,酣畅淋漓!
+
+
+
+
+
+ 敏哥人超好!职场导师+1
+
+
+
+
+
+
+ 敏哥安慰梦师傅的聊天截图
+
+
+四、敏师傅的佛系养身 TIME~🏃♀️🏋️♀️⛹️♀️🚴♀️🤸♀️👯♂️💪
+经历
+先设定个小目标,就减肥吧,然后开始了漫长的减肥计划。
+一开始 3 公里都难跑及格,啥也不管,先开跑,同时补充氨糖和维生素,免得关节废了。好像从 95 跑到 85 后,各种体测也没问题了。前几个月体重掉的快,后来基本一个月一公斤,逐渐五公里到十公里,最后跑了个半马试试自己的耐力。然后体重就到了瓶颈期,跑步成了热身,体重不减,体脂不减,请教专业人士,开始上力量,原始三件套:深蹲,硬拉,卧推。先慢跑 3 公里,然后负重训练。后来逐渐加上 HIIT,体重最轻的时候到了 70 公斤。
+过来人的小 tips💡
+总结一下大概如下:热身是必要的,体重大先用有氧减脂,一开始不用太在意体重,练就完了,碳水和蛋白质要保证,氨糖和维生素也是必备,到了某天会发现衣服大了,体重下来了。到了瓶颈期就可以上力量,没有条件就用 HIIT 代替,比如斯巴达 500,虽然痛苦,但是非常有效,提升新陈代谢率,提高心肺功能。在上力量时,如果有体检,会发现尿酸升高,这个是力量训练中常有的,可以暂停一周再复测,正常值后就说明是力量训练导致,就不用担心了。
+五、彩蛋 🥚
+1. 十项全能的家庭煮夫敏敏子在线狂秀厨艺
+
+
+ 自我宣言:本人手艺还行,刀工一般,之前在某集团时没事跑去炊事班练练手,打打牙祭。煎、炒、烹、炸、焖、炖、溜、熬、蒸、烩、煮、烙、汆、酿、扒、烧都会烧点。
+
+
+
+
+
+
+ 敏哥做的菜-1
+
+
+
+ 敏哥做的菜-2
+
+
+2. 敏哥个人自述
+敏哥在采访前也精心写了一份【个人自述】,篇幅过长就不贴在正文了,好奇的话可以读一下哦~
+
+编者注✍️:留个彩蛋!我把它放在了博客 GitHub repo 下的 src/eggs/limin-story/
文件夹下哦~
+
+]]>
+ 从对 Git 一窍不通到如今能够丝滑完成黑客松赛题,从曾经历鬼门关的生死挣扎到现在能够轻松跑几公里不喘气,从毕业于武大国软学的有志青年到佛系养生的新时代躺平中年,敏师傅 的人生经历就像是那瓶经年陈酿的老酒,醇厚细腻、回味无穷。
+
+
+
+一、前言
+是谁,天天说自己是 “老咸鱼” ?是谁,戏称自己是 “快奔 4️⃣的老头子” ?又是谁,自诩为 “摸🐟王者“ ?是他、是他、就是他~我们的朋友——敏师傅 !!!
+
+
+匿名回复: 我没有,假的,都是假的
+
+敏师傅毕业于武汉大学,目前在珠海某甲方企业工作。作为新时代中年人,敏师傅和许多开源者一样,喜欢躺平、宅家、吃吃吃!但敏师傅不仅喜欢吃,还喜欢做。不仅喜欢做,还擅长烹饪各式各样的美味佳肴,堪称“当代好男人”(敏:“相对的,比群里其他大佬差距还很大!”)、“顶级家庭煮夫”、“万千少女的理想老公🫰❤️(敏:“不是不是,我有主的,理想厨子是真!”)连米国五星上将麦克阿瑟见了都评价道:“不是米其林大厨请不起,而是李敏更具性价比!”
+
+后文有敏师傅的厨艺展示哦~
+
+在健身养身方面,李敏师傅也颇有经验。给他一根杠铃杆,他能撬动整个亚欧大陆!给他一套跑步装备,他能漫步宇宙!著名物理学家阿基米德曾说:“李敏所创造出来的物理奇迹足以改写人类此前所有的力学研究!”无论是极限深蹲、恐怖硬拉还是痛苦卧推,在李敏的面前都不过是老八进厕所手到擒来!
+
+匿名回复: 没有没有,都是瞎说的,手无缚鸡之力!
+
+而在开源方面,作为一个非专业的开源开发者,敏师傅从学习如何提交 PR 做起,到加入 Paddle 的 API 文档修改组,再到后面又积极参加一系列快乐开源活动和更具挑战性的黑客松。正如敏师傅所说:“自己在 Paddle 就像打怪升级一样做各种任务”。在这段 Paddle 的这段旅程中,他一点点精进了自己的技术,也结识了许多热爱开源的小伙伴。接下来让我们去瞧瞧这位多才多艺的“摸🐟老头子”(just kidding😉😉😉)!
+
+
+
+ 左图:李敏师傅
+
+
+
+ 右图:水群摸鱼日常
+
+
+二、采访内容
+
+
+介绍一下自己吧,敏师傅!
+敏师傅: 各位大佬好,专业摸鱼,日常躺平晒太阳的咸鱼就是我了。身高 183,体重 170。老胖鱼一条。
+
+
+敏师傅说个人爱好之一是宅,那么平时宅在家干什么呢?
+敏师傅: 宅家追剧,鉴于囊中羞涩,又秉持开源,所以都是看免费的(大家不要学我,要支持正版,知识产权法在头顶)。有时会神经质发现地脏,就做个简单的扫除;有时就去公园跑跑步、做做拉伸,尽量让自己活的久点,要不然养老金白交了;要么小主想逛苍蝇馆子,就祭出地图精准定位去吃,吃完回家。
+
+
+你曾经有提到在机器学习的过程中自己差点 “见了太祖”,请给大家分享一下这次惊险的经历😮
+
+匿名回复:不是学习中,是那会刚好在学基础,我出事跟学习无关啊~
+
+敏师傅: 某年,我在工作中,可能因为淋雨作业、感冒,加上伙食里有沙吧...多种原因叠加在一起,一天上午在办公室突然感到头昏。一开始估摸自己是低血压了,就去卫生队让值班人员量了个血压,结果 40/20。我估计自己身体出了大问题,赶忙让他们打了针 NE,然后喊队长把我送医院。
+到了医院迷迷糊糊的,不敢让自己睡着。一天下了 3 张病危,好像是急性胆囊炎合并肺炎,附加胸腔积液。指标各种超标,医生也不敢手术,一直发烧,让医生给打了丙球续命,中间因为升压药泵注射漏了,整个胳膊肿得不像样,让护士帮忙买土豆切片敷那吸收了才完事,同为三甲,简直了。
+过了 5 天医生估计受不了了,让转广州医院,还好领导派了个人跟着,就整了个车把我送到广总。那边直接说割胆囊,我怕,就说保守治疗,主任也同意了,就在广总住了一个多月。抽血都抽了三四十管,也没查出来病因,多科会诊好几次,像实验体一样躺着被几十人围观好几次。最后我看化验单,连非洲的传染病都查了,结果全是阴性。也就不了了之保守治疗了。先住传染科,然后呼吸内科,然后心内科。反正躺床上被推来推去,哈哈哈。
+那一个多月禁食,每天就是打营养针。就记得那脂肪乳,一瓶能打几个小时,每天从上午 8 点打到晚上 8 点。最后几天,医生才让吃流食,粥都不能喝,只能喝粥上面的米汤,唉。然后回到单位吃了半年的过汤菜(就是把所有菜都放水里洗洗尽量没有油),肚子上的肉都没了,皮都耷拉下来了😂
+
+编者注✍️:真・大难不死,必有后福啊。不过咱们社区开发者怎么什么离奇的经历都有...?
+
+
+
+听说敏师傅的工作经历也非常曲折有趣,能具体说说么?
+敏师傅: 这个,也没啥。毕业稀里糊涂进了某集团,一开始说干计算机的事,结果一点不沾边,各种其他技能点点了个遍。架设卫星锅,招待上级,液压系统维修,汽车机油液压油更换,气路维修,强电弱电架设,挖坑种树等各种。
+全国各地的沙漠,森林,海岛跑了大半,格尔木睡沙漠,半夜帐篷被吹飞去追帐篷,靖宇睡森林,半夜下暴雨水淹帐篷急忙转移,跟着护林工逛森林,吃野果,挖人参,烧松子,反正东北比西北好玩的多。海岛就懵了,坐船就吐的昏天暗地,然后各种晒脱皮,最难受的地儿。
+后面几年总算是接触计算机,做了个仿真训练系统,抄了一堆网站,各种借调打黑工。然后就想着赶紧滚蛋啥都不想干了,躺平。后面就是学机器学习,接着住院,接着佛系养生。
+
+
+你最早接触开源是在什么时候?
+敏师傅: 大学吧,那会为了看越狱、迷失、危机边缘那些。好用的播放器不多,关键是字幕。射手网开源了个播放器,就 SVN 拿下来看了看,支持各种制式视频,最大的特点是可以在线搜索字幕源并选择,在那个 RealPlayer 的年代,真的是非常的优秀。
+
+
+那你又是怎么加入到 Paddle 社区的?您对于开源社区的价值和意义是怎样理解的?你认为这些价值和意义在 Paddle 社区又是如何体现的?
+敏师傅: 好像是查飞桨文档学习时,梦师傅的文档修改任务,然后就上了大船。
+我觉得在国内做开源真的挺不容易,毕竟开源在绝大部分人认为就是免费,其实也就是免费,而且大家都信奉拿来主义,开源协议那块也不关心。开源需要投入的人力物力财力都是不小的,投入少了,社区和维护不够,BUG 就多了。但绝大多数软件,都是从开源起家的,操作系统、中间件、数据库、应用软件等等,所有层面都有开源的身影,是开源让计算机发展的更迅速,微软都不得不妥协进行开源,可想开源的力量。
+价值和意义的话,就用我接触的几个大佬概括下吧:
+
+
+涛姐 ,我所接触到飞桨负责开源的最高级别人物。涛姐从研发那割下来的开源任务,要考虑到我们的能力,不能太难,适众面又要广泛,对应负责的研发还要 Review,都是增加飞桨内部的工作量。然后做黑客松题目时发现,题目所需的,可以把开源题目串起来。这时才发现涛姐选题的前瞻性、系统性、大局观。对整体框架的全局把握才能轻车熟路深入浅出的发布出我们能做的题目。可想而知涛姐的能力有多强 👍。
+
+
+梦师傅 和花花 ,运营的核心 CP,原文档负责人,从任务发布、统计信息、数据到对接第三方,做过统计上报的都能懂,那就是个磨人想砸键盘的活,我们一堆人是一个个点,她们那是一整个面,但凡报上去的信息不对,就是反复的核实修改,线下的活动也组织的有声有色,从历次活动照片能看出参与者欢快的笑容,也反映出组织者的能力有多强。
+
+
+孙师傅 ,现 Docathon 发起人和文档总负责任。虽然他总是潜水,而且使用者总说文档有错误。但反过来看,那还不是因为 API 更新快,参数修复多。孙师傅负责的是很庞大的费眼睛的项目,代码嘛,能跑就行,有的使用者只关心 API 怎么用。但文档,是所有人必须要看的,严谨系数其实比代码要高的多,孙师傅劳心劳力确实不容易。
+
+
+
+编者注✍️:梦师傅是产品经理,不是运营哈哈哈。另外,我潜水是因为沉迷工作
+
+
+
+作为一个非专业的开发者,一开始接触 Paddle 的时候你遇了过什么困难或者问题,是怎么解决的?
+敏师傅: 刚开始,对流行的开发是一窍不通。对于 Git,只会把代码下下来自己用,从来没有提过 PR。那会在群里啥也不懂,连 PR 是啥也不知道,Git 其他命令也不会,只会 clone,后来在梦师傅和张师傅的帮助下,看教程。但是那会儿,前面几个 PR 只会在 GitHub 打开单文件修改提交,CI 流程过不去。后来看了张师傅的 PR 教程,才学会了命令提交。
+
+
+你有提到最初是看教程学习 Paddle 的,你觉得飞桨的文档和教程怎么样?
+敏师傅: 飞桨文档和教程,在主线这块是维护的很及时的,就是对于分支一些,教程和代码的不同步还是很明显的,记得有个给黑白视频上色的教程,怎么都跑不下来,最后才知道,得用老的仓库代码才行。但教程里的代码,clone 下来必然是最新的。
+
+
+你参加过哪些飞桨的开源项目?你最喜欢哪个项目,为什么?
+敏师傅: 参加的挺多,都是摸鱼做做边缘任务,最喜欢的应该是 001 带的任务,因为他基本 724 在线,改 PR 的速度赶不上他 Comment 的速度,哈哈哈哈哈哈。
+
+编者注✍️:001 (SigureMo )是 Paddle 社区出了名的劳模,望周知。由于是第一位社区 commiter 而被大家称为 001。
+
+
+
+听说你还参加了黑客松,那段经历一定很精彩,能否分享一下你在那期间遇到的有趣事情或者特别人呢?
+敏师傅: 在婷姐带领下做了点 FP16 的任务,在花花带领下写了个 API,跟其他大佬比起来,我这基本就是小学生水平,就记得那会 CI 各种拥挤(当然,责任在我,因为我没环境,只能靠 CI,哈哈哈哈)。
+
+
+你觉得 Paddle 社区在吸引和培养新的开发者方面做得如何?是否有一些改进的建议或者想法?
+敏师傅: 我觉得一直都很吸引人,梦师傅、花花、酥酥、孙师傅各种活动都能面面俱到(虽然没实地参加,但看照片能看得出)。
+建议想法啥的,我这四肢不发达头脑简单的脑子就算了,跟着大家学就好。🙂
+
+
+除了 Paddle 之外,您还参与过其他开源项目吗?如果有的话,您觉得 PaddlePaddle 与其他项目相比有哪些独特之处?
+敏师傅: 其他的么,好像真没,MMEngine 算么,当时要找框架,所以提了 1 个还是 2 个 PR 吧,后面就放弃了,因为没有免费算力可以用😀,还是咱飞桨好用。
+
+
+在与花花、孙师傅、梦师傅、涛姐和其他 Paddle 大佬的交流中,您学到了哪些知识和经验?对您的技术有哪些影响呢 ?
+敏师傅: 平时怕他们忙,基本不主动找各位大佬。我们这都是点,她(他)们那是面,所以她们的工作量肯定是非常大的,能不打扰就不打扰。
+
+
+对于在某甲方公司工作,敏师傅有没有一些摸鱼小技巧可以分享一下呢?你是如何平衡工作和生活的?
+敏师傅: 摸鱼技巧?开会带本书,看看会议就过去了,反正路人甲一个,一般就用“三不”回答:不会、不懂、不知道 。领导的决定都是对的,领导的决策都不会错,错了那也是我们马仔理解不够深,执行不彻底,落实不到位。
+平衡工作生活的话,下了班就 不干活,遵守 995,除了大值班,这都得参加,没啥说的。
+
+编者注✍️:学到了。
+
+
+
+对于那些想要成为开源贡献者的人,您有什么鼓励和建议?
+敏师傅: 不管是不是科班出身,大项目里开源一般有利无害的吧。我毕业太久,现在的应聘肯定卷出了天际,啥力扣 ACM 估计都是基操,能用开源项目加分的话,先进大厂实习再氪肝留大厂也是条路吧。说的不一定对,请客观看待。
+
+
+最后,敏师傅还有什么想和大家说的么?
+敏师傅: 有新手怪的话,大佬们给我留点。我还是砍砍史莱姆和稻草人就好😀。
+
+
+三、著名大型评论平台——虎扑评论专区
+敏师傅和太多的人打过交道了。由于篇幅的原因,我们邀请了部分和敏师傅有过合作经历的朋友们,贡献一下他们和敏师傅发生的故事,或者对敏师傅的评价~以下均为真心话,请放心食用!
+
+
+
+
+ 一开始对敏哥印象深刻,是因为敏哥的微信昵称拼音——讷言敏行(nè yán mǐn xíng),总共 4 个,有位前同事能把其中 2 个读错成 nà ... ... háng。🤣
+
+ 之后,从提文档修复的 PR 开始,就能明显感觉到敏哥的进步,再到后来敏哥能一口气把好多快乐开源任务都认领完成了,真的非常厉害。
+
+
+
+
+
+ 敏师傅领题目、push 研发超积极。最厉害的是自己不做测试的,都是一把改完 push 上去看 CI 结果,也不需要 GPU 算力(手动狗头),以充分利用婷姐的脑力资源为主。
+
+
+
+
+
+ 敏师傅,当然是实力超强的摸鱼仙人
+
+
+
+
+
+ 众所周知,飞桨开源社区分为两股势力:以敏师傅为首的好人阵营,以 002 为首的时好时坏阵营。
+
+
+
+编者注✍️:下面这位就是花师傅说的时好时坏的 002 ⬇️
+
+
+
+
+ 敏师傅简直是吾辈楷模,能愉快的摸鱼提 PR,还有老婆,真让人羡慕。
+
+
+
+
+
+ 敏师傅给我的感觉就如同金庸武侠小说里的扫地僧,活跃在飞桨各大大小小的社区当中,神秘而且武功深不可测,有极高技艺却又深藏不露。嘴上说着摸鱼,但上班的时候提起 PR 毫不手软(敏师傅,咱贵公司还招人吗[可怜])。敏师傅也是一部行走的百科全书,上知天文,下知地理,尤其对吃的颇有造诣,如果你想知道不同地方的美食,问敏师傅就对了。
+
+ 不过我也得来吐槽下敏师傅,平时我认领的任务还没开始做的时候,张师傅都是口嗨说要背刺我,但只有敏师傅是来真的,直接把我认领的任务做了,希望敏师傅下次能给我留口汤喝,ball ball you 了😭
+
+
+
+
+
+ 敏师傅是我人生重要的领路人之一,每次抉择迷茫时候,敏师傅总会用他经验满满的信息差对我的迷茫分叉口进行降维打击!最后让我拨云见月,酣畅淋漓!
+
+
+
+
+
+ 敏哥人超好!职场导师+1
+
+
+
+
+
+
+ 敏哥安慰梦师傅的聊天截图
+
+
+四、敏师傅的佛系养身 TIME~🏃♀️🏋️♀️⛹️♀️🚴♀️🤸♀️👯♂️💪
+经历
+先设定个小目标,就减肥吧,然后开始了漫长的减肥计划。
+一开始 3 公里都难跑及格,啥也不管,先开跑,同时补充氨糖和维生素,免得关节废了。好像从 95 跑到 85 后,各种体测也没问题了。前几个月体重掉的快,后来基本一个月一公斤,逐渐五公里到十公里,最后跑了个半马试试自己的耐力。然后体重就到了瓶颈期,跑步成了热身,体重不减,体脂不减,请教专业人士,开始上力量,原始三件套:深蹲,硬拉,卧推。先慢跑 3 公里,然后负重训练。后来逐渐加上 HIIT,体重最轻的时候到了 70 公斤。
+过来人的小 tips💡
+总结一下大概如下:热身是必要的,体重大先用有氧减脂,一开始不用太在意体重,练就完了,碳水和蛋白质要保证,氨糖和维生素也是必备,到了某天会发现衣服大了,体重下来了。到了瓶颈期就可以上力量,没有条件就用 HIIT 代替,比如斯巴达 500,虽然痛苦,但是非常有效,提升新陈代谢率,提高心肺功能。在上力量时,如果有体检,会发现尿酸升高,这个是力量训练中常有的,可以暂停一周再复测,正常值后就说明是力量训练导致,就不用担心了。
+五、彩蛋 🥚
+1. 十项全能的家庭煮夫敏敏子在线狂秀厨艺
+
+
+ 自我宣言:本人手艺还行,刀工一般,之前在某集团时没事跑去炊事班练练手,打打牙祭。煎、炒、烹、炸、焖、炖、溜、熬、蒸、烩、煮、烙、汆、酿、扒、烧都会烧点。
+
+
+
+
+
+
+ 敏哥做的菜-1
+
+
+
+ 敏哥做的菜-2
+
+
+2. 敏哥个人自述
+敏哥在采访前也精心写了一份【个人自述】,篇幅过长就不贴在正文了,好奇的话可以读一下哦~
+
+编者注✍️:留个彩蛋!我把它放在了博客 GitHub repo 下的 src/eggs/limin-story/
文件夹下哦~
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/huangjiyi-story
+ https://pfcc.blog/posts/huangjiyi-story
+ Tue, 05 Dec 2023 00:00:00 GMT
+ 从积极参与社区开源任务,到加入飞桨成为 (练习生) 实习生,到最终正式成为飞桨研发团队的一员。以兴趣为起点, 黄济懿师傅 将我们展示了一条通往职业的道路,希望他的故事能够激励所有对开源充满热情的开发者们。接下来,原神启动 🚀!
+
+
+
+一、前言
+黄师傅是一个地地道道的江西人,喜欢吃辣🌶️🌶️🌶️。他本科研究生都就读于广州的华南理工大学,现为电子信息专业,即将毕业前往 Paddle 工作。作为一名研究僧,他在空余时间喜欢吃吃美食或者玩玩游戏,像是原神/LOL/金铲铲之战 (各位要是也在玩,可以找黄师傅哦~黄师傅求大佬带带!!)。
+
+偷偷告诉你们:黄师傅最近的主线任务就是毕设,请务必多找他打游戏让他延毕(不是)
+
+去年 11 月,他出于对深度学习框架的底层实现的兴趣,联系花花加入了快乐开源群。在这一年里,他陆续完成社区里各项开源任务以熟悉 Paddle 框架,期间他也把握住了来飞桨实习的机会,他不断积累开发经验,不断加深对 Paddle 的理解,最终,他通过了飞桨团队的面试,成功拿下了飞桨校招 offer!
+黄师傅曾说:"我将继续在飞桨开源活动完成一些任务,希望能够学到更多的同时也能为飞桨的建设做出小小的贡献"。事实上,黄师傅曾分别参与了 PHI 算子库独立编译 、算子定义自动生成 ,Fluid Kernel 函数式改造 等多个快乐开源活动项目以及飞桨框架护航计划,到目前为 Paddle 贡献了 100 多个 PR。抛开实习生和正式员工的身份,黄师傅自身也是飞桨社区的自发贡献者和推动者。接下来,就让我们来瞅瞅黄师傅的精彩 Paddle 之旅吧!!
+
+原神,启动!!(请读者自行脑补 BGM)
+
+
+二、采访内容
+
+
+介绍一下自己吧,黄师傅!(●'◡'●)
+黄师傅: 我的 AI Studio 和 GitHub 的账号是 huangjiyi ,也是我名字的全拼(黄济懿)。
+
+
+可以简单和大家分享一下你生活中有什么兴趣爱好吗⊙o⊙(游戏、旅游、运动等等)?
+黄师傅: 我就是个死宅,平时就是打打游戏,刷刷 B 站,出门也就是找点好吃的。
+
+
+听说你本科研究生都在华南理工大学,你们学校周围有什么好吃的啊?🍔🍟🍿🥯🥪🥗🎂🍬🍹🍉
+黄师傅: 因为在华工太久学校食堂已经吃腻了,我会经常出校找点吃的,但活动范围有限,学校周边我吃过比较好吃的不多,就川菜小炒、麻辣香锅、鸡公煲、螺狮粉、泰国菜这些。
+
+
+我了解到你平时有在玩 LOL,那么如果把 Paddle 比作一个英雄🦸,你觉得它最像谁?为什么嘞?
+黄师傅: 我的答案是维克托 ,我的想象力有限,我只是觉得维克托的技能是会进化的,而 Paddle 也是在不断进化(更新)和扩展的,另外在维克托的背景故事里,他发明了很多具有智能的机械,比如蒸汽机器人,这和我们用 Paddle 来做的事比较相关,我只能想到这么多了。
+
+
+
+
+
+
+ 维克托
+
+
+
+
+你在加入飞桨开源群之前对 Paddle 的了解是什么样的?有没有听说过一些关于 Paddle 的传闻或者故事?
+黄师傅: 我在加入飞桨开源社区之前,我主要是一个用 PyTorch 跑深度学习实验的研究牲,对 Paddle 的了解也是和 PyTorch 类似的深度学习框架。关于 Paddle 的传闻的话像是国内最早开源的深度学习框架,以及国内最好的深度学习框架。
+
+
+你第一个在 GitHub 上完成的 PR 是关于什么的呢?在 PR 的过程中你遇到了什么难题吗?
+黄师傅: 我第一个在 GitHub 上完成的 PR 是 PHI 算子库独立编译 开源活动的一个子任务,只需要进行简单的代码替换,没有遇到什么难题,只是第一次改这么大项目的代码有点担心会不会改出什么问题。
+
+编者注✍️:【PHI 算子库独立编译 】是飞桨开源社区的快乐开源活动之一~我们社区有很多类似的、名字听起来很高大上但实际上难度不大的开源活动
+
+
+
+你觉得 Paddle 相比其他深度学习框架有什么优势?可以举个例子么?
+黄师傅: 其他深度学习框架我主要使用过 PyTorch,从用户的视角来比较的话,Paddle 具有丰富的中文文档,包括一些 API 文档和框架开发的技术文档,同时在 AI Studio 上有很多开发者分享的基于 Paddle 实现的项目和以及开发心得可以参考,这些对于国内用户十分友好。另外 Paddle 还有很多开源的套件,用户能够使用这些套件更快地完成一些深度学习应用任务。
+
+
+飞桨的开源活动中,你完成的任务中有没有什么特别有趣或者有挑战性的项目?有没有什么技术难题让你觉得很兴奋或者很有成就感?
+黄师傅: 我参加过的很多关于框架开发的开源活动都比较有挑战性,期间遇到的一些困难主要是一些编译问题,然后在通过调试定位问题所在代码、弄清楚问题原因、最后解决问题的时候会比较有成就感。
+
+
+据了解,你接触 Paddle 已经有一年多,那么你最欣赏 Paddle 团队中的哪些特点或价值观?为什么?
+黄师傅: 我比较欣赏的一点是 Paddle 团队非常重视开源社区生态,这一点从丰富的社区活动可以看出来,社区开发者可以从中学习到很多东西同时能够获得丰厚的奖励。
+
+
+我记得你说过花花和涛姐给了你很多帮助,你觉得他们是怎样的人呢(分别说说🫶🫶)?为什么?
+黄师傅: 花花:飞桨最美运营,关键人家还很努力。
+涛姐:为了让开发者能一直有新鲜热乎的开源任务做操碎了心。
+
+编者注✍️:花花是飞桨社区顶尖运营,涛姐是飞桨社区顶尖研发。
+
+
+
+你是怎么获得去 Paddle 实习的机会的呢?
+黄师傅: 关于我如何获得去 Paddle 实习的机会,当时我刚开始做了一些开源任务,然后在和花花交流的时候以一种半开玩笑的语气问花花能不能去实习,结果没想到花花真的和涛姐提了,然后涛姐真的申请了,飞桨真的给我面试了,然后我面试也真的通过了,然后我就去实习了,一切都是这么突然。
+
+编者注✍️:其实目前已经有相当多的社区开发者,通过参与开源活动接触到 Paddle,并最终获得实习机会。另外,对于不方便线下实习的同学,我们也提供了远程实习的方案,可以了解往期【护航计划 】。
+
+
+
+在 Paddle 实习的时候,你是否参与了某个具体项目的开发?可以分享一下你在项目中的具体角色和贡献吗?
+黄师傅: 我在实习期间刚开始是接着之前在社区参加的 PHI 算子库独立编译 开源项目,完成剩下的一些比较困难的任务,花了一个多月的时间完成,剩下的大部分时间参与了结构体 Kernel 注册统一 这个项目,期间也会接到一些其他小任务,一共实习了 3 个月吧,基本状态是要我干啥干啥,不会的就问。
+
+
+你认为实习那段时间你最大的收获是什么?你认为这段实习经历对你以后的职业生涯规划有起到什么影响?
+黄师傅: 收获很多,体验到了与在学校实验室不同的工作氛围,认识了一些研发大佬,深入了解了 Paddle 的一些机制,积累了一些编译调试和解决问题的经验。在 Paddle 的开源经历和实习经历让我找工作的目标从算法工程师转向了开发工程师,相比于具有不确定性同时很多时候凭借直觉的深度学习算法研究或者应用工作,我发现我更喜欢逻辑性更强且大多数问题都能找到原因的开发工作。
+
+
+最后也恭喜你拿到 Paddle 的 offer 🎉,对于同样有志加入 Paddle 团队的学生党,你可以分享一些建议议、经验或者成功路径吗?
+黄师傅: 我感觉我能拿到飞桨 offer 很大一部分原因是我在飞桨的实习经历和参加了一些开源活动,所以我的建议是在学习技术的同时多参加飞桨的开源活动,或者有机会去飞桨实习。
+
+
+
+
+
+
+ 黄师傅的校招 offer 部分截图
+
+
+三、“著名平台——虎扑评论”专区
+这次,我们邀请了一些和黄师傅有过合作经历的朋友们(以及实习期间的导师🐶),贡献一下和黄师傅相关的故事,或者他们对黄师傅的评价~以下均为真心话,请放心看!
+
+编者注✍️:黄师傅有些社恐,所以认识的社区朋友不多,大家正好可以借此机会认识一下。
+
+
+
+
+ 我觉得黄师傅是运气真好,类似张无忌,各种捡到宝,当然实力也是重要的。他刚来的时候其实对深度学习框架基本上不了解,然后我们快乐开源刚好放了第一个大任务-phi算子库(解决 CMake 依赖不需要懂深度学习框架)。然后他做啊做,问我们有没有机会来实习,当时 hc 太太太少了,但我们刚做起来,就给他申请,然后他就开挂了
+
+
+
+
+
+ 这位同学的工程素养很高,学习能力很强,经常超预期推进项目,最近独立完成高难度项目:飞桨 Flags 工具库建设,开源成果丰硕。另外也是原神大佬,工作累了还能带你打游戏,梦幻队友。
+
+
+
+
+
+ 原神60级大佬!还欠我一次开源社区分享,请记得!
+
+
+
+
+
+
+ 黄师傅欠花花一次分享的证据(花花强烈要求贴上来的)
+
+
+四、生活中的点点滴滴——黄师傅篇
+
+
+ 一张螺狮粉照片,一张游戏截图,这两张图片就代表我大部分的生活了,我也就是个喜欢吃点美食、打打游戏、敲敲代码的普通人。
+
+
+
+
+
+
+ 黄师傅力荐的他认为广州最好吃的《周成芝螺蛳粉》!
+
+
+
+
+
+
+ 谁懂十连双黄的概念?黄师傅玩几年原神了就这一次
+
+
+]]>
+ 从积极参与社区开源任务,到加入飞桨成为 (练习生) 实习生,到最终正式成为飞桨研发团队的一员。以兴趣为起点, 黄济懿师傅 将我们展示了一条通往职业的道路,希望他的故事能够激励所有对开源充满热情的开发者们。接下来,原神启动 🚀!
+
+
+
+一、前言
+黄师傅是一个地地道道的江西人,喜欢吃辣🌶️🌶️🌶️。他本科研究生都就读于广州的华南理工大学,现为电子信息专业,即将毕业前往 Paddle 工作。作为一名研究僧,他在空余时间喜欢吃吃美食或者玩玩游戏,像是原神/LOL/金铲铲之战 (各位要是也在玩,可以找黄师傅哦~黄师傅求大佬带带!!)。
+
+偷偷告诉你们:黄师傅最近的主线任务就是毕设,请务必多找他打游戏让他延毕(不是)
+
+去年 11 月,他出于对深度学习框架的底层实现的兴趣,联系花花加入了快乐开源群。在这一年里,他陆续完成社区里各项开源任务以熟悉 Paddle 框架,期间他也把握住了来飞桨实习的机会,他不断积累开发经验,不断加深对 Paddle 的理解,最终,他通过了飞桨团队的面试,成功拿下了飞桨校招 offer!
+黄师傅曾说:"我将继续在飞桨开源活动完成一些任务,希望能够学到更多的同时也能为飞桨的建设做出小小的贡献"。事实上,黄师傅曾分别参与了 PHI 算子库独立编译 、算子定义自动生成 ,Fluid Kernel 函数式改造 等多个快乐开源活动项目以及飞桨框架护航计划,到目前为 Paddle 贡献了 100 多个 PR。抛开实习生和正式员工的身份,黄师傅自身也是飞桨社区的自发贡献者和推动者。接下来,就让我们来瞅瞅黄师傅的精彩 Paddle 之旅吧!!
+
+原神,启动!!(请读者自行脑补 BGM)
+
+
+二、采访内容
+
+
+介绍一下自己吧,黄师傅!(●'◡'●)
+黄师傅: 我的 AI Studio 和 GitHub 的账号是 huangjiyi ,也是我名字的全拼(黄济懿)。
+
+
+可以简单和大家分享一下你生活中有什么兴趣爱好吗⊙o⊙(游戏、旅游、运动等等)?
+黄师傅: 我就是个死宅,平时就是打打游戏,刷刷 B 站,出门也就是找点好吃的。
+
+
+听说你本科研究生都在华南理工大学,你们学校周围有什么好吃的啊?🍔🍟🍿🥯🥪🥗🎂🍬🍹🍉
+黄师傅: 因为在华工太久学校食堂已经吃腻了,我会经常出校找点吃的,但活动范围有限,学校周边我吃过比较好吃的不多,就川菜小炒、麻辣香锅、鸡公煲、螺狮粉、泰国菜这些。
+
+
+我了解到你平时有在玩 LOL,那么如果把 Paddle 比作一个英雄🦸,你觉得它最像谁?为什么嘞?
+黄师傅: 我的答案是维克托 ,我的想象力有限,我只是觉得维克托的技能是会进化的,而 Paddle 也是在不断进化(更新)和扩展的,另外在维克托的背景故事里,他发明了很多具有智能的机械,比如蒸汽机器人,这和我们用 Paddle 来做的事比较相关,我只能想到这么多了。
+
+
+
+
+
+
+ 维克托
+
+
+
+
+你在加入飞桨开源群之前对 Paddle 的了解是什么样的?有没有听说过一些关于 Paddle 的传闻或者故事?
+黄师傅: 我在加入飞桨开源社区之前,我主要是一个用 PyTorch 跑深度学习实验的研究牲,对 Paddle 的了解也是和 PyTorch 类似的深度学习框架。关于 Paddle 的传闻的话像是国内最早开源的深度学习框架,以及国内最好的深度学习框架。
+
+
+你第一个在 GitHub 上完成的 PR 是关于什么的呢?在 PR 的过程中你遇到了什么难题吗?
+黄师傅: 我第一个在 GitHub 上完成的 PR 是 PHI 算子库独立编译 开源活动的一个子任务,只需要进行简单的代码替换,没有遇到什么难题,只是第一次改这么大项目的代码有点担心会不会改出什么问题。
+
+编者注✍️:【PHI 算子库独立编译 】是飞桨开源社区的快乐开源活动之一~我们社区有很多类似的、名字听起来很高大上但实际上难度不大的开源活动
+
+
+
+你觉得 Paddle 相比其他深度学习框架有什么优势?可以举个例子么?
+黄师傅: 其他深度学习框架我主要使用过 PyTorch,从用户的视角来比较的话,Paddle 具有丰富的中文文档,包括一些 API 文档和框架开发的技术文档,同时在 AI Studio 上有很多开发者分享的基于 Paddle 实现的项目和以及开发心得可以参考,这些对于国内用户十分友好。另外 Paddle 还有很多开源的套件,用户能够使用这些套件更快地完成一些深度学习应用任务。
+
+
+飞桨的开源活动中,你完成的任务中有没有什么特别有趣或者有挑战性的项目?有没有什么技术难题让你觉得很兴奋或者很有成就感?
+黄师傅: 我参加过的很多关于框架开发的开源活动都比较有挑战性,期间遇到的一些困难主要是一些编译问题,然后在通过调试定位问题所在代码、弄清楚问题原因、最后解决问题的时候会比较有成就感。
+
+
+据了解,你接触 Paddle 已经有一年多,那么你最欣赏 Paddle 团队中的哪些特点或价值观?为什么?
+黄师傅: 我比较欣赏的一点是 Paddle 团队非常重视开源社区生态,这一点从丰富的社区活动可以看出来,社区开发者可以从中学习到很多东西同时能够获得丰厚的奖励。
+
+
+我记得你说过花花和涛姐给了你很多帮助,你觉得他们是怎样的人呢(分别说说🫶🫶)?为什么?
+黄师傅: 花花:飞桨最美运营,关键人家还很努力。
+涛姐:为了让开发者能一直有新鲜热乎的开源任务做操碎了心。
+
+编者注✍️:花花是飞桨社区顶尖运营,涛姐是飞桨社区顶尖研发。
+
+
+
+你是怎么获得去 Paddle 实习的机会的呢?
+黄师傅: 关于我如何获得去 Paddle 实习的机会,当时我刚开始做了一些开源任务,然后在和花花交流的时候以一种半开玩笑的语气问花花能不能去实习,结果没想到花花真的和涛姐提了,然后涛姐真的申请了,飞桨真的给我面试了,然后我面试也真的通过了,然后我就去实习了,一切都是这么突然。
+
+编者注✍️:其实目前已经有相当多的社区开发者,通过参与开源活动接触到 Paddle,并最终获得实习机会。另外,对于不方便线下实习的同学,我们也提供了远程实习的方案,可以了解往期【护航计划 】。
+
+
+
+在 Paddle 实习的时候,你是否参与了某个具体项目的开发?可以分享一下你在项目中的具体角色和贡献吗?
+黄师傅: 我在实习期间刚开始是接着之前在社区参加的 PHI 算子库独立编译 开源项目,完成剩下的一些比较困难的任务,花了一个多月的时间完成,剩下的大部分时间参与了结构体 Kernel 注册统一 这个项目,期间也会接到一些其他小任务,一共实习了 3 个月吧,基本状态是要我干啥干啥,不会的就问。
+
+
+你认为实习那段时间你最大的收获是什么?你认为这段实习经历对你以后的职业生涯规划有起到什么影响?
+黄师傅: 收获很多,体验到了与在学校实验室不同的工作氛围,认识了一些研发大佬,深入了解了 Paddle 的一些机制,积累了一些编译调试和解决问题的经验。在 Paddle 的开源经历和实习经历让我找工作的目标从算法工程师转向了开发工程师,相比于具有不确定性同时很多时候凭借直觉的深度学习算法研究或者应用工作,我发现我更喜欢逻辑性更强且大多数问题都能找到原因的开发工作。
+
+
+最后也恭喜你拿到 Paddle 的 offer 🎉,对于同样有志加入 Paddle 团队的学生党,你可以分享一些建议议、经验或者成功路径吗?
+黄师傅: 我感觉我能拿到飞桨 offer 很大一部分原因是我在飞桨的实习经历和参加了一些开源活动,所以我的建议是在学习技术的同时多参加飞桨的开源活动,或者有机会去飞桨实习。
+
+
+
+
+
+
+ 黄师傅的校招 offer 部分截图
+
+
+三、“著名平台——虎扑评论”专区
+这次,我们邀请了一些和黄师傅有过合作经历的朋友们(以及实习期间的导师🐶),贡献一下和黄师傅相关的故事,或者他们对黄师傅的评价~以下均为真心话,请放心看!
+
+编者注✍️:黄师傅有些社恐,所以认识的社区朋友不多,大家正好可以借此机会认识一下。
+
+
+
+
+ 我觉得黄师傅是运气真好,类似张无忌,各种捡到宝,当然实力也是重要的。他刚来的时候其实对深度学习框架基本上不了解,然后我们快乐开源刚好放了第一个大任务-phi算子库(解决 CMake 依赖不需要懂深度学习框架)。然后他做啊做,问我们有没有机会来实习,当时 hc 太太太少了,但我们刚做起来,就给他申请,然后他就开挂了
+
+
+
+
+
+ 这位同学的工程素养很高,学习能力很强,经常超预期推进项目,最近独立完成高难度项目:飞桨 Flags 工具库建设,开源成果丰硕。另外也是原神大佬,工作累了还能带你打游戏,梦幻队友。
+
+
+
+
+
+ 原神60级大佬!还欠我一次开源社区分享,请记得!
+
+
+
+
+
+
+ 黄师傅欠花花一次分享的证据(花花强烈要求贴上来的)
+
+
+四、生活中的点点滴滴——黄师傅篇
+
+
+ 一张螺狮粉照片,一张游戏截图,这两张图片就代表我大部分的生活了,我也就是个喜欢吃点美食、打打游戏、敲敲代码的普通人。
+
+
+
+
+
+
+ 黄师傅力荐的他认为广州最好吃的《周成芝螺蛳粉》!
+
+
+
+
+
+
+ 谁懂十连双黄的概念?黄师傅玩几年原神了就这一次
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/2023-os-report
+ https://pfcc.blog/posts/2023-os-report
+ Sat, 02 Dec 2023 00:00:00 GMT
+ 什么是开源项目和开源社区?国内活跃度 Top 的开源社区,都有哪些有趣的人和事?开源社区之于开源项目有何重要意义?
+
+开源项目(Open Source Project),顾名思义是指开放源代码的可以被公众使用的软件项目,在开源合规的基础上,其他开发者可以对软件进行使用、修改和发行。基于「共建共治共享」的开源理念,许多开源项目汇聚了一批拥有共同兴趣爱好的开发者,形成了一个个独特的开源社区(Open Source Community)。据第三方数据显示,飞桨开源社区已成为国内 Top 的开源社区,作为社区维护者,我们做对了什么?
+1. 飞桨开源数据一览
+
+2. 整体飞桨平台的情况
+来一段官方介绍:
+飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集核心框架、基础模型库、端到端开发套件、丰富的工具组件、星河社区于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨在业内率先实现了动静统一的框架设计,兼顾科研和产业需求,在开发便捷的深度学习框架、大规模分布式训练、高性能推理引擎、产业级模型库等技术上处于国际领先水平。
+飞桨端到端自适应混合并行训练技术以及压缩、推理、服务部署的协同优化,高效支撑以文心一言为代表的文心大模型的生产与应用。
+IDC 发布的 2022 年中国深度学习框架和平台市场份额报告显示,百度稳居中国深度学习平台市场综合份额第一。中国信息通信研究院《深度学习平台发展报告(2022)》指出,飞桨已经成为中国深度学习市场应用规模第一的深度学习框架和赋能平台。
+当前飞桨已凝聚 800 万开发者,基于飞桨创建 80 万个模型,服务 22 万家企事业单位,广泛服务于金融、能源、制造、交通等领域。
+截至 2023 年 8 月,飞桨开源社区累计提交 Commits 超过 93 万次,以 PR 或 ISSUE 提交形式的开源贡献者超过 18000 人。
+3. 谁开发了飞桨
+BAIDU Contributors :专职的研发部门(深度学习技术平台部),及非专职的其他部门的工程师。
+尽管并没有一种特定的方法来识别某位 contributor 是否是百度的雇员,但你依然可以从 github profile 或者 author email 中来找到大量活跃的百度工程师的身影。
+Corporate Contributors :NVIDIA、INTEL、昆仑芯、寒武纪,等等多家硬件公司的专职工程师。
+翻看AUTHORS.md 文件,或者查看飞桨的代码仓库的 commits log,你总能看到来自于这些硬件公司的优秀的工程师的贡献。(小彩蛋:你甚至能找到 intel 工程师们的一张合照)
+Individual Contributors :来自高校的学生及来自企业的工程师在业余时间的贡献。
+
+我们今天对开源社区及开发者的讨论,会聚焦到 Individual Contributors 群体。当前,个人贡献者群体已经成为飞桨开源社区必不可少的研发力量,在提升开源项目影响力、社区活跃度、扩大开源声量方面,更是有着十分重要的意义。
+4. 社区开源贡献为飞桨带来了什么
+这是一些 2023 年至今社区开发者为飞桨核心框架做出的代码贡献合辑,可以看到从工程效能优化、文档体验提升,到飞桨内核十分重要的 PHI 算子库独立编译,社区开发者都做出了非常重要的贡献。值得一提的是,飞桨 2.4 版本中发布的 API 有三分之一是由社区开发者完成的,到飞桨 2.5 版本,新增的 API 贡献几乎都来自社区开发者。
+
+除此之外,在飞桨的端到端开发套件 PaddleOCR、PaddleClas、PaddleDetection、PaddleSeg,以及大模型套件 PaddleNLP、PaddleMIX 中,社区开发者贡献了许多 SOTA 的算法模型、训推一体 pipeline、tutorials&demo,与飞桨团队共同打磨易用的深度学习框架与工具组件。
+这里可以查看更多进行中和已结项的项目:https://github.com/orgs/PaddlePaddle/projects/7
+5. 参与飞桨社区的开源贡献会获得什么
+技术实力与开源影响力提升
+
+飞桨社区开源项目覆盖深度学习框架、模型、应用全领域,你想提升的技术,这里全都有;
+与飞桨产研团队紧密沟通协作,和飞桨共同成长;
+开源贡献行为全部公开可查,飞桨社区丰富的开源贡献活动助你树立个人开源影响力;
+鼓励社区孵化项目,你可以在这里找到志同道合的小伙伴,把想法变成现实。
+
+荣誉证书、现金激励与工作机会
+
+颁发开源贡献证书、社区曝光度、奖状徽章等,致敬每一位贡献者;
+举办丰富社区赛事,提供奖金/奖品激励与权威机构认证;
+开源社区贡献者在招聘中会被优先考虑。
+
+硬件支持
+
+提供线上 V100 开发环境,随时可以开发与编译。
+
+
+6. 飞桨快乐开源:Grow Together, and Have Fun
+先来讲一个故事。
+大概在 2022 年 12 月份的时候,通过代码扫描工具发现了飞桨框架的 100 多个小 bug 🐛。说是 bug,但是问题真的很小,诸如堆栈溢出(stack overflow)、UFA 非法地址访问(UFA illegal address access)、Python IndexError、空指针(Null pointer)、除 0 错误(divide by 0),大部分 bug 可以被很少的一行或几行代码 fix。
+
+bug 发现了不能不修,怎么修呢?我们把目光放到了开源社区。这是一批极易上手的开发任务,开发者可以在不熟悉框架的情况下完成 bug 修复任务,获得满满成就感;时间上来看,刚好赶上高校学生们放寒假,有大量的空闲时间参与开源活动;研发人力方面,我们协调到 1 个完整人力来支持 code review,保障 bug 修复质量。天时地利人和,我们把这一批 bug 修复任务包装成了一个社区活动 —— 飞桨快乐开源:提 PR 领取新年礼物 🎁。
+这个活动一经推出,立马受到了社区开发者的广泛关注和参与,出乎我们意料的是,看到了很多老朋友和新面孔的 PR 提交,有些人(点名 DrRyanHuang )嘴上说着「年后再说」,表情包做了不少,背地里 PR 也提了不少。
+
+更为经典的是一名社区开发者 RedContritio 在除夕夜连着提了 18 个 PR,因为那个时间点大家都在欢度春节,没有人和他抢,导致他的 PR 编号都是连号的,由于 PR 质量过高,最后也顺利的全部完成了合入 ✅,给了我们一点小小的开源震撼 。
+
+后来,快乐开源活动就顺理成章的成为了飞桨开源社区长期有效的日常活动,旨在通过简单易上手的开发任务,帮助开发者渐进的了解飞桨、参与开源。我们会按季度更新礼品清单、统计参与活动的开发者信息,并完成礼品邮寄。随着开发者参与热情越来越高,礼品也从游戏键盘、无线耳机升级到了 PS5、iPad、Apple Watch 等。
+在 2023 年 Q4,快乐开源活动完成了一次全新升级 🔥,任务范围从 Paddle 框架扩展到科学计算 PaddleScience、大模型套件(PaddleMIX、PaddleNLP)、端到端开发套件(PaddleOCR、PaddleSeg、PaddleClas、PaddleDetection)、动转静孵化项目 PaddleSOT 等更多飞桨生态开源项目,上线「✨ 热身任务」、「🎯 命题任务」与「💡 开放任务」 ,使用「HappyOpenSource 」 标签追踪相关的 issue 与 pr,我们确立了「 Grow Together, and Have Fun! 」为口号,快乐开源活动逐渐做大做强~
+更多信息可访问活动 issue 了解:https://github.com/PaddlePaddle/Paddle/issues/56689
+
+Community over Code 是 Apache 软件基金会的项目中最广为人知的理念。尽管在社区的沟通方式上,跟 ASF 所鼓励的用邮件组来沟通不一样,飞桨社区的绝大部分沟通方式是在大家熟悉的微信群里,但从解决 「Good First Issue 」 加入进来的社区开发者们, 在熟悉了社区之后,同样可以迸发更大的能量。
+再来讲一个故事。
+作为源自百度的开源项目,飞桨的运营团队通常可以接触到一些第三方办赛的邀请,这次找到我们的是第六届『中国软件开源创新大赛』,这是一个由中国计算机学会(CCF)主办,西北工业大学、绿色计算产业联盟、CCF 开源发展委员会联合承办的大型赛事,联合百度、清华大学等企业单位以及多所高校共同设置赛题,飞桨参与了『开源任务挑战赛』赛道,发布了 16 道具有一定难度的、需要参赛选手自行拆解与项目管理的开源任务。我们称其为 「HappyOpenSource Pro 」 ,快乐开源进阶版 。任务详情:飞桨框架任务挑战赛(上) 、飞桨框架任务挑战赛(下)
+让我们惊喜的是,这些即使是内部研发团队都觉得棘手的开发任务,被一批高水平的开发者完美的解决了。以飞桨赛道一等奖项目:赛题五:将 xdoctest 引入到飞桨框架工作流中 为例,项目涉及修改 1400+ API,数十万行代码,24 位开发者近 3 个月协同工作,队长 megemini 成长为 Reviewer,800 万飞桨用户从中受益。
+
+更多顺师傅的专访可以查看往期 blog:https://pfcc.blog/posts/shun-story
+这件事情让我们愈发相信开源的力量 ,即使是如此历史包袱重、项目管理难、工程量巨大的开源任务,在找到合适的 owner,提供足够资源支持的情况下,都是有可能被社区开发者们联合解决的。
+正在进行中的第五期飞桨黑客马拉松 PaddlePaddle Hackathon 5th ,是飞桨开源社区一年两度的大型编程活动。
+第五期活动发布三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营,上线当天即获得了开发者的广泛报名和参与,目前总体任务认领率 100%,核心框架任务提交率接近 90%,许多开发者直呼「卷出新高度」。
+
+由社区开发者 Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,极大提升了社区活动的自动管理水平。在护航计划集训营中,学员 MarioLulab 兼任助教,搭建开源项目用于管理开发进度与周报提交,欢迎大家前往围观 ➡️ PFCCLab/Camp 。
+与此同时,配套直播课程经过多期打磨,已形成完整的飞桨开源贡献视频资料,并发布在星河社区课程专区 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区 ,跟着飞桨导师,从这里开始你的黑客松之旅吧 💕
+更多黑客松活动情况,可查看 blog:PaddlePaddle Hackathon Episode01 、PaddlePaddle Hackathon Episode02
+8. 飞桨开源社区有哪些玩法
+如果你正在寻找一个开源项目做贡献,或有意向加入一个开源组织 or 社区,我们非常欢迎你来飞桨开源社区玩,与我们一起执桨破浪,让深度学习技术的创新与应用更简单 。
+你可以 follow 这样的路径:
+社区活动
+入门:快乐开源、启航计划
+「快乐开源活动」 旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。如果你是刚接触飞桨 or 开源社区的小白,我们十分推荐你从打卡任务开始:
+
+任务一:修改飞桨文档 ,完成你的第一个 PR,练习 git 操作,熟悉 GitHub 开源协作方式
+任务二:拉取 Paddle 代码,完成本地编译 ,让你对 Paddle 代码有更深入的理解,便于参与后续的框架开发任务
+任务三:在 PaddleMIX 中跑通 Stable-Diffusion 训练推理 ,你会快速掌握飞桨开发套件的使用,便于参与后续的套件开发任务
+
+详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/56689
+「启航计划」 是 飞桨社区 发起的远程项目,也是「护航计划」的前置活动(不了解护航计划请看这里 ➡️ 护航计划说明 )。我们以集训营 的形式,鼓励开发者积极参与快乐开源活动 ,以此提升自己的代码实践能力。你可以把它当做【HACKATHON 预备营】,在这里找到志同道合的小伙伴,一起开发,一起成长。
+详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/58497
+进阶:黑客松、护航计划
+「PaddlePaddle Hackathon 飞桨黑客马拉松」 是飞桨社区的大型编程活动,鼓励社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践 ,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献。适合具备一定开源贡献基础和代码基础的朋友前来挑战自我~~
+第五期黑客松活动火热进行中,详情可查看 issue:
+
+社区组织
+技术交流组织:飞桨核心框架贡献者俱乐部 PFCC
+PFCC,全称 Paddle Framework Contributor Club,飞桨核心框架贡献者俱乐部 ,是一个有兴趣、正在、或者已经为飞桨开源框架 做开源贡献的贡献者成立的虚拟组织,在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。
+目前,PFCC 已汇聚 100+ Contributor,6 名贡献者成长为 Committer,维持双周一次技术分享会,累计召开 30+ 次,产生上百个议题(详见会议纪要 ),与飞桨产研团队探讨飞桨框架硬核技术难题,发起联合开发项目。
+更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pfcc
+社区治理组织:飞桨社区开源发展工作组 PPOSDWG
+PPOSDWG,全称 PaddlePaddle OpenSource Development Working Group,飞桨社区开源发展工作组 ,为加强飞桨开源社区的透明治理,提升社区成员的参与感和社区认同,决策飞桨社区的关键事项与治理策略而成立。
+2023 年 11 月 16 日,飞桨开源社区举行线上投票选举与成立仪式,39 名合格投票人完成投票,选举产生第一届工作组成员。
+更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pposdwg
+9. 写在最后
+我们始终相信,开源社区因为人的汇聚而变得有意义。在这一年中,我们参与和见证了许许多多社区故事,为每一个精彩的 PR 鼓掌喝彩,为每一次「我们 paddle 如何如何」的句式感动,向每一位热爱开源的开发者和研发工程师致敬。
+在飞桨开源社区,我们结识了许多有趣可爱的人,程序员不再是一个标签化 🏷 的群体。他们中,有「摸资本主义的鱼,建设社会主义框架」的 Intel 工程师 jinyouzhi ,有社区 Committer 手搓框架入职百度的全栈 001 喵喵喵 SigureMo ,有「水遍」所有开发任务群强势进入贡献者排行榜的 002 张师傅 Liyulingyue ,有获得硬件伙伴高度称赞的 3w+ 部署代码贡献达人 Zheng-Bicheng ,...,甚至还有五年级的小朋友 zhiheng-liu 刷新飞桨 Contributor 最小年龄记录。
+因此我们萌生了创建这个 blog 网站的想法,由全栈工程师 001 搭建,代码开源在 GitHub,记录飞桨开源社区的故事,欢迎各位开发者投稿呀~~ https://pfcc.blog/
+
+👆一些流传度很广的开发者自制表情包👆
+「Shaping PaddlePaddle Future with You,与你一起定义飞桨的未来!」 从来不只是一句口号,就是在这日复一日的平凡生活中,在一行行代码的设计与运行里,在一次次前沿技术的交流与碰撞下,一些改变正在悄然发生。期待飞桨与你共同成长,让我们一起打造易用的深度学习框架与工具组件,在开源的世界走得更远!
+]]>
+
+ -
+
+ https://pfcc.blog/posts/hackathon-5th-episode02
+ https://pfcc.blog/posts/hackathon-5th-episode02
+ Fri, 01 Dec 2023 00:00:00 GMT
+ 向大家快速介绍飞桨黑客松第五期开展以来的进展(11.4-12.1)
+
+为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 8 周的进展速览如下:
+
+开源贡献个人挑战赛 :发布 110 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,全部任务完成认领,72 个任务提交作品,32 个任务已经完成 ,框架方向提交率近 90%,科学计算方向提交率 70%+,进展超出预期,感谢各位开发者的积极参与,感谢各位导师的及时 review。
+大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 22 名开发者产出基于 EB SDK 的应用 34 个,均已部署至应用中心 。
+飞桨护航计划集训营 :共有 22 名社区开源开发者在社区导师的指导下,进行飞桨开源项目开发。 按期完成了两期双周报提交,完成了 3 期技术分享,成果全部沉淀到开源社区 。
+
+赛道一:开源贡献个人挑战赛
+进度看板
+| 任务方向 | 任务数量 | 提交作品 / 任务认领 | 提交率 | 完成 | 完成率 |
+| :
+]]>
+ 向大家快速介绍飞桨黑客松第五期开展以来的进展(11.4-12.1)
+
+为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 8 周的进展速览如下:
+
+开源贡献个人挑战赛 :发布 110 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,全部任务完成认领,72 个任务提交作品,32 个任务已经完成 ,框架方向提交率近 90%,科学计算方向提交率 70%+,进展超出预期,感谢各位开发者的积极参与,感谢各位导师的及时 review。
+大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 22 名开发者产出基于 EB SDK 的应用 34 个,均已部署至应用中心 。
+飞桨护航计划集训营 :共有 22 名社区开源开发者在社区导师的指导下,进行飞桨开源项目开发。 按期完成了两期双周报提交,完成了 3 期技术分享,成果全部沉淀到开源社区 。
+
+赛道一:开源贡献个人挑战赛
+进度看板
+
+
+
+任务方向
+任务数量
+提交作品 / 任务认领
+提交率
+完成
+完成率
+
+
+
+
+热身赛
+11
+10 / 11
+90.91%
+4
+36.36%
+
+
+框架 API 开发任务
+31
+28 / 31
+90.32%
+6
+19.35%
+
+
+框架其他开发任务
+16
+15 / 16
+93.75%
+13
+81.25%
+
+
+科学计算模型复现
+11
+8 / 11
+72.73%
+4
+36.36%
+
+
+套件开发任务
+24
+6 / 24
+25.0%
+3
+12.5%
+
+
+合作伙伴任务
+17
+5 / 17
+29.41%
+2
+11.76%
+
+
+
+赛道亮点
+
+尽管本期黑客松整体难度较往期提升,但社区开发者表现出了极大的专业能力和热情,任务已经 100% 被大家认领;
+框架方向提交率近 90%,科学计算方向提交率 70%+,均高于往期黑客松。
+
+参与提示
+
+在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率依然较低,欢迎社区的开发者选择这些任务来挑战。
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
+赛道二: 大模型应用与创意赛
+部分应用展示
+我们收到了 270 人报名,提交了 34 个应用,在这里节选部分有趣的应用,欢迎大家在线体验。
+
+赛道亮点
+
+社区开发者们基于文心大模型的 SDK: ERNIE Bot SDK ,提交了种类多样,涵盖多领域作品,充分探索了使用文心大模型能做到的创意和创新。
+
+参与提示
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
+赛道三:飞桨护航计划集训营
+活动进展
+集训营的同学已经完成了两次开源开发的双周报: WeeklyReports 2023.10.25~2023.11.07 、 WeeklyReports 2023.11.08~2023.11.21 和三次技术分享 。
+集训营亮点
+
+参与提示
+
+欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
+彩蛋 🎊: 欢迎大家线下来见面
+本周六(12 月 2 日)14:00 - 17:00 在 北京 798 举行飞桨开源社区 meetup,报名问卷:https://paddle.wjx.cn/vm/m1OLk4E.aspx# ,欢迎大家来聊天,飞桨定制咖啡等你打卡,梦师傅和花花在咖啡厅等着大家~
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/chuan-story
+ https://pfcc.blog/posts/chuan-story
+ Tue, 28 Nov 2023 00:00:00 GMT
+ “桨声川水悠悠过,长路漫漫风光留”,这次我们要采访的是小伙伴们都熟悉的励志富哥儿——川川师傅 ✨
+
+
+
+一、前言
+
+按川川要求,以下均以 🍢🍢 代称川川。
+
+川川目前是一名平平无奇的 大学生🧑🎓,也是 Paddle 社区里的一名资深开发者。他精通 (🍢🍢: 我没有,不是,别瞎说🐶)Java、Python、C++ 等多门编程语言,还掌握 Flutter、Android、Vue 等工具,可谓多才多艺!
+川川加入 Paddle 社区后,从最简单的文档修改任务开始,到参与快乐开源、熟悉 paddle 框架,到参与充满难度和挑战的护航计划,到最终自己能够独立的拆解问题、发起社区项目(ruff 升级),我们亲眼见证了他一步步的成长 (怎么有种养成系的感觉) 。
+
+在提升自我外,川师傅也多次热心地帮助新伙伴们解决 bug、回答问题。(所以大家如果有问题,可以随时在群里骚扰他哦 )
+
+然而当抛开“Paddle 社区开发者”“学生”等形象标签后,单独地看川师傅自身的人生经历,可谓是非常的励志 。你敢相信,川师傅是从中专、大专一路读上来的吗?川师傅的经历像是一本精彩绝伦的探险故事集。接下来让我们来读读他的探险之旅吧!
+
+
+
+
+!!!注意!!!上图为川川师傅の帅照,小伙伴们可以截图保存哦!😝😝😝😝
+
+二、采访内容
+
+
+介绍一下自己吧,川川师傅 o(_ ̄3 ̄)o !
+🍢🍢: 我的 AI Studio 账号是 gouzi,GitHub 的账号是 gouzil !o( ̄ε ̄_)o
+
+
+作为一个 21 岁青春男大,平时有什么兴趣爱好?听说你喜欢出去玩,你在福建有什么推荐给大家打卡的景点么?哈哈~
+🍢🍢: 爱好当然是出去走走玩玩,感受一下人间烟火气。打卡的话当然是福建的省会厦门啦🐶,在十里长堤跟着男女朋友看看夕阳,鼓浪屿的小巷子。平潭岛也挺不错的(🍢🍢没去过但是朋友圈已经发爆了,图中为蓝眼泪时期,需要特定的季节,且肉眼看不出来这种效果,需要相机长曝光,大家别跑空咯)。
+
+
+
+ 厦门杏林大桥(来源: 川川相册)
+
+
+
+ 十里长堤(来源: 川川相册)
+
+
+
+ 鼓浪屿(来源:厦门文旅公众号)
+
+
+
+
+ 平潭(来源: 新华社 2023/04/29 )
+
+
+
+据我了解,你在初中时就用易语言写了个安卓 APP 给奶奶使用,你能详细讲讲这个 APP 的设计目的和功能么?你当时学习了些什么技术才把这个 APP 做成?那又是通过哪种方式(看书?上网学习?视频?)学习的呢?
+🍢🍢: 1️⃣ 其实设计这个 APP 是因为奶奶不识字,但是又需要使用手机(而正常手机打电话都是看人的名字进行拨打)。这个 APP 可以理解为一个默认桌面,手机解锁后 APP 就打开,打开后是像下图一样的手机联系人的照片,其实就是把联系人名字变成对应的他们的图片,这样尽管奶奶不识字,也可以看照片进行操作了!🐶 2️⃣ 当时学了啥技术: 其实也没具体的学,因为易语言是中文,有一定的思维逻辑就能实现啦。3️⃣ 通过哪种方式: 翻翻编译器自带的易语言说明(那时候 bilibili 还没有那么火,也没有啥书,只有一台能跑安卓模拟器的电脑)。
+
+
+
+
+
+在 16 岁左右,你就陆陆续续自学了 Python、Java、C,后来又自学了 Go、Android 等等,在这个自学过程中你遇到了那些困难,又有想过放弃么?
+🍢🍢: 遇到困难当然是有的,很难想象 C 我看了半年视频才学会的(有部分原因是我比较拖, 学习一门新的语言时长最好不要超过两周, 因为后续的项目会慢慢的补上来的)。每次接触一门新的语言都会对计算机有更深的理解,理解不同语言为什么要这么做,这么做的优缺点,这也是不断学习的动力吧。想过放弃么: 没有,我还挺感兴趣的,兴趣是最好的老师。
+
+
+能简单聊聊你的这几年的学习经历么?
+🍢🍢: 下图最右侧那一列就是学习的顺序啦(学那么多真没啥用,学好一个精通它就行)。也没啥经验,顺其自然就好啦,等学完技术应该也更新了。最快的方式就是跟着项目走,不断的优化它 (最后就会发现:我写的什么玩意,要不要重构🐶) 。不过倒是有几个提升比较大的时间段,一个是去参加了云计算比赛,让我会了 linux 和 docker 这些。一个是实习的那一年,让我整明白了网站这一套(B/S,C/S)。
+
+
+
+现在社区开发者都认为你的编程能力很强,和学历形成了很大反差,能透露一下当时是为什么会上中专呢?是因为偏科吗?
+🍢🍢: 不是偏科啦,我差的很平均🐶。顺带说一下厦门的初升高录取率为 45%,现在好些了 50%,卷不动卷不动,当然更多是因为我比较菜。
+
+
+事实上在目前的舆论环境里,“专科生”是一个很遭受非议的标签😮💨,而作为一个亲历者,你内心的是怎么面对的呢?你当时又做了哪些方面的努力?
+🍢🍢: 关于这个标签的话,我只想说:你说的对。没啥必要在乎别人的看法,做自己热爱的事情就好啦。
+
+
+作为目前考上本科的计算机应用技术专业的学生,你对未来的职业发展有怎样的规划和期望✊✊✊?
+🍢🍢: 我更喜欢做一些底层的工作,不太喜欢做应用层。规划:入职百度,重构 paddle 。
+
+
+作为厦门领航团的一员,你当时是什么契机接触 Paddle 社区的?在 Paddle 社区做的第一个开源项目是什么?
+🍢🍢: 说到这个契机啊,非常简单,你的上司是厦门领航团团长就行。第一个开源项目当然是我们孙师傅(@sunzhongkai588 )的 docs 啦,当然非常感谢佳维姐姐(@dingjiaweiww )和梦师傅(@Ligoml )的鼓励和协助我完成了在 paddle 的第一个 pr。
+
+
+在社区里如何和其他开发者进行互动的?有没有什么特别有意思的经历或故事?
+🍢🍢: 我一般有碰上问题就出来回答啦,或者一些技术讨论。特别的故事:五年级的小朋友叫我叔叔算嘛
+
+
+
+对于 Paddle 框架护航计划,可以分享一下你的面试经历和感受吗?你觉得到达什么水平可以通过护航计划的面试?
+🍢🍢: 经历的话,放心研发大哥不会难为你的,真诚就行。感受 emmm,大家一定要提前准备啊,刷刷算法什么的。什么水平 emmm,我也不太清楚,但是最好是熟悉 padlle,或者你的能力超级无敌强。
+
+编者注✍️:「护航计划」可以简单理解为飞桨的远程实习项目,可参考 护航计划集训营说明
+
+
+
+参与护航计划时,有什么不一样的感受吗?实际开发过程有没有遇到困难,是怎么解决的?
+🍢🍢: 最大的感受就是,终于从应用层转向了框架层。困难是肯定有的,也有非常多不会的,但是这没关系,问研发大哥就行。就像昆昆(@2742195759 )说的: 你尽管问,我就是你的文档。
+
+
+在 Paddle 社区中,你参与的哪个项目(或活动)你印象最深刻,能简单描述一下这个项目么?这个项目让你收获了什么?
+🍢🍢: 印象最深的项目是下一个项目,下一个项目可以把之前项目的经验集结起来,也可以学到一些新的知识。当然 PaddleSOT 印象也挺深的,这也是我护航计划的项目。收获更多的是技术的进步吧。有时候看看喵喵(@SigureMo )的修改会发现,噢原来还能这么写。
+
+
+
+对于深度学习领域,你有哪些想法和研究方向?目前有没有感兴趣的方向?
+🍢🍢: 我其实更多的还是喜欢框架层,怎样才能让整个框架跑的更快,占用更低,更加的易用化。
+
+
+发挥一下想象力,如果将深度学习比作一种食物,你觉得它会是什么?为什么?
+🍢🍢: 可能是米饭吧,喂的越多越有力气,跑的越快,力大砖飞。
+
+
+听说你使用飞桨解决过很多企业实际问题时,你遇到过最有趣的案例是什么?那么你是如何应用深度学习技术解决这个问题的?
+🍢🍢: 我实习这个企业吧,他刚尝试深度学习,所以一般调调 API 就行了,更多的是怎样去分配资源,做到效率最大化 (我司全是 1050 的卡,我能咋办,我也很绝望啊) 。
+
+
+除了深度学习,你还对其他领域感兴趣吗?有没有想过将深度学习与其他领域结合,创造出一些令人惊喜的应用?
+🍢🍢: 其他领域其实有的,比如摄影和游戏,结合的话有想过,但是还没新建文件夹就不说了🐶
+
+
+如果你有机会和 Paddle 社区 or 深度学习领域 or 计算机领域 的一位顶级专家进行合作,你希望和他/她一起研究什么问题?为什么?
+🍢🍢: 这可就太多了,比如:不同语言的通信,怎么做到程序的相对安全,怎样去减少硬件之间的瓶颈。为什么 emmm,可能是因为自己对这方面感兴趣吧。
+
+
+如果让你形容一下你和 Paddle 社区的关系,你会怎么说?
+🍢🍢: 相互促进,互相成就 (更多还是 paddle 社区的大佬单方面带着我)
+
+
+最后,作为一个热情、励志的年轻人,你想对 Paddle 社区里的开源者们说些什么呢?
+🍢🍢: 放开那道题,让我来🐶
+
+
+三、“鲁迅之我确实说过这话”专区
+同样我们也邀请了一些和川川很熟悉的、有过合作经历的朋友们,贡献一下和川师傅相关的故事,或者他们对川师傅的评价~以下均为真心话,请放心看!
+
+
+
+
+
+ 和川川交流还算比较多,川川基本上有空都会帮你解决任何疑问,甚至是看代码。虽然是年轻的富哥,但很努力上进,甚至比孙师傅还努力🐶;总体来说算很善良的小哥,教过我很多东西。希望能和他一起学习成长,向他多学习请教一些代码之道,早日都一起为中国开源社区多做一些更有价值的事情。 在我无数个老师中,他肯定是我印象深刻的老师之一。
+
+
+
+
+
+ 有幸在今年暑期上海 meetup 上认识了川师傅,很低调的技术大佬。在川师傅身上能看到对开源活动的热情,各大活动上都能看到川师傅的身影。希望以后还有机会和川师傅线下面基,迪迪小组再次出发!
+
+
+
+编者注✍️:迪迪小组是上海 meetup 期间,相约去迪士尼玩的小分队
+
+
+
+
+ 自川子参与第一期护航计划开始已经马上就要 6 个月了,我和川子也算是深度交流了 6 个月。从护航计划来看,川子始终保持十足的热情,在 PaddleSOT 那时候还是以开源任务的形式发放,但每次有任务川子都会第一时间认领。之后到现在动转静单测推全,我的 review 速度都赶不上川子提 PR 的速度了……此外川子涉猎甚广,在交流的过程中我也学到了很多东西,川子也会参加各种开源任务,你基本上可以在任何「角落」里看到川子的身影~
+
+ 川子这 6 个月也是成长了很多,从早期每个任务都需要细致沟通到现在发完任务基本就心照不宣了,也能独立完成很多任务了。比如 Ruff 的升级优化,目前川子对 Ruff 的了解程度已经仅次于我了,再比如 OpResult 方法的 patch 补全,以及动转静单测机制,基本都是川子独立完成的。对于大多数任务,现在我已经能放心地说:「川子,这个就交给你了」
+
+ 另外,「提前」说一下,川子贼有钱~
+
+
+
+
+
+ 我愿称川川为飞桨开源社区小天使
+
+
+四、特别栏目——爱在何方之川川相亲帖
+接下来,有请男嘉宾——小富哥儿川川来进行一段自我介绍✨。
+
+
+ 报菜名环节,身高179cm,体重65kg(±5kg),来自福建厦门,2002年出生,目前在福州读书,不抽烟,不喝酒。性格有点太温柔了,不太凶得起来。对陌生人有点社恐,熟悉了之后就好很多。有一点点宅,但不会非常宅,还是会出去走走(不然咋拍照片🐶)。有一点点强迫症,比如下面这张798的照片好像有点歪了。喔对了川川不会做饭。期望伴侣,可以稍微e一点,拉着我出去玩🐶。(🍢🍢: 咱就是说还有几个月才到22,也不至于这么着急吧🐶)
+
+
+有意者,请扫码加入快乐开源群,联系川川师傅(找头像即可)。
+
+
+
+彩蛋 🥚
+最后让我们欣赏一下川大摄影师的大作吧 📷
+
+
+ 北京 798 艺术区
+
+
+
+ 福州三江口大桥
+
+
+
+
+ 福州烟台山
+
+
+
+ 厦门中医院附近
+
+
+]]>
+ “桨声川水悠悠过,长路漫漫风光留”,这次我们要采访的是小伙伴们都熟悉的励志富哥儿——川川师傅 ✨
+
+
+
+一、前言
+
+按川川要求,以下均以 🍢🍢 代称川川。
+
+川川目前是一名平平无奇的 大学生🧑🎓,也是 Paddle 社区里的一名资深开发者。他精通 (🍢🍢: 我没有,不是,别瞎说🐶)Java、Python、C++ 等多门编程语言,还掌握 Flutter、Android、Vue 等工具,可谓多才多艺!
+川川加入 Paddle 社区后,从最简单的文档修改任务开始,到参与快乐开源、熟悉 paddle 框架,到参与充满难度和挑战的护航计划,到最终自己能够独立的拆解问题、发起社区项目(ruff 升级),我们亲眼见证了他一步步的成长 (怎么有种养成系的感觉) 。
+
+在提升自我外,川师傅也多次热心地帮助新伙伴们解决 bug、回答问题。(所以大家如果有问题,可以随时在群里骚扰他哦 )
+
+然而当抛开“Paddle 社区开发者”“学生”等形象标签后,单独地看川师傅自身的人生经历,可谓是非常的励志 。你敢相信,川师傅是从中专、大专一路读上来的吗?川师傅的经历像是一本精彩绝伦的探险故事集。接下来让我们来读读他的探险之旅吧!
+
+
+
+
+!!!注意!!!上图为川川师傅の帅照,小伙伴们可以截图保存哦!😝😝😝😝
+
+二、采访内容
+
+
+介绍一下自己吧,川川师傅 o(_ ̄3 ̄)o !
+🍢🍢: 我的 AI Studio 账号是 gouzi,GitHub 的账号是 gouzil !o( ̄ε ̄_)o
+
+
+作为一个 21 岁青春男大,平时有什么兴趣爱好?听说你喜欢出去玩,你在福建有什么推荐给大家打卡的景点么?哈哈~
+🍢🍢: 爱好当然是出去走走玩玩,感受一下人间烟火气。打卡的话当然是福建的省会厦门啦🐶,在十里长堤跟着男女朋友看看夕阳,鼓浪屿的小巷子。平潭岛也挺不错的(🍢🍢没去过但是朋友圈已经发爆了,图中为蓝眼泪时期,需要特定的季节,且肉眼看不出来这种效果,需要相机长曝光,大家别跑空咯)。
+
+
+
+ 厦门杏林大桥(来源: 川川相册)
+
+
+
+ 十里长堤(来源: 川川相册)
+
+
+
+ 鼓浪屿(来源:厦门文旅公众号)
+
+
+
+
+ 平潭(来源: 新华社 2023/04/29 )
+
+
+
+据我了解,你在初中时就用易语言写了个安卓 APP 给奶奶使用,你能详细讲讲这个 APP 的设计目的和功能么?你当时学习了些什么技术才把这个 APP 做成?那又是通过哪种方式(看书?上网学习?视频?)学习的呢?
+🍢🍢: 1️⃣ 其实设计这个 APP 是因为奶奶不识字,但是又需要使用手机(而正常手机打电话都是看人的名字进行拨打)。这个 APP 可以理解为一个默认桌面,手机解锁后 APP 就打开,打开后是像下图一样的手机联系人的照片,其实就是把联系人名字变成对应的他们的图片,这样尽管奶奶不识字,也可以看照片进行操作了!🐶 2️⃣ 当时学了啥技术: 其实也没具体的学,因为易语言是中文,有一定的思维逻辑就能实现啦。3️⃣ 通过哪种方式: 翻翻编译器自带的易语言说明(那时候 bilibili 还没有那么火,也没有啥书,只有一台能跑安卓模拟器的电脑)。
+
+
+
+
+
+在 16 岁左右,你就陆陆续续自学了 Python、Java、C,后来又自学了 Go、Android 等等,在这个自学过程中你遇到了那些困难,又有想过放弃么?
+🍢🍢: 遇到困难当然是有的,很难想象 C 我看了半年视频才学会的(有部分原因是我比较拖, 学习一门新的语言时长最好不要超过两周, 因为后续的项目会慢慢的补上来的)。每次接触一门新的语言都会对计算机有更深的理解,理解不同语言为什么要这么做,这么做的优缺点,这也是不断学习的动力吧。想过放弃么: 没有,我还挺感兴趣的,兴趣是最好的老师。
+
+
+能简单聊聊你的这几年的学习经历么?
+🍢🍢: 下图最右侧那一列就是学习的顺序啦(学那么多真没啥用,学好一个精通它就行)。也没啥经验,顺其自然就好啦,等学完技术应该也更新了。最快的方式就是跟着项目走,不断的优化它 (最后就会发现:我写的什么玩意,要不要重构🐶) 。不过倒是有几个提升比较大的时间段,一个是去参加了云计算比赛,让我会了 linux 和 docker 这些。一个是实习的那一年,让我整明白了网站这一套(B/S,C/S)。
+
+
+
+现在社区开发者都认为你的编程能力很强,和学历形成了很大反差,能透露一下当时是为什么会上中专呢?是因为偏科吗?
+🍢🍢: 不是偏科啦,我差的很平均🐶。顺带说一下厦门的初升高录取率为 45%,现在好些了 50%,卷不动卷不动,当然更多是因为我比较菜。
+
+
+事实上在目前的舆论环境里,“专科生”是一个很遭受非议的标签😮💨,而作为一个亲历者,你内心的是怎么面对的呢?你当时又做了哪些方面的努力?
+🍢🍢: 关于这个标签的话,我只想说:你说的对。没啥必要在乎别人的看法,做自己热爱的事情就好啦。
+
+
+作为目前考上本科的计算机应用技术专业的学生,你对未来的职业发展有怎样的规划和期望✊✊✊?
+🍢🍢: 我更喜欢做一些底层的工作,不太喜欢做应用层。规划:入职百度,重构 paddle 。
+
+
+作为厦门领航团的一员,你当时是什么契机接触 Paddle 社区的?在 Paddle 社区做的第一个开源项目是什么?
+🍢🍢: 说到这个契机啊,非常简单,你的上司是厦门领航团团长就行。第一个开源项目当然是我们孙师傅(@sunzhongkai588 )的 docs 啦,当然非常感谢佳维姐姐(@dingjiaweiww )和梦师傅(@Ligoml )的鼓励和协助我完成了在 paddle 的第一个 pr。
+
+
+在社区里如何和其他开发者进行互动的?有没有什么特别有意思的经历或故事?
+🍢🍢: 我一般有碰上问题就出来回答啦,或者一些技术讨论。特别的故事:五年级的小朋友叫我叔叔算嘛
+
+
+
+对于 Paddle 框架护航计划,可以分享一下你的面试经历和感受吗?你觉得到达什么水平可以通过护航计划的面试?
+🍢🍢: 经历的话,放心研发大哥不会难为你的,真诚就行。感受 emmm,大家一定要提前准备啊,刷刷算法什么的。什么水平 emmm,我也不太清楚,但是最好是熟悉 padlle,或者你的能力超级无敌强。
+
+编者注✍️:「护航计划」可以简单理解为飞桨的远程实习项目,可参考 护航计划集训营说明
+
+
+
+参与护航计划时,有什么不一样的感受吗?实际开发过程有没有遇到困难,是怎么解决的?
+🍢🍢: 最大的感受就是,终于从应用层转向了框架层。困难是肯定有的,也有非常多不会的,但是这没关系,问研发大哥就行。就像昆昆(@2742195759 )说的: 你尽管问,我就是你的文档。
+
+
+在 Paddle 社区中,你参与的哪个项目(或活动)你印象最深刻,能简单描述一下这个项目么?这个项目让你收获了什么?
+🍢🍢: 印象最深的项目是下一个项目,下一个项目可以把之前项目的经验集结起来,也可以学到一些新的知识。当然 PaddleSOT 印象也挺深的,这也是我护航计划的项目。收获更多的是技术的进步吧。有时候看看喵喵(@SigureMo )的修改会发现,噢原来还能这么写。
+
+
+
+对于深度学习领域,你有哪些想法和研究方向?目前有没有感兴趣的方向?
+🍢🍢: 我其实更多的还是喜欢框架层,怎样才能让整个框架跑的更快,占用更低,更加的易用化。
+
+
+发挥一下想象力,如果将深度学习比作一种食物,你觉得它会是什么?为什么?
+🍢🍢: 可能是米饭吧,喂的越多越有力气,跑的越快,力大砖飞。
+
+
+听说你使用飞桨解决过很多企业实际问题时,你遇到过最有趣的案例是什么?那么你是如何应用深度学习技术解决这个问题的?
+🍢🍢: 我实习这个企业吧,他刚尝试深度学习,所以一般调调 API 就行了,更多的是怎样去分配资源,做到效率最大化 (我司全是 1050 的卡,我能咋办,我也很绝望啊) 。
+
+
+除了深度学习,你还对其他领域感兴趣吗?有没有想过将深度学习与其他领域结合,创造出一些令人惊喜的应用?
+🍢🍢: 其他领域其实有的,比如摄影和游戏,结合的话有想过,但是还没新建文件夹就不说了🐶
+
+
+如果你有机会和 Paddle 社区 or 深度学习领域 or 计算机领域 的一位顶级专家进行合作,你希望和他/她一起研究什么问题?为什么?
+🍢🍢: 这可就太多了,比如:不同语言的通信,怎么做到程序的相对安全,怎样去减少硬件之间的瓶颈。为什么 emmm,可能是因为自己对这方面感兴趣吧。
+
+
+如果让你形容一下你和 Paddle 社区的关系,你会怎么说?
+🍢🍢: 相互促进,互相成就 (更多还是 paddle 社区的大佬单方面带着我)
+
+
+最后,作为一个热情、励志的年轻人,你想对 Paddle 社区里的开源者们说些什么呢?
+🍢🍢: 放开那道题,让我来🐶
+
+
+三、“鲁迅之我确实说过这话”专区
+同样我们也邀请了一些和川川很熟悉的、有过合作经历的朋友们,贡献一下和川师傅相关的故事,或者他们对川师傅的评价~以下均为真心话,请放心看!
+
+
+
+
+
+ 和川川交流还算比较多,川川基本上有空都会帮你解决任何疑问,甚至是看代码。虽然是年轻的富哥,但很努力上进,甚至比孙师傅还努力🐶;总体来说算很善良的小哥,教过我很多东西。希望能和他一起学习成长,向他多学习请教一些代码之道,早日都一起为中国开源社区多做一些更有价值的事情。 在我无数个老师中,他肯定是我印象深刻的老师之一。
+
+
+
+
+
+ 有幸在今年暑期上海 meetup 上认识了川师傅,很低调的技术大佬。在川师傅身上能看到对开源活动的热情,各大活动上都能看到川师傅的身影。希望以后还有机会和川师傅线下面基,迪迪小组再次出发!
+
+
+
+编者注✍️:迪迪小组是上海 meetup 期间,相约去迪士尼玩的小分队
+
+
+
+
+ 自川子参与第一期护航计划开始已经马上就要 6 个月了,我和川子也算是深度交流了 6 个月。从护航计划来看,川子始终保持十足的热情,在 PaddleSOT 那时候还是以开源任务的形式发放,但每次有任务川子都会第一时间认领。之后到现在动转静单测推全,我的 review 速度都赶不上川子提 PR 的速度了……此外川子涉猎甚广,在交流的过程中我也学到了很多东西,川子也会参加各种开源任务,你基本上可以在任何「角落」里看到川子的身影~
+
+ 川子这 6 个月也是成长了很多,从早期每个任务都需要细致沟通到现在发完任务基本就心照不宣了,也能独立完成很多任务了。比如 Ruff 的升级优化,目前川子对 Ruff 的了解程度已经仅次于我了,再比如 OpResult 方法的 patch 补全,以及动转静单测机制,基本都是川子独立完成的。对于大多数任务,现在我已经能放心地说:「川子,这个就交给你了」
+
+ 另外,「提前」说一下,川子贼有钱~
+
+
+
+
+
+ 我愿称川川为飞桨开源社区小天使
+
+
+四、特别栏目——爱在何方之川川相亲帖
+接下来,有请男嘉宾——小富哥儿川川来进行一段自我介绍✨。
+
+
+ 报菜名环节,身高179cm,体重65kg(±5kg),来自福建厦门,2002年出生,目前在福州读书,不抽烟,不喝酒。性格有点太温柔了,不太凶得起来。对陌生人有点社恐,熟悉了之后就好很多。有一点点宅,但不会非常宅,还是会出去走走(不然咋拍照片🐶)。有一点点强迫症,比如下面这张798的照片好像有点歪了。喔对了川川不会做饭。期望伴侣,可以稍微e一点,拉着我出去玩🐶。(🍢🍢: 咱就是说还有几个月才到22,也不至于这么着急吧🐶)
+
+
+有意者,请扫码加入快乐开源群,联系川川师傅(找头像即可)。
+
+
+
+彩蛋 🥚
+最后让我们欣赏一下川大摄影师的大作吧 📷
+
+
+ 北京 798 艺术区
+
+
+
+ 福州三江口大桥
+
+
+
+
+ 福州烟台山
+
+
+
+ 厦门中医院附近
+
+
+
+写在最后 💡
+【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/pku-course
+ https://pfcc.blog/posts/pku-course
+ Tue, 21 Nov 2023 00:00:00 GMT
+ 飞桨开源社区走进北京大学课堂
+10 月 11 日,飞桨开源社区应北京大学计算机学院周明辉副院长邀请,在周老师的开源软件开发 课程的第四次课 上,为北大的同学们介绍了飞桨开源社区和飞桨新一代 IR 设计。
+Jun 给同学们介绍了飞桨开源社区的基本情况
+
+杰师傅给同学们深入浅出的介绍了飞桨新一代 IR 设计。
+
+课程材料在线观看
+这次课程的 Slides,可以在这里在线浏览:飞桨-北大讲课-2023-10-11
+彩蛋 🎊
+飞桨开源社区曾经在 Apollo Park 接待过北大的国际留学生,梦师傅曾经全英文给参加北京大学夏季夏令营的牛校的神兽们讲解过飞桨。
+
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/shun-story
+ https://pfcc.blog/posts/shun-story
+ Tue, 21 Nov 2023 00:00:00 GMT
+ 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+一、前言
+是谁,能让最摸 🐟 的开发者禁不住 PR 的诱惑,疯狂求 review?又是谁,让向来严于待人、宽以律己的 Paddle 开发者忍不住夸夸?接下来,有请我们的大佬——顺师傅 ✨
+
+顺师傅是一名 Paddle 的社区开发者,但在社区里,顺师傅不仅仅是一个称呼,更是一股推动力。他主导的项目 【将 xdoctest 引入飞桨工作流 】 是 Paddle 社区迄今为止最大的开源活动 🎊。该项目规模极其庞大,涉及超过一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同完成。顺师傅的领导力不仅显著提升了 API 示例代码的规范性,还极大地促进了整个开源生态的发展和繁荣 🎉。
+而顺师傅本身,作为一位经验丰富的资深开发者,也拥有着深厚的技术背景和广泛的知识储备。我们怀着对他的好奇(膜拜 )🤩,通过文字采访的形式来深入了解顺师傅的故事,以下是我们与顺师傅的采访内容 📄。
+二、采访内容
+
+
+可以介绍一下自己吗?平时有什么兴趣爱好?
+顺师傅: 我的 AI Studio 和 GitHub 的账号是 megemini,平时喜欢看看书爬爬山跑跑步~
+
+
+作为一名技术佬,你的一天是如何度过的呢? 可以分享一下你的日常生活么?
+顺师傅: 每天都会做的事情,比如写代码、跑步、看书之外,由于最近需要用到 C++,而上一次用 C++ 都是十多年前的事情了,所以近期看一些 C++ 新特性相关的书和视频教程会比较多 ~
+
+
+可以简单向大家展示一下你一天的生活作息嘛?
+顺师傅: 家里情况比较特殊,没有什么可参考性~ 不过现在不会熬夜写代码了,晚上一般七八点钟也会出去跑跑~
+
+
+“上一次用 C++ 都是十多年前的事情了”这句话太有年代感了,是在学生时代用的吗?
+顺师傅: 嗯,工作之后 Java、Python 用的比较多 ~
+
+
+你是如何成为 Paddle 社区的开发者的?
+顺师傅: 毫不避讳的说,当初是因为 AI Studio 有比较多的免费算力才接触到 Paddle 社区并真正的开始使用 PaddlePaddle 框架,慢慢的后面才接触到黑客松、快乐开源之类的活动 ~
+
+
+Paddle 社区开发者都称呼你为“顺师傅”,这个称呼是怎么来的?是谁第一个开始这么称呼你的(笑)?
+顺师傅: 微信的昵称就是「顺」,好像是涛姐还是 001 开始这么叫的 ... ... 惭愧 ... ...
+
+
+外界对开发者的固有印象(社恐,直男),你周围的开发者形象是怎样的?你对 Paddle 哪位社区开发者印象最深?
+顺师傅: 开发者都比较坦诚,由于平时基本都是跟技术打交道,所以不管是话多也好、话少也罢,交流起来都是比较简单、热心的感觉~001 对于开源的那种热爱对我印象最为深刻~
+
+SigureMo 是 Paddle 社区的资深开发者,由于是第一位社区 commiter 而被大家称为 001。
+
+
+
+为什么 001 会给你带来这样深刻的印象?可以分享一下其中的小故事嘛?
+顺师傅: 记得当时为了修改示例代码写了一个小工具,本来还只是想发出来试一下,结果好像第二天 001 的 PR 就来了~技术能力和执行力都太强了,惭愧 ... ...
+
+
+你可以谈谈你对开源社区的理解和认识吗?
+顺师傅: 抛开自由、开放不谈,开源项目的参与门槛其实是比较高的,这里主要是针对正规的、规模较大的开源项目、代码类的贡献来说~因此,飞桨能够组织快乐开源、黑客松之类的活动,并且是由中文社区主导,个人感觉是非常有意义的一件事情~
+
+
+“将 xdoctest 引入飞桨工作流”这个项目是如何诞生的?你可以谈谈这个项目的初衷和目标吗?
+顺师傅: 这个项目是第六届中国软件开源创新大赛 Paddle 挑战赛的一个赛题,主要目标是使用 xdoctest 替换掉 CI 流水线中的不怎么好用的示例代码检查工具~
+
+
+你是如何组织和号召其他社区开发者参与这个项目的?在这个过程中遇到了哪些挑战,又是如何克服的?
+顺师傅: 嗯 ... ... 这里应该主要感谢涛姐帮忙摇人吧~~~我所做的只是把事情讲清楚,仅此而已 ~
+
+
+这个项目涉及到一千多个 API 示例、数十万行代码的修改,你是如何管理和协调这么大规模的项目的?
+顺师傅: 飞桨开源社区的参与者能力都很强,所以,只要把事情讲清楚,做什么、怎么做,大家自然会把事情做好~期间,001、涛姐、孙师傅、军哥等等很多人,都帮助一起分析如何把这个事情讲清楚,大家目标一致,水到渠成吧~
+
+
+这个项目的完成对 Paddle 社区的开源生态有何影响?你认为它在推动开源生态繁荣方面的作用体现在哪里?
+顺师傅: 提升代码质量、对齐主流 Python 解决方案~能够引导更多 “新人” 参与到开源项目中来~
+
+
+在你看来,这个项目的最大贡献是什么?为什么?
+顺师傅: 丢掉历史包袱,以后大家都是在统一的 Python 标准下参与贡献,未来的技术选择灵活性都大很多~
+
+
+回顾这个项目,有哪些时刻让你印象深刻?为什么?
+顺师傅: 印象最深刻的是当时 RFC 讨论的时候~参与之前本来是抱着试一试、捡漏的心态来的,结果 RFC 一番讨论下来,有种骑虎难下的感觉 ... ... 另外,在发起示例代码修改这个快乐开源活动之后,看到能有这么多开发者参与进来,并且最终把这个项目做了下来,飞桨开源社区号召力之大,属实给了我一次小小的震撼~
+
+
+对于未来,你对 Paddle 社区有哪些期待和建议?
+顺师傅: 希望能够引导更多中文社区的开发者参与进来,能够有更多在校的学生参与进来~另外,提一点小小的建议,虽然已经参与飞桨开源社区快一年了,但是,仍然对 Paddle 本身的框架技术路线、技术规划以及一些细节考量非常模糊,希望能有这方面较为系统的文档、视频教程吧~
+
+
+作为一名经验丰富的老开发,对于想要参与开源社区,特别是 Paddle 社区的年轻人,你有什么建议或者寄语?
+顺师傅: 只有让更多年轻的开发者不断接过手中的桨,才能将开源社区一直行驶下去,直至星辰大海~
+
+
+三、“五星评论家麦克阿瑟”专区
+我们也邀请了一些和顺师傅很熟悉的、有过合作经历的朋友们,贡献一下和顺师傅相关的故事,或者他们对顺师傅的评价~以下均为真心话,请放心看!
+
+
+
+就 Xdoctest 这个任务而言,最开始其实我自己都是没有多少信心的,毕竟是整个框架级别的,光是任务量想想就头疼,而且历史遗留问题特别多,怎么想都做不来吧?当初想着在 RFC 阶段就尽可能抛出我已知的各种坑,让开发者知难而退,这样我也能省心些,要是啥也不懂的我也带不动。
+但是顺师傅的出现打破了我的摸鱼计划,顺师傅上千行的 RFC 调研地比我了解的还清楚,对于我提出的各种「劝退」问题也逐一回复了合理的解决方案,这时候我突然觉得,也许真的能成?
+RFC 合入后顺师傅有条不紊地推进着整个任务,每一次遇到疑难问题时,顺师傅总能选出合适的解决方案。比如 Paddle Tensor 打印时候 Place 不对齐的问题、输出精度问题、运行环境隔离问题等等,这些都是 Xdoctest 本身存在的诸多问题,经过顺师傅的调整和优化,Xdoctest 已经基本能够完美适配我们 Paddle 了。
+此外大家可能比较熟悉顺师傅发放的两个开源任务,也是整个任务耗时最久的部分,顺师傅在开源任务中从开发者转变为了 reviewer,帮助我们 review 了很大一部分的 PR,并且 review 地十分细致且专业。
+然后就如大家所见到的,真的成了。
+顺师傅太强了~期待下次合作~
+
+
+
+本任务难点在于工程量大、历史包袱重,感谢顺师傅带着所有队员(24 位)用强大的耐心、细心完成了这一旷日持久的推进,你们的工匠精神值得全体同学学习!众人拾柴火焰高,感谢项目的所有参与的同学!
+
+
+编者注✍️: 涛姐的话太官方了,所以我挑了句重点,希望涛姐能原谅我 🤪
+
+
+
+有幸通过软件开源创新大赛,结识了顺师傅,他的大赛课题是将 xdoctest 引入到飞桨框架工作流中,为了提升效率,减少错误,还不辞辛苦做了一个简单的转换工具 convert_doctest,极大的节省了修改的工作量,减少了出错成本。
+此任务工作量巨大,而且很多 API 历史遗留问题繁杂,顺师傅在工作中展现出的极高的职业素养和敬业精神令我们为之侧目。他对待每一个细节都非常用心,力求做到尽善尽美。在面对复杂的问题时,他总是能够迅速找到解决办法,充分体现了他的专业能力和经验。
+此外,顺师傅还具有很强的团队协作能力,他乐于与大家分享经验和技巧,共同提高整个团队的工作效率。在工作中,他总是能够主动承担责任,为团队的发展贡献自己的力量。
+
+
+
+顺师傅好强,带带弟弟
+
+顺师傅的分析能力和组织能力都超强
+
+
+
+
+在参与顺师傅的项目过程中,我甚至感觉顺师傅像我的 mentor,因为从他身上切切实实学到了很多东西,比如问题的拆解、项目的组织、技术的交流等...
+尤其是看到顺师傅逻辑非常清晰的 RFC 文档后,仅从文档写作方面都让我受益匪浅(因为文档的编写需要非常多的逻辑推理和思考,而像顺师傅一样把事情讲清楚的研发,真的不多,大家感兴趣也可以去看看)功利地说,顺师傅对我的职业发展有非常大的提升,希望顺师傅能够继续加油,影响更多人!
+
+四、结尾
+在探索顺师傅的旅程中,我们不仅发现了一个技术上的资深开发者,也见证了一个开源社区领路人的成长和影响力。他的故事和成就展示了开源社区不仅是技术的聚集地,更是所有开发者开源热情的熔炉 🔥。
+期待顺师傅在未来的旅程中继续发光发热,为 Paddle 或是其他开源社区带来更多的创新和启示 💡。
+最后,应顺师傅要求,就不附照片了,以一棵柳树作为结尾 🌲
+
+彩蛋 🥚
+往期 blog 有顺师傅真容哦~大家可以去探索一下!
+]]>
+
+ -
+
+ https://pfcc.blog/posts/hackathon-5th-episode01
+ https://pfcc.blog/posts/hackathon-5th-episode01
+ Fri, 03 Nov 2023 00:00:00 GMT
+ 向大家快速介绍飞桨黑客松第五期活动上线以来的进展(9.25-11.3)
+
+为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 4 周的进展速览如下:
+
+开源贡献个人挑战赛 :发布 111 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,109 个任务完成认领,60 个任务提交作品,13 个任务已经完成 ,感谢各位开发者的积极参与,感谢各位导师的及时 review。
+大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 12 名开发者产出基于 EB SDK 的应用 18 个,均已部署至飞桨星河社区 。
+飞桨护航计划集训营 :发布 18 个框架与套件开发项目,1 对 1 带教形式,已完成 18 名学员招募,并提交第一期周报,是飞桨开源社区首次 Code Camp 形式的开源活动,由开发者担任助教 。
+
+赛道一:开源贡献个人挑战赛
+进度看板
+| 任务方向 | 任务数量 | 提交作品 / 任务认领 | 提交率 | 完成 | 完成率 |
+| :
+]]>
+ 向大家快速介绍飞桨黑客松第五期活动上线以来的进展(9.25-11.3)
+
+为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 4 周的进展速览如下:
+
+开源贡献个人挑战赛 :发布 111 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,109 个任务完成认领,60 个任务提交作品,13 个任务已经完成 ,感谢各位开发者的积极参与,感谢各位导师的及时 review。
+大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 12 名开发者产出基于 EB SDK 的应用 18 个,均已部署至飞桨星河社区 。
+飞桨护航计划集训营 :发布 18 个框架与套件开发项目,1 对 1 带教形式,已完成 18 名学员招募,并提交第一期周报,是飞桨开源社区首次 Code Camp 形式的开源活动,由开发者担任助教 。
+
+赛道一:开源贡献个人挑战赛
+进度看板
+
+
+
+任务方向
+任务数量
+提交作品 / 任务认领
+提交率
+完成
+完成率
+
+
+
+
+热身赛
+11
+7 / 11
+63.64%
+2
+18.18%
+
+
+框架 API 开发任务
+31
+22 / 31
+70.97%
+1
+3.23%
+
+
+框架其他开发任务
+16
+14 / 16
+87.5%
+6
+37.5%
+
+
+科学计算模型复现
+11
+7 / 11
+63.64%
+1
+9.09%
+
+
+套件开发任务
+24
+5 / 23
+20.83%
+2
+8.33%
+
+
+合作伙伴任务
+18
+5 / 17
+27.78%
+1
+5.56%
+
+
+
+赛道亮点
+
+社区开发者参与热情高,活动发布 1 周认领率接近 100%,提交率 50%+;
+Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,提升社区活动自动化水平;
+直播活动圆满收官,已形成完整的飞桨开源贡献视频资料,详见 issues#58125 ;
+本次活动英特尔作为赞助方,并与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品。
+
+参与提示
+
+在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率相对较低,欢迎社区的开发者选择这些任务来挑战~~
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
+赛道二: 大模型应用与创意赛
+我们收到了 127 人报名,提交了 18 个应用,加精项目 10 个。
+赛道亮点
+
+全新赛道,作为飞桨星河社区五周年预热活动,推广重点产品星河社区 ERNIE Bot SDK;
+完成情况符合预期,上线 4 周即提交 18 个 EB SDK 应用,作品种类多样,涵盖游戏娱乐、办公助手、知识科普等多领域,符合赛道初衷;
+社群气氛活跃,新老选手积极交流,且建立了沟通产研的 EB SDK 反馈文档。
+
+参与提示
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
+赛道三:飞桨护航计划集训营
+18 个任务已全部完成招募,名单公示如下:
+
+集训营亮点
+
+参与提示
+
+欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。
+
+更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
+活动运营与推广
+联合宣传
+与开源中国、启智、OpenVINO、思否、开源社、示说、InfoQ、白玉兰开源、开源之夏等合作伙伴以及海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目联合宣传。
+直播
+多平台同步直播,10 场直播共计约 1.4 万人次观看,直播信息与学习资料已发布在开源社区,并整理成 AI Studio 专题课程: 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区
+
+
+
+日期
+主题
+观看总人次
+
+
+
+
+10.16(周一)
+第五期飞桨黑客松来啦!
+1956
+
+
+10.17(周二)
+新 IR Python API 适配升级
+967
+
+
+10.18(周三)
+模型复现和贡献指南
+975
+
+
+10.19(周四)
+OpenVINO 开源生态建设与贡献任务解析
+884
+
+
+10.20(周五)
+动转静全套件适配任务
+989
+
+
+10.23(周一)
+Arm 虚拟硬件助力边缘人工智能软件开发
+1887
+
+
+10.27(周五)
+跨平台推理框架 InfiniTensor
+2049
+
+
+10.30(周一)
+拓展 LLM 边界:使用向量数据库构建知识库
+2193
+
+
+10.31(周二)
+Paddle 框架在昇腾平台上的推理优化分享
+1097
+
+
+11.1(周三)
+飞桨硬件生态伙伴任务介绍
+420
+
+
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/chengdu-kaiyuanshe
+ https://pfcc.blog/posts/chengdu-kaiyuanshe
+ Thu, 02 Nov 2023 00:00:00 GMT
+ 2023 年 10 月 28 日、29 日参加开源社举办的「第八届中国开源年会」的精彩瞬间,以及与咱 Paddle 社区成都开发者们的线下见面~
+
+第八届中国开源年会
+飞桨开源社区受邀参加第八届中国开源年会,梦师傅和我(孙师傅)都贡献了两场精彩的演讲 🎉。
+28 日的活动中,梦师傅在青少年开源与开源教育 分论坛上,分享了主题为「走进开源社区 」的演讲,向祖国的仙人掌们 🌵 宣传咱们充满趣味和活力的飞桨开源社区。
+
+
+梦师傅还鼓励了很多青年开发者加入飞桨开源社区,其中甚至有一名刚年满 15 岁的初中学生,在活动后提交了 PR 并成功合入,成为了 Paddle 的 contributor @BernieHuang2008 。
+29 日的主论坛上,孙师傅进行了闪电演讲 ,分享了「如何在开源社区摸 🐟 」,介绍了孙师傅工作 0.5kun 年🐔 里总结的摸鱼心得。
+
+演讲的详细内容将在后续的博客中分享,敬请期待~
+飞桨社区成都开发者 Meetup
+在 29 日,我们还相约飞桨社区成都的开发者们线下面基,以下是痛失真名的成都开发者(网友 ):
+
+
+梦师傅还很贴心的给每位开发者赠送了 PaddlePaddle contributor 专属徽章 🥳。
+
+期待未来与成都的伙伴们再次见面!
+彩蛋 🎊
+最后,我们还一起跟随军哥 @jzhang533 观看了一场外国小姐姐的 livehouse,很精彩哟!
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/xian-event
+ https://pfcc.blog/posts/xian-event
+ Wed, 25 Oct 2023 00:00:00 GMT
+ 在中国计算机学会组织的中国软件开源创新大赛上,飞桨开源社区的全部比赛已经完成。恭喜以下获奖的同学:
+
+飞桨开源社区有四名同学参加了中国计算机学会组织的中国软件开源创新大赛决赛,这里记录一下在西安参加活动时候的一些照片。大赛的决赛的结果在这里:第六届 CCF 开源创新大赛决赛结果通知 。
+活动签到处
+
+@megemini 在做《将 xdoctest 引入到飞桨框架工作流中》的项目答辩。
+
+@qiuwenbogdut 在做《实现飞桨框架动态图反向图的可视化》的项目答辩。
+
+@co63oc 在做《PaddleScience 领域前沿论文复现》的项目答辩(远程接入,遗憾没见到真人)。
+
+@zrr1999 在做《实现飞桨框架的 python level jit compiler》的项目答辩。
+
+梦师傅在跟顺师傅和詹师傅交流。
+
+]]>
+
+ -
+
+ https://pfcc.blog/posts/first-post
+ https://pfcc.blog/posts/first-post
+ Tue, 24 Oct 2023 00:00:00 GMT
+ 这是一个半官方的飞桨开源社区博客,由社区成员自发维护,记录社区的有趣的故事,欢迎大家投稿。投稿方式:在 blog 代码仓库里提交 PullRequest 即可,Pull Request 会自动触发 CI,CI 通过后,你的文章就会被自动发布到这里。
+感谢 001 @SigureMo 帮忙搭建了这个博客。
+
+]]>
+
+
+
\ No newline at end of file
diff --git a/hashmap.json b/hashmap.json
new file mode 100644
index 0000000..d044272
--- /dev/null
+++ b/hashmap.json
@@ -0,0 +1 @@
+{"about.md":"B8Tj-U_G","index.md":"DgAfRGTS","pages_1.md":"C6jMQdlw","pages_2.md":"Cm_QaGZ2","pages_3.md":"BN7Uij8R","pages_4.md":"Duii_cXO","posts_2023-os-report.md":"DoaC6CkT","posts_chengdu-kaiyuanshe.md":"DaISaDcs","posts_chuan-story.md":"0jPuh_f7","posts_first-post.md":"BrhGXo3R","posts_hackathon-5th-episode01.md":"BXwh45pa","posts_hackathon-5th-episode02.md":"Bzmd2JTx","posts_hackathon-5th-episode03.md":"CYI5eehn","posts_hackathon-6th-summary.md":"FRTopXGW","posts_huanggua-story.md":"iFqrJ-8D","posts_huangjiyi-story.md":"BoJUl8hg","posts_ijcai-2024-competition.md":"DcElAR1q","posts_ligoml-story.md":"CQ9oS4y7","posts_limin-story.md":"Dawzf3lV","posts_loaf-sharing.md":"B6u24F4Z","posts_nknan-story.md":"sa0Z9qZh","posts_paddle-pipeline-parallel.md":"CxsJxymH","posts_paddleocr-release.md":"nG6czfOR","posts_pfcc-36th.md":"CD-R9roG","posts_pku-course.md":"IKAES188","posts_pytorch-conference-01.md":"y8pz0X_Z","posts_sanbu-story.md":"BwcXAExP","posts_shun-story.md":"uXSUQQcY","posts_starter-camp.md":"BokqWFIR","posts_suzhou-kaifangyuanzi.md":"DDG_uixm","posts_tao-story.md":"BYILBNfV","posts_type-hints-project.md":"Db0ywpg3","posts_wangxin-story.md":"B9Kdz5Yd","posts_wuxi-kaifangyuanzi.md":"CJDJ-Bq5","posts_xdoctest-project.md":"dN-fbWtt","posts_xian-event.md":"DaD_lAwG","posts_zhangyiqiao-story.md":"DLBIaKPb","posts_zheng-story.md":"tkyMPqZ3","posts_zuckerberg-letter-post.md":"DLLobXDS"}
diff --git a/icons/apple-touch-icon-180x180.png b/icons/apple-touch-icon-180x180.png
new file mode 100644
index 0000000..addeb1f
Binary files /dev/null and b/icons/apple-touch-icon-180x180.png differ
diff --git a/icons/maskable-icon-512x512.png b/icons/maskable-icon-512x512.png
new file mode 100644
index 0000000..d89daa2
Binary files /dev/null and b/icons/maskable-icon-512x512.png differ
diff --git a/icons/pwa-192x192.png b/icons/pwa-192x192.png
new file mode 100644
index 0000000..2bf7c9b
Binary files /dev/null and b/icons/pwa-192x192.png differ
diff --git a/icons/pwa-512x512.png b/icons/pwa-512x512.png
new file mode 100644
index 0000000..59aff23
Binary files /dev/null and b/icons/pwa-512x512.png differ
diff --git a/icons/pwa-64x64.png b/icons/pwa-64x64.png
new file mode 100644
index 0000000..9be60b2
Binary files /dev/null and b/icons/pwa-64x64.png differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c7193c0
--- /dev/null
+++ b/index.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+ 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wonderful stories from PaddlePaddle contributors
Published on 2024年10月17日 本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
+
Published on 2023年12月2日 什么是开源项目和开源社区?国内活跃度 Top 的开源社区,都有哪些有趣的人和事?开源社区之于开源项目有何重要意义?
+
Published on 2024年9月1日 【为 Paddle 框架 API 添加类型提示(Type Hints)】的项目总结。
+
Published on 2024年8月23日 飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
+
Published on 2024年8月19日 Published on 2024年8月9日 All over the place was six pence, but he looked up at the moon.
+
Published on 2024年7月8日 在开源社区的热烈期待与共同努力下,PaddleOCR 迎来了里程碑式的版本更新——v2.8.0!本次更新不仅引入了前沿的 OCR 技术成果 ,还对项目结构进行了深度优化 ,解决了若干历史疑难问题 ,旨在为广大开发者提供更加高效、便捷的 OCR 解决方案。让我们一同探索 PaddleOCR v2.8.0 带来的全新体验与无限可能!
+
Published on 2024年7月5日 paddle3.0 中自动并行是一项重要的升级点,今天我们来聊一聊 Paddle 中的静态图流水并行。大家也可以去翻一翻我的个人博客 ,里面有很多好康的(X)
+
Published on 2024年4月26日 大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
+
Published on 2024年4月17日 2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
+
BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
+
+
+
+
+
\ No newline at end of file
diff --git a/logo.png b/logo.png
new file mode 100644
index 0000000..4240632
Binary files /dev/null and b/logo.png differ
diff --git a/manifest.webmanifest b/manifest.webmanifest
new file mode 100644
index 0000000..7adec54
--- /dev/null
+++ b/manifest.webmanifest
@@ -0,0 +1 @@
+{"name":"飞桨开源社区博客","short_name":"飞桨开源社区博客","start_url":"/","display":"standalone","background_color":"#ffffff","lang":"zh-CN","scope":"/","id":"/","description":"Wonderful stories from PaddlePaddle contributors","theme_color":"#ffffff","icons":[{"src":"icons/pwa-64x64.png","sizes":"64x64","type":"image/png"},{"src":"icons/pwa-192x192.png","sizes":"192x192","type":"image/png"},{"src":"icons/pwa-512x512.png","sizes":"512x512","type":"image/png"},{"src":"icons/maskable-icon-512x512.png","sizes":"512x512","type":"image/png","purpose":"maskable"}]}
diff --git a/pages/1.html b/pages/1.html
new file mode 100644
index 0000000..35c852a
--- /dev/null
+++ b/pages/1.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+ 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wonderful stories from PaddlePaddle contributors
Published on 2024年10月17日 本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
+
Published on 2023年12月2日 什么是开源项目和开源社区?国内活跃度 Top 的开源社区,都有哪些有趣的人和事?开源社区之于开源项目有何重要意义?
+
Published on 2024年9月1日 【为 Paddle 框架 API 添加类型提示(Type Hints)】的项目总结。
+
Published on 2024年8月23日 飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
+
Published on 2024年8月19日 Published on 2024年8月9日 All over the place was six pence, but he looked up at the moon.
+
Published on 2024年7月8日 在开源社区的热烈期待与共同努力下,PaddleOCR 迎来了里程碑式的版本更新——v2.8.0!本次更新不仅引入了前沿的 OCR 技术成果 ,还对项目结构进行了深度优化 ,解决了若干历史疑难问题 ,旨在为广大开发者提供更加高效、便捷的 OCR 解决方案。让我们一同探索 PaddleOCR v2.8.0 带来的全新体验与无限可能!
+
Published on 2024年7月5日 paddle3.0 中自动并行是一项重要的升级点,今天我们来聊一聊 Paddle 中的静态图流水并行。大家也可以去翻一翻我的个人博客 ,里面有很多好康的(X)
+
Published on 2024年4月26日 大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
+
Published on 2024年4月17日 2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
+
BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/2.html b/pages/2.html
new file mode 100644
index 0000000..cff9044
--- /dev/null
+++ b/pages/2.html
@@ -0,0 +1,42 @@
+
+
+
+
+
+ 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wonderful stories from PaddlePaddle contributors
Published on 2024年3月29日 在第 36 次 PFCC 会议上,我们有幸邀请了 Ivy 社区的英国小哥 Daniel(@djl11 )和 Paddle 社区开发者莱师傅(@RedContritio )分别分享了代码转换工具 Ivy、PaConvert。
+
Published on 2024年3月18日 无论是工作还是生活,他都认真对待!无论是开源世界还是家庭亲情他都怀抱深沉热爱!从一开始提修改文档 PR 的边缘者到如今横扫各大开源任务的 Paddle 扫地僧!汪师傅一直在开源界默默努力💪深耕~今天,就让我们一起揭开这位神秘大佬的面纱,探寻他的故事吧!✨✨✨
+
Published on 2024年3月3日 Published on 2024年2月18日 在 2023 年的 11 月 14 日,飞桨开源社区开启了一个新项目(新坑 )—— 启航计划集训营 。经过为期两个月紧张而充实的集训后,启航计划集训营于 1 月 30 日 正式圆满完成所有集训计划。在集训期间,大家出色地完成了三项热身打卡任务,并且有 19 位营员合入了超过 110 个 PR。衷心感谢各位营员的积极参与和卓越贡献!在这里,也向开源社区的各位 “汇报” 一下活动情况~
+
Published on 2024年2月6日 嘿,你知道飞桨社区里的 DDL 战士是谁么?嘿,你知道大家心中的 Paddle 社区妈妈是谁么?那你又知道谁是(仓库管理员 )飞桨仓库的实际控制人?谁是飞桨仓库的守护者?谁是飞桨从闭源到开源的见证者?是的,本期要采访的就是我们 Paddle 的资深研发女神——涛姐!
+
Published on 2024年1月25日 格子衬衫 👕,黑框眼镜 👓,他就是上天钦定的程序员!他狂卷技术,热爱开源;他喜欢摸鱼 🐟,疯狂水群;他“厨艺精湛”,堪称当代厨神。严寒冬日,别人有女朋友温暖手心,而他把 🥤 优乐美捧在手心!凌晨就寝,别人躺平酝酿睡意,他靠咖啡 ☕️ 进入梦境!工作一年半,至今单身汉!他就是来自安徽的吃辣小趴菜——张一乔 😆!
+
Published on 2024年1月14日 “负暄檐宇下,散步池塘曲”,本期我们邀请到了热情好学的散步 🚶♀️ 师傅!你想知道他的人生理想么?你想了解他的学习历程么?你想知道他的日常生活么?你想得到他的真挚祝福么?点击此篇博客,让我们一起走进小散的浪漫人生~
+
Published on 2023年12月27日 【将 xdoctest 引入飞桨工作流】的项目总结。
+
Published on 2023年12月26日 Published on 2023年12月25日
+
+
+
+
\ No newline at end of file
diff --git a/pages/3.html b/pages/3.html
new file mode 100644
index 0000000..6cd76b7
--- /dev/null
+++ b/pages/3.html
@@ -0,0 +1,41 @@
+
+
+
+
+
+ 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wonderful stories from PaddlePaddle contributors
Published on 2023年12月23日 集百家之阴阳,合一家之糟粕。好消息!好消息!自称 Paddle 社区“最想当 PM 的程序员” 、“Paddle 首席阴阳家”—— Zheng-bicheng,闪亮登场 🥳🎉🎉🎉。你想掌握最前沿的阴阳技巧么?你想成为和他一样优秀的开发者吗?你想和他一样眼神 👀 中透露着睿智的光芒,小脑袋瓜里装满各种各样的知识么?那就快来看看这篇博客吧!🌹
+
Published on 2023年12月18日 本篇博客文章的内容,来源于作者在「第八届中国开源年会」上分享的一次主题为 「如何在开源社区摸 🐟」 的闪电演讲,以下的部分为演讲的具体内容。
+
Published on 2023年12月12日 他来了,他来了,他带着满满的故事,迈着自信的步伐向我们走来了!虽然刚满 15 岁,但小小黄瓜 的开源史却已有好几年!学校趣事?开源经历?迷人帅照?成山作业?你都能在本篇博客看到!
+
Published on 2023年12月7日 从对 Git 一窍不通到如今能够丝滑完成黑客松赛题,从曾经历鬼门关的生死挣扎到现在能够轻松跑几公里不喘气,从毕业于武大国软学的有志青年到佛系养生的新时代躺平中年,敏师傅 的人生经历就像是那瓶经年陈酿的老酒,醇厚细腻、回味无穷。
+
Published on 2023年12月5日 从积极参与社区开源任务,到加入飞桨成为 (练习生) 实习生,到最终正式成为飞桨研发团队的一员。以兴趣为起点, 黄济懿师傅 将我们展示了一条通往职业的道路,希望他的故事能够激励所有对开源充满热情的开发者们。接下来,原神启动 🚀!
+
Published on 2023年12月1日 向大家快速介绍飞桨黑客松第五期开展以来的进展(11.4-12.1)
+
Published on 2023年11月28日 “桨声川水悠悠过,长路漫漫风光留”,这次我们要采访的是小伙伴们都熟悉的励志富哥儿——川川师傅 ✨
+
Published on 2023年11月21日 Published on 2023年11月21日 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
Published on 2023年11月3日 向大家快速介绍飞桨黑客松第五期活动上线以来的进展(9.25-11.3)
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/4.html b/pages/4.html
new file mode 100644
index 0000000..49ba7cb
--- /dev/null
+++ b/pages/4.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Wonderful stories from PaddlePaddle contributors
Published on 2023年11月2日 2023 年 10 月 28 日、29 日参加开源社举办的「第八届中国开源年会」的精彩瞬间,以及与咱 Paddle 社区成都开发者们的线下见面~
+
Published on 2023年10月25日 Published on 2023年10月24日
+
+
+
+
\ No newline at end of file
diff --git a/posts/2023-os-report.html b/posts/2023-os-report.html
new file mode 100644
index 0000000..f1732ac
--- /dev/null
+++ b/posts/2023-os-report.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 飞桨开源社区成为国内 Top,我们做对了什么? | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 什么是开源项目和开源社区?国内活跃度 Top 的开源社区,都有哪些有趣的人和事?开源社区之于开源项目有何重要意义?
开源项目(Open Source Project),顾名思义是指开放源代码的可以被公众使用的软件项目,在开源合规的基础上,其他开发者可以对软件进行使用、修改和发行。基于「共建共治共享」的开源理念,许多开源项目汇聚了一批拥有共同兴趣爱好的开发者,形成了一个个独特的开源社区(Open Source Community)。据第三方数据显示,飞桨开源社区已成为国内 Top 的开源社区,作为社区维护者,我们做对了什么?
1. 飞桨开源数据一览 2. 整体飞桨平台的情况 来一段官方介绍:
飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,集核心框架、基础模型库、端到端开发套件、丰富的工具组件、星河社区于一体,是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。飞桨在业内率先实现了动静统一的框架设计,兼顾科研和产业需求,在开发便捷的深度学习框架、大规模分布式训练、高性能推理引擎、产业级模型库等技术上处于国际领先水平。
飞桨端到端自适应混合并行训练技术以及压缩、推理、服务部署的协同优化,高效支撑以文心一言为代表的文心大模型的生产与应用。
IDC 发布的 2022 年中国深度学习框架和平台市场份额报告显示,百度稳居中国深度学习平台市场综合份额第一。中国信息通信研究院《深度学习平台发展报告(2022)》指出,飞桨已经成为中国深度学习市场应用规模第一的深度学习框架和赋能平台。
当前飞桨已凝聚 800 万开发者,基于飞桨创建 80 万个模型,服务 22 万家企事业单位,广泛服务于金融、能源、制造、交通等领域。
截至 2023 年 8 月,飞桨开源社区累计提交 Commits 超过 93 万次,以 PR 或 ISSUE 提交形式的开源贡献者超过 18000 人。
3. 谁开发了飞桨 BAIDU Contributors :专职的研发部门(深度学习技术平台部),及非专职的其他部门的工程师。
尽管并没有一种特定的方法来识别某位 contributor 是否是百度的雇员,但你依然可以从 github profile 或者 author email 中来找到大量活跃的百度工程师的身影。
Corporate Contributors :NVIDIA、INTEL、昆仑芯、寒武纪,等等多家硬件公司的专职工程师。
翻看AUTHORS.md 文件,或者查看飞桨的代码仓库的 commits log,你总能看到来自于这些硬件公司的优秀的工程师的贡献。(小彩蛋:你甚至能找到 intel 工程师们的一张合照)
Individual Contributors :来自高校的学生及来自企业的工程师在业余时间的贡献。
我们今天对开源社区及开发者的讨论,会聚焦到 Individual Contributors 群体。当前,个人贡献者群体已经成为飞桨开源社区必不可少的研发力量,在提升开源项目影响力、社区活跃度、扩大开源声量方面,更是有着十分重要的意义。
4. 社区开源贡献为飞桨带来了什么 这是一些 2023 年至今社区开发者为飞桨核心框架做出的代码贡献合辑,可以看到从工程效能优化、文档体验提升,到飞桨内核十分重要的 PHI 算子库独立编译,社区开发者都做出了非常重要的贡献。值得一提的是,飞桨 2.4 版本中发布的 API 有三分之一是由社区开发者完成的,到飞桨 2.5 版本,新增的 API 贡献几乎都来自社区开发者。
除此之外,在飞桨的端到端开发套件 PaddleOCR、PaddleClas、PaddleDetection、PaddleSeg,以及大模型套件 PaddleNLP、PaddleMIX 中,社区开发者贡献了许多 SOTA 的算法模型、训推一体 pipeline、tutorials&demo,与飞桨团队共同打磨易用的深度学习框架与工具组件。
这里可以查看更多进行中和已结项的项目:https://github.com/orgs/PaddlePaddle/projects/7
5. 参与飞桨社区的开源贡献会获得什么 技术实力与开源影响力提升
飞桨社区开源项目覆盖深度学习框架、模型、应用全领域,你想提升的技术,这里全都有; 与飞桨产研团队紧密沟通协作,和飞桨共同成长; 开源贡献行为全部公开可查,飞桨社区丰富的开源贡献活动助你树立个人开源影响力; 鼓励社区孵化项目,你可以在这里找到志同道合的小伙伴,把想法变成现实。 荣誉证书、现金激励与工作机会
颁发开源贡献证书、社区曝光度、奖状徽章等,致敬每一位贡献者; 举办丰富社区赛事,提供奖金/奖品激励与权威机构认证; 开源社区贡献者在招聘中会被优先考虑。 硬件支持
提供线上 V100 开发环境,随时可以开发与编译。
6. 飞桨快乐开源:Grow Together, and Have Fun 先来讲一个故事。
大概在 2022 年 12 月份的时候,通过代码扫描工具发现了飞桨框架的 100 多个小 bug 🐛。说是 bug,但是问题真的很小,诸如堆栈溢出(stack overflow)、UFA 非法地址访问(UFA illegal address access)、Python IndexError、空指针(Null pointer)、除 0 错误(divide by 0),大部分 bug 可以被很少的一行或几行代码 fix。
bug 发现了不能不修,怎么修呢?我们把目光放到了开源社区。这是一批极易上手的开发任务,开发者可以在不熟悉框架的情况下完成 bug 修复任务,获得满满成就感;时间上来看,刚好赶上高校学生们放寒假,有大量的空闲时间参与开源活动;研发人力方面,我们协调到 1 个完整人力来支持 code review,保障 bug 修复质量。天时地利人和,我们把这一批 bug 修复任务包装成了一个社区活动 —— 飞桨快乐开源:提 PR 领取新年礼物 🎁。
这个活动一经推出,立马受到了社区开发者的广泛关注和参与,出乎我们意料的是,看到了很多老朋友和新面孔的 PR 提交,有些人(点名 DrRyanHuang )嘴上说着「年后再说」,表情包做了不少,背地里 PR 也提了不少。
更为经典的是一名社区开发者 RedContritio 在除夕夜连着提了 18 个 PR,因为那个时间点大家都在欢度春节,没有人和他抢,导致他的 PR 编号都是连号的,由于 PR 质量过高,最后也顺利的全部完成了合入 ✅,给了我们一点小小的开源震撼 。
后来,快乐开源活动就顺理成章的成为了飞桨开源社区长期有效的日常活动,旨在通过简单易上手的开发任务,帮助开发者渐进的了解飞桨、参与开源。我们会按季度更新礼品清单、统计参与活动的开发者信息,并完成礼品邮寄。随着开发者参与热情越来越高,礼品也从游戏键盘、无线耳机升级到了 PS5、iPad、Apple Watch 等。
在 2023 年 Q4,快乐开源活动完成了一次全新升级 🔥,任务范围从 Paddle 框架扩展到科学计算 PaddleScience、大模型套件(PaddleMIX、PaddleNLP)、端到端开发套件(PaddleOCR、PaddleSeg、PaddleClas、PaddleDetection)、动转静孵化项目 PaddleSOT 等更多飞桨生态开源项目,上线「✨ 热身任务」、「🎯 命题任务」与「💡 开放任务」 ,使用「HappyOpenSource 」 标签追踪相关的 issue 与 pr,我们确立了「 Grow Together, and Have Fun! 」为口号,快乐开源活动逐渐做大做强~
更多信息可访问活动 issue 了解:https://github.com/PaddlePaddle/Paddle/issues/56689
Community over Code 是 Apache 软件基金会的项目中最广为人知的理念。尽管在社区的沟通方式上,跟 ASF 所鼓励的用邮件组来沟通不一样,飞桨社区的绝大部分沟通方式是在大家熟悉的微信群里,但从解决 「Good First Issue 」 加入进来的社区开发者们, 在熟悉了社区之后,同样可以迸发更大的能量。
再来讲一个故事。
作为源自百度的开源项目,飞桨的运营团队通常可以接触到一些第三方办赛的邀请,这次找到我们的是第六届『中国软件开源创新大赛』,这是一个由中国计算机学会(CCF)主办,西北工业大学、绿色计算产业联盟、CCF 开源发展委员会联合承办的大型赛事,联合百度、清华大学等企业单位以及多所高校共同设置赛题,飞桨参与了『开源任务挑战赛』赛道,发布了 16 道具有一定难度的、需要参赛选手自行拆解与项目管理的开源任务。我们称其为 「HappyOpenSource Pro 」 ,快乐开源进阶版 。任务详情:飞桨框架任务挑战赛(上) 、飞桨框架任务挑战赛(下)
让我们惊喜的是,这些即使是内部研发团队都觉得棘手的开发任务,被一批高水平的开发者完美的解决了。以飞桨赛道一等奖项目:赛题五:将 xdoctest 引入到飞桨框架工作流中 为例,项目涉及修改 1400+ API,数十万行代码,24 位开发者近 3 个月协同工作,队长 megemini 成长为 Reviewer,800 万飞桨用户从中受益。
更多顺师傅的专访可以查看往期 blog:https://pfcc.blog/posts/shun-story
这件事情让我们愈发相信开源的力量 ,即使是如此历史包袱重、项目管理难、工程量巨大的开源任务,在找到合适的 owner,提供足够资源支持的情况下,都是有可能被社区开发者们联合解决的。
正在进行中的第五期飞桨黑客马拉松 PaddlePaddle Hackathon 5th ,是飞桨开源社区一年两度的大型编程活动。
第五期活动发布三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营,上线当天即获得了开发者的广泛报名和参与,目前总体任务认领率 100%,核心框架任务提交率接近 90%,许多开发者直呼「卷出新高度」。
由社区开发者 Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,极大提升了社区活动的自动管理水平。在护航计划集训营中,学员 MarioLulab 兼任助教,搭建开源项目用于管理开发进度与周报提交,欢迎大家前往围观 ➡️ PFCCLab/Camp 。
与此同时,配套直播课程经过多期打磨,已形成完整的飞桨开源贡献视频资料,并发布在星河社区课程专区 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区 ,跟着飞桨导师,从这里开始你的黑客松之旅吧 💕
更多黑客松活动情况,可查看 blog:PaddlePaddle Hackathon Episode01 、PaddlePaddle Hackathon Episode02
8. 飞桨开源社区有哪些玩法 如果你正在寻找一个开源项目做贡献,或有意向加入一个开源组织 or 社区,我们非常欢迎你来飞桨开源社区玩,与我们一起执桨破浪,让深度学习技术的创新与应用更简单 。
你可以 follow 这样的路径:
社区活动 入门:快乐开源、启航计划 「快乐开源活动」 旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。如果你是刚接触飞桨 or 开源社区的小白,我们十分推荐你从打卡任务开始:
任务一:修改飞桨文档 ,完成你的第一个 PR,练习 git 操作,熟悉 GitHub 开源协作方式任务二:拉取 Paddle 代码,完成本地编译 ,让你对 Paddle 代码有更深入的理解,便于参与后续的框架开发任务任务三:在 PaddleMIX 中跑通 Stable-Diffusion 训练推理 ,你会快速掌握飞桨开发套件的使用,便于参与后续的套件开发任务详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/56689
「启航计划」 是 飞桨社区 发起的远程项目,也是「护航计划」的前置活动(不了解护航计划请看这里 ➡️ 护航计划说明 )。我们以集训营 的形式,鼓励开发者积极参与快乐开源活动 ,以此提升自己的代码实践能力。你可以把它当做【HACKATHON 预备营】,在这里找到志同道合的小伙伴,一起开发,一起成长。
详情可查看 issue:https://github.com/PaddlePaddle/Paddle/issues/58497
进阶:黑客松、护航计划 「PaddlePaddle Hackathon 飞桨黑客马拉松」 是飞桨社区的大型编程活动,鼓励社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践 ,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献。适合具备一定开源贡献基础和代码基础的朋友前来挑战自我~~
第五期黑客松活动火热进行中,详情可查看 issue:
社区组织 技术交流组织:飞桨核心框架贡献者俱乐部 PFCC PFCC,全称 Paddle Framework Contributor Club,飞桨核心框架贡献者俱乐部 ,是一个有兴趣、正在、或者已经为飞桨开源框架 做开源贡献的贡献者成立的虚拟组织,在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。
目前,PFCC 已汇聚 100+ Contributor,6 名贡献者成长为 Committer,维持双周一次技术分享会,累计召开 30+ 次,产生上百个议题(详见会议纪要 ),与飞桨产研团队探讨飞桨框架硬核技术难题,发起联合开发项目。
更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pfcc
社区治理组织:飞桨社区开源发展工作组 PPOSDWG PPOSDWG,全称 PaddlePaddle OpenSource Development Working Group,飞桨社区开源发展工作组 ,为加强飞桨开源社区的透明治理,提升社区成员的参与感和社区认同,决策飞桨社区的关键事项与治理策略而成立。
2023 年 11 月 16 日,飞桨开源社区举行线上投票选举与成立仪式,39 名合格投票人完成投票,选举产生第一届工作组成员。
更多信息可前往社区查看:https://github.com/PaddlePaddle/community/tree/master/pposdwg
9. 写在最后 我们始终相信,开源社区因为人的汇聚而变得有意义。在这一年中,我们参与和见证了许许多多社区故事,为每一个精彩的 PR 鼓掌喝彩,为每一次「我们 paddle 如何如何」的句式感动,向每一位热爱开源的开发者和研发工程师致敬。
在飞桨开源社区,我们结识了许多有趣可爱的人,程序员不再是一个标签化 🏷 的群体。他们中,有「摸资本主义的鱼,建设社会主义框架」的 Intel 工程师 jinyouzhi ,有社区 Committer 手搓框架入职百度的全栈 001 喵喵喵 SigureMo ,有「水遍」所有开发任务群强势进入贡献者排行榜的 002 张师傅 Liyulingyue ,有获得硬件伙伴高度称赞的 3w+ 部署代码贡献达人 Zheng-Bicheng ,...,甚至还有五年级的小朋友 zhiheng-liu 刷新飞桨 Contributor 最小年龄记录。
因此我们萌生了创建这个 blog 网站的想法,由全栈工程师 001 搭建,代码开源在 GitHub,记录飞桨开源社区的故事,欢迎各位开发者投稿呀~~ https://pfcc.blog/
👆一些流传度很广的开发者自制表情包👆
「Shaping PaddlePaddle Future with You,与你一起定义飞桨的未来!」 从来不只是一句口号,就是在这日复一日的平凡生活中,在一行行代码的设计与运行里,在一次次前沿技术的交流与碰撞下,一些改变正在悄然发生。期待飞桨与你共同成长,让我们一起打造易用的深度学习框架与工具组件,在开源的世界走得更远!
+
+
+
+
\ No newline at end of file
diff --git a/posts/chengdu-kaiyuanshe.html b/posts/chengdu-kaiyuanshe.html
new file mode 100644
index 0000000..c4dbc98
--- /dev/null
+++ b/posts/chengdu-kaiyuanshe.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 飞桨社区成都行:开源社活动与开发者线下 Meetup | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 2023 年 10 月 28 日、29 日参加开源社举办的「第八届中国开源年会」的精彩瞬间,以及与咱 Paddle 社区成都开发者们的线下见面~
第八届中国开源年会 飞桨开源社区受邀参加第八届中国开源年会,梦师傅和我(孙师傅)都贡献了两场精彩的演讲 🎉。
28 日的活动中,梦师傅在青少年开源与开源教育 分论坛上,分享了主题为「走进开源社区 」的演讲,向祖国的仙人掌们 🌵 宣传咱们充满趣味和活力的飞桨开源社区。
梦师傅还鼓励了很多青年开发者加入飞桨开源社区,其中甚至有一名刚年满 15 岁的初中学生,在活动后提交了 PR 并成功合入,成为了 Paddle 的 contributor @BernieHuang2008 。
29 日的主论坛上,孙师傅进行了闪电演讲 ,分享了「如何在开源社区摸 🐟 」,介绍了孙师傅工作 0.5kun 年🐔 里总结的摸鱼心得。
演讲的详细内容将在后续的博客中分享,敬请期待~
飞桨社区成都开发者 Meetup 在 29 日,我们还相约飞桨社区成都的开发者们线下面基,以下是痛失真名的成都开发者(网友 ):
梦师傅还很贴心的给每位开发者赠送了 PaddlePaddle contributor 专属徽章 🥳。
期待未来与成都的伙伴们再次见面!
彩蛋 🎊 最后,我们还一起跟随军哥 @jzhang533 观看了一场外国小姐姐的 livehouse,很精彩哟!
+
+
+
+
\ No newline at end of file
diff --git a/posts/chuan-story.html b/posts/chuan-story.html
new file mode 100644
index 0000000..876cfbe
--- /dev/null
+++ b/posts/chuan-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】英雄不问出处:川师傅的逆袭之路 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors “桨声川水悠悠过,长路漫漫风光留”,这次我们要采访的是小伙伴们都熟悉的励志富哥儿——川川师傅 ✨
一、前言 按川川要求,以下均以 🍢🍢 代称川川。
川川目前是一名平平无奇的 大学生🧑🎓,也是 Paddle 社区里的一名资深开发者。他精通 (🍢🍢: 我没有,不是,别瞎说🐶)Java、Python、C++ 等多门编程语言,还掌握 Flutter、Android、Vue 等工具,可谓多才多艺!
川川加入 Paddle 社区后,从最简单的文档修改任务开始,到参与快乐开源、熟悉 paddle 框架,到参与充满难度和挑战的护航计划,到最终自己能够独立的拆解问题、发起社区项目(ruff 升级),我们亲眼见证了他一步步的成长 (怎么有种养成系的感觉) 。
在提升自我外,川师傅也多次热心地帮助新伙伴们解决 bug、回答问题。(所以大家如果有问题,可以随时在群里骚扰他哦 )
然而当抛开“Paddle 社区开发者”“学生”等形象标签后,单独地看川师傅自身的人生经历,可谓是非常的励志 。你敢相信,川师傅是从中专、大专一路读上来的吗?川师傅的经历像是一本精彩绝伦的探险故事集。接下来让我们来读读他的探险之旅吧!
!!!注意!!!上图为川川师傅の帅照,小伙伴们可以截图保存哦!😝😝😝😝
二、采访内容 介绍一下自己吧,川川师傅 o(_ ̄3 ̄)o !
🍢🍢: 我的 AI Studio 账号是 gouzi,GitHub 的账号是 gouzil !o( ̄ε ̄_)o
作为一个 21 岁青春男大,平时有什么兴趣爱好?听说你喜欢出去玩,你在福建有什么推荐给大家打卡的景点么?哈哈~
🍢🍢: 爱好当然是出去走走玩玩,感受一下人间烟火气。打卡的话当然是福建的省会厦门啦🐶,在十里长堤跟着男女朋友看看夕阳,鼓浪屿的小巷子。平潭岛也挺不错的(🍢🍢没去过但是朋友圈已经发爆了,图中为蓝眼泪时期,需要特定的季节,且肉眼看不出来这种效果,需要相机长曝光,大家别跑空咯)。
厦门杏林大桥(来源: 川川相册) 十里长堤(来源: 川川相册) 鼓浪屿(来源:厦门文旅公众号) 平潭(来源: 新华社 2023/04/29 ) 据我了解,你在初中时就用易语言写了个安卓 APP 给奶奶使用,你能详细讲讲这个 APP 的设计目的和功能么?你当时学习了些什么技术才把这个 APP 做成?那又是通过哪种方式(看书?上网学习?视频?)学习的呢?
🍢🍢: 1️⃣ 其实设计这个 APP 是因为奶奶不识字,但是又需要使用手机(而正常手机打电话都是看人的名字进行拨打)。这个 APP 可以理解为一个默认桌面,手机解锁后 APP 就打开,打开后是像下图一样的手机联系人的照片,其实就是把联系人名字变成对应的他们的图片,这样尽管奶奶不识字,也可以看照片进行操作了!🐶 2️⃣ 当时学了啥技术: 其实也没具体的学,因为易语言是中文,有一定的思维逻辑就能实现啦。3️⃣ 通过哪种方式: 翻翻编译器自带的易语言说明(那时候 bilibili 还没有那么火,也没有啥书,只有一台能跑安卓模拟器的电脑)。
在 16 岁左右,你就陆陆续续自学了 Python、Java、C,后来又自学了 Go、Android 等等,在这个自学过程中你遇到了那些困难,又有想过放弃么?
🍢🍢: 遇到困难当然是有的,很难想象 C 我看了半年视频才学会的(有部分原因是我比较拖, 学习一门新的语言时长最好不要超过两周, 因为后续的项目会慢慢的补上来的)。每次接触一门新的语言都会对计算机有更深的理解,理解不同语言为什么要这么做,这么做的优缺点,这也是不断学习的动力吧。想过放弃么: 没有,我还挺感兴趣的,兴趣是最好的老师。
能简单聊聊你的这几年的学习经历么?
🍢🍢: 下图最右侧那一列就是学习的顺序啦(学那么多真没啥用,学好一个精通它就行)。也没啥经验,顺其自然就好啦,等学完技术应该也更新了。最快的方式就是跟着项目走,不断的优化它 (最后就会发现:我写的什么玩意,要不要重构🐶) 。不过倒是有几个提升比较大的时间段,一个是去参加了云计算比赛,让我会了 linux 和 docker 这些。一个是实习的那一年,让我整明白了网站这一套(B/S,C/S)。
现在社区开发者都认为你的编程能力很强,和学历形成了很大反差,能透露一下当时是为什么会上中专呢?是因为偏科吗?
🍢🍢: 不是偏科啦,我差的很平均🐶。顺带说一下厦门的初升高录取率为 45%,现在好些了 50%,卷不动卷不动,当然更多是因为我比较菜。
事实上在目前的舆论环境里,“专科生”是一个很遭受非议的标签😮💨,而作为一个亲历者,你内心的是怎么面对的呢?你当时又做了哪些方面的努力?
🍢🍢: 关于这个标签的话,我只想说:你说的对。没啥必要在乎别人的看法,做自己热爱的事情就好啦。
作为目前考上本科的计算机应用技术专业的学生,你对未来的职业发展有怎样的规划和期望✊✊✊?
🍢🍢: 我更喜欢做一些底层的工作,不太喜欢做应用层。规划:入职百度,重构 paddle 。
作为厦门领航团的一员,你当时是什么契机接触 Paddle 社区的?在 Paddle 社区做的第一个开源项目是什么?
🍢🍢: 说到这个契机啊,非常简单,你的上司是厦门领航团团长就行。第一个开源项目当然是我们孙师傅(@sunzhongkai588 )的 docs 啦,当然非常感谢佳维姐姐(@dingjiaweiww )和梦师傅(@Ligoml )的鼓励和协助我完成了在 paddle 的第一个 pr。
在社区里如何和其他开发者进行互动的?有没有什么特别有意思的经历或故事?
🍢🍢: 我一般有碰上问题就出来回答啦,或者一些技术讨论。特别的故事:五年级的小朋友叫我叔叔算嘛
对于 Paddle 框架护航计划,可以分享一下你的面试经历和感受吗?你觉得到达什么水平可以通过护航计划的面试?
🍢🍢: 经历的话,放心研发大哥不会难为你的,真诚就行。感受 emmm,大家一定要提前准备啊,刷刷算法什么的。什么水平 emmm,我也不太清楚,但是最好是熟悉 padlle,或者你的能力超级无敌强。
编者注✍️:「护航计划」可以简单理解为飞桨的远程实习项目,可参考 护航计划集训营说明
参与护航计划时,有什么不一样的感受吗?实际开发过程有没有遇到困难,是怎么解决的?
🍢🍢: 最大的感受就是,终于从应用层转向了框架层。困难是肯定有的,也有非常多不会的,但是这没关系,问研发大哥就行。就像昆昆(@2742195759 )说的: 你尽管问,我就是你的文档。
在 Paddle 社区中,你参与的哪个项目(或活动)你印象最深刻,能简单描述一下这个项目么?这个项目让你收获了什么?
🍢🍢: 印象最深的项目是下一个项目,下一个项目可以把之前项目的经验集结起来,也可以学到一些新的知识。当然 PaddleSOT 印象也挺深的,这也是我护航计划的项目。收获更多的是技术的进步吧。有时候看看喵喵(@SigureMo )的修改会发现,噢原来还能这么写。
对于深度学习领域,你有哪些想法和研究方向?目前有没有感兴趣的方向?
🍢🍢: 我其实更多的还是喜欢框架层,怎样才能让整个框架跑的更快,占用更低,更加的易用化。
发挥一下想象力,如果将深度学习比作一种食物,你觉得它会是什么?为什么?
🍢🍢: 可能是米饭吧,喂的越多越有力气,跑的越快,力大砖飞。
听说你使用飞桨解决过很多企业实际问题时,你遇到过最有趣的案例是什么?那么你是如何应用深度学习技术解决这个问题的?
🍢🍢: 我实习这个企业吧,他刚尝试深度学习,所以一般调调 API 就行了,更多的是怎样去分配资源,做到效率最大化 (我司全是 1050 的卡,我能咋办,我也很绝望啊) 。
除了深度学习,你还对其他领域感兴趣吗?有没有想过将深度学习与其他领域结合,创造出一些令人惊喜的应用?
🍢🍢: 其他领域其实有的,比如摄影和游戏,结合的话有想过,但是还没新建文件夹就不说了🐶
如果你有机会和 Paddle 社区 or 深度学习领域 or 计算机领域 的一位顶级专家进行合作,你希望和他/她一起研究什么问题?为什么?
🍢🍢: 这可就太多了,比如:不同语言的通信,怎么做到程序的相对安全,怎样去减少硬件之间的瓶颈。为什么 emmm,可能是因为自己对这方面感兴趣吧。
如果让你形容一下你和 Paddle 社区的关系,你会怎么说?
🍢🍢: 相互促进,互相成就 (更多还是 paddle 社区的大佬单方面带着我)
最后,作为一个热情、励志的年轻人,你想对 Paddle 社区里的开源者们说些什么呢?
🍢🍢: 放开那道题,让我来🐶
三、“鲁迅之我确实说过这话”专区 同样我们也邀请了一些和川川很熟悉的、有过合作经历的朋友们,贡献一下和川师傅相关的故事,或者他们对川师傅的评价~以下均为真心话,请放心看!
散佬 和川川交流还算比较多,川川基本上有空都会帮你解决任何疑问,甚至是看代码。虽然是年轻的富哥,但很努力上进,甚至比孙师傅还努力🐶;总体来说算很善良的小哥,教过我很多东西。希望能和他一起学习成长,向他多学习请教一些代码之道,早日都一起为中国开源社区多做一些更有价值的事情。 在我无数个老师中,他肯定是我印象深刻的老师之一。
卢畅 有幸在今年暑期上海 meetup 上认识了川师傅,很低调的技术大佬。在川师傅身上能看到对开源活动的热情,各大活动上都能看到川师傅的身影。希望以后还有机会和川师傅线下面基,迪迪小组再次出发!
编者注✍️:迪迪小组是上海 meetup 期间,相约去迪士尼玩的小分队
喵喵 自川子参与第一期护航计划开始已经马上就要 6 个月了,我和川子也算是深度交流了 6 个月。从护航计划来看,川子始终保持十足的热情,在 PaddleSOT 那时候还是以开源任务的形式发放,但每次有任务川子都会第一时间认领。之后到现在动转静单测推全,我的 review 速度都赶不上川子提 PR 的速度了……此外川子涉猎甚广,在交流的过程中我也学到了很多东西,川子也会参加各种开源任务,你基本上可以在任何「角落」里看到川子的身影~ 川子这 6 个月也是成长了很多,从早期每个任务都需要细致沟通到现在发完任务基本就心照不宣了,也能独立完成很多任务了。比如 Ruff 的升级优化,目前川子对 Ruff 的了解程度已经仅次于我了,再比如 OpResult 方法的 patch 补全,以及动转静单测机制,基本都是川子独立完成的。对于大多数任务,现在我已经能放心地说:「川子,这个就交给你了」 另外,「提前」说一下,川子贼有钱~
四、特别栏目——爱在何方之川川相亲帖 接下来,有请男嘉宾——小富哥儿川川来进行一段自我介绍✨。
🍢🍢 报菜名环节,身高179cm,体重65kg(±5kg),来自福建厦门,2002年出生,目前在福州读书,不抽烟,不喝酒。性格有点太温柔了,不太凶得起来。对陌生人有点社恐,熟悉了之后就好很多。有一点点宅,但不会非常宅,还是会出去走走(不然咋拍照片🐶)。有一点点强迫症,比如下面这张798的照片好像有点歪了。喔对了川川不会做饭。期望伴侣,可以稍微e一点,拉着我出去玩🐶。(🍢🍢: 咱就是说还有几个月才到22,也不至于这么着急吧🐶)
有意者,请扫码加入快乐开源群,联系川川师傅(找头像即可)。
彩蛋 🥚 最后让我们欣赏一下川大摄影师的大作吧 📷
北京 798 艺术区 福州三江口大桥 福州烟台山 厦门中医院附近 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/first-post.html b/posts/first-post.html
new file mode 100644
index 0000000..8c7be99
--- /dev/null
+++ b/posts/first-post.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 在这里,记录有趣的飞桨开源社区故事! | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 这是一个半官方的飞桨开源社区博客,由社区成员自发维护,记录社区的有趣的故事,欢迎大家投稿。投稿方式:在 blog 代码仓库里提交 PullRequest 即可,Pull Request 会自动触发 CI,CI 通过后,你的文章就会被自动发布到这里。
感谢 001 @SigureMo 帮忙搭建了这个博客。
+
+
+
+
\ No newline at end of file
diff --git a/posts/hackathon-5th-episode01.html b/posts/hackathon-5th-episode01.html
new file mode 100644
index 0000000..10004c8
--- /dev/null
+++ b/posts/hackathon-5th-episode01.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ PaddlePaddle Hackathon Episode 01 | 第五期活动上线 4 周,直播圆满收官,三大赛道进展顺利 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 向大家快速介绍飞桨黑客松第五期活动上线以来的进展(9.25-11.3)
为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 4 周的进展速览如下:
开源贡献个人挑战赛 :发布 111 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,109 个任务完成认领,60 个任务提交作品,13 个任务已经完成 ,感谢各位开发者的积极参与,感谢各位导师的及时 review。大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 12 名开发者产出基于 EB SDK 的应用 18 个,均已部署至飞桨星河社区 。飞桨护航计划集训营 :发布 18 个框架与套件开发项目,1 对 1 带教形式,已完成 18 名学员招募,并提交第一期周报,是飞桨开源社区首次 Code Camp 形式的开源活动,由开发者担任助教 。赛道一:开源贡献个人挑战赛 进度看板 任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率 热身赛 11 7 / 11 63.64% 2 18.18% 框架 API 开发任务 31 22 / 31 70.97% 1 3.23% 框架其他开发任务 16 14 / 16 87.5% 6 37.5% 科学计算模型复现 11 7 / 11 63.64% 1 9.09% 套件开发任务 24 5 / 23 20.83% 2 8.33% 合作伙伴任务 18 5 / 17 27.78% 1 5.56%
赛道亮点 社区开发者参与热情高,活动发布 1 周认领率接近 100%,提交率 50%+; Tomoko-hjf 开发黑客松小助手,自动更新任务榜单与看板,提升社区活动自动化水平;直播活动圆满收官,已形成完整的飞桨开源贡献视频资料,详见 issues#58125 ; 本次活动英特尔作为赞助方,并与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品。 参与提示 在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率相对较低,欢迎社区的开发者选择这些任务来挑战~~ 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
赛道二: 大模型应用与创意赛 我们收到了 127 人报名,提交了 18 个应用,加精项目 10 个。
赛道亮点 全新赛道,作为飞桨星河社区五周年预热活动,推广重点产品星河社区 ERNIE Bot SDK; 完成情况符合预期,上线 4 周即提交 18 个 EB SDK 应用,作品种类多样,涵盖游戏娱乐、办公助手、知识科普等多领域,符合赛道初衷; 社群气氛活跃,新老选手积极交流,且建立了沟通产研的 EB SDK 反馈文档。 参与提示 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
赛道三:飞桨护航计划集训营 18 个任务已全部完成招募,名单公示如下:
集训营亮点 参与提示 欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
活动运营与推广 联合宣传 与开源中国、启智、OpenVINO、思否、开源社、示说、InfoQ、白玉兰开源、开源之夏等合作伙伴以及海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目联合宣传。
直播 多平台同步直播,10 场直播共计约 1.4 万人次观看,直播信息与学习资料已发布在开源社区,并整理成 AI Studio 专题课程: 深度学习开发指南——黑客松 5.0 - 飞桨 AI Studio 星河社区-人工智能学习与实训社区
日期 主题 观看总人次 10.16(周一) 第五期飞桨黑客松来啦! 1956 10.17(周二) 新 IR Python API 适配升级 967 10.18(周三) 模型复现和贡献指南 975 10.19(周四) OpenVINO 开源生态建设与贡献任务解析 884 10.20(周五) 动转静全套件适配任务 989 10.23(周一) Arm 虚拟硬件助力边缘人工智能软件开发 1887 10.27(周五) 跨平台推理框架 InfiniTensor 2049 10.30(周一) 拓展 LLM 边界:使用向量数据库构建知识库 2193 10.31(周二) Paddle 框架在昇腾平台上的推理优化分享 1097 11.1(周三) 飞桨硬件生态伙伴任务介绍 420
+
+
+
+
\ No newline at end of file
diff --git a/posts/hackathon-5th-episode02.html b/posts/hackathon-5th-episode02.html
new file mode 100644
index 0000000..74de2f3
--- /dev/null
+++ b/posts/hackathon-5th-episode02.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ PaddlePaddle Hackathon Episode 02 | 第五期活动上线 8 周,框架赛道提交率近 90% | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 向大家快速介绍飞桨黑客松第五期开展以来的进展(11.4-12.1)
为了吸引社区开发者了解与参与飞桨深度学习开源项目与文心大模型开发实践,为飞桨框架、套件、大模型、合作伙伴等生态进行开源贡献,进一步扩大飞桨开源生态与文心大模型应用生态,我们组织了 PaddlePaddle Hackathon 飞桨黑客松第五期活动 。活动开展 8 周的进展速览如下:
开源贡献个人挑战赛 :发布 110 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,全部任务完成认领,72 个任务提交作品,32 个任务已经完成 ,框架方向提交率近 90%,科学计算方向提交率 70%+,进展超出预期,感谢各位开发者的积极参与,感谢各位导师的及时 review。大模型应用与创意赛 :作为飞桨星河社区五周年预热活动,目标挖掘优质文心一言应用,共发布趣味创意与生产力工具 2 个方向的任务,已有 22 名开发者产出基于 EB SDK 的应用 34 个,均已部署至应用中心 。飞桨护航计划集训营 :共有 22 名社区开源开发者在社区导师的指导下,进行飞桨开源项目开发。 按期完成了两期双周报提交,完成了 3 期技术分享,成果全部沉淀到开源社区 。赛道一:开源贡献个人挑战赛 进度看板 任务方向 任务数量 提交作品 / 任务认领 提交率 完成 完成率 热身赛 11 10 / 11 90.91% 4 36.36% 框架 API 开发任务 31 28 / 31 90.32% 6 19.35% 框架其他开发任务 16 15 / 16 93.75% 13 81.25% 科学计算模型复现 11 8 / 11 72.73% 4 36.36% 套件开发任务 24 6 / 24 25.0% 3 12.5% 合作伙伴任务 17 5 / 17 29.41% 2 11.76%
赛道亮点 尽管本期黑客松整体难度较往期提升,但社区开发者表现出了极大的专业能力和热情,任务已经 100% 被大家认领; 框架方向提交率近 90%,科学计算方向提交率 70%+,均高于往期黑客松。 参与提示 在上面的看板中能看出来,套件开发任务和合作伙伴开发任务,提交率依然较低,欢迎社区的开发者选择这些任务来挑战。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
赛道二: 大模型应用与创意赛 部分应用展示 我们收到了 270 人报名,提交了 34 个应用,在这里节选部分有趣的应用,欢迎大家在线体验。
赛道亮点 社区开发者们基于文心大模型的 SDK: ERNIE Bot SDK ,提交了种类多样,涵盖多领域作品,充分探索了使用文心大模型能做到的创意和创新。 参与提示 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
赛道三:飞桨护航计划集训营 活动进展 集训营的同学已经完成了两次开源开发的双周报: WeeklyReports 2023.10.25~2023.11.07 、 WeeklyReports 2023.11.08~2023.11.21 和三次技术分享 。
集训营亮点 参与提示 欢迎大家到代码仓库: Camp 里围观集训营的同学们的工作。 更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
彩蛋 🎊: 欢迎大家线下来见面 本周六(12 月 2 日)14:00 - 17:00 在 北京 798 举行飞桨开源社区 meetup,报名问卷:https://paddle.wjx.cn/vm/m1OLk4E.aspx# ,欢迎大家来聊天,飞桨定制咖啡等你打卡,梦师傅和花花在咖啡厅等着大家~
+
+
+
+
\ No newline at end of file
diff --git a/posts/hackathon-5th-episode03.html b/posts/hackathon-5th-episode03.html
new file mode 100644
index 0000000..27afddb
--- /dev/null
+++ b/posts/hackathon-5th-episode03.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ PaddlePaddle Hackathon Episode 03 | 创新碰撞,技术狂欢,飞桨黑客马拉松第五期活动圆满收官! | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 让我们看看哪些最强“Hacker”脱颖而出!
这是一次好奇心的远航,也是一场创作激情与团队协作的较量。
你懂技术,有想法,在这里可以尽情发挥!
我们希望你,不只埋头创造,一起享受不确定的乐趣,才能涌现意想不到的灵感和收获。
在这里,不止精益求精的竞技,去结识志同道合的小伙伴,去和研发导师 1V1 深度交流。
在飞桨黑客松的舞台上,创造力释放,“码”上见真章!
经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
01 - 高手云集的飞桨黑客松活动 PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第五期活动自 2023 年 9 月中旬发布后,开发者热情响应,比赛历经三个月完美收官!
本次活动任务难度持续升级,飞桨联合 OpenVINO™ 等生态伙伴发布 100+ 开源贡献任务。赛制全新升级,本期黑客松活动在延续开源贡献个人挑战赛的基础上,首次探索以 Code Camp 形式组织开源活动,1 对 1 带教形式,并由开发者担任助教。并发布全新赛道——大模型应用与创意赛,基于文心大模型,创意无限,打开想象力,开发 AI 原生应用。
共有 800+ 位社区开发者参与到飞桨黑客松中,160+ 支队伍进行任务认领,本期黑客松活动在任务完成数量、参与团队规模、项目类型丰富度等方面均有提升,足可见开发者们建设飞桨和文心生态的热情。 我们期待这些开发者团队持续在飞桨开源生态中迸发出光彩和力量,与飞桨一路同行,一起建设更优雅的飞桨开源社区。
02 - 三大赛道 开源贡献 飞桨与生态伙伴携手,发布了三大赛道共计 26 个方向的开源贡献任务,从框架开发、模型套件开发、论文复现、硬件部署到产业应用任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
开源贡献个人挑战赛 发布 124 个开源贡献任务,包括框架、科学计算、套件和合作伙伴方向,与 OpenVINO™、海光、Arm、高通、Zilliz、开放麒麟社区、9#AISoft 等合作项目共同出品,120 个任务完成认领,96 个任务提交作品,85 个任务顺利完成,完成率 70% ,感谢各位开发者的积极参与,致敬每一个开源贡献!
在第五期飞桨黑客松个人挑战赛中,开发者们码力全开,共计为飞桨新增 50+ API,增加 6 组共计 120+ API 转换规则,15 个 PHI 算子迁移、4 个分布式切分推导规则和 3 个转换函数,完成 9 篇 AI4S 领域论文代码复现,为大模型套件 PaddleMIX、PaddleNLP 及计算机视觉套件 PaddleSeg、PaddleClas、PaddleDetection 新增 10 个重要模型或新功能,为全套件模型接入动转静训练功能,为飞桨开源社区伙伴 OpenVINO™、Arm、InfiniTensor 新增 12 个新功能。
注:部分任务还有细节需要沟通,暂未完成 PR 合入,请锁定任务的开发者尽快完成 PR 合入哦~
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57262
大模型应用与创意赛 作为飞桨星河社区五周年预热活动,共发布趣味创意与生产力工具 2 个方向的任务,鼓励开发者发挥想象力和创新精神,构思基于文心大模型的创意方案,开发创新应用,从技术创新到应用实践,共有 37 名开发者产出基于 EB SDK 的应用 60+ 个,作品种类多样,涵盖多领域 ,欢迎大家进入飞桨星河社区应用中心体验。
趣味创意赛道一等奖作品:AI 数字人 | 数字诗人&数字发言人&数字人聊天
生产力工具赛道一等奖作品:【Hackathon 5th】基于文心一言的日报系统
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57585
飞桨护航计划集训营 发布 18 个框架与套件开发项目,1 对 1 带教形式,完成 18 名学员招募,共计提交 4 期周报,组织 5 期技术分享会,9 名学员进行技术分享,15 名学员通过考核。这是飞桨开源社区首次 Code Camp 形式的开源活动,所有学习笔记与周报记录留存在开源项目 PFCCLab/Camp 中,欢迎大家围观交流 。
集训营开源项目地址:https://github.com/PFCCLab/Camp
本期飞桨护航计划集训营开发项目内容硬核,既包括自动微分、新 IR Pass、自动混合精度、组合机制前反向统一、量化推理、算子类型扩展到复数、分布式能力建设与架构升级等核心组件开发工作,还有科学计算领域拓展专项、套件压缩能力建设、多模态大模型全流程建设等重要套件能力建设工作,营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了研发经理的肯定,3 名同学获得百度正式实习生 Offer。
更多详情请查看 issue:https://github.com/PaddlePaddle/Paddle/issues/57264
03 - 飞桨黑客松完成榜单 2023 PaddlePaddle Hackathon 飞桨黑客马拉松第五期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方,OpenVINO™、华为、海光、Arm、高通、Zilliz、开放麒麟社区等共同出品,以线上认领任务的形式进行。 本次共有三大赛道:开源贡献个人挑战赛、大模型应用与创意赛、飞桨护航计划集训营。根据开发难度分为基础任务和进阶任务,为大家提供丰富的深度学习开发体验。对飞桨黑客松第五期公示榜单如有异议,请于 2023 年 12 月 25 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 12 月 26 日前对您的异议进行复核反馈。
恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
04 - 新的身份等你点亮 在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
关于 PFCC
PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到 ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
原文链接:https://mp.weixin.qq.com/s/Yjvwj8br84sPard1lLoNOQ
+
+
+
+
\ No newline at end of file
diff --git a/posts/hackathon-6th-summary.html b/posts/hackathon-6th-summary.html
new file mode 100644
index 0000000..74140ff
--- /dev/null
+++ b/posts/hackathon-6th-summary.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ PaddlePaddle Hackathon | 探索无限可能!飞桨黑客马拉松第六期活动完美收官 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 飞桨黑客马拉松第六期,新赛制,新玩法,难度更深,挑战更大!
不论是再次相遇的老朋友,还是志同道合的新朋友,每个人都可以在这里共同探索无限可能。
这是一场真正的 Hacker 盛宴,同时也是一次硬核的较量,更是与飞桨研发团队和社区伙伴协作的绝佳机会!
期待见证你在这个舞台上的成长和进步。
彻底释放你的创造力,“码”上见真章!
经过激烈的角逐,让我们看看哪些最强“Hacker”脱颖而出!
01 - 更硬核的飞桨黑客松活动 PaddlePaddle Hackathon 飞桨黑客马拉松(以下简称为“飞桨黑客松”)第六期于 2024 年 3 月 20 日正式上线。本期活动提高了整体难度和结题要求,并且受到了开发者的热情响应。他们前赴后继,挑战自我,最终在经过三个月的激烈竞争后圆满落幕!
本次飞桨黑客松延续了往期深受开发者喜爱的两大活动形式——开源贡献个人挑战赛和飞桨护航集训营,并首次引入了「Fundable Projects」赛道,专注解决飞桨框架的核心技术难题。在这一赛道中,社区高水平开发者领导并规划技术路线,号召社区共同完成课题项目。此外,还新增了「优秀稿件征集与传播」赛道,鼓励开发者撰写基于飞桨框架新功能的科技文章,进一步扩展飞桨的影响力。
共有 49 位社区开发者参与并完成本期飞桨黑客松的任务,本次活动在任务完成难度、参与团队规模、项目类型丰富度等方面均有提升,充分展示了开发者们对于建设飞桨开源生态的热情和奉献精神。 我们期待这些开发者团队在飞桨开源生态中继续迸发出光彩和力量,与飞桨一路同行,共同打造更加优秀的开源社区。
02 - 四大赛道 开源贡献 飞桨与生态伙伴 OpenVINO™ 携手,发布了四大赛道共计 46 个方向的开源贡献任务,从框架开发、套件建设、论文复现、基础设施到技术文章任务应有尽有。开发者们结合自己的兴趣与能力在不同方向为飞桨做出重要贡献,感谢你们!
总览 开源贡献个人挑战赛:共发布 55 个开源贡献任务,最终由 13 位开发者完成 38 个任务。 护航计划集训营:共发布 27 个实训项目,涵盖多个救技术方向,最终 28 位同学参与答辩并顺利结营,加速了飞桨的功能迭代。 Fundable Projects:定位为硬核社区项目,本期由社区完成了 5 个关键技术项目的研发。 优秀稿件征集与传播:社区完成 9 篇高质量稿件,并在 CSDN 等平台传播。 一、开源贡献个人挑战赛 开源贡献个人挑战赛以开源贡献为核心,基于 GitHub 的飞桨及生态伙伴开源项目进行代码贡献。本期个人挑战赛发共布 55 个开源贡献任务,涵盖飞桨核心框架、科学计算、Paddle2ONNX 套件和生态伙伴项目,所有任务均完成认领,43 个任务提交作品,38 个任务顺利完成,完成率 69% 。 感谢各位开发者的积极参与,致敬每一位开源贡献者!本期完成的框架开发任务也将进入飞桨框架 3.0 发版流程,贡献者成果被全体飞桨框架用户共享 。
此外,本次黑客松 Paddle2ONNX 方向三道赛题的奖励(共 4500 元)均为社区捐赠,因此最后的奖励由 Paddle2ONNX PMC 向社区热心开发者直接颁发 。感谢 Paddle2ONNX 社区的六位金主:chenwhql 、luotao1 、goocody 、jeff41404 、 jzhang553 、ZhengBicheng 。
更多详情请查看任务 issue 📄: https://github.com/PaddlePaddle/Paddle/issues/62905
二、飞桨护航计划集训营 飞桨护航计划集训营是本期黑客松的核心赛道之一,专注于为开发者提供一个实践、学习与成长的远程集训营。营员以远程的方式,导师 1 对 1 带教深度参与飞桨重要开源项目开发实践。本次计划分两批共发布 27 个实训项目,涵盖多个技术方向,完成招募 32 名营员。三个月集训期间共计 提交 6 期周报,组织 2 期技术分享会,最终 28 位营员参与答辩并顺利结营 ,极大加速了飞桨的功能迭代。
集训营开源项目地址:https://github.com/PFCCLab/Camp ,所有学习笔记与周报记录均留痕~
本期飞桨护航计划集训营开发项目内容硬核,既包括 PIR、CINN、组合算子等专项机制建设工作,也包括模型迁移工具建设、框架 API 易用性提升、CMake 治理和编译优化、分布式自动并行架构升级和性能优化等框架核心组件开发工作,还有科学计算领域拓展专项、PaddleMIX 多模态大模型能力建设等重要套件能力建设工作...营员们的开发能力、开源热情与丰富成果不仅得到了各位导师的高度认可,也获得了内部研发经理的肯定,并有多名同学获得百度正式实习生 Offer。
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/61006
三、优秀稿件征集与传播 随着版本的更新,飞桨功能发生了非常大的变化,为了让更多的开发者了解这些信息,本期黑客松新增了优秀稿件征集与传播赛道 。该赛道共开放了 7 个稿件选题,涵盖 0 维 Tensor、复数计算、稀疏计算、高阶微分等技术点的使用指南及学习心得。所有参赛选手共提交了 12 篇稿件,最终 3 名选手合计 9 篇高质量稿件顺利通过审核并合入 ,并在 AIStudio、CSDN 等内容社区平台进行推广,帮助飞桨传播正面技术影响力。
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62907
四、Fundable Projects Fundable Projects 是本期黑客松的创新赛道之一,核心聚焦于攻克飞桨面临的硬核技术课题 。参赛选手需要能够独立剖析复杂的任务需求、精心规划技术实施路径,并倡导携手社区力量,共同推进关键功能需求的落地实现。本赛道共发布了 6 个亟待解决的飞桨关键技术项目 —— 为 Paddle 框架 API 添加类型提示、引入 clang-tidy 工具、旧动态图和执行器机制清理、全套件模型实现动转静训练功能、解决长期存在的 PaddleOCR 问题。所有开发课题均已被社区积极认领,并且其中 5 个项目课题的研发在社区的共同努力下圆满完成。
鉴于 Fundable Projects 赛道在本期黑客松中取得的超乎预期的成功与影响力,我们决定在未来的黑客松活动中继续深化这一赛道,并诚邀所有怀揣技术梦想、勇于攀登技术高峰的社区成员加入这场硬核技术的挑战之旅。为了表彰并激励更多的优秀贡献,我们也将加大该赛道的奖励力度哦~
更多详情请查看任务 issue 📄:https://github.com/PaddlePaddle/Paddle/issues/62908
未来计划 个人贡献挑战赛: 持续运转,征集并发布飞桨研发赛题,扩大开源声量。护航计划集训营: 重点开展 ,扩大集训营的规模、批次,结合 GLCC、开源之夏共同运营远程实习项目。Fundable Projects: 重点开展 ,尝试将更多硬核研发课题、产品新特性交由社区开发完成。其他(待定) 03 - 飞桨黑客松完成榜单 2024 PaddlePaddle Hackathon 飞桨黑客马拉松第六期由深度学习技术及应用国家工程研究中心主办,飞桨承办,英特尔作为顶级赞助方共同出品,以线上认领任务的形式进行。本次共有四大赛道:开源贡献个人挑战赛、飞桨护航计划集训营、Fundable Projects、优秀稿件征集与传播,多样的活动形式为大家提供丰富的深度学习开发体验。对飞桨黑客松第六期公示榜单如有异议,请于 2024 年 08 月 30 日 24 点前反馈至 paddle-hack@baidu.com ,我们将在 08 月 31 日前对您的异议进行复核反馈。
恭喜完成开发任务的团队,将获得任务对应奖金以及飞桨黑客松结项证书,同时也可以获得百度招聘绿色通道。
04 - 新的身份等你点亮 在参与飞桨黑客松活动时,部分开发者们向飞桨框架提交 PR(Pull Request)参与开源贡献,成为飞桨框架的贡献者,并且有意愿为飞桨框架做出持续的贡献。他们接受了来自 PFCC 的邀请,正在用自己的方式参与飞桨框架建设,与飞桨共同成长。如果你也热爱开源、如果你有意愿成为飞桨开源社区的 Contributor,就快加入 PFCC 吧!
关于 PFCC
PFCC 全称 Paddle Framework Contributor Club ,意为飞桨框架贡献者俱乐部,是一个有兴趣、正在或者已经为飞桨开源框架做开源贡献的贡献者成立的虚拟组织。在这里,飞桨开源框架的贡献者进行讨论、交流和分享,并为飞桨框架做出持续的贡献。如果你有意愿加入我们,请发邮件到ext_paddle_oss@baidu.com ,在邮件中附上自己的 GitHub ID、贡献详情与联系方式,会有工作人员邀请你加入。
加入 PFCC,与我们一起参与到飞桨框架的开发中吧!
戳这里看飞桨开源社区故事 ➡️ https://pfcc.blog/
+
+
+
+
\ No newline at end of file
diff --git a/posts/huanggua-story.html b/posts/huanggua-story.html
new file mode 100644
index 0000000..b29a166
--- /dev/null
+++ b/posts/huanggua-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】初中生也能当开发者❓少年黄瓜的开源奇遇记 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 他来了,他来了,他带着满满的故事,迈着自信的步伐向我们走来了!虽然刚满 15 岁,但小小黄瓜 的开源史却已有好几年!学校趣事?开源经历?迷人帅照?成山作业?你都能在本篇博客看到!
一、前言 Berniehuang2008 (人送外号:黄瓜),是深圳一位 15 岁的初中生,同时也是 OpenTeens(全国甚至全世界第一个青少年开源社区)创始人之一。黄瓜曾贡献过开源项目 SearXNG 和 GestureX 等,是一位优秀的青少年开发者。他在 10 月加入 Paddle 社区,并且以迅雷不及掩耳之势合入 PR,成为 Paddle 社区的 contributor。现在,他正在准备参加 Paddle 黑客松,让我们一起看看他的故事吧😀~
二、采访内容 简单介绍一下自己吧!
黄瓜🥒 我叫黄锦源,外号黄瓜,是深圳的一个初三学生。
现在是一名初三学生,课程学习忙么?有什么喜欢的科目没有?😁😁
黄瓜🥒 忙啊,当然忙。每天周考,从四点半考到六点,放学回家一堆卷子烦的要死。最喜欢的是数学,没有原因,就是喜欢😳。
学校最近有什么有趣的事情可以和大家分享一下!
黄瓜🥒 emmm,有趣的事情?没啥,天天考试有啥有趣的。。。不过昨天我还骑车来着,扫了一辆小黄车就一路骑到深圳湾,14 公里,挺开心的。我们几个朋友还去烧纸,哇塞,烧数学书真解气!(黄瓜自注:我们数学课从来不用书)
当初你是如何被编程和开源世界吸引的?是什么驱使你成为了一名青少年开发者和开源社区创始人呢?
黄瓜🥒 我是从 Scratch 学起的,一开始就感觉 Scratch 这玩意很有意思,想让他干啥他就干啥,有一种掌控世界的感觉。后来,Scratch 写了一百多个游戏之后玩无聊了,转行 Python,才发现这玩意比 Scratch 好玩 10086 倍! 初一的时候,被我们学校信竞老师征召入伍,但我对竞赛类的东西不感冒,学了一年就退坑了。
之前看你的 GitHub 主页里,有对 SearXNG 提交过 PR,这是一个怎样的项目?你在 SearXNG 项目中的具体贡献是什么?你最喜欢的部分是什么?这个经历让你有什么样的收获?
黄瓜🥒 SearXNG 是一个开源的搜索引擎,我当时对搜索引擎算法特别着迷,就找了一个,最后发现这玩意就是从 Google、Bing 上面爬数据然后整理! 不过既然点进去了,索性就帮他们修个 bug 吧,结果这就成为了我第一个参与的开源项目。现在越做越深入,跟 Maintainer 已经算得上认识了 hhh
编者注✍️:现在初中生都已经开始接触算法了吗!
除了在 SearXNG 项目中的贡献,我发现你还设计了一些开源小程序(eg:Dairy APP),能否分享一下你最引以为傲的作品是什么?你觉得这个作品的意义是什么?
黄瓜🥒 addd,Diary app 确实是我前几周的重点。我比较喜欢创新新功能,比如说一打开就弹出一篇以往的日记,配上符合当时心情的音乐,让你朝花夕拾一下。 现在嘛,我写了一个 Python 库,叫做 MercurySQLite,提供了一个高级的接口,能不用写 SQL 语句就能操作数据库,贼方便告诉你。
Dairy APP 部分截图 你如何了解到 Paddle 社区的,是什么吸引你加入这个社区并开始贡献?可以分享一下你和 Paddle 社区的小故事么?
黄瓜🥒 我也忘了第一次看 Paddle 是哪年了。。。不过当时我应该处于“AI 发烧友”阶段。后来,一年前?文心不是火了吗?我就想再看看 AI,就算是对 Paddle 有了一个大概的了解吧。 直到今年的中国开源年会,我不是办青少年分论坛吗?我们接下来就是教育分论坛,然后我听了梦老师的演讲,觉得“快乐开源”这档子活动挺有意思的。 其实我几个月前看过黑客松,那玩意儿实在是太难了做不来,但是快乐开源就挺好的啊,又不难,改文档也能学到很多,比如说文档的语法之类的,我的那个 SQL 项目文档就是受到了这个的启发。。
加入 Paddle 社区后的第一次合并 PR 经历如何?有没有什么有趣的插曲或者教训🤓🤓🤓🤓?
黄瓜🥒 哈哈哈,第一次我故意挑了一个最简单的任务做,只有几行代码,属于是投机取巧摸鱼了。。不过第二次——也就是现在正在进行的 PR——没那么轻松了。原文档的格式超级乱,我都不理解他是什么意思。然后又是 CI 的报错看不懂。。。现在差不多改完了,还有亿点点小问题,也快了
编者注✍️:文档任务很适合刚接触 Paddle 的开发者们,而相关的 PR 也很可能是大家在 Paddle 的第一个 PR。感兴趣可查看 ➡️文档 Docathon 系列任务
你觉得今后 Paddle 社区对你的个人成长和技术发展有何影响?
黄瓜🥒 Paddle 社区的技术实力肯定是没得说的。能跟这么多大佬在一起,我觉得不管是现在还是未来,都会对我有很大的影响。就比如说吧,虽然我现在还没有深入地接触到 Paddle 的技术层面,但是我只是在 PFCC 那个群里面苟着,就能学到很多东西,比如说 Paddle 的 CI 啊、代码规范啊之类的。 然后我准备试着,只是试着哈,参加下一次的黑客松,或者是黑客松简单版。我相信,只需要一次任务,就可以把那一块的相关知识掌握熟练,然后社交技能也可以上来,这绝对是一举两得。
作为一名青少年开发者,你一般是如何学习技术的,听说你曾经以 AI 学 AI?哈哈哈 ~~
黄瓜🥒 以 AI 学 AI?试过,但是效果真的不咋地。那时候 GPT3.5 才刚出来,我问他啥都是乱答的。所以我还是觉得以前的学习方式比较好。我喜欢那种“在实际应用里学习”。也就是说,给我一个应用场景,或者是项目,然后我先想该怎么实现,遇到哪里有不懂的技术问题,再去搜,再去问别人(当然,嫌麻烦的话就问 AI /doge) 我觉得这样的学习效率是最高的。
在你的同龄人中,有多少人对编程和开发感兴趣?你是如何看待青少年参与开源的?
黄瓜🥒 我的同龄人。。。如果你指的是我们学校的话。。。那么应该不多,应该不超过五个。所有学计算机的,基本上都是为了信竞。剩下的为数不多的四五个人,也只是用 GitHub 找找东西,玩玩游戏而已。
你对于即将参加 Paddle 黑客松有什么样的期待和目标?你希望在黑客松中取得什么样的成绩?
黄瓜🥒 我的目标就是试一下,看看自己的水平在哪,然后顺便学一些知识。所以?只能期待题目不要太难了 hhh 至于成绩嘛,我也不奢求,能得一颗星就算是重大成就了,如果我是“有技术的”,也许可以尝试 may be 多弄一点星???
那么在整个开源学习中,对你影响最深的是谁?为什么?(🤔🤔🤔)
黄瓜🥒 这个问题很难答啊 hhh,说谁都不太好。 但是如果要说真话,这就必须提到 SearXNG 那个搜索引擎的 Maintainer。他特别有耐心,还跟我闲聊,那段时间我初出茅庐啥也不懂,要不是他,我到现在还没入门呢! 当然啦,我必须希望以后能有更多影响我的人,超越他,对吧?
对于其他年轻开发者来说,你有什么建议?或者你想鼓励他们参与到开源社区,特别是 Paddle 社区中么?
黄瓜🥒 我觉得开源社区的一大魅力就在于“社区”——你永远可以找到帮助,永远可以与志同道合的人一起 coding,Paddle 社区更是一个典型。 在 Paddle,如果你有什么问题——无论白痴问题还是神级难度——都会有人来看,都会有人来帮助你解决。 我觉得 Paddle 的一大优点就是他是任务式的这种贡献机制。你可以选择各种不同难度的任务,循序渐进,慢慢提升自己。任务式贡献也可以让你有一个明确的目标,甚至是一个明确的思路,该怎么解决这个问题。
三、生活中的点点滴滴——黄瓜篇 黄锦源同学的日常 黄瓜的作业 黄瓜的猫🐱
+
+
+
+
\ No newline at end of file
diff --git a/posts/huangjiyi-story.html b/posts/huangjiyi-story.html
new file mode 100644
index 0000000..084ab92
--- /dev/null
+++ b/posts/huangjiyi-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】从入门到入职(入土):黄师傅的校招 offer 指南! | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 从积极参与社区开源任务,到加入飞桨成为 (练习生) 实习生,到最终正式成为飞桨研发团队的一员。以兴趣为起点, 黄济懿师傅 将我们展示了一条通往职业的道路,希望他的故事能够激励所有对开源充满热情的开发者们。接下来,原神启动 🚀!
一、前言 黄师傅是一个地地道道的江西人,喜欢吃辣🌶️🌶️🌶️。他本科研究生都就读于广州的华南理工大学,现为电子信息专业,即将毕业前往 Paddle 工作。作为一名研究僧,他在空余时间喜欢吃吃美食或者玩玩游戏,像是原神/LOL/金铲铲之战 (各位要是也在玩,可以找黄师傅哦~黄师傅求大佬带带!!)。
偷偷告诉你们:黄师傅最近的主线任务就是毕设,请务必多找他打游戏让他延毕(不是)
去年 11 月,他出于对深度学习框架的底层实现的兴趣,联系花花加入了快乐开源群。在这一年里,他陆续完成社区里各项开源任务以熟悉 Paddle 框架,期间他也把握住了来飞桨实习的机会,他不断积累开发经验,不断加深对 Paddle 的理解,最终,他通过了飞桨团队的面试,成功拿下了飞桨校招 offer!
黄师傅曾说:"我将继续在飞桨开源活动完成一些任务,希望能够学到更多的同时也能为飞桨的建设做出小小的贡献"。事实上,黄师傅曾分别参与了 PHI 算子库独立编译 、算子定义自动生成 ,Fluid Kernel 函数式改造 等多个快乐开源活动项目以及飞桨框架护航计划,到目前为 Paddle 贡献了 100 多个 PR。抛开实习生和正式员工的身份,黄师傅自身也是飞桨社区的自发贡献者和推动者。接下来,就让我们来瞅瞅黄师傅的精彩 Paddle 之旅吧!!
原神,启动!!(请读者自行脑补 BGM)
二、采访内容 介绍一下自己吧,黄师傅!(●'◡'●)
黄师傅: 我的 AI Studio 和 GitHub 的账号是 huangjiyi ,也是我名字的全拼(黄济懿)。
可以简单和大家分享一下你生活中有什么兴趣爱好吗⊙o⊙(游戏、旅游、运动等等)?
黄师傅: 我就是个死宅,平时就是打打游戏,刷刷 B 站,出门也就是找点好吃的。
听说你本科研究生都在华南理工大学,你们学校周围有什么好吃的啊?🍔🍟🍿🥯🥪🥗🎂🍬🍹🍉
黄师傅: 因为在华工太久学校食堂已经吃腻了,我会经常出校找点吃的,但活动范围有限,学校周边我吃过比较好吃的不多,就川菜小炒、麻辣香锅、鸡公煲、螺狮粉、泰国菜这些。
我了解到你平时有在玩 LOL,那么如果把 Paddle 比作一个英雄🦸,你觉得它最像谁?为什么嘞?
黄师傅: 我的答案是维克托 ,我的想象力有限,我只是觉得维克托的技能是会进化的,而 Paddle 也是在不断进化(更新)和扩展的,另外在维克托的背景故事里,他发明了很多具有智能的机械,比如蒸汽机器人,这和我们用 Paddle 来做的事比较相关,我只能想到这么多了。
维克托 你在加入飞桨开源群之前对 Paddle 的了解是什么样的?有没有听说过一些关于 Paddle 的传闻或者故事?
黄师傅: 我在加入飞桨开源社区之前,我主要是一个用 PyTorch 跑深度学习实验的研究牲,对 Paddle 的了解也是和 PyTorch 类似的深度学习框架。关于 Paddle 的传闻的话像是国内最早开源的深度学习框架,以及国内最好的深度学习框架。
你第一个在 GitHub 上完成的 PR 是关于什么的呢?在 PR 的过程中你遇到了什么难题吗?
黄师傅: 我第一个在 GitHub 上完成的 PR 是 PHI 算子库独立编译 开源活动的一个子任务,只需要进行简单的代码替换,没有遇到什么难题,只是第一次改这么大项目的代码有点担心会不会改出什么问题。
编者注✍️:【PHI 算子库独立编译 】是飞桨开源社区的快乐开源活动之一~我们社区有很多类似的、名字听起来很高大上但实际上难度不大的开源活动
你觉得 Paddle 相比其他深度学习框架有什么优势?可以举个例子么?
黄师傅: 其他深度学习框架我主要使用过 PyTorch,从用户的视角来比较的话,Paddle 具有丰富的中文文档,包括一些 API 文档和框架开发的技术文档,同时在 AI Studio 上有很多开发者分享的基于 Paddle 实现的项目和以及开发心得可以参考,这些对于国内用户十分友好。另外 Paddle 还有很多开源的套件,用户能够使用这些套件更快地完成一些深度学习应用任务。
飞桨的开源活动中,你完成的任务中有没有什么特别有趣或者有挑战性的项目?有没有什么技术难题让你觉得很兴奋或者很有成就感?
黄师傅: 我参加过的很多关于框架开发的开源活动都比较有挑战性,期间遇到的一些困难主要是一些编译问题,然后在通过调试定位问题所在代码、弄清楚问题原因、最后解决问题的时候会比较有成就感。
据了解,你接触 Paddle 已经有一年多,那么你最欣赏 Paddle 团队中的哪些特点或价值观?为什么?
黄师傅: 我比较欣赏的一点是 Paddle 团队非常重视开源社区生态,这一点从丰富的社区活动可以看出来,社区开发者可以从中学习到很多东西同时能够获得丰厚的奖励。
我记得你说过花花和涛姐给了你很多帮助,你觉得他们是怎样的人呢(分别说说🫶🫶)?为什么?
黄师傅: 花花:飞桨最美运营,关键人家还很努力。 涛姐:为了让开发者能一直有新鲜热乎的开源任务做操碎了心。
编者注✍️:花花是飞桨社区顶尖运营,涛姐是飞桨社区顶尖研发。
你是怎么获得去 Paddle 实习的机会的呢?
黄师傅: 关于我如何获得去 Paddle 实习的机会,当时我刚开始做了一些开源任务,然后在和花花交流的时候以一种半开玩笑的语气问花花能不能去实习,结果没想到花花真的和涛姐提了,然后涛姐真的申请了,飞桨真的给我面试了,然后我面试也真的通过了,然后我就去实习了,一切都是这么突然。
编者注✍️:其实目前已经有相当多的社区开发者,通过参与开源活动接触到 Paddle,并最终获得实习机会。另外,对于不方便线下实习的同学,我们也提供了远程实习的方案,可以了解往期【护航计划 】。
在 Paddle 实习的时候,你是否参与了某个具体项目的开发?可以分享一下你在项目中的具体角色和贡献吗?
黄师傅: 我在实习期间刚开始是接着之前在社区参加的 PHI 算子库独立编译 开源项目,完成剩下的一些比较困难的任务,花了一个多月的时间完成,剩下的大部分时间参与了结构体 Kernel 注册统一 这个项目,期间也会接到一些其他小任务,一共实习了 3 个月吧,基本状态是要我干啥干啥,不会的就问。
你认为实习那段时间你最大的收获是什么?你认为这段实习经历对你以后的职业生涯规划有起到什么影响?
黄师傅: 收获很多,体验到了与在学校实验室不同的工作氛围,认识了一些研发大佬,深入了解了 Paddle 的一些机制,积累了一些编译调试和解决问题的经验。在 Paddle 的开源经历和实习经历让我找工作的目标从算法工程师转向了开发工程师,相比于具有不确定性同时很多时候凭借直觉的深度学习算法研究或者应用工作,我发现我更喜欢逻辑性更强且大多数问题都能找到原因的开发工作。
最后也恭喜你拿到 Paddle 的 offer 🎉,对于同样有志加入 Paddle 团队的学生党,你可以分享一些建议议、经验或者成功路径吗?
黄师傅: 我感觉我能拿到飞桨 offer 很大一部分原因是我在飞桨的实习经历和参加了一些开源活动,所以我的建议是在学习技术的同时多参加飞桨的开源活动,或者有机会去飞桨实习。
黄师傅的校招 offer 部分截图 三、“著名平台——虎扑评论”专区 这次,我们邀请了一些和黄师傅有过合作经历的朋友们(以及实习期间的导师🐶),贡献一下和黄师傅相关的故事,或者他们对黄师傅的评价~以下均为真心话,请放心看!
编者注✍️:黄师傅有些社恐,所以认识的社区朋友不多,大家正好可以借此机会认识一下。
骆涛 我觉得黄师傅是运气真好,类似张无忌,各种捡到宝,当然实力也是重要的。他刚来的时候其实对深度学习框架基本上不了解,然后我们快乐开源刚好放了第一个大任务-phi算子库(解决 CMake 依赖不需要懂深度学习框架)。然后他做啊做,问我们有没有机会来实习,当时 hc 太太太少了,但我们刚做起来,就给他申请,然后他就开挂了
元日升 这位同学的工程素养很高,学习能力很强,经常超预期推进项目,最近独立完成高难度项目:飞桨 Flags 工具库建设,开源成果丰硕。另外也是原神大佬,工作累了还能带你打游戏,梦幻队友。
花花 原神60级大佬!还欠我一次开源社区分享,请记得!
黄师傅欠花花一次分享的证据(花花强烈要求贴上来的) 四、生活中的点点滴滴——黄师傅篇 黄师傅 一张螺狮粉照片,一张游戏截图,这两张图片就代表我大部分的生活了,我也就是个喜欢吃点美食、打打游戏、敲敲代码的普通人。
黄师傅力荐的他认为广州最好吃的《周成芝螺蛳粉》! 谁懂十连双黄的概念?黄师傅玩几年原神了就这一次 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/ijcai-2024-competition.html b/posts/ijcai-2024-competition.html
new file mode 100644
index 0000000..1a03e09
--- /dev/null
+++ b/posts/ijcai-2024-competition.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ IJCAI 2024 任意三维几何外形车辆的风阻快速预测竞赛比赛圆满完成~ | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 🎉🎉2024 年 8 月 8 日,“ IJCAI 2024: 任意三维几何外形车辆的风阻快速预测竞赛 ”在韩国济州国际会议中心(Jeju ICC)火热举行,并且取得了超级圆满的成功!💰💰价值 $35,000 的大奖到底花落谁家了呢?参赛选手们的技术方案是不是赛博朋克风爆棚?快来围观,别错过啦~
👀另外,就在前一天,2024 年 8 月 7 日,飞桨开源社区也在 IJCAI Industry Day 论坛上进行了超赞的路演。在美丽又浪漫的韩国济州岛上(虽然天气有点热哈哈🔥),百度飞桨和海内外的科研人员、企业工程师以及 AI 开发者们成功“汇合”,和众多 AI 领域的大咖们进行了深度的交流,氛围超级愉快😊!
大赛背景 📚说到这个大赛的背景,开放原子开源基金会可是个致力于推动全球开源事业发展的非营利机构哦!他们的目标就是搭建一个前沿技术竞争、优秀人才选拔、创新成果展示、商业转化引导和对接交流合作的平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态的繁荣和可持续发展提供动力。
🤝而百度飞桨开源社区与开放原子开源基金会的目标和愿景可是高度重合的哦!所以他们自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了“飞桨 PaddlePaddle 开源贡献挑战赛”后,这次飞桨团队再度受邀,和开放原子共同举办了这次超酷的竞赛!
🏁这个算法模型挑战赛可是有三个赛道哦!分别是基于 ShapeNetCar 的简化汽车数据、基于 DrivAer 复杂几何的工业级别汽车数据,以及多类型汽车融合数据。选手们需要使用 AI 进行快速分钟级的预测,看看汽车在不同工况下的风阻会是多少。要知道,风阻对汽车设计可是非常重要的哦!它可是会直接影响汽车的燃油和电池续航呢~(详情请参考:雷军“上课”讲风阻,小米汽车风阻全球量产车“最低”)🚗💨
🧠💻 选手们这次可是要放大招了!他们得把流体力学(哎呀,听起来就头疼🤯)和 AI 深度学习这两大领域的知识融合在一起,进行深度的模型设计和探索。这可不是闹着玩的,得在 ABC 三个赛道的测试数据集上,精准预测风阻,还得尽量减小风阻预测的 L2 误差。这可是个技术活🚀💨。
赛程回顾 大赛 4 月 23 日一上线,报名就火热启动了!经过两个半月的激烈打榜,选手们拼尽全力,终于在 7 月 21 日迎来了封榜时刻。之后,经过严格的代码审查和线上初审,我们最终在 8 月 8 日韩国济州国际会议中心迎来了超燃的决赛路演! 比赛过程中,选手们在官方交流群里可是热闹非凡,他们积极讨论、互帮互助,甚至还主动给官方提建议,帮我们改进比赛平台,真是太给力了😄!虽然中间有些小插曲,但只要我们一沟通,选手们的需求就能迅速得到解决,真是效率满满!
最终,大赛迎来了 323 支团队的热情报名!虽然赛题难度不小,但还是有 15 支超厉害的队伍成功提交了作品,其中 9 支队伍更是脱颖而出,入围了决赛答辩,真是让人热血沸腾啊! 选手们纷纷表示,流体仿真真是个“磨人”的活儿,太消耗资源和人力了(尤其是仿真工程师的头发和脑细胞,哈哈)!不过,大家也都觉得,能快速预测风阻的价值和意义非凡,绝对是值得努力的!
通过大家的开源以及互相学习,相信 AI 空气动力学通用模型能够早日实现。——— 赛道 A 第 10 名 hnu
Industry Day & 大赛-AI 流体平行论坛 路演现场 Industry Day
军哥(@jzhang533)他用全英文的 PPT 给大家带来了一场超级精彩的介绍,带着 IJCAI 会议的观众们一起领略了百度飞桨在 NLP、自动驾驶等工业领域的落地应用和解决方案。那发音,标准又流畅,和海外的专家学者们问答沟通起来也是毫无压力,受到大家的一致好评,太起范了! 😄🎉🎉🎉
AI 流体平行论坛
这次我们可是请到了几位大咖哦!北京航空航天大学软件学院的副教授周号益、惠尔科技的 CEO 常宇飞、NVIDIA 的解决方案架构师况吕林,还有四川大学工程数值模拟基础算法与模型全国重点实验室的副研究员张明洁,他们都来到了现场做报告!介绍了 AI 在自动驾驶,汽车设计,气象预报,流体仿真等领域的应用,大家听得全神贯注,认认真真,一点都不敢错过呢!👏👏👏
此外在会场,也分别为大家呈现了第二届开放原子开源大赛赛项共建方招募的宣讲,和百度飞桨 PaddleScience 的相关的科学计算产品建设和探索: 再给大家隆重介绍一下 PaddleScience!这可是个发论文、打比赛的利器啊!它不仅面向 AI 领域的开发者们,还特别适合流体力学、材料科学、气象科学等领域的科研人员们使用。简直就是科研神器,有没有!大家赶紧来试试看吧!🎉🎉🎉
欢迎大家体验 PaddleScience,并参与我们的共建计划 https://github.com/PaddlePaddle/PaddleScience (合作邮箱 paddle_science@baidu.com )
选手们也是个个都不含糊,纷纷展示了自己的解决方案,那场面可真是热闹非凡!获奖选手的代码仓库也已经在 PaddleScience GitHub 上公开啦,大家快去围观吧!链接在这里 ➡️ 获奖选手代码仓库
会后采访现场
比赛颁奖现场 比赛颁奖现场,一览选手风采~
恭喜所有的获奖队伍!🎉🎉🎉开源创新之路上飞桨与你们同行!🚀🚀🚀
平行论坛合影留念 平行论坛,热闹非凡,合影一张,留住精彩瞬间!📸🎉
百度+开放原子展台小分队 除了精彩的会议,百度还在 IJCAI 会场设置了一个超酷的展台!在这里,我们给海内外的科研人员和企业工程师们详细介绍了开放原子开源基金会、百度 Apollo 汽车、百度文心一言,百度飞桨框架和飞桨科学计算这些超棒的项目!
真的要感谢百度、开放原子、IJCAI 的运营和宣发工作人员们,你们齐心协力,让这次活动如此成功!
话不多说,直接点赞!👍👍👍
最后最后,告诉大家一个好消息!新的比赛已经火热上线啦!这次可是 CIKM 2024 的大赛哦!主题是“AI 辅助的先进空气动力学-优化汽车设计以实现最佳性能”,听起来就超级高大上有没有!大家快来报名吧,一起用 AI 的力量来优化汽车设计,挑战最佳性能!期待你们的精彩表现哦!🎉🎉🎉
报名链接:https://competition.atomgit.com/competitionInfo?id=cda4e961b0c25858ca0fd2a4bdf87520
AIStudio 快速开始:CIKM 2024: AI Aided Advanced Aerodynamic - 飞桨 AI Studio 星河社区
+
+
+
+
\ No newline at end of file
diff --git a/posts/ligoml-story.html b/posts/ligoml-story.html
new file mode 100644
index 0000000..5624eca
--- /dev/null
+++ b/posts/ligoml-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】再见,追寻月亮的梦师傅 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors All over the place was six pence, but he looked up at the moon.
一、前言 省流总结:梦师傅跑路了,写篇 blog 庆祝一下 🎉
这是半个月前完成的采访,但应梦师傅的要求,文章在她的 last day(8 月 9 日)才发布。相信社区里的各位对梦师傅已经非常熟悉了。在飞桨开源社区的建设过程中,Ligoml 这个 GitHub ID 几乎无处不在,而她那一头粉色头发和猫猫更是给大家留下了深刻的印象。作为同事,她十分靠谱;作为朋友,她非常有趣。我还清晰地记得,刚来飞桨实习时接的梦师傅的活儿,当时她正好在毕业旅行,交接时跟我说她在雪山上信号不好...Anyway,希望梦师傅裸辞后身体健康,万事顺遂~
二、采访内容 介绍一下自己吧!
梦师傅: 我叫李梦柳,前百度 AI 产品经理,GitHub ID:Ligoml,因为平时爱水群和答疑,大家都叫我梦师傅。
微信截图 都说 21 世纪是生物的世纪,为什么研究生跨专业学 CV 了?
梦师傅: 我本科专业是生物医学工程,当初选专业主要是两个原因,一个是生物学的最好,另一个是喜欢小动物(后来发现我只是单纯的喜欢猫)。
进到大学以后参加了一些实验室项目,印象很深的一个项目叫:还原型谷胱甘肽控制金纳米棒制备研究,那时候感觉这个课题名称明明都是汉字,却那么难以理解。简单来说就是根据特定配方,把各种液体混合在一起,然后等 8 个小时后金纳米棒长出来,并试图解释电镜下的折线含义。其实很符合对生科人的刻板印象,穿着白大褂,操作移液枪,混合各种彩色液体(实际上是无色的),养细胞做实验。每一次的漫长等待,对结果的未知性,都在坚定我跑路的心。所幸我的成绩还不错,拿到了保研资格后,就找到了我的研究生导师,转投到了 CV 这个赛道,然后发现炼一次丹的时间,可能不止 8 小时……当然这就是后话了。
听说大学期间你还当过某公司 CEO,细说
梦师傅: 对,那个时候在鼓励“大众创业,万众创新”,开公司的成本非常低,刚好我所在的社团有一些拍片子做网站的特长,有一个公司实体会方便一些,于是就和当时的几个社团负责人联合创立了一家公司,叫西咸新区挑战信息科技有限公司(因为社团名叫挑战网),我是法人代表。当时想的就是,只要我们不玩金融游戏,踏踏实实赚点生活费还是够活的。毕业以后把社团和公司一起留给学弟学妹了,现在应该还活着。当年一起开公司的伙伴们,直到现在也是我非常好的朋友,会约一起出去旅行什么的。
毕业典礼 可可托海 为什么毕业加入了百度?以及为什么开始搞开源社区了?
梦师傅: 当时研究生毕业的时候手里有几个 offer,因为代码写的菜,不太想为难自己,所以选了做产品经理,这样可以指挥别人给我写代码,嘻嘻。
作为校招生刚来,肯定是以培养为主的,经理就安排我去做开源社区的 issue 管理员,每天解答各种 issue,以及找人帮我解答 issue。那个时候飞桨刚发布 2.0 版本,易用性得到了极大的提升,具备了建设开源社区的技术基础,我的性格比较活泼,还懂点 AI 技术,就很顺理成章的被分配去搞开源社区了。我们飞桨的社区开发者个个都是人才,代码写得漂亮,说话又好听,每天上班跟大家水水群,还是蛮快乐的。
建设开源社区的过程中,有没有遇到印象特别深的事或人?为什么?
梦师傅: 那可太多了,为此我还专门写了一篇博客 👉 https://pfcc.blog/posts/2023-os-report ,我就只提几个关键词,大家自己对号入座:春节 18 响 🧨,雪糕狂热粉丝 🐱,最强水群人📱,开源强迫症 001 👓,还有一些人菜瘾大的小甜水爱好者,请坐小孩那桌(误
编者注 ✍️:春节十八响这些梗永流传了属于是
搞开源社区的时候快乐吗(狗头)?对于开源社区的价值和意义是怎样理解的?
梦师傅: 是真的快乐,当时我还在厂内做了一场《我在飞桨 快乐开源》的演讲,很多同事都有印象。在开源社区,人的主体性得到了充分的尊重,我们相聚在一起,只是因为纯粹的热爱,只做自己感兴趣的东西,没有利益和投入产出的权衡,怎么会不快乐呢?
我认为开源会给一个项目带来无穷的生命力,即使许久无人维护,后面的开发者仍旧可以基于这个开源项目去生长出其他有价值有意义的项目,大家共同为开源项目添砖加瓦,持续不断的推进技术向前发展。而且由于你需要把代码开源出来给大家看,那么就会有一些个人包袱在,会关注代码规范性、文档完整性,这样会使得整个生态良性发展,越来越好。
编者注 ✍️:拿着工资上班水群确实挺快乐的
厂长近期关于开源有一些表态(开源大模型会越来越落后),你怎么看?
梦师傅: 猜猜我为什么离职 我觉得厂长应该是有自己的考虑,而选择了文心大模型走闭源的道路,这本身无可厚非,OpenAI 也没有开源 ChatGPT,但是踩一捧一就没有必要了吧,这样的发言也把开源的飞桨放到了一个尴尬的位置上,就很难评。
在百度飞桨工作的三年里,最快乐的一件事&一些事?
梦师傅: 我还是蛮会在工作中找乐子的,遇到了好多合得来的同事朋友 👭,工作之余约个咖啡约个酒 🍹 什么的,都让我十分放松。最快乐的时光可能是去年的 7 月,先是去了日本团建 👗,然后五月天演唱会 🎤、梅西球赛 ⚽️,在上海办了开发者嘉年华 👻,面基了好多只认识 GitHub 🆔 的网友,我的头发也是那段时间变了很多颜色 🌈,差不多一周就会换一个,那时候的生活是非常多彩且自由的。
注:换颜色的原因是我的护发素有颜色,不是每次都需要去理发店重新染的,而且因为是护发素所以不伤头发 hhh
最想吐槽百度&飞桨&领导的是什么?至少说出一个百度最大的病症(狗头)
梦师傅: 经常有人评价百度:起个大早,赶个晚集。我对此有深刻的体会。百度其实不缺有想法有能力的人,整体的氛围也是鼓励探索的,所以我们经常能看到很多在厂内已经聊过做过的项目,成为了别家打造的爆款产品,互联网行业的黄埔军校名副其实。
在我看来,上层定位不清晰,中层摇摆不定,会让我们这些一线打工人非常心累。以我后来做的 AI Studio 为例,不到一年时间平台定位更换了三四次,从学习与实训社区到大模型社区,再到个人开发工作台,现在回归了大模型学习平台,每一次的变更都会带来整体功能和交互逻辑的大调整,出走半生,归来仍在原地,甚至可能更差。这期间 ModelScope、HuggingFace、Coze 等平台均以自己准确的定位和优质的产品体验成为了各自领域的头部,我们输在哪了呢?
跑路的原因?裸辞之后有什么打算吗?
梦师傅: 卷不动了,想歇一段时间,刚好手里的工作告一段落,觉得现在离开会是一个比较负责任的时机,所以就提了离职。
我其实很感谢百度能给我一个宽松的工作环境和成长空间,以及足够裸辞的存款作为底气。之后的打算嘛,应该还是会找个班上,想折腾点 AI 工具,搞点有意思的项目或者视频,我没做过的事情,都可以一试。
不考虑薪资,最想做的工作是什么?
梦师傅: 做开源应用仙人(别笑)。
之前选择做产品经理,主要还是代码写的菜,那假如我基于别人的开源项目,让 AI 给我写呢?我就动动嘴皮子,搞点没啥用但是有趣的应用给大家玩,代码开源出来,感觉也挺有意思的,我甚至可以录个视频给大家当乐子。
三、来自社区的拷问 梦师傅 我数数啊,粉色、金色、蓝色、绿色、紫色、灰色、奶茶色、水蓝色、粉紫色、玫红色......
梦师傅 全网都叫 Ligoml,不过是我的个人账号,我比较懒,还没有运营规划哈哈哈~
whisky-12 以后还有机会见到梦师傅的猫吗?
梦师傅 有的呀,想看可以群里@我,有趣的照片和视频我也会分享到朋友圈,看完记得点赞
张师傅 想问问梦师傅裸辞之后有机会来亦庄这边发展吗?
梦师傅 应该还是在AI这个圈子里吧,毕竟我也只会这个
梦师傅 我的审美还挺单一的,就喜欢高高瘦瘦长相清爽的男孩子,我们社区可多了,点名都点不过来(端水
四. 大龄失业粉毛女青年旅行 Vlog 戳戳 Vlog ➡️ 【离职日记|裸辞后我都去玩了点什么】
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
+
+
+
+
\ No newline at end of file
diff --git a/posts/limin-story.html b/posts/limin-story.html
new file mode 100644
index 0000000..9d8ab8a
--- /dev/null
+++ b/posts/limin-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】躺平健身搞开源:敏师傅的三十而立 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 从对 Git 一窍不通到如今能够丝滑完成黑客松赛题,从曾经历鬼门关的生死挣扎到现在能够轻松跑几公里不喘气,从毕业于武大国软学的有志青年到佛系养生的新时代躺平中年,敏师傅 的人生经历就像是那瓶经年陈酿的老酒,醇厚细腻、回味无穷。
一、前言 是谁,天天说自己是 “老咸鱼” ?是谁,戏称自己是 “快奔 4️⃣的老头子” ?又是谁,自诩为 “摸🐟王者“ ?是他、是他、就是他~我们的朋友——敏师傅 !!!
匿名回复: 我没有,假的,都是假的
敏师傅毕业于武汉大学,目前在珠海某甲方企业工作。作为新时代中年人,敏师傅和许多开源者一样,喜欢躺平、宅家、吃吃吃!但敏师傅不仅喜欢吃,还喜欢做。不仅喜欢做,还擅长烹饪各式各样的美味佳肴,堪称“当代好男人”(敏:“相对的,比群里其他大佬差距还很大!”)、“顶级家庭煮夫”、“万千少女的理想老公🫰❤️(敏:“不是不是,我有主的,理想厨子是真!”)连米国五星上将麦克阿瑟见了都评价道:“不是米其林大厨请不起,而是李敏更具性价比!”
后文有敏师傅的厨艺展示哦~
在健身养身方面,李敏师傅也颇有经验。给他一根杠铃杆,他能撬动整个亚欧大陆!给他一套跑步装备,他能漫步宇宙!著名物理学家阿基米德曾说:“李敏所创造出来的物理奇迹足以改写人类此前所有的力学研究!”无论是极限深蹲、恐怖硬拉还是痛苦卧推,在李敏的面前都不过是老八进厕所手到擒来!
匿名回复: 没有没有,都是瞎说的,手无缚鸡之力!
而在开源方面,作为一个非专业的开源开发者,敏师傅从学习如何提交 PR 做起,到加入 Paddle 的 API 文档修改组,再到后面又积极参加一系列快乐开源活动和更具挑战性的黑客松。正如敏师傅所说:“自己在 Paddle 就像打怪升级一样做各种任务”。在这段 Paddle 的这段旅程中,他一点点精进了自己的技术,也结识了许多热爱开源的小伙伴。接下来让我们去瞧瞧这位多才多艺的“摸🐟老头子”(just kidding😉😉😉)!
左图:李敏师傅 右图:水群摸鱼日常 二、采访内容 介绍一下自己吧,敏师傅!
敏师傅: 各位大佬好,专业摸鱼,日常躺平晒太阳的咸鱼就是我了。身高 183,体重 170。老胖鱼一条。
敏师傅说个人爱好之一是宅,那么平时宅在家干什么呢?
敏师傅: 宅家追剧,鉴于囊中羞涩,又秉持开源,所以都是看免费的(大家不要学我,要支持正版,知识产权法在头顶)。有时会神经质发现地脏,就做个简单的扫除;有时就去公园跑跑步、做做拉伸,尽量让自己活的久点,要不然养老金白交了;要么小主想逛苍蝇馆子,就祭出地图精准定位去吃,吃完回家。
你曾经有提到在机器学习的过程中自己差点 “见了太祖”,请给大家分享一下这次惊险的经历😮
匿名回复:不是学习中,是那会刚好在学基础,我出事跟学习无关啊~
敏师傅: 某年,我在工作中,可能因为淋雨作业、感冒,加上伙食里有沙吧...多种原因叠加在一起,一天上午在办公室突然感到头昏。一开始估摸自己是低血压了,就去卫生队让值班人员量了个血压,结果 40/20。我估计自己身体出了大问题,赶忙让他们打了针 NE,然后喊队长把我送医院。
到了医院迷迷糊糊的,不敢让自己睡着。一天下了 3 张病危,好像是急性胆囊炎合并肺炎,附加胸腔积液。指标各种超标,医生也不敢手术,一直发烧,让医生给打了丙球续命,中间因为升压药泵注射漏了,整个胳膊肿得不像样,让护士帮忙买土豆切片敷那吸收了才完事,同为三甲,简直了。
过了 5 天医生估计受不了了,让转广州医院,还好领导派了个人跟着,就整了个车把我送到广总。那边直接说割胆囊,我怕,就说保守治疗,主任也同意了,就在广总住了一个多月。抽血都抽了三四十管,也没查出来病因,多科会诊好几次,像实验体一样躺着被几十人围观好几次。最后我看化验单,连非洲的传染病都查了,结果全是阴性。也就不了了之保守治疗了。先住传染科,然后呼吸内科,然后心内科。反正躺床上被推来推去,哈哈哈。
那一个多月禁食,每天就是打营养针。就记得那脂肪乳,一瓶能打几个小时,每天从上午 8 点打到晚上 8 点。最后几天,医生才让吃流食,粥都不能喝,只能喝粥上面的米汤,唉。然后回到单位吃了半年的过汤菜(就是把所有菜都放水里洗洗尽量没有油),肚子上的肉都没了,皮都耷拉下来了😂
编者注✍️:真・大难不死,必有后福啊。不过咱们社区开发者怎么什么离奇的经历都有...?
听说敏师傅的工作经历也非常曲折有趣,能具体说说么?
敏师傅: 这个,也没啥。毕业稀里糊涂进了某集团,一开始说干计算机的事,结果一点不沾边,各种其他技能点点了个遍。架设卫星锅,招待上级,液压系统维修,汽车机油液压油更换,气路维修,强电弱电架设,挖坑种树等各种。
全国各地的沙漠,森林,海岛跑了大半,格尔木睡沙漠,半夜帐篷被吹飞去追帐篷,靖宇睡森林,半夜下暴雨水淹帐篷急忙转移,跟着护林工逛森林,吃野果,挖人参,烧松子,反正东北比西北好玩的多。海岛就懵了,坐船就吐的昏天暗地,然后各种晒脱皮,最难受的地儿。
后面几年总算是接触计算机,做了个仿真训练系统,抄了一堆网站,各种借调打黑工。然后就想着赶紧滚蛋啥都不想干了,躺平。后面就是学机器学习,接着住院,接着佛系养生。
你最早接触开源是在什么时候?
敏师傅: 大学吧,那会为了看越狱、迷失、危机边缘那些。好用的播放器不多,关键是字幕。射手网开源了个播放器,就 SVN 拿下来看了看,支持各种制式视频,最大的特点是可以在线搜索字幕源并选择,在那个 RealPlayer 的年代,真的是非常的优秀。
那你又是怎么加入到 Paddle 社区的?您对于开源社区的价值和意义是怎样理解的?你认为这些价值和意义在 Paddle 社区又是如何体现的?
敏师傅: 好像是查飞桨文档学习时,梦师傅的文档修改任务,然后就上了大船。 我觉得在国内做开源真的挺不容易,毕竟开源在绝大部分人认为就是免费,其实也就是免费,而且大家都信奉拿来主义,开源协议那块也不关心。开源需要投入的人力物力财力都是不小的,投入少了,社区和维护不够,BUG 就多了。但绝大多数软件,都是从开源起家的,操作系统、中间件、数据库、应用软件等等,所有层面都有开源的身影,是开源让计算机发展的更迅速,微软都不得不妥协进行开源,可想开源的力量。
价值和意义的话,就用我接触的几个大佬概括下吧:
涛姐 ,我所接触到飞桨负责开源的最高级别人物。涛姐从研发那割下来的开源任务,要考虑到我们的能力,不能太难,适众面又要广泛,对应负责的研发还要 Review,都是增加飞桨内部的工作量。然后做黑客松题目时发现,题目所需的,可以把开源题目串起来。这时才发现涛姐选题的前瞻性、系统性、大局观。对整体框架的全局把握才能轻车熟路深入浅出的发布出我们能做的题目。可想而知涛姐的能力有多强 👍。
梦师傅 和花花 ,运营的核心 CP,原文档负责人,从任务发布、统计信息、数据到对接第三方,做过统计上报的都能懂,那就是个磨人想砸键盘的活,我们一堆人是一个个点,她们那是一整个面,但凡报上去的信息不对,就是反复的核实修改,线下的活动也组织的有声有色,从历次活动照片能看出参与者欢快的笑容,也反映出组织者的能力有多强。
孙师傅 ,现 Docathon 发起人和文档总负责任。虽然他总是潜水,而且使用者总说文档有错误。但反过来看,那还不是因为 API 更新快,参数修复多。孙师傅负责的是很庞大的费眼睛的项目,代码嘛,能跑就行,有的使用者只关心 API 怎么用。但文档,是所有人必须要看的,严谨系数其实比代码要高的多,孙师傅劳心劳力确实不容易。
编者注✍️:梦师傅是产品经理,不是运营哈哈哈。另外,我潜水是因为沉迷工作
作为一个非专业的开发者,一开始接触 Paddle 的时候你遇了过什么困难或者问题,是怎么解决的?
敏师傅: 刚开始,对流行的开发是一窍不通。对于 Git,只会把代码下下来自己用,从来没有提过 PR。那会在群里啥也不懂,连 PR 是啥也不知道,Git 其他命令也不会,只会 clone,后来在梦师傅和张师傅的帮助下,看教程。但是那会儿,前面几个 PR 只会在 GitHub 打开单文件修改提交,CI 流程过不去。后来看了张师傅的 PR 教程,才学会了命令提交。
你有提到最初是看教程学习 Paddle 的,你觉得飞桨的文档和教程怎么样?
敏师傅: 飞桨文档和教程,在主线这块是维护的很及时的,就是对于分支一些,教程和代码的不同步还是很明显的,记得有个给黑白视频上色的教程,怎么都跑不下来,最后才知道,得用老的仓库代码才行。但教程里的代码,clone 下来必然是最新的。
你参加过哪些飞桨的开源项目?你最喜欢哪个项目,为什么?
敏师傅: 参加的挺多,都是摸鱼做做边缘任务,最喜欢的应该是 001 带的任务,因为他基本 724 在线,改 PR 的速度赶不上他 Comment 的速度,哈哈哈哈哈哈。
编者注✍️:001 (SigureMo )是 Paddle 社区出了名的劳模,望周知。由于是第一位社区 commiter 而被大家称为 001。
听说你还参加了黑客松,那段经历一定很精彩,能否分享一下你在那期间遇到的有趣事情或者特别人呢?
敏师傅: 在婷姐带领下做了点 FP16 的任务,在花花带领下写了个 API,跟其他大佬比起来,我这基本就是小学生水平,就记得那会 CI 各种拥挤(当然,责任在我,因为我没环境,只能靠 CI,哈哈哈哈)。
你觉得 Paddle 社区在吸引和培养新的开发者方面做得如何?是否有一些改进的建议或者想法?
敏师傅: 我觉得一直都很吸引人,梦师傅、花花、酥酥、孙师傅各种活动都能面面俱到(虽然没实地参加,但看照片能看得出)。 建议想法啥的,我这四肢不发达头脑简单的脑子就算了,跟着大家学就好。🙂
除了 Paddle 之外,您还参与过其他开源项目吗?如果有的话,您觉得 PaddlePaddle 与其他项目相比有哪些独特之处?
敏师傅: 其他的么,好像真没,MMEngine 算么,当时要找框架,所以提了 1 个还是 2 个 PR 吧,后面就放弃了,因为没有免费算力可以用😀,还是咱飞桨好用。
在与花花、孙师傅、梦师傅、涛姐和其他 Paddle 大佬的交流中,您学到了哪些知识和经验?对您的技术有哪些影响呢 ?
敏师傅: 平时怕他们忙,基本不主动找各位大佬。我们这都是点,她(他)们那是面,所以她们的工作量肯定是非常大的,能不打扰就不打扰。
对于在某甲方公司工作,敏师傅有没有一些摸鱼小技巧可以分享一下呢?你是如何平衡工作和生活的?
敏师傅: 摸鱼技巧?开会带本书,看看会议就过去了,反正路人甲一个,一般就用“三不”回答:不会、不懂、不知道 。领导的决定都是对的,领导的决策都不会错,错了那也是我们马仔理解不够深,执行不彻底,落实不到位。
平衡工作生活的话,下了班就 不干活,遵守 995,除了大值班,这都得参加,没啥说的。
编者注✍️:学到了。
对于那些想要成为开源贡献者的人,您有什么鼓励和建议?
敏师傅: 不管是不是科班出身,大项目里开源一般有利无害的吧。我毕业太久,现在的应聘肯定卷出了天际,啥力扣 ACM 估计都是基操,能用开源项目加分的话,先进大厂实习再氪肝留大厂也是条路吧。说的不一定对,请客观看待。
最后,敏师傅还有什么想和大家说的么?
敏师傅: 有新手怪的话,大佬们给我留点。我还是砍砍史莱姆和稻草人就好😀。
三、著名大型评论平台——虎扑评论专区 敏师傅和太多的人打过交道了。由于篇幅的原因,我们邀请了部分和敏师傅有过合作经历的朋友们,贡献一下他们和敏师傅发生的故事,或者对敏师傅的评价~以下均为真心话,请放心食用!
孙钟恺 一开始对敏哥印象深刻,是因为敏哥的微信昵称拼音——讷言敏行(nè yán mǐn xíng),总共 4 个,有位前同事能把其中 2 个读错成 nà ... ... háng。🤣 之后,从提文档修复的 PR 开始,就能明显感觉到敏哥的进步,再到后来敏哥能一口气把好多快乐开源任务都认领完成了,真的非常厉害。
张婷 敏师傅领题目、push 研发超积极。最厉害的是自己不做测试的,都是一把改完 push 上去看 CI 结果,也不需要 GPU 算力(手动狗头),以充分利用婷姐的脑力资源为主。
花花 众所周知,飞桨开源社区分为两股势力:以敏师傅为首的好人阵营,以 002 为首的时好时坏阵营。
编者注✍️:下面这位就是花师傅说的时好时坏的 002 ⬇️
张一乔 敏师傅简直是吾辈楷模,能愉快的摸鱼提 PR,还有老婆,真让人羡慕。
张伟鸿 敏师傅给我的感觉就如同金庸武侠小说里的扫地僧,活跃在飞桨各大大小小的社区当中,神秘而且武功深不可测,有极高技艺却又深藏不露。嘴上说着摸鱼,但上班的时候提起 PR 毫不手软(敏师傅,咱贵公司还招人吗[可怜])。敏师傅也是一部行走的百科全书,上知天文,下知地理,尤其对吃的颇有造诣,如果你想知道不同地方的美食,问敏师傅就对了。 不过我也得来吐槽下敏师傅,平时我认领的任务还没开始做的时候,张师傅都是口嗨说要背刺我,但只有敏师傅是来真的,直接把我认领的任务做了,希望敏师傅下次能给我留口汤喝,ball ball you 了😭
陈龙 敏师傅是我人生重要的领路人之一,每次抉择迷茫时候,敏师傅总会用他经验满满的信息差对我的迷茫分叉口进行降维打击!最后让我拨云见月,酣畅淋漓!
敏哥安慰梦师傅的聊天截图 四、敏师傅的佛系养身 TIME~🏃♀️🏋️♀️⛹️♀️🚴♀️🤸♀️👯♂️💪 经历 先设定个小目标,就减肥吧,然后开始了漫长的减肥计划。 一开始 3 公里都难跑及格,啥也不管,先开跑,同时补充氨糖和维生素,免得关节废了。好像从 95 跑到 85 后,各种体测也没问题了。前几个月体重掉的快,后来基本一个月一公斤,逐渐五公里到十公里,最后跑了个半马试试自己的耐力。然后体重就到了瓶颈期,跑步成了热身,体重不减,体脂不减,请教专业人士,开始上力量,原始三件套:深蹲,硬拉,卧推。先慢跑 3 公里,然后负重训练。后来逐渐加上 HIIT,体重最轻的时候到了 70 公斤。
过来人的小 tips💡 总结一下大概如下:热身是必要的,体重大先用有氧减脂,一开始不用太在意体重,练就完了,碳水和蛋白质要保证,氨糖和维生素也是必备,到了某天会发现衣服大了,体重下来了。到了瓶颈期就可以上力量,没有条件就用 HIIT 代替,比如斯巴达 500,虽然痛苦,但是非常有效,提升新陈代谢率,提高心肺功能。在上力量时,如果有体检,会发现尿酸升高,这个是力量训练中常有的,可以暂停一周再复测,正常值后就说明是力量训练导致,就不用担心了。
五、彩蛋 🥚 1. 十项全能的家庭煮夫敏敏子在线狂秀厨艺 敏师傅 自我宣言:本人手艺还行,刀工一般,之前在某集团时没事跑去炊事班练练手,打打牙祭。煎、炒、烹、炸、焖、炖、溜、熬、蒸、烩、煮、烙、汆、酿、扒、烧都会烧点。
敏哥做的菜-1 敏哥做的菜-2 2. 敏哥个人自述 敏哥在采访前也精心写了一份【个人自述】,篇幅过长就不贴在正文了,好奇的话可以读一下哦~
编者注✍️:留个彩蛋!我把它放在了博客 GitHub repo 下的 src/eggs/limin-story/
文件夹下哦~
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/loaf-sharing.html b/posts/loaf-sharing.html
new file mode 100644
index 0000000..114c008
--- /dev/null
+++ b/posts/loaf-sharing.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 如何在开源社区摸 🐟? | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 本篇博客文章的内容,来源于作者在「第八届中国开源年会」上分享的一次主题为 「如何在开源社区摸 🐟」 的闪电演讲,以下的部分为演讲的具体内容。
01-个人简介 大家好,今天我想分享的主题是 「如何在开源社区摸 🐟」 。在演讲开始前先自我介绍一下,我叫孙钟恺,社区里的开发者都称呼我为 孙师傅 ,下图为我的 Github ID、头像和贡献热力图。
从上面的职业标签可以看出,我是入职百度一年半(0.5🐔年)、目前负责 Paddle 开源社区以及官网文档的飞桨校招产品经理。作为一名新人,我也没有什么特长,唯一擅长的就是摸 🐟 吧~所以在这里也和大家分享一下我的摸 🐟 经验。
02-摸 🐟 经验 我的摸鱼经验其实从这幅图就可以说明白,就是工作上三思而后行 :
第一,这工作能不能不做 ; 第二,这工作能不能晚点做 ; 第三,这工作能不能交给别人做 。
但是,理想是丰满的,现实是骨感的。老板的回复也很直接:
不过对于第三点呢,老板似乎不太抗拒(反正不是交给他做🐶)。于是我就在思考,也许可以通过“把工作转交给别人”的方式,来简单摸个 🐟。
那么问题来了,具体交给谁做呢?我看向了我的同事和研发大爷们 。经过几百回的试探和心理博弈后,研发大爷们均以“人力不够”、“优先级低”等借口来拒绝我。而且咱们研发工作日做牛做马,一到周末直接原地消失了,一看 GitHub 热力图,周六、周日都是空的。
补充:不过这也说明百度还算是一个遵守劳动法的公司,周末都是双休的~
然后,我把我的目光转向了社区开发者们 。哎,发现他们的开源热情似乎还是很高涨的,有的开发者甚至把开源视为人生价值(“工作就是图一乐”、“人生价值实现还得靠开源”)我又翻了翻一些社区开发者的 GitHub 热力图,一看吓一跳 😮,绿油油的一片,7*24 小时全职开源。
至此之后呢,我就把 “把活儿交给社区开发者” ,作为我摸 🐟 的核心思想。
但是,怎么“把活儿交给社区开发者”,也是需要讲点基本法的,所以我总结了两条方法~
03-「把活儿交给社区开发者」初级版 首先,我先介绍一下初级版,即把一些 明确的轻量级任务 交给社区开发者做。
怎么理解呢?其实很多问题已经由社区开发者和内部研发进行多轮讨论了,并经过 任务拆解 后,形成了可以直接去上手做的轻量级任务。这些轻量级任务最终会公布到社区,并以 tracking issue 的形式进行发布和追踪,下图右方就是部分的这类任务。
因为这些任务相对简单、好上手,社区开发者反馈其实非常好,有些人可能周末会去做,有些人甚至上班摸鱼的时候也在做。
发布这类任务的优点 在于——因为任务比较简单,“啪”的一下做的很快,完成率又特别高。更重要的是,开发者也会很愉悦,比如花一个小时提一个 PR 上来,就能把任务做完了,很容易带来满足感~(而且也会有小礼品)
不过这类任务也有一些缺点 ——这些任务需要花精力进行任务的拆解、详细的描述,甚至还可能需要指导和大量的 Review。所以这 🐟 虽然摸了,但只摸了一半。
03-「把活儿交给社区开发者」终极摸鱼版 基于上述,我之后又总结了终极摸鱼版的方法,就是 把问题交由社区开发者来主导 。
怎么理解呢?就是我们飞桨只提供大概的题目和方向,由社区开发者根据问题 自行进行拆解 ,然后在我们的指导下开展任务。比较典型的是 《将 xdoctest 引入飞桨工作流 》 ,这个题目是由社区开发者顺师傅(@megemini )来完成的。
xdoctest 是一个文档示例代码的检查工具。
从下面右半边可以看到,顺师傅按自己的理解对任务进行拆解,分为不同的阶段,并有条不紊的完成。并且还衍生出了一些批量的社区任务,比如全量的修改了飞桨一千多个 API 的示例代码。这是一个人完成不了的,需要号召更多的社区开发者来参与,因此这个项目也极大调动了整个社区的氛围和活力。
所以说,其实把问题交给社区开发者主导,会有很多积极的方面~一方面能够帮我们分担了很大的研发精力(帮我们摸 🐟),另一方面也会不经意间对整个社区有正向的影响力。
04-摸 🐟 的前提条件 最后也提一下,其实摸鱼也有很多前提条件,需要有良好的社区氛围 、丝滑的社区交流 、研发的大力支持 和运营的宣传推广 ...这些条件都是缺一不可的~所以虽然是摸鱼,但也需要遵循很多客观规律。
以上是我演讲的全部内容,感谢大家的观看~
+
+
+
+
\ No newline at end of file
diff --git a/posts/nknan-story.html b/posts/nknan-story.html
new file mode 100644
index 0000000..05e413b
--- /dev/null
+++ b/posts/nknan-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】从代码到键盘外的世界,走进 NKNaN 的日常 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 大家好!这次我们有幸采访到社区中的一位特别的朋友——NKNaN。她不仅是飞桨社区中的佼佼者,对于开发中的难题总能迎刃而解,也是一位才华横溢且性格随和的女性开发者。通过这次的对话,我们将一起走进李睿文的日常生活,了解她在社区背后充满转折和惊喜的个人故事~
一、前言 NKNaN 是我们社区中的一位特别的成员,她不仅是我们社区中少有的女性猛将,更是一个勇敢跨界的探索者。从西安的古城墙到香港的繁华街道,再到可能的北美新生活,她的脚步从未停歇。她的学术之旅横跨金融、数学和计算机科学,每一步都显得那么自然而充满挑战。
NKNaN 的职业生涯同样精彩纷呈——她曾冲动地辞去稳定的工作,追寻博士学位的梦想,但在一年后,她又勇敢地决定放弃,选择重新探索适合自己的道路。无论是在学术界还是生活中,NKNaN 都以她独有的风格和魅力,展示了自己对生活的热情和对技术的执着。
她的故事不仅充满了色彩,还散发着温暖的光芒。让我们一起走进 NKNaN 的世界,看她如何在技术的大潮中保持真我,用代码和智慧编织自己的梦想,享受那份难得的轻松和自在。
二、采访内容 介绍一下自己吧,Nan 佬!
NKNaN: 哈喽大家好,我是百度飞桨社区的个人开发者 NKNaN,非常荣幸能够被选中参与这次采访~我老家在西安,本科毕业于香港理工大学金融服务专业,(水)master 毕业于香港科技大学金融科技专业。因为想要出国看看外面的世界,目前正在申请北美的 CS 项目。关于我自己的话,平时比较宅,喜欢室内的活动,撸猫、弹钢琴、看动画片、写代码;偶尔外出,外出的话喜欢随手拍拍风景?MBTI 是 INFJ,还被人誉为 I 人中的 I 人。
撸猫 看透一切的猫猫 随拍 看到你本科在香港理工大学就读工商管理专业,可以聊聊当时为什么选择这个专业呀?以及为什么选择去香港读书?
NKNaN: 专业是家里人给我选的。因为我爸妈都在银行工作,他们就觉得学了这个,以后进银行比较方便呗~
选择去香港也是父母决定,他们可能觉得香港是亚洲金融中心之类的,更加国际化一点。所以当时高考完了之后,父母告诉我可以选择香港这条路,就用高考成绩给我报了香港的学校。当时香港所有学校都申了,但港前三所都要面试,我英语口语又差,就挂掉了,最后还是选择了港理工。
但现在回过头看看决策还挺失误的,一开始就没有规划好就选择了去香港。这人生地不熟的,又不能转专业,还是太听父母话了。
本科大二最后一次去维港,之后疫情就回家网课了qaq 觉得失误是因为对本科专业不太喜欢吗?但看你本科专业学的很好、绩点非常高,还获得了学院杰出学术成就奖!
NKNaN: 这个奖是按每一年小专业的排名发的,如果在本专业排前三的话就能获得。可能我们专业比较废,大部分人都比较菜,像其他那些小专业的获奖大佬,他们的分数就比我高。
而且其实我的专业算是文科。文科怎么说呢,学和不学感觉好像没啥区别?像我们绝大部分课程的 assessment,很大一部分得分占比是通过写 essay 来拿分,但 essay 人家愿意给你几分就给你几分,纯看人家的心情。所以这边也奉劝大家,如果对自己写文商课小论文的能力没有十足把握千万不要来学商科!!
另外,商科如果想学得好,英语好是最基础的。家里资源也要好,还不能是 i 人!像做 presentation 的时候,必须要表现的很 expressive,要能说(吹)出来好多东西。但我就是 i 人,不太适合商科这种风格,还是喜欢做一些具象化的成果。
所以本科的时候就想转计算机了,但学校太坑太死板了,不让转专业,就只能去辅修。当时成绩好的人都会去辅修数学或者计算机(好多人都去辅修计算机)因为我的 GPA 不够,最后就选择辅修数学了~其实自己也想往计算机方面靠,就自学了 Machine Learning 之类的课程,后来读的 master 也是香港科技大学的金融科技专业。
想学计算机是因为兴趣吗?还是因为赚钱多呀(笑)
NKNaN: 一开始确实是基于自己兴趣吧,后来发现这个赚钱确实也挺多的~不过感觉对计算机感兴趣的女孩子确实可能比较少一点。
研究生毕业之后,你在上海某银行的金融科技子公司短暂工作了一年,可以讲讲吗?
NKNaN: (先给公司打个码)我当时入职了智能风控组,主要是用机器学习模型给风控项目做建模,比较传统和偏业务。但实际上做的事情挺杂的,还会做一些客户信用评分卡评级之类的事,会用到一些统计学习模型,基本就是调调参数。我自己对这种工作没有非常大的热情,想看看能不能读个博提升一下(虽然后来发现读错了),就有点冲动的裸辞了,也不建议大家学习。
不过那里的团队氛围真心很 nice,大家的关系都很融洽,比较扁平化,入职之后会有很多破冰以及团建的活动,平时也会互相分享技术心得。
上海某公园团建-1 上海某公园团建-2 冲动是因为受到刺激了吗?
NKNaN: 对,确实有点受刺激。那份工作工资很少,一个月没有补贴的时候只有 9k,有补贴的时候也只有一万多一点(应届生刚进来的工资),这还是在上海!向上发展的路线我也比较迷茫,走技术路线在那里好像待遇一般,走管理路线又不太适合我。而且杂事也多,像处理一些数据都算正事了,很多时候会做和工作完全无关的事,就比如说组织什么活动、清点一下资产、给部门 HR 做助理……给人分工很不明确的感觉。
但其实如果一直待在那里也可以安安稳稳的,只是我自己不太喜欢能一眼望得到头的生活,每个人的选择不一样啦。
那之后去读博是什么感觉~以及读了一年后为什么又选择 quit?
NKNaN: 在 2023 年 9 月我去港理工攻读 PhD,但工作其实 5 月就辞了,因为那会儿导师已经开始给我做一些数学基础和科研能力的训练(做题和读 paper)。我导师挺 push 的,一周要开三次组会,其中我要主讲两次——一次是论文进度、一次是讲做的习题。然后还有一次相当于旁听,但是旁听也不能只听着,得发表意见参与进来,很累。
而且我导师是属于应用数学学院下的,她是想把传统的统计学和 Machine Learning 结合,做一些统计迁移学习,而不是用目前流行的 Deep Learning,这就对数学能力要求比较高。虽然我本科辅修了数学,但还是觉得自己的数学基础能力不太够,可能看 paper 的时候理解的会容易一点,不过理解和自己推出来这两者差别是很大的(真的推不了一点)。
可是我能力太差了,光是训练就把我搞懵了。如果按我当前这个速度去读博,可能得要五年……导师对我期望值也很高,想着三年就毕业吧,弄得我压力很大。而且对于这个方向我也不是很感兴趣,感觉太传统了,所以最后还是决定 quit。
所以选择 quit 一方面是压力大,另一方面是方向不太合适?
NKNaN: 是的。除非你本科就是学数学的,已经经过三到四年的严格专业训练,然后再去读这个博士,可能收获会更大吧~或者找一个计算机系的教授,跟着做深度学习可能更适合我。
你这些年在香港待了也挺久的,喜欢香港文化吗?粤语会说吗?
NKNaN: 我觉得对香港没有那么喜欢,因为有时候遇到一些比较排外的 local,体验会挺差的。
粤语的话我到现在还不太会说,可能我语言天赋太差了。像我室友她语言就比我好的多,我跟她一起备考 GRE,她只复习了一两个月就考到了 325,而我当时考的可低了,后面又复习了两个月才考到了这分数。她一开始英语说的就很好,之后粤语学也很快,一两年就学会了,我到现在还会听不懂一些对话。另外主要是自己也不太想学粤语,感觉可难了,音调那么多,粤语的拼音发音又和中文的拼音不一样,不太规则。
港科食堂,风景属实不戳 那在日常生活中,你一般会做什么呀?
NKNaN: 生活上我感觉因为我是 I 所以就很少社交了,除了前面提到的那些,还喜欢自己研究一些好玩的东西~比如一开始在中国大学慕课网学 Python 编程的时候,就会跟着做一些比较有意思的小项目。在学校里也修了 C++,后面为了找开发工作还学了 Java,顺便自己做了康威生命游戏 ,就是一个界面,里面有黑白小格子可以点点点,现在看是个挺无聊的一游戏了~其实本来想着学机器学习,但后来跟着做了这些开发项目后,觉得这些语言也挺有意思的,包括最近我还在学习一些前端知识。
当然也用照片套模型炼过自己(雾) 为数不多的主角是自己的外出照片 聊聊开源吧~是什么契机接触飞桨的呀?
NKNaN: 在去年五六月的时候,我想做一些开源项目提升一下。因为当时抱有一个目的——进大厂,所以觉得做一些开源项目应该是有好处的,然后想做深度学习领域的开源项目,就去 GitHub 搜一些国内的深度学习社区嘛,看到 Paddle 仓库有一个 project —— call for contribution,在里边的列表里看到 PaddleScience 有个题目,需要做 HamiltonianMonteCarlo(HMC)API。MonteCarlo 我肯定是知道的,但对 HMC 不太熟悉,我就搜了一下是啥样子的,感觉应该还挺好实现的,就帮着做了一下。
像科学计算、API 功能增强之类的开源任务都有一定挑战性的,但对你这样的大佬来说是不是难度不大?
NKNaN: 难度我觉得对我而言主要还是在于理解这个框架吧,就是理解框架背后的原理。因为像 MonteCarlo 这样的 API 底层本身应该是很好写的,给一个数学公式,如果能看懂就可以写出来吧!但要把它适配到这个框架里面,是需要花一定时间的。我自己的开发经验少,接触的开发项目也少,所以当时半天看不懂为什么这块儿要这么写,那块要那么写~
身为一名很厉害的女性开发者,你觉得在工作或者学术中会存在大家对女性的一些刻板印象吗?
NKNaN: 这个我感觉可能国内有的地方确实会有这种现象吧,就是说比如说找工作的时候,像涛姐写的那样,在简历上就不会写上自己的性别。然后不仅是开发者这个职业,包括其他的一些工作,在一些国企里面,好像也更偏向于男生,可能因为出于传统刻板印象,他们觉得女生事儿多,担不起大梁。
读 PhD 的时候倒是完全没有这类问题,因为导师本身自己也是女性。她也非常提倡有女孩子能来跟她读博,她不会觉得性别是一个做研究上的一个障碍吧。这方面可能在发达地区不会有那么严重的性别歧视。
之后有什么打算吗?是继续深造还是工作~
NKNaN: 现在想准备去加拿大读一个 master 之类的,因为想要去国外看看。
我感觉自己年纪有点大了,都 25 了,也有点年龄焦虑。我父母也会觉得读出来都二十七八了,有点晚了,所以大概率就是读完 master 之后找个开发的工作~
其实我一开始还挺想去做学术研究的,但是后来发现做研究就得没日没夜,有点不对劲,完全没有 work life balance。你可能每天都得干到晚上 12 点,一点都不快乐,所以现在看起来开发应该会比做研究轻松一点吧~
最后给我们社区的小伙伴说几句话吧!
NKNaN: 我感觉来社区里的大家,肯定都是很有自己想法的开发者~我自己也很随性很散漫,所以就希望大家能去做自己想做的,成为自己想成为的人,不要在意外界的闲言碎语,遵从自己的内心就好~
GitHub头像原图照骗 三、两分钟快问快答 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
如果你有兴趣对社区的开发者进行采访,可以联系孙师傅,急缺助手!
+
+
+
+
\ No newline at end of file
diff --git a/posts/paddle-pipeline-parallel.html b/posts/paddle-pipeline-parallel.html
new file mode 100644
index 0000000..0eeba40
--- /dev/null
+++ b/posts/paddle-pipeline-parallel.html
@@ -0,0 +1,656 @@
+
+
+
+
+
+ Paddle 静态图并行编排与执行流程 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors paddle3.0 中自动并行是一项重要的升级点,今天我们来聊一聊 Paddle 中的静态图流水并行。大家也可以去翻一翻我的个人博客 ,里面有很多好康的(X)
一、分布式集合通信模式 集合通信模型适合处理 CV/NLP 领域这样具有稠密参数的模型。它有多种方式将数据/模型切分到多个设备上。每个设备可以成为一个 Worker,每个 Worker 都需要及时的知道全局梯度信息。这样的话,每个 Worker 都需要将自己的梯度信息发送给其他的 Worker ,同时也需要接收其他 Worker 的梯度信息。这样的通信方式就是集合通信模式。
集合通信有好几种并行方式:
下面我们分别进行介绍:
1.1 数据并行 纯数据并行模式下数据集被平均分为多份,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。
数据并行适用于模型参数较少的情况,一张卡可以放下完整的模型参数。这样的策略能让我们增加 batch_size,加快训练速度
下图详细的说明了纯数据并行的训练流程:
如图数据集平均分为多份 data partition1
和 data partition2
,每个卡上保存完整的模型参数并独立处理一份子数据集,以加速模型训练过程。在数据并行训练过程中,每个卡上的输入数据是不同的。各个卡独立地执行网络的前向运算和反向计算,计算出各自卡上的参数梯度。随后,使用 AllReduce 等集合通信原语,将各个卡上计算出的参数梯度进行累加聚合,得到最终的全局参数梯度。最后,全局参数梯度进入优化器进行参数更新,完成一个完整的 mini-batch 训练流程。图中的箭头表示了各个卡之间的通信过程。
集合通信原语是集合通信的基础操作的集合,如广播(Broadcast)、收集(Gather)、分散(Scatter)、规约(Reduce)等。其中规约是指将集群内多个节点将数据发送给一个节点,这个节点会使用接收到的数据集中运算,如累加、累积、均值、方差等等。而上文提到的 AllReduce 则是指多对多的规约,即有多个数据发送节点和多个数据接收节点,所有节点的规约运算结果会广播到所有节点上。
当数据集较大,模型较小时,由于反向过程中为同步梯度产生的通信代价较小,此时选择数据并行一般比较有优势,常见的视觉分类模型,如 ResNet50,比较适合采用数据并行。
1.2 模型并行 在模型参数较多的情况下,一张卡无法放下完整的模型参数,这时候就需要将模型参数切分到多张卡上,让我们先通过一张图了解一下模型并行的原理:
模型并行的情况下每个设备上的数据都是一样的,只有模型被拆分到了各个设备上。每个设备只拥有模型的一部分,所有计算设备上的模型拼在一起,才是完整的模型。
如图想要得到最终的计算结果需要将 Device0
和 Device1
的计算结果进行拼接后才能得到最终的计算结果。
1.3 流水并行 1.3.1 朴素流水并行 流水线并行是模型并行的一种,其原理是把模型的不同层放置在不同卡上运行,参数也按层分配到不同的卡上,以降低模型的显存占用。
如下图所示,网络共包含 4 层,我们可以把第 0 层放置在卡 0 上运行,第 1 层和第 2 层放置在卡 1 上运行,第 4 层放置在卡 2 上运行。在训练过程中,卡 0 接收输入数据进行计算,并将计算结果发送给卡 1;卡 1 接收到卡 0 的计算结果后进行计算,并将计算结果发送给卡 2;卡 2 接收到卡 1 的计算结果后进行计算,得到损失函数值,完成前向计算。反向计算逻辑与前向刚好相反。 这个过程就像是流水线一样,每个卡都在处理不同的数据,从而提高了训练效率。
朴素流水并行的缺点:
在任意给定时刻,除了一个 GPU 之外的其他所有 GPU 都是空闲的。因此,如果使用 4 个 GPU,则几乎等同于将单个 GPU 的内存量增加四倍,而其他资源 (如计算) 相当于没用上。所以,朴素流水线存在很多的 Bubble 。因此,朴素的流水线并行将会导致 GPU 使用率过低。
1.3.2 微批次流水线并行 微批次流水线并行是指将一个训练迭代划分为多个子阶段,每个子阶段都是一个微批次,每个微批次都会在不同的设备上进行计算。在每个子阶段中,每个设备都会计算出一个梯度,然后将这些梯度进行累加,得到最终的梯度,最后使用这个梯度更新模型参数。
1.4 混合并行 混合并行是指同时使用数据并行和流水线并行的方式,以 GPT-3 为例,以下是它训练时的设备并行方案:
它首先被分为 64 个阶段,进行流水并行。每个阶段都运行在 6 台 DGX-A100 主机上。在 6 台主机之间,进行的是数据并行训练;每台主机有 8 张 GPU 显卡,同一台机器上的 8 张 GPU 显卡之间是进行模型并行训练 $^{[1]}$。
二、Paddle 静态图流水并行 在 Paddle 的静态图在流水线并行中,一个训练迭代通常被划分为三个子阶段:
Forward:前向计算,每个阶段计算并输出中间结果给下一个阶段; Backward:反向传播,每个阶段根据上一个阶段的梯度计算并传递当前阶段的梯度; Optimize:参数更新,收集所有阶段的梯度并更新模型参数。 Paddle 目前已经实现的流水线编排方式有两种,分别是: FThenB 和 1F1B。下面我们分别进行介绍:
2.1 FThenB 编排模式 FThenB
的编排模式也就是上面说到的微批次流水线并行,之所以叫做 FThenB
是因为在这种编排模式下,每个设备先执行前向计算,然后再执行反向传播。等待所有设备都执行完前向计算之后,再开始执行反向传播。
FThenB
的编排模式将 mini-batch 细分为多个更小的 micro-batch(微批),送入 GPU 进行训练,来提高并行程度。但是这样做也有一个坏处就是,那就是把 batch 拆小了之后,对于那些需要统计量的层(如:Batch Normalization),就会导致计算变得麻烦,需要重新实现。而且 Fthen-B
模式由于缓存了多个 micro-batch 的中间变量和梯度,显存的实际利用率并不高。
2.2 FThenB 相关代码解读 在初始化 engine 类的时候会传入 strategy
参数,这个参数是一个 auto.Strategy
类的实例,用于配置流水线并行的策略。在 Strategy 类中,有一个 pipeline
属性,用于指定流水并行的编排模式。
在 Parallelizer 执行 parallel
时候会在 _apply_post_optimization
中将编排模式(schedule_mode)保存到 main_program._pipeline_opt["standalone_opt"]
中。这个属性会在 ExecutorCache 中的 _get_program_and_executor
中被读取,用于编排 Program。下面是相关代码:
python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。下面是 apply_pass
的相关代码:
python def apply_pass (main_program, startup_program, pass_name, pass_attr = {}):
+ assert pass_name in [
+ "FThenB" ,
+ "1F1B" ,
+ "Eager1F1B" ,
+ ], f "pipeline scheduler only support FThenB, 1F1B and Eager1F1B, but recieve { pass_name } "
+
+ if pass_name == "1F1B" :
+ pass_attr[ "enable_backward_forward_overlap" ] = int (
+ os.environ.get( "FLAGS_1f1b_backward_forward_overlap" , 0 )
+ )
+
+ # 初始化 pipeline_scheduler pass
+ pipeline_pass = new_pass( "pipeline_scheduler_" + pass_name, pass_attr)
+ pass_context = PassContext()
+ # 编排的主要入口
+ pipeline_pass.apply([main_program], [startup_program], pass_context)
+ # 获取编排后的 plan
+ plan = pass_context.get_attr( "plan" )
+ return plan
编排的主要入口是 pipeline_pass.apply
,FThenB
和 1F1B
的核心代码在 pipeline_scheduler_pass.py
中,其中还使用了一些继承类。下面我们先来梳理一下类之间的继承关系。其中主要涉及到的类包括:PassBase、PipelinePassBase、PipelineFThenBPass 和 Pipeline1F1BPass。
PassBase 是所有 Pass 的基类,PipelinePassBase 是所有流水线编排 Pass 的基类,PipelineFThenBPass 和 Pipeline1F1BPass 分别是 FThenB 和 1F1B 的编排 Pass。
python PassBase - PipelinePassBase - PipelineFThenBPass
+ - Pipeline1F1BPass
在 PassBase 中定义了 apply
方法,apply
来方法中又进一步封装了 _apply_impl
和 _apply_single_impl
方法。PipelinePassBase 中重写了 _apply_single_impl
方法:
python # python/paddle/distributed/passes/pipeline_pass_base.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ """
+ 执行并行计算的具体实现逻辑
+
+ Args:
+ main_program (Program): 主Program。
+ startup_program (Program): 启动Program。
+ context (PassContext): Pass的上下文信息。
+ """
+ # 获取到拆分后的子 Program 和对应的类型
+ job_types, sub_programs = self ._partial_programs(main_program)
+
+ jobs = self ._create_job_list()
+
+ type_to_program = dict ( zip (job_types, sub_programs))
+ set_skip_gc_vars(
+ self .get_attr( "num_micro_batches" ), type_to_program, jobs
+ )
+
+ for type in type_to_program.keys():
+ type_to_program[ type ] = type_to_program[ type ].desc
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
可以看到进行编排的核心逻辑在 _partial_programs
和 _create_job_list
中,不同的编排策略会有不同的实现。下面我们来看看 FThenB
和 1F1B
的实现。
FThenB 编排的实现逻辑在 PipelineFThenBPass 类中实现,它继承自 PipelinePassBase 类。PipelineFThenBPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _partial_programs (self, program):
+ """
+ 将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。
+
+ Args:
+ program (Program): 主Program。
+
+ Returns:
+ tuple: 包含两个列表,第一个列表包含子 Program 的类型(如 LR、FORWARD、BACKWARD、OPT),第二个列表包含相应的子 Program。
+ """
+ # 注意:标志 "enable_send_recv_overlap" 可能会增加 GPU 的保留内存。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 获取前向和后向子 Program 的列表
+ sub_program_list = _program_for_fthenb_and_1f1b(
+ program, enable_send_recv_overlap
+ )
+ return types, sub_program_list
其中 _program_for_fthenb_and_1f1b
的主要作用是将主 Program 进行拆分,还可以实现前向和后向的计算任务重叠以提高计算效率。 这里我们暂时不讨论任务重叠的实现,只关注拆分的实现逻辑。下面是 _program_for_fthenb_and_1f1b
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _program_for_fthenb_and_1f1b (program, enable_send_recv_overlap = False ):
+ # 为 fthenb 和1f1bProgram创建子 Program 列表
+
+ if enable_send_recv_overlap:
+ # 如果启用了发送接收操作的重叠,调用函数以进行重叠
+ _overlap_send_recv(program)
+ else :
+ # 否则,插入同步操作以确保顺序执行
+ _insert_sync_for_fthenb_1f1b(program)
+
+ # 创建四个子 Program,分别用于 LR、FORWARD、BACKWARD和 OPT 任务
+ lr_prog = Program()
+ fwd_prog = Program()
+ bwd_prog = Program()
+ opt_prog = Program()
+
+ # 分割 Program 并将操作添加到各个子 Program 中
+ def _split_ops (block):
+ # 根据操作的角色将操作分成四类:LR、FORWARD、BACKWARD和OPT
+ lr_ops = []
+ fwd_ops = []
+ bwd_ops = []
+ opt_ops = []
+ for op in src_block.ops:
+ if is_lr_sched_op(op):
+ lr_ops.append(op)
+ elif is_forward_op(op):
+ fwd_ops.append(op)
+ elif is_backward_op(op):
+ bwd_ops.append(op)
+ elif is_optimize_op(op):
+ opt_ops.append(op)
+ else :
+ raise ValueError (
+ "The op role: "
+ + str (op.attr( 'op_role' ))
+ + " isn't one of LRSched, Forward, Backward or Optimizer."
+ )
+ return lr_ops, fwd_ops, bwd_ops, opt_ops
+
+ def _add_ops_into_block (src_block, dst_block, ops):
+ # 将操作添加到指定的子 Program 块中
+ for op in ops:
+ _create_program(src_block, dst_block, op)
+
+ for idx, src_block in enumerate (program.blocks):
+ # 遍历主 Program 的块
+ lr_ops, fwd_ops, bwd_ops, opt_ops = _split_ops(src_block)
+ if idx == 0 :
+ # 对于第一个块,添加 LR、FORWARD、BACKWARD和 OPT 操作到相应子 Program 块
+ lr_block = lr_prog.block( 0 )
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ fwd_block = fwd_prog.block( 0 )
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ bwd_block = bwd_prog.block( 0 )
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ opt_block = opt_prog.block( 0 )
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+ else :
+ if len (lr_ops):
+ # 对于后续块,如果有 LR 操作,创建新的 LR 子 Program 块并将 LR 操作添加到其中
+ lr_block = lr_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ lr_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, lr_block, lr_ops)
+
+ if len (fwd_ops):
+ # 同样,为 FORWARD 操作创建新子 Program 块
+ fwd_block = fwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ fwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, fwd_block, fwd_ops)
+
+ if len (bwd_ops):
+ # 为 BACKWARD 操作创建新子 Program 块
+ bwd_block = bwd_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ bwd_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, bwd_block, bwd_ops)
+
+ if len (opt_ops):
+ # 为 OPT 操作创建新子 Program 块
+ opt_block = opt_prog._create_block(
+ parent_idx = src_block.parent_idx
+ )
+ opt_block._set_forward_block_idx(src_block.forward_block_idx)
+ _add_ops_into_block(src_block, opt_block, opt_ops)
+
+ for fetch_op in src_block.ops:
+ if fetch_op.type in [ "fetch" , "fetch_v2" ]:
+ in_name = fetch_op.input_arg_names[ 0 ]
+ dst_block = None
+ for block in [lr_block, fwd_block, bwd_block, opt_block]:
+ if block._find_var_recursive(in_name):
+ dst_block = block
+ break
+ if dst_block:
+ _create_program(src_block, dst_block, fetch_op)
+
+ lr_prog._sync_with_cpp()
+ fwd_prog._sync_with_cpp()
+ bwd_prog._sync_with_cpp()
+ opt_prog._sync_with_cpp()
+
+ lr_prog._rollback()
+ fwd_prog._rollback()
+ bwd_prog._rollback()
+ opt_prog._rollback()
+
+ # 返回四个子 Program,依次为 LR、FORWARD、BACKWARD和OPT
+ return [lr_prog, fwd_prog, bwd_prog, opt_prog]
其中 _insert_sync_for_fthenb_1f1b
的作用是插入同步操作,以实现"F-Then-B"和"1F-1B"流水线并行模式。插入同步操作的主要目的是确保在流水线并行训练中各个阶段(前向传播、后向传播、优化等)的计算流和通信流之间能够协同工作,以保持数据的一致性和正确性。这里我们不做详细介绍,感兴趣的小伙伴可以自行阅读源码 (_insert_sync_for_fthenb_1f1b )。
_program_for_fthenb_and_1f1b
剩下的主要逻辑就是将主 Program 进行拆分,然后将操作添加到各个子 Program 中,我们一共有四个子 Program,分别用于 LR、FORWARD、BACKWARD 和 OPT 任务。
在获得了 job_types
和 sub_programs
之后,我们就可以调用 _create_job_list
方法来创建 Job 列表。下面是 _create_job_list
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ """
+ 创建前向-后向流水线并行计算任务的任务列表。
+
+ Returns:
+ list: 包含不同类型计算任务的列表,如 LR、FORWARD、BACKWARD、OPT。
+ """
+ # 获取micro-batch的数量,通常由外部传递给流水线并行计算。
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+
+ # 创建一个空的任务列表,用于存储不同类型的计算任务。
+ job_list = []
+
+ # 创建LR(学习率计算)任务,并将其添加到任务列表中。
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 为每个micro-batch创建前向计算任务。
+ for i in range (num_micro_batches):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(i)
+ job_list.append(forward_job)
+
+ # 为每个micro-batch创建后向计算任务。
+ for i in range (num_micro_batches):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(i)
+ job_list.append(backward_job)
+
+ # 创建一个优化任务,通常在所有micro-batch计算后执行。
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 ) # 通常只有一个优化任务,所以micro-batch次 ID 为0
+ job_list.append(opt_job)
+
+ # 返回包含不同类型计算任务的任务列表。
+ return job_list
由于 FThanB
编排策略就是在所有的 Forward 计算完成之后才会进行 Backward 计算,所以在 _create_job_list
中,我们会为每个 micro-batch 创建前向计算任务和后向计算任务。最后添加一个优化任务。 在获取了 jobs 之后,我们就可以将它们添加到 plan
中,然后返回 plan
。
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _apply_single_impl (self, main_program, startup_program, context):
+ ...
+ plan = core.Plan(jobs, type_to_program)
+ context.set_attr( "plan" , plan)
jobs 和 type_to_program 之间的关系是怎样的?
jobs 是一个列表,包含了不同类型的计算任务,如 LR、FORWARD、BACKWARD、OPT。type_to_program 是一个字典,key 是计算任务的类型,value 是对应的子 Program。
2.3 1F1B 编排模式 在 1F1B
的编排模式下,每个设备先执行前向计算,然后再执行反向传播。不等待所有设备都执行完前向计算,就开始执行反向传播。
1F1B 示例如图所示,以 GPU3 的 F1(GPU3 的第 2 个 micro-batch 的前向计算)为例,F1 在计算前,F1 的反向 B1(GPU3 的第 1 个 micro-batch 的反向计算)已经计算结束,即可释放 F1 的中间变量,从而 F2 可以复用 F1 中间变量的显存。
有研究文献表明,1F1B
方式相比于 FthenB
方式,峰值显存可以节省 37.5%,对比朴素流水线并行峰值显存明显下降,设备资源利用率显著提升。
2.4 1F1B 相关代码解读 1F1B 的编排策略顾名思义就是一个 Forward 之后跟一个 Backward,这里的 Forward 和 Backward 都是指一个 micro-batch 的计算。1F1B 编排的实现逻辑在 Pipeline1F1BPass 类中实现,它继承自 PipelinePassBase 类。Pipeline1F1BPass 中重写了 _partial_programs
和 _create_job_list
方法。 _partial_programs
方法的实现逻辑如下
python def _partial_programs (self, program):
+ # 获取 "enable_send_recv_overlap" 标志,该 FLAG 可能增加显存消耗。
+ enable_send_recv_overlap = self .get_attr( "enable_send_recv_overlap" )
+
+ # 定义计算任务的类型列表,包括 LR、FORWARD、BACKWARD 和 OPT。
+ types = [ LR , FORWARD , BACKWARD , OPT ]
+
+ # 调用 _program_for_fthenb_and_1f1b 函数,根据输入的 program 和 enable_send_recv_overlap 创建子程序。
+ sub_programs = _program_for_fthenb_and_1f1b(program, enable_send_recv_overlap)
+
+ # 获取 "enable_backward_forward_overlap" 标志,用于确定是否启用前向传播和后向传播之间的交叠。
+ enable_backward_forward_overlap = self .get_attr( "enable_backward_forward_overlap" )
+
+ if enable_backward_forward_overlap:
+ # 如果启用了前向传播和后向传播之间的交叠,记录日志以指示启用。
+ logger.info( "Backward forward overlap enabled in 1F1B." )
+
+ # 从子程序列表中获取前向传播和后向传播的程序。
+ forward_program, backward_program = sub_programs[ 1 ], sub_programs[ 2 ]
+
+ # 调用 _backward_forward_overlap 方法,将前向传播和后向传播的程序进行重组,
+ # 以确保它们可以正确地交替执行。
+ (
+ splitted_backward_job_types,
+ splitted_backward_programs,
+ splitted_forward_job_types,
+ splitted_forward_programs,
+ ) = self ._backward_forward_overlap(backward_program, forward_program)
+
+ # 更新计算任务的类型列表和子程序列表,将交叠后的任务类型和程序添加进去。
+ types += splitted_forward_job_types + splitted_backward_job_types
+ sub_programs += (
+ splitted_forward_programs + splitted_backward_programs
+ )
+
+ for i in range ( len (types)):
+ logger.debug(
+ f "type = { types[i] } , sub_programs = { sub_programs[i] }\n "
+ )
+
+ # 记录调试信息,打印在稳定阶段执行的计算任务类型。
+ logger.debug( f "jobs_in_stable_phase = {self .jobs_in_stable_phase } " )
+
+ # 返回计算任务类型列表和相应的子程序列表。
+ return types, sub_programs
这里面的 _backward_forward_overlap
主要是用于实现前向传播和后向传播之间的交叠,是 1F1B 调度的优化算法。我们这里不做详细介绍,感兴趣的小伙伴可以自行阅读源码。除了 _backward_forward_overlap
之外,1F1B 的 _partial_programs
和 FThenB 的 _partial_programs
逻辑是一样的,都是调用 _program_for_fthenb_and_1f1b
函数,根据输入的 program 和 enable_send_recv_overlap 创建子 Program。
下面我们来看看 _create_job_list
的实现逻辑:
python # python/paddle/distributed/passes/pipeline_scheduler_pass.py
+def _create_job_list (self):
+ num_micro_batches = self .get_attr( "num_micro_batches" )
+ pp_stage = self .get_attr( "pp_stage" )
+ pp_degree = self .get_attr( "pp_degree" )
+
+ job_list = []
+ lr_job = core.Job( LR )
+ job_list.append(lr_job)
+
+ # 确保micro-batch数大于等于计算任务的度数
+ assert (
+ pp_degree <= num_micro_batches
+ ), "Num of micro batches should larger than or equal to pp degree."
+
+ micro_batch_in_warmup = pp_degree - pp_stage
+ micro_batch_in_1f1b = num_micro_batches - micro_batch_in_warmup
+
+ # 预热阶段
+ forward_micro_batch_id = 0
+ for i in range (micro_batch_in_warmup):
+ forward_job = core.Job( FORWARD )
+ forward_job.set_micro_batch_id(forward_micro_batch_id)
+ job_list.append(forward_job)
+ forward_micro_batch_id += 1
+
+ backward_micro_batch_id = 0
+ for i in range (micro_batch_in_1f1b):
+ # 为稳定阶段中的每个计算任务(BACKWARD和FORWARD)创建对应的任务
+ # 每个micro-batch中都有一个 BACKWARD 和一个 FORWARD 计算任务
+ for job_type in self .jobs_in_stable_phase:
+ job = core.Job(job_type)
+ micro_batch_id = (
+ forward_micro_batch_id
+ if job_type.startswith( FORWARD )
+ else backward_micro_batch_id
+ )
+ job.set_micro_batch_id(micro_batch_id)
+ job_list.append(job)
+ forward_micro_batch_id += 1
+ backward_micro_batch_id += 1
+
+ for i in range (micro_batch_in_warmup):
+ backward_job = core.Job( BACKWARD )
+ backward_job.set_micro_batch_id(backward_micro_batch_id)
+ job_list.append(backward_job)
+ backward_micro_batch_id += 1
+
+ # 创建优化任务
+ opt_job = core.Job( OPT )
+ opt_job.set_micro_batch_id( 0 )
+ job_list.append(opt_job)
+ return job_list
可以看到,1F1B 的 _create_job_list
和 FThenB 的逻辑略有不同,1F1B 的 _create_job_list
中会根据 pp_stage
和 pp_degree
来确定前向计算任务和后向计算任务的数量。在稳定阶段中,每个 micro-batch 中都有一个 BACKWARD 和一个 FORWARD 计算任务。最后添加一个优化任务。
预热过程是什么?
根据 1F1B 的流水编排图可以发现,在训练刚刚开始的时候,gpu 中会有很大的空闲,这个时候任务的执行顺序不是完全按照 1F1B 的编排方式,预热阶段就是对应这个过程。
2.5 流水并行执行过程 没启动多卡训练的时候,paddle 的训练命令类似于:
bash python -m paddle.distributed.launch --gpus 0,1,2,3 train.py
这个 paddle.distributed.launch
模块会启动多个进程,每个进程都会执行 train.py
,并且会传入不同的环境变量,用于指定当前进程的角色和进程数量。下面分析一下每个进程里面上面拆分出来的 job 是如何执行的。
在获取到编排好的 job_list
之后,我们就可以初始化 Executor
对象,然后执行 Executor
的 run
方法。下面是初始化 StandaloneExecutor
对象的代码:
python # python/paddle/base/executor.py
+new_program = program.clone()
+if (
+ new_program._pipeline_opt
+ and "standalone_opt" in new_program._pipeline_opt
+):
+ from paddle.distributed.passes.pipeline_scheduler_pass import (
+ apply_pass,
+ )
+
+ standalone_opt = new_program._pipeline_opt[ "standalone_opt" ]
+ pass_name = standalone_opt[ "schedule_mode" ]
+ plan = apply_pass(
+ new_program, new_program, pass_name, standalone_opt
+ )
+else :
+ ...
+ plan = core.Plan([default_job], type_to_program)
+
+new_exe = _StandaloneExecutor(place, plan, scope)
+return new_program, new_exe
其中的核心代码 apply_pass
在上面已经介绍过了。 在 apply_pass
中会调用 FThenB
或者 1F1B
的编排策略,将 main_program
切分成多个子 Program。
_StandaloneExecutor 是 C++ 端的一个类,下面是它的构造函数:
cpp StandaloneExecutor :: StandaloneExecutor ( const platform ::Place & place,
+ const interpreter ::Plan & plan,
+ Scope * scope)
+ : place_ (place), plan_ (plan), scope_ (scope) {
+ // 获取计划中micro-batch的数量。
+ int64_t micro_batch_num = plan_. MicroBatchNum ();
+
+ // 调整待等待的强制事件向量的大小,以匹配micro-batch的数量。
+ vec_force_events_to_wait_. resize (micro_batch_num);
+
+ // 为每个micro-batch创建新的 Scope,并将其存储在 micro_batch_scopes_ 中。
+ for ( int64_t i = 0 ; i < micro_batch_num; ++ i) {
+ micro_batch_scopes_. emplace_back ( & scope-> NewScope ());
+ }
+
+ // 创建一个用于日志记录的字符串流,显示micro-batch的创建。
+ std ::stringstream ss;
+ ss << "Create " << micro_batch_num << " micro_batch_scopes for scope "
+ << scope_ << " : " ;
+ for (Scope * scope : micro_batch_scopes_) {
+ ss << scope << ", " ;
+ }
+ VLOG ( 6 ) << ss. str ();
+
+ // 获取计划中的所有Job
+ const auto& jobs = plan_. JobList ();
+
+ // 对每个 Job 执行以下操作。
+ for ( const auto& job : jobs) {
+ const std ::string & job_type = job-> Type ();
+ std ::shared_ptr < ProgramDesc > program = nullptr ;
+ std ::shared_ptr < :: pir ::Program > ir_program = nullptr ;
+
+ if (FLAGS_enable_pir_api || FLAGS_enable_new_ir_in_executor) {
+ ir_program = plan_. IrProgram (job_type);
+ } else {
+ program = std :: make_shared < ProgramDesc >( * (plan_. Program (job_type)));
+ }
+
+ int64_t micro_batch_id = job-> MicroBatchId ();
+
+ // 检查micro-batch ID 是否在合理范围内。
+ PADDLE_ENFORCE (
+ micro_batch_id >= 0 && micro_batch_id < micro_batch_num,
+ phi :: errors :: Unavailable ( "The micro batch id ( %lld ) out of bound, "
+ "which should be in the range of [0, %lld ]." ,
+ micro_batch_id,
+ micro_batch_num));
+
+ // 如果存在多个micro-batch并且未启用 PIR API,则设置 Feed 和 Fetch 操作的列属性。
+ if (micro_batch_num > 1 && ! FLAGS_enable_pir_api) {
+ SetColAttrForFeedFetchOps (program, micro_batch_num, micro_batch_id);
+ }
+
+ interpreter ::ExecutionConfig execution_config;
+ execution_config.create_local_scope = false ;
+ execution_config.skip_gc_vars = job-> SkipGcVars ();
+
+ // 当前仅支持 CPU。
+ // 如果启用新 IR,创建一个包含计算的 IR 程序并将其更新为计划。
+ if (FLAGS_enable_new_ir_in_executor) {
+ ... // 新 IR 相关代码暂不讨论
+ } else {
+ // 创建 InterpreterCore 并将其存储在 interpretercores_ 中。
+ interpretercores_. emplace_back (
+ std :: make_shared < InterpreterCore >(place_,
+ program-> Block ( 0 ),
+ micro_batch_scopes_[micro_batch_id],
+ execution_config));
+ interpretercores_. back ()-> SetCopyProgram (program);
+
+ auto prog_inter = const_cast< ProgramInterpreter *> (
+ static_cast<const ProgramInterpreter *> (
+ interpretercores_. back ()-> Impl ()));
+ prog_inter-> SetForceEventsToWaitInfo (
+ & (vec_force_events_to_wait_[micro_batch_id]));
+
+ ...
+ }
+ }
+ }
+}
在初始化的时候,Paddle 会为每个 job 都创建一个 InterpreterCore
对象,然后将这些 InterpreterCore
对象存储在 interpretercores_
中。在后续的执行过程中,Paddle 会根据不同 job 执行不同 InterpreterCore
对象。初始化了 StandaloneExecutor 对象之后,我们就可以执行 run
方法了。下面是 C++ 端 run
方法的实现逻辑:
cpp paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ // 创建一个事件记录器,用于跟踪 StandaloneExecutor::run 方法的执行。
+ platform ::RecordEvent record_event (
+ "StandaloneExecutor::run" , platform :: TracerEventType ::UserDefined, 1 );
+
+ // 获取计划中的所有作业。
+ const auto& jobs = plan_. JobList ();
+
+ // 用于跟踪不同类型的作业的第一个出现位置的映射。
+ std ::map < std ::string, size_t> type_to_first_id;
+
+ // 如果共享构建结果的标志为假,执行以下操作。
+ if ( ! is_interpretercore_build_result_shared_) {
+ // 为第一个作业设置其类型的映射,并确保所有其他相同类型的作业共享工作队列。
+ type_to_first_id[jobs[ 0 ]-> Type ()] = 0 ;
+ for ( size_t job_idx = 1 ; job_idx < jobs. size (); ++ job_idx) {
+ interpretercores_[job_idx]-> ShareWorkQueueFrom (interpretercores_[ 0 ]);
+ if (type_to_first_id. count (jobs[job_idx]-> Type ()) == 0 ) {
+ type_to_first_id[jobs[job_idx]-> Type ()] = job_idx;
+ }
+ }
+ // 将共享构建结果的标志设置为真。
+ is_interpretercore_build_result_shared_ = true ;
+ }
+
+ // 迭代所有作业。
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+
+ // 创建一个事件记录器,用于跟踪每个作业的执行。
+ platform ::RecordEvent record_event (
+ job_type + "-" + std :: to_string (job-> MicroBatchId ()),
+ platform :: TracerEventType ::UserDefined,
+ 1 );
+
+ // 记录详细日志,显示作业的索引、类型和micro-batch ID。
+ VLOG ( 6 ) << "Run job (" << job_idx << "), type = " << job_type
+ << ", micro_batch_id =" << job-> MicroBatchId ();
+
+ // 如果作业类型已经在 type_to_first_id 中,且未启用新 IR,则共享构建结果。
+ if (type_to_first_id. count (job_type) != 0 &&
+ ! FLAGS_enable_new_ir_in_executor) {
+ interpretercores_[job_idx]-> ShareBuildResultsFrom (
+ interpretercores_[type_to_first_id[job_type]]);
+ }
+
+ // 如果作业的数量大于 1 且作业类型不是 "forward",则运行作业(使用一个空的临时 feed 名称列表)。
+ // 否则,运行作业并传递真正的 feed 名称列表。
+ if (jobs. size () > 1 && job_type != "forward" ) {
+ const std ::vector < std ::string > tmp_feed_names = {};
+ interpretercores_[job_idx]-> Run (tmp_feed_names, /*need_fetch = */ false );
+ } else {
+ interpretercores_[job_idx]-> Run (feed_names, /*need_fetch = */ false );
+ }
+ }
+
+ // 记录每个作业的运行时间,如果启用了 CUDA 且自动并行分析器被激活。
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+
+ // 返回 Fetch Tensors,根据是否启用新 IR 采取不同的操作。
+ if (FLAGS_enable_new_ir_in_executor) {
+ // 创建一个 FetchList,包含需要获取的张量。
+ framework ::FetchList fetch_res;
+ for ( auto& var_name : fetch_var_names_) {
+ auto* var = scope_-> FindVar (var_name);
+ fetch_res. push_back (var->Get < phi ::DenseTensor > ());
+ }
+
+ return fetch_res;
+ } else {
+ // 获取 "interpreter::kFetchVarName" 变量,其中包含需要返回的 Fetch Tensors。
+ auto* fetch_var = scope_-> FindVar ( interpreter ::kFetchVarName);
+ if (fetch_var) {
+ return std :: move ( * fetch_var->GetMutable < framework ::FetchList > ());
+ } else {
+ return {};
+ }
+ }
+}
三、流水并行可视化工作 3.1 工作背景 当下大模型的训练时间较长,分布式训练时序图的可视化对于调试和分析模型的训练过程非常重要。当下没有工具能够直接给出各个 GPU 设备上不同 Job 的运行区间,因此我们需要设计一个可视化工具来实现这个功能。
当下的工作大多是可视化出 cpu 端的各个 Job 的运行区间。由于 gpu 任务的异步性,在 cpu 端启动的 Job 并不一定在 gpu 端立即执行,因此 cpu 端的可视化并不能直接反映出 gpu 端的运行情况 。
3.2 可视化实现思路 我们的可视化工具的实现思路是:在 gpu 端各个 Job 结束的时候,打印出 Job 的类型和结束时间,然后在使用 python 脚本这些信息,绘制出各个 Job 的运行区间 。
3.3 准确定位 Job 的开始与结束时间 Paddle 中所有的计算任务都是在一个流上完成的,这个流我们叫做计算流。为了能够准确定位 Job 的开始与结束,我们需要找到每个 Job 中第一个计算算子,和最后一个计算算子,并在第一个计算算子之前插入一个 cuda stream callback
,在最后一个计算算子之后插入一个 cuda callback
。由于 cuda stream callback
会等待计算流中前面的任务执行完毕后才会执行,因此我们可以准确的定位出 Job 的开始时间和结束时间。
前面说到过每个 Job 都是由一个 InterpreterCore
对象来执行的,我们在每个 InterpreterCore
对象中使用自定义类来存储 Job 的开始时间和结束时间。下面是每个 InterpreterCore
对象中插入 cuda stream callback
和 cuda callback
的代码:
cpp // paddle/fluid/framework/new_executor/program_interpreter.cc
+void ProgramInterpreter :: RunInstruction ( const Instruction & instr_node ) {
+ ...
+ try {
+ instr_node. WaitEvent (place_);
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 如果 timer 还没插入开始的 callback 并且当前的 op 不是通信 op,那么就插入开始的callback
+ if ( ! calculate_stream_timer_-> IsStarted () &&
+ ! interpreter :: IsCommunicationOp (instr_node)) {
+ VLOG ( 3 ) << "Start calculated stream timer from op: " << op-> Type ();
+ calculate_stream_timer_-> Start ();
+ }
+ }
+#endif
+ ...
+}
上面的代码给出了在第一个计算算子之前插入 cuda stream callback
的逻辑,下面是在最后一个计算算子之后插入 cuda callback
的逻辑:
cpp void ProgramInterpreter :: ExecuteInstructionList (
+ const std :: vector < Instruction > & vec_instr ) {
+ ...
+ if (enable_job_schedule_profiler_) {
+ for ( int i = vec_instr. size () - 1 ; i >= 0 ; -- i) {
+ auto& instr_node = vec_instr[i];
+ if ( ! interpreter :: IsCommunicationOp (instr_node)) {
+ // 记录下来最后一个计算 op 的id
+ VLOG ( 3 ) << "Last calculated op type: " << instr_node. OpBase ()-> Type ();
+ last_calculate_instr_id_ = i;
+ break ;
+ }
+ }
+ }
+ ...
+}
+
+void ProgramInterpreter :: RunInstructionAsync ( size_t instr_id ) {
+ ...
+ while ( ! ready_ops. empty ()) {
+ instr_id = ready_ops. top ();
+ ready_ops. pop ();
+ auto& instr_node = vec_instruction_. at (instr_id);
+
+ RunInstruction (instr_node);
+
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler_) {
+ // 给最后一个计算 op 之后插入一个callback
+ if (instr_id == last_calculate_instr_id_ &&
+ calculate_stream_timer_-> IsStarted ()) {
+ VLOG ( 3 ) << "Stop calculated stream timer from op: "
+ << instr_node. OpBase ()-> Type ();
+ calculate_stream_timer_-> Stop ();
+ }
+ }
+#endif
+}
当所有的 Job 都执行完毕之后,我们就可以 StandAloneExecutor
的 Run
方法中获取到每个 Job 的开始时间和结束时间了。下面是获取 Job 开始时间和结束时间的代码:
cpp // paddle/fluid/framework/new_executor/standalone_executor.cc
+paddle :: framework :: FetchList StandaloneExecutor :: Run (
+ const std :: vector < std :: string > & feed_names ,
+ const bool enable_job_schedule_profiler ) {
+ ...
+ // record each job's run time
+#if defined ( PADDLE_WITH_CUDA )
+ if (enable_job_schedule_profiler) {
+ for ( size_t job_idx = 0 ; job_idx < jobs. size (); ++ job_idx) {
+ const auto& job = jobs[job_idx];
+ const std ::string & job_type = job-> Type ();
+ double start_time, end_time;
+ std :: tie (start_time, end_time) =
+ interpretercores_[job_idx]-> InterpreterRunTime ();
+
+ // Note(sonder): Used to record the runtime of each job in order to
+ // generate a parallel pipeline timeline. Job runtime information can be
+ // extracted from the logs using the scripts "profiler_helper_static.py".
+ // Do not modify, as it may affect the results of regular expression
+ // matching.
+ VLOG ( 0 ) << "Profiler Info: Job (" << job-> MicroBatchId ()
+ << "), type = " << job_type
+ << ", micro_batch_id = " << job-> MicroBatchId ()
+ << ", job_start_time = " << std :: to_string (start_time)
+ << ", job_end_time = " << std :: to_string (end_time);
+ }
+ }
+#endif
+ ...
+}
+
+// paddle/fluid/framework/new_executor/interpretercore.cc
+std :: tuple < double , double > ProgramInterpreter :: InterpreterRunTime () {
+ double start_time = 0 , end_time = 0 ;
+#if defined ( PADDLE_WITH_CUDA )
+ start_time = calculate_stream_timer_-> StartTime ();
+ end_time = calculate_stream_timer_-> EndTime ();
+#endif
+ return std :: make_tuple (start_time, end_time);
+}
3.4 可视化工具的实现 在获取到每个 Job 的开始时间和结束时间之后,我们就可以使用 python 脚本来绘制出各个 Job 的运行区间了。可视化工具的实现思路是将每个 Job 的开始时间和结束时间保存成 Chrome Trace Event 的格式,然后使用 chrome://tracing
工具来绘制出各个 Job 的运行区间。以下是绘制效果图:
参考文献 https://docs.oneflow.org/master/parallelism/01_introduction.html#_5 https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/05_parallel_end_to_end/index_cn.html
+
+
+
+
\ No newline at end of file
diff --git a/posts/paddleocr-release.html b/posts/paddleocr-release.html
new file mode 100644
index 0000000..5e66f2d
--- /dev/null
+++ b/posts/paddleocr-release.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 终于等到你!PaddleOCR 新版本发布! | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 在开源社区的热烈期待与共同努力下,PaddleOCR 迎来了里程碑式的版本更新——v2.8.0!本次更新不仅引入了前沿的 OCR 技术成果 ,还对项目结构进行了深度优化 ,解决了若干历史疑难问题 ,旨在为广大开发者提供更加高效、便捷的 OCR 解决方案。让我们一同探索 PaddleOCR v2.8.0 带来的全新体验与无限可能!
顶尖模型引入,引领 OCR 技术潮流 PaddleOCR v2.8.0 版本隆重引入了PaddleOCR 算法模型挑战赛的冠军方案 ,为 OCR 领域树立了新的标杆。 其中,赛题一“OCR 端到端识别任务 ”的冠军方案——场景文本识别算法 SVTRv2 ,以其卓越的识别性能与泛化能力,为用户带来了前所未有的识别体验。
赛题二“通用表格识别任务 ”的冠军方案——表格识别算法 SLANet-LCNetV2 ,则以其精准高效的表格识别能力,为数据处理与分析提供了强有力的支持。
项目结构优化,聚焦 OCR 核心 为了进一步提升 PaddleOCR 项目的专业性与易用性,我们决定将非核心模块 PPOCRLabel 和 StyleText 迁移至新的仓库,使 PaddleOCR 项目更加专注于 OCR 与版面识别 的核心技术。这一举措不仅简化了项目结构,也为开发者提供了更加清晰的项目导航与资源访问路径。
详见:Notice of PPOCRLabel and StyleText Project Migration
历史疑难问题解决,提升用户体验 半年多来,PaddleOCR 存在若干历史疑难问题,影响了开发者的使用体验。因此,在新版本中,我们重点解决了更新 Backbone 后无法运行模型、numpy 版本依赖冲突、Mac 系统中运行卡顿 等一系列历史疑难问题。部分疑难问题还在解决过程中,欢迎广大开发者一起参与!
详见:【疑难解决】解决 PaddleOCR 历史存在的疑难 Issue
其它优化改进,持续精进 除了上述重大更新外,PaddleOCR v2.8.0 版本还包含了一系列细微但重要的优化改进。包括但不限于:
解决版面分析中,OCR 结果偶尔丢失的问题 添加 pyproject.toml,使 PaddleOCR 符合 PEP 518 规范 对于大图推理,引入滑动窗口操作 这些改进旨在进一步提升软件的稳定性、兼容性和性能表现 ,确保 PaddleOCR 能够在更广泛的场景中得到应用。
开源共建,共创辉煌 需要特别强调的是,PaddleOCR v2.8.0 版本的每一个进步与成就都离不开开源社区的支持与贡献。在 PMC(Project Management Committee) 的统一管理下,众多社区开发者携手并进、共同努力,才使得 PaddleOCR 能够不断前行、日益完善。这里要特别感谢 PaddleOCR PMC 成员:@GreatV (PMC Chair)、@tink2123 (PMC Chair)、@Topdu 、@SWHL 、@Liyulingyue 、@Sunting78 、@jzhang533 ,也感谢虽然暂未加入 PMC 但是作出了大量贡献的热心开发者。
新版本 contributors 列表,贡献者数量创历史新高!
这里预告一下,为了更好地服务广大开发者,PaddleOCR 文档教程专属站点 正在由 PMC 展开建设。该站点将汇集仓库中原先散落在各处的文档资源,支持关键词检索 功能,界面优雅舒适,相信大家一定会喜欢。
我们诚挚地邀请更多开发者和开源爱好者加入我们的行列,一起将 PaddleOCR 越做越好!
结语 PaddleOCR v2.8.0 版本的发布是我们迈向新征程的重要一步。我们坚信,在未来的日子里,在大家的共同努力下,PaddleOCR 将不断创新、持续进步,为 OCR 领域的发展贡献更多的智慧与力量!
+
+
+
+
\ No newline at end of file
diff --git a/posts/pfcc-36th.html b/posts/pfcc-36th.html
new file mode 100644
index 0000000..9fd2b9e
--- /dev/null
+++ b/posts/pfcc-36th.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 第三十六次 PFCC 会议|Ivy 与 PaConvert 分享 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 在第 36 次 PFCC 会议上,我们有幸邀请了 Ivy 社区的英国小哥 Daniel(@djl11 )和 Paddle 社区开发者莱师傅(@RedContritio )分别分享了代码转换工具 Ivy、PaConvert。
会议议程 如何通过 Ivy 将 PyTorch 和 TensorFlow 模型进行转换,并直接在 Paddle 项目中使用。(35 min) @djl11
Ivy 模型转换 demo 讲解(截图) @RedContritio PaConvert 代码转换工具介绍 (10 ~ 20min)
PaConvert 介绍(截图) 会议材料及回放见百度网盘链接: https://pan.baidu.com/s/16vAVoXpCgdrrRK5e_-w7Ig ,提取码见 PFCC 微信群公告。
QA 环节 所有 QA 内容均已记录在「第三十六次 PFCC 会议纪要」 中。
Part-1: Ivy (部分) 问题 1: 你有测试过多少模型能够转换成功?
Daniel 目前测试了 30 个主流模型,均能转换成功。目前我们正在测试更多 hugging face 上的模型,大概 70 ~ 75% 能够转换成功。我们也欢迎和鼓励社区告诉我们哪些模型无法有效转换,我们有信心能够解决这些问题。
问题 2: 对于成功转换的模型,它会影响性能吗?或者可能需要更多的时间来训练嘛?
Daniel 这是一个好问题,也是我们目前正在测试的东西。我们现在看到在 Paddle 上会有 30% 到 40% 的性能损失, 这是因为在我们的 Paddle 后端上有一些低效,我们目前正在努力解决这个问题。 性能问题取决于模型,但通常来讲并不会影响训练性能。当我们从 Pytorch 转换到 Tensorflow 时,经常看到训练速度的提高。特别是当我们从一个框架转化到 Jax,经常看到一个大幅度的提升,尤其是在 TPU 上。 所以可能有一些开销,但总的来讲不会有特别大幅度的降低。即使存在个别问题,我们也会很快修复他们。话说回来,这也是一个长期的过程,因为我们正在开发许多不同的框架,并与许多不同的生态伙伴合作。我们把精力集中在用户反馈的真实用例上,而不是试图修复所有东西。所以当你使用过程中确实出问题了,请在 discord 上联系我们,我们会把它添加到高优先级的列表中,并尽快解决。
问题 3: 请问是否有覆盖率相关的工作,类似 PyTorch 那样对后端支持覆盖率有表单或者对应的 CI 流水线
Daniel 我们做覆盖的方式是详尽的单元测试,所以答案是有。我们在 Github 上 的 CI 已经达到了最大值,我们一直在运行单元测试,在 CPU 和 GPU 上测试每个框架、每个函数,所以我们确实有扩展函数覆盖范围。 但在每个设备上,支持每个框架、每个版本的每个功能,是一个非常大的、指数爆炸级的工作。基本上有数百万个这样的测试。所以我们真正关注的是什么?这是一个很长的答案,但就像生活中的许多事情一样,我们需要关注重要的事情。我们把更多的注意力放在真正常见的函数上(relu、add、matmul 等)那些真正不常见的、较少使用的函数,我们关注的比较少。在我们看来,我们可能永远不会达到完全覆盖,但只要覆盖到 99% 的模型就是 OK 的,这比支持每个版本每个函数更重要。
问题 4: PyTorch 大概有两千多个 API,包括很多废弃的、不常见的 API,有多少可以通过 Ivy 转换?
Daniel 我们只关注当前最新版本的 pytorch,以及其 functional API。 在 ivy/functional/frontends 你可以看到所有这些细节,包括我们在每个框架中都支持什么。 主要的一点是我们支持 functional API,但我们不支持 ATen。我们并不把转换限制在 ATen 或很小的范围内(比如组成所有函数的函数子集),我们可以这么做,但不这样做的原因是我们想更高级别的代码转换。某种程度上,函数的越高层越好,因为当我们从高层 PyTorch 函数转换到高层 ivy 函数、高层 Tensorflow 函数时,把函数拆分成更小单位仍然是有可能的。但如果将底层 OP 重新创建为目标框架中能被优化的高级函数,要困难得多。这就是为什么我们专注于 functional API 和高级函数更重要(但我们也不重新实现的 class)。 这是一个很长的回答,但这是有意义的。不过我们看到了良好的覆盖率,看到绝大多数模型都能正确转换。我们鼓励人们尝试它,如果它不起作用,让我们知道,我们会让它起作用。
编者注:细节戳 ➡️ ivy/functional/frontends
问题 5: 我们刚看到的前端,目前支持了很多。但现在还有很多 API 不能转换,那我该怎么做?怎么处理它们?
Daniel 基本上,如果我们看到开发者对某 API 有足够的兴趣,届时我们会支持。对于不那么常见的 API,Ivy 也是可以支持这些的。如果有一个模型不能转换成功,而我们有信心能让他转换成功,那么我们可以添加对那些 API 的支持。 如果用户有自定义的 C++ 代码,那么默认情况下不能转换,但我们提供一个接口,你可以在其中指定 C++ 的 torch 实现,这样就可以转换了。
问题 6: PyTorch API 有很多参数,不同参数可以组成各种组合,如果某些参数不支持,则如何处理?
Daniel 基本上我们支持 PyTorch 的所有行为,包括所有额外的参数等。我们通过构建基于 Ivy 的统一的 functional API(如 ivy.matmul、ivy.add、ivy.reshape 等),重新创建 PyTorch 函数,以完美模仿 PyTorch 的任何可能行为。这可能需要一个 Ivy 函数来重新创建,但如果是一个具有多种不同模式的复杂 Python 函数,可能就需要十个。然后,使用 Ivy 重新创建所有这些行为,每个 Ivy 函数都有特定的 Paddle 后端。因此,一个 PyTorch 函数可能需要多个 Ivy 函数,而这些 Ivy 函数又可能需要多个 Paddle 函数来完全重新创建该行为。所有变体、额外的参数和边缘情况都可以通过中间表示和 API 得到支持。在这些情况下,需要将其作为 Paddle 函数的组合重新创建,尽管这可能以运行时间速度为代价,但通常不会看到大的损失。
问题 7: 目前大模型很流行。对于预训练的大模型,有大量的预训练权重,是否有更快的方式进行转换。
Daniel 在从 PyTorch 转换模型到 Paddle 后,因为现在 Paddle 模型就是一个加强版的 PyTorch 模型,转换权重可以相对简单,比如将它们转换为 Numpy 数组,然后加载到 Paddle 中。实际上,Ivy 在模型转换过程中,会自动把所有的 PyTorch 权重转换为 Paddle 权重。 目前没有更快的转换方式,通常使用 DLPack(张量数据结构的中间表示标准)作为中间件,但由于不同框架对 DLPack 的支持不一致,最终选择使用 Numpy 作为中介。我们把将权重转移到 CPU,以高精度格式存储并转换为 Numpy 数组,然后转移到新框架中,这种方法在 demo 演示中以及对于大型模型都能很好地工作。 实际上目前的转换是基于 function tracing,如果大型语言模型需要多个 GPU 运行,这可能会有些复杂。不过,我们将很快转向使用纯 symbolic tracing 方法,届时就不需要存储所有权重和中间数组,而是基于符号追踪的代理数组,这将意味着不需要启动大量 GPU 来完成函数追踪。
问题 8: 当引入一个新 API 时,支持新 API 的成本有多大?
Daniel 从工程成本的角度来看,支持一个新 API 并不困难,也不是我们特别关注的问题。我们大部分时间都花在了 function tracing 的逻辑、抽象语法树(AST)逻辑以及编译器和追踪器上。 添加一个新的前端功能并不难,做起来相当快速和容易。事实上,所有前端 API 和后端 API 都是完全开源的(Apache 2 许可),任何人都可以为其贡献代码。如果在转换模型时失败,并且报错消息指出模型转换失败是因为缺少来自 Ivy/PyTorch 前端的某个函数,我们还提供了如何提交拉取请求以及如何自行添加该功能的链接。真正困难的部分是处理动态控制流、以可扩展的方式进行函数追踪、获取正确的抽象语法树表示,这些都是与框架无关的工作,我们以一种不特定于任何框架的方式进行这些工作。因此,简短的回答是添加新 API 相对容易,真正困难的是其他部分。
问题 9: Ivy 是有特定的前端 API,还是只转译其他框架?
Daniel Ivy 本身也是一个框架,拥有自己的前端 API(如 TensorFlow、PyTorch、JAX 等)以及自己的一套函数。Ivy 的 function API 有两个用途:第一个用途是作为一个中间表示,用于从一个框架转换到另一个框架,即 Ivy 的 API 充当中间表示;第二个用途是作为其自身的框架,允许直接在 Ivy 中编写新代码,可以在 Ivy 中编写整个模型,并使用 Ivy 类和 Ivy 函数,然后可以切换后端,使用 Paddle、TensorFlow、PyTorch 或 JAX 等。因此,Ivy 既能自身作为框架,也能转译其他框架。但我们认为最有价值并且最直接的是转译器功能,因为这样已有的所有代码都可以直接使用,而无需任何人编写新的 Ivy 代码。
问题 10: 听起来和 keras 很相似?
Daniel 是的!如果忽略前端,Ivy 和 Keras 非常相似。
问题 11: 我们是否需要使用更高的内存来转换模型?因为也许转换模型过程中需要保存中间信息,所以可能会占用一些内存。所以我想问问,像转换 llama 这样的大模型是否 ok?
Daniel 这是一个很好的问题。目前,鉴于转译器是基于函数追踪(function tracing)的,确实需要调用模型以追踪图(graph),这意味着在转换时需要能够对模型进行推理。现在,转换本身不需要在目标设备上进行,只要你有一台内存足够的机器,就可以在 CPU 上完成转换,并且默认情况下转换是在 CPU 上进行的,因为通常 CPU 有的 RAM 比 GPU 多。 在转译器的一个很旧的版本中,我们曾同时获取所有 PyTorch 权重和所有 Paddle 权重,并让它们同时存在于内存中,这是非常糟糕的做法。现在,权重从 A 转换到 B 是逐步进行的,我们先取第一个权重,将其转换为 Numpy,然后转换为 Paddle,接着转换第二个权重,这样我们就不会重复获取权重。但是,我们避免尽可能多的函数追踪(function tracing),我们现在有自己的 AST(抽象语法树)方法,这个方法工作得很好、非常稳定,我们正在与几家公司合作开发这一点。 最终设计基于 AST,基于符号追踪,我们将实际的函数追踪作为最后的手段,因此内存使用将会非常低。但是,正如你所说,现在确实需要一些 RAM 来转换一个非常大的模型,但希望在几个月内,这将不再是问题。
问题 12: 你如何平衡你的生活和工作,以及保持你对开源的热情呢?
Daniel 平衡生活和工作非常困难,但幸运的是,我真的很热爱我正在做的事情,这是保持我动力的原因。我们不仅仅是在做一个开源项目,还在建立一家公司,需要与客户进行沟通。虽然我是唯一的创始人(并非是原本的设计),而且这确实需要付出大量的工作,但我对统一人工智能领域的景象充满热情,总是对看到的碎片化情况感到沮丧,无论是在 AI 框架还是在大型语言模型(LMM)的领域。目前我们正在努力统一这些领域,保持激情和兴奋是我继续前进的动力,如果我不再感到兴奋,可能就不会那么有趣了。幸好,我始终保持着兴奋感,所以工作并不感觉艰难。确实,因为这些并不感觉像是工作,所以更容易保持。 此外,帝国理工学院的学习经历非常紧张,这让我掌握了之前缺少的知识教育和时间管理经验。 但我也要说,我会把周日作为休息日,我认为你也需要休息,否则很快就会感到疲惫不堪。
问题 13: 英国的人工智能环境怎么样?是否会有官方活动之类的?
Daniel 英国的人工智能环境还是不错的。虽然我经常到处旅行,在欧洲和美国都呆过相当长的时间,所以并不算是英国本地人,但英国的 AI 环境绝对是值得关注的。比如,DeepMind 就设在英国,谷歌的主要 AI 分支也在伦敦。显然,Meta、亚马逊以及其他几家公司也在伦敦设有 AI 办公室。伦敦还有很多有趣的初创公司,所以我觉得很幸运能住在伦敦,特别是在靠近国王十字的伊斯灵顿区,那里可以说是整个科技圈的中心。我遇到的很多很酷的初创公司以及举办的活动数目都令人惊叹,所以我认为这里的环境非常好。我很高兴能在伦敦,与这么多创造酷炫事物的人在一起。 我认为最大的 AI 人才集中地是旧金山,那里又是另一个水平,但我仍感觉英国很棒,伦敦也很棒,虽然它还没有达到旧金山的水平,但也许将来会有所改变。
Part-2: PaConvert (部分) 编者注 ✍️:主要是英国小哥在问莱师傅 😛
会议剪影
+
+
+
+
\ No newline at end of file
diff --git a/posts/pku-course.html b/posts/pku-course.html
new file mode 100644
index 0000000..56bf8b6
--- /dev/null
+++ b/posts/pku-course.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 飞桨开源社区走进北京大学课堂 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 飞桨开源社区走进北京大学课堂 10 月 11 日,飞桨开源社区应北京大学计算机学院周明辉副院长邀请,在周老师的开源软件开发 课程的第四次课 上,为北大的同学们介绍了飞桨开源社区和飞桨新一代 IR 设计。
Jun 给同学们介绍了飞桨开源社区的基本情况
杰师傅给同学们深入浅出的介绍了飞桨新一代 IR 设计。
课程材料在线观看 这次课程的 Slides,可以在这里在线浏览:飞桨-北大讲课-2023-10-11
彩蛋 🎊 飞桨开源社区曾经在 Apollo Park 接待过北大的国际留学生,梦师傅曾经全英文给参加北京大学夏季夏令营的牛校的神兽们讲解过飞桨。
+
+
+
+
\ No newline at end of file
diff --git a/posts/pytorch-conference-01.html b/posts/pytorch-conference-01.html
new file mode 100644
index 0000000..a7c0ec0
--- /dev/null
+++ b/posts/pytorch-conference-01.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 【睁眼看世界 🌍】|PyTorch Conference 2023 - State of PyTorch | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 本文是对 PyTorch Conference 2023 中的《State of PyTorch 》部分进行了精准的中文翻译和详细的文字总结,旨在向读者介绍 PyTorch 社区的 2023 年动态 。同时也特别参考了散步 大佬的《PyTorch Conference 2023 翻译系列文章 》,在此基础上,进行了细致的校对和优化,确保翻译准确无误。对散步大佬之前的辛勤翻译和对开源社区的贡献,表示衷心的感谢和敬意。
写在最前 【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
Lightning Talk 我的名字是 Alban,是 META 的一名软件工程师,已经在 PyTorch 工作了很长时间,并且主要在 PyTorch 核心库维护方面做了很多工作。
在今天这个快速闪电演讲中,我要给大家介绍一下 PyTorch 的现状。以前参加过大会的人,也许知道我们每年都在进行着类似的讨论。Joe 去年就在这里做了类似演讲。今天我想谈论的是三个重要的 PyTorch 里程碑,以及今年发生的三个重要活动,还会谈论一些有趣的数字。Joe 之前已经给大家展示过其中的一些,但能亲眼看到这些数据总归是很有趣的。而在最后,我会给大家介绍一下如何参与 PyTorch ,以及如何帮助我们一起建设 PyTorch。
PyTorch Milestones 1. PyTorch 2.0 20M+ downloads Adds: torch.compile MPS backend for Apple M1/M2 torch.func set_default_device Better transformer 第一个重要的 PyTorch 里程碑是:今年(2023 年)年初发布了 PyTorch 2.0 版本 。它在所有平台上下载超过 2000 万次,所以对我们来说,这是一个相当重要的发版。并且,下载数量仍在增加。它添加了一系列非常重要的功能:
torch.compile 。我们已经讨论过它很多次,因此在这里不再讨论。MPS 后端 。一个重要功能是支持 MPS 后端,能够充分利用 Apple M1/M2 芯片的 GPU 部分。现在该功能处于测试阶段,随着覆盖范围和稳定性的提升,会支持更多新功能。torch.func 。对于了解这的人来说,它又叫 functorch。和 Jax 类似,它新增支持函数式 API,并且融入在 “PyTorch 世界”中,因此能兼容其他所有 PyTorch 功能。set_default_device 。我不知道大家是否熟悉这个功能。它可以通过改变创建 PyTorch 模型时使用的默认设备,来显著加速初始化(initialization),例如直接在设备上进行初始化。或者如你在一些主题演讲中看到的例子一样,快速的创建模型。通过使用元设备(meta device),即一个没有数据的伪设备(fake device),来跳过模型的初始化过程,直接加载权重。这样就可以避免占用太多内存,进行不必要的初始化等类似事情。更好的 transformer 。这是由 PyTorch 团队和众多 maintainers 共同努力做出的重大推进,一起改进 PyTorch 中的 transformer 模型。无论是 transofmer 相关的高层 API ,还是底层运算,你都可以拥有目前的最佳实现。编者注 ✍️:这部分演讲内容是对 PyTorch 2.0 简略概括,详细内容可以看 Blog 或 2.0 Release notes 。
2. Spring Docathon 27 active partipants 5 new tutorials & examples 45+ PRs merged 53+ issues closed 另一个值得一提的重要里程碑是:今年(2023 年)发起的 Spring Docathon 活动 。该活动共吸引了 27 位开发者参与,成功合入了超过 45 个 PR(Pull Request),解决了 53 个 Issues。非常有效地促进了我们 tutorials 仓库 的改进,不仅提高了教程的质量,还增加了新的教程内容,确保我们的教程始终保持最新。
编者注 ✍️:其实飞桨也提供了 Paddle Docathon ,活动初衷和 PyTorch 是一样的,但整体难度和质量比起 PyTorch Docathon 来说要低一些。第六期黑客松会有一个专门的赛道:优秀稿件征集与传播,大家也可以敬请期待。
3. First Year of the Foundation Open to new membership June 2023 New premier members (IBM, Intel, Hugging-facing) New general members (Graphcore) 最后,正如 Joe 和 Ibrahim 所提到的,今年(2023)是基金会成立的第一年。并且在今年六月,基金会向新成员敞开了大门。面对当前的发展,我们感到无比兴奋。
在我撰写这篇演讲稿时,我们已经迎来了四名新成员,而现在又新增了两名,增长的速度甚至超过了我制作幻灯片的速度。我对我们吸引到的成员的多样性感到非常激动,既有专注于底层组件和后端技术的企业,如 IBM 和 Intel,也有更注重高层应用、面向终端用户的企业,如 Graphcore 和 Hugging Face。看到我们在各个方面都在取得增长,对基金会和整个生态系统来说,确实是非常令人振奋的。
编者注 ✍️:Ibrahim Haddad 是 Linux 基金会副总裁(AI & DATA 方向),也是 PyTorch Foundation 董事会的执行官。
PyTorch in Numbers 接下来,让我们来看一些数字。
1. The pytorch/pytorch codebase 对于那些密切关注代码库的人而言,过去的一年(2022 年),我们总共有 12000 次 commits。并且我们非常高兴看到开源贡献增长了 8%,这里的增长特指来自于除日常核心维护人员之外 的开源贡献者。
图表展示了每年我们代码库的 commits 数量。如你所见,它正在不断增长,并且未来也会越来越多。
2. The pytorch/pytorch top contributors 1128 Contributors this year (+10% more than last year) Top OSS Contributors 所有的开源贡献增长都离不开我们每一位贡献者的共同努力。今年,我们共有 1,128 名贡献者对代码库作出了贡献,相较去年增长了 10%。看到这么多人投身于 PyTorch 的开源工作,实在是让人感到非常振奋。
我在此列出了一些提交量最多的贡献者的 GitHub ID,他们的活跃度非常高。当然,还有许多人虽然只提交了少量代码,但他们对代码的改进和贡献的多样性也极为关键。
这所有的努力共同促成了,GitHub 上使用 PyTorch 的仓库数量超过 600,000 个,比去年增长了 20%。因此,看到越来越多的人不仅使用 PyTorch,还发布基于 PyTorch 实现的代码,这确实非常让人兴奋。
3. Driving state-of-the-art AI research 其中,大部分代码来自于科研领域 ,PyTorch 在推动许多前沿 AI 技术的发展方面发挥了重要作用。今年,已有超过 7,000 个 AI 科研论文相关的 GitHub 仓库用到了 PyTorch。事实上,60%的 AI 研究成果是基于 PyTorch 来实现的。因此,见证这样一个开放、繁荣的科研生态,我们感到无比兴奋。
4. Powering the AI indusry 65K+ PyTorch professionals(on LinkedIn) 3K new jobs requiring PyTorch 如今,PyTorch 在工业界的发展也取得了显著进步,正在迅速弥补之前的落后处境。以 LinkedIn 的统计数据为例,我们观察到将 PyTorch 作为核心技能的求职者每年增长率达到 50%,同时,越来越多的职位也开始要求应聘者掌握 PyTorch。
5. Talk of the town 我们的一切成就,都离不开我们庞大社区的支持。接下来,我想分享一些关于社区的有趣数据。Discuss Forum 是 PyTorch 为用户、开发者及其他所有人提供的互动论坛。每月,我们有大约 400 名新成员加入,网站浏览量超过 200 万次。同时,我们的网站也非常活跃,每月约有 2000 篇新帖子发布。我们非常需要活跃的社区,让更多成员帮忙解答用户和开发者的问题。
Join us 在这里,我想呼吁大家加入我们!PyTorch 不仅是一个开源项目,它也是我们共同奋斗的目标。只有依靠一个庞大而活跃的社区,我们才能不断推动 PyTorch 向前发展。因此,我们做了很多工作来尝试巩固我们的社区生态。
1. How to get involved 我们根据社区里很不错的反馈(包括如何帮助新成员融入、如何让他们共同参与到 PyTorch 的建设中来),创建了一个新页面——PyTorch 终极贡献指南。点击下面的链接可以查看,接下来我也会讲一下如何参与其中。
PyTorch 终极贡献指南:https://github.com/pytorch/pytorch/wiki/The-Ultimate-Guide-to-PyTorch-Contributions
2.Non-code contributions 首先我想和大家讲的是,我们是有很多非代码的贡献 。所以对 PyTorch 的贡献远不止编写代码,还有很多其他方面的工作。
在左边可以看到我之前提到的论坛。同时我们还有一个开发者论坛 Dev-Discuss ,在这里,你可以提问、回答问题或与社区成员讨论各种话题。这些都是非常重要的贡献方式,而且每个人都可以参与其中。另外,因为社区中的所有人都可以建设 PyTorch,所以报告问题、提出新功能建议等也是你可以做出的重要贡献。例如,我们非常欢迎大家对我今天提到的新功能提出反馈,无论是 torch.compile 还是其他功能。请告诉我们什么地方做得不够好,什么工作得很好,以及你还需要什么功能。
3. Code contributions Reproduce and investigate issues Bugfix/FeaturePullReguests Review/maintain Documentationch 当然,众所周知,代码贡献 自然也是非常重要的。这里我认为第一点(Reproduce and investigate issues)特别有趣,这可能不是每个人都会想到的贡献方式,但帮助复现和调查 issues 是非常非常有价值的一件事情,即使这并不是在“编写代码”,并且也比较耗时。多年前,当我开始为 PyTorch 做贡献时,我做的第一件事就是 debugging issues,并在论坛上回答问题。这不仅有趣,也非常有帮助,因为一旦我们明确了问题所在,接下来的修复 bug 和增加新功能的工作就会变得更加简单。在 PyTorch 社区,提交 bug 修复或新功能的 PR 往往是解决问题过程中最迅速的一步。找到问题所在,弄清楚需要做什么,实际上才是最关键的的。
第三点是,我鼓励任何感兴趣的开发者不只是提交代码,也帮助我们审查代码和维护代码库。现在基金会完全开放了,我们有来自世界各地的许多贡献者帮助我们维护 PyTorch 的子仓库,我们鼓励所有感兴趣的人参与进来。
最后,我们也非常重视文档的编写和改进。我相信许多人都知道我们的文档网站和教程网站,我们也在努力的增加更多文档内容,所以任何文档相关的贡献都非常欢迎。对于那些对此感兴趣的人,我们下个月将举办一个 PyTorch Docathon 文档马拉松活动。如果你想参加,学习新技能并获得认可,请关注我们的博客文章了解更多信息。
编者注 ✍️:活动已经结束了哦~
编者最后的碎碎念 PyTorch 生态力量非常强大,是目前 Paddle 或者国内任何一个深度学习框架都无法企及的一个高度。 Paddle 本身的社区治理结构、运作方式,其实是带有一定国内特色的。 翻译会议真的很花时间,比单纯的翻译文章累多了,散步能翻译到 30 篇后(总共 60 多篇) 的会议内容真的太强了。目前散步在和 Linux 基金会取得联系,可能会有专门的团队进行翻译,有兴趣加入的也可以联系他。 散步做的一个英文转录翻译的工具,可以看看:https://github.com/sanbuphy/WhisperTranslator
+
+
+
+
\ No newline at end of file
diff --git a/posts/sanbu-story.html b/posts/sanbu-story.html
new file mode 100644
index 0000000..45110b0
--- /dev/null
+++ b/posts/sanbu-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】物理 ➡️ 经济 ➡️ 开源,看散步师傅的曲折求学史~ | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors “负暄檐宇下,散步池塘曲”,本期我们邀请到了热情好学的散步 🚶♀️ 师傅!你想知道他的人生理想么?你想了解他的学习历程么?你想知道他的日常生活么?你想得到他的真挚祝福么?点击此篇博客,让我们一起走进小散的浪漫人生~
一、个人名片
编者注✍️:潇某真的有很努力把小散的照片 P 得可爱,想看原图可以私聊 😁,反正肯定不会给滴 🐶!
二、采访内容 散师傅,给大家介绍一下自己吧!
小散师傅: 大家好!我是散步🚶(@sanbuphy ),菜但是喜欢学。你们可能会在水群之旅中遇到我。如果觉得我话痨了,请喊我去学习;如果你也喜欢讨论问题,欢迎随时找我一起讨论进步 😁😁;如果你觉得我有缺点,很欢迎你直接指出,这是我自省并前进的动力之一;如果你喜欢做开源 & 没事喜欢做一些玩具,那更请你和我一起去快乐开源!!!!
「散步」 名字由来(用小散原话):因为我想人生就这样 不要那么焦虑,也不要浪费;想要在一个茶足饭饱的午后,在阳光的指引下因生命的跳动而缓缓向前。最好的指代应该是散步,想要向前,但不至于拧巴,就这样的走下去了,也就像生活这般的过下去了。
大家对你都比较熟悉,一方面是因为你在社区的贡献量,另一方面是因为你经常水群,能不能给大家讲讲 你是怎么做到同时水 5~10 个群的?
小散师傅: 其实这个很简单。只要你和我一样宅 & 不打游戏 & 没有女朋友 & 打字飞快,就可以一次性水完全部群了!(群保安,不时保卫一下群里的业主们 😂😂)为数不多的好处就是因此可以认识各类大佬。
小散四件套 听说不只是 Paddle 的群,你也加了很多别的群,有没有比较有意思的群可以分享?
小散师傅: 其实我加的大部分群都是技术群。可能也许,我觉得有意思的大家觉得无聊呢。。。 最近觉得比较好玩的是:dlsys 相关的学习群和我自己的一个每周写博客打卡群(不写就发红包 🥹🥹)。但我觉得每一个有大佬愿意和我交流的群都很有趣,能和大佬们在一起学习成长是我的荣幸,也是我的快乐。我可以在聊天中获取对新事物的理解,我沉迷于此。
编者注✍️:散佬有自己的博客哦 ➡️ https://www.aispacewalk.cn/
你本科毕业于福州大学,给大家分享一下福大的吃喝玩乐攻略吧!在学校时,有没有什么好玩的事情发生?
小散师傅:
食堂对面的水果捞,都很好吃 😋😋,阿姨会很诚实的说水果 🍉 酸还是甜; 湖边很好看,草坪很大,适合躺平; 曾经参加学校管弦乐团 🎺,那是我最快乐的时光之一; 水煮肉片 yyds,没有之一; 曾经有一张神图火遍全网(一只狗望着楼梯下的情侣),没错,就是咱们教学楼拍的; 食堂基本上可以随便吃,很难踩雷(我最爱吃的就是食堂)。 上述谈到的小狗望情侣照片 编者注✍️:下面有小散师傅参与管弦乐团的照片哦~
我了解到:你是物理系出身,当时为什么会选这个专业呢?后来为什么又放弃对物理的学习?
小散师傅:
选物理专业原因:很简单,每个曾经中二的少年 🧒 都想研究宇宙和量子力学(你想掌握力量吗 😈?) 对于放弃物理的学习:因为发现自己笨而且懒,也许做不出什么有价值的东西了,以及发现自己的本心并不在于物理,而物理应该属于本心就在于它的人,只有这样才配得上一直学下去。光是耍小聪明是不可能被物理之神眷顾的。 后来你开始学经济,然后才转向深度学习。是什么让你开始学经济,后来又是怎么喜欢上深度学习的呢?
小散师傅: 学经济是因为:看到了徐高老师的《宏观经济二十五讲》。他的讲课中有一张图让我很是触动且惭愧(我每次想偷懒就翻出来看看👀),我觉得让他们(下方图片中的人)过得更好是我想做的事情。但后来,做了一些经济学相关的事(研究金融危机和大衰退/做经济学实证研究)以及听到了老师说的一句话:“写是一回事,采纳又是一回事”,我就发现:只有能有实际用途和影响力的东西才是重要的。还记得《宏观经济学二十五讲:中国视角》中经典的一句话,凯恩斯说:“从长远看,我们都已死去”。所以,人生实属短暂,我们应当在短时间内接触更有为主义的事情,现在就要让他实现。
喜欢上深度学习:它足够强,可以在短期内对人有帮助,仅此而已。
徐高讲课中的图 在转向深度学习的过程中,有没有遇到什么困难?又是如何克服的?
小散师傅: 实际上,与学习物理和数学相比,深度学习稍微没那么抗压,难度大的反而在计算机基础。但总的来说,我一直遵守八个字:“不懂就问、不会就学”。我喜欢向所有比我厉害的人学习,只要朝着目标,随机梯度下降就行了。我没有特别的克服什么困难,那样听起来很痛苦;实际上更多的应该是快乐和珍惜,在 🫂 拥抱每一次难题中尝试进步。
你觉得进入深度学习领域让你感觉到快乐么? 你觉得这一系列的转变对你的职业生涯和个人发展有何影响?
小散师傅: 总的来说我认为还是快乐的!因为他拥有无限的创造力,也有很大的可能永远地改变人类的生产力。我觉得这个转变是我人生中的随机扰动因子,人生是一场锚定自身性格特质与价值观的随机游走,我们猜不到之后会发生什么,只能让命运沿着自己向前发展,也许等之后发生了各种各样的事情, 我就能找到一条看似靠谱理由回答今天的疑问了。不过,从价值观来说,也许没有影响,只是在愿景上的不同实现方式罢了。
你提到选择计算机领域的决定源于对提高生产力的渴望,那么在你看来,深度学习和开源社区是如何实现这一目标的?
小散师傅: 开源社区是深度学习发展的最大加速器之一,而深度学习则是创造力和智力普及化的最大加速器。
你是怎么与飞桨相遇的呢?你个人对飞桨的印象如何呢?
小散师傅: 其实我本来是在 OpenMMLab 社区混的,但是看到 Paddle 社区回复勤一点(没有拉踩!研发大哥确实多一些)以及大佬参与被拉入坑,然后发现了新大陆、接触了很多大佬。非常感谢能和 Paddle 相遇。我对 Paddle 的印象就是:在国内你很难找到一个那么多研发大哥和开源大佬陪你一起卷以及发各种奖励的社区了(甚至有时候周末都会回复你)。很多有趣的方向都可以尝试,和飞桨最好的相处方式就是和它一起变的更强。但很惭愧的是我由于太忙,现在参加的频率变低了,其实很多项目都非常好玩,希望大家有时间的话可以当游戏多多参与。
在开源社区中,您认识了很多开发者或是社区运营者。他们给你留下了什么印象?能具体举例说说么?
小散师傅: 有太多人所以我只能简短说明,有没提到的朋友我先道哥歉,因为太多了。
你在 Paddle 社区中经历过最搞笑的事情是什么?
小散师傅: 某次黑客松第四期 清一色取某人的名字玩梗(咳咳,这里打个谜语)
编者注✍️:黑客松是百度飞桨社区举办的深度学习领域大型编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。
黑客松花花名字梗 你是否有一些特别喜欢的开源项目或者技术?可以分享一下你喜欢的原因吗?
小散师傅: 我最喜欢的技术其实没有特别的哪一个,我都很喜欢,都有它独特的美感,能不能都喜欢❤️! 开源项目的话,那肯定是 Paddle ,当然其他开源项目我也很喜欢(比如 OpenVINO),只要拥有社区和快速答复的研发大哥,那一定就是我爱的社区。
散师傅对开源肯定有自己独特的见解,那么你认为什么样的人才能称得上是一位优秀的开源者?
小散师傅:
能一个人召集一些贡献者; 文能随手撕几百几千行代码,武能独立开设新仓库包括完整的体系架构建设; 熟读几个开源项目源码(至少一个大项目); 熟练 GitHub 操作(独立开设 CI、review PR、审核 issue 等); 写一个漂亮的 README 而不感到烦躁。 你的周末一般时这么度过的?会和朋友出去玩还是宅家呢?
小散师傅: 很显然——宅,主要是每天都觉得自己很菜,还是花时间努力变强吧,向一切大佬们学习。而且,由于我的事情太多,每天几乎都要处理到比较晚,周末也是如此。不过我最开心的事情就是偶尔可以去拍拍照,安慰一下我的艺术脑的创作欲。
编者注✍️:下方 🈶️ 散师傅的摄影作品。散师傅尤其喜欢运用光影!
总结一下你最喜欢的一句话!
小散师傅: 见善从之,闻义则服;见路不走,实事求是;不懂就问,不会就学。
新的一年开始了~散师傅给我们小小总结一下你的 2023 年,展望一下 2024 年怎么样?
小散师傅: 2023 有一些务虚,希望 2024 可以更加务实、专注、静下心,不要偷懒,聚焦于做一些长期主义、有用的事情(比如某个方向能够随手成百上千行),链接更多的有缘人并相互成长。希望自己可以变成更从容的人、能帮助别人的人、更阳光开朗的人、能传递快乐与希望的人。
不过,比起展望自己的 2024,我更希望大家的 2024 都能变得越来越好;人间短暂,希望我们都能走在希望的田野上,无论岁月如何流淌,都能在梦想的道路上互相映照,让生命力在每一处角落绽放。我无比真诚祝愿每一位看过&没看过这篇博客的朋友都能寻找到自己的希翼与幸福。 祝愿每一位人安好。
编者注✍️:这是小散师傅非常非常认真写的祝福,酝酿了很久很久!
三、小散的十八般武艺 小散爱好词云图 绘画篇 🎨 小散绘画 音乐篇 🪕 最上图为小散参加学校管弦乐队照片 下左为小散的小号 下右为小散为乐队设计的标志 > 编者注✍️:小散师傅超级会拉二胡,还会小号🎺呢!!!
摄影篇 📷 小散的摄影作品集1 小散的摄影作品集2 厨艺篇😋 小散厨艺展示集1 小散厨艺展示集2 四、著名大型评论平台——虎扑评论专区 散师傅很活跃,尤其是在开源群里活跃(都是在问问题!好卷~),因此也就结识了很多朋友 👬。这次我们邀请到和小散师傅有着密切联系的大佬们来谈谈他们对于小散师傅的印象。大家快来看看吧 😄~~
zrr师傅 散师傅作为一个非人工智能相关专业的开发者,对各种新技术都充满热情,大部分时间都是靠业余时间自学新技术,虽然平时休息时间非常少,但是依然愿意花时间参与开源活动,并把自己看到的有趣的、有价值的开源项目分享出来,并留下自己的见解。同时散师傅的知识面也非常广,从半导体技术到计算机软件,再到硬件加速和大模型技术都有所涉猎,属于开发者中的佼佼者。
花花 养成系技术大佬,很有开源热情,厦门见到散师傅感觉散师傅是个很好的人,但是感觉散师傅在互联网上要更E一点哈哈哈哈,线下见面好像话不是特别多。
梦柳 散佬一直是我们社区的自学标兵,经常琢磨一些不同领域的技术问题,带着大家一起讨论学习,摇人参加快乐开源,很不错 👍。
卢畅 散师傅是一个对技术非常有热情的大佬,在各大技术群里都很活跃。白天在公司打工,晚上和周末抽空也会研究新东西。他对技术的热情真的很令人钦佩,与他交流让人感受到他在学习新技术时所迸发的喜悦。
涛姐 我是从黑客松 TRT 推理算子中认识散步师傅的,对散步师傅印象比较深的有几个:
【开源社区对比研究】 以 CI 为例的调研,做的清晰明了; 在群里常常和 @engineer1109 同学讨论技术问题; 工作应该是推理方向的,但对性能优化、部署等其他方向也很有兴趣。 军哥 散步师傅很爱学习,也很会学习。你如果翻看他的个人 blog 和 GitHub 主页,会发现他从系统到算法,无所不学。学会后,他就在飞桨社区里做开源,也就是挖坑和填坑,做了很多很出色的工作。当然可能因为学太多了,以致于,还有些坑他挖了,还没填。我记得他做过很精彩的关于 Python 虚拟机的分享,研究过很长时间 torchdynamo,期待以后能在社区里,挖个大坑,并一起填上。今天,还意外发现他竟然自学过绿导师的操作系统课,这门课非常棒,在这里,也推荐给看到这段文字的读者。
wendaxiao 和小散师傅聊天时,我能感觉到他是一个可爱的人。我从来没有见过那么多可爱的表情包(而我,很多沙雕的表情包,和小散形成鲜明对比)!除了可爱,我觉得小散是一个浪漫主义开源人,他有自己的崇高的理想和抱负(无关权财)。我希望他能坚持下去,实现自己的愿望!当然,他这个每天在群里问问题,清各种 ddl 的卷王,我是相信他的实力的! 所以,继续闪闪发光吧,小散! 再提一句:散师傅打字太快了,聊天我根本跟不上节奏!笑死 😆。
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/shun-story.html b/posts/shun-story.html
new file mode 100644
index 0000000..40e50b5
--- /dev/null
+++ b/posts/shun-story.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 【开源江湖闲聊录】社区掌舵人:顺师傅的 Paddle 之旅 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
一、前言 是谁,能让最摸 🐟 的开发者禁不住 PR 的诱惑,疯狂求 review?又是谁,让向来严于待人、宽以律己的 Paddle 开发者忍不住夸夸?接下来,有请我们的大佬——顺师傅 ✨
顺师傅是一名 Paddle 的社区开发者,但在社区里,顺师傅不仅仅是一个称呼,更是一股推动力。他主导的项目 【将 xdoctest 引入飞桨工作流 】 是 Paddle 社区迄今为止最大的开源活动 🎊。该项目规模极其庞大,涉及超过一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同完成。顺师傅的领导力不仅显著提升了 API 示例代码的规范性,还极大地促进了整个开源生态的发展和繁荣 🎉。
而顺师傅本身,作为一位经验丰富的资深开发者,也拥有着深厚的技术背景和广泛的知识储备。我们怀着对他的好奇(膜拜 )🤩,通过文字采访的形式来深入了解顺师傅的故事,以下是我们与顺师傅的采访内容 📄。
二、采访内容 可以介绍一下自己吗?平时有什么兴趣爱好?
顺师傅: 我的 AI Studio 和 GitHub 的账号是 megemini,平时喜欢看看书爬爬山跑跑步~
作为一名技术佬,你的一天是如何度过的呢? 可以分享一下你的日常生活么?
顺师傅: 每天都会做的事情,比如写代码、跑步、看书之外,由于最近需要用到 C++,而上一次用 C++ 都是十多年前的事情了,所以近期看一些 C++ 新特性相关的书和视频教程会比较多 ~
可以简单向大家展示一下你一天的生活作息嘛?
顺师傅: 家里情况比较特殊,没有什么可参考性~ 不过现在不会熬夜写代码了,晚上一般七八点钟也会出去跑跑~
“上一次用 C++ 都是十多年前的事情了”这句话太有年代感了,是在学生时代用的吗?
顺师傅: 嗯,工作之后 Java、Python 用的比较多 ~
你是如何成为 Paddle 社区的开发者的?
顺师傅: 毫不避讳的说,当初是因为 AI Studio 有比较多的免费算力才接触到 Paddle 社区并真正的开始使用 PaddlePaddle 框架,慢慢的后面才接触到黑客松、快乐开源之类的活动 ~
Paddle 社区开发者都称呼你为“顺师傅”,这个称呼是怎么来的?是谁第一个开始这么称呼你的(笑)?
顺师傅: 微信的昵称就是「顺」,好像是涛姐还是 001 开始这么叫的 ... ... 惭愧 ... ...
外界对开发者的固有印象(社恐,直男),你周围的开发者形象是怎样的?你对 Paddle 哪位社区开发者印象最深?
顺师傅: 开发者都比较坦诚,由于平时基本都是跟技术打交道,所以不管是话多也好、话少也罢,交流起来都是比较简单、热心的感觉~001 对于开源的那种热爱对我印象最为深刻~
SigureMo 是 Paddle 社区的资深开发者,由于是第一位社区 commiter 而被大家称为 001。
为什么 001 会给你带来这样深刻的印象?可以分享一下其中的小故事嘛?
顺师傅: 记得当时为了修改示例代码写了一个小工具,本来还只是想发出来试一下,结果好像第二天 001 的 PR 就来了~技术能力和执行力都太强了,惭愧 ... ...
你可以谈谈你对开源社区的理解和认识吗?
顺师傅: 抛开自由、开放不谈,开源项目的参与门槛其实是比较高的,这里主要是针对正规的、规模较大的开源项目、代码类的贡献来说~因此,飞桨能够组织快乐开源、黑客松之类的活动,并且是由中文社区主导,个人感觉是非常有意义的一件事情~
“将 xdoctest 引入飞桨工作流”这个项目是如何诞生的?你可以谈谈这个项目的初衷和目标吗?
顺师傅: 这个项目是第六届中国软件开源创新大赛 Paddle 挑战赛的一个赛题,主要目标是使用 xdoctest 替换掉 CI 流水线中的不怎么好用的示例代码检查工具~
你是如何组织和号召其他社区开发者参与这个项目的?在这个过程中遇到了哪些挑战,又是如何克服的?
顺师傅: 嗯 ... ... 这里应该主要感谢涛姐帮忙摇人吧~~~我所做的只是把事情讲清楚,仅此而已 ~
这个项目涉及到一千多个 API 示例、数十万行代码的修改,你是如何管理和协调这么大规模的项目的?
顺师傅: 飞桨开源社区的参与者能力都很强,所以,只要把事情讲清楚,做什么、怎么做,大家自然会把事情做好~期间,001、涛姐、孙师傅、军哥等等很多人,都帮助一起分析如何把这个事情讲清楚,大家目标一致,水到渠成吧~
这个项目的完成对 Paddle 社区的开源生态有何影响?你认为它在推动开源生态繁荣方面的作用体现在哪里?
顺师傅: 提升代码质量、对齐主流 Python 解决方案~能够引导更多 “新人” 参与到开源项目中来~
在你看来,这个项目的最大贡献是什么?为什么?
顺师傅: 丢掉历史包袱,以后大家都是在统一的 Python 标准下参与贡献,未来的技术选择灵活性都大很多~
回顾这个项目,有哪些时刻让你印象深刻?为什么?
顺师傅: 印象最深刻的是当时 RFC 讨论的时候~参与之前本来是抱着试一试、捡漏的心态来的,结果 RFC 一番讨论下来,有种骑虎难下的感觉 ... ... 另外,在发起示例代码修改这个快乐开源活动之后,看到能有这么多开发者参与进来,并且最终把这个项目做了下来,飞桨开源社区号召力之大,属实给了我一次小小的震撼~
对于未来,你对 Paddle 社区有哪些期待和建议?
顺师傅: 希望能够引导更多中文社区的开发者参与进来,能够有更多在校的学生参与进来~另外,提一点小小的建议,虽然已经参与飞桨开源社区快一年了,但是,仍然对 Paddle 本身的框架技术路线、技术规划以及一些细节考量非常模糊,希望能有这方面较为系统的文档、视频教程吧~
作为一名经验丰富的老开发,对于想要参与开源社区,特别是 Paddle 社区的年轻人,你有什么建议或者寄语?
顺师傅: 只有让更多年轻的开发者不断接过手中的桨,才能将开源社区一直行驶下去,直至星辰大海~
三、“五星评论家麦克阿瑟”专区 我们也邀请了一些和顺师傅很熟悉的、有过合作经历的朋友们,贡献一下和顺师傅相关的故事,或者他们对顺师傅的评价~以下均为真心话,请放心看!
就 Xdoctest 这个任务而言,最开始其实我自己都是没有多少信心的,毕竟是整个框架级别的,光是任务量想想就头疼,而且历史遗留问题特别多,怎么想都做不来吧?当初想着在 RFC 阶段就尽可能抛出我已知的各种坑,让开发者知难而退,这样我也能省心些,要是啥也不懂的我也带不动。
但是顺师傅的出现打破了我的摸鱼计划,顺师傅上千行的 RFC 调研地比我了解的还清楚,对于我提出的各种「劝退」问题也逐一回复了合理的解决方案,这时候我突然觉得,也许真的能成?
RFC 合入后顺师傅有条不紊地推进着整个任务,每一次遇到疑难问题时,顺师傅总能选出合适的解决方案。比如 Paddle Tensor 打印时候 Place 不对齐的问题、输出精度问题、运行环境隔离问题等等,这些都是 Xdoctest 本身存在的诸多问题,经过顺师傅的调整和优化,Xdoctest 已经基本能够完美适配我们 Paddle 了。
此外大家可能比较熟悉顺师傅发放的两个开源任务,也是整个任务耗时最久的部分,顺师傅在开源任务中从开发者转变为了 reviewer,帮助我们 review 了很大一部分的 PR,并且 review 地十分细致且专业。
然后就如大家所见到的,真的成了。
顺师傅太强了~期待下次合作~
本任务难点在于工程量大、历史包袱重,感谢顺师傅带着所有队员(24 位)用强大的耐心、细心完成了这一旷日持久的推进,你们的工匠精神值得全体同学学习!众人拾柴火焰高,感谢项目的所有参与的同学!
编者注✍️: 涛姐的话太官方了,所以我挑了句重点,希望涛姐能原谅我 🤪
有幸通过软件开源创新大赛,结识了顺师傅,他的大赛课题是将 xdoctest 引入到飞桨框架工作流中,为了提升效率,减少错误,还不辞辛苦做了一个简单的转换工具 convert_doctest,极大的节省了修改的工作量,减少了出错成本。
此任务工作量巨大,而且很多 API 历史遗留问题繁杂,顺师傅在工作中展现出的极高的职业素养和敬业精神令我们为之侧目。他对待每一个细节都非常用心,力求做到尽善尽美。在面对复杂的问题时,他总是能够迅速找到解决办法,充分体现了他的专业能力和经验。
此外,顺师傅还具有很强的团队协作能力,他乐于与大家分享经验和技巧,共同提高整个团队的工作效率。在工作中,他总是能够主动承担责任,为团队的发展贡献自己的力量。
顺师傅好强,带带弟弟 顺师傅的分析能力和组织能力都超强
在参与顺师傅的项目过程中,我甚至感觉顺师傅像我的 mentor,因为从他身上切切实实学到了很多东西,比如问题的拆解、项目的组织、技术的交流等...
尤其是看到顺师傅逻辑非常清晰的 RFC 文档后,仅从文档写作方面都让我受益匪浅(因为文档的编写需要非常多的逻辑推理和思考,而像顺师傅一样把事情讲清楚的研发,真的不多,大家感兴趣也可以去看看)功利地说,顺师傅对我的职业发展有非常大的提升,希望顺师傅能够继续加油,影响更多人!
四、结尾 在探索顺师傅的旅程中,我们不仅发现了一个技术上的资深开发者,也见证了一个开源社区领路人的成长和影响力。他的故事和成就展示了开源社区不仅是技术的聚集地,更是所有开发者开源热情的熔炉 🔥。
期待顺师傅在未来的旅程中继续发光发热,为 Paddle 或是其他开源社区带来更多的创新和启示 💡。
最后,应顺师傅要求,就不附照片了,以一棵柳树作为结尾 🌲
彩蛋 🥚 往期 blog 有顺师傅真容哦~大家可以去探索一下!
+
+
+
+
\ No newline at end of file
diff --git a/posts/starter-camp.html b/posts/starter-camp.html
new file mode 100644
index 0000000..30dc832
--- /dev/null
+++ b/posts/starter-camp.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 新征程 ⛵️ |飞桨「启航计划」集训营圆满落幕 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 在 2023 年的 11 月 14 日,飞桨开源社区开启了一个新项目(新坑 )—— 启航计划集训营 。经过为期两个月紧张而充实的集训后,启航计划集训营于 1 月 30 日 正式圆满完成所有集训计划。在集训期间,大家出色地完成了三项热身打卡任务,并且有 19 位营员合入了超过 110 个 PR。衷心感谢各位营员的积极参与和卓越贡献!在这里,也向开源社区的各位 “汇报” 一下活动情况~
01 - 启航计划是什么? 「启航计划」 是飞桨社区发起的远程代码集训项目 ,也是「护航计划 」的前置活动。我们以开展为期 2 个月集训营的形式,鼓励开发者积极参与开发 2 个方向的快乐开源任务 ,以此提升自己的代码实践能力,与社区共同成长 💪。
基础方向 :Paddle 核心框架 + Paddle CV 套件的快乐开源任务,将有机会参与社区里最轻松愉快的开源开发活动。大模型方向 :参与 PaddleMIX 跨模态大模型套件的快乐开源任务,将有机会接触社区里最前沿的大模型应用开发与工具建设。活动详情见 Issue: #58497
与护航计划的区别? 不限定开发者背景,企业和学生开发者均可参与。 不进行面试,直接进行简历筛选 。 集训内容为完成 【快乐开源任务】 ,合入 1 个 PR 即满足结营条件,相对轻松。 提供高质量集训课程 ,并以 PR review 交流的形式进行沟通,而非导师一对一带教的形式。 时间周期更短(2 个月),门槛相对更低。 参与者需要做什么? 1. 自选任务,并投递简历报名,通过筛选后即可入营。集训营持续 2 个月,上限 30 人 共有 36 名候选人参与报名并投递简历。内部筛选后,最终通过 29 位学员。 入选学员中,22 名学生(电子科大、西交、杭电、浙大、清华……)、7 名企业开发者。 入选学员中,13 名 PFCC 成员,16 名新人。 入选营员:@NKNaN 、@shiofjsaio 、@YangWulve 、@Hhankyangg 、@sanbuphy 、@Atlantisming 、@GreatV 、@Tsaiyue 、@Kaedeharai 、@wyyang23 、@jiongjiongli 、@rhmaaa 、@cocoshe 、@zbt78 、@YibinLiu666 、@Turingg 、@ooooo-create 、@ccsuzzh 、@zade23 、@challengewly 、@zoey333 、@unicornshell 、@storm-ice 、@YinKeYu 、@Olive-2019 、@fsczz 、@jiangziyan-693 、@isLinXu 、@jingsongliujing
2. 按兴趣参与集训课程(一周一次)并按时提交双周周报 以实际开发为导向,每周开展一次课程,总计安排 6 次课程。 营员每双周提交一次周报,追踪集训进展和计划,总计提交 4 期双周报。 课程以腾讯会议形式开展 周报截图 3. 完成 3 个打卡任务,并至少合入 1 个快乐开源 PR 打卡任务一:修改飞桨文档。25 人完成 打卡任务二:Paddle 本地编译。13 人完成 打卡任务三:跑通 SD 训练推理。15 人完成 热身任务打卡情况(部分) 4. 结营期间,可自愿申请一、二、三等奖,并参加答辩 结营考核详情见 Issue:#123
答辩现场 飞桨官方提供什么? 1. 开发导向的每周课程 由飞桨研发和 PM 根据营员的诉求和实际开发情况,来提供每周的课程。 课程安排 2. 周报管理 助教负责对每双周的周报进行管理,确保提交周报的数量和质量。 其中一期周报提及截图 3. 技术答疑 在微信群以及课程中,飞桨研发会针对营员的疑惑进行一一解答。 同时,会有热心、能力强的营员解答别人的问题。 4. 活动运营支持 PM 和助教会对活动的各个环节提供支持,保障整体活动的顺利进行。 整体活动节奏 5. 成绩评估 PM 和助教会根据结营要求,在结营期间对每位学员进行评估,判断是否满足结营条件。 针对一、二、三等奖的答辩,会邀请相应方向的研发导师进行评估。同时,这也是进入护航计划的绝佳机会 ,因为研发导师会有充足的时间来了解你~ 02 - 活动成果 数字上的成果 共有 19 位营员合入了超过 110 个快乐开源 PR。 社区新加入 11 名 contributor。 15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。@cocoshe 在开发过程中沉淀 1 篇《 PHI 算子库 kernel 注册全流程源码阅读》 。数字背后的情况 共有 19 位营员合入了超过 110 个快乐开源 PR。 完成 80+ 文档、15+ 新 IR 适配、15+ 静态图推全、 5+ cmake 治理、 5+ 复数算子等等题目,文档相关任务约占总体完成任务的一半左右.
社区新加入 11 名 contributor。 其中 7 名 contributor 只合入了一个文档相关 PR,活动后续缺少延续性。
15 名营员成功通过考核、顺利结营,2 名优秀营员入选护航计划。考核通过的营员中,有 10 名是原 PFCC 成员,纯新人通过率不高(31%),猜测是启航计划的活动缺乏引导。
03 - 新的尝试——Docs 偶像女团(精品小团) 是什么? 自愿参与文档开发、维护的社区化小团体,氛围活跃,开发意愿很积极。
由谁组成? 3 名大二女生(2 名启航计划学员 @Turingg @Kaedeharai ,1 名社区开发者@entired ),主要负责开发和维护。 1 名热心社区开发者(O 师傅 ,大三),负责日常手把手指导 3 名女生。 2 名飞桨内部同学,负责维持团体运转、答疑解惑。 为什么组成这个团体? 集训期间,2 位女生开发意愿比较强烈,但对具体做什么事情感到迷茫,因此孙师傅就把她们拉入(骗进 )了 docs 小组。
运转机制? 每周一次例会 ,由 3 名女生轮流主持,主要通过每周开发进度、布置新任务,所有人必须参会。每周一次会议纪要 ,由会议主持负责写会议内容和 Todo。如流群日常沟通交流 。
详细资料见:community/docs_group
+
+
+
+
\ No newline at end of file
diff --git a/posts/suzhou-kaifangyuanzi.html b/posts/suzhou-kaifangyuanzi.html
new file mode 100644
index 0000000..565b477
--- /dev/null
+++ b/posts/suzhou-kaifangyuanzi.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ PaddleOCR 算法模型挑战赛圆满落幕 & 杭州开发者线下 Meetup | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 2024 年 4 月 12 日,开放原子开源大赛 PaddleOCR 算法模型挑战赛 决赛路演在苏州工业园区人工智能产业园 G1 栋 3 楼会议中心顺利举行,并取得圆满成功!🎉价值 15 万元的大奖花落谁家?选手们的技术方案有多硬核?快来看看吧~
BTW,在 4 月 14 日 我们飞桨开源社区的工作人员也顺路来到杭州,在西子湖畔的一家餐厅里举办了杭州开发者线下 Meetup,和众多熟悉又陌生的“网友”成功面基 😊。
大赛背景 开放原子开源基金会 是致力于推动全球开源事业 发展的非营利机构。其目标是搭建面向全球开源领域的前沿技术竞争、优秀人才选拔创新成果展示、商业转化引导和对接交流合作平台,广泛传播开源文化、普及开源知识、推广开源项目、提升开源技能,为推进全球开源生态繁荣 和可持续发展 提供动力。
百度飞桨开源社区与开放原子开源基金会的目标和愿景有高度的重合,因此自然而然地达成了合作办赛的意向。继 2023 年百度飞桨联合开放原子共建了「飞桨 PaddlePaddle 开源贡献挑战赛」后(大赛回顾请看 这里 ),这次飞桨团队再度受邀,发布了「PaddleOCR 算法模型挑战赛」。PaddleOCR 算法模型挑战赛包括两道赛题,分别是 OCR 端到端识别任务与通用表格识别任务,要求选手在 PaddleOCR 的基线模型之上,尽可能提升模型精度,同时保证模型的推理速度与基线模型相当(降速不超过 10%)。
赛题有一定难度,但同时奖金也颇为丰厚🤩:
赛题一:OCR 端到端识别任务 一等奖:1 支队伍,每支队伍奖金 15 万元 二等奖:1 支队伍,每支队伍奖金 4 万元 三等奖:1 支队伍,每支队伍奖金 1 万元 开源贡献奖:7 支队伍,荣誉证书 赛题二:通用表格识别任务 一等奖:1 支队伍,每支队伍奖金 7 万元 二等奖:1 支队伍,每支队伍奖金 2 万元 三等奖:1 支队伍,每支队伍奖金 1 万元 开源贡献奖:7 支队伍,荣誉证书 赛程回顾 大赛从 1 月 15 日上线,启动报名。经过两个半月的紧张打榜后,于 3 月 31 日正式封榜。经过代码审查与线上初审后,最终在 4 月 12 日在美丽的苏州工业园区举行了决赛路演。
在打榜过程中,选手们在官方交流群中积极讨论,互帮互助,还不忘给官方提需求😅。
热心选手树先生,无私贡献了针对赛题二快速测试模型精度的脚本,得到了群友们的一致好评!开源精神拉满了!😉
赛题一 B 榜阶段,选手反馈能不能把报错信息展示为实际的报错信息,而不是简单的"没有生成 result.txt",这样才好定位并解决问题。飞桨运营同学快速评估并作出反应,认为这是一个很合理的需求,必须安排!奈何研发人手实在是紧张,直到午夜 1 点多,才完成改动并上线,保证了选手们顺利通关 B 榜。飞桨的研发小姐姐很拼有木有!✊
最终,大赛共报名 211 支团队,总人数达到空前的 671 人。 不过由于赛题本身还是有一定难度,最后 10 支队伍提交了作品,8 支队伍通过了代码审查,5 支队伍入围了决赛答辩。
飞桨官方的模型已经很强了,要在此基础上继续提分,还得保证推理速度不下降,真的很难 。👿 ———— 某个不愿透露姓名的选手
路演现场 孙师傅被我抓去现场当主持人,那叫一个专业!😄
我则有幸抱住军哥(@jzhang533 )和涛姐的大腿,当了一回评审。😎
选手们的答辩也十分精彩!复旦大学的杜永坤和北京交通大学的赵苗苗,分别针对赛题一和赛题二的模型架构进行了多方面的优化,可以说相当硬核。两位也分别摘得两个赛题的一等奖桂冠,实至名归!
令人印象深刻的是,赛题二的「识别先锋」队,是天水师范大学的吴衡老师带领三个本科生来参赛,还都是 AI Studio 的忠实用户🤗。尽管他们的显卡资源并不充裕(据说只有几张消费级显卡),但依然阻止不了他们的参赛热情。在他们的脸上,有一丝羞怯,也洋溢着激动和开心。我从他们身上看到了开源的魅力。
路演结束,大合照来一张。
获奖情况 经过紧张的路演和现场打分,最终决出了我们两个赛题的获奖队伍,如下表所示。
恭喜所有的获奖队伍!🎉🎉🎉你们都是开源创新之路上的佼佼者!🚀🚀🚀
PaddleOCR 开源共建研讨会 路演结束之后,距离午饭还有一段时间。我们便借着这个机会,邀请了参赛选手们举行了一场主题为「PaddleOCR 开源共建」的研讨会。
军哥表达了希望能够以 PaddleOCR 作为试点项目,启动飞桨开源项目社区化治理的想法。纵观国际上优秀的开源项目,都是由社区驱动的,而国内的很多开源项目,却往往只由某一家公司主导,这样其实不利于开源项目的可持续发展。大家纷纷表示了认同,但也提出了国内拿来主义盛行、开发者生存压力大、做开源只能用爱发电 等现实的问题。
虽然在国内开源项目的纯社区化治理道阻且艰,但飞桨团队还是要积极推动尝试。如果做成了,将是非常有意义的一件事。👊
大家讨论的太入神,都忘记拍照留念了 😭
杭州开发者线下 Meetu 剪影 在 4 月 14 日,我们也邀请了 14 位(其中🐦了一位)飞桨开源社区的开发者,在西湖虎跑胖的餐厅里面基交友~军哥给每人都准备了一份神秘礼品哦 🎁。
以下为痛失真名现场
+
+
+
+
\ No newline at end of file
diff --git a/posts/tao-story.html b/posts/tao-story.html
new file mode 100644
index 0000000..7424718
--- /dev/null
+++ b/posts/tao-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】飞桨的见证者:涛姐的风风雨雨传奇之旅 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 嘿,你知道飞桨社区里的 DDL 战士是谁么?嘿,你知道大家心中的 Paddle 社区妈妈是谁么?那你又知道谁是(仓库管理员 )飞桨仓库的实际控制人?谁是飞桨仓库的守护者?谁是飞桨从闭源到开源的见证者?是的,本期要采访的就是我们 Paddle 的资深研发女神——涛姐!
一、采访内容 涛姐,给大家介绍一下自己吧!
涛姐: 大家好,我是骆涛😊(@luotao1 )!现在是百度飞桨的资深研发工程师~同时,也是长期的开源贡献者!我博士毕业于中国科学技术大学高性能计算方向,师从陈国良院士,在深度学习领域有 20 多项专利。我参与训练/推理/高性能/工程效率等多个方向,目前致力于活跃飞桨框架开源社区。💗💗💗
涛姐是什么时候入职 Paddle 的?是以哪种方式呢?你觉得当时获得这份工作最大的竞争力是什么?
涛姐: 😲大概八年前,我入职了百度。当时我是校招进的 Paddle 团队,但我投的不是校招岗位,而是社招岗位。因为之前我给阿里投了校招,阿里也给我发了录取的邮件。但后来他们告诉我说是外包员工把邮件发错了,我也很无语。等我后面知道这个事情的时候,校招已经快结束了,那剩下的就只有社招这一个选择了。
当时 Paddle 还在百度深度学习研究院(IDL)下,我觉得肯定是进不了的。但因为没有找到合适的工作,也管不了这么多就投了,结果第二天就收到 offer。
我觉得最大的竞争力可能是在英特尔做过 Caffe 上的一些优化,所以能力还是比较匹配的。当时,我是带着我的 PPT 去面试(在英特尔有一个比较好的习惯,就是会整理之前所做的工作,因为外企都非常注重工作内容的呈现,所以当时这些 PPT 都是英特尔期间整理的已有素材)。但对面试官来说,拿着 PPT 去讲这些内容来面试,还是比较新颖的。
还有一个 tip 是:我的简历上没有提及性别,也没有附上照片,所以面试官可能一开始以为我是男生,否则我觉得可能一面就进不了。然后面试的时候,运气比较好,代码题目都是之前复习过的,整体的表现也比较好。此外,还有一点,是我听说面试官在前面的面试里要求比较高,面了好多人都没有满意的。面了 30 多个后,再不招一个,那 Head Count 可能就没了,而我当时确实也投的比较晚。所以在各种机缘巧合下就录取了。
总的来说,最大的竞争力我觉得第一是博士的身份;第二是已经在英特尔实习,有一些经验;第三是自己的工作有一个比较好的展现,呈现的形式还是很有吸引力的。
可以给我们谈谈 Paddle 的发展史么?听说 Paddle 最初是是闭源的,为什么后来选择开源?
涛姐: 最初,Paddle 确实是闭源的。但是由于 IDL 研究院非常前沿,当时也请了吴恩达过来,而且还有很多研究员都是在美国。本身国外开源的氛围又很浓厚,就有了开源的想法💡。当时主流的开源深度学习框架有 Caffe、TensorFlow,至于 PyTorch 都还没有发展起来。如果 Paddle 不开源,实际上是没办法和国外主流的深度学习框架竞争。
此外,当时公司内部还有很多同类产品,比如 Lego(乐高)、Anakin 等等。这些产品当时都服务于公司内部的业务线,而 Paddle 在当时是一个比较新的东西,实际在公司内业务线上的使用非常有限。后来还制定了 1 到 2 年的计划,就是要把公司内所有产品线都用 Paddle 跑起来。如果 Paddle 不开源,其实在公司内是死路一条。正是因为 Paddle 选择了开源这一路线,之后吞并了 Lego 和 Anakin,逐渐壮大,我认为这是开源最大的一个魅力。同时开源也是一个战略性的决策,如果 Paddle 不开源,在公司内都无法生存,更别提在国际上立足。
编者注✍️: 军哥曾经是 Lego 的初创研发成员之一哦~
18 年 Paddle 团建 18 年 10 月发布 1.0 版本 18 年 Paddle 团建 给我们讲讲你的求学之路吧!
涛姐: 我本科、硕士和博士都是在中科大,博二时去了中科院北京软件所学习,可以说是一个联合培养计划吧!之后又去了英特尔实习,这些大致就是我的学习经历~一路走来,真的太不容易了,特别是读博期间非常受挫,心理压力巨大!读完博士的时候感觉整个人脱胎换骨了。
涛姐大一中科大西洋乐团新年音乐会 涛姐大一冬天 你刚刚谈到读博于你而言简直脱胎换骨,当时为什么选择读博?读博对于你来说获得了什么?
涛姐: 当时选择读博,是因为本科毕业的时候没有考虑过就业。而且虽然当时成绩比较好,但觉得自己除了成绩好,其他什么都不会,就想还是得深造(是真实的情况,不是凡尔赛 )。此外,我们学校当时并没有提供保研这个选项,只能考研或者保送直博升学,所以我最后选择了直博。
当时我是可以自己选择直博校外还是本校,可能班主任也比较喜欢我,他就强力推荐我留在学校读博。其实我当时也想去国防科大呀、复旦呀,但是都被班主任无情拒绝了。他给我分析了一些利弊,后面给我找的导师也非常好,是一位院士。这也为我后面能去软件所或者英特尔这些大的平台提供了一个非常有力的保障。所以,我在这里也非常感谢我的班主任,他真的是一个非常好的老师!
读博给我带来了很多收获!对于我的职业生涯来说,如果我没有读博士,我肯定进不了百度或者英特尔,这一点毫无疑问。对学业方面来说,读博极大锻炼了我自己,也包括提高了心理承受能力、抗压能力。还有一点就是读博扩大了我的学术圈子,如果我没有继续深造,我将无法接触到如此多优秀的同学和高 level 的大佬。此外,博士身份在之后的许多场景中都还是非常有用的!
编者注✍️:Family who konws🐮!涛姐说自己大学不是特别用功,没有搞绩点,但是成绩就是 top 10!是谁羡慕了我不说~
涛姐15年博士毕业 读博有遇到什么困难吗?博二时去到了北京软件所进一步学习培养,当时为什么去争取这个机会?
涛姐: 刚开始读博的时候非常迷茫 。因为本科的时候就没有进实验室,当时年纪小还没有这个意识,也没有现在这样环境氛围。而且本科期间成绩也还行,所以那时除了读书就是看韩剧、台剧、综艺、小说。像之前说的那样,本科毕业的时候就处于“除了成绩好,其他什么都不会”的状态。但会考试,不代表在计算机方面的能力强,因为考一个好成绩很容易,我这样说有点凡尔赛,但确实就是这样的。
编者注✍️:涛姐特别喜欢在学校图书馆看小说,像是沧月、新武侠、古典武侠、卫斯理系列·····
但当读博进了实验室之后,就会发现差距很大。因为读博需要做研究发论文,这和本科期间单纯的学习考试是存在很大的 gap。而且导师又坚信学生应该自我驱动型的(因为老板是院士,他觉得招进这么好一个学生,应该能够自己解决自己的问题),我完全不知道要做什么,代码也调不出来,就一下子陷入一个很迷茫的状态,和之前上课的阶段完全不一样。所以那个阶段其实是蛮难熬的,包括学校里很多老师也不会带你做实验,不会像咱们护航计划 的研发同学那样手把手带。代码都要由自己调试,而遇到问题时也不知道该向谁求助,这种情况让人会感到非常痛苦。
所以当时就争取了去北京的联合培养计划。去了北京之后,可能因为实验室风格和之前不一样,发现确实还是要有年轻老师或项目带着会好一点~
去英特尔实习是在什么时候呢?你在那段时间收获了什么?你觉得它与百度有什么不一样?
涛姐: 嗯~我在英特尔实习是在博士的最后两年(博士第一年在学校念书,接下来的两年中科院软件所联合培养,第四年和第五年在英特尔实习),这两年的经历对我的个人成长产生了巨大的影响。
收获的是真实的研究院实习经历(当时比较好的研究院就是 MSRA 和英特尔中国研究院这两个)。能明显感觉到企业和学校的风格是完全不一样的,接触的东西也很前沿,组里氛围也很好。而且研究院的指导和学校相比,整体的科研 sense 会拔高很多。比如当时在英特尔期间,我接触了第一代深度学习框架 Caffe,并在其中进行了一些工作。尽管我没有做很多东西,但当时写的论文(博士学位论文)因为抓住到 Caffe 这个热点,而且英特尔做的也比较好,因此论文引用量到现在已经超过 7000 次,相比起来其他很多人的论文都没人看。
而且这段研究院经历,也帮助我获得了百度深度学习研究院(IDL)的 offer。这个 offer 在当时是挺难拿的,竞争很激烈,我自己也没想到能拿到。这也让我意识到平台的重要性。
还有一点是在英特尔实习也开拓了我的眼界。像隔壁组是在给 Spark repo 做贡献,当时负责带队的老师后来成了英特尔研究院的院长,不过我的指导老师后来也成了院长,他们都是非常厉害的人。此外,英特尔老师在就业指导上面,会看的比较远(相对于学校老师)。当时我有两个 offer:一个是 IBM 的,一个是百度。IBM 给的还比百度多,但英特尔的老师就建议我去百度锻炼和提升一下自己。
英特尔和百度不一样的地方就和网上说的一样:英特尔比较轻松,准时六点就能下班。一周实习工作其实我两到三天就能完成,然后剩下一半的时间都是在写我的论文。但对百度来说,即使是百度深度学习研究院(IDL),工作也会更偏向工程和产品落地,所以很忙。
哦!再补充一下:就是,英特尔里面的女性研究员真的非常多。和百度不同,百度这边男性工程师会占大半部分!
涛姐注✍️:在英特尔实习那两年是我最开心的时候。在外面租着房子,自己又有钱下班又早。虽然都是月光,但真的很开心😄!一下班,就可以自己追韩剧,然后做做瑜伽,自己美美容,买买衣服,逛逛淘宝~
涛姐有没有一直在坚持的兴趣爱好?大学时的爱好有哪些呢?
涛姐: 以前的空闲时间我喜欢练瑜伽,但现在所有的空闲时间都在带娃!瑜伽是在大学时期就开始坚持的,当时是有参加一些社团,但并没有特别深入。后来在英特尔实习有钱了,就开始外面报班,参加了一些瑜伽课。感觉练瑜伽相对容易,而且让人心情平和!
但现在我已经没有坚持了,主要原因是我几乎没有自己的闲暇时间。不加班的时候,下班后我得等娃睡觉了之后才能刷手机。而有时候还需要开会,更没有自己的时间。因为互联网工作不是传统的上下班制度,而是根据绩效和产出来衡量的。现在每天的生活节奏通常是:起床、上班、下班、带娃、睡觉,这样一个不断循环的过程。
编者注✍️:涛姐也有和老公一起练双人瑜伽哦,大家可以去涛姐朋友圈看👀照片,哈哈哈~
涛姐练瑜伽 学生时代你有参加过开源吗?向哪些项目/组织提交过 PR 呢?
涛姐: 学生时代只向 Caffe 提交过 PR。那个时候是在英特尔实习,然后实习的题目也和我的论文比较相关:需要做一个 CPU 多线程加速的优化。所以就给 Caffe 提了一个 PR。但那个 PR 没有被合入,因为有一些工程上的问题会影响 Caffe 的整体。提 PR 和发论文不太一样,发论文只要性能数据达标了就可以,但是 PR 合入到主干中还要考虑到很多其他的问题。
作为过来人,涛姐在职场上有什么建议给大家?
涛姐: 在学生时代,你就要有自己的职业生涯规划。从学生到职场会有一个心理转变的过程。特别像职场,有时候会比较复杂。经常会出现:人家晋升你没有晋升或者人家年终奖比你高(反正公司内是不允许大家讨论薪酬的)。但是谁晋升谁没晋升这些大家都知道,所以这时候你就要有:“他强任他强,清风拂山岗”的心态,你一定不要纠结于经理保谁没保谁。当你做到大家公认比较好的时候,你肯定能升职。
然后职场里还有一个很重要的点就是:你要坚持!大家有时候 2 到 3 年会想跳槽或者每 5 年想跳槽,这个时候得看你自己的想法。我自己在百度呆了八年,没有跳槽,很大一个原因是我现在做的事情,像是开源这一类的是我比较喜欢的,我对这类事比较有热情,现在对自己的工作状态也比较满意。还有我们家那位就是跳来跳去的,之后他就劝我:还是别跳!
编者注✍️:涛姐是校园恋爱哦~老公是以前一个实验室的!🤭
涛姐参加活动时照片 在恋爱上有什么建议给大家?
涛姐: 学校里还是相对比较单纯一点,所以如果可以,最好在学校解决恋爱问题。工作之后,你也没有心情去解决个人问题。事情很多(你进入职场之后,你马上面临的是买房子、经济压力、赡养老人等等事情,你要变成一个成年人负担起一个家庭的责任。所以大家趁年轻多多拼搏一下,你要是有一些经济基础的话,那相对会好一点!),职场的压力是远比学校的压力更大。而且你一年一年拖下去之后,优秀的师兄师姐们的数量是会减少的!所以要稍稍早一点!然后一定要找长得好看的,这样生出来的娃才好看!我当时的要求就是:学历要跟我同等,长得帅,然后还得是党员。其他我没有要求,再挑就挑不出来了。找对象,只能挑几个最重要的点,你要搞清楚自己最想要的是什么?你不能啥都要,那是不可能的!
编者注✍️:涛姐人送外号「百度红娘」~
涛姐 7 个月的孕妇照 作为女性研发,你在工作上有没有遇到什么难题?与男性研发相比,你觉得有什么区别?
涛姐: 我觉得和男生没什么区别。现在 Paddle 里的一些女性研发都非常厉害的,比如和我同一期加入 Paddle 的青青(@qingqing01 )、益群(@Xreki )一起工作已经八年了,以及时间更久的志华姐、渝娟姐(虽然离职了),包括新进来的雅美(@liym27 )、张婷(@zhangting2020 ),她们都是非常出色!你能看到的、存活到现在的 Paddle 研发都非常厉害!(因为不厉害的早就被淘汰了 )而且包括我们的两个副总裁也都是女生,能坐到这么高的位置,很大程度能说明能力很强!
所以,女孩子们一定要有自信,并且多努力学习!不要觉得是男生才能主导,要相信自己也能做成!同时,内心强大一点,知道自己的定位,要明白自己擅长什么,在工作中去充分的扬长避短!
可能会有一个比较大的区别就是生娃。生育是女性需要面临的一个无法避免的问题,会对事业产生不同程度的影响,所以女性可能要在生娃之前多多奋斗几年。不过这个问题对于还是学生的女生来说,考虑的还有点早啦~
另外,女生学计算机的话,热爱还是很重要的。只有热爱它,才能坚持下来~在我们的开源社区中,像孙师傅带的三个「Docs 偶像女团 」的女生,我觉得是能从她们那儿看到我以前的影子!虽然她们做的事情并不难,但展现出的热爱,是非常可贵的。每次这个精品小团开会,我看她们跟孙师傅交流的时候,都是闪闪发光的。
编者注✍️:精品小团体是飞桨启航计划的一次尝试,是招募有意愿的营员参与到某⼀具体⽅向的⼩团体。未来会推广该模式,所以大家多多参与哦!
15 年 Team buiding 二、涛姐有话说 涛姐 Paddle 这个平台其实很不错。说实话,在国内 Paddle 已经站在了顶尖的位置。在我的学生时代,国内是没有这样丰富的开源机会,当时开源活动只有像 Caffe 和 Intel 在办,但这些都是国外的。你要考虑很多:如何参加活动?活动符不符合你的能力?改的代码在不在点上?提了 PR 之后,别人会不会像我们 Paddle 现在这样,每个 PR 给你快速的安排研发 review?而且我们还会催大家,也给大家发礼品。这些在国外的开源开源社区几乎都是没有的。
在当时,想要合入一个 PR 可难了。如果没有认识的人,PR 合进去的难度非常高,因为代码改不到他们的点上,而且也不了解他们的活动和进展,也没有类似于我们现在的 PFCC 例会和社区做分享。
我现在觉得,当时能靠着没合进去的 PR 进入了百度,现在大家也能做的更好。所以鼓励大家多多参加开源活动~不仅获得好的实习项目,还可以拓宽眼界!
此外,如果一些同学没有什么项目,又想找到好的实习机会,其实现在可以在参与一些开源社区的任务。因为找到第一份工作其实是最难的,你只有找到第一份工作,后面慢慢的才会越来越顺利。但这确实很难!因为名额很珍贵,所以面试考核就是一种很公式、很官方的流程。
如果靠着自己在学校期间做的项目,面试阶段是讲不清楚的。即使讲清楚,面试官也会一带而过。因为这些都是网上查不到的,所以面试最终只能考代码。但像提 PR 或者发论文,面试官都能一眼看明白你做的工作,并且在网上都能查到。所以如果像参加护航计划 ,那可能就是立马拿到工作机会,我们有三个做过护航计划的同学都是立刻得到工作机会,面试流程只是走一下。
最后送大家一句话:世界会更加广阔,前途更加无限。
编者注✍️:涛姐在上面提到没合入的 PR 是关于在 Caffe 上做 CPU 多线程优化~
三、快乐晒娃时刻 涛姐童年照 涛姐两岁半的可爱小宝贝
涛姐全家福照片 最后再来一张宝贝的可爱九宫格😊~
涛姐宝贝九宫格 编者注✍️:感谢郑必城(@Zheng-Bicheng )、散步(@sanbuphy )、张一乔(@Liyulingyue )、川川(@gouzil )四位师傅在引言为涛姐想的 title~顺序对应哦!
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/type-hints-project.html b/posts/type-hints-project.html
new file mode 100644
index 0000000..53cd3d8
--- /dev/null
+++ b/posts/type-hints-project.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+ 项目收官 | 为 Paddle 框架 API 添加类型提示(Type Hints) | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 【为 Paddle 框架 API 添加类型提示(Type Hints)】的项目总结。
34 位开发者参与,16 项主任务,337 个子任务,2191 个 API,340+ 个 PR,自 2024 年 4 月起,至 8 月 30 日主体项目完结,近 5 个月 SAN 值归零的夜晚,Type Hints 总归算是有始有终、小有成果,这里就简单回顾与总结一下。
项目介绍 此次项目是第六期飞桨黑客松引入 Fundable Projects 中的一个:为 Paddle 框架 API 添加类型提示(Type Hints) 。
Fundable Projects 本身定位具有一定的挑战性,有兴趣的同学可以移步 【Hackathon 6th】Fundable Projects
Python 在 3.5 版本通过 PEP 484 – Type Hints 正式规范了「类型提示」功能。之后随着相关规范和工具的逐渐完善,类型提示逐渐成为 Python 代码中的标准实践,如今较新的主流库也基本都提供了类型提示。由于 Python 本身类型高度动态化,类型提示的存在可以帮助开发者更快地了解代码的类型信息,提高代码的可读性和可维护性,结合工具还可以提供静态类型检查,在开发阶段就能发现一些潜在的类型错误。Paddle 框架由于历史原因尚未提供类型提示,本项目希望引入尽可能多的对 Paddle 有利的类型提示。
以一段简单的 Python 代码为例:
python def greeting (name):
+ return 'Hello' + name
添加上类型提示之后:
python def greeting (name: str ) -> str :
+ return 'Hello' + name
正如前文所讲,类型提示功能有诸多好处,如:
帮助开发者了解代码类型信息 提高代码的可读性和可维护性 结合工具在开发阶段发现错误 而最直观的反映就是,我们在诸如 VSCode 等 IDE 中,能够获取到接口的类型提示,并进行连续推导了:
IDE 中使用类型提示 项目的 RFC 【Hackathon 6th】为 Paddle 框架 API 添加类型提示(Type Hints) 经过大家讨论之后,将此次项目的目标最终标定为:
正确完成 Paddle 公开 API 的类型标注,但不声明 Paddle 类型标注的完备性。 这里需要单独说明一下「标注的完备性」。类型标注是个循序渐进的过程,Paddle 是个相对较大且复杂的项目,除了公开 API 之外,还存在较多非公开 API 与 C++ 接口,此次项目无法保证完成以上所有接口的类型标注,故此,不做 Paddle 类型标注的完备性说明。或者,换个说法,如果熟悉 Python 的类型标注和相关工具的使用,那么,此次项目不保证完成 Paddle 这个项目本身通过类型工具的检查,但是,需要保证外部项目使用 Paddle 时,能够正确识别、提示与检查 Paddle 所提供的公开 API。
项目中的任务,以任务模块的角度,分解为:
_typing
模块的引入CI 流水线的建设 文档建设 公开 API 的类型标注 具体的执行过程,通过 Tracking Issue 跟踪项目进展,分解为:
第一阶段的前置任务 第二阶段的代码标注主体任务 第三阶段的补充测试 第四阶段的收尾与总结 项目实施 方案总览 Python 官方提出了三种支持类型提示的 包分发方式 :
inline
,行内stubs
,文件third party
,第三方结合 Paddle 项目本身的结构,这里采用 Inline type annotation + Stub files in package 的方案实施类型提示,具体为:
Python 接口,使用 inline
方式标注 非 Python 接口,提供 stub
标注文件,并打包在 Paddle 中 所谓 inline
,是将类型直接标注在源文件的接口定义中,如:
python def log (x, name = None ):
+ ...
直接修改接口代码为:
python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ ...
而有些接口,Paddle 是通过 pybind 或 patch 的方式提供,则需要增加对应的 stub
文件。最基本的,如 Tensor
类,需要提供 tensor.pyi
文件:
生成 tensor.pyi 文件 stub
文件的写法与 Python 代码的写法相同,只是不需要写具体的实现部分。
另外,由于 Python 的类型标注特性一直在不断完善的过程之中,初期的一些特性很难支撑 Paddle 如此体量的项目,因此,我们提出项目实施过程中的一项基本原则:
在不违背 Paddle 最低支持版本 3.8 语法的基础上,尽可能使用新版本 typing 特性
所谓「不违背 Paddle 最低支持版本 3.8 语法」,一个典型的例子是,Python 3.8 版本不能在类型别名中使用 |
代替 UnionType,如:
python from typing_extensions import TypeAlias
+from typing import Union
+t: TypeAlias = Union[ str , int ]
在 Python 3.8 的语法中无法转写为:
python from typing_extensions import TypeAlias
+t: TypeAlias = str | int
但,我们希望「尽可能使用新版本 typing 特性」,因此,通过 PEP 563 – Postponed Evaluation of Annotations ,我们可以在函数签名中使用 Python 3.10 的语法特性,如:
python from __future__ import annotations
+def foo (bar: str | int ) -> None :
+ ...
以上,为本项目实施的总体方案与基本原则,接下来,按照前文所讲的「以任务模块的角度」,简单拆分讲解一下。
_typing
模块的引入 Paddle 中会用到很多公用的标注类型,比如数据布局 NCHW
、NHWC
等。_typing
模块的引入,一方面可以统一规范开发者的标注行为,减少维护成本,另一方面,也可以减少各类书写错误。可以将 _typing
模块的地位与 Python 中的 int
、str
等基础类型等同,由此,整个 Paddle 项目的标注体系可以分为:
三个部分。
类型层级结构 具体到 _typing
模块,其本身作为 Paddle 的一个私有模块放置于 python/paddle
目录下:
_typing 模块 其内部包括基础公共类型(basic.py
)、数据布局(layout.py
)等。
回顾项目整体实施过程中 _typing
模块的建设与使用,最大的收益是规范了一些公共类型的标注行为。比如,NCHW
、NHWC
等这类数据布局,很容易出现书写错误,也确实发现过 Paddle 源码中错误的类型标注问题。再如,Paddle 中的设备类型 CPUPlace
、CUDAPlace
等,与 Place
,实际上没有继承关系,这就需要在众多使用 Place
的地方引入 PlaceLike
类型。
但是,_typing
建设的过程中,也逐渐暴露出一些问题,最主要的有两个:
所谓「粒度控制」是指,很难用统一的标注来划分哪些类型需要归类入 _typing
,哪些则直接使用 Python 的基础类型进行组合。比如,_typing
中的 IntSequence = Sequence[int]
,很多地方都会用到,但,具体到每个接口,也许直接标注 Sequence[int]
会更简单。
对于 _typing
模块缺少单元测试也是一个比较大的遗憾。这就不得不说明一下我们是如何保证项目类型标注的正确性这个问题了。
最理想的方式当然是对每个接口做类型检测的单元测试,但是,由于项目本身的人力与时间投入不允许我们这么做,我们选择通过对接口中的「示例代码」做类型检查这种方式。
python def log (x: Tensor, name: str | None = None ) -> Tensor:
+ r """
+ Calculates the natural log of the given input Tensor, element-wise.
+
+ .. math::
+
+ Out = \ln(x)
+
+ Args:
+ x (Tensor): Input Tensor. Must be one of the following types: int32, int64, float16, bfloat16, float32, float64, complex64, complex128.
+ name (str|None): The default value is None. Normally there is no need for user to set this property. For more information, please refer to :ref:`api_guide_Name`
+
+ Returns:
+ Tensor: The natural log of the input Tensor computed element-wise.
+
+ Examples:
+
+ .. code-block:: python
+
+ >>> import paddle
+
+ >>> x = [[2, 3, 4], [7, 8, 9]]
+ >>> x = paddle.to_tensor(x, dtype='float32')
+ >>> print(paddle.log(x))
+ Tensor(shape=[2, 3], dtype=float32, place=Place(cpu), stop_gradient=True,
+ [[0.69314718, 1.09861231, 1.38629436],
+ [1.94591010, 2.07944155, 2.19722462]])
+ """
也就是上面这段代码中的「Examples」部分。
由于 Paddle 之前对接口的建设都要求书写「示例代码」,其中包括了接口基本的使用方式,那么,我们就可以通过对其进行类型检查,从而保证 Paddle 整体接口的基础类型检查的正确性了。
不过,这样会牵扯出另一个问题:接口依赖。
如果仔细观察上述的示例代码,会发现,其中同时应用到了 paddle.to_tensor
与 paddle.log
两个接口。那么,如果需要保证 paddle.log
这段示例代码检查正确,就需要先把 paddle.to_tensor
这个接口标注正确。类似的依赖问题层出不穷,由于我们使用的工具 mypy
会将没有标注的接口统一识别为 Any
,这就导致,如果 review 不仔细就会放过一些实际上错误的标注问题。为了解决这个问题,一方面,我们在整理项目标注任务的时候,根据优先级进行排序,使相对基础或者简单的接口尽早完成;另一方面,我们单独创建了一个 PR 用于对所有接口做全量检查的监测,也就是说,即使有上述所谓的漏网之鱼,一旦依赖的接口进行了类型标注,不再是 Any
,那么问题则可以在这个 PR 中及时被发现并修正过来。
以上,便是 _typing
模块的引入以及一系列需要在项目主体标注前需要完成的任务。
CI 流水线的建设 前面提到,我们使用 mypy
来保证类型标注的准确性,这就涉及到 CI 流水线的建设问题。
CI 流水线 上图简单描述了 CI 流水线的整体流程:
这里不再详述赘述 CI 流水线的建设过程,主要有两处考量与大家分享:
所谓「性能问题」,如果使用过 mypy
的同学可能深有体会,这东西太慢了。我们在项目中同样遇到了性能问题,Paddle 中 2000+ 个接口,检查一遍需要 2 个多小时。因此,我们使用进程池的方式对接口做并行检查,也将整体检查时间缩减到 10 分钟左右(虽然有同学反馈,内存占用可能有几十个 GB,whatever,反正是在 CI 上做检查,而且也没有崩,就当是啥都没发生吧……)。
并行处理 另外「流程问题」也是需要重点关注的。正如前文所讲,我们需要对接口做全量检查,但是,具体到每个接口的修改,则只能针对当前接口进行检查,否则问题无法收敛。因此,在整体类型标注完成之前,CI 的行为:
默认:不检查类型 [Typing]
的 PR 做增量检查;也就是只检查 PR 中修改的接口[Typing all]
的 PR 做全量检查;也就是检查所有接口由此,可以在容忍一定错误的状态下,逐步推进整体项目的进展。
截止到本文发表为止,CI 已经切换到常规行为:
默认:PR 做增量检查;也就是只检查 PR 中修改的接口 [Typing]
的 PR 做全量检查;也就是检查所有接口这里还需要单独说明一下,实际上,我们更推荐项目做「全量检查」作为默认行为,但是,由于全量检查对于资源的消耗实在太大,这里才退而求其次使用增量检查。
CI 流水线切换 文档建设 文档建设是另一个需要单独关注的问题。Python 的类型标注虽然仍然是 Python 语言的一部分,但是,对于大部分没有接触过的同学来说,这东西就像是 Python 和 C++ 或者 Rust 的结合体。而且,类型标注本身不仅仅需要对标注熟悉,还需要明确各个接口的实际运行过程才能完成一个正确的标注过程。代码的运行流程需要同学在标注的过程中层层分析,而文档建设需要做的,相当于一个引子,引导大家进入到 Paddle 类型标注的最佳实践中来。
这里涉及到几个问题:
What
:Paddle 的类型标注关注什么How
:Paddle 的类型标注怎么做首先 What
,也就是明确任务的具体范围,如,公开 API ,函数的 signature,文档等。其次 How
,也就是 Paddle 做类型标注的最佳实践。比如「使用 PEP 563,延迟类型注解计算」。(这里有更详细的文档 《Python 类型提示标注规范》 )
文档的建设也不是一蹴而就的,由于类型标注这个主题本身就非常庞大,我们的做法是,先在「Tracking Issue」中添加一个「Q&A」章节,让大家有个基础的入手指南,后续再逐步完善,并最终完成文档,形成 Paddle 项目本身的最佳实践。
类型标注文档 公开 API 的类型标注 这个任务是整个项目的主体任务,可以根据参与者的范围不同划分为:
内部,实现辅助的 stub
文件 开放,实现其他公开接口的类型标注,也就是 Inline type annotation
;占主要工作部分。 我们在开展主要的类型标注任务之前,首先在内部完成了必要的 stub
文件的生成与编写任务。
如前文所述,Paddle 很多接口是通过 pybind 或 patch 的方式对外开放的,这里最基础,也是最主要的是 Tensor
的实现。我们没有借鉴 PyTorch
等框架的做法使用「静态解析」的方式生成 tensor.pyi
文件,而是「动态解析」:
静态解析 vs 动态解析 如上图所示,「静态解析」是指,通过解析 yaml
的配置项,结合模板与硬编码的方式生成 stub
文件。这样做的好处是,不会产生运行时依赖,也就是说,可以在项目编译的任意阶段导入。但是,这样的做法极其繁琐,非常容易出错,而且后续维护也会异常困难。由此,我们采用「动态解析」的方式,即,在项目编译的完成阶段,直接 import paddle
,再把相应的接口填入模板中一并打包进行分发。Python 目前最常采用,也是 Paddle 主要的分发方式是 wheel
,也就是将编译与打包分离,这也为「动态解析」提供了可行性。
_typing
模块导入、CI 流水线建设、文档建设、stub
文件的生成,以上诸多任务的目的,便是推动「公开接口的类型标注」这个主体任务的进行。
借助飞桨的完善的开源社区建设,6 月初,我们开放了 [Type Hints] 为公开 API 标注类型提示信息 这个主体标注任务。任务划分为三批,共 337 个子任务,前后有 30 多位开发者参与,完成了 Paddle 的 2000 多个 API 的类型标注,PR 数量有 300 多个。
说明:这里 API 的数量以函数或方法为计数单位,如,一个类有两个公开接口,则计数为 2 。
项目的整体工程量,不应该只以数量的多少进行计算,因为,这个任务不仅仅是数量多,难度也不是修改一两个字符这么简单。
这里就不得不再提一下,很多人认为 Python 太简单没什么技术难度这个认知偏见。Python 从编程语言的学习曲线上来说,确实适合新手入门,但是,写代码或者编程,实际上是个工程问题,而不是简单的代码堆砌。在整个类型标注的任务过程中,我们发现太多的,不仅仅是编码习惯上的问题,更是工程问题,从基础上影响了 Paddle 这个项目的构建。比如上面提到的 Place
与 CPUPlace
的继承关系问题;再如,项目中用到了诸多的枚举方式,而没有使用 enum
;各个接口所使用的参数类型、范围不一致问题更是比比皆是。
说回项目的难度问题,由于 Python 语言的动态性,标注的过程中虽然有文档可以参考,但仍然需要人工逐个进行代码的跟踪,才能对具体的类型较为有把握。一旦接口的调用涉及到私有 API ,跟踪起来则尤为困难。这也是为何到目前为止,仍然没有一款工具,可以很好的辅助人工进行类型标注这个问题的根本原因。就算是目前大火的大模型也无法取代人工的标注工作,修改大模型的错误,与人工直接标注的工作量基本相当。
我们这里以 10
分钟一个接口(修改 + review)的工作量进行计算:
10 min/task * 2191 task / 60 min / 8 hour ≈ 46 day
也就是大约两个月的工作量,可以大体上估算所需投入的成本。
开源社区的介入,一方面缓解了项目的人力问题,使项目的完成成为可能;另一方面,也让更多的开发者接触到了类型标注这个特性。未来,Paddle 应该会将类型标注作为标准的编码行为,早点入坑也不至于开发的时候再抓瞎。
开源贡献者 项目结语 将近 5 个月的时间,痛苦、喜悦、烦恼或者豁然开朗都已成过去,有始有终,项目总算有个交代,正如《黑神话:悟空》,完成比完美更重要。
如果说未来有什么计划,完善私有接口的标注、完善测试用例、完善文档与最佳实践,等等……
要做的可以有很多,而对于还没有接触过类型标注的同学,或者还在犹豫是否使用类型标注这个特性,今天突然想到一个不是很雅的比喻:
上完厕所,走出十丈远,突然意识到自己没有擦屁股……你要如何做呢?
最后,感谢飞桨各位大佬的支持,感谢开源社区的贡献!!!
导师:
开发者:
参考链接
+
+
+
+
\ No newline at end of file
diff --git a/posts/wangxin-story.html b/posts/wangxin-story.html
new file mode 100644
index 0000000..d353259
--- /dev/null
+++ b/posts/wangxin-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】Paddle 六边形战士?揭开汪师傅的神秘面纱~ | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 无论是工作还是生活,他都认真对待!无论是开源世界还是家庭亲情他都怀抱深沉热爱!从一开始提修改文档 PR 的边缘者到如今横扫各大开源任务的 Paddle 扫地僧!汪师傅一直在开源界默默努力💪深耕~今天,就让我们一起揭开这位神秘大佬的面纱,探寻他的故事吧!✨✨✨
一、汪师傅幸福瞬间 汪师傅幸福瞬间 1 汪师傅幸福瞬间 2 二、采访内容 汪师傅给我们介绍一下自己吧!
汪师傅: 我硕士毕业于兰州理工大学,通信与信息系统专业。老家在安徽安庆,目前在宁波工作,工作 4 年多了。兴趣爱好就是写代码、吃美食、喝酒。
你在兰州理工大学攻读硕士期间,最难忘的经历是什么?
汪师傅: 在兰州最难忘的就是各种各样的美食。吃得最多的是兰州牛肉面(兰州市以外地区常见的“兰州拉面”与兰州牛肉面并非同一种食物,多为青海化隆拉面)。记得学校里有一个食堂专门做牛肉面,本地人喜欢说去吃一碗牛大。牛肉面讲究一清、二白、三红、四绿、五黄,即汤清、萝卜片白、辣椒油红、香菜和蒜苗绿,以及面条黄亮。面形又分为毛细、细、二细、三细、二柱子、韭叶、薄宽、宽、大宽等等,让人选择不过来。我一般选二细加鸡蛋加一碟牛肉。放哈(“放哈”在兰州方言中意思是"发酵”)的甜胚子奶茶是另一种难忘的美食,点一杯奶茶和三五好友坐在一起聊聊天也是一种享受。
汪师傅拍的兰州牛肉面 你本科在安徽又在兰州读硕士,为什么选择在宁波工作?可以简单讲讲现在工作在做什么呢?
汪师傅: 找工作的时候,一个亲戚正好拍了一张招聘广告,并且发给我了。招聘的公司在宁波,我就顺手投了一份简历,后面被录用了,就去宁波了。工作主要是做生化、免疫、血脂、血球、尿液分析仪里面涉及算法的部分。
笔者注 ✍️:汪师傅本科毕业于安徽的淮北师范大学!
汪师傅工作四年多了,觉得工作后自己最大的变化是什么呢?
汪师傅: 从萌新变成了老油条。
听你说平时喜欢吃美食,可以给我们推荐一下宁波/安徽/兰州分别有啥好吃的东西吗?
汪师傅: 宁波烤菜年糕、鳗鲞、红膏呛蟹和泥螺都还不错。安徽的话推荐臭鳜鱼和山粉圆子。兰州必须来一碗牛肉面和一杯甜胚子奶茶😁。
通信这类专业好像和深度学习关联不大,你怎么想到去接触深度学习?
汪师傅: 读研的时候做的是传感器网络和优化算法,对深度学习有些了解。工作的时候开始做信号处理算法和图像处理算法,后面做项目发现用深度学习的方法效果更好,就开始学深度学习了。
你在 Paddle 社区中做了很多贡献,当时为什么想着加入 Paddle 开源社区?后来又为什么一直坚持给 Paddle 做贡献?你觉得这些贡献有什么意义?
汪师傅: 我是从学习 OCR 接触到 Paddle 社区的。当时在 AI Studio 上有一门课叫「动手学 OCR·十讲」,学习的过程中开始看 PaddleOCR 的代码和文档。在阅读文档的时候会发现错误,就慢慢开始提一些 typo fix 的 PR。而给 Paddle 框架做贡献则是从 Paddle 黑客松和快乐开源任务开始的。我做的第一个 Paddle 框架的贡献是 [CodeStyle] Compiler Warning tracking issue 相关的。这些开源贡献的意义大概是加深了对开源框架的理解、提升了自己写代码的能力,对代码质量有了更高的追求。
汪师傅部分开源任务展示 1 汪师傅部分开源任务展示 2 听说你加入了飞桨社区开源发展工作组 🙌🏻,对于该工作组你有什么看法呢?
汪师傅: 加入 PPOSDWG 后评选新一期开源之星、为社区未来的建设和发展提了一些建议,Paddle2ONNX PMC 也是在工作组讨论中诞生的。PPOSDWG 确实起到了部分社区治理的作用。
听说你也加入了Paddle2ONNX PMC ,对于自己加入这个组织你又有什么看法?加入这个组织你想达成一些什么成就呢?
汪师傅: 我是以 Paddle2ONNX 的用户角色加入的。郑师傅(@Zheng-Bicheng )是 PMC Chair,已经提了很多 PR,是主要力量。后面我可能就是多解答一些 issue。
笔者注 ✍️:为了 Paddle2ONNX 项目的可持续健康发展和加强社区治理, 飞桨社区开源发展工作组决定设立 Paddle2ONNX PMC(Project Management Committee) 来负责 Paddle2ONNX 项目的技术决策和维护。
据我所知,汪师傅在一家生物公司工作。为什么在生物公司你还是坚持 AI 开源,而且还是 AI 框架开源?
汪师傅: 生物公司也有很多项目要用到 AI,例如血细胞分类、识别尿液官型、识别液面高度等等。坚持开源主要是下班时间比较早,而我又不喜欢出门玩,只能在家写写代码消磨一下时间。
看你的 GitHub 热力图是全绿的,是怎么做到的呀?真的在 7*24 小时搞开源吗?
汪师傅: 下班时候比较早,每天都能写写代码。例如做一做快乐开源任务、做一做黑客松题目,写一写自己的开源项目等等。
汪师傅的 GitHub 热力图 你觉得参与开源社区对你的事业会有帮助吗?
汪师傅: 参与开源社区认识了很多有趣的小伙伴,同时也能提升写代码的能力,这些都会对事业有一定的帮助。
汪师傅有在参与其他社区的开源项目么?有没有什么有趣的开源项目可以分享一下?
汪师傅: 其他开源项目大部分都是阅读文档时,看到文档有错误,顺手提的 typos fix。如 scipy DOC: fix typo in cluster/_hierarchy.pyx 、yolov5 Ignore *_paddle_model/ dir 和 labelme Remove a duplicate statement 。
八卦一下,汪师傅和你的妻子是怎么认识的呀?
汪师傅: 通过我奶奶介绍认识的,她家当时正好在我奶奶家隔壁开店。然后加上了微信,聊聊天,见见面,这样子就认识了。
汪师傅老婆照片集 1 汪师傅老婆照片集 2 汪师傅与老婆合照 汪师傅与家人合照 你有什么想对社区小伙伴说的么?
汪师傅: 热爱生活,热爱开源。
笔者注✍️:汪师傅也有博客哦!大家可以去看看👉 https://vlight.me/ ❤️ 一起交流技术,共同进步!
汪师傅喝酒拍的照片集 1 汪师傅喝酒拍的照片集 2 三、神秘汪佬的评论区 骆涛 汪师傅在我印象中全能,啥类型的 Paddle 题目都能做,非常 NB。而且是上班的业余时间用来 Paddle 开源,真的太感动了,对 Paddle 是真爱了。
张一乔 汪师傅!人如其头像!一直感觉是一个什么都会的大佬!
李敏 神秘而强大的 G 佬,和 002 并称飞桨巨头之一的 greatx (但比 002 多了个核心条件😂),clang-tidy 的领头者,有硬件,有时间,有技术,有想法,多边形战士。
散步 感觉汪师傅是 Paddle 扫地僧之一,是很低调很有才华的大神,人狠话不多!😄
梦柳 去年在上海办 meetup,对汪佬的初印象就是很 i,在一群 i 人中都非常明显哈哈哈,但是很有自己的想法和行动力,提出了很多对开源社区有益的想法,也在积极带领新伙伴融入飞桨快乐开源的氛围,有各位可爱的开发者是飞桨的福气~
写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/wuxi-kaifangyuanzi.html b/posts/wuxi-kaifangyuanzi.html
new file mode 100644
index 0000000..0d11fbc
--- /dev/null
+++ b/posts/wuxi-kaifangyuanzi.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 飞桨开源社区参加开放原子开源大赛 & 开发者大会 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 2023 年 12 月 15 日顺利完成「第一届开放原子开源大赛 - 飞桨 PaddlePaddle 开源贡献挑战赛」 决赛路演,产生 2 支一等奖队伍,16 日参加开放原子开源基金会举办的「2023 开放原子开发者大会」 ,与各开源组织与机构同行沟通交流,收获满满~
开放原子开源大赛 - 飞桨 PaddlePaddle 开源任务挑战大赛 🏁 开放原子开源基金会 是致力于推动全球开源事业发展的非营利机构。这次飞桨团队受邀参与了「第一届开放原子开源大赛」的共建,发布飞桨 PaddlePaddle 开源贡献挑战赛,本期共计发布 6 道赛题,报名 39 支团队,收到有效提交作品 8 个,经初步筛选有 5 个作品入围决赛答辩,经 6 位评委线下评审,选出一等奖 2 名、二等奖 2 名、三等奖 1 名。飞桨获「优秀共建方」荣誉 🥳。
还有无锡市公证处的工作人员做现场公示,可正规呢~
梦师傅注✍️:很有精神!
开放原子开发者大会 - 开源治理与开发者运营分论坛 💬 这次大会规格很高,百度搜索「2023 开放原子开发者大会」可以看到很多新闻。飞桨受邀参加的是「开源治理与开发者运营分论坛」,梦师傅有一个关于飞桨开源社区的分享,同时也是分论坛的主持人和圆桌嘉宾,被现场导演戏称为「全场最忙的人」🤣。
开放原子开发者大会 - 开发者之夜 🌠 还没完!晚上的开发者之夜,有央视的主持人姐姐和无锡当地的 Rap 天团,各路整活层出不穷。现场颁发了「2023 年活力开源贡献者」和「2023 年生态项目」奖,咱们飞桨社区有 17 名开发者入选 🤩,同时拿到了生态项目奖哦 🥰,给各位优秀的贡献者和飞桨点赞 👍 ~
最后展示一个大合照 🏆 ~ 2023 收获满满,2024 一定会更好!提前给大家拜个早年 🧧🧨
+
+
+
+
\ No newline at end of file
diff --git a/posts/xdoctest-project.html b/posts/xdoctest-project.html
new file mode 100644
index 0000000..f2e358c
--- /dev/null
+++ b/posts/xdoctest-project.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 项目收官|将 xdoctest 引入到飞桨框架工作流中 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 【将 xdoctest 引入飞桨工作流】的项目总结。
【将 xdoctest 引入飞桨工作流 】 是第六届“中国软件开源创新大赛”开源任务挑战赛赛道——飞桨框架任务挑战赛 的赛题之一(赛题五),由社区开发者顺师傅 (@megemini )主导,是 Paddle 社区迄今为止影响范围最大的开源活动 🎊。该项目规模极其庞大,涉及一千多个 API 示例的整合和数十万行代码的优化,由超过 20 名社区开发者共同参与完成。
本篇博客主要依据顺师傅的赛题答辩内容进行编写,从过去 、现在 、未来 三个角度,对项目进行分析、总结和展望。
>>> print(past) 过去 01 - 关于任务 文档是用户了解项目最主要的方式,而 API 文档更是承担了用户了解每个 API 使用方式的重要入口。Paddle 为上千个公开 API 提供了详尽的 API 文档,每个 API 都有对应的示例代码,以便用户能够最直观的了解 API 的使用方式。
但由于历史原因,Paddle 的 API 文档中的示例代码是直接使用 Python 代码块形式编写的,这使得我们无法对示例代码的输出进行自动化检查,从而无法保证展示给用户的示例代码的有效性,导致经常出现用户发现文档中的输出与实际运行结果不一致的情况。
过去 API 文档示例代码格式 而本任务,则是要求将 xdoctest 工具引入到 Paddle CI 检查流水线中,利用 xdoctest 能够自动执行示例代码,并对示例代码的输出进行检查的特性,对 Paddle API 文档中的示例代码进行检查,确保示例代码的输出结果与实际运行结果一致,从而提高 Paddle API 文档的质量。
>>> print(why_do_it) 为什么做这个事情? 文档是开发者接触 Paddle 的第一手学习资料,需要保证用户能够 快速、正确 地上手 Paddle 框架,代码示例的重要程度也就不言而喻。
>>> print(do_it_fast) 何为快速? 能够引导用户学习飞桨官方文档,并直接获得使用相应 API 接口的能力。
>>> print(do_it_right) 何为正确? 提供给用户正确运行、结果符合预期的示例代码。
02 - 现有方案 过去 Paddle 的 API 文档示例代码,对于普通 Python 语句没有提示符要求,对于输出则使用 #
进行注释。
>>> print(problem) 过去这样做有什么问题?
需要用户自己区分普通注释与代码输出 不符合 Python 开源项目里对可交互示例的实践和习惯 代码检查不严格,只保证运行,不保证正确 >>> print(solutions) 都有哪些现成的解决方案?
Python 标准库中内置了 doctest 可用于示例代码的自动执行和检查。但 doctest 是使用正则表达式来解析示例代码部分的,这使得示例代码的编写必须遵循严格的格式要求。
xdoctest 是一个基于 AST 的 Python 示例代码自动执行和检查工具,相比 doctest,xdoctest 的示例代码格式要求更加宽松,xdoctest 作者在博客 Extending Python Doctests – xdoctest 详细阐述了这一点。
显然后者是更适合 Paddle 的需求的,因此我们选择将 xdoctest 作为引入 Paddle CI 检查流水线的基础工具。这里为什么说是基础工具呢?是因为在后期迭代开发过程中发现 xdoctest 本身也有很多不足,因此我们在 xdoctest 的基础上进行了大量的二次开发,以满足 Paddle 的需求。
03 - 挑战 >>> 可以预见的挑战 有 800 万开发者每天都在学习、使用 Paddle 框架,xdoctest 的引入需要无缝切换 Paddle 框架包含 1400+ API,还涉及到版本更迭、API 迭代,框架庞大复杂 由于深度学习特殊性,同一示例代码在不同设备环境(CPU、GPU)会有差异性,需要区别验证 >>> 项目的三个大坑 >>> print(now) 现在 01 - 项目分解 一切源于一场对设计文档(RFC) 的讨论。
RFC 设计文档 >>> print(discussion) 都讨论了些什么? 在顺师傅和我们的交流中,共同抛出了相当多的问题进行讨论。这个阶段也遇到了项目的第一个大坑——历史包袱重 。
设计文档(抛开可以预见的那些挑战不说) Paddle 代码和 docs 都有代码检查逻辑 代码检查逻辑还不尽相同 Paddle 与 PyTorch 很多实现方式不一样 PyTorch 的检查方式并不完整 后知后觉 文档中的示例代码未及时随着框架的演进和接口的的变化更新 接口变动、逻辑变动 与单元测试关注点不同,测试方案不同 >>> print(rfc_for_project) 完成设计文档 经过细致的讨论和顺师傅对上述问题的梳理,逐渐理清了项目设计思路,并最终完成设计文档,正式启动项目。
各方参与几十轮的讨论 11470 字36 页2 个大版本,3 个小版本>>> print(milestones) 里程碑 在顺师傅完成项目拆解后,开始着手开发。此时遇到第二个大坑——项目管理难 。
项目 milestones >>> print(just_use_it) 直接用 xdoctest 不行吗? xdoctest 并不适用如 Paddle 此类庞大复杂的框架。
【接口遍历不全】 对于全局命名等情况无能为力【检查环境混用】 不能隔离多个示例检查的逻辑【无数据类型检查】 不能比对浮点数、复数等情况【无法进行全局控制】 如 timeout,错误语句等>>> print(technique_solutions) 主要的技术解决方案 针对【接口遍历不全】 此次任务沿用飞桨原有的接口遍历逻辑,将原有的 xdoctest 的检查逻辑进行拆分针对【检查环境混用】 此次任务利用多进程技术对执行环境进行隔离,进而防止环境污染等情况针对【无数据类型检查】 此次任务对 xdoctest 的检查逻辑进行 patch,从而可以比对整数、浮点数、复数等情况针对【无法进行全局控制】 引入全局指令、全局语句检查机制>>> print(technique_solutions.__more__) 进行重构,优化迁移环境
全局指令转换 抽象示例检查类 解耦示例检查流程与检查类 解耦示例检查结果 日志级别分离 >>> print(workload) 工作量有多大? 由于 Paddle 的公开 API 数量众多,且需要全量的优化对应文档的示例代码,所以在该阶段遇到第三个大坑——工程量巨大 。
因此,我们选择相信开源的力量 ,号召 Paddle 社区的伙伴一起参与进来!
代码到文档全流程 上千个 API 数百个源文件 数十万行代码 已有 24 位开发者近 3 个月的贡献 02 - 里程碑
03 - 开源社区 >>> print(happy_open_source) 社区快乐开源活动 飞桨快乐开源活动旨在鼓励更多的开发者参与到飞桨社区的开源建设中,帮助社区修复 bug 或贡献 feature,加入开源、共建飞桨。
在本赛题中,顺师傅发起了 2 个衍生的快乐开源任务,借助社区的力量来一起全量优化 Paddle 文档的示例代码。
>>> print(missions_0) 开源任务一 : 修改中英文示例一致 修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM docs#5957
中文文档示例代码全部以 COPY-FROM 的形式和英文保持一致 >>> print(missions_1) 开源任务二 : 修改旧的示例代码 [xdoctest] 分批次修改已有代码的示例 #55629
修改已有示例以符合 Google Style样式 在开源任务二中,由于需要把控示例代码的修改效果,顺师傅也从开发者的身份逐渐转变成 Reviewer 。
>>> print(reviewer) 更关注用户的体验 更关注代码的质量 更清楚开发者的诉求 >>> print(reviewer.__task__) 熟悉 review 工作流 任务拆解 第一批:简单,开发者熟悉环境与流程 第二批:复杂,涉及 CPU/GPU 环境等情况 第三批:困难,涉及 C++、并行、静态图等 阶段总结,问题反馈 开发、打磨工具 convert_doctest
>>> print(convert_doctest.__doc__) 辅助工具 为了方便社区开发者完成示例代码的修改,顺师傅开发了 convert_doctest 辅助工具,能够实现:
对示例代码进行初步转换 :自动修改示例格式,节省大量人工修改的时间。对修改后的示例代码进行本地检查 :不用等待 CI 的运行结果,本地即可验证与修改。极大提升了社区开发者完成任务的效率。
convert_doctest 效果 >>> print(missions_bravo) 整体开源贡献 共有 24 位 开源开发者参与。 涉及约 450 个 文件。 涉及 数十万行 代码。 已有约 150 个 PR 被合入。 >>> 回顾三个大坑 在项目的开发过程中,前文提到的三个大坑,也被顺师傅逐一击破。
>>> print(future) 未来 01 - 任务总结 >>> 整体贡献 主线 代码检查特性的迁移 >>> 主要由个人独立 完成。 支线 新旧示例代码的修改 >>> 主要由开源社区 完成。
RFC《将 xdoctest 引入到飞桨框架工作流中》。 完成飞桨框架使用 xdoctest 进行示例代码检查的切换。 退场飞桨文档原有的示例代码检查。 完成飞桨框架全部示例代码对新格式的切换。 完成飞桨文档遗留 COPY-FROM 的切换。 完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新。 完成飞桨文档官网对于新格式示例代码的兼容。 开源社区任务一:修改目前 Paddle docs 中仍使用 code-block 的示例代码为 COPY-FROM: 涉及 PR:23 个 ; 涉及文件:82 个 ; 开源贡献者:7 人 。 开源社区任务二:xdoctest 分批次修改已有代码的示例: 涉及 PR:123 个 ; 涉及文件:364 个 ; 开源贡献者:19 人 。 >>> 个人贡献 调研分析、任务拆解、项目开发、代码 review。 RFC《将 xdoctest 引入到飞桨框架工作流中》 完成飞桨框架使用 xdoctest 进行示例代码检查的切换 退场飞桨文档原有的示例代码检查 完成飞桨文档《开发 API Python 端》与《API 文档书写规范》的更新 提交 PR:20 个 开源社区 Review PR:59 个 开发辅助工具 convert_doctest >>> 个人收获 开源协作,开发者 与 Reviewer 身份的转换 学习飞桨,更全面、更深入的学习;学习的越多,需要学习的更多 编程能力,更直接的需求反馈与实现 开拓视野,开源参与者之广,人外有人 02 - 未来规划 >>> CONVERT_DOCTEST 合入 Paddle、发布到 PyPI,回馈开源社区 思考是否有工具可以取代 xdoctest?是否单独开发 doctest 工具? 03 - 开源贡献 感谢以下参与开源任务的开发者们~
>>> 开源任务一:修改中英文示例一致 @Ainavo 、 @Li-fAngyU 、 @Liyulingyue 、 @RedContritio 、 @enkilee 、 @gouzil 、 @jjyaoao 。
>>> 开源任务二:修改旧的示例代码 @AndSonder 、 @Candy2Tang 、 @Difers 、 @DrRyanHuang 、 @Kaedeharai 、 @KongAKun 、 @Liyulingyue 、 @PommesPeter 、 @SigureMo 、 @enkilee 、 @gouzil 、 @jinyouzhi 、 @liyongchao911 、 @longranger2 、 @ooooo-create 、 @sunzhongkai588 、 @whisky-12 、 @yoyoIcy 、 @yuchen202 。
>>> 飞桨工作人员 @SigureMo 、 @sunzhongkai588 、 @luotao1 、 @jzhang533 。
+
+
+
+
\ No newline at end of file
diff --git a/posts/xian-event.html b/posts/xian-event.html
new file mode 100644
index 0000000..323329d
--- /dev/null
+++ b/posts/xian-event.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 飞桨开源社区参加中国开源软件创新大赛剪影 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 在中国计算机学会组织的中国软件开源创新大赛上,飞桨开源社区的全部比赛已经完成。恭喜以下获奖的同学:
飞桨开源社区有四名同学参加了中国计算机学会组织的中国软件开源创新大赛决赛,这里记录一下在西安参加活动时候的一些照片。大赛的决赛的结果在这里:第六届 CCF 开源创新大赛决赛结果通知 。
活动签到处
@megemini 在做《将 xdoctest 引入到飞桨框架工作流中》的项目答辩。
@qiuwenbogdut 在做《实现飞桨框架动态图反向图的可视化》的项目答辩。
@co63oc 在做《PaddleScience 领域前沿论文复现》的项目答辩(远程接入,遗憾没见到真人)。
@zrr1999 在做《实现飞桨框架的 python level jit compiler》的项目答辩。
梦师傅在跟顺师傅和詹师傅交流。
+
+
+
+
\ No newline at end of file
diff --git a/posts/zhangyiqiao-story.html b/posts/zhangyiqiao-story.html
new file mode 100644
index 0000000..7f11813
--- /dev/null
+++ b/posts/zhangyiqiao-story.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 【开源江湖闲聊录】社区最强水群人——张师傅的酸甜苦辣生活说 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 格子衬衫 👕,黑框眼镜 👓,他就是上天钦定的程序员!他狂卷技术,热爱开源;他喜欢摸鱼 🐟,疯狂水群;他“厨艺精湛”,堪称当代厨神。严寒冬日,别人有女朋友温暖手心,而他把 🥤 优乐美捧在手心!凌晨就寝,别人躺平酝酿睡意,他靠咖啡 ☕️ 进入梦境!工作一年半,至今单身汉!他就是来自安徽的吃辣小趴菜——张一乔 😆!
一、张一乔专属定制海报 张师傅专属定制海报 张师傅注:我不会吉他 🎸,但是有一把!
二、采访内容 先介绍一下自己吧,张师傅!
张师傅: 我是 96 年的,快三十岁了。感觉自己就是一个普普通通的,人到中年也没有女朋友的,独自一人在北京,住在一个小房子里(连个大阳台都没有)的可怜巴巴 🥺 的年轻人。而且,自己做饭还没有特别好吃,但还得自己做饭 😭。买的都是超市里一包一包的菜 🥬,一做就是两个人的饭,根本吃不完,然后剩菜又吃不下去·····大概这么个样子吧!
张师傅注:我就像一整片沙滩上的一粒沙子,就很普通。可能比起其他沙子,更加适合在浪头飘摇而已!
左为张师傅的自信照片,右为张师傅一整柜的格子衬衫 现在你是在北京做全栈程序员,一个人在北京习惯吗?北京和你的家乡安徽相比,你更想留在哪?为什么?
张师傅: 首先,在北京不一定是全栈程序员,也有可能是全方位打杂小工 😣。然后和家乡相比那肯定是家乡好,但是当时还是阴差阳错选择来北京!现在很后悔,很想回家。也不是说北京压力大(因为既不买房子,又没有女朋友。每个月生活也挺简单的,就是交个房租,然后吃饭上班睡觉·····钱肯定是够花的!),只是我自己比较思乡,不想离开家乡!家乡并没有给我留下什么糟糕的印象,父母也还不错。所以比起在外面晃悠,自己还是更加愿意回到家乡!
你觉得程序员是一个怎样的工作?这份职业对你的生活中产生了什么影响?
张师傅: 首先我不知道我自己是不是程序员。在公司,有什么活干什么活!然后工作给我产生的影响大概就是:打工后眼里失去了光!
张师傅名言:公司是用来创造价值的地方,不是学习的地方!
打工人精神状态表情包集 1 打工人精神状态表情包集 2 当初在武汉完成硕士学位后,你谈到过有读博的想法,为什么最终又决定直接工作?
张师傅: 因为我太弱小了,所以没有导师要我!要是读了博选择可能会多一些,可以选择创业之类的。
是什么时候开始接触到 Paddle 的呢 😂😂?
张师傅: 硕士期间接触到的,当时闲的没事,打开百度搜了个东西。然后百度搜索引擎就安利了飞桨。
在 Paddle 社区,很多人称张师傅为“002”,这是为什么呢?你对于这个称呼有什么想法 💡 呢?
张师傅: 因为我是第二个拿 Committer 身份的,所以叫 “002”!对于这个称呼我没有什么看法,只是一个称呼罢了(高冷脸.jpg)
社区里的开发者都觉得你在技术上很卷,那可以和我们分享一下你忙碌卷技术的日常么?
张师傅: 我大概是早上 5 点钟起床 🛏️,磨磨蹭蹭到 6 点钟,然后出门吃一碗香喷喷的豆腐脑!之后回到家里,打开电脑耍会儿游戏,然后去公司上班,开启一天辛苦的忙碌的工作!四点半下班,当然和大多数打工人一样,有时候会加班。一般回到家后开始做饭(黑暗料理):有时煎个饼,有时来个煎饺!差不多下午六点就打开游戏 🎮,并且下定决心打完这一把后就开始工作,结果打完一把又一把,最终打到八九点钟的样子,打开群水两句,水完洗个澡就去睡觉!
悄悄问下,张师傅花这么多时间做开源,你老板不会生气吗?
张师傅: 首先我的开源工作都是在下班时间完成的,与工作没关系,这属于生活!第二点呢,如果我的本职工作没有做好,在其他方面大放异彩,那我的老板肯定会生气!所以不要让老板知道我在干什么 🤫。只要让老板知道我有自己的生活,跟工作不冲突就可以了。
我了解到你是“飞桨开源之星”,也是“AI Studio 杰出创作者”,那么张师傅肯定有自己的开源心得。你认为对于刚来到社区的小伙伴,应该怎样学习才能和你一样逐渐成为技术大佬?
张师傅: 其实没有什么技术路线。可能很多人都在问:“我看你代码写这么好,我怎么样才能像你一样?”这个东西没有任何的窍门可言。就比如你在学 C 的时候,成日成夜的把时间耗费在机房里,然后照着书本或者其他东西一个代码一个代码的敲。可能最开始 Debug 工具不会用,IDE 也不会用,也没有那么多经验,但是得这样一步步走过来。当有了这个基础后,可以去做一些其他事情(eg:修改 Paddle 底层框架),你可能又会发现特别困难,但是我们 Paddle 的快乐开源活动已经把项目拆解好了,你可以凭这些先入入门,上个手,然后一点点进步。
你曾说在社区中你交到了很多开发者朋友,那么哪位开发者令你印象深刻,或者说社区里哪位大佬让你觉得最不像程序员?
张师傅: 每位开发者都印象深刻,嘿嘿,开始端水了!最印象深刻的当然是笠雨聆月,顶着一个女性的头像,然后 GitHub 还没有地铁站努力。最不像程序员的那必然是 001(@SigureMo ),虽然他很社恐,头发还很长,但他在我心中就是腼腆的邻家大男孩,他的气质就是腼腆的邻家大男孩。
你是如何定义开源社区的?你认为你在开源社区中收获最大的是什么呢?
张师傅: 开源社区就是一个开放的用于交流的平台。其实开源社区的定义大家已经给了太多了,我想补充的就是:开源社区从最早的 Linux 到其他一些软件其实都可以接触到!大家在社区无偿贡献代码或者知识,大家一起交流进步。最大的特点可能是公益性!
你在 Paddle 社区做过让你最有成就感的项目是哪个呢?为什么?
张师傅: 在 Paddle 社区里几乎没有做过什么有成就感的项目。一直在烂尾,一直在捡别人剩饭,一直在拾人牙慧。
编者注:张师傅可真是认真努力且谦虚的男人!
在水群时经常看到你说想找个女朋友。那么张师傅想找一个什么类型的呢?给我们描述一下吧 😁😆😂!
张师傅: 我喜欢温柔一点的,儒雅随和的,不说脏话 🤬 的,遵守交通规则的(过马路看红绿灯 🚥)女孩子。她可以不遵守规则,像我一样。但是交通规则得遵守!最好有一头乌黑的长发 😁!
张师傅注:谁家好人三十岁还没有女朋友啊~ 哇哇哇
张师傅在做饭方面颇有造诣,那么你是如何突发奇思妙想用最简单的食材烹饪出这一道道高级的美食呢?
张师傅: 做饭心得就是每天睡觉前坚持学习烹饪技巧,比如打开哔哩哔哩观看 「世界美食 official」 的最新视频!我们要谦虚学习别人是如何把这种简单的食材最终做成高级的糊状物的!日常就喜欢观看印度美食的制作过程~~
张师傅经常观看的B站up主 马上 2024 年了,可以分享一下新的一年里你有什么计划么?
张师傅: 2024 年计划就是 2023 年的计划。女朋友这一条还是可以不完成!
张师傅 2023 和 2024 的计划 三、生活中的点点滴滴——张师傅篇 张师傅的日常 张师傅的精心制作的黑暗料理 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/zheng-story.html b/posts/zheng-story.html
new file mode 100644
index 0000000..97b6796
--- /dev/null
+++ b/posts/zheng-story.html
@@ -0,0 +1,33 @@
+
+
+
+
+
+ 【开源江湖闲聊录】产品经理?程序员?郑师傅教你如何双双拿下❗ | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 集百家之阴阳,合一家之糟粕。好消息!好消息!自称 Paddle 社区“最想当 PM 的程序员” 、“Paddle 首席阴阳家”—— Zheng-bicheng,闪亮登场 🥳🎉🎉🎉。你想掌握最前沿的阴阳技巧么?你想成为和他一样优秀的开发者吗?你想和他一样眼神 👀 中透露着睿智的光芒,小脑袋瓜里装满各种各样的知识么?那就快来看看这篇博客吧!🌹
一、个人名片
郑师傅 网络上躁皮不用多说,臊皮领域涉及抖音、微博、小红书、贴吧、知乎、B 站等多个社交软件。你问我躁皮能力有多强,我得问问你懂不懂活了 23 年,吧龄有 13.4 年的含金量(如下图)。人家小学玩泥巴,我的小学玩贴吧,抽象要从小培养。 我涉及的游戏领域的主要是 Steam 上的 RPG 游戏和 Switch 上的战旗游戏。我的游戏方式讲究一个另辟蹊径,例如玩神界原罪的时候,大多数人都忙着通主线,我主打一个小偷玩法,所到之处能偷的东西全给我偷光了。与之相反的是,我在游戏里大偷四方,现实里却被称为“电瓶侠”。截止至目前为止,已经被偷了 20 颗电瓶,快说谢谢电瓶侠 😭。 顺便有没有大佬带我玩《双人成行》的,一缺一现在~
郑师傅吧龄 郑师傅注:提一嘴,我玩了 13.4 年贴吧,臊皮能力不足梦师傅十分之一,鬼知道这姐妹经历了啥!
编者注✍️:提到的梦师傅(@Ligoml )是我们飞桨社区非常优秀的美女产品经理 ❤️!!
二、采访内容 先介绍一下自己吧,郑师傅!
郑师傅: 各位大佬好,我是郑必城(@Zheng-Bicheng )🐶🐶,开源社区的菜鸟一枚,毕业于普普通通的闽江学院。
大学时你的专业是人工智能,为什么当时选择这个专业?
郑师傅: 其实我最开始学的是电子信息与工程,无奈于电路天赋极其有限,通宵 4 个晚上做了 13 块板子才搞出一个 5 倍放大电路,与此同时身边的资源大多都开始向 AI 转型,于是随大流转专业到了比较热门的人工智能专业。
在大学的四年,你学习了些什么技术?又是怎么精进你的技术的呢?
郑师傅: 鉴于闽江学院给我画了 4 年大饼,迟迟升不上本一,我仅代表个人将其本降专,将其简称“闽带”。在闽带的 4 年生活里,承蒙老师关爱,我得以同时加入了软件和硬件的实验室。我的两位指导老师又刚好都是系主任,这就意味着我能比较自由的使用各种电子元器件以及超算,这让我在学习上有了极大的探索空间。软硬都有所了解后,技术栈也从常见的后端研发慢慢转成了嵌入式部署。
听说郑师傅现在在导师公司底下工作,是在哪里工作呢?具体工作是关于哪方面的?
郑师傅: 目前我在福州凌智电子工作,公司业务主要是仪器仪表(高速信号采集)以及各种 Sensor 的开发。工作内容就比较杂了,小公司没有产品,人手也不足,因此一个对外的产品,我的工作内容覆盖了软件端产品设计,研发,测试三个环节。我在公司主要负责的业务是高速采集卡的上位机,各种模块的对外 SDK 开发以及 AI 边缘端计算项目后端框架开发。
作为一个 01 年的小社畜,平时工作忙么?加班多么 😂😂?
郑师傅: 忙的时候忙,不忙的时候不忙。加班多的时候多,加班不多的时候少。
编者注✍️:郑师傅是会总结的!!🤭
你对 Paddle 社区的理解是什么样的?你在 Paddle 社区,做过最有影响力的项目是什么?
郑师傅: Paddle 社区给我的感觉就是包容性强。
从实力上,不管你的实力是强是弱,在社区里都有属于你的位置,各种任务任你挑,研发大哥人也都很好,即使很忙也愿意抽时间出来和你讲思路讲方法。
在 Paddle 社区里,我比较活跃的项目其实就是 FastDeploy 。FD 的定位是端到端的部署框架,希望让即使是 AI 初学者的用户也能用极少的代码量跑通模型部署。我主要负责的部分都是和移植相关,涉及到的部分包括 Rockchip 推理后端的移植,几个社区 CV 模型的移植,类似人脸对齐这种后端算法的移植。
要是提到影响力,FastDeploy 的定位其实就比较尴尬了。由于适配了非常多的底层推理框架,FD 内部为了兼容性是牺牲了一部分的性能的。从公司的角度看,对于小公司来说,用 FD 基本上会做一些魔改,来达到最优的性能(这也是后期我维护 FD 次数慢慢变少的原因,在我们公司内部,我基于 FD 做了大量的魔改,已经和现在的 FD 主分支几乎不兼容了);大公司有自己的高水平研发工程师,也不会去用 FD,因此 FD 的使用场景还是有一定的局限性的。
从用户的角度看,对于学生这类 AI 部署水平较差的用户来说,FD 是相当友好的,毕竟几行代码就能搞定深度学习部署,用来做毕业设计再合适不过了;对于编程水平较高的研发工程师来说,FD 更多的还是作为一个项目推理框架的模版代码,各个开发者可以在这个模版上快速定制自己所需要的代码。
可以和我们讲讲你的开源故事么?期待 😚 期待~~~~
郑师傅: 我第一次接触到 Paddle 开源社区是在 2022 年 Q3 的黑客松第三期活动。
刚开始参加开源时,第一个带我的师傅是 001。谁能想到晚上 11 点,001 这个内向萌骚怪搁那滔滔不绝的教我怎么同步远程仓库代码,我搁那嘎嘎猛困,他搁那嘎嘎猛教。没办法,不能辜负大佬的一番好意,我只能被迫学习。学着学着,把自己的知识用到了开源里,还真一不小心就做出了黑客松的两道题,从此入门了开源。
编者注✍️:黑客松是百度飞桨举办的深度学习领域编程活动,鼓励开发者了解与参与飞桨深度学习开源项目,做出自己的代码贡献。 PPDE(Paddle Paddle Developers Experts):飞桨开发者技术专家。 PFCC(Paddle Framework Contributor Club):飞桨框架贡献者俱乐部。
刚开始做适配时,RK3588 的工具链还不完善,我苦于没办法和 RK 官方的人沟通,效率一直很低。但青姐这人主打就是一个给力,我真敢提代码,她真敢拉群,直接给我这个开源菜鸟拉到了 RK 的适配群里和 RK 的研发工程师真人 1V1 大战。有了 RK 工程师的支持,项目也就慢慢开始推进了。
在持续将近一年的贡献后,不知不觉的,我这么个一心向钱看齐的人莫名其妙的就成为了仓库的维护者,参与起了和 RK 相关的维护工作。在青姐的支持下,我甚至还参加了 RK 的开发者大会。要知道,在前一年,我还是坐在讲台下听着 RK 工作人员演讲的开发者,第二年就借着 Paddle 的风到 RK 开发者大会上给讲台下的嘉宾讲 FastDeploy 了。
上图为 RK 开发者大会的合照 随后就是参加了新的黑客松,认识了 Arm 的 Liliya 姐。Liliya 姐在 Arm 领域给了我很多的帮助,在她的支持下,我了解了很多 Arm 相关的最新技术,也参与到了 Paddle 模型 -> Arm 虚拟硬件部署链路的移植工作中。在她的帮助下,我移植了 Paddle 的多个模型到 Arm 虚拟硬件上,然后就是参加了 Arm 虚拟硬件的小发布会,一不小心成为了 Arm Ambassadors,顺便蹭了她一顿饭。
上图为郑师傅和上文的 Liliya 姐 郑师傅做开源这么久了,现在开源对你来说是一个什么感觉?你觉得你热爱它么?那又是怎么体现你的这种感觉的?
郑师傅: 咱主打一个真实。读书的时候,开源是我装逼的方式;工作以后,开源对我来说是生活的调剂品,在心有余力的时候是我放松时的选项之一。我很爱开源,开源既让我拿到了很多 Title,也让我学到很多东西,面子里子都赚到了。
你自诩为“Paddle 社区阴阳怪气第一人”(和阿梦实力相当),那你是如何把阴阳怪气这种 🥰 贱贱的说话方式使用的如此炉火纯青的?可以教教我们么?
郑师傅: 我这么正直的人怎么会阴阳怪气呢?比起阴阳怪气和口嗨,李梦柳和神可比我强多了。至于练习阴阳怪气嘛,多亏了啵啵姐。世上本没有阴阳师,阴阳啵啵姐多了,也便成了阴阳师。
编者注✍️:啵啵姐是指飞桨社区优优优秀的美女运营花花(@Tulip-hua )。
梦师傅本人注✍️:郑必城根本不会阴阳怪气!
你口中的“神”是谁? 为什么称他为神呢?
郑师傅: 神是衍哥,第一次把衍哥叫做神是和梦师傅打嘴炮的时候没过脑子说出来的话。但是后面了解到神的事迹以后,衍哥我只能说比神还神。
你有谈到想成为一位 PM,那可以和我们简单分享一下你的职业规划么?或者说:你想未来一年在职业上取得什么进展?🆕🆕
郑师傅: 我职业规划基本上是:先当研发广泛学习,再当产品经理输出价值!
在我的认知里 PM 的知识面首先是广,然后是深。带一个产品,我得懂需求;和研发吵架,我得懂代码大致的底层逻辑;对外输出,我得懂基本商业逻辑;产品的迭代,我得懂客户的工作流程。
对应我的工作,看上去干的事情和 AI 没啥关系,实际上是 AI 落地的一整套的流程。我的工作涵盖了数据采集,数据标注和数据清洗,模型调参和训练以及模型部署。这几乎覆盖了边缘端 AI 部署的全场景。而其他知识,一般靠和大佬沟通,取长补短搞定。在工作以后,我定期的会去拜访一些上游链路的大佬,如某开发板的硬件负责人,某芯片厂商的事务负责人以及某产商的视觉算法负责人。和大佬沟通是我拓展视野和补充知识面的手段之一,毕竟人能坐到那个位置上,对某个方向一定是有自己的理解的。
前段时间和百度某个产品已经聊过了。某法师说:"真正要做的事,连神明都不要说,不要告诉别人你的计划,让他们看结果。”对于我要做的事,一般是不立 Flag 的,这里就埋个伏笔。
相信你也接触到很多飞桨以及其他的 PM,哪位 PM 给你留下来最深的印象?哪位 PM 是你未来职业的模板?
郑师傅: Paddle 的 PM 大佬们其实都很有特色也都给我留下挺深的印象。比如梦柳不但能力很强,嘴炮也很厉害,看上去很渣,其实比谁都纯;雷青姐经常工作到深夜,非常努力;军哥专业素养很高,表面上话不多像是个糙汉子,接触了以后让我感觉居然像个小文青;衍神表面看上去吊儿郎当的,实际上很强,对各种问题看的很透彻;孙哥表面看上去很能嘴,其实我觉得还有点内敛;佳维姐姐人非常漂亮,普通话也超级标准;凯哥居然能用英语和阿三交流的好好的。
谁是我职业模版的话,我感觉我这 🐶 脑能把大家的优点全学会是不太可能的,但是都学个 10% 当个及格的 PM 还是有可能的
左图为参观百度时小度拍的合照,右图为郑师傅最喜欢的喵喵喵雪糕 最后,你想对和你一样努力 💪 开源的开源者说些什么呢?
郑师傅: 和张师傅(@liyulingyue )这群开源奋斗逼相比,我实在太摸鱼了。希望大家都能向张师傅学习,在开源中贡献自己的力量。
三、从你的全世界路过——郑师傅篇 前几篇博客上都有板块谈大家对被采访者的印象,但是今天郑师傅想来个板块单独谈谈他对社区大佬的印象 🤩🤩🤩。由于在 Paddle 社区,大佬实在太多了,郑师傅就抽一部分大佬讲讲他对他们的印象。
我对 001 的第一印象就是代码能力很强,但是有点闷骚。作为带我入门的大佬,肯定是要感谢 001 的,因为 001 人实在太好了 ❤️,不光带我开源还带我“开原”,属于是工作生活两不误了。
应晟大佬是个很帅的糙汉子,刚认识他的时候给我的第一感觉就是相当的程序员,但是他参加直播的时候打理了一下,卧槽,嘎嘎帅啊。在我第一次参加黑客松的时候他给了我非常多的帮助,帮我积极协调了项目的各种进度内容,也让我了解到了一些职场相关的内容。
原谅我管百度唯一指定童工叫姐。刚开始认识她的时候,她说别人叫她“芋泥妹” 👧,我想着我一 00 后也这么叫不是显得我太老了?所以叫她“啵啵姐”,后来发现大家都挺爱这么叫的。这位更是重量级,又能给我开源资源又能带我玩。世界可以没有耶路撒冷,但开源不能没有啵啵姐。
雷青大佬在我参与开源的初期给了我很大很大的帮助,没有她做为桥梁我就没办法认识到那么多的百度研发工程师。雷青姐人也超级好,还记得她来福州的时候我请她吃饭,结账的时候她觉得不能让我一学生请客,把我手机藏起来买单,这才是神仙姐姐 🙍🏻♀️ 啊。算起来已经欠她两顿饭了,有机会一定要还了。
蒋大佬的代码我只能说,牛逼,真他妈牛逼。人跟人的差距真大,一个在我看来很难的问题,他总是能一下子就找到关键点。在我开源生涯中他是各种指点,牛逼,真的牛逼。说起来还画了好多的饼给这位大佬,但是这些饼的工作量都有点大,最后大部分都慢慢不了了之了,现在正在慢慢捡起来做。
延君大佬人很热情,帮我审核了很多的代码,他不但在 coding 上给了我很大的帮助,还对我的职业生涯规划起了很大作用,在我两难的时候给了我很正确的建议。
这位也是重量级,Paddle 除了神以外的嘴炮王。她在我这 Title 太多,包括但不限于我的 Github 头像拥有者、最帅猫拥有者、最肥猫拥有者、最傻猫拥有者。
一见如故,和我一样惨。我是扑克牌里的小王那孙哥就是扑克牌里的大王 🤡。
很感谢军哥帮忙推动了 Paddle 框架在 Arm 上的 whl 包的适配,没有军哥,Arm 虚拟硬件在百度云上的部署就没办法推动了,就是啥时候能上线 Paddle 官网就更好了。
就一个字,神!
四、郑师傅的名言集 上图为郑师傅经典语录集 写在最后 💡 【开源江湖闲聊录】 是一项专门为 Paddle 社区的开发者打造的特色访谈栏目 📚。在这里,我们邀请到每一位别具一格且富有热情的开发者,通过文字或语音的方式进行深入采访 🎙️,探索并展现他们背后独一无二的故事,将他们的经历、见解和创意整理成精彩内容,呈现给整个社区。
+
+
+
+
\ No newline at end of file
diff --git a/posts/zuckerberg-letter-post.html b/posts/zuckerberg-letter-post.html
new file mode 100644
index 0000000..44069c2
--- /dev/null
+++ b/posts/zuckerberg-letter-post.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+ 【睁眼看世界 🌍】|扎克伯克写给开发者的一封信:开源 AI 是未来的前进之路 | 飞桨开源社区博客
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Authors 本篇文章是小扎同志在 Llama 3.1 发布时给所有开发者写的“一封信”,全文都在阐述开源对于 AI 大模型发展的重要性 。而比较有趣的是,在类似的时间点,我们的厂长李彦宏(Robin)在对外发布会和内网里发表过截然相反 的观点,即“开源大模型会越来越落后 ”。在这俩种观点的背后,其实也蕴含着中、西方文化的差异,在文章结尾,我会简单聊聊这两种观点的碰撞和思考。
原文:https://about.fb.com/news/2024/07/open-source-ai-is-the-path-forward/ ✍️ 写于 2024 年 7 月 23 日 By 马克·扎克伯格,创始人兼 CEO
开源 AI 是未来的前进之路 在高性能计算的早期阶段,当时大部分科技公司都大力投资于开发自己的闭源版本 Unix。在那个时代,是很难想象可以有其他方法来发展出先进的软件。然而,最终是开源 Linux 脱颖而出获得了广泛的认可 —— 起初是因为它允许开发者可以按自己的想法随意修改其代码,并且更加省钱。而随着时间的推移,它变得更加先进、更加安全,并且拥有一个比任何闭源 Unix 更广泛的生态,能够支持更多功能。如今,Linux 已经成为云计算和大多数移动设备操作系统的行业标准基础——并且我们都受益于其衍生的优秀产品。
我相信人工智能将以类似的方式发展。如今,几家科技公司正在开发领先的闭源模型,但是开源模型正在迅速缩小差距。去年,Llama 2 只能与过时的模型相比较,而在今年,Llama 3 已经能与最先进的模型进行竞争,并且在某些方面处于领先。明年开始,我们预计未来的 Llama 系列模型将成为行业内最先进的模型。但在此之前,Llama 已经在开放性、可修改性和成本效益方面处于领先地位。
今天,我们正在迈向开源人工智能成为行业标准的下一步。我们发布了 Llama 3.1 405B,这是第一个达到业内前沿水平的开源人工智能模型,同时还推出了新的改进版 Llama 3.1 70B 和 8B 模型。相对闭源模型,除了拥有明显更好的性价比之外,405B 模型开源的事实将使其成为进行微调和蒸馏小模型的最佳选择。
除了发布模型,我们还与一系列公司合作,推动更广泛的生态建设。
亚马逊、Databricks 和 NVIDIA 正在推出一整套服务,以支持开发者微调和蒸馏他们自己的模型。 像 Groq 这样的初创公司已经为所有新模型构建了低延迟、低成本的推理服务。 模型将在所有主流云厂商服务中可用,包括 AWS、Azure、Google、Oracle 等。 Scale.AI、DELL、德勤等公司已准备好帮助企业部署 Llama,并使用自有数据训练定制模型。 随着社区发展和更多公司开发新服务,我们可以共同将 Llama 打造为行业标准,并让 AI 普惠于每个人。
Meta 致力于开源人工智能。稍后我将阐述为什么我认为开源是最好的开发栈,为什么开源 Llama 对 Meta 有利,以及为什么开源 AI 对世界有益 。同时也正因如此,开源社区将会长期存在。
为什么开源 AI 对开发者有利 当我与全球的开发者、CEO、政府官员交流时,通常会听到几个主题:
我们需要训练、微调和蒸馏我们自己的模型。 每个组织都有不同的需求,不同规模的模型能够最好的满足这些需求,并且这些模型使用他们自己的特定数据进行训练或微调。端侧任务和分类任务需要小的模型,而更复杂的任务则需要更大的模型。现在,你可以使用最先进的 Llama 模型,使用自己的数据继续进行训练,然后将其蒸馏成最合适的模型尺寸——无需我们或任何其他人看到你的数据。我们需要掌控自己的命运,而不是被一个闭源模型厂商所束缚。 许多组织不希望依赖他们无法自行运行和控制的模型。他们不希望闭源模型厂商能够更改自己的模型、修改使用条款,甚至完全停止服务。他们也不希望被束缚在拥有模型专属权的某单一云服务厂商中。开源使得生态圈内的公司拥有兼容的工具链,你可以轻松的在他们之间横跳。我们需要保护我们自己的数据。 许多组织需要处理敏感的数据,这些数据需要保密,并且不能通过云 API 传输到闭源模型。而其他有些组织仅仅只是不信任闭源模型厂商提供的数据。开源解决了这些问题,你可以在任何地方运行这些模型。另外开源软件由于开发过程更加透明,往往也更加安全,公众也认同这一观点。我们需要一个高效、可负担得起的模型。 开发者可以在自己的基础设施上以闭源模型(如 GPT-4o)大约 50% 的成本运行 Llama 3.1 405B 进行推理,无论是在线还是离线推理任务。我们想投资于一个能长期成为事实标准的生态。 许多人看到开源模型比闭源模型发展得更快,他们更希望在能够长期带来巨大优势的架构上建立自己的系统。Meta 的商业模式是为用户建立最佳的体验和服务。为了实现这一目标,我们必须确保自己始终能够获得最先进的技术,并且不会被束缚在竞争对手的闭源生态系统中,这些系统可能会限制我们的产品创新。
我的一个重要经历是,在建设我们的服务时受到了 Apple 平台的诸多限制,从苹果的开发者税,到他们施加的任意规则,再到阻止我们推出的所有产品创新。显然,如果我们能够构建最好的产品,并且竞争对手不进行限制,Meta 和许多其他公司都将能够为用户建设更好的服务。从哲学层面上讲,这正是我如此坚定不移的为下一代 AI 和 AR/VR 领域建立开源生态的主要原因
人们经常问我是否担心开源 Llama 会让我们失去技术优势,但我认为这种担忧忽略了几个重要因素:
首先,为了确保我们拥有最先进的技术,并且不会被长期束缚在某一封闭生态里,Llama 需要发展成为一个完整的生态系统,包括开发工具、效率提升、芯片优化和其他集成软件。如果我们是唯一使用 Llama 的公司,这种生态系统就不会发展,我们将不会比当初的闭源 Unix 好到哪去。 其次,我预计 AI 的发展将持续伴随着激烈的竞争,这意味着在当前时点开源某个模型,并不会使我们在推出下一个最佳模型时失去优势。Llama 成为行业标准的路径是一代又一代的保持竞争力、效率和开放性。 第三,Meta 与闭源模型厂商的的关键区别在于,出售 AI 模型的访问权并不是我们的商业模式。这意味着公开发布 Llama 不会削减公司的收入、可持续性或者投资 research 的能力 ,而闭源厂商则完全相反(这也是为什么几家闭源厂商一直在积极游说政府反对开源的原因之一) 最后,Meta 拥有着深耕开源项目的悠久历史和成功经验。通过 Open Compute Project 共享我们的服务器、网络和数据中心设计,以及让供应链标准化了我们的设计,我们节省了数十亿美元。同时我们也受益于开源生态的创新,如 PyTorch、React 以及其他业内领先的开源项目。当我们长期坚持开源的方法时,它始终是对我们有利的。 为什么开源 AI 对全世界有利 我坚信在实现 AI 光明前景的过程中,开源是不可或缺的一环。AI 技术相比任何其他现代技术都展现出了更大的潜力,可以提升人类的生产力、创造力和生活质量,加速经济增长,同时推动医学和科学研究领域的进步。而开源将确保全球更多人能够获得 AI 带来的好处和机会,避免权力集中在少数公司手中,使得技术能够更公平、更安全地服务于整个社会。
关于开源 AI 模型的安全性一直存在争论,而我的观点是,开源 AI 将比闭源更安全。我认为政府将会认识到开源是符合他们的自身利益的,因为开源会促进全世界的繁荣和安全。
我对安全性的认知是,我们需要防范两类危害: unintentional and intentional (非故意危害和故意危害)。非故意危害指设计和运行 AI 系统的人没有故意造成伤害的意图,但该系统仍然可能无意中引发一些负面后果。例如,现代 AI 模型可能无意中给出错误的健康建议。或者在未来场景中,有些人担心模型可能会无意中自我复制或过度追求目标,进而对人类造成危害。故意危害则是指恶意使用 AI 模型来造成危害的行为。
值得注意的是,人们对 AI 的担忧主要集中在非故意危害方面——从 AI 系统对数十亿使用者的影响,到人类未来面临的许多真正灾难性的科幻场景。在这方面,开源技术明显是更安全的,因为其系统更加透明,能够经得起更广泛的审查。从历史上看,正是由于这些原因,开源软件在安全性方面表现更为出色。同样,使用像 Llama Guard 这样安全系统的 Llama 模型,可能比闭源模型更安全和可靠。因此,大多数关于开源 AI 安全性的讨论都集中在故意危害上。
我们的安全流程包括严格的测试和红队攻击,以评估我们的模型是否具有造成实质性危害的能力,目的是在发布模型之前减轻风险。由于这些模型是开源的,任何人都可以自行进行测试。我们必须牢记,这些模型是通过互联网上已有的信息进行训练的。因此在考虑危害时,应该从模型造成的危害,是否能够比从 Google 或其他搜索结果中快速获取的信息中造成的危害更大这一点开始。
在思考关于故意危害的问题时,将个人或小规模单位能够做的事情,与像国家等这类拥有大量资源的大型单位能够做的事情区分开来,是非常有帮助的。
未来的某个时刻,个别不法分子可能会利用 AI 模型的智能,从互联网上的信息中制造出全新的危害。在那时,“权力”的平衡将对 AI 安全至关重要。我认为,生活在一个 AI 被广泛部署的世界中会更好,因为这样一来,实力更强的大型机构可以制约小型的不法分子。这种方式与我们在社交网络上管理安全的方式类似——我们更强大的 AI 系统能够识别并阻止那些使用小型 AI 系统的低级别威胁者。更广泛地来看,大型机构大规模部署 AI 将会促进社会的安全和稳定。只要大家都能获得同代的 AI 模型(开源技术有助于实现这一点),拥有更多计算资源的政府和机构就能够对抗那些计算资源较少的不法分子。
接下来的问题是,…… 【请自行批判性阅读该段原文】 。
在你展望未来的机遇时,请记住,当今大多数行业领先的科技公司和科学研究都是建立在开源软件之上的。下一代企业和科学研究也将基于开源 AI,只要我们共同投入其中。这包括刚刚起步的初创企业,以及那些因缺乏资源无法从头开始开发 SOTA AI 的大学和国家。
归根结底,开源 AI 是我们充分利用这项技术、为世界上所有人创造最大经济机遇和安全性的最佳途径。
让我们共同构建这一切 在过去,Meta 是为自身开发这一系列 Llama 模型,然后对外发布,但并未专注于构建更广泛的生态系统。然而在这次发布中,我们采用了不同的方式。我们正在内部组建团队,以支持尽可能多的开发者和合作伙伴使用 Llama,并积极建立合作关系,使生态系统中的更多公司也能够为其客户提供独特的功能。 我相信,Llama 3.1 的发布将成为行业的一个转折点,届时大多数开发者将主要采用开源方案,而这一趋势只会向前加速。我希望你能加入我们,共同推动 AI 的普惠发展,让全世界都能享受到这项技术的益处。
💪, MZ
编者碎碎念 看完小扎同志写的信,再聊聊厂长 Robin 的观点。在此我就不细说具体的理念,而是做个总结和对比。
厂长的公开言论可以看 https://www.163.com/dy/article/JBSQH9HD0511DSSR.html (随便找的)
Robin 观点 1:论效率,开源模型没法跟闭源模型比 Robin 观点 2:“开源美好”的逻辑在大模型时代不成立 结论:表面是理念的分歧,但实际上是公司商业策略的差异 可以看到,Robin 更关注商业效率和闭源模型的市场应用,而扎克伯克则看重开源带来的长期生态建设和创新潜力。
往大的说,这两位科技领袖可能也反映了他们对 AI 未来发展的不同理解:Robin 代表着通过集中资源快速迭代获取竞争优势的中国模式,而小扎同志则提倡一种去中心化、开放合作的西方创新生态。
但往小的说,可能最根本的原因,就像小扎同志说的,公开发布 Llama 不会削减 Meta 公司的收入。但对于百度,公开发布开源大模型,可能真的会影响到自己的搜索业务收入。
写在最后 【睁眼看世界 🌍】专栏旨在打破知识边界,通过将国际上的优秀文章、会议精华以及高质量学习资料翻译成中文,使得这些宝贵的知识资源能够为广大中文读者所共享,而不是局限于国内的小圈子。
对于对此有兴趣、愿意贡献力量的开发者,也可以联系孙师傅 ,一同完善这个栏目,共同促进知识的自由流动和技术的共同进步。
+
+
+
+
\ No newline at end of file
diff --git a/sw.js b/sw.js
new file mode 100644
index 0000000..6c49700
--- /dev/null
+++ b/sw.js
@@ -0,0 +1 @@
+if(!self.define){let s,e={};const l=(l,n)=>(l=new URL(l+".js",n).href,e[l]||new Promise((e=>{if("document"in self){const s=document.createElement("script");s.src=l,s.onload=e,document.head.appendChild(s)}else s=l,importScripts(l),e()})).then((()=>{let s=e[l];if(!s)throw new Error(`Module ${l} didn’t register its module`);return s})));self.define=(n,o)=>{const i=s||("document"in self?document.currentScript.src:"")||location.href;if(e[i])return;let t={};const r=s=>l(s,i),a={module:{uri:i},exports:t,require:r};e[i]=Promise.all(n.map((s=>a[s]||r(s)))).then((s=>(o(...s),t)))}}define(["./workbox-e1498109"],(function(s){"use strict";self.skipWaiting(),s.clientsClaim(),s.precacheAndRoute([{url:"404.html",revision:"a7ca559f14ce1aadc91819943cea9ca0"},{url:"about.html",revision:"27c9b2aee3f7554b0702e9f9618e0b19"},{url:"assets/about.md.B8Tj-U_G.js",revision:null},{url:"assets/about.md.B8Tj-U_G.lean.js",revision:null},{url:"assets/app.DinDQB6t.js",revision:null},{url:"assets/chunks/first-post.CGto_Bts.js",revision:null},{url:"assets/chunks/framework.D1-4jGi8.js",revision:null},{url:"assets/chunks/MessageBox.CshcSYCA.js",revision:null},{url:"assets/chunks/theme.BPwOOhID.js",revision:null},{url:"assets/chunks/virtual_pwa-register.CrNx9NFN.js",revision:null},{url:"assets/chunks/workbox-window.prod.es5.B9K5rw8f.js",revision:null},{url:"assets/index.md.DgAfRGTS.js",revision:null},{url:"assets/index.md.DgAfRGTS.lean.js",revision:null},{url:"assets/pages_1.md.C6jMQdlw.js",revision:null},{url:"assets/pages_1.md.C6jMQdlw.lean.js",revision:null},{url:"assets/pages_2.md.Cm_QaGZ2.js",revision:null},{url:"assets/pages_2.md.Cm_QaGZ2.lean.js",revision:null},{url:"assets/pages_3.md.BN7Uij8R.js",revision:null},{url:"assets/pages_3.md.BN7Uij8R.lean.js",revision:null},{url:"assets/pages_4.md.Duii_cXO.js",revision:null},{url:"assets/pages_4.md.Duii_cXO.lean.js",revision:null},{url:"assets/posts_2023-os-report.md.DoaC6CkT.js",revision:null},{url:"assets/posts_2023-os-report.md.DoaC6CkT.lean.js",revision:null},{url:"assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.js",revision:null},{url:"assets/posts_chengdu-kaiyuanshe.md.DaISaDcs.lean.js",revision:null},{url:"assets/posts_chuan-story.md.0jPuh_f7.js",revision:null},{url:"assets/posts_chuan-story.md.0jPuh_f7.lean.js",revision:null},{url:"assets/posts_first-post.md.BrhGXo3R.js",revision:null},{url:"assets/posts_first-post.md.BrhGXo3R.lean.js",revision:null},{url:"assets/posts_hackathon-5th-episode01.md.BXwh45pa.js",revision:null},{url:"assets/posts_hackathon-5th-episode01.md.BXwh45pa.lean.js",revision:null},{url:"assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.js",revision:null},{url:"assets/posts_hackathon-5th-episode02.md.Bzmd2JTx.lean.js",revision:null},{url:"assets/posts_hackathon-5th-episode03.md.CYI5eehn.js",revision:null},{url:"assets/posts_hackathon-5th-episode03.md.CYI5eehn.lean.js",revision:null},{url:"assets/posts_hackathon-6th-summary.md.FRTopXGW.js",revision:null},{url:"assets/posts_hackathon-6th-summary.md.FRTopXGW.lean.js",revision:null},{url:"assets/posts_huanggua-story.md.iFqrJ-8D.js",revision:null},{url:"assets/posts_huanggua-story.md.iFqrJ-8D.lean.js",revision:null},{url:"assets/posts_huangjiyi-story.md.BoJUl8hg.js",revision:null},{url:"assets/posts_huangjiyi-story.md.BoJUl8hg.lean.js",revision:null},{url:"assets/posts_ijcai-2024-competition.md.DcElAR1q.js",revision:null},{url:"assets/posts_ijcai-2024-competition.md.DcElAR1q.lean.js",revision:null},{url:"assets/posts_ligoml-story.md.CQ9oS4y7.js",revision:null},{url:"assets/posts_ligoml-story.md.CQ9oS4y7.lean.js",revision:null},{url:"assets/posts_limin-story.md.Dawzf3lV.js",revision:null},{url:"assets/posts_limin-story.md.Dawzf3lV.lean.js",revision:null},{url:"assets/posts_loaf-sharing.md.B6u24F4Z.js",revision:null},{url:"assets/posts_loaf-sharing.md.B6u24F4Z.lean.js",revision:null},{url:"assets/posts_nknan-story.md.sa0Z9qZh.js",revision:null},{url:"assets/posts_nknan-story.md.sa0Z9qZh.lean.js",revision:null},{url:"assets/posts_paddle-pipeline-parallel.md.CxsJxymH.js",revision:null},{url:"assets/posts_paddle-pipeline-parallel.md.CxsJxymH.lean.js",revision:null},{url:"assets/posts_paddleocr-release.md.nG6czfOR.js",revision:null},{url:"assets/posts_paddleocr-release.md.nG6czfOR.lean.js",revision:null},{url:"assets/posts_pfcc-36th.md.CD-R9roG.js",revision:null},{url:"assets/posts_pfcc-36th.md.CD-R9roG.lean.js",revision:null},{url:"assets/posts_pku-course.md.IKAES188.js",revision:null},{url:"assets/posts_pku-course.md.IKAES188.lean.js",revision:null},{url:"assets/posts_pytorch-conference-01.md.y8pz0X_Z.js",revision:null},{url:"assets/posts_pytorch-conference-01.md.y8pz0X_Z.lean.js",revision:null},{url:"assets/posts_sanbu-story.md.BwcXAExP.js",revision:null},{url:"assets/posts_sanbu-story.md.BwcXAExP.lean.js",revision:null},{url:"assets/posts_shun-story.md.uXSUQQcY.js",revision:null},{url:"assets/posts_shun-story.md.uXSUQQcY.lean.js",revision:null},{url:"assets/posts_starter-camp.md.BokqWFIR.js",revision:null},{url:"assets/posts_starter-camp.md.BokqWFIR.lean.js",revision:null},{url:"assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.js",revision:null},{url:"assets/posts_suzhou-kaifangyuanzi.md.DDG_uixm.lean.js",revision:null},{url:"assets/posts_tao-story.md.BYILBNfV.js",revision:null},{url:"assets/posts_tao-story.md.BYILBNfV.lean.js",revision:null},{url:"assets/posts_type-hints-project.md.Db0ywpg3.js",revision:null},{url:"assets/posts_type-hints-project.md.Db0ywpg3.lean.js",revision:null},{url:"assets/posts_wangxin-story.md.B9Kdz5Yd.js",revision:null},{url:"assets/posts_wangxin-story.md.B9Kdz5Yd.lean.js",revision:null},{url:"assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.js",revision:null},{url:"assets/posts_wuxi-kaifangyuanzi.md.CJDJ-Bq5.lean.js",revision:null},{url:"assets/posts_xdoctest-project.md.dN-fbWtt.js",revision:null},{url:"assets/posts_xdoctest-project.md.dN-fbWtt.lean.js",revision:null},{url:"assets/posts_xian-event.md.DaD_lAwG.js",revision:null},{url:"assets/posts_xian-event.md.DaD_lAwG.lean.js",revision:null},{url:"assets/posts_zhangyiqiao-story.md.DLBIaKPb.js",revision:null},{url:"assets/posts_zhangyiqiao-story.md.DLBIaKPb.lean.js",revision:null},{url:"assets/posts_zheng-story.md.tkyMPqZ3.js",revision:null},{url:"assets/posts_zheng-story.md.tkyMPqZ3.lean.js",revision:null},{url:"assets/posts_zuckerberg-letter-post.md.DLLobXDS.js",revision:null},{url:"assets/posts_zuckerberg-letter-post.md.DLLobXDS.lean.js",revision:null},{url:"assets/style.CA8M-uRU.css",revision:null},{url:"index.html",revision:"272bca8ef509dee26eacb10ea54ff3eb"},{url:"pages/1.html",revision:"59f2d0ae8567e81b7e903316bd8c273e"},{url:"pages/2.html",revision:"d6b20167334ed7ebd4b6aa47647e289b"},{url:"pages/3.html",revision:"1a000856de40173729636e93d0e54c42"},{url:"pages/4.html",revision:"dc29d863c7d7fa6b71cd38e2ad9335d5"},{url:"posts/2023-os-report.html",revision:"fd4eb12f50fbb82b5c28e5207c652d55"},{url:"posts/chengdu-kaiyuanshe.html",revision:"95d8d25c15244d16b44e3317a6257e62"},{url:"posts/chuan-story.html",revision:"f3668cd64f9bcb56cd4f8e189ec84e33"},{url:"posts/first-post.html",revision:"474c388dd4d80cf6df5eb14e4fb2e41e"},{url:"posts/hackathon-5th-episode01.html",revision:"c48137c4edfb182fa563be42f91029f4"},{url:"posts/hackathon-5th-episode02.html",revision:"2f123cc34a1b95dcde9fcacae2f44fe4"},{url:"posts/hackathon-5th-episode03.html",revision:"87461b22bec19f926ac755321db7a333"},{url:"posts/hackathon-6th-summary.html",revision:"1bce68235db0609baf15bbdcb47a4427"},{url:"posts/huanggua-story.html",revision:"dc4a57f2b42fc626005046dd570189fa"},{url:"posts/huangjiyi-story.html",revision:"1dbd0c38b24f5403fd2c5918a072d52a"},{url:"posts/ijcai-2024-competition.html",revision:"40d7048a6f55c6c355692e0d405344ef"},{url:"posts/ligoml-story.html",revision:"483859aa680f8c9e8efd48b13438f9f6"},{url:"posts/limin-story.html",revision:"7d7de358fd6164fe4fc88ed136f4d554"},{url:"posts/loaf-sharing.html",revision:"2cf9c3695d15c25d508e4ef8beb22f5c"},{url:"posts/nknan-story.html",revision:"de36b181f43d43ce1f84bb86601fc02a"},{url:"posts/paddle-pipeline-parallel.html",revision:"dd99ab0e1e2f1bacc1a4cc8f18c51e1e"},{url:"posts/paddleocr-release.html",revision:"750d3ed136ffb1bbfce23d94ff7b646b"},{url:"posts/pfcc-36th.html",revision:"86705f8f6b84195b354dfe116b168f1f"},{url:"posts/pku-course.html",revision:"52be177e2837820e7769bd40c06d0f01"},{url:"posts/pytorch-conference-01.html",revision:"3cac24acbfd6006fec694754ac61cc2d"},{url:"posts/sanbu-story.html",revision:"23b466fd28395dbf6a7433cf2889b2c5"},{url:"posts/shun-story.html",revision:"57486a2862db37207c6ee47e83f2ebcc"},{url:"posts/starter-camp.html",revision:"695baf51909c474234be3790e8a7f630"},{url:"posts/suzhou-kaifangyuanzi.html",revision:"d0c327b7074a2c5996c89d848ea52255"},{url:"posts/tao-story.html",revision:"4fc2e4770f03ef4c31231805df01ffb3"},{url:"posts/type-hints-project.html",revision:"727372a3db94ceb0d7fb78a6b4e45096"},{url:"posts/wangxin-story.html",revision:"0e9cfc0353625cb69d01f614b64f94a1"},{url:"posts/wuxi-kaifangyuanzi.html",revision:"c5efcf688d937c54a46b95895a1834fd"},{url:"posts/xdoctest-project.html",revision:"b77c30ae35e8fa6027dd2a5ba901ae51"},{url:"posts/xian-event.html",revision:"4e1bcaffd18b61be008bde30058dbdb6"},{url:"posts/zhangyiqiao-story.html",revision:"f773cd1ee8596ff8c45afc2472ed6c56"},{url:"posts/zheng-story.html",revision:"a1cdef719c0c2773a2c1745846662963"},{url:"posts/zuckerberg-letter-post.html",revision:"ea8ed5afdcd3bccc40ca7e921be2ce97"},{url:"vp-icons.css",revision:"d733f31652df3906ee74264375b31ced"},{url:"icons/maskable-icon-512x512.png",revision:"b540c6d9f398cb87b3baf56342570ba5"},{url:"icons/pwa-192x192.png",revision:"0fb4e162b2a9b5f5925621f526b8a96b"},{url:"icons/pwa-512x512.png",revision:"a7081bf54878f8b558d2306aa8ca3832"},{url:"icons/pwa-64x64.png",revision:"d7568fb849f66efbee8f28a7763667fb"},{url:"manifest.webmanifest",revision:"d6116e4c85c1d87a0e9dd3eefa90def3"}],{}),s.cleanupOutdatedCaches(),s.registerRoute(new s.NavigationRoute(s.createHandlerBoundToURL("index.html")))}));
diff --git a/vp-icons.css b/vp-icons.css
new file mode 100644
index 0000000..d2e0eeb
--- /dev/null
+++ b/vp-icons.css
@@ -0,0 +1,2 @@
+
+/* cannot detect icon mode: not set in options and icon set is missing info, rendering as mask */
diff --git a/workbox-e1498109.js b/workbox-e1498109.js
new file mode 100644
index 0000000..8c012bc
--- /dev/null
+++ b/workbox-e1498109.js
@@ -0,0 +1 @@
+define(["exports"],(function(t){"use strict";try{self["workbox:core:7.0.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:7.0.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class i{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class r extends i{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class o{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:i,route:r}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let o=r&&r.handler;const c=t.method;if(!o&&this.i.has(c)&&(o=this.i.get(c)),!o)return;let a;try{a=o.handle({url:s,request:t,event:e,params:i})}catch(t){a=Promise.reject(t)}const h=r&&r.catchHandler;return a instanceof Promise&&(this.o||h)&&(a=a.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:i})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),a}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const i=this.t.get(s.method)||[];for(const r of i){let i;const o=r.match({url:t,sameOrigin:e,request:s,event:n});if(o)return i=o,(Array.isArray(i)&&0===i.length||o.constructor===Object&&0===Object.keys(o).length||"boolean"==typeof o)&&(i=void 0),{route:r,params:i}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let c;const a=()=>(c||(c=new o,c.addFetchListener(),c.addCacheListener()),c);function h(t,e,n){let o;if("string"==typeof t){const s=new URL(t,location.href);o=new i((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)o=new r(t,e,n);else if("function"==typeof t)o=new i(t,e,n);else{if(!(t instanceof i))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});o=t}return a().registerRoute(o),o}const u={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},l=t=>[u.prefix,t,u.suffix].filter((t=>t&&t.length>0)).join("-"),f=t=>t||l(u.precache),w=t=>t||l(u.runtime);function d(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:7.0.0"]&&_()}catch(t){}function p(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const i=new URL(n,location.href),r=new URL(n,location.href);return i.searchParams.set("__WB_REVISION__",e),{cacheKey:i.href,url:r.href}}class y{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class g{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.h.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.h=t}}let R;async function m(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const i=t.clone(),r={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=e?e(r):r,c=function(){if(void 0===R){const t=new Response("");if("body"in t)try{new Response(t.body),R=!0}catch(t){R=!1}R=!1}return R}()?i.body:await i.blob();return new Response(c,o)}function v(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class q{constructor(){this.promise=new Promise(((t,e)=>{this.resolve=t,this.reject=e}))}}const U=new Set;try{self["workbox:strategies:7.0.0"]&&_()}catch(t){}function L(t){return"string"==typeof t?new Request(t):t}class b{constructor(t,e){this.u={},Object.assign(this,e),this.event=e.event,this.l=t,this.p=new q,this.R=[],this.m=[...t.plugins],this.v=new Map;for(const t of this.m)this.v.set(t,{});this.event.waitUntil(this.p.promise)}async fetch(t){const{event:e}=this;let n=L(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const i=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const r=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.l.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:r,response:t});return t}catch(t){throw i&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:i.clone(),request:r.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=L(t);let s;const{cacheName:n,matchOptions:i}=this.l,r=await this.getCacheKey(e,"read"),o=Object.assign(Object.assign({},i),{cacheName:n});s=await caches.match(r,o);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:i,cachedResponse:s,request:r,event:this.event})||void 0;return s}async cachePut(t,e){const n=L(t);var i;await(i=0,new Promise((t=>setTimeout(t,i))));const r=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(o=r.url,new URL(String(o),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var o;const c=await this.q(e);if(!c)return!1;const{cacheName:a,matchOptions:h}=this.l,u=await self.caches.open(a),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const i=v(e.url,s);if(e.url===i)return t.match(e,n);const r=Object.assign(Object.assign({},n),{ignoreSearch:!0}),o=await t.keys(e,r);for(const e of o)if(i===v(e.url,s))return t.match(e,n)}(u,r.clone(),["__WB_REVISION__"],h):null;try{await u.put(r,l?c.clone():c)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of U)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:a,oldResponse:f,newResponse:c.clone(),request:r,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.u[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=L(await t({mode:e,request:n,event:this.event,params:this.params}));this.u[s]=n}return this.u[s]}hasCallback(t){for(const e of this.l.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.l.plugins)if("function"==typeof e[t]){const s=this.v.get(e),n=n=>{const i=Object.assign(Object.assign({},n),{state:s});return e[t](i)};yield n}}waitUntil(t){return this.R.push(t),t}async doneWaiting(){let t;for(;t=this.R.shift();)await t}destroy(){this.p.resolve(null)}async q(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class C{constructor(t={}){this.cacheName=w(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,i=new b(this,{event:e,request:s,params:n}),r=this.U(i,s,e);return[r,this.L(r,i,s,e)]}async U(t,e,n){let i;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(i=await this._(e,t),!i||"error"===i.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const r of t.iterateCallbacks("handlerDidError"))if(i=await r({error:s,event:n,request:e}),i)break;if(!i)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))i=await s({event:n,request:e,response:i});return i}async L(t,e,s,n){let i,r;try{i=await t}catch(r){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:i}),await e.doneWaiting()}catch(t){t instanceof Error&&(r=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:i,error:r}),e.destroy(),r)throw r}}class E extends C{constructor(t={}){t.cacheName=f(t.cacheName),super(t),this.C=!1!==t.fallbackToNetwork,this.plugins.push(E.copyRedirectedCacheableResponsesPlugin)}async _(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.O(t,e):await this.N(t,e))}async N(t,e){let n;const i=e.params||{};if(!this.C)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=i.integrity,r=t.integrity,o=!r||r===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?r||s:void 0})),s&&o&&"no-cors"!==t.mode&&(this.k(),await e.cachePut(t,n.clone()))}return n}async O(t,e){this.k();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}k(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==E.copyRedirectedCacheableResponsesPlugin&&(n===E.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(E.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}E.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},E.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await m(t):t};class O{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.K=new Map,this.P=new Map,this.T=new Map,this.l=new E({cacheName:f(t),plugins:[...e,new g({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.l}precache(t){this.addToCacheList(t),this.W||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.W=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:i}=p(n),r="string"!=typeof n&&n.revision?"reload":"default";if(this.K.has(i)&&this.K.get(i)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.K.get(i),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.T.has(t)&&this.T.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:i});this.T.set(t,n.integrity)}if(this.K.set(i,t),this.P.set(i,r),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return d(t,(async()=>{const e=new y;this.strategy.plugins.push(e);for(const[e,s]of this.K){const n=this.T.get(s),i=this.P.get(e),r=new Request(e,{integrity:n,cache:i,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:r,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return d(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.K.values()),n=[];for(const i of e)s.has(i.url)||(await t.delete(i),n.push(i.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.K}getCachedURLs(){return[...this.K.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.K.get(e.href)}getIntegrityForCacheKey(t){return this.T.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}let x;const N=()=>(x||(x=new O),x);class k extends i{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const i of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:i}={}){const r=new URL(t,location.href);r.hash="",yield r.href;const o=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(r,e);if(yield o.href,s&&o.pathname.endsWith("/")){const t=new URL(o.href);t.pathname+=s,yield t.href}if(n){const t=new URL(o.href);t.pathname+=".html",yield t.href}if(i){const t=i({url:r});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(i);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}t.NavigationRoute=class extends i{constructor(t,{allowlist:e=[/./],denylist:s=[]}={}){super((t=>this.j(t)),t),this.M=e,this.S=s}j({url:t,request:e}){if(e&&"navigate"!==e.mode)return!1;const s=t.pathname+t.search;for(const t of this.S)if(t.test(s))return!1;return!!this.M.some((t=>t.test(s)))}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",(t=>{const e=f();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter((s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t));return await Promise.all(s.map((t=>self.caches.delete(t)))),s})(e).then((t=>{})))}))},t.clientsClaim=function(){self.addEventListener("activate",(()=>self.clients.claim()))},t.createHandlerBoundToURL=function(t){return N().createHandlerBoundToURL(t)},t.precacheAndRoute=function(t,e){!function(t){N().precache(t)}(t),function(t){const e=N();h(new k(e,t))}(e)},t.registerRoute=h}));