0%

微软实习总结

Microsoft SDE Intern

  今年7月,我入职了微软苏州的Bing Ads团队,在Data组当实习生。我们组主要负责两个任务,一个是BingBot Detection,一个是集群Job Schduler的管理。

背景:

  Bing搜索引擎每天都会收集TB级的用户信息,这些信息将被用来改善Bing的搜索结果,广告的精准推送等。但是集群资源的数量有限(约16万个token,每个token是2核),而每天大约有6000个jobs需要运行,且需求不断增加。因此,如何合理地分配token给不同的job,是一件需要投入时间的事
  当前的做法是设定了一些rules,根据这些rules分配给不同job优先级,当有空闲的token时,根据job的优先级高低送入Cosmos集群执行。在设定的rules中,jobs通过name pattern获取其信息,Ares会从跟节点遍历AU子树(重要的AU一般跑重要的任务,树的高低和priority x对应),然后当前的AU有空闲了,就把job塞进去。这样下去的结果就是重要的job一般都会占满AU,而那些不重要的job,如非我部门的同事想要看一点点数据,因为在rules中这样的行为被定义为不重要,即便是它只占用个位数的token,都有可能需要排队一天以上。这样的Scheduler 能够满足当前工作的大部分需求,但是仍然不够科学。
  总而言之,我感觉这很像是供应链的工作。而我的任务就是利用机器学习的模型代替Ares的调度工作。尝试舍弃到rules,通过自己的模型对job的优先级进行预测。这样更具有灵活性,当发现问题时,可以灵活地通过改变训练集中的优先级重新训练一遍模型。
  任务听起来比较简单,但是在工业界中的实现远不像在实验室中调参那么单调。流程应为:

  1. 了解业务逻辑,尽可能全面地覆盖各种类型的job,
  2. 根据job的数据进行特征分析,提取期望的特征
  3. job进行label
  4. 训练,调参
  5. 测试
  6. A/B Test

  这里的每一步看起来都很简单,我起初甚至认为高中生都可以完成这些事。但当你真正沉下心去做的时候,才会发现需要考虑的细节实在是太多了。我需要花大量时间了解业务逻辑,思考怎样的job的优先级应当更高。比如占用token数少的job,但是预估的时间可能长,而占多token数多的job,预估时间很短,当然,这个可以通过求E值来抉择,但是如果是一个priority x高的job,但是占用了大量token,和一个priority x低的job,占用了一点点token。这两个job应当谁比谁高?选priority_x高的那个?为什么?我需要弄明白这个jobpriority_x为什么高,不同级别的priority_x究竟意味着什么。当然,这只是众多特征中的一个特征。
  最后完成了对约2000个job的数据标定,并检查了几遍,然后进行训练,因为模型简单,而且大部分的特征都是categorical类,因此树状的模型是我的首选。在使用了Random Forest发现泛化的结果非常不错,MAE约为2,数据的均值为100。

测试

  完成建模,我又从数据库中提取了500个job交给我的模型预测优先级,结果大量job的优先级并非理想,发现很多的问题没有考虑到,模型的排序还有很多问题。于是只能重新思考业务逻辑,重新label。这样重复的工作做了许多,会觉得没有什么收获,加上和mentor的沟通不是很顺利(我的mentor是principal manager,太忙了…)。这段时间我感觉工作不是很充实,没有什么技术上的进步。不过现在看来我的收获还是挺多的,至少知道了工作沟通不是一件很简单的事,而且未来大部分的工作也许是一样的,也算是提前做好了心理准备。

A/B Test

  评价Scheduler的指标除了之前的优先级之外,还有集群的空闲率(集群有资源空闲的时候,队列中不应该还有阻塞的job,集群无空闲时,不应该有重要的job排在后面)。因为mentor太忙,组内的同事基本都被借调到其他组做别的项目,没有人能够落实这项任务上线进行测试。因此在实习的最后半个月,在完成了模型之后,我又花了一个多星期写了一个模拟的Cosmos系统(模拟有一个服务器集群,只不过并没有真的内存和时间,使用我当前设计的scheduler,然后从数据库抽出最近两天时间内提交的所有job信息(约一万三千多个),将他们运行,占用模拟的内存和时间,观察每个时间段的集群的使用率和job的延迟时间等系统性能问题)

实习感受

  刚加入MS,正好是股价涨到$300重回全球市值第一的时候。同事们几乎每天吃饭时都在讨论入职时分到的股票这两年升值了多少。自我决定学计算机的那一天起,一直都很期待,也很好奇在微软工作的感受是如何。微软给予每个员工充分的尊重,在大多数情况下满足员工自我选择的权利,真正地做到WLB。最让我印象深刻的是公司的diversity文化(虽然被大部分同事诟病自己是被平均的部门哈哈)。相比任何一家公司,微软更像是一个享受生活志同道合的社区,除了少量的加班外,有大量的自发组织的活动。同事们都很nice,包容且乐于分享。几乎每天下午都会有同事在teams pm我:“打球不?”。 在微软的三个月,不敢说代码能力有多少进步,台球能力却是突飞猛进。同时又有一些遗憾,大体量的业务逻辑背后,数万人为满足业务需求各司其职,每个人更像是一颗螺丝钉。过于闲暇的时光反而有时会让我心生负罪坐立难安。这段时光告诉了我未来工作状态的一种可能,我不敢说自己适合或喜欢。最后决定terminate intern,去一直都想去的慕尼黑看看。

Model Details

模型的详细介绍和特征的选择见Github
模拟的Cosmos系统见Mock_Cosmos