レポートについて

先日 (2016年 3月 4日)、ザ・プリンスパークタワー東京 B2F で開催されたイベント HP Enterprise Day 2016 東京 に参加してきました。

果たしてこういうレポート系の記事を読んでくれる人がいるのか。

時間かけてまとめたのに読んでくれる人がいないとあまり意味がないので、公開するかしないかで少し迷いもありましたが、以下の Hewlett Packard Enterprise Day 2016 東京 オンデマンド を確認したところ、自分が参加した 5つのセッションの中で、1つのセッション F-4 : VDIのお悩み解決!いまどきのデスクトップ仮想化入門 を除いて、プレゼンテーション動画・説明資料が一切公開されてなかったので、情報として公開する価値は十分あると判断しました。

せっかくイベントに参加したのに公開しないのは勿体無いという気持ちもありましたし、イベント情報を求めて当サイトに訪れる方々がいらっしゃることが分かったので、そのまま帰らすのも申し訳ないので。。

なるべくありのままの情報を伝えると同時に補足が必要な部分については、自分なりに調べた関連リンクを追加するなど、吹き出しで説明を足していく形にしたいと思います。

極一部ですが、プレゼンテーターの声が聞きづらかったこともあったので (風を引いたようです)、自分なりに推測して意訳した部分もあるので予めご了承ください。

また、記事内で 我々 という表現を使っていますが、我々 = Intel のことです。

では、最初に参加したセッションについて。

Intel Scalable System Framework が導く HPC の将来

プレゼンテーター

インテル株式会社

アジアパシフィック・ジャパン

HPC担当ディレクター 根岸 史季 氏

Scalable System Framework とは

Intel Scalable System Framework (スケーラブル・システム・フレームワーク) は、インテルが提唱する HPC の設計指針で、小規模クラスタから世界最大のスパコンまで、従来のHPCからビッグデータまで広範囲のアプリに適したシステムの標準に基づいた実装を可能にするものです。

抜粋 : Hewlett Packard Enterprise Day 2016 東京 (セミナ情報)

HPC とは

HPC とは、High Performance Computing (ハイパフォーマンスコンピューティング) の略で、自然現象のシミュレート、気象解析のような単位時間当たりの計算量が非常に多い計算処理 (高性能計算) のことです。

データ周り

CPU コンポネントインテグレーション

新たに HPC 向けの高速なパブリック・通信・仕組みと言うものを出しますと。

基本は、我々パーツコンポネント提供しているので、それぞれの分野において、まずは、製品なりソリューションをちゃんと出していく。

SSD もだんだん浸透してきている。

メモリは昔やってたけど、今は撤退してからやってない。

ファブリックもイーサーネットあるけど、元々なかったのを数年前に QLogic の InfiniBand を買収したので、後は、ファブリック製品を出そうとしている。

ソフトウェアも色々出しているけど、ただ単にツールの提供だけではなくて、もっとシステム全体で必要なソフトウェアを提供する。

それぞれ、製品であったりソリューションであったり取り組みをやっていくと。

ただやっていくだけだったら単純に製品の幅が増えていくだけなので、それらの製品を設計化するに当たって全体のシステムのあるべき姿っていうのをイメージしてデザインしていくと同時にそれぞれの要素を部品レベルで融合していく。

例えば、CPU とファブリック、もしくは、CPU とメモリを融合した新たなものであったり、それをシステムレベルでどういう風につなぎ合わせたら最適に動くかというところを意識している。

そういう取り組みをすることによって、全体的により最適化されたものを提供する。

CPU の中に色々な要素を入れていく。

CPU インテグレーション

Tighter Component Integration

メモリであったり、コアであったり、通信能力、ファブリックであったり、グラフィック、FPGA、I/O のようなものが将来的には、CPU の中にコンポーネント部品としてインテグレーションされる。

これをただ単に CPU の中に入れちゃえというものなんだが、一応メリットはある。

それは、性能的なメリットであったり、実装密度であったり、CPU とメモリが近い・CPU と通信するファブリックが近いという Latency 的なメリットもあるし、消費電力メリットもあるし、何よりインテグレーションされてコスト的なメリットもある。

そもそも I/O の性能問題ってどうにかならないか?

いくら CPU の性能が速くなってもデータがくるのを待ってるから意味がない。

そこで、そもそもデータの流れってどうなんだっけ? というところで、どこかのファイルシステム・ディスクに何か計算すべきデータが格納されているわけだが、そこから大体どういうパスがあるかというと。

ファイルキャッシュとして SSD を使っているところも増えてきているが、一応、遅いハードディスクと速いブロックデバイスとしてのストレージ区分けがある。

また、計算機の中でローカルなストレージというのがある。

並列なファイルシステムが外にあって、そこからデータを持ってくる際に I/O のバースト・バッファーみたいなところで一旦そこにデータを溜めて、そこから実際に計算する計算ノードにデータを持ってくる。

でもそこらへんは、SSD だとかハードディスクとかそういうブロックデバイスの領域。

実際に CPU に渡す際には、メモリにまずそれを乗っけて、メモリから今度 CPU が CPU の中のキャッシュに展開していって、実際に L1、L2、L3 キャッシュにデータを格納し、高速に計算処理を行う。 大体こんな流れ。

そこをどんどん・どんどん性能が上に行けば行くほど上がっていくんだけど、当然使える容量は下がって行くので、どういうデータを先に持ってくるかそういうところを苦労しながらそれぞれの段階で技術を使いながら精度が上がる。

将来的にはデータが大きくなって行くので、一番ボトルネックが多いのはどこかというとコンピュータノードのローカルストレージ。 それが仮に SSD でも、それとメモリとの差が非常に大きい。

例えば、ページングが発生すると ものすごく性能が下がったりする。

SSD で少し改善はするけど、ハードディスクとメモリの間は非常に差がある。

その性能を上げるためにはどうすればいいのか。

Intel としては新しい階層をそこに入れると。

メモリとストレージのギャップ

Bridging the Memeory-Storage Gap

つまり、メモリほど価格は高くなくて、メモリよりも大きいサイズを取り扱いできて、メモリほどそこまで性能は高くないけどその下の SSD に比べて性能がかなり速いと。

そういうものを間に入れることによってデータの流れをどんどんスムーズにしていく。

当然ローカルのメモリというものが DIMM としてあるが、DIMM とキャッシュの差もかなり激しい。

メモリの大域幅が今は大体 DIMM 100GB/s。 普通の DDR の場合は、数十 GB/s あたり。

それを CPU の近いところに高速のメモリ 数百ギガバイトの高速メモリを投入することによって、メモリとキャッシュの性能差というのを減らす。

こういうふうに階段をよりスムーズにしていくことによってデータの性能を全体として上げていく。

こういうスケーラビリティシステムフレームワークの考え方をそれぞれのところで最適化していくと。

結局、システム全体で見るとそれを計算する I/O・通信・管理をつかさどる部分などいろいろ機能があるわけだが、こういう水平的な最適化の考え方と先ほど説明したデータをどうスムーズにしていくかという垂直的な考え方と組み合わせて全体的な最適化をする。

ああいうピラミッド型の階層で今までの段階に間に入るような形で新しいテクノロジを出して行く。

Xeon Phi の次期製品が今年出てくるが、こちらは CPU のパッケージの中に積層化された高速メモリを乗っけてしまっている。

これは性能的に DDR よりも 5倍速い。 数百 GB/s 領域の性能であると。

それが非常に CPU の近いところに置いてある。

それによって、データを CPU に供給する際に、外には普通に DDR メモリがあるけど、DDR より高速化メモリに乗っけてそこからさらにキャッシュに持ってくるとよりそこのデータをスムーズに処理できる。

この高速メモリが CPU のパッケージ上に 16GB ある。

大体キャッシュの大きさは今までは、数十MB とかなので、CPU のキャッシュに比べると容量が全然大きい。

使い方は、以下の 3通りあって、

  • 普通に速いメモリとして使う
  • 非常に大きな L4 キャッシュとして使う
  • 半分の 8GB はメモリとして使って、半分はキャッシュとして使う

メモリとして使えるってことはアプリケーションからアドレスできるということを意味する。

そういうメモリとしての使い方も出来れば、そういうところは意識せずに、非常に大きな L4 キャッシュとして使うこともできる。

もしくは半分の 8GB はメモリとして使って、残りの半分はキャッシュとして使う。 そういうハイブリッド的な使い方もできる。

こういう形で好きなように新しい速いメモリを使う。

世の中でハイブリッドのような次世代モデルがあるけど、ちょっと標準的にあるものと少し違う。

階層的には CPU と今までの DDR の間に入る。

さらにもう一つ、2015年夏に 3D XPoint (スリーディー・クロスポイント) という新しいメモリ組織を発表したが、あまり詳細を話していない。

  • トランジスタ型ではないメモリ組織
  • 特徴としては、不揮発
  • NAND 型とは全然違う形で不揮発なメモリ組織
  • NAND より 1000倍速い
  • NAND より 1000倍強い
  • 参考 : Wikipedia : NAND 型フラッシュメモリ

性能的には、NAND の 1000倍。 NAND より 1000倍速い。

後は、耐久性。

何度も読み書きしていると NAND は、読み書きが段々出来なくなる特徴を持っているが、そこの耐久性というものは NAND に比べると 1000倍強い。

非常にその特性として優れている不揮発メモリ組織を開発している。

このメモリ組織を使った製品の一つが普通に PCI SSD を NAND の代わりとして使う製品。(Intel Optane SSD)

ただ、性能が非常に速いので、PCI に挿すと PCI の方がボトルネックになってしまう。

なので、新しい SSD を今年中に出す予定だが、本来の性能を発揮させるための DIMM メモリも今後出てくる予定。(Intel 3D XPoint-based DIMMs)

DDR・DIMM のスロットに直接挿すので、メモリ組織本来の性能を活用できると。

こういうものが2パターン。 同じテクノロジを使って 2種類の製品を出すことによって、DDR と通常の NAND の SSD 間に新しい階層が生まれる。

Lustre : HPC クラスターシステム向けファイルシステム

さらに、HPC クラスターシステム向けファイルシステム Lustre(ラスター) というオープンソースがあるが、(Lustre のディストリビューターである Wamcloud 社を Intel が買収) そこから Intel がディストリビューターになって、Enterprise Edition for Lustre (エンタプライズエディション ラスター) を出している。

Lustre の L2ARC システム機能というのは、非常に大規模なデータの読み書きに力を発揮するし、今は HPC が結構メージャーに使われているが、こういうテクノロジをエンタープライズで使えるような形でよりクオリティを高めることでビックデータ分析に有効活用・貢献できる。

L2ARC とは

L2ARC とは、Level 2 Adaptive Replacement Cache (Level 2 ARC) の略で、ARC の補助として動作する Read 用のキャッシュのことで、I/0 が激しく、負荷が高い環境で力を発揮する。 また、Read 速度 (特にランダムアクセス) の向上を促すため、通常 SSD が用いられる。

ビックデータと言えば、HDFS (分散ファイルシステム) を使っている Hadoop があるが、Hadoop と HDFS の関係性の話じゃなくて、データを Lustre 上のファイルシステム上に載せてしまえば、まぁスケールする。

そういうような形で高速なファイルシステムを提供していく。

といのは従来の HPC 向けだけじゃなく、新しいワークロードのためにも重要。

そのファイルシステムというものを今後も機能的に強化して行ってエンタプライズレベルでも使えるようにして行く。

既存である Hadoop 環境とかとつなげられるのも重要だが、そういうものを今後も出して行く。

データ周りはここまでで。

OmniPass について

ここからは OmniPass (オムニパス) について。

InfiniBand vs OmniPass : OmniPass を使うことによって得られるメリットとは

SSF (Scalable System Framework) の大きな要素にファブリック通信がある。

我々通信系のソリューション3つあるが、今回は、OmniPass に関して話をする。

これは我々が出す次世代の HPC 用の通信テクノロジ。

オムニパスというのは基本的に InfiniBand 相当の性能を持っている計算ネットワーク。

だが、InfiniBand と違う。 互換性がない。

OmniPass 専用のスイッチが必要になる。

HPC 業界では InfiniBand をかなり標準的に使っているが、何でこんなに新しいものを出そうとしているか。

大きな理由は、InfiniBand そのものが本質的にもっている HPC に対して不向きな要素っていうのがある。

InfiniBand は元々 PCI の後継になるような形で標榜していたもので、あまり大規模な通信をやること前提にしていない。

それを色々な工夫をして HPC 用に使いやすいように変化して行ってるが、根本的に HPC のための通信規格として作られていないので、将来的に見ると騙し続けるのも限界がある。

なので、HPC のための通信規格を新しく定義したものが OmniPass である。

InfiniBand EDR 性能的には、1Port 100Gbps。 そういう能力を持っているが、EDR に比べてどういう利点があるかというと InfiniBand EDR だと大体最大 36ポートあるが、OmniPass は 48ポートスイッチの実装が可能。

端的に言うと何百ノードという大規模な HPC 環境において一つのスイッチがカーバできるノードの数によってメリットの幅が変わってくる。

単純に近いところだとあまり差はないが、遠いところだとかなり必要な数が変わってくる。

スイッチの数が少ないと色んなメリットがある。

あたり前のことだが、コスト的な部分と性能的な部分(Hop数軽減)、保守的な部分。

単純だけと 48Port のスイッチがもたらすメリットは多い。

Xeon と Xeon Phi どっち買えばいいの? Xeon Phi って本当に遅いの?

ハードウェアコンポネント的な部分として CPU がある。

特に大きく、二つ Xeon と Xeon Phi がある。

CPU は我々にとって中核なので今後もやっていくつもりだが、よく聞かれるのが 私のやってるアプリケーションは Xeon と Xeon Phi どっちの方がいいですか という質問。

基本的に Xeon と Xeon Phi 現行の世代はともかく、次世代 Knights Landing と Xeon のプロセッサというのは OS 的な差はそんなに大きくない。

相対的に Xeon に比べて Xeon Phi の方がコアの数が多い。 その代わり一つのコアの能力は、Xeon より低い。

シリアルなアプリケーションであれば当然コアの性能が強い Xeon で動かしたほうが速いし、逆にマルチスレッド化された並列化されたアプリケーション、あるいは SIMD 化されたアプリケーションであれば Xeon Phi で動かしたほうが良い。

でも、Xeon を使いこなすための最適化も Xeon Phi を使いこなすための最適化も基本的には同じ。

要は、Binary Compatibility (バイナリコンパチビリティ)。 バイナリ互換性。 どっちも動くので、基本的に共通のプログラミングモデルで両方を動かすと。

よくあるのがそもそもお使いのアプリケーションが Xeon でも最適化されてないケースが結構ある。

特に最適化しなくても Xeon でも Xeon Phi でも動いてしまうので、皆さん Xeon の性能にそれなりに慣れ切ってしまっている。

本当は最適化すると Xeon でもものすごく速く動くんだが、そうなってない (最適化されてない) アプリケーションが結構多い。

Xeon に最適化されていないアプリケーションを同じような形で Xeon Phi で動かすとより遅くなるので、Xeon Phi 遅いという感想が多い。

そもそも Xeon に最適化されてないので、比較的にコアの能力が弱い Xeon Phi で動かしてしまうと よりそれが目立ってしまう。

先ほど話したように Xeon そのものは実はコア数 Xeon (Haswell) 世代が 18コア持っている。

Intel Xeon プロセッサ

Intel Xeon Processors

これにハイパースレッドが有効ならば 36スレッドになる。

結構この 18コアを使いこなしてるケースは少ない。

単体のコアの性能も高いし、世代が上がるに連れてコアの性能も 1割くらいは上がっているので、何もしなくても買い替えればある程度は上がってくる。

でもやはり Xeon を使いこなすには、それなりの工夫が必要。

今後も新しい世代の Xeon が出ればコアの数もやはり増えてくる。

なので、Xeon を使いこなすのも結局はいかに複数のコアを使いこなすかによる。

ものによっては、マルチスレッドかできないそういうアプリケーションも当然あるが、基本的にどう並列化するかというのは Xeon であろうと Xeon Phi であろうと先ほどの答えじゃないが、Xeon と Xeon Phi 結局とちか分からない、迷うという方は Xeon 買ってください と言っていると。

95% は、大体 Xeon が速いと評価している。

なので、迷うくらいだったら普通に Xeon 買ってくれという風な話し方をしている。

結局、Xeon Phi ってどういうときに使うんだと。

グイグイ力入れて色々と宣伝しているけど、たった 5%。

Xeon Phi で速く動くアプリケーションは、物凄く Xeon と比べて非常に高速で動く。

そのスイートスポットがあるアプリケーションのために Xeon Phi を出している。

でもそんな小さなニッチなところ (気付きにくい小規模でマニアックな分野・市場のこと) でしか動かないのでは? と疑問を抱くかもしれない。

たぶん二つの大きなチャレンジがあって、現状では Xeon Phi で速く動く確率はたぶん全体から見ると非常に少ない。

でも先ほど話したように、Xeon も使いこなすためには結局、並列化ないしは SIMD 化をしないといけない。 それは避けられない。

それを促すためにはやはりこういう製品というものを出して使いこなして頂く必要性がある。

いつまでも Xeon だけしか出していないと 別にまぁ動くからいいんだ と慣れ尽くすのではなくて、Xeon Phi という製品で最適化されてないアプリケーションを動かして頂いて、遅さに衝撃を受けてそれを使いこなすためにアプリケーションに最適化をすると。

某コンペさんのマルチミニコア的なアーキテクチャだとそもそも動かないので、動かすために手を入れなくちゃいけない。 それと同時に最適化も一緒にできてしまう。

うちの場合は何もしなくても動いてしまうので、遅いというところが目立つ。

でもここで Xeon Phi のために最適化をして頂くと その最適化の成果というのは Xeon より効果を発揮する。

Intel Xeon Phi プロセッサ

Intel Xeon Phi Processors

なので、最適化のメリット・投資というものを必ず別に Xeon Phi を使わなくても Xeon でもリターンがあるので、そういう行動、お客のアプリケーションを我々はモダナイゼーション (Modernization : 現代化) と言ってるが、そういう風にして頂くための、それを気付きを与える目的と、後は非常に狭いスイートスポットだが、Xeon Phi ってめちゃくちゃ速く動くアプリのためにこういうものを出している。

Xeon Phi は先ほど話したように非常に高速なメモリというのがパッケージに乗っけるので、実は CPU バウンドじゃなくて データを取るのまっちゃってま~す というアプリケーションも結構ある。

そういうものは、Xeon Phi で乗っけるとメモリも性能が速くなるので、そこのメリットを受けて高速化することもある。

なので、Xeon Phi 非常にピーキーなものだが、フィットすればものすごく良い製品だと思うし、まずご自信が使っているアプリケーションの特性を把握して頂くためにもとりあえず使って頂きたい。

ピーキーとは

ピーキー (peaky) は、挙動が神経質であり、ある限定的な範囲では非常に高い性能を発揮するが、その範囲外の場合は操縦性が低い時に使う表現です。

Wikipedia : ピーキー

可視化だって Software Define で

当然、そういう気付きのための製品なので、ただ単に出して 遅い! って実感して頂いただけで終わったら意味がないので、じゃ速くしよう、最適化しよう。 じゃどうすれば良いか。

そのための色んなツールであったり、会社向けのサポートを提供する。

色々とあるが、我々としては、先ほど話したように色んなワークロードが今後出て行く。 HPC をサポートするワークロードとしてビックデータとか AI (人工知能) とか。

それ関連で可視化というものがあるが、今まで可視化というものはそれ専用の GPU・システムみたいなものが搭載されているマシーンがあって、そこで回すということが非常に多かった。

基本的にハードウェアアクセレーションされているケースが多い。

GPU とは

GPU (Graphics Processing Unit) とは、専用ハードウェアによって画像データ処理を行う集積回路、画像処理を担当する主要な部品のことで、Visual Processing Unit(ビジュアル・プロセッシング・ユニット、VPU)という名称もある。

Wikipedia : Graphics Processing Unit

そういうものをソフトウェアで、最近 Software Define ○○ っていうのが流行ってるけど、SDN (Software Define Network) とか、SDS (Software Define Storage) とか。

可視化もソフトウェアでやっちゃいましょうと。

専用のハードウェアを持つ必要性は別にないんじゃないかと。

そういうような可視化するためのソフトウェアを我々はオープンソースで提供している。

何でこれをオープンソース (無料) で提供するかというと我々これで商売しているわけではない。

Software Define でやるってことは、ハードウェアは汎用的な何でもいい。

つまり、Xeon でいいですよと。 今まで GPU のようにハードウェアでアクセレーションするためにお金をかけていたものを。 それをお金かけずにより大きなクラスタ買ってくださいと。

可視化のワークロードであってもそれでやってくださいと。

そうすれば、計算資源も増えて、その計算資源、可視化だけではなくて普通の計算もできるし、可視化もできる。

従来のやり方だと可視化専用のハードウェアがある。

それが今、GPGPU という形で汎用的に使おうという逆の動きがあるので、アンチ的に感じずに汎用的なハードウェアを可視化でも使ってくださいと。

GPGPU とは

GPGPU とは、General-purpose computing on graphics processing units の略で、GPUによる汎用計算。 つまり、GPU の演算資源を画像処理以外の目的に応用する技術のことです。

Wikipedia : GPGPU

これのメリットは、大規模のメモリ空間を使えるので、直接可視化できる。

ハードウェアの場合には GPU のメモリ上に乗っからないとそもそも可視化できない。

後は、最後にコードの最適化という話で、単純に Xeon Phi で今の自分のコードがあまり速く最適化されてないことに気付いたらそれを速くするためにどうしたらいいか。

同じ状況の方々がいっぱい他に、世界中にいるので、そういうコードの現代化 (Code Modernization : コード・モダニゼーション) をやるためのコミュニティを作っている。

モダン・コード・デベロッパー・コミュニティというところで、それぞれ自分たちのコードをどう速くするか、どう最適化していいかというものを共有できる場を提供している。

やはり基本的に繰り返しになるが、コードを速くするためにはスレッド並列化、データレベルでの並列化、とにかく並列化をしていく。

後は、新しいメモリであったり、新しい通信能力であったり、そういうハードウェアの進歩も取り入れて性能を上げていく。

目指しているのは生産性向上

最後、まとめになるが、我々が目指しているのはアプリケーションが結果的に速くなって皆さんの生産性を上げることである。

そういうスケーラブル・システム・フレームワークというものを我々提唱しているが、それに基づいて製品・ソリューションというのを今後続々と出していくし、HP さんからもそういうのに基づいたハードウェア・テクノロジーが出てくるので、是非注目してほしい。

終わりに

クラウド基盤構築時に Xeon 使ってるんですが、本当に仰る通りで、仮想マシン数は多いのに全然 CPU 使われてなくて非常に勿体無いといつも感じていて、結構この 18コアを使いこなしてるケースは少ない という言葉には同感というか凄く納得しました。

言葉だけじゃ中々伝わりにくいところもあるかと思いますが、さすが皆さん大人でして、写真撮るのも申し訳ないくらいプレゼンする際の会場内がものすごく静かだったので、気持ち的には全ての画面をカメラに収めたかったのですが、せいぜい 4枚くらいにしておきました。

本当のことを言うと、参加しようと思っていたセッションではなかったのですが、今になって振り返ってみると参加したセッションの中で一番内容があって、クラウド業界に携わる人間として、個人的には非常に勉強になりましたし、一番印象に残るセッションになりました。

後、体調が万全でないにも関わらず、プレゼンテーションお疲れ様でした。 ありがとうございました。 と伝えたいですね。

関係者の方へ

もし内容が間違っていた場合には、ご連絡頂ければ訂正させていただきますので、お問い合わせフォームにてご連絡頂ければ幸いです。

以上、Intel Scalable System Framework が導く HPC の将来 でした。