スパコンないない

# はじめに

[エンジニアないない](https://qiita.com/ssaita/items/9ab4623a71bccce8cde1)という記事を読んで、「そうそう、専門の人と一般の人って、結構認識違ってたりするよなぁ」と思ったので、スパコンについて似たようなことを書いてみようと思います。オープンキャンパス的なイベントで来訪者にスパコンについて説明したりしている時に質問されたことが中心です。

# スパコン使えばものすごいゲームできるんですか？

これ、わりとよく聞かれるんですが、基本的にはできません。「ものすごいゲーム」のイメージは、例えば「ものすごいグラフィック」「ものすごく精密な物理エンジン」「ものすごく大量のキャラクター」なんかだと思うんですが、そもそも一般的なスパコンはリアルタイム処理向けに作られておらず、「バッチジョブ」という形で計算を予約して、計算資源が空いたら実行される、みたいな使い方をします。スパコンは「一ヶ月かかる計算を1日で処理する」みたいな加速は得意ですが、「0.1秒かかる処理を0.01秒にする」みたいな加速は苦手としています。「ものすごいゲーム向け」にスパコンを作れば別ですが、おそらくそれは現在使われているスパコンとはかなり違ったものになるでしょう。もちろん「ゲームのムービーに使われるようなCGをレンダリングする」みたいなことには使えると思います。

# PCでは動かせないようなプログラムでも、スパコンならなんとかできるでしょ？

もちろんスパコンではPCでは動かないようなプログラムを動かすことができますが、この質問の意図は、「いま目の前のPCで重くて動かないプログラム(例えばエクセル)を、スパコンに持っていったら **そのままで** 動くようになるんでしょ？」という感じでした。普通のPC向けのプログラムは並列化されていないため、そのままスパコンに持っていっても加速させることができません。なので、映画でたまに見かけるような

「クソッ、このPCじゃ処理が終わんねぇ！」
「政府のスパコンを使おう」
「なに！そんなことができるのか？」
「これからハッキングする・・・できた。これですぐに終わるぞ」

みたいなことは(よほど自明並列に近くない限り)できません。多くのPC用プログラムは、もし並列化されていたとしてもスレッド並列までで、分散メモリ並列は実装されていません。分散メモリ型マシンであるスパコンを使うためにはノード間通信を書く必要があり、それは並列化されていないプログラムを組むのと同じくらいの開発時間がかかります。要するにプログラムの組み直しが必要です。

# スパコン向けのプログラム開発は難しいっていうけど、スパコン使ってなんとかならないの？

これもよく聞かれます。前述の通り、スパコン向けにプログラムを組むためには分散メモリ並列化が必要ですが、それだけでなく共有メモリ並列やSIMD化、ファイルIOなど、考えるべきことが結構あってとても面倒です。で、「プログラム開発が面倒」というと、「それもスパコン使ってなんとかできないの？」と聞かれます。並列化や最適化の自動化は古の時代から問題となっており、将来なんとかなる可能性も無くはないのですが、少なくとも現状ではあまり実用的な自動化はできていません。

それには様々な原因があるのですが、個人的には「現在可能な並列化/最適化が局所的である」のが原因だと思っています。プログラムは「こうしたい」という目的があり、その目的がプログラムとして実装されるわけですが、プログラムからその「実装意図」を推し量るのは簡単ではありません。

例えば現代のコンパイラは、バブルソートが書かれてるプログラムを見て、「これはクィックソートでかけばもっと早くなるじゃん」と修正することはできません。ここまで極端な例でなくても、並列化、最適化は、プログラマの実装意図まで戻ってプログラムを組み直す必要があることが多く、現在のコンパイラや最適化ツールは、そういった大域的な最適化を苦手としています。

これはCだのFortranだのといった「手続きをそのまま書く」ような(実装が具体的に記述されているという意味で)低レベルなプログラミング言語を使っている限り避けられない問題で、もっと抽象的な、「ここでこのデータをソートして・・・」みたいな仕様書レベルのものからプログラムが錬成できるようになると自由度が上がり、なんとかできるのかもしれません。今はまだ無理っぽいですが、将来できるようになるといいなぁ、と思っています。

# これからはクラウドの時代でしょ？

場合によります。スパコンをオンプレで持つ方が得か、クラウドを利用する方が得かは、利用率に依存します。繁忙期のようなものがあり、短期的にはものすごく使うけど、年間を通してみると使われない時間の方が長い、みたいなユースケースではクラウドの方が得でしょう。しかし、年間通してそれなりの利用が継続的に発生する場合はオンプレで持ったほうが(電気代その他を考えても)得です。

また、スパコンの使い方にも依存します。基本的に自明並列であり、通信を使わない用途(例えばノード間通信をともなわない大量の機械学習)ならクラウドはわりと良い選択肢になります。しかし、ノード間通信をがっつり使いたい場合、後ろにInfiniBandが欲しくなります。クラウドにもInfiniBandが使えるインスタンスがありますが、利用料金は跳ね上がります。

もちろんスパコンをオンプレで持つというのはいろいろ面倒なことも多いので、サポートその他を丸投げできるクラウドにも大きな利点があります。それらのコストも全部含めて判断しなければなりません。

結局のところ、オンプレとクラウドの「損益分岐点」は平均利用率に依存します。その損益分岐点は、おそらく一般の人が思うよりはクラウドに厳しい側にあります。とはいえ、「全部オンプレ」というのも面倒だし、スパコン導入の検討の前にクラウドを使ってみるとか、オンプレで持つけどクラウドも補助的に使うなど、クラウドの存在感が増していることは間違いありません。

# ラズパイとかたくさん並べたらスパコン作れるの？

「スパコン」に求めるものによります。自明並列に近い用途ならば、ラズパイとか普通のPCとを並べて大規模な計算資源を得ることは可能です。しかし、大学や研究所にある「スパコン」は、そういった大規模な計算資源と大きく違うものが2つあります。それは「通信」と「信頼性」です。

スパコンを大規模な計算資源として見た場合、それを「大きな計算機一つ」と見るか「小さな計算機たくさん」と見るかは大きな違いです。「小さな計算機たくさん」として使うなら、高品質の通信や信頼性はあまり必要ありません。例えばビットコインのマイニングのような用途なら通信も信頼性も必要なく、壊れたら交換すればよいだけです。

しかしスパコンを「大きな計算機一つ」として見ると、まず通信が遅いと話になりません。InfiniBandのような高速通信のスイッチはかなり高額です。特に転送レートが大きく、ポート数が多いスイッチはめっちゃ高いです。大きなスパコンになると、そのめっちゃ高いスイッチを多数用意する必要があって大変です。

また、信頼性も重要です。並列計算を実行するためには、実行中、使われているノードがひとつも壊れてはいけません。1000ノードを1日使った計算が95%の確率で完走するためには、ノードの平均故障間隔が55年以上なければいけません。1万ノードなら550年以上です。普通のPCは平均数年、せいぜい10年くらいで壊れてしまうため、それよりはるかに高い信頼性が必要となります。当然、信頼性の実現にはコストがかかります。

そんなわけで、スパコンには「計算能力」以外にもかなりコストがかかっています。それらにコストをかけるかどうかは、目的に依存します。また、ファイルシステムも頭の痛い問題ですが、ここでは詳細には触れません。

# 使い終わったスパコンって再利用できないの？

「二位じゃだめなんでしょうか？」で話題になったスパコン、「京」が2019年8月30日に稼働停止しました。せっかく高いお金かけて作ったスパコンを、わずか数年で全部捨てちゃうのはもったいない、みたいな話をよく聞きます。おそらく「会社で使っていた高性能PCは、数年たって型落ちしても家で使うには問題ない」みたいなイメージなんだと思いますが、スパコンとPCはちょっと話が違います。

まず、一般論としてスパコンの「賞味期限」は短いです。だいたい5年くらいで使い捨てます。京は7年稼働したので長いほうです。「もったいない」と思うかもしれませんが、多分「再利用」したほうが「もったいない」ことが多いです。

スパコンはものすごく電気を喰います。ちょっと大きなスパコンなら、電気代が年に億を軽く超えます。億に近い電気代をかけるなら、そのスパコンで得られる計算の価値はその数倍以上あって欲しいところです。しかし、計算機の電力あたりの性能は(まだ)指数関数的に向上しているため、相対的にスパコンの計算の価値は指数関数的に減少していくことになります。

「型落ちPC」の価値があまり落ちないのは、たとえばインターネットとかエクセルとか、計算能力があまり効いてこないところに価値を見いだせるからで、計算能力が非常に重要となるスパコンでは、「型落ち」による価値の減少はかなり深刻なものとなります。将来、計算機の性能が頭うちになり、価値が指数関数的に減少しなくなったら、また話は変わるのかもしれませんが……

また、「スパコンの移設」はとても大変です。以前スパコンの移設を検討したことがあるのですが、少し大きなスパコンをばらして運んで組み立てて、とかやると、億単位のお金がかかります。型落ちのスパコンにそれだけ費用をかけるくらいなら新しく買ったほうがお得です。

ハード以外にも問題があります。例えばOSのサポートなんかも頭の痛い問題です。スパコンもコンピュータなので当然なんらかの商用サポートのあるOSを使うわけですが、その商用サポートはわりと早く切れてしまいます。サポート切れのOSを使い続けるわけにはいかないので、OSのアップデートをしなければなりませんが、スパコンはファイルシステムや通信まわり、監視系などOSに依存するエコシステムがあり、OSのアップデートは一大事です。当然のソフトウェアの改修などはタダではできないので、その費用や時間もなんとかしないといけません。古いOSのサポートの延長契約で逃げる、という手もありますが、当然それにもお金がかかります。そこまでして古いマシンを使いたいかは疑問です。

あと、「京」独自の問題として、冷却系があります。「京」は水冷ですが、他のスパコンから見るとかなり低い水温を要求します。現在一般的なスパコンは常温かそれに近い水温で動くものが多く、「京」を動かすならそれよりかなり低い冷水を用意できなければなりません。そんな設備を持っているところは少なく、また型落ちの「京」を使うために「京」用の冷水設備を用意するのはちょっと・・・という気がします。冷水設備ごと移設するにしてもお金がかかりますし・・・

# まとめ

スパコン関連で聞かれたことについてまとめてみました。一般の人の思う「スパコンのイメージ」と、実際の「スパコン」には結構ずれがあるのかなぁ、なんて思いました。