データ利活用に向けた高性能Kubernetes環境構築の検討

杉木 章義（北海道大学情報基盤センター）

1

背景：HPC利用の拡大• 従来のスパコン・学術クラウドでは対応できない計算資源要求が増加している• 大規模データ処理，ML/AIと様々な学術分野への応用• 米国 National Research Cloud (NRC)の提唱• クラウド基盤，データに基づく探索，シミュレーションを21世紀型研究における三つの柱と定義• 近年，新しい計算資源提供の試みが行われている• 9大学・2研究所* mdx（データ活用社会創成基盤）• Society 5.0の社会像を受けて，産学官連携のデータ活用を目標• 産業技術総合研究所 ABCI（AI橋渡しクラウド）• 東京大学 Wisteria/BDEC-01（「計算・データ・学習」融合スパコン）• 大阪大学 ONION（データ集約基盤）* 北海道⼤学，東北⼤学，筑波⼤学，東京⼤学，東京⼯業⼤学，名古屋⼤学，京都⼤学，⼤阪⼤学，九州⼤学，
国⽴情報学研究所， 産業技術総合研究所

2

問題：拡大する需給ギャップ• 研究者の期待は大きくなる一方で，サービス水準は計算機（計算ノード・ストレージ）の提供のまま• 教育プログラム，研究支援サービス（人的リソース）の制約• 研究者相互の共同研究による解消も期待されている

Dataset
ソフトウェア・フレーム
ワークの重要性が⾼まる

DatasetApplication

Leve of
User expectations

Application

Application

Bigdata Framework(Hadoop, Spark…)

ML/AL Framework(TensorFlow,PyTorch…)

Libraries

Libraries

Libraries

OSOS

OS

hardwarevirtualized hardware

virtualized hardware(a) Traditional HPC(b) Bigdata（2000s-)(C) ML/AI (converged)(2010s-)(1960s-)Widening gap

Level ofService provided3

本研究の目標

既存研究（HPC183）からはAnsible⾃動構築化，
K8sを構成するコンポーネントをさらに最適化• 従来のスパコンに近い高性能なKubernetes (k8s)
環境のプロトタイプを構築する(1) KubernetesベースのHPC実現可能性の検討• 従来のジョブスケジューラ（バッチ処理）によらないHPCシステムの検討• 従来のスパコンに近い，高性能な計算ノード・インターコネクト通信・並列分散ファイルシステムを活用• 将来的なHPCシステムの可能性を探る(2) mdxにおけるマネージドKubernetesの提供• より直接的に，利用者にmdxに最適化されたKubernetes環境を提供
S/Wのみ
交換

Batch Apps.

Batch Apps.

SLURM, PBS, TCS… (w/ Singularity)
CPU

GPU/FPGA

LustreKubernetes

IB(RDMA)(a) Traditional HPC System

Service Apps.

CPU
ほぼ同⼀の
H/W

GPU/FPGA

LustreIB(RDMA)(b) K8s-based HPC System

最終的には両システムの併存を⽬指す
k8sの⽅が今後のアプリケーション整備が進みやすいと期待

4mdx（1/2）• データ活用社会創成プラットフォーム（mdx）• 内閣府Society 5.0の社会像を受けて，産学官連携によるデータ利活用を目指す• mdx計画の第1弾システム• 2021.3 稼働，2021.9 運用開始（試験運用期間中）• 東京大学柏IIキャンパスに設置• サービス提供水準はIaaS（仮想マシン）• 研究者相互の共創による環境整備が期待されている
計算機（2種類）(1) 汎⽤CPUノード（IceLake-SP）
CPUパック（1仮想コア単位）(2) 演算加速GPUノード（A100）
GPUパック（1GPU単位）
SR-IOV, PVRDMA, Port Group
最⼤限RDMA可能なのは，SR-IOV

ストレージ（3種類）

引⽤：データ活⽤社会創成プラットフォーム(1) ⾼速ストレージ（/fast, SSD）
(2) ⼤容量ストレージ（/large, HDD）
DDN Exascalerベース(3) オブジェクトストレージ
5
S3互換，外部連携mdx (2/2)
mdxの利用手順(1) 計算ノードの選択（CPU・GPUパック，仮想NIC（SR-IOV・
PVRDMA・PortGroup），仮想マシンテンプレート）(2) 内部共有ストレージの選択（高速・大容量ストレージ）(3) 通信の設定（DNAT/ACLの設定）
SINET6
DNAT/ACL

対外接続ルータ（400Gbps x 2）

外部接続ネットワーク（Ethernet, VXLAN-based）

CPUパック
（1vCPU単位）

汎⽤CPUノード

演算加速ノード(Intel Xeon Ice Lake x 2)

(NVIDIA A100 GPU x 8)

368 nodes

40 nodesGPUパック（18vCPU/1GPU単位）

仮想NIC（SR-IOV, PVRDMA, Port Group）
RDMA通信可能

内部⾼速ネットワーク（ROCEv2, VXLAN-based）

S3互換

Lustre仮想ディスク
ストレージ（NVMe/0.5PB）

⾼速ストレージ（NVMe/1PB）

⼤容量ストレージ（HDD/17PB）

オブジェクトストレージ（HDD/10PB）

6

既存HPCシステムの課題• 対話環境への対応• インタラクティブジョブとJupyter環境の相性がよくない• 計算機利用率の向上• 近年のGPU（V100/A100/H100）は非常に高い性能• 必ずしも全てのジョブでGPUの最大性能は必要ない（MIG: MultiInstance GPU）

• 計算とI/Oの比率• ETL処理では，CPUはそれほど必要ないが，I/Oを並列分散• 管理者権限を要するソフトウェア導入• Singularity，Condaなどの導入により改善• 研究成果のサービス化• バッチ処理では実行まで時間差が発生（プリエンプション・優先処理・資源予約を導入しても）7今回のアプローチ（プロトタイプ構築）• 既存Kubernetes用コンポーネントを最大限利用• 新規開発は行わない• 既存のCRI/CNI/CSIなどを活用・組み合わせる• KubernetesにHPCの概念を持ち込む• NUMA（CPU・メモリ）, CPU pinning• GPUの活用• 並列FS（Lustre）のコンテナ永続ボリュームでの利用• RDMA通信に対応（Infiniband or ROCEv2）• 今回は性能と運用可能性を中心に評価• セキュリティ・プライバシーの評価は次回以降に持ち越し

8実装• k8s-configs• mdxに最適化されたKubernetes環境を自動構築するス
クリプト（Ansibleスクリプト）• 先行するmachine-configsの影響を受ける• ユーザポータルで仮想マシンをセットアップした状態から約10分でKubernetesクラスタを自動展開• 仮想マシンのセットアップは今後，mdx REST APIで改善• mdx REST APIは別プロジェクト（JST共創）で開発された成果
mdxのユーザポータル（既存）
mdxに最適化されたKubernetesクラスタ環境を⾃動展開

VM

VM

VM

VM

High-performance
Kubernetes Cluster (HPK)(mdx-optimized)
VM

k8s-configsを実⾏（約10分）

利⽤者がユーザポータルで作成した仮想マシン（SSH到達可能）9

仮想マシン構成• Kubernetesクラスタ• k8sマスタ，k8s計算ノード（CPUノード，GPUノード）• 周辺サーバ• 踏み台サーバ（bastion），コンテナレジストリ（harbor）
Private container registry
harborhelm

harborkube-node

kube-master(SR-IOV)RDMA ready(ROCEv2)

kubectlbastion
SSH Forwarding

Kubernetes cluster (k0s)

SSH

DNAT/ACL

Service layer (S/W)
Metal LB (L2)

kube-gpu
Forwarding(SR-IOV)SINET6
Service Port

LENS
User PC

必要に応じて展開するノード数を増減可能
10ソフトウェア構成
構成要素

実⾏ランタイム

Kubernetes distro

k0s（軽量Kubernetes）

NUMA対応Topology Manager, CPU Manager, Memory Manager

CRI（コンテナ実⾏環境）

Containerd（k0s標準）
NVDIA GPU Operator（GPUノードのみ）
NVIDIA Container Toolkit，NFD，nv-peermem，MIG対応，※CUDA・GPUドライバはmdx標準を使⽤

CSI（永続ストレージ対応）DDN Exascaler File CSI Driver

CNI（ネットワーク対応）

Kube-router（k0s標準）
Mellanox Network Operator（ROCEv2/RDMA対応）
k8s RDMA shared device plugin, Multus, Whereabouts※Mellanoxドライバはmdx標準を使⽤

Load Balancer（サービス接続）

Metal LB（L2モード）

運⽤・監視

LENS, Kube Prometheus Stack

バッチジョブ対応

Kubeflow MPI Operator※mdx固有に導⼊した部分
11

予備実験(1)：自動クラスタ構築時間• 最小クラスタの構築時間を3回測定• CPUノード・GPUノード各２台• 測定結果：7分55秒，7分52秒，7分55秒で構築完了

ノード台数

パック数

ディスク接続bastion

1台

4 CPUパック

100GB

Port Groupharbor

1台

4 CPUパック

160GB

Port Group

kube-master

1台

8 CPUパック

100GB

Port Group

kube-node

2台

18 CPUパック150GB

SR-IOV (RDMA対応)

kube-gpu

2台

1 GPUパック

150GB

SR-IOV (RDMA対応)

12

予備実験(2)：GPU性能• TensorFlow Benchmarksで測定• MPI Operator付属のtf̲cnn̲benchmarks• ResNet50モデル, バッチサイズ64, fp16有効，Horovod使用• mdxはCUDA11のため，CUDA10からCUDA11に変更• ワーカ・マスタの起動順序を調整（マスタ起動の遅延を挿入）
接続

スループットEthernet (frontend)

1933.02 images/sec

ROCEv2 (Socket)

2232.02 images/sec

ROCEv2 (IB)3346.78 images/sec

Pod
1

Pod
2

Pod
3

Pod
1

Pod
2

GID=3

GID=4

GID=5

GID=3

GID=4

Node 1

Node 2K8s RDMA shared device pluginでは異なるPodに異なるInfiniBandのGIDを計算ノードごとに発⾏（GIDが合わないと通信できない）

13

MPI実行パラメータ• MPI Operator• mpirun --allow-run-as-root -np 2 -bind-to none -map-by slot -x
NCCL̲DEBUG=INFO -x NCCL̲IB̲DISABLE=0 ‒x
NCCL̲NET̲GDR̲LEVEL=1 -x LD̲LIBRARY̲PATH -x
NCCL̲IB̲GID̲INDEX=7 -x PATH -mca pml ob1 ‒mca btl^openib python3 tf̲cnn̲benchmarks/tf̲cnn̲benchmarks.py -model=resnet50 --batch̲size=64 --use̲fp16=true -variable̲update=horovod※MPI Operatorサンプルからの変更箇所（暫定的な解決策，ノード間で異なるGIDを発⾏する場合には対応できない）

14

アプリケーション対応（現在進行中）• HPCサービス• Kubeflowの一部のMPI Operatorを導入（バッチ対応）• k8s標準の1.21以降の強化されたバッチ機能の検証• ストリーミング処理サービス• Spark on k8s Operator• Spark RAPIDS（GPU対応）とUCX Shuffle Manager（IB対応）• Strimzi Kafka• フロントエンドサービス• JupyterHubまたはBinderHub• 認証以外の動作は確認済み（認証方式は検討中）• DBサービス• MySQL Operatorの導入（動作は確認済み）

15

まとめ
• データ利活用に向けてmdxに最適化された高性能Kubernetes環境のプロトタイプを作成した• 従来のスパコンと同等のハードウェア，ソフトウェアスタックをKubernetesに置き換えたシステムの検証• 現状，アプリケーションの整備・本格的な評価は未達成• 当初はOCI，Azure HPCなどのパブリッククラウドでの実験を検討していたが，あまり費用を気にせず検証できた• mdxにおけるマネージドKubernetesの提供• 僅かな設定項目で約10分でKubernetes環境を自動構築

k8s-configs (GitHub):
https://github.com/a-sugiki/k8s-configs

16

謝辞• 本研究はJSPS科研費20K11837の助成，学際大規模情報基盤共同利用・共同研究拠点および革新的ハイパフォーマンス・コンピューティング・インフラの支援を受けている(課題番号：jh220058)．また，データ活用社会創成プラットフォームmdxを使用して研究を実施した．

17