Upgrade to Pro — share decks privately, control downloads, hide ads and more …

生成AI向け機械学習クラスタ 構築のレシピ 北海道石狩編

生成AI向け機械学習クラスタ 構築のレシピ 北海道石狩編

Cloud Native Days Summer 2024での発表のスライドです。

概要
LLMを含む生成AIモデル学習の競争が激化しており、高い計算能力を持つクラスタを早く構築し使い勝手よく提供することがより重要になっています。生成AIのモデル学習向けにさらなる計算リソースを得るため、我々はさくらインターネット石狩データセンターのNVIDIA H100 GPUベアメタルサーバサービスを用いてKubernetesクラスタを構築しています。本発表ではこの新たな生成AI向け機械学習クラスタをどのように短期間で構築したのか、設計思想や構成から具体的なテクニックまで我々のこれまでのオンプレミス機械学習クラスタの構築と運用の経験を織りまぜながらお話しします。

Preferred Networks

June 15, 2024
Tweet

More Decks by Preferred Networks

Other Decks in Technology

Transcript

  1. 2 自己紹介 : 清水 翔 (Sho Shimizu / @oshothebig) •

    2019 ~ 現在 Preferred Networks • 2010 ~ 2019 富士通研究所 • Kubernetesクラスタの開発 & 運用 ◦ コンテナネットワーキング ▪ CNI plugin周りの色々 ◦ データセンターネットワーク ▪ IP Clos, BGP
  2. 3 自己紹介 : 上野 裕一郎 (Yuichiro Ueno / @y1r) •

    2021/04~:Preferred Networks に新卒入社 • そのまえ: 東工大 横田理央研究室 ◦ 多数のGPUで深層学習を効率的にやる • Kubernetesクラスタの開発 & 運用 ◦ GPU, MN-Core, NIC 周りなどもろもろ ◦ 分散キャッシュシステム
  3. 4 PFNの事業: AI技術のバリューチェーンを垂直統合 ソリューション・製品 計算基盤 AIチップ PFNは、チップ、計算基盤、生成AI・基盤モデル、ソリューション・製品まで、AI技術のバリューチェーンを垂直統合し、 ソフトウェアとハードウェアを高度に融合することで、競争力の高い技術の開発および産業応用を進めています。 生成AI・基盤モデル 様々な産業・消費者向けのソリューション・製品群

    MN-Core™ MN-Core™ 2 GPUクラスタ MN-3 (MN-Core™ クラスタ) 大規模言語モデル マルチモーダル基盤モデル (2024年リリース予定) 次世代機 MN-4 (MN-Core™2 クラスタ) MN-Core™ 2による 計算能力のクラウド提供 (2024年開始予定) 物質の電子状態・ エネルギー計算モデル 13B Preferred Potential (PFP)
  4. 5 PFNの事業: AI技術の水平展開 生成AI・基盤モデル 社会 コンシューマー 人間の能力の拡張 新しい創作表現・娯楽体験 安心・安全な社会 高度な教育・医療

    生産性向上・品質改善 属人化回避・人手不足解消 計算基盤 産業 AIチップ PFNは、AI技術のバリューチェーンを垂直統合し、産業、コンシューマー、社会に向けて様々な領域でソリューション・製 品を水平展開しています。 工場・製造 エンタメ ロボット 小売・流通 ヘルスケア 創薬 素材・化学 教育
  5. 6 • PFN / PFE では、 という大規模言語モデル(LLM)を開発中 • LLM:学習可能なパラメータが多い言語モデル ◦

    例えば 10B(100 億)のパラメータがあったとすると? ▪ パラメータ と Optimizer の内部状態 だけで 120 GB ◦ 1 デバイスでは扱えないため、パラメータを分散させて学習する • 今後 PFN / PFE ではさらに大きなモデルも学習したい ◦ より大きな計算量・要求メモリ → さらに計算資源が必要 ▪ 今日は、この機械学習クラスタをどう構築するかという話! 生成AI向け機械学習クラスタ構築のレシピ 北海道石狩編: ざっくり 生成AIの学習 とは?
  6. 7 • 生成AI向け機械学習クラスタとは? ◦ 生成AI に求められる要件、設計の大方針、デザイン空間 • 機械学習クラスタ構築のレシピ ◦ サーバ構成

    ◦ ネットワーク構成(ノード間、対外接続、LB、活用方法) ◦ Pod ネットワーク(RDMAの実現手段、CNI Plugin 選定) ◦ クラスタ構築(Cluster API infrastructure provider の自前実装) ◦ ストレージ構築 今日のもくじ
  7. 9 開発する機械学習クラスタの要件 早く学習を始めたい GPUがたくさんほしい 使い勝手は 既存のクラスタと同じで (Kubernetes) GPU同士の高速な通信 (RDMA) LLM

    スナップショット用 高速ストレージ 複数ユーザで共有したい 最新の速い NVIDIA GPU 運用効率 運用省力化
  8. 10 さくらインターネット の 高火力PHY 生成AI 学習に向いたベアメタルサービス • 高性能なGPUサーバ ◦ NVIDIA

    H100 GPU x 8 搭載 ▪ 80 GB VRAM / GPU • ベアメタル ◦ 低オーバーヘッド • インターコネクト (広帯域ロスレスネットワーク) ◦ 200 Gbps x 4 (RoCEv2 対応)
  9. 12 • メンバーは3人 ◦ 全員他の業務も抱えている ◦ さくらインターネットのサービスの知識がほぼない ◦ 👉 サービスの理解とクラスタの設計を並行で進めないといけない

    • GPUは貴重なリソース ◦ 高価で調達も難しいため遊ばせるのは無駄でしかない ◦ 👉 「サーバが利用可能 → クラスタ完成」の時間を最小限にしたい プロジェクトの置かれた状況
  10. 13 • 利用可能サーバは2段階で増える ◦ 第1弾: 一部のサーバが利用可能 ◦ 第2弾: 第1弾の3~4ヶ月後に多数サーバ追加 👉

    本番環境 • 第1弾 ◦ 本番への準備 ▪ 設計を進めながら検証クラスタを作る 約2ヶ月 ▪ Cluster APIなど自動化のための作りこみ 約1ヶ月 • 第2弾 ◦ 本番のクラスタをできるだけ早く構築する スケジュール
  11. 14 クラスタのデザイン空間 クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  12. 15 サーバ構成 クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 活用の方法は? LBはどうする? 何を提供する? どうやって作る? CNI Pluginは?
  13. 16 ネットワーク構成 クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 活用の方法は? LBはどうする? 何を提供する? どうやって作る? CNI Pluginは?
  14. 17 クラスタ構築 クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 活用の方法は? LBはどうする? 何を提供する? どうやって作る? CNI Pluginは?
  15. 18 ストレージ クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  16. 20 サーバ構成 クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 活用の方法は? LBはどうする? 何を提供する? どうやって作る? CNI Pluginは?
  17. 22 コントロールプレーンや管理ノードの構成 さくらの 専用サーバPHY さくらのクラウド 提供形態 ベアメタル VM 仮想化オーバーヘッド 小さい

    👍 大きい 初期費用 あり なし 👍 最低利用期間 あり なし 👍 インスタンスの選択肢 少ない 多い 👍 柔軟性を重視して選択
  18. 23 ネットワーク構成 (1/5) : ノード間ネットワーク クラスタ ネットワーク Internet クラウド ストレージ

    ノード ノード Control Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  19. 24 ノード間のネットワーク構成 コントロール プレーン 管理 ノード GPU ノード GPU ノード

    通常ネットワーク インターコネクト 単純さを重視して フラットなL2 高火力PHY クラウド NIC毎に1つのL2が提供される → 4つのサブネットに接続 200 Gbps
  20. 25 ネットワーク構成 (2/5) : インターコネクトの活用 クラスタ ネットワーク Internet クラウド ストレージ

    ノード ノード Control Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  21. 26 何もしないと多くのトラフィックは通常ネットワークを流れる 👉 できるだけ広帯域なインターコネクトにトラフィックを流したい インターコネクトの活用の小技 192.168.4.0/24 192.168.3.0/24 192.168.2.0/24 192.168.1.0/24 192.0.2.0/24

    インターコネクト 通常ネットワーク GPUノード .1 .1 GPUノード .2 .2 192.168.1.2 192.168.2.2 192.168.3.2 192.168.4.2 192.0.2.2/32 Destination Next hop スタティック経路を設定して インターコネクト側に曲げる
  22. 27 ネットワーク構成 (3/5) : 対外接続 クラスタ ネットワーク Internet クラウド ストレージ

    ノード ノード Control Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  23. 29 案1: さくらの専用サーバPHY側から接続 GPUノード Internet Firewall 専用サーバPHY クラウド Cisco Firepower

    4125 アプライアンス オプション Control Plane 🙆 高機能 & 高性能 🙅 設定の手間が大きい 🙅 帯域の柔軟性が低い
  24. 30 案2: さくらのクラウド側から接続 GPUノード Internet VPCルータ 専用サーバPHY Control Plane クラウド

    アプライアンスの1種 🙆 設定の手間が少ない 🙆 帯域の選択肢が豊富 🙅 機能や性能の制約あり 👉 環境構築と柔軟性を重視して案2を採用
  25. 31 対外接続: パブリッククラウドとの接続の必要性 既存拠点1 既存拠点2 新規拠点 認証付きLB Cluster API Kubernetes

    Kubernetes Kubernetes Kubernetes Kubernetes Kubernetes ユーザ AWS AWSに共通コンポーネントを配置する構成 • ユーザ: 認証付きLB経由でアクセス • クラスタ管理: Cluster APIで複数拠点をまとめて管理 今回作成するクラスタも既存拠点と同様に扱いたい 👉 AWSとの接続が必要
  26. 32 検討した方法 • OCX (Open Connectivity eXchange) ◦ NaaS (Network

    as a Service) ◦ 広帯域のネットワークを比較的低コストに利用可能 • AWS接続オプション @ さくらのクラウド ◦ 管理コンソールから簡単に申込可能 ◦ 利用開始までが短い(5営業日程度) 👉 AWS接続オプションを採用 • 環境構築の時間の短さ • あとから必要に応じてOCXに変更することも可能 対外接続: AWS Direct Connectとの接続方法
  27. 33 ネットワーク構成 (4/5) : ロードバランサ クラスタ ネットワーク Internet クラウド ストレージ

    ノード ノード Control Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  28. 34 • 用途 ◦ APIサーバの冗長化 ◦ Ingress (クラスタ外からの疎通) • 既存の環境では?

    ◦ MetalLBを使いBGPでVIPを広報 👉 今回の環境では難しい構成 • 手間が少なくすぐに使える方法 👉 さくらのクラウドのアプライアンス オプションにあるロードバランサを選択 ロードバランサ ロードバランサ API request
  29. 35 ネットワーク構成 (5/5) : Pod間ネットワーク クラスタ ネットワーク Internet クラウド ストレージ

    ノード ノード Control Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする? CNI Pluginは?
  30. 36 SR-IOVによるPodネットワークのRDMA対応 veth VF eth0 net1 PF VF VF veth

    VF Pod Podのnetnsに移す NIC ホスト 通常ネットワーク インターコネクト SR-IOVによる NICの仮想化
  31. 37 RDMA対応: 典型的CNI plugin構成 Multus kubelet Pod eth0 net1 CNI

    plugin CNI plugin 通常ネットワーク用 インターコネクト用 2種類のCNI pluginにそれぞれ何を採用するかという問題 SR-IOVのVFを利用
  32. 38 • 既存環境で利用しているため • 動作モードの違い ◦ 既存環境: ネイティブルーティング (BGP) ◦

    今回の環境: トンネリングモード (VXLAN) • 理由 ◦ BGPによるL3ファブリック構成の既存環境との構成の違い ◦ 調査項目を減らしできるだけ早くクラスタを構築するため 今後可能であればBGPによるネイティブルーティングへの変更を検討したい 通常ネットワーク用: Cilium
  33. 39 • 既存環境では内製CNI pluginをインターコネクト用に利用 ◦ 課題: 既存環境のネットワーク構成と密結合した実装 • 独自コンポーネントからオープンソースに置き換えたい意向もあった •

    IPAM pluginどうするか問題 ◦ インターコネクト用のCNI pluginはIPAMを自分で考える必要がある ◦ WhereaboutsとL2ネットワーク構成のインターコネクトがマッチ 👆 クラスタワイドにアドレスを割り当てるIPAM plugin インターコネクト用: SR-IOV CNI plugin “If you need a way to assign IP addresses dynamically across your cluster -- Whereabouts is the tool for you”
  34. 40 クラスタ構築 クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 活用の方法は? LBはどうする? 何を提供する? どうやって作る?
  35. 41 機械学習用 Kubernetes クラスタ ができるまで ワーカーノードのセットアップ コンテナランタイム, GPUドライバ, NICドライバ などのインストール

    Kubernetes クラスタへの参加 コントロールプレーンの構築 etcd, kube-apiserver などクラスタに必要なコンポーネントのインストール・初期化 Kubernetes へのアドオンのインストール NVIDIA device plugin, CNI Plugin (通常, RDMA用), ストレージ構築 などなど 👈 ここの話
  36. 42 • OS のインストールや IP アドレスの設定などを行う ◦ 例: Terraform や

    各種クラウドのAPI を使ってノードを作成する • コンテナランタイムやドライバなどソフトウェアをインストールする ◦ 例: Ansible を使ってインストールする • ノードを Kubernetes クラスタに追加する ◦ 例: kubeadm join コマンドを使ってクラスタに入れる 通常のワーカーノードのセットアップ方法
  37. 43 • 数十台のサーバを管理するのはとにかく大変 ◦ 事例:「server-35 だけ Ansible が失敗」 ▪ Ansible

    を流し直したらserver-35のドライバだけ最新に... • バグを踏むノードと踏まないノードがある、なぜ??? ◦ 事例:「GPU 壊れたので交換してもらった」 ▪ OS再インストールからやり直すのが大変... • 一台一台進捗や状態を管理して丁寧に運用する必要があるってこと? ◦ あまりに大変なのでもっと簡単に運用したい → Cluster API 通常のセットアップ方法の課題
  38. 44 • Cluster API: kubernetes-sigs で開発中のオープンソースソフトウェア ◦ 親 Kubernetes 上のカスタムリソースで、子

    Kubernetes を管理 ▪ Kubernetes らしく Reconcile でノードを扱う • 「Machine リソースの削除で、ノードを削除する」 など Cluster API: Kubernetes で Kubernetes を管理 親 Kubernetes 子 Kubernetes Cluster API infrastructure provider クラウド API Machine Watch infrastructure Machine Watch 対応 仮想マシン 操作 作成・削除 仮想マシン 仮想マシン
  39. 45 • ノードの作成からセットアップまで完全に自動化可能 ◦ 事例:「なんかわからないけどノードの機嫌が悪い」 ▪ とりあえず初期化して様子をみてみよう がすぐできる! ◦ 事例:「ハードウェア故障の部品交換って、どこから再設定?」

    ▪ 全部初期化しちゃえ がすぐできる!! ◦ 事例:「ちょっと急いでセットアップして欲しいんだけど...」 ▪ すぐできる!!! • infrastructure provider を実装すれば任意のクラウドに対応可能 ◦ これまで ベアメタルを管理する MAAS provider を実装して運用 ◦ 今回新たに さくらのクラウド・専用サーバPHY版 provider を実装 Cluster API の良いところ: カスタマイズ可能でハードウェア障害や大規模化にも対応できるベストな方法
  40. 46 kind: SakuraHost metadata: name: control-plane-test-001 spec: type: VM ipAddress:

    aaa.bbb.ccc.ddd VM の構築の流れ infrastructure provider kind: SakuraMachineTemplate metadata: name: sakura-001-md-0 spec: template: spec: vm: switchID: abcdefghijkl cpu: 4 memoryGB: 8 diskGB: 100 さくらのクラウド API Step 3: VM・ディスク作成依頼 VM Step 6: 作成されたVMに SSH 接続 証明書や鍵のコピー コマンド実行(ansible, kubeadm join) ディスク Step 4: ディスク作成・修正 (ローカルIPアドレス等設定) Step 5: VM作成・起動 VM を使ったクラウドなので インスタンスの追加と削除は API で簡単! さくら製 Go クライアント を活用しました 😊 Step 1: ノードの IP, ホスト名 を取得 Step 2: ノードのスペックを取得 所要時間:15分
  41. 47 高火力PHY の構築の流れ infrastructure provider kind: SakuraHost metadata: name: phy-test-001

    spec: type: Phy ipAddress: aaa.bbb.ccc.ddd phyServerID: abcdefghijkl Step 1: ノードの ID, IP, ホスト名 を取得 kind: SakuraMachineTemplate metadata: name: sakura-001-md-0-phy spec: template: spec: phy: privateNetworkID: abcdefghijkl os: ubuntu2204 Step 2: ノードのスペックを取得 専用サーバ PHY API Step 3: OSインストール依頼 GPU Server Step 4: OS再インストール Step 5: OS再インストール済みのノードに SSH 接続 ローカルIPアドレスの設定 NIC Step 6: ネットワーク切替依頼 Step 7: ネットワーク切替 Step 8: ネットワーク切り替え済みのノードに SSH 接続 証明書や鍵のコピー コマンド実行(ansible, kubeadm join) ネットワーク切替などベアメタル特有の煩雑さを 内製した infrastructure provider で吸収 所要時間:1時間
  42. 48 ストレージ クラスタ ネットワーク Internet クラウド ストレージ ノード ノード Control

    Plane インター コネクト ノード GPU ノード どこに作る? 接続方法は? Kubernetesクラスタ セットアップ 方法は? 構成は? 何を提供する? どうやって作る? 活用の方法は? LBはどうする?
  43. 49 • 大規模言語モデル(LLM)は色々取り回しが大変 ◦ 学習時間が長い(数ヶ月におよぶこともある) ◦ 保存したいデータが大きい(数百GBからそれ以上へ) • 物理故障時に計算を途中からやり直すため、スナップショットが必要 ◦

    学習中に頻繁にとるし、複数の Pod から分散して書き込みがある ◦ 推論時は Pod 数など条件が変わるかもしれない • これらの要件に適したストレージが現状見つけられていない ◦ NFS? Rook/Ceph? Ozone? 分散キャッシュシステム? 生成AI 向けのストレージ?
  44. 50 • 高火力 PHY の GPU サーバ のディスクを上手く活用したい ◦ 各サーバに

    7.68 TB x 4 の SSD が搭載されている • トレードオフがある以下の方法を併用することからまずはスタート ◦ Rook/Ceph(ブロックストレージ・ファイルストレージ) ▪ 課題: パフォーマンス ◦ 分散キャッシュシステム(高速キャッシュ) ▪ 課題: 信頼性 2024/06 時点のアプローチ https://tech.preferred.jp/ja/blog/distributed-cache-for-deep-learning/ https://speakerdeck.com/pfn/k8s-tokyo-60-distributed-cache-system
  45. 52 • さくらインターネット石狩DC をお借りして 生成AI 向けの Kubernetes クラスタを構築しました • クラスタ構築のデザイン空間は広く、考えることがたくさんあります

    ◦ VM/ベアメタルの組み合わせ, ネットワーク(物理, Pod), 構築方法... ◦ 今回は PFN で考えた構築のレシピを紹介しました • みなさんもGPUクラスタをつくっておすすめレシピを教えてください! まとめ
  46. 53 • Preferred Networks の計算基盤関連チームでは採用を実施中です! ◦ 機械学習プラットフォームエンジニア (Kubernetes, 社内向け機械学習プラットフォーム、外販クラウドサービスの開発運用) ◦

    ストレージエンジニア (ストレージの企画設計管理運用) ◦ 大規模計算基盤エンジニア/ネットワーク・インフラ運用エンジニア (クラスタの物理設計、MN-Core™ を含めた先端システム設計等) • カジュアル面談もやってます → We’re hiring! ジョブボードにも はってます お気軽に お声がけください