专访 | openEuler麦艮廷:勇于踏出第一步

2023/11/29 18:40
阅读数 21

本期采访人物是开源之夏 2023 活动 openEuler 社区中选学生麦艮廷同学,他所承担的项目是 A-Tune 识别应用场景及动态推荐调优参数

# 关于麦艮廷

openEuler 请简单介绍一下自己。

麦艮廷:大家好,我叫麦艮廷,是中山大学计算机技术专业22级的一名硕士生。日常主要使用 Python和Java进行开发,研究方向是性能调优和微服务系统智能运维。

openEuler在此之前,你有过哪些项目开发和开源经历吗,这些经历为你带来了什么。简单介绍一下你一路走来的心路历程吧?

麦艮廷:本科期间曾多次作为团队负责人参与学科竞赛和科研项目,曾获得超50项省级以上竞赛奖 ,包括互联网+国赛银奖、计算机设计大赛国赛二等奖等奖项。同时,也作为项目负责人完成过   四项科研项目,目前有两项发明专利、五项软件著作权。也作为公益机构的技术负责人带领团队开 发公益智能伴学系统,目前已累计用户超1万人。期间也有过很多挫折,我是大学才接触编程,尽管起步较晚,但我勇于尝试,让编程成为我探索未知领域的桥梁。每一个错误,都是前行路上的一 次贵重经验,每一次挑战,都是通向成功的必由之路。在追逐梦想的道路上,我不断告诫自己:勇往直前,迎难而上,只有在风雨过后,才能见彩虹横空。 

参与开源和开源之夏

openEuler 在参与开源之夏前有接触过开源吗

麦艮廷:之前也有过一段开源经历,在2020年疫情期间与3个同学在3天的时间里一起开发了一个 社区来访人员登记系统,并开源在gitee上https://gitee.com/kenny_chan/tcb_hackthon_memory】,但这只是一个小小的开源尝试,后面 也没有继续维护。

openEuler 最初是如何了解到并决定参与开源之夏活动的?

麦艮廷:我是2022年9月才了解到开源之夏活动,当时在B站上看到一位UP主分享了他参与这一活 动的经历,让我深感这是一个融入大型开源项目的绝佳机会。然而,当时已经错过了报名截止日期,于是我一直保持对开源之夏 的关注。今年活动一开启,我迅速行动,开始着手准备报名。在 报名过程中,我注意到去年参加全国大学生计算机系统能力大赛时选择的赛题与A-Tune项目相关,而性能调优正是我研究生期间的研究方向。因此,我果断地联系了项目导师,并撰写了一份详实的申请书进行报名,幸运地获得了成功的申请资格。

openEuler: 请简单介绍一下你在本届活动中承担的开源项目,在开发过程中有什么印象深刻的经历么?

A-Tune 识别应用场景及动态推荐调优参数


A-Tune是一款基于AI的操作系统性能调优引擎。  A-Tune利用AI技术,使操作系统“懂”业务,简化IT系统调优工作的同时,让应用程序发挥出色性能。当用户需要调节一款软件的性能时,可能出现如下情况:用户只了解当前软件的参数功能和数值范围,对内核态参数   不了解,无法给出内核态参数的调优范围。本项目期望新增功能: 1.根据调优软件类型,识别当前应用场景; 2.根据应用场景识别的结果,向用户推荐需要调优的内核态参数。


项目链接: https://summer-ospp.ac.cn/org/prodetail/23b970468



麦艮廷: 我在本届活动中承担的开源项目是A-Tune 识别应用场景及动态推荐调优参数,项目导师  是张桶老师。我需要根据调优软件类型识别当前应用场景,并向用户推荐需要调优的内核态参数, 在这过程中遇到了不少挑战。

(1)根据调优软件类型,识别当前应用场景

在进行模型训练前,必须完成多个软件数据的收集,并对数据进行特征工程。我使用A-Tune自带的数据收集命令,确保了数据采集的顺利进行。由于我在虚拟机中部署A-Tune,在收集数据时无法获取到perf数据。查阅相关资料后发现,确实有部分硬件环境无法收集到perf数据。因此,我增加了自动识别是否可用perf数据进行训练和识别的功能,以提高训练效率。接着,原本A-Tune已支 持对应用场景进行分类,但存在一个问题,需要先识别出工作负载类型,再对应用进行分类。为提高准确率、减少由于识别错误导致的应用场景错误分类,与张桶老师商讨后,决定将工作负载识别 与应用场景识别分开。

识别应用场景架构图

A-Tune的分类器包括随机森林、SVM、XGBoost三种。为进一步提高分类准确率,我引入了高效、 高准确率的Deep Forest方法。该方法具有多个功能,但在我们的场景中,仅需要进行分类。为了   让其更易使用,且不需要引入额外的包,我根据开源代码和相关论文重新实现了Deep Forest分类   识别方法。在重写的过程中遇到很多问题,虽然能实现一样的效果,但是训练和推理的速度较慢,  经过多轮修改测试,最终达到与源码几乎一样的性能。

同时,张桶老师建议新增负载瓶颈识别功能。在完成这一功能的过程中,我发现机器学习方法需要 大量的标记数据、计算资源和推理时间,而且模型的泛化能力和可解释性相对较低。相比之下,基 于规则的方法更直观、适应性强,计算效率高,且具有高可解释性。因此,我通过规则判断是否存 在计算、内存、网络、网络I/O或磁盘I/O瓶颈。为了便于可扩展,我编写了可扩展的代码,后续只  需在 "init" 方法中新增相应的指标即可进行扩展。为了方便用户修改國值,将相应的國值存   储在A-Tune/misc/engine.cnf中,作为A-Tune配置参数的一部分,用户只需修改该文件的值即可实 现自定义國值。

指标國值配置文件

(2)根据应用场景识别的结果,向用户推荐需要调优的内核态参数

在进行静态profile调优开发过程中,面临了一项具有挑战性的任务:实现Go和Python应用的联调。由于项目中没有为每个文件提供详细的代码解释,因此我花费了大量时间在源码的阅读和分析 上。通过搜索引擎以及GPT的辅助,我解决了这一问题,深入理解了代码逻辑和结构,为调优工作 打下了坚实的基础。同时,我发现现有A-Tune仅提供了对内存、网络、  I/O瓶颈的profile,而缺乏  针对计算瓶颈的profile。为了更全面地满足性能调优的需求,我查阅相关资料,并编写了专门针对 计算瓶颈的profile。最后完成了调优功能的开发。

此外,考虑到并非每个用户都需要使用负载瓶颈识别功能,我通过编写Go服务端代码,将新功能 接入到 atune-adm analysis #bottleneck ,通过 #bottleneck 这个新的flag来控制是 否开启负载瓶颈识别功能。这样,用户可以根据自身需求选择是否启用该功能,提高了A-Tune的 灵活性和用户友好性。

分类识别与参数调优效果图

openEuler作为学生如何发掘自己的兴趣方向?

麦艮廷: 我觉得可以通过积极参加各类比赛来拓展视野。在比赛中,我们有机会深入了解不同方向的细分,如前端、后端、  AIOPS、云原生等,通过完成项目流程,可以更全面地了解各个方向的工  作流程和挑战。这有助于找到自己真正感兴趣的领域。除了参加比赛,积累实践经验同样至关重要。参与实际项目或加入实验室研究,可以提供更深入的实践机会,让我们亲身体验不同领域的工 作。这不仅有助于理论知识的实际运用,还能帮助我们更具体地感受到不同方向的魁力,从而更好 地确定自己的兴趣点。

openEuler 许多学生对参与开源项目感到畏难,觉得这是一个高难度的任务,你有什么想给大家分享的吗?

麦艮廷: 起初,我也觉得无法为开源项目贡献代码,因为看到这些项目的代码都非常规范化,结构 复杂,而且行数庞大。然而,正是因为这些挑战,我们更应该参与其中。通过参与开源项目,我们 可以提高自己编写规范、清晰代码的能力,同时锻炼项目开发的能力。虽然开源项目的代码量可能很大,但一般并不难读懂。通常会有详细的开发文档或者代码本身就有清晰的注释。即使没有注释,代码也是按照规范编写,逻辑清晰可辨。此外,参与开源项目还有许多好处。首先,能够学到 如何与其他开发者协同工作,了解团队协作的重要性。其次,通过向开源项目提交自己的代码,我 获得了宝贵的评审和反绩。项目导师和其他开发者的审查帮助我改进了代码质量,学到了更好的编 码实践,并了解了项目的最佳实践。这种及时而专业的反绩不仅提高了我的编程技能,还加深了我 对项目的理解,使我在不断优化的过程中不断进步。我的经历也是如此。开始时,我对开源项目的 复杂性感到担忧,但当我踏出第一步后,发现社区是如此热情,项目是如此有趣。在张桶老师的悉 心指导下,我很快熟悉了项目代码,对自己的任务有了清晰的思路。提交了第一个PR并成功合并后,那种成就感让我充满动力,鼓励我积极地提交更多的PR。在这三个月的开源参与中,我提交了 8PR,共计新增763行代码。因此,我鼓励每个学生都积极尝试参与开源项目,这是一个很好的学习机会,能够让你在实践中提高技术水平,结交志同道合的伙伴,同时也为自己的职业发展打下坚实基础。

openEuler 可以看到你之前的开发经历是很丰富的,那么对于一个有经验的开发者来说, openEuler社区是否与其他开源社区有不同之处呢?

麦艮廷: 这是我第一次参与开源社区的开源项目,不过在我看来,  openEuler 社区展现出一种独特  的生态多样性和广泛的布局,为开发者提供了一个充满无限可能性的空间。社区的繁荣生态链、丰富案例以及详实文档,无一不展现着对开发者极为友好的态度。不同于其他社区的地方在于,openEuler 对高校学生的培养十分用心。社区积极参与与高校相关的开源活动,这不仅对学生本身是一种鼓励,也为社区注入了更多创新的动力,使其生机勃勃、充满活力。这种注重培养新一代开 发者的理念,使得 openEuler 社区在开源世界中独具特色。在我完成项目的过程中,有很多没有想 明白的问题,也很幸运遇到张桶老师,导师的指导让我能够顺利完成项目,感谢开源之夏和openEuler 社区给予我这样一个机会。

openEuler 这次你承担的开发项目与以往是否有什么区别呢?

麦艮廷: 这次我所承担的开发项目与以往的有明显的区别。在项目规模方面,过去的项目通常是小型的,开发合作者不超过6,而这次的项目涉及到更多的开发者。这让我更深入地运用Git,以有 效管理版本控制和团队协作。过去的项目代码量相对较小,通常只有几千行。而在这次的开源项目 ,我面对更大规模的代码库。对于复杂的代码逻辑,我需要更深入地理解系统架构和设计,以便 更有效地进行开发和调试。

openEuler 你认为有经验和没有经验的开发者分别该如何利用好openEuler社区呢?

麦艮廷: 对于有经验的开发者,可以根据个人兴趣或专业领域,在openEuler社区寻找相关的SIG(Special Interest Group)并积极参与。在SIG,参与技术讨论,分享个人见解和最佳实践,以   提高整体代码质量。在处理项目开发任务时,不要局限于导师所给的技术路线,还可以创新地思考 更深层次的改进,使系统功能更为完善,同时优化系统性能。对于缺乏经验的开发者,可以充分利用openEuler社区作为学习平台。在现有的SIG中找到感兴趣的 项目,深入阅读代码,积极参与讨论,了解并应用最佳实践,并向有经验的开发者请教问题。从解 决简单的问题和贡献小功能开始,逐渐熟悉项目的结构和工作流程。同时,积极参与社区活动,并 提出问题,以便更深入地学习和融入社区。

openEuler我看到你多次提到张桶老师对你的指导,可以举例谈谈你们是如何沟通项目的吗?

麦艮廷: 我会先根据张桶老师给的任务,先跑通流程。在遇到问题时,使用搜索引擎和GPT等工具 寻找解决方案。如果试了所有解决方案都没有解决,我会记录下遇到的问题和试过的方法,积累几个问题后再把进度和问题一起跟张桶老师讨论。如果有一些新的想法,也会先查阅相关文献,进行 一些初步实验,并列出对比数据,再与张老师沟通确认是否可用于项目中。一般一周讨论1-2次,这种问题集中式的讨论可以提高沟通效率,及时解决遇到的问题。

# 寄语

openEuler 前面讲到你有很多竞赛和项目开发经历,那用到的技术都是你自学的吗,还是高校 老师的教学内容?学生应该如何自学更好地适应实际需求呢?

麦艮廷:是的,大部分技术我都是通过自学获得的。在各种竞赛和项目开发中,所需的技术涉及到多种语言和平台,包括C++、Java、Go、JavaScript、 Python等。学校提供的课程主要教授了基础知识,而具体的开发实践则需要我们通过不同的途径进行学习,比如阅读开发文档、参考书籍、观看在线视频等。以下是一些关于提高自学能力的建议:

1. 明确目标:在自学的过程中,明确自己的学习目标非常重要。这有助于更有针对性地选择学习 资料和项目,确保学到的知识和技能能够真正应用到实际中。

2. 项目驱动学习:尝试通过实际项目来学习新技术。这不仅能够提高学习兴趣,还能够锻炼实际 问题解决能力。比如,参与开源项目、做一些小应用或者解决实际生活中的问题。

3. 主动实践:学到的知识要通过实践来巩固。写代码、构建项目、参与实际开发是提高技能的有 效途径。并且,在实践中遇到问题时,通过主动搜索解决方案,可以更好地理解和记忆知识。

4. 交流与合作:加入技术社区、参与线上或线下的技术活动,与其他学习者和专业人士交流,分享经验。这有助于拓宽视野,获取更多学习资源。

openEuler 在大学,你觉得最重要的事情是什么呢?有没有一些建议可以给学弟学妹们。

麦艮廷:我觉得最重要的事情是勇于尝试。我初高中基本没有参加过比赛,大一时看到很多比赛的 要求都觉得自己去参加也不可能拿奖。后来在老师和师兄师姐的鼓励下,大胆迈出第一步,刚开始 参加比赛时基本拿不到奖项,说实话当时有点气馁,但我依然不放弃,继续积极参加比赛。到了大二,基本上参加的比赛都能够获奖,并且能够感觉到个人自学能力得到显著提高。同样,参与开源 项目也并非想象中的那么遥不可及。找到自己感兴趣的项目,保持对社区和项目的持续关注,尝试 解决一些简单的问题。  一旦踏出了第一步,你会发现开源世界并没有想象中的那么艰难。因此,我 建议学弟学妹们勇于尝试,不要给自己设限,相信自己的潜力是无限的,勇于抓住眼前的每一个机会,同时要善于总结与反思所做的事情,并不断为自己树立小目标,一步一个脚印地追寻自己人生 的星辰耀光。

本文分享自微信公众号 - openEuler(openEulercommunity)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部