Slide 1

Slide 1 text

生成AI向け機械学習クラスタ 構築のレシピ 北海道石狩編 Cloud Native Days Summer 2024 Sho Shimizu and Yuichiro Ueno, Preferred Networks, Inc.

Slide 2

Slide 2 text

2 自己紹介 : 清水 翔 (Sho Shimizu / @oshothebig) ● 2019 ~ 現在 Preferred Networks ● 2010 ~ 2019 富士通研究所 ● Kubernetesクラスタの開発 & 運用 ○ コンテナネットワーキング ■ CNI plugin周りの色々 ○ データセンターネットワーク ■ IP Clos, BGP

Slide 3

Slide 3 text

3 自己紹介 : 上野 裕一郎 (Yuichiro Ueno / @y1r) ● 2021/04~:Preferred Networks に新卒入社 ● そのまえ: 東工大 横田理央研究室 ○ 多数のGPUで深層学習を効率的にやる ● Kubernetesクラスタの開発 & 運用 ○ GPU, MN-Core, NIC 周りなどもろもろ ○ 分散キャッシュシステム

Slide 4

Slide 4 text

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)

Slide 5

Slide 5 text

5 PFNの事業: AI技術の水平展開 生成AI・基盤モデル 社会 コンシューマー 人間の能力の拡張 新しい創作表現・娯楽体験 安心・安全な社会 高度な教育・医療 生産性向上・品質改善 属人化回避・人手不足解消 計算基盤 産業 AIチップ PFNは、AI技術のバリューチェーンを垂直統合し、産業、コンシューマー、社会に向けて様々な領域でソリューション・製 品を水平展開しています。 工場・製造 エンタメ ロボット 小売・流通 ヘルスケア 創薬 素材・化学 教育

Slide 6

Slide 6 text

6 ● PFN / PFE では、 という大規模言語モデル(LLM)を開発中 ● LLM:学習可能なパラメータが多い言語モデル ○ 例えば 10B(100 億)のパラメータがあったとすると? ■ パラメータ と Optimizer の内部状態 だけで 120 GB ○ 1 デバイスでは扱えないため、パラメータを分散させて学習する ● 今後 PFN / PFE ではさらに大きなモデルも学習したい ○ より大きな計算量・要求メモリ → さらに計算資源が必要 ■ 今日は、この機械学習クラスタをどう構築するかという話! 生成AI向け機械学習クラスタ構築のレシピ 北海道石狩編: ざっくり 生成AIの学習 とは?

Slide 7

Slide 7 text

7 ● 生成AI向け機械学習クラスタとは? ○ 生成AI に求められる要件、設計の大方針、デザイン空間 ● 機械学習クラスタ構築のレシピ ○ サーバ構成 ○ ネットワーク構成(ノード間、対外接続、LB、活用方法) ○ Pod ネットワーク(RDMAの実現手段、CNI Plugin 選定) ○ クラスタ構築(Cluster API infrastructure provider の自前実装) ○ ストレージ構築 今日のもくじ

Slide 8

Slide 8 text

8 生成AI向け機械学習クラスタとは?

Slide 9

Slide 9 text

9 開発する機械学習クラスタの要件 早く学習を始めたい GPUがたくさんほしい 使い勝手は 既存のクラスタと同じで (Kubernetes) GPU同士の高速な通信 (RDMA) LLM スナップショット用 高速ストレージ 複数ユーザで共有したい 最新の速い NVIDIA GPU 運用効率 運用省力化

Slide 10

Slide 10 text

10 さくらインターネット の 高火力PHY 生成AI 学習に向いたベアメタルサービス ● 高性能なGPUサーバ ○ NVIDIA H100 GPU x 8 搭載 ■ 80 GB VRAM / GPU ● ベアメタル ○ 低オーバーヘッド ● インターコネクト (広帯域ロスレスネットワーク) ○ 200 Gbps x 4 (RoCEv2 対応)

Slide 11

Slide 11 text

11 構築するクラスタの規模 CPUコア GPU メモリ NVMe 7500+ 500+ (VRAM 40+ TB) 130+ TB 2.0+ PB

Slide 12

Slide 12 text

12 ● メンバーは3人 ○ 全員他の業務も抱えている ○ さくらインターネットのサービスの知識がほぼない ○ 👉 サービスの理解とクラスタの設計を並行で進めないといけない ● GPUは貴重なリソース ○ 高価で調達も難しいため遊ばせるのは無駄でしかない ○ 👉 「サーバが利用可能 → クラスタ完成」の時間を最小限にしたい プロジェクトの置かれた状況

Slide 13

Slide 13 text

13 ● 利用可能サーバは2段階で増える ○ 第1弾: 一部のサーバが利用可能 ○ 第2弾: 第1弾の3~4ヶ月後に多数サーバ追加 👉 本番環境 ● 第1弾 ○ 本番への準備 ■ 設計を進めながら検証クラスタを作る 約2ヶ月 ■ Cluster APIなど自動化のための作りこみ 約1ヶ月 ● 第2弾 ○ 本番のクラスタをできるだけ早く構築する スケジュール

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

19 構築のレシピ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21 さくらインターネットの2つのサービス さくらのクラウド 高火力PHY さくらの 専用サーバPHY IaaS ベアメタル

Slide 22

Slide 22 text

22 コントロールプレーンや管理ノードの構成 さくらの 専用サーバPHY さくらのクラウド 提供形態 ベアメタル VM 仮想化オーバーヘッド 小さい 👍 大きい 初期費用 あり なし 👍 最低利用期間 あり なし 👍 インスタンスの選択肢 少ない 多い 👍 柔軟性を重視して選択

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

24 ノード間のネットワーク構成 コントロール プレーン 管理 ノード GPU ノード GPU ノード 通常ネットワーク インターコネクト 単純さを重視して フラットなL2 高火力PHY クラウド NIC毎に1つのL2が提供される → 4つのサブネットに接続 200 Gbps

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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 スタティック経路を設定して インターコネクト側に曲げる

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

28 対外接続: インターネット ● インターネットからのインバウンド接続は不要 👉 NATを使ったインターネットアクセスができればOK ● 検討した案 ○ さくらの専用サーバPHY側から接続する ○ さくらのクラウド側から接続する

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

30 案2: さくらのクラウド側から接続 GPUノード Internet VPCルータ 専用サーバPHY Control Plane クラウド アプライアンスの1種 🙆 設定の手間が少ない 🙆 帯域の選択肢が豊富 🙅 機能や性能の制約あり 👉 環境構築と柔軟性を重視して案2を採用

Slide 31

Slide 31 text

31 対外接続: パブリッククラウドとの接続の必要性 既存拠点1 既存拠点2 新規拠点 認証付きLB Cluster API Kubernetes Kubernetes Kubernetes Kubernetes Kubernetes Kubernetes ユーザ AWS AWSに共通コンポーネントを配置する構成 ● ユーザ: 認証付きLB経由でアクセス ● クラスタ管理: Cluster APIで複数拠点をまとめて管理 今回作成するクラスタも既存拠点と同様に扱いたい 👉 AWSとの接続が必要

Slide 32

Slide 32 text

32 検討した方法 ● OCX (Open Connectivity eXchange) ○ NaaS (Network as a Service) ○ 広帯域のネットワークを比較的低コストに利用可能 ● AWS接続オプション @ さくらのクラウド ○ 管理コンソールから簡単に申込可能 ○ 利用開始までが短い(5営業日程度) 👉 AWS接続オプションを採用 ● 環境構築の時間の短さ ● あとから必要に応じてOCXに変更することも可能 対外接続: AWS Direct Connectとの接続方法

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

34 ● 用途 ○ APIサーバの冗長化 ○ Ingress (クラスタ外からの疎通) ● 既存の環境では? ○ MetalLBを使いBGPでVIPを広報 👉 今回の環境では難しい構成 ● 手間が少なくすぐに使える方法 👉 さくらのクラウドのアプライアンス オプションにあるロードバランサを選択 ロードバランサ ロードバランサ API request

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

36 SR-IOVによるPodネットワークのRDMA対応 veth VF eth0 net1 PF VF VF veth VF Pod Podのnetnsに移す NIC ホスト 通常ネットワーク インターコネクト SR-IOVによる NICの仮想化

Slide 37

Slide 37 text

37 RDMA対応: 典型的CNI plugin構成 Multus kubelet Pod eth0 net1 CNI plugin CNI plugin 通常ネットワーク用 インターコネクト用 2種類のCNI pluginにそれぞれ何を採用するかという問題 SR-IOVのVFを利用

Slide 38

Slide 38 text

38 ● 既存環境で利用しているため ● 動作モードの違い ○ 既存環境: ネイティブルーティング (BGP) ○ 今回の環境: トンネリングモード (VXLAN) ● 理由 ○ BGPによるL3ファブリック構成の既存環境との構成の違い ○ 調査項目を減らしできるだけ早くクラスタを構築するため 今後可能であればBGPによるネイティブルーティングへの変更を検討したい 通常ネットワーク用: Cilium

Slide 39

Slide 39 text

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”

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

41 機械学習用 Kubernetes クラスタ ができるまで ワーカーノードのセットアップ コンテナランタイム, GPUドライバ, NICドライバ などのインストール Kubernetes クラスタへの参加 コントロールプレーンの構築 etcd, kube-apiserver などクラスタに必要なコンポーネントのインストール・初期化 Kubernetes へのアドオンのインストール NVIDIA device plugin, CNI Plugin (通常, RDMA用), ストレージ構築 などなど 👈 ここの話

Slide 42

Slide 42 text

42 ● OS のインストールや IP アドレスの設定などを行う ○ 例: Terraform や 各種クラウドのAPI を使ってノードを作成する ● コンテナランタイムやドライバなどソフトウェアをインストールする ○ 例: Ansible を使ってインストールする ● ノードを Kubernetes クラスタに追加する ○ 例: kubeadm join コマンドを使ってクラスタに入れる 通常のワーカーノードのセットアップ方法

Slide 43

Slide 43 text

43 ● 数十台のサーバを管理するのはとにかく大変 ○ 事例:「server-35 だけ Ansible が失敗」 ■ Ansible を流し直したらserver-35のドライバだけ最新に... ● バグを踏むノードと踏まないノードがある、なぜ??? ○ 事例:「GPU 壊れたので交換してもらった」 ■ OS再インストールからやり直すのが大変... ● 一台一台進捗や状態を管理して丁寧に運用する必要があるってこと? ○ あまりに大変なのでもっと簡単に運用したい → Cluster API 通常のセットアップ方法の課題

Slide 44

Slide 44 text

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 対応 仮想マシン 操作 作成・削除 仮想マシン 仮想マシン

Slide 45

Slide 45 text

45 ● ノードの作成からセットアップまで完全に自動化可能 ○ 事例:「なんかわからないけどノードの機嫌が悪い」 ■ とりあえず初期化して様子をみてみよう がすぐできる! ○ 事例:「ハードウェア故障の部品交換って、どこから再設定?」 ■ 全部初期化しちゃえ がすぐできる!! ○ 事例:「ちょっと急いでセットアップして欲しいんだけど...」 ■ すぐできる!!! ● infrastructure provider を実装すれば任意のクラウドに対応可能 ○ これまで ベアメタルを管理する MAAS provider を実装して運用 ○ 今回新たに さくらのクラウド・専用サーバPHY版 provider を実装 Cluster API の良いところ: カスタマイズ可能でハードウェア障害や大規模化にも対応できるベストな方法

Slide 46

Slide 46 text

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分

Slide 47

Slide 47 text

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時間

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

49 ● 大規模言語モデル(LLM)は色々取り回しが大変 ○ 学習時間が長い(数ヶ月におよぶこともある) ○ 保存したいデータが大きい(数百GBからそれ以上へ) ● 物理故障時に計算を途中からやり直すため、スナップショットが必要 ○ 学習中に頻繁にとるし、複数の Pod から分散して書き込みがある ○ 推論時は Pod 数など条件が変わるかもしれない ● これらの要件に適したストレージが現状見つけられていない ○ NFS? Rook/Ceph? Ozone? 分散キャッシュシステム? 生成AI 向けのストレージ?

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

51 まとめ

Slide 52

Slide 52 text

52 ● さくらインターネット石狩DC をお借りして 生成AI 向けの Kubernetes クラスタを構築しました ● クラスタ構築のデザイン空間は広く、考えることがたくさんあります ○ VM/ベアメタルの組み合わせ, ネットワーク(物理, Pod), 構築方法... ○ 今回は PFN で考えた構築のレシピを紹介しました ● みなさんもGPUクラスタをつくっておすすめレシピを教えてください! まとめ

Slide 53

Slide 53 text

53 ● Preferred Networks の計算基盤関連チームでは採用を実施中です! ○ 機械学習プラットフォームエンジニア (Kubernetes, 社内向け機械学習プラットフォーム、外販クラウドサービスの開発運用) ○ ストレージエンジニア (ストレージの企画設計管理運用) ○ 大規模計算基盤エンジニア/ネットワーク・インフラ運用エンジニア (クラスタの物理設計、MN-Core™ を含めた先端システム設計等) ● カジュアル面談もやってます → We’re hiring! ジョブボードにも はってます お気軽に お声がけください

Slide 54

Slide 54 text

Making the real world computable