我最近用一张 NVIDIA GeForce GTX 1060 6GB 卡设置了一台 Ubuntu 19.04 机器。这是我第一次在 Linux 中使用所有深度学习的东西。我关注了几个不同的指导博客,以获得我认为是功能性的 CUDA/Python 环境。我的下一步是运行一些示例“大型作业”并验证我是否获得了预期的性能。
我看到了这个链接 - https://medium.com/@andriylazorenko/tensorflow-performance-test-cpu-vs-gpu-79fcd39170c。它似乎有示例/教程代码,可以锻炼我的系统,也有一些基准性能统计数据。
当我按照 tutorials/image/cifar10 中的指示运行 python cifar10_train.py 时,我看到以下内容:
Every 1.0s: nvidia-smi prospector: Wed Sep 25 06:33:56 2019
Wed Sep 25 06:33:56 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.87.00 Driver Version: 418.87.00 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 106... On | 00000000:41:00.0 Off | N/A |
| 33% 33C P2 31W / 120W | 6034MiB / 6075MiB | 6% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 101339 C python 6023MiB |
+-----------------------------------------------------------------------------+
所以看起来作业正在 GPU 上运行并使用所有可用内存。但是,此测试还固定了我的 Threadripper 1920X 的所有 24 个内核。 GPU 温度仅增加几度,而风扇从未真正超过 33%。 python 脚本的一些相关输出:
2019-09-25 06:33:30.860034: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 5702 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:41:00.0, compute capability: 6.1)
2019-09-25 06:33:30.862049: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55f63af4ce80 executing computations on platform CUDA. Devices:
2019-09-25 06:33:30.862071: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): GeForce GTX 1060 6GB, Compute Capability 6.1
2019-09-25 06:33:30.951617: W tensorflow/compiler/jit/mark_for_compilation_pass.cc:1412] (One-time warning): Not using XLA:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set. If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU. To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.
I0925 06:33:31.438272 140501771114304 session_manager.py:500] Running local_init_op.
I0925 06:33:31.456041 140501771114304 session_manager.py:502] Done running local_init_op.
I0925 06:33:31.804769 140501771114304 basic_session_run_hooks.py:606] Saving checkpoints for 0 into /tmp/cifar10_train/model.ckpt.
2019-09-25 06:33:32.217337: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10
2019-09-25 06:33:32.521519: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-09-25 06:33:33.481558: step 0, loss = 4.68 (453.2 examples/sec; 0.282 sec/batch)
2019-09-25 06:33:36.138869: step 10, loss = 4.59 (481.7 examples/sec; 0.266 sec/batch)
2019-09-25 06:33:38.594918: step 20, loss = 4.39 (521.2 examples/sec; 0.246 sec/batch)
2019-09-25 06:33:41.108821: step 30, loss = 4.49 (509.2 examples/sec; 0.251 sec/batch)
2019-09-25 06:33:43.613224: step 40, loss = 4.40 (511.1 examples/sec; 0.250 sec/batch)
2019-09-25 06:33:46.074761: step 50, loss = 4.36 (520.0 examples/sec; 0.246 sec/batch)
2019-09-25 06:33:48.577182: step 60, loss = 4.07 (511.5 examples/sec; 0.250 sec/batch)
2019-09-25 06:33:51.072065: step 70, loss = 4.19 (513.1 examples/sec; 0.249 sec/batch)
2019-09-25 06:33:53.582682: step 80, loss = 4.14 (509.8 examples/sec; 0.251 sec/batch)
2019-09-25 06:33:55.993107: step 90, loss = 4.14 (531.0 examples/sec; 0.241 sec/batch)
我第一次尝试这个时遇到了一些安装问题,必须重新安装所有东西才能让它看到 GPU。但是,从上面的输出和 nvidia-smi 的输出来看,测试显然是在使用 GPU。然而,当我查看博文作者在使用单张 1070 卡时每秒获得的示例时,他声称他获得了超过 6,000,这是我所看到的 12 倍!
我的问题是:
1) 根据我的硬件(32MB RAM,6GB VRAM),我是否从该测试中获得了预期的性能?
2) 我是否应该期望此测试也能最大限度地发挥我的所有 24 个 Threadripper 核心并使 CPU 几乎达到 68C 的最高温度?
3) 我可以运行更好的验证测试吗?
我希望确保我的系统设置正确,如果没有正确设置,我应该如何追踪任何瓶颈或错误配置。
PS - 我还注意到一种叫做 Tensor RT 的东西。这如何适应性能图?
感谢 RaJa 的回复。我从您发送的链接运行了第一个测试,就像我在上面运行的 TensorFlow 负载测试的输出一样,它表明它识别并正在使用 GPU:
2019-09-25 07:55:24.868796: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-09-25 07:55:24.989039: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1405] Found device 0 with properties:
name: GeForce GTX 1060 6GB major: 6 minor: 1 memoryClockRate(GHz): 1.7085
pciBusID: 0000:41:00.0
totalMemory: 5.93GiB freeMemory: 5.86GiB
2019-09-25 07:55:24.989066: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1484] Adding visible gpu devices: 0
2019-09-25 07:55:25.302006: I tensorflow/core/common_runtime/gpu/gpu_device.cc:965] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-09-25 07:55:25.302044: I tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0
2019-09-25 07:55:25.302050: I tensorflow/core/common_runtime/gpu/gpu_device.cc:984] 0: N
2019-09-25 07:55:25.302169: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1097] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 5640 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:41:00.0, compute capability: 6.1)
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:41:00.0, compute capability: 6.1
2019-09-25 07:55:25.360593: I tensorflow/core/common_runtime/direct_session.cc:288] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: GeForce GTX 1060 6GB, pci bus id: 0000:41:00.0, compute capability: 6.1
MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
2019-09-25 07:55:25.361267: I tensorflow/core/common_runtime/placer.cc:935] MatMul: (MatMul)/job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-09-25 07:55:25.361289: I tensorflow/core/common_runtime/placer.cc:935] a: (Const)/job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2019-09-25 07:55:25.361302: I tensorflow/core/common_runtime/placer.cc:935] b: (Const)/job:localhost/replica:0/task:0/device:GPU:0
[[22. 28.]
[49. 64.]]
我不太关心它是否识别 GPU 并正在使用它,而更关心它是否正在最大化它对 GPU 的使用。看我上面的3个问题。我最担心的事实是,我看到的性能只有 TensorFlow 负载测试作者在我认为应该是类似卡(1060 对 1070)时看到的性能的 1/12。我错过了什么吗?我应该只期望这种性能水平吗?使用相同的负载测试和类似的卡,其他人对性能有何看法? TensorRT 有帮助吗?
谢谢!
请您参考如下方法:
所以我找到了原因或更好的检查。官方的 cifar10-test 有点问题,因为 tensorflow-repository 中已经存在问题。
我在这里找到了一个更好的工作示例:multi-gpu example
只需使用 python3 multigpu_cnn.py 运行文件并观察每秒的样本数。然后你可以更改文件中的gpus数量并再次检查。
我的统计数据(4 个 Titan Z):
- 2 个 GPU -> 8800 个样本/秒
- 4 个 GPU -> 15500 个样本/秒
检查 nvidia-smi 显示最后一个示例的所有 GPU 负载为 100%。
