共计 6183 个字符,预计需要花费 16 分钟才能阅读完成。
近日,由 TiDB 社区主办,专属于寰球开发者与技术爱好者的顶级挑战赛事——TiDB Hackathon 2020 较量圆满闭幕。往年是 TiDB Hackathon 第四次举办,参赛队伍规模创历届之最,共有 45 支来自寰球各地的队伍报名,首次实现寰球联动。通过 2 天工夫的极限挑战,大赛涌现出不少令人激动的我的项目。为了让更多敌人理解这些参赛团队背地的故事,咱们将开启 TiDB Hackathon 2020 优良我的项目分享系列,本篇文章将介绍 Mods 团队赛前幕后的精彩故事。
Mods 团队的两位成员孙若曦、徐飞相识已久,笑称对方为「最默契的人」。在本次 Hackathon 中他们应用 GPU 减速技术,为 TiDB 带来新的扩展性晋升。该我的项目最终取得三等奖和云启资本 — 最具市场潜力奖。明天咱们将分享作为决赛第一组进行问难的 Mods 团队与云启资本合伙人陈昱的访谈,探秘三位工程师(陈昱此前曾是 Google 的工程师,曾和 Spanner 论文其中一个作者坐在同一格子间里)对于「GPU 减速 TiDB 的缓和故事」。
Q:Mods 团队的名字的由来和组队趣事儿?
Mods: 咱们队伍的两个人都是毕业就进入 N 厂(英伟达),一起在上海的 GPU Mods 组,起初又都进入了 P 社(PingCAP)。这次咱们想做一个 GPU 减速的我的项目,索性就间接用了 Mods 这个队名。
Q:很好奇,英伟达大家都会去做偏 AI 的货色,过后为什么会退出一家数据库公司?
Mods: 退出 PingCAP 的起因是咱们都认为大数据和数据库市场的前景是比拟广的,而且咱们在英伟达更多的也是做一些偏底层、偏基础设施方面的工作,咱们感觉这方面的教训是有可能被利用到同样是根底软件的大数据和数据库这方面的工作上的,因而就做了这样的抉择。
Q:陈昱老师也是工程师出身,最终抉择 Mods 团队的起因有哪些?
云启资本陈昱: 早在 2017 年,我就关注 GPU 减速的利用,在我看来用 GPU 来减速数据分析,是蛮有商业价值的。
除了这个我的项目的 idea 我很喜爱之外,从投资人的角度来看,我更看中我的项目的独立性。比方本次取得第一名的 UDF 的我的项目我也很喜爱,然而它须要附丽 PingCAP 的生态,比拟难独立孵化,当然在生态里实现也很不错,然而从投资人的角度思考,会更心愿有朝一日能够孵化出一个独立的公司。
Q:陈昱老师之前应该也有加入过 Hackathon 吗,是如何对待这种流动模式的?
云启资本陈昱: 之前在谷歌比拟少会有公司范畴的 Hackathon,更多的可能是在组内或者大组内对一个我的项目自身的 Hackathon,性质也偏差于修复臭虫和做一些平时优先级没这么高的工作,很少做大 feature。
以前在 Google 的时候有所谓的“20 工夫”,就是员工能够花 20% 的工夫做任何事件,这和 PingCAP 的 Hackathon 在某种意义上是很相似的,给大家一个机会去实现本人的想法,很驰名的 Gmail 最后就是从这“20 工夫”中发明进去的。对 PingCAP 来说也是同样的,每年都会有几个我的项目最初会成为 PingCAP 产品的一部分。
如果没有 Hackathon 这个机会,可能很多 idea 就会永远被湮没在沙堆外面,因为大家日常工作都会有本人的开发计划,都会忙着往前推动,很少有工夫去思考、去实现一些很翻新的想法,所以我感觉这个机制是很好的。
Q:Mods 团队能够分享一下最后做这个我的项目的灵感和分工吗?
Mods: 咱们两人之前在英伟达都是做 GPU 相干的工作,尽管起初更多的是在做大数据方向,然而对 GPU 的大方向还是比拟关注的。凑巧去年在网上看到一家硅谷公司,他们的团队做了一个 GPU 的关系型数据库,过后的 benchmark 成果很惊人,咱们顺着源代码钻研发现曾经有一些绝对比拟成熟和独立的应用 GPU 来减速数据分析的根底组件,印象很粗浅。往年 Hackathon 招募进去之后,咱们就第一工夫想到了这个 idea。
分工方面次要还是从我的项目的整体设计和架构登程,先头脑风暴出一个比拟洁净和优雅的分层,架构分层洁净意味着能够相互解耦,各自独立开发,从而效率失去保障。接下来再细化分层之间交互的接口,咱们对整个分层之间的 API 做了很精密的设计,具体细化到了每个 API 的参数、返回值、调用程序、并发模型等等。尽管后期的设计和探讨花了比拟长的工夫,但带来了更多中后期开发效率上的收益(尽管整个我的项目周期也没有很长,笑~),各自实现本人模块的时候,不会被对方的节奏和进度打乱。
具体的分工上,我会去实现 GPU 计算层的整体框架和一部分 GPU 算子,徐领导实现 TiDB 侧的对接,包含执行打算的翻译以及执行器的实现,以及另一部分 GPU 算子。咱们晓得 Apple 在 2020 年曾经不再反对 N 卡和 CUDA 开发了,而咱们两个的主力开发机都是 MacBook,只有我家里一台装了 RTX 2080 的台机能够用来写 GPU 代码。这时候架构上的分层设计就体现出了它的意义。咱们将算子的具体实现从框架层剥来到,并在非 GPU 环境下提供了一套非常原始然而可运行的 CPU 算子实现,使得 GPU 无关的代码能够搭配这套 CPU 算子在非 GPU 环境下独立进行开发和调试,这就极大减小了咱们对我那个台机的依赖。至于 GPU 算子,只能在我的台机上开发调试,我和徐领导基本上是分时复用,因为作息配合也比拟默契所以没什么抵触(或者发生冲突时我把徐领导 kill 掉因为毕竟机器在我手里)。
另外一点,就像后面提到的,咱们通过分层设计以及形象出一组简洁的 API,使得整个我的项目具备很大的架构上的灵活性。咱们只需在 TiKV 或 TiFlash 中实现与 TiDB 对接雷同的工作,就能够将这套算子整合到其中,从而实现下推到 TiKV 和 TiFlash 的计算也通过 GPU 来减速执行,这样就具备了扩圈到整个 TiDB 生态甚至生态之外的扩展性。
Q:这个货色实际上是能够泛化去反对其余(素板卡)类型,比如说 A 卡我能不能用(OpenCL)去做减速或者怎么样?
Mods: 没错,后面提到咱们将算子的具体实现从框架层剥来到,并且为了减小开发环境的制约而实现了一套原始但可运行的 CPU 算子。这个办法同样实用于为 GPU 算子提供不同的实现,比方发问中的 OpenCL(N 卡和 A 卡都能跑),甚至能够思考在 FPGA 下面做一些反对。而这些只须要通过编译开关简略的管制即可。
Q:听完 Mods 团队分享的后期灵感及分工故事,陈昱老师有什么其它想法心愿分享的?
云启资本陈昱: 大家都晓得,咱们始终在继续做根底软件方向的投资。有几个对于大数据的方向我比拟看好:数据库即服务,批流一体数仓,还有就是基于新型硬件做优化的数据库。数据库是个简单的零碎,不单纯是软件,硬件对它的设计也有很大的影响。像 Mods 做的 GPU 减速就是个很好的例子,还有就是非易失存储,用好了能极大的升高 IO 提早。
Q:Mods 团队是第一个进行决赛 demo 的团队,这里有什么缓解缓和故事能够分享的?
Mods: 这是一个缓和的故事,最开始我是听到隔壁组的抽签后果,他们第二个问难,咱们还刺激他们说没事。后果几秒钟之后看到咱们居然是第一个问难,而后他们就来刺激咱们了。过后的第一反馈是来不及缓和了,间接抱着电脑去调试设施。另外在场的其余组的小伙伴还是给了咱们很大的激励,说早早问难完,就能够一下午吃吃喝喝看别的组翻车,多难受。尽管可能这些话他们本人都不大信,然而的确让咱们情绪平静了很多。咱们的心里建设也就是给本人打一针鸡血,干就完了,争取把场子热起来,给大家开个好头。
Q:陈昱老师是如何在看完剩下 27 个我的项目之后还没有变心的?
云启资本陈昱: 哈哈哈,其实在最开始看 RFC 的时候,就很喜爱他们。而且早一点讲也是有益处的,大家能够有更多的精力来关注他们的演讲,因为一天二十几个我的项目听下来对评委的膂力和心力有很大的耗费。他们有个劣势的 demo 成果特地好,这和他们正当调配工夫不无关系。这次问难过程中,我发现有很多团队的 idea 也都特地好,然而他们展现的工夫安顿的不合理,有些我的项目花在讲 PPT 的工夫太多了,导致最初没工夫进行 demo,不做 demo 大家很难有直观的意识,影响了得分。
Q:往年的 Hackathon 只有 24 小时的工夫来做我的项目,Mods 能够分享一些你们在较量过程中有遇到一些什么艰难以及是如何解决的?
Mods: 咱们遇到最大的艰难还是咱们的硬件自身,我这块 RTX 2080 是前年买的,只有 8GB 的显存,新出的卡又很难买。而大批量数据的计算是要吃很多主存和显存的,8GB 显存解决 50GB 规模的数据还是略微有些缓和的。这就迫使咱们去搜索枯肠想一些对显存应用比拟经济的算法。
比方 TPCH q17,通过 TiDB 优化之后的 plan 中会有一个对 lineitem 表(最大的表)做一个 aggregate。咱们原始的 aggregate 实现中会间接把这个大表所须要的列全副加载到显存,一次性实现 aggregate,这样实现起来很快,效率也最高。然而因为咱们的硬件只有 8GB 显存,而 aggregate 之前的大表数据曾经占用了 6GB 显存,前面进行 aggregate 计算所须要的资源就不够了。所以咱们被迫应用了分桶的办法,将 aggregate 之前的数据事后分好桶,而后每个桶别离计算 aggregate,技术上很简略,但须要一些绝对比拟繁缛的编程及调参,另外效率上也不迭一次性算完。最初咱们分了 16 个桶才把这个 aggregate 算进去。
另外一个就是编程语言的问题。TiDB 是用 Go 语言实现的,而咱们这个我的项目因为要应用 CUDA,因而只能应用 C/C++ 技术栈,把 Go 语言和 C/C++ 联合起来只能借助 Cgo。大量应用 Cgo 会带来很大的编程累赘,好在咱们有了分层的设计和两头一套简洁优雅的 API,Cgo 只须要在 API 层应用,极大的减小了这部分累赘。另外,Go 和 C/C++ 的最大的区别在于 Go 是 GC 语言,而 C/C++ 是没有 GC 的,须要手动治理内存,对于须要应用大量内存解决少量数据,同时对显存的应用又必须十分精密的这样一个我的项目,两边对象的生命期治理就成为一个很大的挑战。但也因为有这样一个强力的束缚,倒逼咱们去更加认真的编码和测试,从而实现最初的 demo。
在 TiDB 接 GPU 的过程中还有个艰难就是两边的数据格式不太一样。一些 primitive 的 type 比方 Int、Float 之类的是能够间接兼容的,然而像 String、Date、Decimal 这些简单类型就不是很容易兼容了,为了让 TPCH 能跑起来,咱们对 String 类型在 TiDB 这边做了肯定的批改使得它能兼容 GPU 的计算引擎,而 Date 类型则在 GPU 计算引擎那边兼容了 TiDB 的 Date 格局,相比 String 和 Date 这种只须要做小局部改变,Decimal 类型要兼容则艰难了许多,因为工夫切实无限,咱们最初抉择在生成 TPCH schema 的时候把 Decimal 类型替换成 Double 来绕过了这个问题(如果有足够多的工夫能让咱们实现 Decimal 类型的兼容的话,那 GPU 的减速应该还能更显著一点,这点也算是咱们的一点遗憾吧。)
TiDB 的生态很广,所选用的编程语言也十分庞杂:TiDB 是 Go,TiKV 是 Rust,TiFlash 是 C++,TiSpark 是 Java 和 Scala。徐领导是我意识的惟一一个这五门语言全都写过的 TiDB 开发者。
Q:刚刚说到了一些遗憾,那如果工夫更富余,有什么能够做的更好的?
Mods: 咱们感觉比拟遗憾的中央是因为工夫无限,对 GPU 硬件利用率的调优还有肯定的空间。从一开始,咱们的设计就基于了这样一个假如:GPU 作为处理器的一个根本哲学是靠足够多的计算工作来 hide 单个工作的 latency,从而进步零碎整体的吞吐率,于是咱们能够通过减少 CPU 端的并发以增大 GPU 端单位工夫内的任务量,从而进步 GPU 硬件的利用率。为此咱们在框架层设计了能够反对 CPU 端任意并发的精密 pipeline 模型。
然而在前期试验的时候,咱们没有看到随着 CPU 端并发的减少,GPU 的利用率随之进步。咱们考查的几个 GPU 的 profile 指标,包含 kernel / kernel overlap 和 kernel / memory overlap,都没有显著的变动。因为过后咱们 demo 的几个 query 成果都曾经比拟现实了,工夫也无限,就没有进一步钻研这一块。前面有工夫的话,可能会再做一些更加深刻的 profiling。
Q:刚刚 Mods 团队分享了他们在过程中遇到的一些技术艰难和遗憾,陈昱老师作为工程师有什么其它倡议或者想要理解的更多细节吗?
云启资本陈昱: 对,其实也是和显存相干的货色。做 GPU 计算的时候,须要把数据装载到显存里,但单块显卡的显存毕竟是无限的,是否能利用虚拟化的办法,把机器上的若干块板卡,甚至说其余机器的板卡,组成一块大的 GPU 虚构板卡,这样就能有简直有限的存储和算力来实现 GPU 计算工作。
Mods: 大家对 GPU 的资源自身比拟无限这一块根本造成共识了,对应的也呈现了很多解决这类问题的计划,包含多个 GPU 互连,GPU 虚拟化,甚至是分布式的 GPU 集群这样的技术。咱们也在继续关注这些畛域,另外咱们也认为将来这个简直是一个必然的方向。
Q:Mods 团队取得了两个奖,陈昱老师对这个我的项目将来有什么期待与瞻望吗?
云启资本陈昱: 心愿他们赶快合并到 TiDB 的主代码库,这是最大的期许了。
Q:Mods 团队本人有什么期待?
Mods: 咱们必定和陈昱老师的期待一样。不过后续产品化中的艰难还有很多,包含数据类型不兼容,开发环境是否敌对等等。尽管演示的 demo 成果很好,不过不论是软件、硬件,还是对整个 TiDB 生态上,还有很多须要克服的艰难。这方面探讨后续必定会持续推动。
咱们最喜爱 Hackthon 的中央就是你能够自由自在的去 hack 一个 idea,通过 demo 来验证它。但后续产品化方面,就要很庄重的去探讨,这是产品成型的必然门路。咱们当然心愿能疾速落地,也会朝这个方向去努力争取的。
Q:最初的彩蛋缓环节,请大家分享一下除了本人的我的项目外,最喜爱哪个我的项目?
云启资本陈昱: 我感觉比拟喜爱一个是拿第一名的 UDF 我的项目,还有另一个三等奖我的项目 zh.md。程序员是最不喜爱写文档的,任何能进步程序员生产文档的工具都很受欢迎。还有一个获得最佳人气奖的 TiFlink 我也很关注。
Mods 团队 - 孙若曦: 只能说一个我的项目的话,那就是一等奖的团队 ‘or 0=0 or’ 做的 UDF 我的项目。我感觉不论是从架构还是实现来看,都十分优雅,而且完成度很高,整个演示的过程也很令人愉悦,我集体十分喜爱。
Mods 团队 - 徐飞: 我也很喜爱第一名做 UDF 的我的项目,而且之前咱们做过存储过程相干的事件,晓得会有哪些技术难点,但这个我的项目把这些问题都解决的十分优雅。
对于云启资本
云启资本成立于 2014 年,始终保持专一于 To B 畛域的早中期投资,围绕技术赋能产业降级,进行系统化布局,投资畛域笼罩企业服务 SaaS、产业数字化、智联设施、先进制作等行业,投资组合包含 360 数科 (NASDAQ: QFIN)、英科医疗(SZ: 300677)、一起写 (被快手收买)、酷家乐、百布、PingCAP, Zilliz, 德风科技、冰鉴科技、XTransfer, 环世物流、找钢网、小胖熊、智齿科技、晓羊教育、擎朗智能、新石器、e 换电等近 100 家优良守业公司。