メインコンテンツにスキップ
ブログコンピューティングLinodeは6週間でハードウェアからライブGPUへと移行しました。

Linode がどうやって6週間でハードウェアからライブGPUに移行できたか

Linode クラウドGPU

2019年には、3つの異なる部門が、Linode の創立記念日までに新しいLinode GPUインスタンスを顧客に提供するという目標を設定しました。ハードウェアチーム、マーケティングチーム、管理チームの間ではそれが可能なのかどうか、特にその期間中に取り組んでいた他の製品を考えると、確信が持てませんでした。

そこで、複数の部門にまたがる熱心な従業員からなる厳選されたチームで Team Mission GPUを結成することでした。今から約2年前、そして多くのGPUインスタンスのデプロイメントを経て、私たちはどのようにしてそれを実現し、アイデアを積極的に拡大している成功した製品に変えたのかについての詳細な洞察を提供するために、記憶をたどりましょう。

Linode における仮想化の歴史について簡単な背景をご紹介

GPU インスタンスをどのようにして立ち上げたかを説明する前に、ここでは軽い技術的な詳細と、Linode で仮想化がどのようにして始まったのか、その歴史をご紹介します。

Linode は Qemu(Quick EMUlator)に似た初期の仮想化パラダイムであるUML(User Mode Linux)を実行する仮想マシンを提供する小さなビジネスとして2003年にスタートしました。UML は完全に仮想化されたハードウェアを提供しました。顧客がLinode にログインすると、ディスク、ネットワーク、マザーボード、RAM など、顧客が目にするデバイスは、すべて本物のハードウェアデバイスのように見え、動作しますが、実際には本物のハードウェアではなく、ソフトウェアによってサポートされていました。

数年後、Linode は仮想化レイヤーとしてXenに移行し、お客様に最新のパフォーマンス向上を提供します。Xen はタイプ 1 のハイパーバイザーで、ハイパーバイザーがハードウェア上で直接実行され、ゲストは Xen カーネル上で実行されます。Xen カーネルはゲストに準仮想化を提供しますが、Linode から見るハードウェアインターフェイスは、Xen カーネルを介して実際のマシンコールに変換され、ユーザーに返されます。この変換レイヤが存在する理由は、セキュリティやその他の安全機能を提供して、正しい命令が正しい Linode に行くようにするためです。

それから数年後、KVM(Kernel Virtual Machine)と呼ばれる新しい技術が開発されていました。KVM は CPU の命令に対して準仮想的なインタフェースを提供するLinux カーネルの部分で構成されています。Qemuは、KVMを活用できる仮想化技術の一つです。Linode はお客様の利益のために、再び乗り換えることにしました。顧客がKVMへの無償アップグレードを受けたとき、ほとんどのワークロードでパフォーマンスが瞬時に向上しました。このタイプの準仮想化はXenとは異なり、CPU命令がゲスト(Qemu)からホストカーネルに渡され、プロセッサレベルの命令を使って直接CPUに渡されるため、ネイティブに近い実行速度を実現できます。これらの命令の結果は Xen が必要とするオーバーヘッドなしで、それらの命令を発行したLinode に返されます。

で、これがLinode GPUインスタンスと何の関係があるの?

Linode は市場調査を行い、GPUワークロードの実行に興味のある顧客に何を提供するのが最も価値があるのかを見極めようとしました。私たちは、"ホストパススルー"と呼ばれる技術を用いて、GPU を直接お客様に提供することに決めました。我々は Qemu にどのハードウェアデバイスをゲストに渡したいかを伝え、この場合は GPU カードを渡します。ホストのLinuxマシンはそれを使用することができず、マシン上の他のLinodeもそれを使用することができません。要求した顧客だけがGPUカードを使用することができ、その顧客はカードを完全に手に入れることができます。実際のハードウェアデバイスは変更されずにスルーされ、準仮想化されていないので変換レイヤがないことを意味します。

第1週:ハードウェアが Linode に到着

調査が完了し、チーム全体でプロジェクトを進めることにしました。計画を成功させるためには、システムの低レベルのスタック全体でいくつかの変更が必要でした。ハードウェアが月曜日にオンラインになったので、締め切りに間に合わせるためにデータセンターの大口注文を進めるかどうかを決めるのに5日しかありませんでした。

通常の週40時間労働でうまくいかせなければ前に進まないということで関係者全員の理解が一致していました。つまり、残業をしなければならないというプレッシャーはなかったものの、Linode の新製品の将来を決めるには5日間しかありませんでした。

結局何が起きたか?すべての調査が功を奏したのです。いくつかの既存のドキュメントに従ってみて、それは期待通りに動作しました。数日のうちに、テスト環境でGPUをLinodesに確実に接続することができました。金曜日までには、これを成功させることができると確信していました。テストは成功したのです!これで、顧客に大規模な注文を出して前に進むことができるようになりました。

第2週:ハードウェアインターフェース層をGPUで動作させる

最初のテストが成功した後、月曜日には体力を充電させて出勤し、既存のLinode 作成ワークフローに GPU アタッチメントプロセスのインテグレーションに取り掛かりました。当社では、インターフェイスを可能な限りシンプルにするように努めています。Linode をデプロイするには数回クリックするだけにするためには、多くのことを考慮する必要がありました。

GPUを実現するためには、GPU用のRAMとLinode を分離し、その分離したRAMとGPUをペアにした専用CPUコアをLinode に与えるなど、いくつかの低レベルな部分を書いて実装しなければなりませんでした。マザーボードのNUMA (Non Uniform Memory Access)アーキテクチャを研究し、RAM の NUMA グループを、それが最も密接に関連している CPU と、GPU が接続されているPCIe (PCI [Peripheral Computer Interface] express)レーンに接続されている NUMA グループに分離することができました。これにより、1個、2個、3個、または4個のGPUが接続されたLinodeを起動し、マザーボードの構造に基づいてGPUカードと密接に関連しているRAMとCPUコアの部分を取り上げることができました。

ハードウェアレイヤが完成了した後、私たちはLinode Job Queuing メカニズムとの連携に取り組み、Cloud Manager と API を通じて Linodes を起動できるようにしました。この段階で、信頼性のテストを開始することができました。私たちが最後に求めたものは、真夜中にシステムの障害でページを表示したり、異なるタイムゾーンの顧客のために昼間にシステムがダウンした場合のためのオンコールのエンジニアがです。お客様とエンジニア双方のの睡眠スケジュールを考慮して、私たちは早期にテストを開始し、お客様にしっかりとした信頼性の高い製品を提供できるようにし続けました。

第3週:アドミンインターフェースとアカウンティングの変更

第3週になると、管理上の問題がいくつかありました。どの顧客がどのLinodesに割り当てられているのどう追跡するのか? また、お客様をGPU付きの Linodeインスタンスにどうやって誘導するのか?

すべてのトラッキングとコントロールが実施されなければなりませんでした。これにより、GPUカードが何枚あるのか、何枚使われたのか、何枚空になったのか、そして新規顧客に何枚販売できるのかを把握することができました。また、このGPUトラッキングを内部管理者インターフェースに組み込まなければなりませんでした。これは退屈な会計作業のように見えるかもしれませんが、この新製品を既存のすべての製品と手動のステップを必要とせずにインターフェースするには、チーム全体と外部チームメンバーによる多くの創意工夫が必要でした。

ありがたいことに、私たちは皆の力を集結しコードを書き、それがうまく動作し、確実に動作し、Linode GPU インスタンスを起動して、実行するために手動の介入が不要なことを確認することができました。この段階でこの作業を行った副次的な利点は、テストが簡単になったことです。Linode GPU インスタンスを起動させるためには、管理者インターフェイスのボタンを ワンクリックするだけで済みました。

第4週:APIの変更を公開して顧客がLinodesを起動できるようにする

Linode GPUインスタンスを呼び出すための管理者インターフェースボタンを作成した後、私たちはかなり良い感触をえていました。次に、私たちはこの同じ機能を顧客に公開するための作業が必要でした。公開APIはPythonでサポートされているので、コードは非常に直感的になりました。私たちは、変更のロールアウトとテストを非常に迅速に行うことができました。厄介であったのは、テストのためにこの機能を社内で利用できるようにしておきながら、信頼性向上のために必要なテストが完了するまで社外では利用できないようにしておくことでした。

第5週:デプロイしよう!あるいは、機能フラグの後ろにある公開機能をデプロイする方法

早めのデプロイし、頻繁にデプロイする。

私たちは、これを一般公開し、最終的にお客様にこの新しいサービスを使ってもらうことについてどう感じているのか、という質問を投げかけました。

その答えは、早期にすべての未知のものを処理するために、早期に、そして頻繁にデプロイすることでした。私たちはまだチーム内でいくつかのユースケースをテストしている間にも Linode GPU インスタンスを一般にデプロイしましたが、機能フラグの後ろに隠していました。従業員アカウントで GPU をテストすることができたので、顧客が GPU を使用した場合に期待通りに動作するかどうかを確認することができました。予想していなかったことを発見したときは修正を加え、公にデプロイしました。

ゆっくりと、しかし確実に、そしてほぼ毎日コードをデプロイしながら、私たちはリストを全て解決していきました。変更点が尽きた時、これを本当に顧客に開放することに自信を持っていました。

第6週:テスト!Linode 社員にGPUを公開

Linode で働いていて素晴らしいことの一つは、誰よりも早く最先端のテクノロジーに触れることができるということです。(追伸:採用中です!) すべての従業員は、新製品を使い倒す機会があり、私たちが発売するすべての技術が実戦テストされています。従業員は誰でも、勤務時間中にLinode GPU インスタンスをテストするためにサインアップすることができ、本当に希望すれば勤務時間外であっても、顧客と同じようにLinode GPU インスタンスを使用することができます。従業員は自分の従業員アカウントにタグを付けて、GPUをスピンアップするだけでよいのです。

ここでは、Linodiansが新しいGPUを試してみた方法をいくつか紹介します。

  • クラウドゲーミング - ゲームはLinode GPU インスタンス上で動作し、ビデオとコントロールは Steam Link™ を介して送信されます。
  • 3Dレンダリング
  • ビデオトランスコーディング
  • パスワード強度テスト
  • TensorFlowの実行

このステージの後、私たちはパフォーマンス指標を収集し、生産と顧客へのローンチの準備ができていると判断しました。

ローンチ!

ローンチさせました!そしてお祝いしました!アイスクリームとグッズを用意して!お客様は、ほんの数週間前にはまだ開発中だった製品を試し始めました。何よりも良かったのは、ローンチ日にすべてがうまく動いたことです。土壇場で変更を加える必要もなく、消火作業もなく、顧客は満足し、すべてが確実に機能しました。

実際のコードローンチは難しくありませんでした。コードとシステム構成の観点から見ると、GPU を本番環境に投入するのに必要なのは機能フラグを削除することだけでした。ただ Linode では技術文書の作成、Linode Cloud Manager での UI の変更、新製品を祝うための楽しいマーケティング資料など、製品の発表に必要なものが他にたくさんあります。

ローンチ後:半年間はコード変更なし

私たちの頭の中では、常にいくつかの疑問が浮かんでいます。テストは充分だったか?6週間は早すぎたか?

私たちの場合、それはちょうど良いスピードでした。ローンチ以来コードを触る必要はありませんでした。また Linode GPU は毎日のように顧客の使用率が上がっています。製品を構築して動作させたのちに他の優れた製品に取り掛かっても、2年前に構築したものが必要最小限のインタラクションで、今でもそれが動作しているというのは素晴らしいことです。

振り返ってみると、ここまで成功できた要因はこんなことでした。

  1. 事前に調査を行う - これは、実際に手にハードウェアを持っていなくてもできる未知のすべてに取り組むことで、私たちを大いに助けてくれました。
  2. 計画を立てる - 私たちは非常に詳細な計画を立て、期限通りにローンチするには各ステップを期限通りに実行する必要がありました。
  3. 計画に固執する - 手元のタスクに集中し、やるべき残りのタスクを念頭に置いて作業を行うことです。
  4. 優れたマネジメントチームを持つこと - 締め切りの厳しいプロジェクトは、一歩間違えればローンチの締め切りに間に合わないということを、すべてのレベルのマネジメントが理解していることを確認してください。これは、私たちの成功における最も重要な要因かもしれません。私たちの場合もそうでしたが、プレッシャーがかかりすぎると燃え尽きて失敗してしまいます。経営陣とタイムラインについて話し合った後、彼らと完全に認識が一致しました。
  5. 互いをサポートする - 成功を掴んだチームは、組織全体のサポート体制がなければ、成功を掴むことはできませんでした。あなたの同僚全員があなたに成功してほしいと願うとき、彼らは全員飛び込んできて、あなたが必要とすれば助けてくれるでしょう。
  6. テスト - テストテストテストテストテスト、もう一回書くとしてもまだテストと書くでしょう。自動テストと手動テストの両方。これが、私のチームの誰もが半年以上コードを触る必要がなかった主な理由です。

Linode GPUインスタンスの詳細についてはGPU ドキュメントを確認してください。またニューアーク、ムンバイ、シンガポールのデータセンターでのGPUの利用を拡大しました。

現在のワークロードでLinode GPU を試してみたいとお考えですか?1 週間の無料トライアルで、当社の GPU がどのように機能するかを確認できます。詳細はこちらをご覧ください。

(再度になりますが、Linode GPUのような製品の構築やテストを手伝ってくれる仲間を募集しています!


コメント (1)

  1. Author Photo

    how to make windows os in linode

コメントを残す

あなたのメールアドレスは公開されません。必須項目には*印がついています。