Deep Learning RTX 3060ベンチマーク

先日、eGPUを導入したので計算能力の向上幅を大づかみすることにした。

ベンチマークの前に…

計算能力の優劣はコア数や周波数による計算能力だけでなく、メモリ帯域でも決まる。これを簡単にモデル化したものをRooflineモデルと呼ぶ。 データ規模あたりの計算量で計算タスクを抽象化し(横軸)、どの程度の計算能力(縦軸)が期待できるか見積もる際、 あるいは理論上限能力値に対してどの程度性能を発揮しているか評価するときに使う。

Roofline Model
Roofline model (Source:A Survey of FPGA-Based Neural Network Accelerator)

このモデルはデータ量に対して計算量が少ないタスクではメモリ帯域が計算能力の上限を決めることを表現している。モデルを使った、より専門的な分析の事例としてはPerformance Analysis of GPU-Accelerated Applications using the Roofline ModelPerformance Tuning with the Roofline Model on GPUs and CPUsなどが参考になると思う。 これら2つは、計算機の能力がどこで頭打ちになるかデバイスの仕組みとともに解説もされている。

細かい内訳を見ればIn-Datacenter Performance Analysis of a Tensor Processing Unitで示されるようにデバイスごとにRooflineが異なり、 同じタスクでもメモリで性能が制約されたり、コアの性能を出し切ったりということもあるかと思う。

Device Roofline Model
Device Roofline Comparison (Source:In-Datacenter Performance Analysis of a Tensor Processing Unit)

しかし、Adrián Castelló et al., 2019によれば、Deep Learningの有名なネットワークは十分に「コア性能」が使い切れるように設計されているようである。

Deep Learning Model Roofline Model
Deep Learning models on Roofline (Source:Theoretical Scalability Analysis of Distributed Deep Convolutional Neural Networks)

そこで大胆な割り切りをして単純にDeep Learningモデルのトレーニング、推論にかかる単位時間を使って比較を行うことにする

(結局、余所と同じです)

機材

  • Dell Inspiron 7490 (2019)
    • Intel Core i7-10510U
    • RAM 16GB, LPDDR3, 2133MHz
    • 組込GPU: NVIDIA GeForce MX250
    • eGPU: NVIDIA GeForce RTX3060 (12GB)
      • Driver 516.94
    • Thunderbolt 3
  • Windows 11 (22622.450 ni_release)
  • Python 3.10 (Anaconda)
    • CUDA 11.3
    • Pytorch 1.12.1

ベンチマーク

こちらを使います

改めて環境の確認。両方GPUを生かしておくとクラッシュするので片方ずつ有効化する。

$ nvidia-smi --query-gpu=name,driver_version  --format=csv,noheader
NVIDIA GeForce RTX 3060, 516.94

$ python
Python 3.10.4 | packaged by conda-forge | (main, Mar 30 2022, 08:38:02) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.12.1'
>>> torch.version.cuda
'11.3'

GPUを切り替えると下記だけ異なる

$ nvidia-smi --query-gpu=name,driver_version  --format=csv,noheader
NVIDIA GeForce MX250, 516.94

結果

比較のため元レポのデータも抜粋した。MX250はメモリ不足でFP32の条件では動作せず、FP16も計測時間が長いのでVGG16のみ。

今回導入した3060は1080Tiにわずかに劣る性能で、Google ColabratoryのTesla T4より快適という位置づけになりそう。GPUの専有時間が心配になりませんし、NeRFなど手元で3Dをグリグリしたい用途で優位性を発揮してもらいましょう。

実行時間(ms)の測定結果
Device 出典 環境 vgg16 resnet152 densenet161
eval(ms) train(ms) eval(ms) train(ms) eval(ms) train(ms)
Titan V github PyTorch 0.3
CUDA 9
FP32
31.3 108.8 48.9 180.2 52.4 174.1
1080 Ti 同上 39.3 131.9 57.8 206.4 62.9 211.9
V100 同上 26.2 83.5 38.7 136.5 48.3 142.5
2080 Ti 同上 30.5 102.9 41.9 157.0 47.3 160.0
Tesla T4 今回計測
Colaboratory
PyTorch 1.12
CUDA 11.3
FP32
72.4 223.6 109.1 375.9 108.3 367.2
3060 今回計測 PyTorch 1.12
CUDA 11.3
FP32
45.6 146.9 69.4 273.6 78.6 293.8
3060 今回計測 PyTorch 1.12
CUDA 11.3
FP16
33.4 112.0 52.4 244.6 60.7 295.7
MX250 今回計測 PyTorch 1.12
CUDA 11.3
FP16
3,147.2 10,344.4 - - - -

考察

ある特定のタスクの結果をもって全体的な性能を示すことは難しい。しかし、個人では資金がアクセスできるデバイスの数に制限をかけることから平等条件でない指標を複数見比べながら購買計画をたてざるえないと思う。

そこで試験的にベンチ結果を推測する手立てを考えた。

理論計算能力との相関

測定した処理時間の逆数がFLOPSの次元なので逆数を取ってプロットし、GPU性能との相関を取った。GPUの性能はGPU DatabaseのFP32の性能(TFLOPS)を使った。

3060はデータバス帯域が狭いため異常値になる予感もあったが、概ねTFLOPSに比例した結果が観察され、VGG16に関しては(標本サイズからあまり意味のない数値かも知れないが) 切片=0の回帰に対して何れも$ R^2_7 = 0.984 $ である。

VGG16
VGG16ベンチマーク結果

Deep Learningの著名モデルを扱う前提であればFP32を指標にGPUの買い替えや買い増しを検討することはあながち間違いではなさそうである。

3Dベンチマークとの相関

理論計算能力値で心配な場合は3Dゲームのベンチマーク結果が実践値という意味で利用可能かもしれない。データソースとしても潤沢でGeForceならばまず数値が見つけられるはず。

結論だけ報告すると、こちらもベンチマークスコアと概ね相関を取れたが、Tesla系列のデータがあるわけもなくGoogle Colaboratoryとの比較などといった実用面の観点から企画倒れであった。

参考

No comments:

Post a Comment