Я запускаю обучение переносу (keras и Tensorflow) с использованием алгоритма Inception Resnet V2, на GCP, с 4 графическими процессорами Nvidia K80, и CPU с 128 ГБ оперативной памяти и 80 ГБ постоянного диска. Данные обучения составляют около 83000 изображений размером 512 x 512, а проверка - около 20000 изображений. Я использую удаленную сессию Pycharm SSH. Я обнаружил 2 проблемы:
- Генератор подгонки Keras выдавал ошибку, из-за ошибки Подушки при чтении файла изображения. Тот же файл будет открыт с помощью Pillow (та же версия на GCP, что и на моей локальной машине) или даже openCV локально, но не на GCP. Я часами пытался найти причину, но не смог, поэтому в итоге удалил проблемные файлы. есть идеи, почему это произошло?
Что более важно, даже после замораживания всех слоев 1 эпоха занимала больше часа. Я подозревал, что проблема с Подушкой под капотом. Итак, я написал фрагмент кода для его проверки. Код приведен ниже:
import os
import glob
import timeit
from PIL import Image as pil_image
from tqdm import tqdm
# SOME CODE HERE FOR TRAINING DIRECTORY SPECIFICATION
def get_file_list(ip_pth):
# read all the file names in list
pth_aud = []
for path, subdirs_categ, files in os.walk(ip_pth):
if len(files) != 0:
a = glob.glob(path + "//*.png")
pth_aud = pth_aud + a
return pth_aud
def get_files(ip_path):
pth_aud = glob.glob(ip_path + "//*.png")
return pth_aud
def check_img(img_pth,cnt):
img = None
# print('processing '+ img_pth )
try:
img = pil_image.open(img_pth) # open the image file
img.verify() # verify that it is, in fact an image
cnt = cnt + 1
except (IOError, SyntaxError) as e:
cnt = cnt -1
print('Bad file:', img_pth)
finally:
if img is not None:
img.close()
return
tr_lst = get_file_list(train_dir)
subdir = os.listdir(train_dir)
print(" There are " + str(len(tr_lst)) + " files in training dir: " + train_dir)
# get each file in respective folder
for each_dir in subdir:
pt = train_dir+ "//" + each_dir
tr_lst_each = get_files(pt)
cnt = 0
for pth in tqdm(tr_lst_each):
check_img(pth,cnt)
print("sucessfully opened and closed " + str(len(tr_lst_each)) + " files in train subir " +
each_dir)
Итак, приведенный выше код проходит через 13 подпапок в моих обучающих данных, и в целом потребовалось 5 минут, чтобы прочитать и проверить 83000 изображений со средней итерацией / секунду> 330на моем ПК. Тот же код на удаленной машине, занимает около 1 часа и работает со скоростью 10-15 итераций в секунду. Почему это случилось? У моей машины SSD, а постоянный диск на GCP не SSD. Может ли это вызвать такую огромную разницу?
Любая помощь с благодарностью.
Спасибо
Седьма