BeneDict 地球歴史館

BeneDict 地球歴史館
menu

週刊スモールトーク (第455話) スーパーコンピュータ富岳(4)~ARMとLinux~

カテゴリ : 科学

2020.08.22

スーパーコンピュータ富岳(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の「Ryzen 9」がノドから手が出るほど欲しい。

「Ryzen 9 3950X」なら16コア。今使っているポンコツPCは2コアなので、「16コア÷2コア=8倍」速くなる!

1時間の処理が、10分弱で終了!?

凄すぎる!

これなら、試行錯誤も苦にならない。

そこで、コスパのいいパソコン工房で見積もりとったら、「41万円」ナリ(モニタ抜きで)。

高い!!

メモリ64GBがきいたのかも。でも、自然言語処理なら、ここは譲れないし、12コアの「Ryzen 9 3900X」で我慢しようかな・・・

最後に富岳を総括しよう。

富岳は、基本ハード(CPU)だけではなく、基本ソフト(OS)も「ありもの」。サーバーやAI(機械学習)でトップシェアのLinuxだ。基本が「ありもの」なら、過去のソフト資産が使い回せる。ガラパゴスと揶揄された「京」から学んだわけだ。

でも、スピードを追求するなら、高速演算に最適化した専用のハードとソフトを使う方がいい。ところが、富岳は使い勝手とスピードを両立させている。そこが、富岳の凄いところなのだ。

昨今、日本の科学技術をディスるのがトレンドになっている。だが、歪んだバイアスは真実を見えなくする。環境が複雑化している今こそ、ニュートラル思考が必要だろう。

by R.B

関連情報