Я использую Keras на компьютере Windows 10 с графическим процессором. Я перешел с Tensorflow 1 на Tensorflow 2 и теперь чувствую, что примерка выполняется намного медленнее, и надеюсь на ваш совет.
Я проверяю, видит ли Tensorflow GPU со следующими утверждениями:
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
K._get_available_gpus()
дает ответ
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 17171012743200670970
, name: "/device:GPU:0"
device_type: "GPU"
memory_limit: 6682068255
locality {
bus_id: 1
links {
}
}
incarnation: 5711519511292622685
physical_device_desc: "device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1"
Итак, это, кажется, указывает на то, что графический процессор работает?
Я тренирую модифицированную версию ResNet50 с до 10 изображений (257x257x2) в качестве входных данных , Он имеет 4.3M обучаемых параметров. Тренировка очень медленная (может быть несколько дней). Часть кода показана здесь:
import os,cv2,sys
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import scipy.io
import h5py
import time
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.models import load_model
from tensorflow.python.keras import optimizers
from buildModelReduced_test import buildModelReduced
from tensorflow.keras.utils import plot_model
K.set_image_data_format('channels_last') #set_image_dim_ordering('tf')
sys.setrecursionlimit(10000)
# Check that gpu is running
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
K._get_available_gpus()
# Generator to read one batch at a time for large datasets
def imageLoaderLargeFiles(data_path, batch_size, nStars, nDatasets=0):
---
---
---
yield(train_in,train_target
# Repository for parameters
nStars = 10
img_rows = 257
img_cols = 257
bit_depth = 16
channels = 2
num_epochs = 1
batch_size = 8
data_path_train = 'E:/TomoA/large/train2'
data_path_validate = 'E:/TomoA/large/validate2'
nDatasets_train = 33000
nDatasets_validate = 8000
nBatches_train = nDatasets_train//(batch_size)
validation_steps = nDatasets_validate//(batch_size)
output_width = 35;
runSize = 'large'
restartFile = ‘’
#%% Train model
if restartFile == '':
model = buildModelReduced(nStars,img_rows, img_cols, output_width,\
batch_size=batch_size,channels=channels, use_l2_regularizer=True)
model.summary()
plot_model(model, to_file='model.png', show_shapes=True)
all_mae = []
adam=optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None,
decay=0.0, amsgrad=False)
model.compile(optimizer='adam',loss='MSE',metrics=['mae'])
history = model.fit_generator(imageLoaderLargeFiles(data_path_train,batch_size,nStars,nDatasets_train),
steps_per_epoch=nBatches_train,epochs=num_epochs,
validation_data=imageLoaderLargeFiles(data_path_validate,batch_size,nStars,nDatasets_validate),
validation_steps=validation_steps,verbose=1,workers=0,
use_multiprocessing=False, shuffle=False)
print('\nSaving model...\n')
if runSize == 'large':
model.save(runID + '_' + runSize + '.h5')
Когда я открываю диспетчер задач Windows и смотрю на графический процессор, я вижу, что выделение памяти составляет 6,5 ГБ, копирование менее 1% и CUDA около 4%. Активность диска низкая, я читаю кэш из 1000 наборов данных одновременно с SSD. Смотрите скриншот ниже. Я думаю, что это показывает, что GPU не работает хорошо. Загрузка процессора составляет 19%. Я использую пакет размером 8, если я go выше, я получаю ошибку исчерпания ресурса.
Есть идеи, как поступить или где найти дополнительную информацию? Есть какие-то практические правила о том, как настроить свой бег, чтобы хорошо использовать графический процессор?