新年日寄,也谈谈过去一年的工作体验

今天是大年初一,在老家除了看代码看美剧也没事干,索性就在个人博客里写写过去一年个人体验。之前在知乎上面发过年终总结,碍于篇幅以及想留点面子,就没有吐槽具体事件。日寄的话就不会像平时博客写的那么有章法,就以时间线回顾,就当听故事罢了。

跑路动机

在oneflow最后那段时期,一方面是远程久了,缺乏交流,加上自己比较宅,有时候遇到难题的时候压力感觉很大;另一方面是疑似被某大厂骗了方案,再加上身边人的一些“玩笑话”,如你这样xxx是没前途的,赚不了钱的(这种话偶尔说说我就当玩笑,当身边一群人那段时间集中说的话,我确实会自我怀疑),有点击溃心里最后一道防线。患上了一段时间抑郁症,干原本喜欢的事情也提不上劲,手臂发抖,睡不着觉,心跳莫名其妙加速,也尝试过看心理医生之类(我觉得没啥用哈。。)。所以最后还是决定不能老呆在家里,出去找个班上,就去了某度的推理框架部门。

给远程上班族的一些Tips:不能老呆家里,一定要多出去走走!!!平常工作可以选在图书馆,咖啡馆,周末也要多和人交流,多多运动,我现在早上不冷我就坚持早上七点半吃完早餐去骑一小时车,或者在家撸铁

大公司初体验

一开始进大厂感觉还挺新鲜的,上班还有人给你按电梯,有食堂,有专门的会议室等等。然而刚进去两周我其实就想跑路了,新人文档缺失;同事对nsys, ncu等常用profile工具似乎都不熟悉;CodeReview很松,大部分人根本没提出真正有意义的comment,我记得刚进来就对一个同事的集成cutlass PR提了20+comment,另外一个同事对此很惊讶,说我是头一个review这么认真的,以往他们都随便看一下就approve了。然而当时我在oneflow已经呆了2年了,提的200+个PR,没有一个是一次过的,好的代码都是review改出来的。

当时心里已经开始对这份工作降低预期了。刚开始接手是做一个Transformer加速的事情,这一个大算子的作者也早就离职,没有留下任何文档,我一眼扫过去,大部分CUDA代码全都是抄FasterTransformer,我当时就在想你代码都抄的是FasterTransformer,你还想比FasterTransformer快,这可能么?后面这事情也是谜一样的糊弄过去了。

到后面我也才发现大厂的高T其实基本不管技术和写代码了,都在拉通对齐业务,这也是我无法理解的地方,不可能所有东西指望工作经验只有1-2年的T3 T4,一些技术没把控对方向往往就会发展成屎山,现在也确实如我所料叠的越来越多。

毫不逊色!

过完年不久,LLM大模型开始火了,我就被叫去北京封闭开发去了。很难绷,又得面对那一个transformer大算子,刚进来不久我已经不知道给领导提了多少次这个算子不可维护,现在看来只是一颗定时炸弹罢了。

2023年有一个草台班子论特别火,这也很符合我搞LLM推理这几个月的感受。写代码,钻研技术的时间其实非常少,大部分时间都在测试,跟业务扯皮。

我无数遍问过自己,我确实是一个写CUDA的高性能计算工程师吧?然而我们大部分日常工作是导出模型,去不同的机器编译推理包,配合服务化测试,测试出了问题QA也不知道什么原因,我们还要ssh上去服务器去查。

最最离谱的是,每次模型上线都整的跟打仗一样,模型效果评估竟然要我们这帮搞推理的去做评测,去给几百条数据推理优化前后版本打GSB。本身推理都开着topp随机性,而且模型参数都有更新,这种东西怎么可能公平比较。再加上客观存在的偏见,我们肯定想着事越少越好,往往还是保证优化过新版本的GSB要更好的。主观客观因素都存在,评这个GSB还有啥意义呢?

随着这个事愈发重要,各个团队也开始产生了利益冲突。大家都想做出新的花活,这可太为难我们推理框架这边的乙方了。一会这个wise那个wise,这个3bit那个4bit,这个量化那个不量化,还没做出来要测试速度,大哥写一个性能好的Kernel哪有那么快?一点argue的余地没有,甚至都没给我profile分析的时间,在如流里还要每天被艾特,我这人最讨厌被人艾特,我特么又不是看不见你信息。再加上那个大OP难以维护的"特性",简直是痛苦。高T只会推进业务上线,不管底下牛马感受,难以获取人心,技术上目光短浅迟早会失败的。

黑化开始

刚去公司没多久,也偶尔会听到一些勾心斗角的事情,朋友有时候也会善意提醒,比较纯真的我也没仔细当回事儿,直到后续这类事件真tm发生到我身上,直接黑化:

英伟达作为好兄弟,也是给我们提供了很多建议,其中针对量化,推荐我们去看下FasterTransformer的weightonly技术。妈的这玩意儿一看前途无量,很快就"借鉴"过来了。作为一个有涵养的技术人,我肯定还是不甘心抄人家代码的,封闭开发那段时间的周末我就在酒店研究这kernel(PS:封闭开发前一个月每周六还要来),这也是后面在知乎最早写了一篇讲解weightonly的博客。

后面领导安排嫡系去优化一个小模型在bsz=1的时延,NV的好兄弟们说可以用GEMV。因为之前有研究过weightonly,所以weightonly int8的gemv很快就写好了。然而领导让我指导这位高贵的嫡系去写weightonly int4 gemv,嫡系之前也没接触过cuda,我就很傻逼的当了个好人前前后后花了2小时给他讲原理,实现,甚至还给他放出了我知乎文章让他看。

好家伙,季度会上嫡系获奖,一行大字,“创新性的提出了weightonly int4 gemv技术”,每次季度会上我一直都写代码的,然后当时坐我身边的同事很诧异的看了我一眼,我当时还没反应过来是怎么一回事,后面才发现嫡系把我们四个牛马做的东西全特么写上去了。

那一晚上回去我立马把2023年写的知乎全删了

后续也给这位嫡系干了不少擦屁股的事情,都给我等着

最没有人情味的一集

自搞这逼玩意儿起,我一直在安慰自己不是最惨的,最惨的还是隔壁起服务的。隔壁领导眼红大模型,便抢了个垃圾服务上线的活过来,好家伙直接把原本的产品整崩了,全员起服务。起服务是上线最后的一环,我也不是很理解为啥一定要在一天之内排上线,各个环节各种delay,导致起服务的牛马们需要半夜三更起床上线服务。后续也干不下去了,那边的领导也不闻不问,无所吊谓,反正他还有其他的团队可以圈地盘。

我深刻体会到这是跟oneflow最不一样的地方,大公司你就只是个牛马而已,多你一个少你一个无所谓,干废一批耗材我再招就是了。在oneflow确实可以让你有发挥的空间,每个人都很重要。

打响跑路第一枪

对整个团队和所做的事情失望累积到一定程度后,我开始思考要不要换一份工作。我妈说我晚上回家脸都是黑的,自我感觉也是,每天都害怕上班,时刻盯着手机,睡觉虽然8小时+,但就是睡不醒,身心俱疲,不是手臂抻到了,就是腰扭了,周末啥事也不想做。

认真面试的其实就只有好兄弟英伟达家,不得不说英伟达面试体验非常棒,面试官会从GPU优化角度一步步引导出实际问题,考察编程,并不是很死板的上leetcode做题。我觉得他们了解我,考的我很到位,我头一次觉得面试非常开心的度过。当时最后还是泡池子挂了,CUDA问题都会,cpp写的太少了。

提出离职

提出离职后,小领导,大领导,经理前前后后找我谈话了四次,各种画饼,我这人对什么职级薪酬真的无所谓的,干的不开心,做的事情自己不认可,我就是干不了。我想着好聚好散,提离职前还被派了一个长序列推理的活,我那几周都没有摆烂(妈的隔壁组人提完离职真的是放飞自我了),还加班加点的留文档写代码。本来我可以直接摆烂休年假的,但我没有。

后面谈话一直想让我拖一会离职时期,但我真的是一天都忍不了了。直到最后我才知道他们不是单纯想留我,而是因为没有人力,想让我跟完长序列服务上线,当时只是完成了这一个功能,我真是草了,这做人能这么自私?

到最后定了lastday后,我想请两天年假,小领导给我来了句:你不是说你不请假的吗?,真的,黑化到极点了,我很确信我对这团队没有一丝留念。

回流

回到最初最熟悉的公司感觉还是最棒的,我还是归属于老大管,请记住,我口中的老大永远只会指代辣个男人,它是最有技术魄力的人。回来还是先补齐了新推理框架缺失的量化加速功能,这一个月很快啊,weightonly,smoothquant,对称非对称一个人搞定了,还包括调优,profile也足够充分,工作效率足够高,没人跟我扯皮了,我们是专业团队。

我会用行动去让草台班子们后悔的