!!! サイト改修中のため表示が乱れる場合があります(1月末頃まで) !!!
解説

26-24. GPUの単精度(FP32)倍精度(FP64)計算能力の見方

はじめに

先日、HOBO対応したアニーリングパッケージ「HOBOTAN」を紹介しました。現在は「TYTAN」に統合され、TYTANひとつでQUBOもHOBOもGPUアニーリングできるようになりました。

GitHub - tytansdk/tytan: Python SDK for large QUBO problems
Python SDK for large QUBO problems. Contribute to tytansdk/tytan development by creating an account ...

現在、有志でHOBOのテンソル計算の精度確認と高速化に取り組んでいるのですが、なんか間違ったエネルギーの値が返ってくるなと思ったら数値の型が原因のようでした。

通常、Numpyはデフォルトで「float64」ですが、PyTorchは「float32」らしいです。ですからNumpyでは正しい値が返ってきていたものが、PyTorch(GPUモード)に変えたら間違った値が返ってきたということでした。

非常に雑な言い方ですが、単精度(float32)は7桁、倍精度(float64)は15桁の数字を表現できるとのことで、「大きな数」や「小数点以下すごい細かい数」を正確に計算したい場合は倍精度を使おう、というイメージです。

ということでPyTorchのコードでfloat64を指定して問題は解決しましたが、計算速度は10分の1程度まで遅くなってしまいました。倍精度の計算は遅い!単精度用の計算ユニットをFP32ユニット、倍精度用をFP64ユニットと呼ぶことにすると、GPUによってはFP32ユニットに比べてFP64ユニットの搭載数が非常に少なく、単精度に比べて倍精度の計算がとても遅いということになります。

実際、FP32ユニットとFP64ユニットがどのような比率で搭載されているのか勉強してみました。

参考文献

様々なサイトで勉強させていただきました。専門的な用語を分かりやすく解説してくださっている先人たちに感謝申し上げます。

西川善司の3DGE:GeForce RTX 30シリーズのアーキテクチャを探る。CUDA Coreの増量とRT Coreの高性能化に注目だ
去る9月2日,NVIDIAは,新世代GPU「GeForce RTX 30」シリーズを発表した。GeForce RTX 30シリーズは,「Ampere」アーキテクチャを採用するゲーム向けGPUで,既存の...
西川善司の3DGE:GeForce RTX 20完全理解。レイトレ以外の部分も強化が入ったTuringアーキテクチャにとことん迫る
リアルタイムレイトレーシング,そしてAI推論用の専用ハードウェアを搭載するGPU「GeForce RTX」。そのアーキテクチャ詳細がついに明らかとなった。連載「西川善司の3Dゲームエクスタシー」,今回...
GeForce RTX 2070 レビュー|ドスパラ通販【公式】
RTX 2070 製品レビューです。特徴、スペック、ベンチマークについてご紹介します。
GPUの新時代を切り開く「Turing」アーキテクチャ徹底解説
NVIDIAの新しいGPUアーキテクチャ「Turing」はこれまでと何が違うのか。その詳細を解説。
NVIDIA Turing Microarchitecture RTX GPU (TU102, TU104, TU106)|株式会社アークブレイン

GeForce RTX 2070のスペック

うちでメインで使用しているTuring世代のGPU「GeForce RTX 2070」について調べてみました。

ドスパラのサイトによると、CUDAコアが2304基、Tensorコアが288基、RTコアが36基と書かれています。

PyTorchでの数値計算に関係するのは「CUDAコア」と「Tensorコア」の数です。しかし、どうやらこれらのコアを分解してFP32ユニット、FP64ユニットの数を確認しないと計算速度が分からないようです。(RTコアはおそらく無関係なのでここでは考えないことにします)

FP32ユニットとFP64ユニットの数を求める

まずはスペック表に書かれているCUDAコア=2304基、Tensorコア=288基にたどり着くことを目指しましょう。

RTX 2070にはGPC(Graphics Processing Cluster)という塊が3つ入っているらしい。

Turingアーキテクチャには上位から順に「TU102」「TU104」「TU106」があり、RTX 2070はTU106のようです。TU106は1つのGPCあたり12個のStreaming Multiprocessor(SM)が入っています。

SMの中を見ていきましょう。ここには4個のProcessing Blockと1基のRTコア、2個のFP64ユニットが配置されています。RTコアとFP64ユニットの勘定はこの段階で完了です。

さらにProcessing Blockの中を見てみると、16個のFP32ユニット、16個のINT32ユニット、2基のTensorコアがあります。FP32ユニットとINT32ユニットをセットで「CUDAコア」とカウントしているらしいので、ここには16基のCUDAコアがあることになります。これですべてのコアとユニットの勘定が完了しました。

結局、RTX 2070は

  • CUDAコア=3×12×4×16=2304基
  • Tensorコア=3×12×4×2=288基

が搭載されていることになり、カタログと一致しました。Tensorコアはほとんど半精度(FP16)用、深層学習で活躍するものらしくここでは一旦無視します。

さらに、ユニットの数で言うと

  • FP32ユニット=3×12×4×16=2304個(CUDAコアと同じ)
  • FP64ユニット=3×12×2=72個

となっており、単精度に比べて倍精度の計算速度は32分の1になると見積もられました。

一般に「FP64の性能はFP32の32分の1」という情報をよく見ます。

しかし、グラフィックス向けのTuringでは、FP64の性能はFP32の32分の1となっている。各サイクルにSM毎に2命令のスループットだ。

https://pc.watch.impress.co.jp/docs/column/kaigai/1143278.html

GPGPU用ではないGeForceブランドのGPUは,一部の例外を除いてFP64の演算性能は,
・FP32演算性能:FP64演算性能=32:1

https://www.4gamer.net/games/527/G052743/20200911024/

このことは上記の計算を見れば納得できます。

まとめ

全体を一枚の画像にまとめるとこのようになります。

個々のレイヤーの解説は見つかるのですが、全体を俯瞰した解説がなかなか見当たらなかったのでこの記事を書きました。まあ多分いろいろ間違っていると思うので優しく指摘してください。

なお、「H100」や「A100」といったGPGPU用の製品ではFP64が有利になっており、精密な計算やシミュレーションに用いられています。また、NVIDIAは「データセンターでGeForceを使わないで」とも言っています(→GeForceのデータセンター利用を禁止する使用許諾契約に対してNVIDIAが声明)。GeForceと計算専用GPUの比較もしてみたいところですね。

一応、「H100」「A100」用の専用クーラーも販売していますのでぜひ見てみてください。

リアクションのお願い

「参考になった!」「刺激された!」と思ったらぜひリアクションをしましょう。エンジニアの世界はGive and Takeによって成り立っています。これからも無料で良質な情報にアクセスできるよう、Giveする人への感謝をリアクションで示しましょう!

この記事をシェアする

自身のブログ等で使用する場合は引用を忘れずに!

また、寄付も受け付けています。コーヒー1杯でとても喜びます(*˘︶˘*)

 Amazonでギフト券(アマギフ)を贈る

こちらのリンク から金額を指定してお贈りください。(デフォルトで10000円になっているのでご変更ください)

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 Amazonで食事券(すかいらーく優待券)を贈る

500円 1000円 2000円 5000円 からお贈りください。

配送:Eメール
受取人:staffあっとvigne-cla.com
贈り主:あなたのお名前やニックネーム
メッセージ:◯◯の記事が参考になりました。など

のようにご入力ください。見返りはありませんのでご了承ください。

 その他、ギフト券やクーポン券をメールで贈る

デジタルのギフト券/クーポン券はメールアドレス(staffあっとvigne-cla.com)までお送りください。受領の返信をいたします。
紙のギフト券/クーポン券は 「郵便物はこちらへ」の住所 まで送付してください。名刺やメールアドレスを同封していただければ受領の連絡をいたします。
余った株主優待券等の処理におすすめです。
いずれも見返りはありませんのでご了承ください。

不明点はSNSでお気軽にご連絡ください

ビネクラのTwitter・Youtubeでコメントをください!


Slack・Discordの場合はこちらの公開グループに参加してShoya YasudaまでDMをください!


※当ブログに関することは何でもご相談・ご依頼可能です。

この記事を書いた人
Yasuda

博士(理学)。専門は免疫細胞、数理モデル、シミュレーション。米国、中国で研究に携わった。遺伝的アルゴリズム信者。物価上昇のため半額弁当とともに絶滅寸前。

タイトルとURLをコピーしました