今回はMark Russinovich氏の定番セッションです。(Closing Keynoteだったようです)
とういわけでMarkの登壇です。まぁAIについての話題になりますよね。
![]()
![]()
最初のトピックはサスティナブルデータセンター。ちょいちょいChatGPTが生成した ジョークを挟んでましたね(?)。PUEもかなり下がってきましたね。もう第11世代なんですね。
![]()
![]()
バックアップ電源は通常化石燃料を燃やして電力にするけど、今はProton Exchange Membrane hydrogen fuel cell(固体高分子型燃料電池)として化学反応で水素と酸素を結合させて電気と熱、水を生成。燃やさず、粒子状物質もなく二酸化炭素を出さない。水素燃料電池のスケールアップということで最初は既製品がなかったから手作り10kWから初めて50kW、250kWとスケールアップしてきた。250kWの時は実際に供給してたらしい。250kWはサーバーラックを48時間稼働できるぐらいのディーゼル発電によるバックアップ電源の目安ぐらいの発電量みたいですね。
![]()
![]()
実験的にOKそうだったので大規模に3MWのシステムを購入して導入することに。排気ガスに見えるけど水蒸気。
![]()
![]()
![]()
![]()
次はデータセンター内。CPUの消費電力もどんどん上がっていってるけど、顕著なのはGPU。めっちゃ電気食う。NVIDIAのHopperつかったら消費電力もJumpupするってね(?)。こうなってくると空冷じゃだめ、ということで液冷へ。
その前にキーノートでも紹介されたAzure Maiaのラックは半分が冷却装置でしたね。サーバーのほうには取水口と排水口があって循環させてるのがわかります。伝統的な水冷方法。
![]()
![]()
![]()
![]()
通常チップに冷却用のプレート付けて熱交換するわけですが(左側)、それじゃ効率がよろしくない。ということでMicrofluidics Cooling(マイクロ流体冷却)です。熱抵抗の大幅な削減とフォームファクターの縮小が実現。プレート挟むんじゃなくて、チップ上に流体経路作って直接水を流して触れさせる感じ。熱源が広がらないし熱抵抗も少なく通常のヒートシンクより2~3倍効率がいい。実際にcore i7 8700 Jeepでの例。通常のヒートシンクより44%削減。
![]()
![]()
![]()
次はAIスーパーコンピューターの話。H100 GPUを使った構成でTOP500の3位になってました。OpenAIのために一部で使用。TOP500に申請して今年TOP3になったけど、実際の2023年のシステムではない。高帯域幅ネットワーク(InfiniBand)で接続されたGPUクラスタ。H100をNVLINKでマルチGPU化したサーバー(ND H100v5なVMはH100 GPUを8個載せてる)をQuantum-2 InfiniBandで接続。GPUあたり 400Gbitで専用リンク。
![]()
![]()
![]()
![]()
MLperfにもベンチマークを提出。BERTの3.5憶パラメータの学習で5.4分(3月時点)、GPT-3の1750憶パラメータでは10.9分。これは同じハードウェア上での結果。それを1344台のND H100v5 VMでGPT-3トレーニングさせたら4分(2023年11月時点)でした。2020年には数週間かかってたトレーニングが4分!
NVIDIA bare metal上では3.92分でAzure上でのオーバーヘッドは2%だそうです。
![]()
![]()
AMDとのパートナーシップでMI300X GPUを8台Infinity Fabric 3.0でつないでそれをInfiniBandでつなぐ。
![]()
AIビデオアクセラレーター。動画の処理中にだれが映っているとか、推論したり学習させたりしたい。その部分に高価なGPUを使うことはできるけど、専用設計ではないし、効率的ではない。というところでビデオアクセラレーターを使う。デモだとH.264 FullHDなビデオのデコーディングをさせてる。H100でさせるより5倍効率がいい。
![]()
![]()
次のアクセラレーターの話はAzure Maia。Microsoft Cloud(Azure)上のAIワークロード(LLMの学習とか推論)に最適化したカスタムチップ。壇上にはチップ開発してるときの環境が。水冷してるわけじゃないので大学の寮を思い出すような感じの空冷。デバッグポートにセキュリティ用モジュール。
![]()
![]()
![]()
![]()
![]()
![]()
![]()
ハード面はそんな感じ。ソフト面はMaia SDKを使ってそのうえでAI Framework(PythonやONNXなど)を動かして使える感じ。Frameworkから扱えるKernel部分をライブラリ化してCUDAやDOCmと同列でMaia APIも扱えるようにしたい(Tritonにあたる部分)。OpenAIと一緒に開発してるっぽい。
![]()
![]()
デモはGitHub Copilotで。推論させたときにMaia(へのネットワーク転送が)がどれぐらい使ってるか見てる感じ。
![]()
![]()
![]()
左は従来のインフラアーキテクチャ的なの。VMがハードウェアと直接やり取りしないからVMでネットワーク通信しようが何しようがHost OSのCPU燃やすだけ。右はオフロード専用カードを使ってアクセラレーションしてる感じのアーキテクチャですね。Azure Boostがそのあたりを担ってる。
![]()
リモートストレージで見るとVMがSCSI経由でアクセスするとホストのHyper-VのVM Bus通ってAzureソフトウェア通ってNDIS通って実際のストレージに行く。Azure Boost経由なら直ストレージアクセスとセキュリティ周りなど必要に応じてAzureソフトウェアアクセスもできる(セキュリティとリソースの境界がちゃんとある)。IOPSは2倍、スループットは25%向上。ローカルストレージでも同じようにセキュリティとリソース境界経由でNVMe Controllerを直接操作できる。こちらもIOPSは7.4倍、スループットは4.3倍らしい。
![]()
![]()
![]()
![]()
これがAzure Boost。シールが貼ってるところがFPGA。デモでは16台のディスクをつないでパフォーマンス見る感じ。4倍ぐらいですね(右側)。Linux上でのIOPSも段違いですね。
![]()
![]()
![]()
![]()
![]()
![]()
次はAIインフラストラクチャサービス。Project Forge(名前はまだない)です。AIの学習や推論におけるAzure全体やサーバーレス、ワークロードを意識したグローバルスケジューリングなど。
![]()
![]()
グローバルスケジューラーはGPU Fleet(艦隊)全リソースの状況知っていて、特定の地域にあるリソース(この例だとH100)が空いていて別リージョンで実行しても問題ないと判断したらProject Forgeがそのリージョンに配置するという感じ。(データの(リージョンによる)問題とかレイテンシー制限はもちろん考慮する)
リージョンを超えてグローバルでリソースの断片化を解消できそう。1つのプールを各チームは自分の容量だけしか使えていませんでしたが、今後は占有部分を除いて効率的にサブスクリプションを超えて利用させることができそう。
![]()
![]()
グローバルで分散してワークロードを実行するとなると、どこまで実施したか、中断や回復、スケーリングなどがとても大事。Reliablity Systemの透過的チェックポイントでそのあたりを担保する感じ。
開発者がエポック毎にチェックポイント作るとしてもそれが正しく安全かどうかとか、効率が良いとか何とも言えない。障害でのパフォーマンス低下とかもあるしチェックポイント間違えるとそれまでの作業が無駄になってしまう。GPU時間を無駄にしたくない。というのを解決するためにProject Forgeで透過的チェックポイントを提供する。わざわざ実装する必要がない。グローバルスケジューリングで別のところで動き始めるのはいいけど追い出される場合もある。その時も透過的チェックポイントを使って自動的に別のところで継続できる。開発者はそのあたり意識する必要がない。
![]()
![]()
実行する場所が変わったり復帰したりするとCPUアドレス空間もかわっちゃうのでDevice Proxyで実アドレスとCPUアドレス空間の橋渡しをできるようにする。これで数千台のGPUサーバー間で一貫したチェックポイントを作れる。しかも低オーバーロードで。
![]()
![]()
そういったチェックポイントの実装をしようとするとプロファイリングが大事。GPU使用率高そうでも実際にはネットワーク通信ばっかりでスカスカかもしれない、というのをプロファイリングできる。
![]()
![]()
![]()
![]()
![]()
![]()
ということがわかったので調整するとイテレーション時間を25%短縮することができました。CPUもGPUも理想的に100%近く使えている状態になりました。
![]()
![]()
![]()
ChatGPTジョーク。Markが考えたんじゃないよ!あとジョークのあと会場映すのわかってるカメラワークですね。
![]()
![]()
![]()
![]()
次はAIサービスの提供について。基本モデルのガイダンスですが、調整せずにLLMとの対話(Zero-shot)からはじめて次にFew-shot、それからRAG、最後にFine-tuneしましょう。なんでこの話をするかというと、みんなFine-tuneでカスタムモデルを作るケースが多いから。という話の前にFine-tuneの説明から。ベースのLLMのコピーを作って小さいデータセットで学習させて目的のモデルを作るのがFine-tune。その中で多いのがLoRA fine-tuning。重みづけをするアダプターを差し込んで学習させたモデルという感じです。普通にFine-tuningするより断然効率がいい。推論するときも並列でできるので効率がいい。
![]()
![]()
![]()
![]()
![]()
![]()
並列性のデモ。通常モデルとLoRAでFine-tuningしたモデルのレイテンシー比較しても大差ない。10モデルに対して25同時実行してもそれぞれで大きな差はない。
![]()
![]()
![]()
![]()
![]()
つまるところサービス提供側として安定して多数にサービス提供できるということ。LLMの使い方。生成が重いのかプロンプトが重いのかで特性が異なる。LLMで生成する際、プロンプトのトークンと生成する結果のトークンそれぞれで順次処理していくので複数くると干渉して応答が遅くなる。(ナイーブなほうだと1つ目が生成中に次のプロンプトのトークンが干渉して待ちになる)
![]()
![]()
とういのを解消するためにAzure ML Project FlyWheel。干渉せずにそれぞれ独立して処理、スループットなどを安定させることができる。
![]()
上側は通常の。大きいブロックがプロンプトで小さいのが応答生成部分。いろんなワークロードが競合してる状態。レイテンシーも安定しない。下がProject FlyWheel。プロンプトをチャンク化して固定サイズでバッチ的に実行している感じですね。
![]()
![]()
3つのタイプ(プロンプトが重くて応答が小さいもの、バランス、プロンプトが軽くて応答が重いもの)で実際に試してみる。Grafanaで結果みると3つとも100%近い性能(秒あたりのトークン数)でできてる。
![]()
![]()
![]()
生成内容について。自然言語で通常返すので処理するには不向きなのを新しいモデルではJSONモードとしてJSONで指示・生成できるようになりました。ただJSONスキーマが確実なことが保証されたわけじゃない、というところでTypeChatを導入(OpenSourceなProject)。スキーマを提示して出力が正しいかどうか検証するような感じ。
![]()
![]()
![]()
TypeChatのデモ。カフェのメニューのスキーマがあってラテを注文するとフィーマットされたJSONが返ってくる。スキーマ違反してるのを捕捉してどうしたらいいかをエラーで返せてる。
![]()
![]()
![]()
次はAIの学習ソースの話。まず人間と言語モデルの違い。人間は30年で10億単語ぐらいしか読まないしいくつかの基本的なことしか学習しないけど読み書きや考えることができる。言語モデルはめっちゃ単語読むし記憶もするけどロジックやアクションを学ぶのが難しい。仮説として、(人間みたいに)データセットの重要でなものを減らせるのでは?そしたらモデルも小さくて学習も早くて(ほんと?)コストも下げれるのでは?という話。
![]()
![]()
Microsoft ResearchのPhi-1は13億パラメータでやってみたLLM。それでも他のモデル並みな性能はだせそうだ。マルチモーダルなKosmos-2(16億パラメータ)でも同様。
![]()
![]()
![]()
学習データに著作権で保護されたものが混じってたりとか有害データを学習してしまうかもしれない問題もある。たとえばハリーポッターの内容を知ってるとか。ということで「忘れさせる」Unlearningのデモ。左側はハリーポッターの人物について(小説内を見てそう)、右は俳優さんについて返ってきてるけど嘘(幻覚)ですね。
![]()
![]()
![]()
モデルのパフォーマンスに影響を与えずに忘れさせる再学習ができたと。
![]()
最後はConfidential Computingについて。AI部分においてはモデルの保護、データの保護、それらを占有じゃなくて共有部分でも保護できるようにということを目指してる。デモは割愛(時間が押したのかな)。
![]()
![]()
![]()
![]()
![]()
最後のまとめ。スーパーメカゴジラビースト。29.7TBメモリ。CPUは1792コアです。CPUを使ったゲームをしよう。スターウォーズっぽいスクロールしちゃうよ。という感じでSeth氏が登場だ。テーマソングっぽいのを歌っちゃうよ。いつものことだけどCPU負荷をコアごとにかけて色つけてアニメーションさせてるやつです。タイトルが流れたあとはPONが対戦でできるw今回Sethの対戦相手はGPT-4だ。よくわからないうちにSeth氏が負けて退場w
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
という感じでAI尽くしではありますが、如何にAIワークロードが急増してるかというのと、それを支えるためのインフラをどうしているかがよくわかるセッションでした。