如何在具有tensorflow2和keras的多GPU上训练模型?

航空兵

我有一个要在多个GPU上训练的LSTM模型。我将代码转换为执行此操作,然后nvidia-smi我可以看到它正在使用所有GPU的所有内存,并且每个GPU都使用了大约40%的BUT,估计每批的训练时间几乎与1 gpu相同。

有人可以引导我并告诉我如何在多个GPU上正确训练吗?

我的代码:

import tensorflow as tf

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

import os
from tensorflow.keras.callbacks import ModelCheckpoint



checkpoint_path = "./model/"
checkpoint_dir = os.path.dirname(checkpoint_path)
cp_callback = ModelCheckpoint(filepath=checkpoint_path, save_freq= 'epoch', verbose=1 )

# NNET - LSTM
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
    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))
    regressor.add(Dropout(0.2))

    regressor.add(Dense(units = 4))

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

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

斯里哈里·汉巴瓦迪(Srihari Humbarwadi)

假设您batch_size使用的是单个GPU,则N每批花费的时间为X秒。

您可以通过测量模型收敛所需的时间来衡量训练速度,但是您必须确保正确地batch_size使用2个GPU,因为2个GPU的内存是单个GPU的两倍,因此您应该线性缩放batch_size2N可能令人着迷的是,该模型X每批次仍需要几秒钟,但是您应该知道,现在您的模型正在2N每批次中查看样本,并且可以更快地收敛,因为现在您可以以更高的学习率进行训练

如果两个GPU的内存都被40%占用并且处于使用状态,则可能有多种原因

  • 该模型太简单了,您不需要所有的计算。
  • batch_size小,你的GPU可以处理更大batch_size
  • CPU是瓶颈,因此使GPU等待数据准备就绪,当您看到GPU利用率达到峰值时,可能就是这种情况
  • 您需要编写更好的性能数据管道。您可以在此处找到有关有效数据输入管道的更多信息-https: //www.tensorflow.org/guide/data_performance

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在本地 rtx gpu 的 tpu 上训练 keras 模型

如何在tensorflow中使用keras.utils.Sequence数据生成器和tf.distribute.MirroredStrategy进行多GPU模型训练?

如何在Tensorflow 2.2中训练具有多个输入的Keras模型?

如何让Keras在特定GPU上训练模型?

如何使用 Tensorflow 2/Keras 保存和繼續訓練具有多個模型部分的 GAN

如何在Keras中仅具有嵌入层的模型训练模型

keras tensorflow2获得训练数据的结果

如何在java中训练keras(tensorflow)模型?

如何在Keras中加快具有自定义损失功能的模型的训练?

如何在具有Tensorflow和Keras的项目上使用PyInstaller修复'AttributeError'?

如何训练具有一个输出和多个y_true的keras模型?

如何在具有tensorflow v2.x后端的keras中加载具有tensorflow v1.x后端的keras模型?

Keras / Tensorflow:循环或使用Process在同一GPU上训练多个模型

Laravel:如何在具有多对多模型关系的模型上添加条件子句?

如何在 Cityscapes 上训练 TensorFlow 的 deeplab 模型?

如何分割训练和测试数据-Tensorflow上的Keras

如何在预训练的TensorFlow 2模型中访问和可视化权重?

Tensorflow上的多GPU训练比单GPU慢

如何在2个GPU上运行Flow训练?

如何在Keras中找到预训练的InceptionResNetV2模型不同层中的激活形状-Tensorflow 2.0

我可以训练具有复杂输入/输出的Tensorflow keras模型吗?

存在GPU的情况下,如何在TensorFlow中的单个脚本中训练多个模型?

Tensorflow:您如何在模型训练期间实时监控GPU性能?

如何在TensorFlow中使用多个GPU加快RNN模型的训练?

Tensorflow2 Keras 调整单位和激活函数

如何在具有数据并行性的多个GPU上运行Tensorflow Estimator

我如何在Keras中创建模型并使用Tensorflow进行训练?

在TensorFlow中进行多GPU训练有什么优势?

具有Keras错误的Tensorflow-gpu