跳到主要内容
博客计算Linode如何在六周内完成从硬件到实时GPU的转变

Linode如何在六周内完成从硬件到实时GPU的转变

Linode云计算GPU

2019年,三个不同的部门设定了一个目标,在Linode生日之前为客户推出新的Linode GPU实例。在硬件、营销和管理团队之间,我们不确定这是否可能,尤其是在那段时间我们正在开发其他产品。

因此,我们选择了一个有机会实现这一目标的团队:一个由跨越多个部门的热心员工组成的精心挑选的团队,组成Mission GPU团队。现在,在将近两年前和许多GPU实例部署之后,我们正在进行一次回忆之旅,以深入了解我们是如何实现这一目标的--并将一个想法变成一个我们正在积极扩展的成功产品。

关于Linode的虚拟化历史的背景简介

在我们开始介绍我们如何推出GPU实例之前,这里有一些轻量级的技术细节,以及在我们成为今天你所知道的云供应商之前,虚拟化是如何在Linode启动的历史。

Linode在2003年作为一个小企业开始提供运行UML(User Mode Linux)的虚拟机,这是一种类似于Qemu(Quick EMUlator)的早期虚拟化范式。UML提供完全虚拟化的硬件。当客户登录他们的Linode时,客户看到的设备,如磁盘、网络、主板、内存等,看起来和行为都像真正的硬件设备,但这些设备实际上是由软件而不是真正的硬件支持的。

几年后,Linode将其虚拟化层转移到 Xen作为其虚拟化层,为我们的客户提供最新的性能改进。Xen 是一个类型1的管理程序,这意味着管理程序直接在硬件上运行,而用户在Xen 内核上运行。Xen 内核为其客人提供准虚拟化,或者说Linode看到的硬件接口通过Xen 内核翻译成实际的机器调用并返回给用户。这个翻译层存在的原因是为了提供安全和其他安全功能,以便正确的指令被送到正确的Linode。

在那之后的几年里,一种新的技术被开发出来,叫做KVM (内核虚拟机)。KVM 由Linux内核的部分组成,为CPU指令提供准虚拟接口。Qemu是可以利用KVM 的虚拟化技术之一。为了客户的利益,Linode决定再次转换。当客户采取免费升级到KVM ,大多数工作负载的性能立即得到了提高。这种类型的准虚拟化与Xen :CPU指令从客户(Qemu)传递到主机内核,并直接使用处理器级指令传递到CPU,允许接近本地的执行速度。这些指令的结果被返回到发出指令的Linode,而没有Xen 所要求的开销。

那么这一切与Linode GPU实例有什么关系?

Linode进行了市场研究,并试图确定什么可以为有兴趣运行GPU工作负载的客户提供最佳价值。我们决定使用一种叫做 "主机直通 "的技术直接向客户提供GPU。我们告诉Qemu我们想通过哪种硬件设备给客户,在这种情况下就是GPU卡,Qemu与Linux一起工作,隔离GPU卡,使系统中的其他进程不能使用它。Linux主机不能使用它,机器上的其他Linodes也不能使用它。只有要求使用GPU卡的客户可以使用,而且他们可以得到完整的卡。实际的硬件设备是通过的,没有改变,没有准虚拟化,这意味着没有翻译层。

第一周:硬件到达Linode

随着研究的完成,整个团队决定继续推进这个项目。为了使计划顺利进行,该系统需要在整个低层堆栈中进行一些改变。硬件在星期一上线,我们有五天时间来决定是否推进数据中心的大订单,以满足最后期限。

每个人都有相同的理解,如果我们不能在每周40小时的正常工作时间内让它运作起来,我们就不会向前推进。这意味着没有加班的压力,但我们只有五天的时间来决定一个新的Linode产品的未来。

那么,最终发生了什么?事实证明,我们所有的研究都得到了回报。我们尝试着按照一些现有的文档进行操作,结果完全按照预期的那样进行。几天之内,我们就能在测试环境中可靠地将GPU连接到Linodes。到了周五,我们有信心可以完成这个任务。测试是成功的!现在是时候为客户下一个大订单并继续前进了。

第二周:让硬件接口层与GPU一起工作

在成功的初步测试后,我们在周一来到办公室,重新充电,并准备将GPU连接过程与我们现有的Linode创建工作流程相结合。我们试图使我们的界面尽可能简单:只需点击几下就可以部署一个Linode,而在这几个动作中,有很多东西是我们必须要考虑的。

为了使GPU成为可能,必须编写和实现几个低级别的部分,如隔离GPU和Linode的RAM,以及给Linode专用的CPU核心,与隔离的RAM和GPU配对。我们研究了主板的NUMA(非统一内存访问)架构,我们能够将NUMA组的内存隔离到与它关系最密切的CPU上,并将NUMA组连接到GPU插入的PCIe(PCI[外围计算机接口])通道上。这使我们能够启动一个连接有1、2、3或4个GPU的Linode,并根据主板结构占用与GPU卡密切相关的部分内存和CPU核心。

在硬件层完成后,我们致力于与Linode作业队列机制的对接,这样我们就可以通过云管理器和API 来启动Linodes。在这个阶段,我们能够开始测试可靠性。我们最不希望的就是值班的工程师在半夜因为系统故障而被呼唤,或者在工作日为不同时区的客户关闭系统。考虑到客户和工程师的睡眠时间,我们很早就开始测试,并继续确保客户最终得到一个坚实可靠的产品。

第三周:进行管理员界面和会计变更

在第三周,我们有一些管理问题摆在我们面前:我们如何跟踪哪些客户被分配到哪些Linode?我们如何将客户送到有GPU的Linode实例,而不是送到没有GPU的Linode实例?

所有的跟踪和控制都必须要实现。我们这样做是为了能够说明我们有多少GPU卡,有多少被拿走了,有多少是空的,以及有多少我们还可以卖给新客户。我们还必须在我们的内部管理员界面中建立这种GPU跟踪。这可能看起来像枯燥的会计工作,但需要整个团队和外部团队成员发挥很大的聪明才智,将这个新产品与我们所有的现有产品对接,而不需要手动步骤。

值得庆幸的是,我们把每个人都拉到一起,我们能够编写代码并进行测试,以确保它运行良好,工作可靠,并且不需要人工干预就能让Linode GPU实例启动和运行。在这个阶段做这项工作的另一个好处是,测试更容易。我们只需点击管理员界面上的一个按钮,就可以启动Linode GPU实例。

第四周:进行公开的API ,以便客户可以旋转Linodes。

在制作了管理员界面的按钮来调出Linode GPU实例后,我们感觉非常好。现在,我们需要努力将这一相同的功能暴露给客户。 API公共 Python ,这使得代码非常直观。我们能够很快地推出这些变化并进行测试。棘手的部分是让这个功能在公司内部进行测试,但在我们完成必要的可靠性测试之前,不能在公司外部使用。

第五周:部署!或者说,如何在功能标志后面部署一个面向公众的功能

尽早部署,经常部署。

我们已经到了最后关头,所以我们提出了一个问题:我们对向公众推出这项服务并最终让客户使用这项新服务的感觉如何?

答案是在早期处理所有的未知因素,并通过早期部署和经常部署来说明这些问题。当我们仍在测试团队中的一些用例时,我们向公众部署了Linode的GPU实例,但隐藏在一个功能标志后面。我们能够在我们的员工账户上测试GPU,这使我们能够确保如果客户使用它,事情会完全按照预期进行。任何时候我们发现了一些我们没有预料到的东西,我们就进行修复并进行公开部署。

缓慢但肯定地,几乎每天都在部署代码,我们解决了清单上的所有问题。我们用完了要做的修改,并对真正向客户开放感到有信心。

第六周:测试!向Linode员工开放GPU

在Linode工作的一个好处是,我们可以在其他人之前玩到最先进的技术。(P.S. 我们正在招聘!)每个员工都有机会把一个新产品通过它的步伐,所以我们推出的每一项技术都经过了战斗的考验。任何员工都可以在工作时间注册测试Linode GPU实例,甚至在下班后,如果他们真的想,可以像客户一样使用Linode GPU实例。他们所要做的就是标记他们的员工账户并启动一个GPU。

以下是Linodians尝试我们的新GPU的一些方式:

  • 云游戏--游戏在Linode GPU实例上运行,视频和控制通过Steam Link™传送过来。
  • 3D效果图
  • 视频转码
  • 密码强度测试
  • 运行TensorFlow

在这个阶段之后,我们收集了性能指标,并决定我们已经准备好投入生产并向客户推出。

启动!

我们启动了!我们举行了庆祝活动!有冰激凌和小礼品!客户们开始尝试这个在短短几周前才开始开发的产品。最重要的是,在发布当天一切都正常。我们不必在最后一分钟做任何改变,没有火灾需要扑灭,客户很高兴,一切都在可靠地工作。

实际的代码启动并不困难。从代码和系统配置的角度来看,将GPU投入生产所需要的只是删除一个功能标志。但是,在Linode的产品发布中还有大量的其他事情:技术文档,在Linode云管理器中进行UI更改,以及所有有趣的营销材料来帮助庆祝我们的新产品。

启动后:6个月内不改变代码

有些问题一直在我们的脑海里:我们做了足够的测试吗?六个星期是不是太快了?

在我们的案例中,它的速度恰到好处:自从推出以来,我还没有碰过代码。而且,Linode GPU每天都有客户使用。当你可以建立一个产品并使其正常运行,然后继续建立其他伟大的产品,并且你两年前建立的东西仍然在运行,所有这些都是自己的,只需要最小的互动,这真是太好了。

回想起来,这里有一些事情使我们能够取得这样的成功:

  1. 提前做研究--这对我们解决所有未知的问题大有帮助,我们可以在手头没有实际硬件的情况下解决。
  2. 制定计划--我们有一个非常详细的计划,每个步骤都必须按时执行,否则我们就无法启动。
  3. 坚持计划 - 专注于手头的任务,并牢记需要完成的剩余任务。
  4. 拥有一个好的管理团队--确保所有级别的管理层都明白,如果一个期限紧迫的项目错过了一个步骤,启动期限就无法实现。这可能是让我们成功的最重要部分。有些压力是件好事,在我们的案例中就是如此,太多压力会导致倦怠和失败。在与管理层讨论了时间表后,他们完全同意了。
  5. 互相支持--如果没有整个组织其他成员的支持结构,那个有机会的团队是不会有机会的。当你的所有同事都希望你成功时,如果你需要他们,他们都会跳出来帮忙。
  6. 测试--测试测试测试,如果我可以再打一次,我还是会说测试。无论是自动测试还是手动测试。到目前为止,这是我的团队在6个多月里没有人碰过代码的主要原因。

通过查看我们的GPU文档了解更多关于Linode GPU实例的信息,我们刚刚在纽瓦克、孟买和新加坡的数据中心扩大了GPU的可用性。

有兴趣为您目前的工作负载尝试Linode GPU吗?您可以获得为期一周的免费试用,看看我们的GPU如何为您工作。在这里了解更多

(再说一遍,如果你想帮助我们建立和测试Linode GPU等产品,我们正在招聘!)


评论 (1)

  1. Author Photo

    how to make windows os in linode

留下回复

您的电子邮件地址将不会被公布。 必须填写的字段被标记为*