如何使TensorFlow使用100%的GPU?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使TensorFlow使用100%的GPU?相关的知识,希望对你有一定的参考价值。

我有一台具有RTX 2060 GPU的笔记本电脑,我正在使用Keras和TF 2在其上训练LSTM。我也在监视nvidia-smi的gpu使用情况,并且我注意到jupyter笔记本和TF最多使用35%,通常gpu的使用率为10-25%。

在当前条件下,训练此模型花费了7个多小时,我想知道我做错了什么还是Keras和TF的局限性?

我的nvidia-smi输出:

Sun Nov  3 00:07:37 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 430.26       Driver Version: 430.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| 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 RTX 2060    Off  | 00000000:01:00.0  On |                  N/A |
| N/A   51C    P3    22W /  N/A |    834MiB /  5931MiB |     24%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1032      G   /usr/lib/xorg/Xorg                           330MiB |
|    0      1251      G   /usr/bin/gnome-shell                         333MiB |
|    0      1758      G   ...equest-channel-token=622209288718607755   121MiB |
|    0      5086      G   ...uest-channel-token=12207632792533837012    47MiB |
+-----------------------------------------------------------------------------+

我的LSTM:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import LSTM
from tensorflow.keras.layers import Dropout

regressor = Sequential()

regressor.add(LSTM(units = 180, return_sequences = True, input_shape = (X_train.shape[1], 3)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 180))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 10, batch_size = 32, callbacks=[cp_callback])
答案

TensorFlow会自动通过CUDA和cuDNN来优化GPU资源分配,前提是后者已正确安装。您看到的使用情况统计信息主要是内存/计算资源“活动”的统计信息,不一定是实用程序(执行);参见this answer。您的实用程序“仅”为25%是一件好事-否则,如果您实质上增加了模型大小(按原样这不是很大),则应该OOM。

要增加使用量,请增加批处理大小,模型大小,或增加计算的parallelism的任何方法;请注意,使模型更深将增加GPU的内存实用程序,但远不及GPU的计算实用程序。

也请考虑使用CuDNNLSTM代替LSTM,它可以运行10x更快并使用less GPU内存(由算法提供),但具有更多的计算实用性。最后,在Conv1D的第一层插入strides > 1将通过减小输入大小来显着提高火车速度,而不必损害性能(实际上可以改善它)。

另一答案

tensorflow或jupyter中没有GPU使用限制。问题是您无法加载GPU。通常,这意味着您的数据加载器比GPU处理数据的速度慢。尝试分析您的工作流程,就会发现瓶颈。

以上是关于如何使TensorFlow使用100%的GPU?的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow不使用nvidia gpu,而是CPU利用率为100%

如何检查keras tensorflow后端是GPU还是CPU版本? [复制]

是否有 R 命令使 Keras Tensorflow-GPU 在 CPU 上运行?

Keras 不使用 GPU - 如何排除故障?

TensorFlow GPU内存

keras-gpu的安装与配置