转行只有0次和无数次

大家好,我是大师兄。最近在星球群里面,很多人都在讨论转型话题,今天分享一个大佬转型之路,各位可以看一看,有没有值得学习的地方。

之前星球直播也分享过这个话题2024年度总结答疑

a58b7d16fbe33b67b93b5a7c1a373466.png

原文

上周,我被邀请到一家公司去分享我的职场经历和最近一年做大模型的感受. 想着既然都花时间准备了PPT, 那还不如顺手写成文章再分享一波. 我一直相信经历的多样性也能让社会产生多样性. 希望我的分享能够让大家去尝试一些非常规的职业路径, 因为我的经历大概率会被HR当成反面教材, 关键词包括裸辞, 多次转行.

故事线

在过去八年的职业生涯里面, 我的转行(职业转型)主要发生了3次.

  1. 从机械工程转型成Data Scientist

  2. 从Data Scientist转型到ML Infra Engineer

  3. 从ML Infra Engineer转型去训练大模型

我会按照时间线来分享我的经历, 以及提供一些当时转行用的学习资料.

从机械工程转成Data Scientist

我的本科和研究生读的都是机械工程(Mechanical Engineering), 第一份工作虽然Title是软件工程师, 但工作内容还是延续了我研究生时期的研究, 给Matlab写Toolbox. 比较值得分享的一件事情是, 我当初是通过QQ群来找到第一份工作的. 研究生期间, 因为想跟更多同行交流, 就加了各种控制理论的群. 在其中一个群认识了控制大佬姜老师, 就勾搭上了, 然后通过他的推荐拿到了面试. 有时候, 大家会认为社交一定得是"有意义的". 但没有功利性的社交也许会带来意料不到的惊喜.

在加入第一家公司之后, 我发现Data science火得飞起. 偶然间, 我发现了Kaggle这个平台. 当时, Kaggle虽然用户已经挺多的, 但认真去打比赛的人还是不多. 印象中, 我打的第一个正式比赛是Bosch Production Line Performance. 想着自己好歹也是学机械工程的, 总得有些优势吧. 结果当然是被现实啪啪啪打脸. 但通过打这个比赛, 我感受到了处理数据的乐趣, 也开始体会到算力的重要性.

因为已经开始工作了, 手头上有点闲钱, 咬咬牙就买了一块Nvidia 1080和各种配件DIY了一个深度学习工作站. 我当时对硬件一窍不通, 但通过研究PCPartPicker和Youtube各种视频, 顺利把机子装起来了.

ba2253e31e99ff86691b2b41e3ffd63c.jpeg
我组装的第一台深度学习工作站

有了武器之后, 我就有条件参加一些Computer Vision的比赛. 当时我的代码能力和深度学习的能力都很弱, 还处于只能把Caffe版本的Faster RCNN编译跑起来, 改改配置文件的阶段. 但我一直相信最高效的学习方法就是动手做起来, 再顺便把需要的知识补全. 于是, 我参加了第二个比赛The Nature Conservancy Fisheries Monitoring, 训练一个模型去检测鱼的种类. 由于参与得比较早, 我很快就冲到了前10名, 从中获得了很多正向的反馈, 这让我坚持到了比赛的最后. 在学习一个新的领域, 不要想着一下子成为行业专家, 也不要迷信权威资料, 先尝试找到正反馈, 才可能坚持学习下去.

在2017年, 只要你在一个Kaggle比赛坚持到底, 拿一个铜牌不是问题; 只要你能把论坛提到的线索整合起来, 就能拿一个银牌; 而要拿金牌, 一个是靠命, 二是去找到别人想不到的线索. 在比赛的那几个月里面, 我在全职工作外, 每天都花4个小时去做各种尝试, 包括:

  • 读各种物体检测的论文, 并找相应的开源代码 (因为以我当时的水平, 实在是写不出来)

  • 坚持每天睡前开启模型训练, 早上起来分析一波结果并且开启下一轮训练. 等我下班回来, 又有新的模型可以分析了

  • 分析模型预测失败的情况, 做数据增强然后看有没有效果, 并且在网上找鱼类相关的数据

  • 重装系统, 重装CUDA (有自己服务器的都懂的)

  • 补充机器学习的基础知识, 主要啃ESL (Element of Statistical Learning)和MLAPP (Machine Learning - A probablistic perspective)

最后, 我在这个比赛顺利拿到了一个金牌, 之后的半年里面又陆陆续续参加了好几个比赛, 学习了XGBoost的打开方式,也通过打NLP比赛学习怎么处理自然语言.后面的这些比赛,我参与的强度就降下来了.正如我说的,只要能够把论坛上的信息整合起来,就能冲到银牌区.在这半年里,我拿了好多个银牌.

因为工作比较闲,我的内心又开始蠢蠢欲动了,想尝试一份正式的Data Scientist工作.当时我的本职工作是设计预测性维护的算法(就是预测一台机器什么时候会坏). 所以我一直都在关注这个领域的发展.当时恰好看到一家芝加哥做工业互联网的Startup招DataScientist,面试官曾经也在Kaggle拿过金牌. 我做Predictive maintenance的经验也非常相关, 于是很顺利拿到Offer,就屁颠屁颠跑过去芝加哥了,正式成为Data Scientist.

从Data Scientist转型到ML Infra Engineer

我刚去Startup还没到一个月, 公司就开启了裁员模式. 真的是天有不测风云. 当时我刚刚拿到H1B工作签证, 一旦被裁只有30天的时间去找到新的工作 (后来这个grace period被延长到了60天). 我听到裁员的消息心里也是日了狗, 毕竟上一家公司可是2008年经济危机都没裁过人的. 第一次跳槽就给我来这种刺激.

但事情都发生了, 还不如赶紧行动起来. 下定决心要跑路之后, 我投了不少Data Scientist相关的工作, 快速过了一遍All of Statistics: A Concise Course In Statistical Inference就上阵面试去了. 基本上都是全军覆灭, 尤其是那些要求A/B Testing的工作. 当时非常天真得以为只要能搞懂Two-sample T-test就能搞定面试, 最后被现实狠狠打脸了.

恰好当时有身边的同事去了Google, 给我指了条明路. 那个时候, 入门级别的工程师只需要刷Leetcode就行. 既然这个面试流程都已经标准化了, 那我还不如直接冲一把.下班回来基本上所有的时间都花在了研究算法题 (我上班还是很认真的,也会尝试用学到的算法去优化代码, 一举两得). 这么搞了两三个月之后,就海投了一把各种公司, 最后成功上岸了Google. 那个时候的美国经济还是欣欣向荣, 大公司都在疯狂扩招, 也算是赶上了一波时代的红利.

84429e15e0cd55b392255be7bf555742.jpeg
按照Tag去刷题

拿到offer之后, 需要等Google的工作签证办下来. 当时, 公司里面还有别的同事还在准备面试. 我心想反正也有点空, 那不如帮助一下大家, 毕竟都不容易. 于是我自己想了不少机器学习相关的面试题, 另外一个同事每天中午都订了一间会议室, 我们就边吃午饭, 边讨论各种面试题. 我记得有一天我们刚讨论完, 还没擦白板, Engineering Director走进来开下一个会议. 我就赶紧上去把白板擦了, Director看着我擦完白板, 微微一笑. 我记得这个Director在我走的几个月后, 也跑路了.

在这次转行, Leetcode is all you need. 我其实也尝试去准备系统设计相关的面试, 读了一下那些经典的分布式系统的论文, e.g. BigTable, MapReduce. 每个字都看得懂, 但连起来看得我云里雾里的. 后来, 在工作中开始自己设计系统的时候, 再回来读这些论文, 就是另外的感受了. 系统设计这件事情, 真的就是实战出真知. 如果没机会去设计一个有足够复杂度的系统, 很难体会到那些论文里面的精妙之处.

顺利入职Google之后, 才发现要学的东西实在太多了. 举个例子, 我刚进去Google的时候,连Protobuf是什么都不知道(虽然Caffe也用了Protobuf), 也没用过Python type hint. 除了算法和数据结构, 我对软件工程基本上是一无所知. 但还好, Google是软件工程师的蓝翔技校, 里面有无数的设计文档可以阅读. 我当时在的部门叫Cloud AI, 算是Google里面比较卷的一个部门. 我的Mentor跟我吃饭的时候, 私下跟我说”你看哪个部门亚裔最多, 哪个部门就是最卷的”.

9539c0092db6a649e67aaf3966229a1c.jpeg
在谷歌云做的Feature Store产品

那个时候, 我还没娃. Google对新入职的员工也比较宽容, 我就边看内部的文档, 边看一下公开课去补充自己计算机科学的基础. 我印象中比较好的外部资料包括:

  1. Design Data Intensive Applications

  2. CSAPP (Computer Systems: A Programmer's Perspective)

  3. Andy Pavlo的Database Systems

  4. Database Internals

  5. 经典的分布式系统论文, e.g. BigTable, Spanner, Dynamodb, Spark, …

  6. 不同公司的Engineering Blogs

当时我还发现一件事情, 其实很多Engineers对机器学习算法和基础的统计是不懂的, 导致设计出来的工具看着很别扭, 或者工程味道太浓. 如果能够在ML能力和工程能力都达到一定深度, 是可以看到两边的结合点的. 可惜我当时的级别不够, 就算看到了机会, 也没有能力去真正推动一些事情. 对于Google这样的大型组织, Junior engineers的主要任务就是Execution, 而知识的广度需要在更高的级别才能产生出对应的威力, 因为知识的广度有助于连接不同的团队.

在意识到这点之后, 我在Google待了两年半就离开了, 去了一家高速成长的互联网金融公司. 在我去的时候, 这家公司的ML Infra基本上是0. 所以有了一个从0到1搭建起整套ML infra的机会, 也有了更多对公司这种组织结构的理解. 在一个能够给到很多试错空间的环境, 我有很多收获, 包括:

  • 每周面3~4个候选人, 持续了快半年. 可能没到百人, 但也快了.

  • 观察到一个组织的韧性, 当时公司经历了GME这个大的风波, 但整个组织在两周后就稳定下来了.

  • 在三次裁员中存活下来了, 心理承受能力得到了很大的提高

  • 在跟隔壁组的斗争中抢到了一个项目. 无关对错, 只是为了在经济下行的时间, 尽量保住自己的团队.

在这段经历里面, 我了解到从一个小白成长为一个还不错的工程师, 大概是需要3~4年时间的. 在工程问题以外, 人的问题往往是更加复杂的和不可预测的. 而处理跟人相关问题的能力, 是工程师成长到Senior+之后的一个重要的维度.

从MLInfra Engineer转型去训练大模型

首先, 当初我去做ML infra一个原因是觉得模型架构方面的进展不是特别明显, 短期内好像不会太多的突破. 当然, 后面ChatGPT的出现说明了我的判断是多么得不准确. 对于身处研究一线的同学, 应该能有更好的判断. 因为GPT-1, GPT-2, GPT-3的进化是一步一个脚印慢慢做出来的.

后面为什么我会选择从ML Infra转型去做大模型呢? 其实最早让我萌生这个想法的是2022年9月份发布的Stable Diffusion. 那个时候, 我才猛然意识到, 原来生成式模型已经能做到这个效果了. 我一直埋头做Infra, 也没有太多关注模型方面的进展. 接着, ChatGPT发布了, 能够更加直接跟它交互, 直到今天, 我依旧觉得非常惊艳.

2512fa49f7d6d4102dae1077a4b3ff7a.jpeg
当时做的Text-to-SQL产品

当时, 公司内部有很多人也非常兴奋. 作为这个公司唯一的ML Infra团队, 我自然能找到机会去尝试在产品里面落地. 我自己也在业余做了个Text-to-SQL的项目, 通过不断调用OpenAI的API, 去理解大模型的运转规律和限制. 我虽然发现了大模型的很多缺陷, 但这不影响我内心的兴奋.

可惜,当时我在一家互联网金融公司,90%有价值的机器学习应用都在Fraud Detection (欺诈检测). 而大模型领域每天都在发生翻天覆地的变化, 我在那段时间一直都觉得自己在浪费生命. 于是, 我裸辞了, 可以花更多时间无干扰得学习相关知识. 这里友情提醒: 裸辞一时爽, 医保需谨慎. 如果你在美国工作, 裸辞之前记得要想好医疗保险怎么弄. 如果你的另一半有正式工作, 可以让另一半把你加到医保里面.

HR看到这里, 大概率会觉得这个人是不是有毛病. 我的想法是, 如果这波大模型会对社会产生深远的影响, 我一定要去理解大模型里面的机理, 不然我会觉得用着不够安全. 而且我会很担心最强大的模型只掌握在一家公司手中, 这家公司可以决定谁能用, 谁不能用这项技术.

在学习大模型的过程中, 我的主要学习资料就是各种Papers. 在之前的工作里面, 我一直都有保持读paper的习惯, 这个习惯能够让我不害怕直接从paper里面学习新的知识. 另外一个好的学习资料就是大模型部署框架, e.g. llama.cpp, vllm. 虽然没办法去真正训练一个大模型, 但我们可以从部署框架打开大模型的黑箱, 去看看里面是怎么一步一步计算出来的.

最后的最后,就是上岸了一家硬核做大模型的公司,团队里面的人都非常Solid.和同事交流是一个很有效的学习方式,一来可以互相印证各自的想法, 二来可以交流分享看到的论文. 在我现在的公司, 终于有机会亲手去炼一个好的大模型, 对内在的机理也有了更加深刻的理解.

Finally

我过去八年的故事就讲完了, 有几点收获吧:

  • 不要用所学的专业限制自己, 保持好奇心

  • 知识的广度可以是很好的工具

  • "无用"的社交也许会带来意外的收获

欢迎加入极客星球

  • 修炼基本功(职业发展基础):分享多年基础技术深度理解,基础概念深度解析,经典书籍推荐和读书分享(一起带领大家精读几本好书,解决书中疑问,读一本相当别人读十本),经典源码阅读分享等,不定期直播分享和答疑解惑;

  • 扩展技术和商业视野(认知和视野):分享热门技术发展,国内外大厂技术内幕,建立国际化视野,业界解决方案;

  • 校招/社招免费就业指导(找到好工作):大厂offer,校招学习路线,模拟面试,简历修改,面试题分析,学习路线就业指导,面试高薪工作指导,大厂内推等;

  • 职场普升/技术专家(职场发展):分享各种不同公司宝贵的职场普升经验,技术方向选择, 大厂普升经验,技术专家成长经验,让你少走几年的弯路;

  • 专属高质量VIP交流群(人脉圈子):技术趋势,技术热点,分享学习心得,技术学习讨论,技术难题分享,群里有已经在各个大厂(腾讯,字节,阿里,百度等)的同学和前辈,找到属于自己的圈子,相互请教和学习,工作好机会内推和推荐,大厂职位内幕等等;

    硬核深入理解系列PDF资料:

  • 深入理解计算机系统

  • 深入理解操作系统(调度,内存,网络,IO)

  • 深入理解并发技术全景指南

  • 深入理解编程语言

  • 深入理解算法与数据结构

  • 深入理解网络协议

  • 深入理解网络编程

937fe11973200eb0d698d4649f3c7138.png

极客星球:深入理解网络编程

  • 深入理解性能优化  (进大厂,升级高级工程师的核心能力)

  • 深入理解分布式技术(互联网大厂必备核心技能)

  • 深入理解数据库

  • 深入理解代码设计

368e6fb3c82ee9b8f10f6d5fd9601cc7.png

  • 深入理解架构设计

详细了解:成为优秀的自己  ,现在加入超级优惠,早点加入一起学习成长,早点突破成长瓶颈:

3c4d4d2bc849a4f43b85a6d9038e7ddb.png

  坚持干货内容,专注高薪就业,专注持续成长,欢迎大家关注极客重生  

感谢大家在看,转发,点赞b46351d08143cd31152b9e466c50a824.png

2024年度总结答疑

2025最新大厂薪资地图

技术面试的底层逻辑

编程语言技术全景指南

数据库技术全景指南

深入理解代码设计精华指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值