Share
Embed
Transcript
27 slides
-
この登壇資料を制作しようと思ったモチベ ・OpenAIがGPUサーバーを3万台調達, GPUを50万枚調達などのニュースを見て ウオースゲーと驚くことは誰でもできる ・ただし実際のところその大多数のコン ピューターを協働させて動かすにはどういう 仕組みがあるのか, それを理解している学 生は少ないのではないか, そう思い少し作
成した ・一応登壇者は576ノードのMPI並列化なら したことはある xAIにDGXを運ぶNVIDIA CEO OpenAIにDGXを運ぶNVIDIA CEO -
並列分散処理が何故必要なのか: 消費メモリ ・行列積y = Axを計算することを考える(y, xはベクトル, Aは行列) ・行列を4分割して計算することを考えると, 1プロセスの行列積分のメモ リ消費量は1/4になる
A x A x プロセス0 プロセス1 プロセス2 プロセス3 -
並列分散処理が何故必要なのか: 消費メモリ ・大規模モデルの文脈の話をすると, 最近では10B, 100B, 1Tパラメータークラスのモ デルが出てきている ・それぞれfloat32のパラメーターだとすると40GB, 400GB, 4TBのGPUメモリが必要に
なる ・最先端のH200でカタログスペックだと141GB程度のVRAMしかない ・実際にはモデルパラメーターだけではなく, 訓練途中の誤差逆伝播法アルゴリズムな どによりモデルパラメーターの定数倍分だけ使用メモリは増える →並列分散は必須 数字が大きすぎて定数倍の増加でも致命的なほどVRAMを使用する -
並列分散処理プログラムの内部 ・プロセス並列化を行う場合 ...各プロセスの計算結果はプロセスごとに計算結果を通信して統合 する必要がある ・MPI(Message Passing Interface)という, MPIによってデータの受け渡しをノードをまたぐプロセ ス間でも安全に行い, 並列処理をすることでプロセス並列が可能となる
A x プロセス0 プロセス1 プロセス2 プロセス3 0 1 2 3 y communicate -
並列分散処理プログラムの内部 ・さらに, プロセス内でもスレッド並列化が可能で ある ・OpenMPやGPUで高速処理を実現している ・特に, AIの計算処理はGPUの得意とする演算と 相性が良い →NVIDIAのGPUは特にハードウェアの効率化も すごい
e.g. メモリ通信帯域, GPUコアの利用効率向上 最適化, Tensor core A6000 -
並列分散処理プログラムの内部: Data Parallel モデルは分割せずDataを分割して1 batch中 の訓練時間を高める並列方法 1. 個々のプロセスがforwardする 2. 個々のモデルのgradientを平均する
3. 個々のモデルにbackwardを適用する この方法では各計算ノードはモデルを分散し ていないためモデルサイズはスケールしない -
実際の訓練の場では... ・ZeRO-3 stage実行時, 使用VRAMが右の ように ・随分と余裕があるので →ZeROを使わないで通信時間の分のス ループットを取り戻す →性能が変わらなければbatch sizeを増や
し, 訓練時間の短縮を計画 などを考える ・これは高橋が勝手にやってることなので一 般的ではないかも -
並列分散処理プログラムの内部: ZeRO Offload ・データ数分だけ計算時間の 比例するforwardに比べて backwardはデータ数に比例し ない →backwardはCPUにOffload してGPU RAMを節約してし
まってbackwardをAVX SIMD 命令で実行してしまい, 実行時 間の低下を抑えながらVRAM 使用を削減 -
並列分散処理プログラムを書くための武器 ・ハードウェアの用意 NVIDIAの商売根性は逞しく, GPU, OS setup, 環境構築が済み, しかも GPU間通信も高速なNVLinkで接続 されており,
通信帯域の最適化も済ん でいるDGXを買うのが一番早い カスタマイズしたい人はパーツごとに 買おう(できるのかな) -
並列分散処理プログラムを書くための武器 ・ソフトウェア面 実際は下記のフレームワークの使用で事足りることは多い ・Deepspeed(by Microsoft) ・MegatronLM(by NVIDIA) ・Accelerate(by Hugging Face)
ただし内部で何が行われているかを理解することは, 速度, RAM使用量, AIだと意 図している学習になっているか は非常に重要, AI時代でもボトルネックを改善して いくことと自分がどういう作業をしているのかを根本で理解していく能力は重要だと 思う -
並列分散処理民主化のための個人的な取り組み 別にAIに限ったことではないんですが, 学生が自由に使えるコンパクトな複数 サーバー環境が必要かなとか考えていたりします これがあると, AIに限らず ・Kubernetesクラスタ制作 ・Load balancer制作 ・Ansibleで遊んでみる
など, 実世界の大規模システムをスモールスケールではあるけども体験すること ができます -
その他: 並列分散処理を深く学びたい人向けの資料 ・MPI「超」入門 ・東大情報基盤センターの資料 ・Parallel and Distributed Programming ・うちのボスの講義 ,
コードはこちら<-なんでうちのボスは C++/CUDAでDNNを実装できるんだ .... ・並列プログラミング入門: サンプルプログラムで学ぶOpenMPとOpenACC ・スパコンプログラミング入門: 並列処理とMPIの学習 ・どっちも本です ・CUDA C++ Programming Guide ・CUDAを書くなら公式ドキュメントは必見 ・NVIDIA社員ブログ と Anthropicのブログ ・プロの並列分散処理と naiveな並列分散処理では 100倍も速度が違う, どうすれば効果的なコードがかけるのかを解説している -
Reference 1. Microsoft: ZeRO: Memory Optimizations Toward Training Trillion Parameter
Models 2. Microsoft: ZeRO-Offload: Democratizing Billion-Scale Model Training 3. NVIDIA: NVIDIA H200 Tensor core GPU 4. 東京大学情報基盤センター: 30分でだいたいわかる並列プログラミング 5. TOP500 List - June 2024 6. OpenAI: Techniques for training large neural networks