如何使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版本? [复制]