.. _sec_buy_gpu: サーバーとGPUの選択 =================== 深層学習の学習には一般に大量の計算が必要である。現時点では、GPUは深層学習にとって最も費用対効果の高いハードウェアアクセラレータである。特に、CPUと比べるとGPUは安価でありながら高性能で、しばしば1桁以上の差がある。さらに、1台のサーバーで複数のGPUを搭載でき、高性能サーバーでは最大8枚まで対応する。より一般的なのは、エンジニア向けワークステーションで最大4枚程度である。というのも、熱、冷却、電力の要件は、オフィスビルで支えられる範囲をすぐに超えてしまうからである。より大規模な展開では、クラウドコンピューティング(たとえば、Amazonの\ `P3 `__\ や\ `G4 `__\ インスタンス)がはるかに実用的な解決策である。 サーバーの選択 -------------- 計算の大部分はGPU上で行われるため、多数のスレッドを持つ高性能CPUを購入する必要は通常ない。とはいえ、Pythonのグローバルインタプリタロック(GIL)のため、4–8枚のGPUを使う状況ではCPUの単一スレッド性能が重要になることがある。その他の条件が同じなら、コア数は少ないがクロック周波数が高いCPUのほうが、より経済的な選択肢だといえる。たとえば、6コア4 GHzのCPUと8コア3.5 GHzのCPUのどちらかを選ぶなら、総合的な速度は低くても前者のほうがはるかに望ましいである。 重要なのは、GPUは多くの電力を消費し、その結果として大量の熱を放出することである。そのため、非常に優れた冷却と、GPUを搭載できる十分に大きな筐体が必要になる。可能であれば、以下の指針に従っよ。 1. **電源**\ 。GPUはかなりの電力を消費する。1台あたり最大350Wを見込んで予算を組むこと(効率的なコードは多くのエネルギーを使う可能性があるため、グラフィックスカードの通常時の消費ではなく、\ *ピーク需要*\ を確認する)。電源が需要に見合っていないと、システムが不安定になる。 2. **筐体サイズ**\ 。GPUは大きく、補助電源コネクタにも追加のスペースが必要になることがよくある。また、大きな筐体のほうが冷却しやすいである。 3. **GPU冷却**\ 。GPUの数が多い場合は、水冷への投資を検討してもよいだろう。また、ファンの数が少なくても\ *リファレンスデザイン*\ を選ぶことを目指する。というのも、薄いため、デバイス間に空気を取り込む余地があるからである。複数ファンのGPUを買うと、複数枚を搭載した際に十分な空気を取り込めないほど厚くなり、熱による性能抑制(サーマルスロットリング)に陥ることがある。 4. **PCIeスロット**\ 。GPUとのデータのやり取り(およびGPU間の交換)には大きな帯域幅が必要である。16レーンのPCIe 3.0スロットを推奨する。複数のGPUを搭載する場合は、マザーボードの説明を注意深く読み、複数GPUを同時に使っても16\ :math:`\times`\ の帯域幅が維持されるか、追加スロットでもPCIe 2.0ではなくPCIe 3.0が使えるかを確認する。マザーボードによっては、複数GPUを搭載すると帯域幅が8\ :math:`\times`\ 、あるいは4\ :math:`\times`\ にまで低下する。これは一部には、CPUが提供するPCIeレーン数に起因する。 要するに、深層学習サーバーを構築する際の推奨事項は次のとおりである。 - **初心者**\ 。低消費電力の低価格GPUを購入する(深層学習に適した安価なゲーミングGPUは150–200W程度です)。運が良ければ、現在のコンピュータで対応できるかもしれない。 - **1 GPU**\ 。4コアの低価格CPUで十分であり、ほとんどのマザーボードで問題ない。少なくとも32 GBのDRAMを目指し、ローカルデータアクセス用にSSDへ投資する。600Wの電源で十分だろう。ファンの多いGPUを購入する。 - **2 GPUs**\ 。4–6コアの低価格CPUで十分である。64 GBのDRAMを目指し、SSDへ投資する。高性能GPUを2枚使うなら、おおむね1000Wが必要になる。マザーボードについては、\ *2つの*\ PCIe 3.0 x16スロットがあることを確認する。可能であれば、PCIe 3.0 x16スロットの間に2つの空きスペース(60mmの間隔)があるマザーボードを選び、追加の空気の流れを確保する。この場合、ファンの多いGPUを2枚購入する。 - **4 GPUs**\ 。比較的速い単一スレッド性能(すなわち高いクロック周波数)を持つCPUを購入する。おそらく、AMD Threadripperのような、より多くのPCIeレーンを持つCPUが必要になる。4つのPCIe 3.0 x16スロットを得るには、PLXでPCIeレーンを多重化する必要があるため、比較的高価なマザーボードが必要になるだろう。細くてGPU間に空気を通せるリファレンスデザインのGPUを購入する。1600–2000Wの電源が必要で、オフィスのコンセントでは対応できないかもしれない。このサーバーはおそらく\ *うるさくて熱い*\ 状態で動作する。机の下に置きたくはないだろう。128 GBのDRAMを推奨する。ローカルストレージ用にSSD(1–2 TB NVMe)を用意し、データ保存用にRAID構成のハードディスクを複数台用意する。 - **8 GPUs**\ 。複数の冗長電源を備えた専用のマルチGPUサーバー筐体(たとえば、電源1台あたり1600Wで2+1構成)を購入する必要がある。これにはデュアルソケットのサーバーCPU、256 GBのECC DRAM、高速ネットワークカード(10 GBE推奨)が必要であり、サーバーがGPUの\ *物理的なフォームファクタ*\ に対応しているか確認しなければならない。コンシューマ向けGPUとサーバー向けGPUでは、空気の流れや配線の配置が大きく異なる(たとえば、RTX 2080とTesla V100)。そのため、電源ケーブルのための十分なクリアランスがない、あるいは適切な配線ハーネスがないために、コンシューマ向けGPUをサーバーに搭載できないことがある(このことは、共同著者の1人が痛い目に遭って学んだ)。 GPUの選択 --------- 現時点では、AMDとNVIDIAが専用GPUの2大メーカーである。NVIDIAは深層学習分野に最初に参入し、CUDAを通じて深層学習フレームワークへのより良いサポートを提供している。そのため、購入者の多くはNVIDIA GPUを選ぶ。 NVIDIAは、個人ユーザー向け(たとえばGTXおよびRTXシリーズ)と企業ユーザー向け(Teslaシリーズ)の2種類のGPUを提供している。これら2種類のGPUは、計算性能としては同程度である。しかし、企業向けGPUは一般に(受動)強制冷却を用い、より多くのメモリとECC(誤り訂正)メモリを備えている。これらのGPUはデータセンターにより適しており、通常はコンシューマ向けGPUの10倍の価格である。 100台以上のサーバーを持つ大企業であれば、NVIDIA Teslaシリーズを検討するか、あるいはクラウド上のGPUサーバーを利用するのがよいだろう。10台以上のサーバーを持つ研究室や中小企業であれば、NVIDIA RTXシリーズが最も費用対効果が高い可能性が高いである。SupermicroやAsusの筐体を使った、4–8枚のGPUを効率よく搭載できる事前構成済みサーバーを購入できる。 GPUベンダーは通常、1〜2年ごとに新世代をリリースする。たとえば、2017年にリリースされたGTX 1000(Pascal)シリーズや、2019年のRTX 2000(Turing)シリーズである。各シリーズには、異なる性能レベルを提供する複数のモデルがある。GPU性能は主に次の3つのパラメータの組み合わせである。 1. **計算性能**\ 。一般には32ビット浮動小数点の計算性能を見る。16ビット浮動小数点学習(FP16)も主流になりつつある。予測だけに興味があるなら、8ビット整数も使える。最新世代のTuring GPUは4ビットの高速化も提供する。残念ながら、本書執筆時点では、低精度ネットワークを学習するためのアルゴリズムはまだ広く普及していない。 2. **メモリ容量**\ 。モデルが大きくなったり、学習時のバッチが大きくなったりすると、より多くのGPUメモリが必要になる。HBM2(High Bandwidth Memory)とGDDR6(Graphics DDR)のどちらかを確認する。HBM2のほうが高速であるが、はるかに高価である。 3. **メモリ帯域幅**\ 。十分なメモリ帯域幅があって初めて、計算性能を最大限に引き出せる。GDDR6を使う場合は、幅広いメモリバスを確認する。 ほとんどのユーザーにとっては、計算性能を見るだけで十分である。多くのGPUが異なる種類の高速化を提供していることに注意する。たとえば、NVIDIAのTensorCoreは一部の演算子を5\ :math:`\times`\ 高速化する。ライブラリがこれをサポートしていることを確認する。GPUメモリは少なくとも4 GB必要であり(8 GBならはるかに良いです)、GUIの表示にもGPUを使わないようにすること(代わりに内蔵グラフィックスを使う)。それが避けられない場合は、安全のためにRAMをさらに2 GB追加する。 :numref:`fig_flopsvsprice` は、さまざまなGTX 900、GTX 1000、RTX 2000シリーズのモデルについて、32ビット浮動小数点の計算性能と価格を比較したものである。示されている価格は、本書執筆時点でWikipediaに掲載されていたものである。 .. _fig_flopsvsprice: .. figure:: ../img/flopsvsprice.svg Floating-point compute power and price comparison. ここから、いくつかのことがわかる。 1. 各シリーズ内では、価格と性能はおおむね比例する。Titanモデルは、より大容量のGPUメモリの恩恵のためにかなり高価である。しかし、980 Tiと1080 Tiを比較するとわかるように、新しいモデルのほうが費用対効果は高くなっている。RTX 2000シリーズでは、価格の改善はあまり見られない。ただし、これは低精度性能(FP16、INT8、INT4)がはるかに優れているためである。 2. GTX 1000シリーズの性能対コスト比は、900シリーズのおよそ2倍である。 3. RTX 2000シリーズでは、性能(GFLOPs)は価格の\ *アフィン*\ 関数である。 .. _fig_wattvsprice: .. figure:: ../img/wattvsprice.svg Floating-point compute power and energy consumption. :numref:`fig_wattvsprice` は、消費電力が計算量にほぼ線形に比例して増えることを示している。第二に、後の世代ほど効率が高くなっている。これはRTX 2000シリーズに対応するグラフと矛盾しているように見える。しかし、これはTensorCoreが不釣り合いに多くの電力を消費することによるものである。 まとめ ------ - サーバーを構築するときは、電源、PCIeバスレーン、CPUの単一スレッド速度、冷却に注意する。 - 可能であれば、最新世代のGPUを購入すべきである。 - 大規模展開ではクラウドを使っよ。 - 高密度サーバーはすべてのGPUと互換とは限らない。購入前に機械的仕様と冷却仕様を確認する。 - 高効率のためにはFP16またはそれ以下の精度を使っよ。