Если вы используете несколько GPU для тренировки модели, рекомендуется использовать встроенный метод fit, который является более удобным и требует добавления всего двух строк кода.
В ноутбуке Colab: перейдите в «Изменить» → «Настройки ноутбука» → «Аппаратный ускоритель» и выберите GPU.
Примечание: следующий код может быть выполнен только на Colab.
Вы можете протестировать эффект с помощью следующей ссылки Colab «tf_многоGPU»:
https://colab.research.google.com/drive/1j2kp_t0S_cofExSN7IyJ4QtMscbVlXU-
Краткое описание процесса MirroredStrategy:
%tensorflow_version 2.x
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras import *
# В этом месте в Colab используется один GPU для имитации двух логических GPU для многоGPU тренировки
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
# Настройка двух логических GPU для имитации многоGPU тренировки
try:
tf.config.experimental.set_virtual_device_configuration(gpus[0],
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024),
tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
print(len(gpus), "Physical GPU,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
print(e)
MAX_LEN = 300
BATCH_SIZE = 32
(x_train,y_train),(x_test,y_test) = datasets.reuters.load_data()
x_train = preprocessing.sequence.pad_sequences(x_train,maxlen=MAX_LEN)
x_test = preprocessing.sequence.pad_sequences(x_test,maxlen=MAX_LEN)
MAX_WORDS = x_train.max()+1
CAT_NUM = y_train.max()+1
ds_train = tf.data.Dataset.from_tensor_slices((x_train,y_train)) \
.shuffle(buffer_size = 1000).batch(BATCH_SIZE) \
.prefetch(tf.data.experimental.AUTOTUNE).cache()
ds_test = tf.data.Dataset.from_tensor_slices((x_test,y_test)) \
.shuffle(buffer_size = 1000).batch(BATCH_SIZE) \
.prefetch(tf.data.experimental.AUTOTUNE).cache()
tf.keras.backend.clear_session()
def create_model():
model = models.Sequential()
model.add(layers.Embedding(MAX_WORDS,7,input_length=MAX_LEN))
model.add(layers.Conv1D(filters = 64,kernel_size = 5,activation = "relu"))
model.add(layers.MaxPool1D(2))
model.add(layers.Conv1D(filters = 32,kernel_size = 3,activation = "relu"))
model.add(layers.MaxPool1D(2))
model.add(layers.Flatten())
model.add(layers.Dense(CAT_NUM,activation = "softmax"))
return(model)
def compile_model(model):
model.compile(optimizer=optimizers.Nadam(),
loss=losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=[metrics.SparseCategoricalAccuracy(),metrics.SparseTopKCategoricalAccuracy(5)])
return(model)
# Добавьте следующие две строки кода
strategy = tf.distribute.MirroredStrategy()
with strategy.scope():
model = create_model()
model.summary()
model = compile_model(model)
history = model.fit(ds_train,validation_data = ds_test,epochs = 10)
``` flatten (Flatten) (None, 2336) 0
_________________________________________________________________
dense (Dense) (None, 46) 107502
=================================================================
Всего параметров: 332 856
Обучаемых параметров: 332 856
Необучаемых параметров: 0
_________________________________________________________________
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
Обучение в течение 281 шага, проверка в течение 71 шага
Эпоха 1/10
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:CPU:0 затем передать ('/job:localhost/replica:0/task:0/device:CPU:0',).
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
ИНФОРМАЦИЯ:tensorflow:Уменьшить до /job:localhost/replica:0/task:0/device:GPU:0 затем передать ('/job:localhost/replica:0/task:0/device:GPU:0', '/job:localhost/replica:0/task:0/device:GPU:1').
281/281 [==============================] - 15s 53ms/step - потеря: 2.0270 - sparse_categorical_accuracy: 0.4653 - sparse_top_k_categorical_accuracy: 0.7481 - val_loss: 1.7517 - val_sparse_categorical_accuracy: 0.5481 - val_sparse_top_k_categorical_accuracy: 0.7578
Эпоха 2/10
281/281 [==============================] - 4s 14ms/step - потеря: 1.5206 -
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )