\documentclass[japanese,other]{jnlp_3.3}
\usepackage{jnlpbbl_2.2}
\usepackage[dvipdfmx]{graphicx}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{url}
%%%%\usepackage{hangcaption_jnlp}
%%%%\usepackage{udline}
%%%%\setulminsep{1.2ex}{0.2ex}
%%%%\let\underline=\ul
\allowdisplaybreaks


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% author's definition
%%%%\usepackage{listings}
%%%%\renewcommand\UrlFont{\rmfamily}
%%%%\lstset{%
%%%%numbers=left,%
%%%%  language={C},
%%%%  basicstyle={\small},%
%%%%  identifierstyle={\small},%
%%%%  commentstyle={\small\itshape},%
%%%%  keywordstyle={\small\bfseries},%
%%%%  ndkeywordstyle={\small},%
%%%%  stringstyle={\small\ttfamily},
%%%%  frame={tb},
%%%%  breaklines=true,
%%%%  columns=[l]{fullflexible},%
%%%%%  numbers=left,%
%%%%  xrightmargin=0zw,%
%%%%  xleftmargin=1zw,%
%%%%  numberstyle={\scriptsize},%
%%%%  stepnumber=1,
%%%%  numbersep=1zw,%
%%%%  lineskip=-0.5ex,%
%%%%  moredelim=[is][\underbar]{~}{~}
%%%%}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\Volume{28}
\Number{4}
\Month{December}
\Year{2021}
%%%%\Issuetitle{「　　　　」特集号}

\setcounter{page}{1299}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\jsubject{学会記事}
\jtitle{自動並列化深層学習ミドルウェアRaNNC}
\jauthor{田仲　正弘\affiref{Author_1} \and 田浦健次朗\affiref{Author_2} \and 塙　　敏博\affiref{Author_3} \and 鳥澤健太郎\affiref{Author_1}}
\etitle{RaNNC: Automatic Parallelization Middleware for Deep Learning}
\eauthor{Masahiro Tanaka\affiref{Author_1} \and Kenjiro Taura\affiref{Author_2} \and Toshihiro Hanawa Taura\affiref{Author_2} \and Kentaro Torisawa\affiref{Author_2}} 

\headauthor{田仲，田浦，塙，鳥澤}
\headtitle{自動並列化深層学習ミドルウェアRaNNC}

\affilabel{Author_1}{情報通信研究機構ユニバーサルコミュニケーション研究所データ駆動知能システム研究センター}{Data-driven Intelligent System Research Center (DIRECT), Universal Communication Research Institute, National Institute of Information and Communications Technology (NICT)}
\affilabel{Author_2}{東京大学大学院情報理工学研究科}{Department of Information and Communication Engineering Graduate School of Information Science and Technology, University of Tokyo}
\affilabel{Author_3}{東京大学情報基盤センター}{Information Technology Center, University of Tokyo}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\maketitle


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section*{概要}

近年，ニューラルネットワークのパラメータ数や学習データの規模は急速に拡大している．大規模ニューラルネットワークを大量の学習データで学習するには，多数のGPUを用いた並列処理が有効であるが，パラメータが極めて多いニューラルネットワークの場合，一般的な深層学習フレームワークに実装された並列化方式であるデータ並列では，パラメータがGPUのメモリに収まらないという問題がある．本稿では，そうした大規模ニューラルネットワークの学習を目的に著者らが開発した，自動並列化深層学習ミドルウェアRaNNC (Rapid Neural Network Connector) を紹介する．RaNNCは，ニューラルネットワークを分割して複数のGPUに配置するモデル並列と，データ並列のハイブリッドによる並列化を自動化できる．既存の類似フレームワークと比較すると，ニューラルネットワーク定義のコードで並列化の実装が不要になり，並列化を意識せずに書かれた既存コードでも，隠れ層サイズやレイヤ数などを増加させた際に，必要に応じて自動的に並列化される．また，著名な既存フレームワークがTransformer系ネットワークの構造の特徴を利用して並列化しているのに対し，RaNNCの並列化は特定の構造に依存しないため，より幅広い種類のニューラルネットワークに適用可能である．


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{大規模ニューラルネットワーク学習の課題}

近年の深層学習の研究で，ニューラルネットワークの学習パラメータの増加によって学習性能が向上することが知られている\cite{Kaplan2020}．実際に，この数年で発表されたニューラルネットワークの規模は，劇的に拡大している．
例えば，2018年に発表され，言語処理分野でのブレークスルーとなったBERT-Large \cite{devlin2018bert}は，3.4億個のパラメータを持ち，発表当時としては最大規模のニューラルネットワークであった．
しかし，そのわずか2年後には，BERT-Largeの約500倍である1,750億ものパラメータを持つGPT-3 \cite{Brown2020}が発表されている．
またパラメータ数と共に，学習データも大幅に大規模化している．

深層学習では，高速化のためにGPUに代表されるアクセラレータが広く用いられるが，大規模なニューラルネットワークを，大量の学習データを用いて学習する場合，複数のGPUを用いて並列計算を行うのが一般的である．
深層学習の並列化方式としては，以下に述べるデータ並列とモデル並列の二つの方式が知られている．

データ並列では，複数あるGPUのそれぞれに，ニューラルネットワークの全体を複製する．
入力となるミニバッチは，事例の単位で分割され，異なるGPUで並列に処理される．
データ並列は，実装が容易で実行効率も高いため，多くの深層学習フレームワークで実装されている．
ただしデータ並列では，ニューラルネットワーク全体を複製するため，極めてパラメータ数が多い場合，1枚のGPUに全てのパラメータが収まらず，バッチサイズをできる限り小さくしても，学習が実行できないという問題がある．

一方，モデル並列では，ニューラルネットワークを分割し，複数のGPUに配置する．
各GPUは，ニューラルネットワークのパラメータの一部分のみを持つため，パラメータの多いニューラルネットワークでも学習できる．GPU1枚にパラメータが収まらない場合には，モデル並列の利用が必須となるが，どのようにニューラルネットワークを分割するかによって，学習の実行効率が大きく異なる．

大規模ニューラルネットワーク学習をモデル並列で実現するフレームワークとして，Megatron-LM \cite{shoeybi2019megatronlm}及びMesh-TensorFlow \cite{Shazeer2018}が知られている．
しかしいずれのフレームワークでも，通信オーバヘッドを低減し高い実行効率を得るには，ニューラルネットワークや計算機環境の特性を熟知した上で，並列計算用の特殊な演算モジュールを用いてニューラルネットワークの定義を記述する必要があり，利用のハードルが高いという問題がある．
またこれらのフレームワークでは，BERT等のTransformer \cite{NIPS2017_7181}系ネットワークの特徴を利用することで，通信オーバーヘッドを小さくし，効率の良い並列化を実現しているが，一般的には，通信オーバーヘッドによる速度低下が，並列処理による高速化効果を上回ることが多い．そのため，実質的にはTransformer系のネットワークにしか適用できず，実際に動作するコードも，BERTやGPTについてしか提供されていないという問題もある．


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{自動並列化深層学習ミドルウェアRaNNC}

本稿では，前述のような既存フレームワークの課題を解決し，大規模ニューラルネットワークの学習を容易に実行するために著者らが開発した自動並列化深層学習ミドルウェアRaNNC (Rapid Neural Network Connector) を紹介する．
RaNNCは現在，GitHubで公開されている\footnote{\url{https://github.com/nict-wisdom/rannc}}．ライセンスはMITライセンスとしており，商用目的を含め，無償で利用できる．

RaNNCは，代表的な深層学習フレームワークであるPyTorch \cite{NIPS2019_9015}のために記述されたニューラルネットワーク定義を与えると，自動的にニューラルネットワークの分割を決定し，モデル並列とデータ並列を併用した並列分散学習を実現する．
そのため，新規に書かれるニューラルネットワーク定義コードだけでなく，既存のものも含め，並列化を意識せずに書かれたニューラルネットワーク定義のコードをそのまま使用できる．隠れ層サイズやレイヤ数等の設定のみを変更し，GPU1枚またはデータ並列のみでは動作しない規模まで学習パラメータを増やしても，RaNNCを使用していれば，GPUメモリに収まるように自動で並列化して学習することが可能である．

図\ref{fig:rannc_code}にRaNNCの利用例を示す．
始めに，学習するニューラルネットワークとパラメータの更新に用いるoptimizerを宣言する（1, 2行目）．
ここまでは，一般的なPyTorchのコードと同じである．
次の行で，ニューラルネットワークとoptimizerをRaNNCに渡す（3行目）．
RaNNCを使用するために最低限変更が必要なのは，この1行だけであり，以降は一般的なPyTorchの使用法と同じである．
このようにRaNNCは，ニューラルネットワークの定義において並列化のための記述が不要なため，容易に大規模ニューラルネットワークを学習できる．

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% fig. 1
\begin{figure}[b]
\begin{center}
\includegraphics{28-4ia21f1.pdf}
\end{center}
\caption{RaNNCの利用例}
\label{fig:rannc_code}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% fig. 2
\begin{figure}[b]
\begin{center}
\includegraphics{28-4ia21f2.pdf}
\end{center}
\caption{RaNNCによるネットワーク分割}
\label{fig:rannc_partitioning}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


図\ref{fig:rannc_partitioning}に，RaNNCによるニューラルネットワーク分割の概要を示す．
RaNNCは，ニューラルネットワーク定義を計算グラフに変換した後，計算グラフを複数の部分グラフに分割する（図中では，矩形は計算，楕円は値を示している）．
また，データ並列とモデル並列を組み合わせたハイブリッド並列を行うため，部分グラフのそれぞれについて，データ並列の並列度を設定する．図に示すように，RaNNCでは，部分グラフごとに異なるデータ並列の並列度を設定できる．

部分グラフへの分割とデータ並列の並列度は，各部分グラフの必要メモリがGPUのメモリに収まるようにするとともに，パイプライン並列と呼ばれる方式で実行速度が最適化されるように決定する．
詳細については，著者らの論文\cite{Tanaka2021}を参照されたい．


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{評価実験}

RaNNCの速度を評価するため，モデル並列による学習を行う関連フレームワークとの比較実験を行った．
比較対象として，Megatron-LM, GPipe \cite{huang2018gpipe}, PipeDream-2BW \cite{Narayanan2020}を用いた．
実験には，NVIDIA V100を8枚備えたサーバを最大4台（100~GbpsのInfiniBandで相互接続）を用いた．

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% fig. 3
\begin{figure}[b]
\begin{center}
\includegraphics{28-4ia21f3.pdf}
\end{center}
\caption{大規模ニューラルネットワーク学習の速度比較}
\label{fig:exp_results}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

隠れ層サイズを2048（原論文の2倍）としたBERTについて，レイヤ数を変化させながら，事前学習の実行速度を調査した結果を図\ref{fig:exp_results}~(a)に示す．GPUを32枚用い，GPUごとのバッチサイズは8とした．レイヤ数が256の場合で，学習パラメータ数は129億となる．
なお，GPipeのオリジナルの実装ではTensorFlowを使用しており，またデータ並列とモデル並列の併用が不可能なため，RaNNCとの比較が困難であった．そこで，PipeDream-2BWの著者らによって開発された，PyTorchを用い，かつデータ並列とモデル並列の併用が可能な実装\footnote{\url{https://github.com/msr-fiddle/pipedream/tree/pipedream_2bw}}を用いた．

この実験では，Megatron-LMと比較して，約5倍の大きなネットワークまで学習できることが確認できた\footnote{Megatron-LMは，パイプライン並列のための機能を有効にすることで，より大きなネットワークを学習できる可能性があるが，本実験を実施した2020年8月時点ではパイプライン並列の機能が実装されていなかったため，利用していない．}．
また比較可能な規模のネットワークでは，ほぼ同等の速度となった．
PipeDream-2BWは，RaNNCよりも幾分高速であることが確認されたが，高速化の目的で勾配の集約のための通信を非同期化しているため，parameter staleness \cite{Ho2013}と呼ばれる問題により，学習精度低下の可能性があるという難点がある．

また，画像分類等に用いられるResNet \cite{He2016DeepRL}について，原論文で示された50レイヤ・101レイヤ・152レイヤのそれぞれの設定について，畳み込みレイヤのフィルタサイズをオリジナルの8倍に拡大し，学習速度を比較した．
もっともパラメータが多い152レイヤの設定では，37億パラメータとなる．
前述の通り，Megatron-LMはTransformer系のニューラルネットワークにしか適用できないため，本実験には使用していない．またBERTの学習における評価に用いたPipeDream-2BWやGPipeの実装は，BERTに特化されており，ResNetで動作させることができなかった．そのためこの比較では，PyTorchを用いたGPipeの実装であるtorchgpipe\footnote{\url{https://github.com/kakaobrain/torchgpipe}}を用いた．torchgpipeはモデル並列のみに対応し，データ並列と併用できず，また複数サーバのGPUを利用できない．そのため，サーバ1台（GPU 8枚）を用いたモデル並列で実行した．

図\ref{fig:exp_results} (b)に学習速度の比較を示す．
サーバ4台（GPU 32枚）とサーバ1台（GPU 8枚）の2通りを実行し，GPU 1枚あたりのバッチサイズは16とした．
図に示すように，データ並列では学習不可能な規模のネットワークにおいて，GPipeより顕著に高速に動作することが確認できた．


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{今後の展望}

冒頭で挙げたGPT-3の発表以降も，各国で競うように超大規模ニューラルネットワーク学習の試みが進められており，NAVERが学習した韓国語の言語モデルHyperCLOVA\footnote{\url{https://naver-ai-now.kr/}}（2040億パラメータ），Googleが発表したSwitch Transformers \cite{fedus2021switch}（最大1.6兆パラメータ），中国語・英語のテキストに加えて画像を学習データに用いたWu Dao 2.0\footnote{\url{https://gpt3demo.com/apps/wu-dao-20}}（1.7兆パラメータ）などが報告されている．こうした大規模化の傾向に止まる兆しはなく，大規模ニューラルネットワーク学習の重要性は今後ますます増していくと思われる．

利用可能な計算資源の制限のため，これらの超大規模ニューラルネットワークには及ばないものの，本稿の執筆時点で，RaNNCを用いて約800億パラメータ規模のBERT（BERT-Largeのパラメータ数の約230倍以上）の学習が可能なことを確認できている．RaNNCを用いることで，並列化を一切考慮していないコードを用いながら，1000億パラメータ近いニューラルネットワークを自動的に分割して並列化できることは，作り込みによって実現される他のモデル並列の技術と比較して優位であると言える．今後も更なる大規模化と高速化のための機能強化を継続して進め，近日中にGPT-3（1750億パラメータ）規模のニューラルネットワークの学習を実現する予定である．

RaNNCはすでに実利用の段階にあり，50億パラメータまで大規模化したBERTを，情報通信研究機構 (NICT) が持つ1.5~TBの巨大日本語コーパスを用いて学習し，従来のBERT-Largeを上回る性能を確認している．
前述の既存フレームワークと異なり，RaNNCはTransformer以外のニューラルネットワークにも適用可能であるため，今後は，敵対的学習で事前学習したCNNとBERTを組み合わせたBERTAC \cite{Oh2021}を初めとする，より複雑なニューラルネットワークについても適用を進める．
また，学習したモデルは，NICTがこれまで開発してきた大規模Web情報分析システムWISDOM X\footnote{\url{https://www.wisdom-nict.jp/}}や，高齢者介護支援用マルチモーダル音声対話システムMICSUS\footnote{\url{https://www.youtube.com/watch?v=gCUrC3f9-Go}}等のシステムに組み込んでいく．
従来は，350~GBの日本語コーパスから学習されたBERT-Largeを用いてきたが，パラメータ数と事前学習に用いるコーパスを大幅に増加したBERTモデルを使用することで，これらの応用システムにおいても，更なる性能向上が期待される．


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\bibliographystyle{jnlpbbl_1.6}
\bibliography{21refs}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{biography}
\bioauthor{田仲　正弘}{%
2009年京都大学情報学研究科社会情報学専攻博士課程修了後，情報通信研究機構 (NICT) に勤務．現在，NICT データ駆動知能システム研究センター・主任研究員．大規模自然言語処理のための分散並列処理ミドルウェアの研究開発に従事．
}
\bioauthor{田浦健次朗}{%
1992年東京大学理学部情報科学科卒業．同専攻 修士課程，博士課程，助手，1999年7月--2000年6月 米国カリフォルニア大サンディエゴ校 客員研究者（在外研究員）などを経て，2001年東京大学大学院情報理工学研究科電子情報学専攻 講師．2015年より同専攻教授（現在に至る）．2018年4月より東京大学情報基盤センター長．プログラミング言語，並列，分散処理，高性能計算の研究に従事．
}
\bioauthor{塙　　敏博}{%
1998年慶應義塾大学大学院理工学研究科計算機科学専攻博士課程修了後，東京工科大学工学部情報工学科／コンピュータサイエンス学部講師を経て，2007年筑波大学計算科学研究センター研究員，2008年筑波大学システム情報工学研究科准教授，2013年東京大学情報基盤センター特任准教授，2015年同准教授，2020年同教授（現在に至る）．計算機アーキテクチャ，高性能相互結合網，高性能計算，GPU コンピューティング等に関する研究に従事．
}
\bioauthor{鳥澤健太郎}{%
1992年東京大学理学部情報科学科卒．1995年東京大学大学院理学系研究科情報科学専攻助手. その後，北陸先端科学技術大学院大学助教授等を経て，2008年より情報通信研究機構 (NICT) 勤務．現在，NICT フェロー，ユニバーサルコミュニケーション研究所・副所長，及びデータ駆動知能システム研究センター・主管研究員． 自然言語処理の研究に従事． 日本学術振興会賞，文部科学大臣表彰科学技術賞，Twitter Data Grants など受賞．
}


\end{biography}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%\biodate


\end{document}




