2019 年,三个不同的部门设定了一个目标,要在 Linode 生日之前为客户推出新的 LinodeGPU 实例。在硬件、营销和管理团队之间,我们不确定这是否可能实现,尤其是在此期间我们还在开发其他产品。
因此,我们选择了一个有机会实现这一目标的团队:一个由多个部门的热心员工组成的精挑细选的团队,组成了任务团队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 所要求的开销。
那么,这一切与 LinodeGPU 实例有什么关系呢?
Linode 进行了市场调研,试图确定怎样才能为有意运行GPU 工作负载的客户提供最大价值。我们决定使用一种名为 "主机直通 "的技术,直接向客户提供 GPU。我们告诉 Qemu 我们希望将哪个硬件设备(在本例中为GPU 卡)直通客户机,Qemu 将与 Linux 协同工作,隔离GPU 卡,这样系统上的其他进程就无法使用该卡。Linux 主机无法使用它,机器上的其他 Linodes 也无法使用它。只有提出申请的客户才能使用GPU 卡,而且他们得到的是完整的卡。实际的硬件设备是通过该卡传输的,未作任何更改,也未进行虚拟化,这意味着不存在转换层。
第一周:硬件到达Linode
随着研究的完成,整个团队决定继续推进这个项目。为了使计划顺利进行,该系统需要在整个低层堆栈中进行一些改变。硬件在星期一上线,我们有五天时间来决定是否推进数据中心的大订单,以满足最后期限。
每个人都有相同的理解,如果我们不能在每周40小时的正常工作时间内让它运作起来,我们就不会向前推进。这意味着没有加班的压力,但我们只有五天的时间来决定一个新的Linode产品的未来。
那么,最终发生了什么?事实证明,我们所有的研究都得到了回报。我们尝试着按照一些现有的文档进行操作,结果完全按照预期的那样进行。几天之内,我们就能在测试环境中可靠地将GPU连接到Linodes。到了周五,我们有信心可以完成这个任务。测试是成功的!现在是时候为客户下一个大订单并继续前进了。
第二周:让硬件接口层与GPU一起工作
初步测试成功后,我们周一来到办公室,重新振作起来,准备将GPU 附件流程与我们现有的 Linode 创建工作流程整合在一起。我们努力使我们的界面尽可能简单:只需点击几下就能部署一个 Linode,而这几下操作中包含了很多我们必须考虑的因素。
为了使 GPU 成为可能,我们必须编写和实现几个底层部分,例如为GPU 和 Linode 隔离内存,以及为 Linode 配备与隔离内存和GPU 配对的专用 CPU 内核。我们对主板的NUMA(非统一内存访问)架构进行了研究,从而将 NUMA 组内存隔离到与之关联最紧密的 CPU 上,并将 NUMA 组连接到GPU 所插入的PCIe(PCI [Peripheral Computer Interface] express)通道上。这样,我们就可以启动连接了 1、2、3 或 4 个 GPU 的 Linode,并根据主板结构占用与GPU 卡密切相关的那部分内存和 CPU 内核。
硬件层完成后,我们开始与 Linode 作业队列机制对接,以便通过云管理器和应用程序接口启动 Linode。在这个阶段,我们可以开始测试可靠性。我们最不希望出现的情况是,值班工程师在半夜因为系统故障而被呼唤,或者在工作日中因为不同时区的客户而导致系统瘫痪。考虑到客户和工程师的睡眠时间,我们很早就开始了测试,并不断确保客户最终能获得坚实可靠的产品。
第三周:进行管理员界面和会计变更
在第三周,我们面临着一些管理问题:如何跟踪哪些客户被分配到哪些 Linode?如何将客户发送到有GPU 的 Linode 实例,而不是没有GPU 的 Linode 实例?
必须实施所有的跟踪和控制。我们这样做是为了说明我们有多少GPU 卡、有多少卡被拿走了、有多少卡是空的,以及我们还有多少卡可以卖给新客户。我们还必须在内部管理员界面中建立GPU 跟踪系统。这看似是枯燥的会计工作,但需要整个团队和外部团队成员发挥聪明才智,将这一新产品与我们现有的所有产品连接起来,而不需要人工操作。
幸运的是,我们召集了所有人,编写了代码并进行了测试,确保代码运行良好、可靠,并且不需要人工干预就能启动和运行 LinodeGPU 实例。在这一阶段完成这项工作的另一个好处是,测试变得更加容易。我们只需在管理员界面上点击一个按钮,就能启动 LinodeGPU 实例。
第 4 周:更改公共 API,让客户可以启动 Linodes
在制作了可以调出 LinodeGPU 实例的管理员界面按钮后,我们感觉非常好。现在,我们需要努力向客户提供同样的功能。公共 API由Python 支持,这使得代码非常直观。我们能够很快地推出更改并进行测试。最棘手的部分是在公司内部测试该功能,但在我们完成必要的可靠性测试之前,不能在公司外部使用该功能。
第五周:部署!或者说,如何在功能标志后面部署一个面向公众的功能
我们已经到了最后关头,所以我们提出了一个问题:我们对向公众推出这项服务并最终让客户使用这项新服务的感觉如何?
答案就是尽早处理所有未知因素,并通过尽早部署和频繁部署来解决这些问题。当我们还在测试团队中的一些用例时,我们向公众部署了 LinodeGPU 实例,但隐藏在功能标志之后。我们能够在员工账户上测试 GPU,这让我们能够确保客户使用时事情会完全按照预期进行。一旦我们发现了意想不到的问题,我们就会进行修复并公开部署。
缓慢但肯定地,几乎每天都在部署代码,我们解决了清单上的所有问题。我们用完了要做的修改,并对真正向客户开放感到有信心。
第六周:测试!向Linode员工开放GPU
在 Linode 工作的一大好处是,我们可以抢先体验最前沿的技术。(附注:我们正在招聘!)每位员工都有机会试用新产品,因此我们推出的每项技术都经过了实战检验。任何员工都可以在上班时间注册测试 LinodeGPU 实例,如果他们真的愿意,甚至可以在下班后注册,像客户一样使用 LinodeGPU 实例。他们所要做的就是标记自己的员工账户,然后启动GPU 。
以下是Linodians尝试我们的新GPU的一些方式:
- 云游戏 - 游戏在 LinodeGPU 实例上运行,视频和控制通过 Steam Link™ 发送。
- 3D效果图
- 视频转码
- 密码强度测试
- 运行TensorFlow
在这个阶段之后,我们收集了性能指标,并决定我们已经准备好投入生产并向客户推出。
启动!
我们启动了!我们举行了庆祝活动!有冰激凌和小礼品!客户们开始尝试这个在短短几周前才开始开发的产品。最重要的是,在发布当天一切都正常。我们不必在最后一分钟做任何改变,没有火灾需要扑灭,客户很高兴,一切都在可靠地工作。
实际的代码启动并不困难。从代码和系统配置的角度来看,将GPU投入生产所需要的只是删除一个功能标志。但是,在Linode的产品发布中还有大量的其他事情:技术文档,在Linode云管理器中进行UI更改,以及所有有趣的营销材料来帮助庆祝我们的新产品。
启动后:6个月内不改变代码
有些问题一直在我们的脑海里:我们做了足够的测试吗?六个星期是不是太快了?
在我们的案例中,它的速度恰到好处:自从推出以来,我还没有碰过代码。而且,Linode GPU每天都有客户使用。当你可以建立一个产品并使其正常运行,然后继续建立其他伟大的产品,并且你两年前建立的东西仍然在运行,所有这些都是自己的,只需要最小的互动,这真是太好了。
回想起来,这里有一些事情使我们能够取得这样的成功:
- 提前做研究--这对我们解决所有未知的问题大有帮助,我们可以在手头没有实际硬件的情况下解决。
- 制定计划--我们有一个非常详细的计划,每个步骤都必须按时执行,否则我们就无法启动。
- 坚持计划 - 专注于手头的任务,并牢记需要完成的剩余任务。
- 拥有一个好的管理团队--确保所有级别的管理层都明白,如果一个期限紧迫的项目错过了一个步骤,启动期限就无法实现。这可能是让我们成功的最重要部分。有些压力是件好事,在我们的案例中就是如此,太多压力会导致倦怠和失败。在与管理层讨论了时间表后,他们完全同意了。
- 互相支持--如果没有整个组织其他成员的支持结构,那个有机会的团队是不会有机会的。当你的所有同事都希望你成功时,如果你需要他们,他们都会跳出来帮忙。
- 测试--测试测试测试,如果我可以再打一次,我还是会说测试。无论是自动测试还是手动测试。到目前为止,这是我的团队在6个多月里没有人碰过代码的主要原因。
请查看我们的GPU 文档,了解有关 LinodeGPU 实例的更多信息。我们刚刚扩大了纽瓦克、孟买和新加坡数据中心的GPU 可用性。
有兴趣为您目前的工作负载尝试Linode GPU吗?您可以获得为期一周的免费试用,看看我们的GPU如何为您工作。在这里了解更多。
(再说一遍,如果你想帮助我们建立和测试Linode GPU等产品,我们正在招聘!)
评论 (1)
how to make windows os in linode