NVIDIA RTX4090 ML-AI 深度学习和科学计算性能初探
目录
1.介绍
2.测试系统
3.基准测试
4.HPL (Linpack)
5.HPCG
6.NAMD
7.LAMMPS
8.TensorFlow 1.15.5 ResNet50
9.PyTorch 1.13 Transformer
10.结论
介绍
文章介绍 NVIDIA RTX4090 ML-AI 深度学习和科学计算性能初探。这是基于 NVIDIA CUDA 11.8 驱动程序的结果。
测试的应用程序可能还没有针对SM_89 进行完全优化,这是 Ada Lovelace 架构才有的 CUDA计算级别。 CUDA 12 应该完全支持这一点。
RTX 4090 没有让人失望! NVIDIA 再次设法将性能改进比上一代提高了近一倍。考虑到首席执行官 Jensen Huang 在 GTC 2022 秋季大会上的评论:“摩尔定律已死”,CPU 方面的好日子早已一去不复返了,对于 NVIDIA 来说也可能即将结束。然而,他们仍然会设法给下一代产品留下深刻印象。目前来说,Ada Lovelace 和 Hopper 架构提供了出色的性能。
测试系统
AMD Threadripper Pro 测试平台
- CPU AMD Threadripper PRO 5995WX 64 Core
- CPU Cooler Noctua NH-U14S TR4-SP3
- Motherboard Asus Pro WS WRX80E-SAGE SE WIFI
- RAM 8x DDR4-3200 16GB ECC Reg. (128GB total)
- NVIDIA GeForce RTX 4090 24GB
- NVIDIA GeForce RTX 3090 24GB
- Ubuntu 22.04 Linux
- NVIDIA Enroot 3.4
容器化程序来自 NVIDIA NGC
- HPL 2.3 High Performance Linpack tag: nvcr.io/nvidia/hpc-benchmarks:21.4-hpl
- HPCG 3.1 High Performance Conjugate Gradient solver tag: nvcr.io/nvidia/hpc-benchmarks:21.4-hpcg3.1
- NAMD 3.0a11 Molecular Dynamics tag: nvcr.io/hpc/namd:3.0-alpha11
- LAMMPS Molecular Dynamics tag: nvcr.io/hpc/lammps:patch_4May2022
- TensorFlow 1.15.5 ML/AI framework tag: nvcr.io/nvidia/tensorflow:22.09-tf1-py3
- PyTorch 1.13.0a0 ML/AI framework tag: nvcr.io/nvidia/pytorch:22.09-py3
基准测试
下面的图表显示了 RTX 4090 与同样出色的 RTX 3090 相对比的计算性能。值得一提的是,这些是应用程序的初步结果,未针对 Ada Lovelace 架构的新计算级别 SM_89 进行完全优化。
这里也列出一些关于用于运行它们的基准和命令行的详细信息。 虽只包含 RTX 4090 作业运行的一些输出,但是,4090 和 3090 都在同一个系统中测试,即所有结果都是新测试。
HPL (Linpack)
这是为在 NVIDIA GPU 上运行而构建的 HPL Linpack 基准测试。 旨在 A100 和 H100 等高端计算 GPU 上进行测试。 它还设置为多 GPU 多节点使用。 这是用于对 Top500 超级计算机进行排名的标准基准。
它真的不打算在 RTX GPU 上运行! 与计算 GPU 相比,RTX GPU 的双精度 (fp64) 性能非常差。 然而,RTX 上的单精度 (fp32) 性能非常出色。 该基准测试有一个 fp32 版本,名为 HPL-AI。 不幸的是,无法让它与 1 或 2 个 RTX 4090 或 3090 正确融合。
现在将 fp64 HPL 结果包括在内,因为尽管它的性能比 A100 低近 10 倍,但与 16-24 核 CPU 相比,它的性能仍然是可观的! 开发用于 A100 或 H100 的代码的开发人员可以在将代码移动到(更昂贵的)A100 或 H100 之前在 RTX 4090 上进行开发和测试。
command line:
CUDA_VISIBLE_DEVICES=0 mpirun --mca btl smcuda,self -x UCX_TLS=sm,cuda,cuda_copy,cuda_ipc -np 1 hpl.sh --dat ./HPL.dat --cpu-affinity 0 --cpu-cores-per-rank 4 --gpu-affinity 0
4090 output:
2022-10-10 19:58:13.576
================================================================================
T/V N NB P Q Time Gflops
--------------------------------------------------------------------------------
WR03L2L2 48000 288 1 1 62.41 1.183e+03
--------------------------------------------------------------------------------
||Ax-b||_oo/(eps*(||A||_oo*||x||_oo+||b||_oo)*N)= 0.0045393 ...... PASSED
================================================================================
注意:
- 该基准测试大量使用双精度浮点能力,这在 RTX GPU 上大大减少了。
- 超过 tera FLOP 的 fp64 性能令人印象深刻!
https://www.netlib.org/benchmark/hpl/
HPCG
HPCG(High Performance Conjugate Gradients)是一种受内存限制的应用程序,是许多工程“求解器”的典型代表。 是Top500超级计算机榜单的二级排名基准。 由于 GPU 上的高性能内存,此基准测试的 GPU 结果通常远高于高端 CPU。
command line:
mpirun --mca btl smcuda,self -x UCX_TLS=sm,cuda,cuda_copy,cuda_ipc -np 1 hpcg.sh --dat ./hpcg.dat --cpu-affinity 0 --cpu-cores-per-rank 4 --gpu-affinity 0
4090 output:
SpMV = 145.6 GF ( 917.2 GB/s Effective) 145.6 GF_per ( 917.2 GB/s Effective)
SymGS = 181.1 GF (1397.8 GB/s Effective) 181.1 GF_per (1397.8 GB/s Effective)
total = 171.4 GF (1299.6 GB/s Effective) 171.4 GF_per (1299.6 GB/s Effective)
final = 162.2 GF (1230.1 GB/s Effective) 162.2 GF_per (1230.1 GB/s Effective)
注意:
- 预计 4090 和 3090 的 HPCG 结果几乎相同,因为两者的内存性能相似。
https://www.hpcg-benchmark.org/
NAMD
这是分子动力学包NAMD 3.0 alpha 11的GPU版本。性能非常好!
command line:
echo "CUDASOAintegrate on" >> v3-stmv.namd
namd3 +p1 +setcpuaffinity +idlepoll +devices 0 v3-stmv.namd
4090 STMV output:
Info: Benchmark time: 1 CPUs 0.0104954 s/step 8.23218 ns/day 0 MB memory
TIMING: 500 CPU: 6.17736, 0.0105293/step Wall: 6.18515, 0.0104489/step, 8.2688 ns/days, 0 hours remaining, 0.000000 MB of memory in use.
ENERGY: 500 357236.6193 279300.1236 81947.6998 5091.0071 -4504684.2417 381649.5571 0.0000 0.0000 947494.7573 -2451964.4774 298.0115 -3399459.2347 -2443255.3272 297.9991 1256.7666 33.2244 10200288.8725 -42.3066 -11.3685
Notes:
- 与大多数分子动力学应用程序一样,NAMD 具有出色的 GPU 加速功能。 GPU 版本相比 CPU-GPU 版本也有很大的改进。
- 需要将“CUDASOAintegrate on”添加到 NAMD 3 的作业输入文件中。
ApoA1 benchmark (92,224 atoms, periodic, PME)
STMV (virus) benchmark (1,066,628 atoms, periodic, PME)
LAMMPS
command line:
mpirun -n 1 lmp -k on g 1 -sf kk -pk kokkos cuda/aware on neigh full comm device binsize 2.8 -var x 8 -var y 8 -var z 8 -in in.lj
4090 lj output:
Loop time of 5.94622 on 1 procs for 100 steps with 16384000 atoms
Performance: 7265.125 tau/day, 16.817 timesteps/s
100.0% CPU use with 1 MPI tasks x 1 OpenMP threads
注意:
- LAMMPS 是洛斯阿拉莫斯国家实验室开发的另一种流行的分子动力学应用程序。
- LAMMPS 有许多编译选项。 这里使用 NGC 的 NVIDIA 优化容器。
- LAMMPS 性能显示 4090 比 3090 翻了一番!
Cu_u3: bulk Cu lattice 16384000 atoms
lj: 3d Lennard-Jones melt 55296000 atoms
https://download.lammps.org/tars/lammps-10Mar2021.tar.gz
TensorFlow 1.15.5 ResNet50
这是 NVIDIA 维护的 TensorFlow 1系列版本 ,它通常提供比版本 2 更好的性能。基准是训练 100 步的 ResNet 50 层卷积神经网络 (CNN)。 结果是运行步骤中的最高图像每秒值。 FP32 和 FP16 (tensorcore) 也已经运行。
command line:
CUDA_VISIBLE_DEVICES=0 python resnet.py --layers=50 --batch_size=128 --precision=fp16
Notes:
- XLA 没有用于作业运行。
PyTorch 1.13 Transformer
该基准测试使用 PyTorch 1.13 对带有 CUDA 的 Wikitext-2 上的 Transformer 模型的 6 epoch 训练。
command line:
time CUDA_VISIBLE_DEVICES=0 python main.py --cuda --epochs 6 --model Transformer --lr 5 --batch_size 640
Notes:
https://github.com/pytorch/examples/tree/main/word_language_model
结论
最新的 NVIDIA RTX4090 这些初步计算结果看起来非常好,并且比上一代 RTX 3090显着提升了性能!希望使用针对 CUDA 12 编译的代码的结果会更好,它将完全支持 Ada Lovelace 和 Hopper arch GPU。在接下来的几个月里,将会有更多的 RTX 4000 系列和 Pro Axxx-ada 系列 GPU出来。
一个令人惊讶的结果是双精度浮点 (fp64) 在 RTX 4090 上的表现非常出色。fp64 性能并不是 RTX GPU 的突出特点。这些 GPU 的单精度 fp32 通常是 fp64 的 20 倍。但是,RTX 4090 的 fp64 性能与 16-34 核 CPU 具有竞争力。可以用于代码测试和开发,目标是在 A100 和 H100 等高端计算 GPU 上运行。
总体而言,NVIDIA 将连续几代 GPU 的性能提升保持在近一倍的水平。性能的确非常出色!