スーパーコンピュータ富岳(4)~ARMとLinux~
■760万個の頭脳
世界最速のスーパーコンピュータ富岳の心臓部は、ありものCPU。iPhoneやAndoridでも使われる「ARM」だ。
スマホのCPUで世界一?
一体どうやって?
不自然なものには理由がある・・・富岳のCPU「A64FX」はタダのARMではない。ガチでカスタマイズされているのだ。
まず、A64FXには、2つの「512bitベクトル演算器」が追加されている。「ベクトル演算器」とは、ベクトルを一撃で計算する装置。「ベクトル」とは座標のように複数のパラメータからなるデータ(スカラーは1つのパラメータ)。3次元座標なら、パラメータは3個(x,y,z)なので、3回の計算が必要。ところが、ベクトル演算器を使うと1回の計算ですむ。しかも、富岳のベクトル演算器は、CPUの命令で直接駆動されるので、オーバーヘッドが少ない。つまり、高速。
さらに、A64FXには、48個のコア(頭脳)が入っている。普通のパソコンなら、2コアか4コアなので、桁違いに多い。
それだけはない。富岳は、A64FXにHBM2メモリを4個つないだ計算ノードが、158,976個も連結されている。つまり、富岳のコア(頭脳)は・・・
48✕158,976=7,630,848(760万個!)
頭が8つのヤマタノオロチどころではない(喩えがチープかな)。
では、コア(頭脳)が多いと何がいいのか?
処理速度が劇的に向上する(ことがある)。たとえば、「1CPU=48コア」なら、「1CPU=1コア」にくらべ、48倍高速(かも)。
ことがある、かも?
例外のない規則はないということ。速くなる、ならない、どっちが「例外」かはさておき。
カンタンにいうと、48個のコアで作業を分担すれば、1個でやるより48倍高速という話。
たとえば、家を建てる場合。基礎をつくる、土台を敷く、柱を立てる、屋根をのせる・・・など48の工程があるとする。これを48人で分担し、同時にかかれば、1人でやるより48倍速い。
でも、基礎、土台、柱、屋根・・・同時につくれます?
基礎がないと土台は敷けないし、土台がないと柱は立たないし、柱がないと屋根はのらない?
順番を守らないと、家は建たないのでは!
というわけで、家を建てるは「速くならない」でした。では、「速くなる」場合は?
■並列処理と逐次処理
富岳のCPU「A64FX」は「1CPU=48コア」、つまり作業者は48人。それで、1コア(1人)より速くなる、ならないを考えてみよう。
まず、1コア(1人)でやると、48秒かかるタスク(仕事)があるとする。このタスクを48個のプロセス「プロセス1、プロセス2・・・プロセス48」に小分けして、48個のコアに割りふり、同時処理する。各プロセスが等しく1/48秒かかるなら、タスクは1/48秒で完了する。つまり、1コアでやるより48倍高速。これを「並列処理」という。
ただし、この手法が通用しないことがある。プロセス1の結果を、プロセス2が使って処理し、その結果をプロセス3が使う場合。「プロセス1→プロセス2→・・・→プロセス48」の順番を守らないと、結果がグチャグチャになる。先の「家を建てる」はこのケースだ。つまり、コア数が増えても、ゼンゼン速くならない。これを「逐次処理」とよんでいる。
じつは、現実世界では、並列処理より逐次処理の方が多い。つまり、「例外」は「速くならない」ではなく、「速くなる」方なのだ。
ただし、スーパーコンピュータの用途は特殊である。創薬、新素材開発、自動車・航空機の設計、天気予報、気候予測、地震予測・・・膨大な計算の塊。しかも、そのほとんどが並列処理が可能。だから、スーパーコンピュータはコア数が多いほど有利なのである。
一般に、複数のコアをもつCPUを、マルチコアとよんでいる。とくに、1CPUが2コアなら「デュアルコア」、4コアなら「クアッドコア」、6コアなら「ヘキサコア」、だんだん面倒になってきたので、10コア以上なら「メニーコア」。メニーコアに厳密な定義はないが、富岳のCPU「A64FX」なら、メニーコアといっていいだろう。
一方、パソコンもマルチコアがあたりまえ。ところが、パソコンはマルチコアを活かしているとは言い難い。というのも、マルチコアに対応したアプリが少ないのだ。
たとえば、有名どころのワード、エクセル、パワポ、さらに、会計処理、もろもろ業務ソフト、ネットサーフィン、SNS、ゲームはマルチコアに対応していない。理由はカンタン、並列処理ではなく逐次処理だから。さらに、パソコンのアプリは処理が軽いので、これ以上高速化しても、ありがたみはない。0.1秒かかる処理が、0.01秒になっても、ゼンゼン嬉しくないから。
では、パソコンではマルチコアは意味がない?
ノー、まれに有効なことがある。しかも劇的に!
■おうちでAI(DIY)
今、自然言語処理系のAIプログラムを書いている。貧乏なので、HPC(パソコンの上位機種)は夢で、スーパーコンピュータは夢のまた夢、チープなパソコンで頑張るしかない。
ところが、自然言語処理はとても重い。自然言語処理の第一歩の「形態素解析」からして重い。
形態素解析とは、テキスト全文を、形態素(コトバの最小単位)に分割し、品詞などの情報をあぶりだすこと。たとえば、「金を買った」を形態素解析すると、「金」「を」「買っ」「た」の4つの形態素に分割される。さらに、下記の情報が付加される。
①「金」:品詞(名詞、一般・・)、基本形(金)、読み(キン)
②「を」:品詞(助詞、格助詞・・)、基本形(を)、読み(ヲ)
③「買っ」:品詞(動詞、自立・・)、基本形(買う)、読み(カッ)
④「た」:品詞(助動詞、特殊タ・・)、基本形(た)、読み(タ)
一見、難しそうだが、単語辞書を使って、テキストから形態素を抽出し、解析しているだけ。ところが、テキストの分量が多いと、処理時間がハンパない。4,447,080文字(85,542行)の試作テキストで、145秒(2.4分)もかかった。本番で使うテキストは、文字数が桁違いに多いので、1時間かかることも。あ、失敗した、ではすまされないのだ。しかも、自然言語処理は試行錯誤の繰り返し。
はぁ~、一体どうしたらいい?
プログラムを「マルチコア&並列処理」に対応させるしかない(書き直し)。
たとえば、CPUが48コアなら、テキスト全体を小分けし、48個のコアがフル稼働するように、スケジューリングする。分割されたテキストは、形態素解析という点で、お互いに独立しているから、「バラバラ同時処理」でも問題ない。巧みにコーディングすれば、コア数が2倍なら、ほぼ2倍高速になる。
一般に、自然言語処理は並列処理が有効なことが多い。一見、逐次処理にみえても、コーディングを工夫すれば、並列処理にもちこめる(場合がある)。
というわけで、最近、AMDの「Ryzen9」がノドから手が出るほど欲しい。
「Ryzen9 3950X」なら16コア。今使っているポンコツPCは2コアなので、「16コア÷2コア=8倍」速くなる!
1時間の処理が、10分弱で終了!?
凄すぎる!
これなら、試行錯誤も苦にならない。
そこで、コスパのいいパソコン工房で見積もりとったら、「41万円」ナリ(モニタ抜きで)。
高い!!
メモリ64GBがきいたのかも。でも、自然言語処理なら、ここは譲れないし、12コアの「Ryzen9 3900X」で我慢しようかな・・・
最後に富岳を総括しよう。
富岳は、基本ハード(CPU)だけではなく、基本ソフト(OS)も「ありもの」。サーバーやAI(機械学習)でトップシェアのLinuxだ。基本が「ありもの」なら、過去のソフト資産が使い回せる。ガラパゴスと揶揄された「京」から学んだわけだ。
でも、スピードを追求するなら、高速演算に最適化した専用のハードとソフトを使う方がいい。ところが、富岳は使い勝手とスピードを両立させている。そこが、富岳の凄いところなのだ。
昨今、日本の科学技術をディスるのがトレンドになっている。だが、歪んだバイアスは真実を見えなくする。環境が複雑化している今こそ、ニュートラル思考が必要だろう。
by R.B