【发布时间】:2019-09-25 06:46:01
【问题描述】:
我最近设置了一台带有单个 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 负载测试的作者看到的性能的 1/12,而我认为应该是类似的卡(1060 与 1070)。我错过了什么吗?我应该只期望这种水平的性能吗?其他人使用相同的负载测试和类似的卡对性能有何看法? TensorRT 会有帮助吗?
谢谢!
【问题讨论】:
-
你可以根据本指南检查输出:tensorflow.org/guide/using_gpu 吗?应该有使用什么设备的信息。
-
我已经尝试过教程。我的机架有 4 个 Titan Z GPU,一个相当老的处理器,可以达到 200 个样本/秒。它使用所有 4 个 GPU。所以我假设你必须为你的系统编译 Tensorflow 才能获得足够的收益(就像他在教程中所做的那样)。
-
看来您需要正确组合 CUDA 和 Tensorflow 才能获得完整的性能。似乎某些 CUDA 版本存在错误。
-
使用 1 个或 4 个 GPU 没有任何区别。我仍然只能获得 200 个样本/秒。我可以看到消耗的 GPU 内存的差异。无论如何,问题可能出在其他地方。也许是硬盘或CPU?在相应的教程 (tensorflow.org/tutorials/images/deep_cnn) 中,他们在 Tesla K40c 上获得了 400 个样本
标签: python tensorflow