我有一个要在多个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])
假设您batch_size
使用的是单个GPU,则N
每批花费的时间为X
秒。
您可以通过测量模型收敛所需的时间来衡量训练速度,但是您必须确保正确地batch_size
使用2个GPU,因为2个GPU的内存是单个GPU的两倍,因此您应该线性缩放batch_size
以2N
。可能令人着迷的是,该模型X
每批次仍需要几秒钟,但是您应该知道,现在您的模型正在2N
每批次中查看样本,并且可以更快地收敛,因为现在您可以以更高的学习率进行训练。
如果两个GPU的内存都被40%
占用并且处于使用状态,则可能有多种原因
batch_size
小,你的GPU可以处理更大batch_size
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句