低遅延10Gb Ethernetによる
GPUクラスタの構築と
性能向上手法について	
株式会社エルザジャパン	
鈴木篤志
なぜ  10Gb  Ethernet  なのか?
InfiniBand  ではなく?
•  MPI通信の基本性能はInfiniBandが優勢
•  QDRで3〜~3.5GB/s,  FDRで5.0〜~5.4GB/s
•  10GbE  2ポートNICを使った場合で合計  2.5GB/s
•  広範な10GbEインフラストラクチャーとの相互接続
•  NAS/SAN・VDI・GbE/WiFi・Campus,  Metro〜~Global  WAN
•  HFT等で発達しているFPGA  NIC技術
•  SoC化の発達  (ARM  Cortex  /  intel  Atom)
•  InfiniBandに匹敵する遅延性能・メッセージレートを達成
10GbE  ポートフォリオ
Solarflare  サーバーアダプター  /  OpenOnload
3
ラインレート性能を持った多種のNICと,ユーザー空間で動作する低遅延オープンソースソフトスタック
⾦金金融業界で⽤用いられている
FPGA  NIC
顧客からの
発注/約定通知
証券取引所との
発注/価格取得
CPUによる
複雑な処理
FPGA
上に
スタック
および
アプリ
を実装	
CPU・I/Oバスを通過せずFPGAの上だけでアプリケーションを動作させるHFTの10GbE技術
SolarflareのFPGA  NIC
Application  Onload  Engine  と  FDK
5
AOE ユニバーシティプ
ログラム
•  HW+開発キットを実
効的な教育向けディス
カウント価格で提供
•  世界中の大学・教育
研究機関に所属する
教職員・学生を対象
•  OpenOnload® 対応
OpenOnload対応のASIC NICとのハイブリッドで,特定のパケットに対してFPGAアプリの動作が可能
10GbE  /  40GbE  ポートフォリオ
Gnodal  GSシリーズスイッチ
GS7200 GS4008 GS0018
72×10GbE SFP+ 40×10GbE SFP+
8×40GbE QSFP
18×40GbE QSFP
ポート
数	
ホッ
プ数	
Gnodal
10GbE
Gnodal
40GbE
72 1 150ns 150ns
inter
switch
+1 66ns 66ns
720 * 3 282ns 282ns
6480 * 5 414ns 414ns
スイッチ間66nsの遅延と, マルチパス対応トポロジー,64Kノードまでのスケーラビリティ
GnodalスイッチASIC同士により自動的に経路制御・輻輳回避
Gnodal  ファブリック  
Ethernetでエッジを構成!
10GbE  関連製品ポートフォリオ
BOSTON Viridis
•  Boston Viridis –  電⼒力力効率率率に⾮非常に優れたサーバーの誕⽣生
–  Calxeda EnergyCore プロセッサーを採⽤用
•  Cortex  A9  1.1〜~1.4GHz  4コア  の  EnergyCore  ECX-‐‑‒1000
•  1枚のサーバーモジュールに4基のEnergyCoreプロセッサを搭載
•  2Uサイズのサーバー筐体に48基のEnergyCoreプロセッサを集約  –  192コア
–  各EnergyCore SoCには4GBまでのDRAMを接続可能
–  各々のSoCが10GbEスイッチを内蔵し
メッシュ型のトポロジーをシャーシ内に構成
BOSTON  Viridis
システムボードによるファブリック
シャーシ内でメッシュトポロジーの10GbEファブリックを実現。外部スイッチ不要。
EnergyCore  SoC
Cortex  A15世代での向上点
メモリバス
幅が64bit
→128bit,
アドレス幅
が40bitに
最⾼高動作
クロックが
1.4GHzから
2.5GHzに
倍精度度浮動
⼩小数点演算
性能1.5倍
前後向上
HPCで求められる浮動小数点演算性能ではトータル2.5〜3倍の性能向上見込み
PhoronixによるCortex  A15性能評価
FFTE  v5.0  –  N=64,  1D  Complex  FFT
InfiniBandによる
GPUクラスタの例例
CPU Memory
For
CUDAmemcpy
InfiniBand
Fabric	
IB転送	
CPU Memory
For
CUDAmemcpy
多重ピンロック	
を回避する
必要
NVidia  GPU  Direct
RDMA転送とGPUへのDMA転送の衝突を回避
GPU  Direct  の現状
  CPU Memory
For
CUDAmemcpy
  CPU Memory
For
CUDAmemcpy
InfiniBand Fabric	
IB転送が可能に	
GPU-
Direct
P2P	
※同⼀一
IOH内
のみ
GPU  Direct  P2Pの制約
異異なるIOH下のGPU間での直接転送は出来ない
Intel® QDR-80 ソリューションで
GPU・InfiniBand・NUMAのAffinity問題を⼀一気に解決
QPI 2	
QPI 1	
• Xeon E5-2600より、PCIeコントローラーがオンチップ化。	
• 2ソケットサーバーではリモートソケット参照が発生。(遅延 1.16us → 1.71us)
• QDR-80により、CPUソケット数分のIBを用意すれば、リモートソケット参照は回避可能
• 遅延およびInterruptハンドリング性能を劇的に改善
• Intel® Data Direct I/O (DDIO)のメリットを享受
• Intel InfiniBandスタックは多重ピンロック問題の回避が容易(Send/Recv)
MPI buffer
For
CUDAmemcpy
MPI buffer
For
CUDAmemcpy
QDR-80を実現しているPSMの動作
QPI 2	
QPI 1	
Rank 0 Rank 1 Rank 1
QPI 2	
QPI 1	
Rank 2 Rank 3 Rank 3
NUMAAffinity
を確保するよう
プロセスを移動する	
NUMAAffinity
を確保するよう
プロセスを移動する
Solarflare 10GbE NIC と  OpenOnload で
QDR-80により近い構成を構築
QPI 2	
QPI 1	
• Xeon E5 モデルのサーバーを採用
• 1µs前後の遅延が生じるQPI経由の通信を極力回避
• CPUソケットからローカルなSolarflare NICの特定ポートを選択する
• たとえばopenmpiではrankfileにより各rankが動作するCPUコアを指定できるので
自らのrank番号により使用すべきIPアドレスを特定できる
MPI buffer
For
CUDAmemcpy
MPI buffer
For
CUDAmemcpy
GPUによる⾏行行列列演算
•  問題を単純化し、32k×32kの⼆二次元⾏行行列列の積の演算  M×N=Pを⾏行行う
•  M,  N⾏行行列列を32×32のタイルに分割し、タイル対ごとに積を求め、結果を⾜足し
合わせてPのタイルとする。
–  M⾏行行列列の縦y番⽬目横i番⽬目と、N⾏行行列列の縦i番⽬目横x番⽬目の積を求める
–  iを1〜~kの範囲で繰り返し、各々で求まるPxy(i)を⾜足し合わせる
1blockが受け持
つ部分行列

(タイル)
•  M,  N⾏行行列列の必要な部分をGPUのGlobal Memoryに転送
•  各blockは担当するタイルをShared  memoryに転送し
、積を求め、結果をGlobal  memoryにストアする
•  Global  memory上の結果のタイルを⾜足し合わせる
GPUへのデータ転送のパイプライン化
(1) 未転送の場合、32x32のタイルを1024個
転送することで一つの行をMPI転送
する。	
(2) 同様に未転送の場合、32x32のタイルを
1024個転送することで一つの列を
MPI転送する。	
(3) GPUに演算元データを転送する	
(4) GPUによる演算を行うカーネル関数を
起動する	
(5) 演算結果タイルのデータをGPUから転
送
する	
(6)  演算結果タイルのデータをMPI転送する
	
この一連のを2列のパイプラインを組んで
並列的に動作させる。
Solarflare  OpenOnloadホストスタック
ユーザー空間で動作する仕組み
•  割り込みはデフォルトで禁⽌止
されている
•  次のようなstack_̲poll関数を
呼び出して、受信されている
信号を得る
stack_poll() {
reprime_hw_timer();
handle_network_events();
refill_rx_ring();
refill_tx_ring();
process_timers();
}
•  実際のソケット関数  recv(),
send(), poll(), select() から必
要に応じ  stack_poll() 関数が
呼ばれる
OpenOnloadのチューニング
OpenOnloadのチューニングパラメータとして以下のような値を
/usr/libexec/onload/profiles/latency に設定する:
onload_set EF_POLL_USEC=100000
onload_set EF_TCP_FASTSTART_INIT 0
onload_set EF_TCP_FASTSTART_IDLE 0
	
EF_POLL_USEC: 割り込みでなくspinningで通信待ちを指定数値のµ秒間行う	
EF_TCP_FASTSTART_INIT/IDLE: 追加的なACK発行を行う設定	
アプリケーションがOpenOnloadスタックを用いるよう指定するには
次の二つの方法がある
•  onload <プログラムパス> …
•  /etc/profile.d/openonload.sh などで LD_PRELOAD 環境変数を設定する
•  export LD_PRELOAD=libonload.so
OpenMPIのPTLとしてTCPを指定し
OpenOnloadに適したチューニングを⾏行行う
OpenMPIの起動オプションとして以下のようにTCPを指定する	
	
% onload –profile=latency mpirun --mca btl tcp,self …
TCP使用時の代表的なチューニングパラメータ	
MCA btl: parameter "btl_tcp_free_list_num" (current value: "8")
MCA btl: parameter "btl_tcp_free_list_max" (current value: "-1")
MCA btl: parameter "btl_tcp_free_list_inc" (current value: "32")
MCA btl: parameter "btl_tcp_sndbuf" (current value: "131072")
MCA btl: parameter "btl_tcp_rcvbuf" (current value: "131072")
MCA btl: parameter "btl_tcp_endpoint_cache" (current value: "30720")
MCA btl: parameter "btl_tcp_exclusivity" (current value: "0")
MCA btl: parameter "btl_tcp_eager_limit" (current value: "65536")
MCA btl: parameter "btl_tcp_min_send_size" (current value: "65536")
MCA btl: parameter "btl_tcp_max_send_size" (current value: "131072")
MCA btl: parameter "btl_tcp_flags" (current value: "122“)
MCA btl: parameter "btl_tcp_priority" (current value: "0")
OpenMPIのPTLとしてTCPを指定し
OpenOnloadに適したチューニングを⾏行行う
OpenMPIのスタックとしてOpenOnloadを用いるときのチューニングパラメータ
[/etc/openmpi-x86_64/openmpi-mca-params.conf]	
btl_tcp_if_include = eth4,eth5	
btl_tcp_if_exclude = lo,eth0,eth1	
btl_tcp_bandwidth = 12500	
btl_tcp_latency = 1
InfiniBandとの⽐比較  –  レイテンシー
25
message size

(bytes)	
Solarflare

port1	
Solarflare

port2	
 Mellanox IB	
0	
 4.21	
 4.19	
 1.22	
1	
 4.35	
 4.34	
 1.15	
2	
 4.35	
 4.35	
 1.15	
4	
 4.34	
 4.34	
 1.15	
8	
 4.35	
 4.34	
 1.18	
16	
 4.35	
 4.35	
 1.18	
32	
 4.39	
 4.39	
 1.21	
64	
 4.45	
 4.45	
 1.3	
128	
 4.62	
 4.62	
 1.96	
256	
 4.92	
 4.94	
 2.12	
512	
 5.53	
 5.6	
 2.42	
1024	
 6.6	
 6.66	
 3.03	
2048	
 8.16	
 8.26	
 4.15	
4096	
 10.01	
 10.28	
 5.1	
8192	
 14.28	
 14.6	
 7.19	
16384	
 22.49	
 28.39	
 9.95	
32768	
 40.45	
 49.09	
 15.03	
65536	
 82.11	
 104.5	
 25.31	
131072	
 96.01	
 123.38	
 45.73	
262144	
 192.61	
 222.62	
 86.54	
524288	
 418.5	
 452.02	
 168.04	
1048576	
 880.6	
 949.9	
 331.42	
2097152	
 2037.82	
 2048.71	
 657.8	
4194304	
 4068.6	
 3859.8	
 1311.4	
1
10
100
1000
10000
Solarflare
port1
Solarflare
port2
Mellanox  IB
レイテンシーにおいてはInfiniBandの性能が非常に高い
InfiniBandとの⽐比較  –  帯域 26
message size

(bytes)	
Solarflare

port1	
Solarflare

port2	
 Mellanox IB	
1	
 1.41	
 1.37	
 1.84	
2	
 2.84	
 2.76	
 3.68	
4	
 5.67	
 5.6	
 6.89	
8	
 11.5	
 11.24	
 27.39	
16	
 22.87	
 22.43	
 53.67	
32	
 45.83	
 44.74	
 102.97	
64	
 88.79	
 87.46	
 199.23	
128	
 174.97	
 171.66	
 354.33	
256	
 337.04	
 335.74	
 639.49	
512	
 618.15	
 620.38	
 1103.31	
1024	
 975.82	
 1031.24	
 1764.64	
2048	
 1086.39	
 1139.46	
 2360.89	
4096	
 1155.17	
 1173.95	
 2755.94	
8192	
 1164.02	
 1168.38	
 2926.22	
16384	
 1166.13	
 1178.85	
 3051.34	
32768	
 1178.9	
 1176.36	
 3137.6	
65536	
 1171.97	
 1173.63	
 3175.34	
131072	
 1178.65	
 1174.27	
 3194.5	
262144	
 1177.23	
 1174.83	
 3202.03	
524288	
 1180.2	
 1169.95	
 3208.58	
1048576	
 1175.45	
 1175.67	
 3211.02	
2097152	
 1174.35	
 1174.56	
 3211.92	
4194304	
 1078.1	
 1077.61	
 3212.26	
0
500
1000
1500
2000
2500
3000
3500
Solarflare
port1
Solarflare
port2
Mellanox  IB
Solarflare NIC 2ポート同時使用でもラインレートの帯域が得られ、各コアに1ポート割り当てられる
ご⽤用命は…
•  エルザジャパンにお問い合わせください。
–  Solarflare製品の⽇日本国内のVARです。
–  技術部  (担当:鈴鈴⽊木)  
–  Tel. (03) 5765-7391
–  E-mail: hpc@elsa-jp.co.jp
–  URL: http://www.elsa-jp.co.jp
•  プレゼンテーション、デモ、および検証作業のご協⼒力力に
伺います。
–  ターゲットアプリケーション、評価の規模などをあらかじめ教え
ていただければ、Solarflare と連携し、最適な構成を⽤用意して検
証いただけるようセットアップします。
–  技術的質問・改修のご要望など、Solarflare とのやりとりはすべ
てエルザジャパンにてご対応いたします。
28

低遅延10Gb EthernetによるGPUクラスタの構築と性能向上手法について