Google Colab es muy lento en comparación con mi PC

Recientemente comencé a usar Google Colab y quería entrenar mi primer NN convolucional. Importé las imágenes de mi Google Drive gracias a la respuesta que obtuve aquí .

Luego pegué mi código para crear la CNN en Colab y comencé el proceso. Aquí está el código completo:

Parte 1: Configuración de Colab para importar imágenes desde mi Drive

(la parte 1 se copia desde aquí, ya que funcionó como se esperaba)

Paso 1:

!apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse 

Paso 2:

 from google.colab import auth auth.authenticate_user() 

Paso 3:

 from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() import getpass !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} &1 | grep URL vcode = getpass.getpass() !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} 

Etapa 4:

 !mkdir -p drive !google-drive-ocamlfuse drive 

Paso 5:

 print('Files in Drive:') !ls drive/ 

Parte 2: Copia pegando mi CNN

Creé esta CNN con tutoriales de un curso de Udemy. Utiliza keras con tensorflow como backend. En aras de la simplicidad, cargué una versión realmente simple, que es suficiente para mostrar mis problemas

 from keras.models import Sequential from keras.layers import Conv2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense from keras.layers import Dropout from keras.optimizers import Adam from keras.preprocessing.image import ImageDataGenerator 

parámetros

 imageSize=32 batchSize=64 epochAmount=50 

CNN

 classifier=Sequential() classifier.add(Conv2D(32, (3, 3), input_shape = (imageSize, imageSize, 3), activation = 'relu')) #convolutional layer classifier.add(MaxPooling2D(pool_size = (2, 2))) #pooling layer classifier.add(Flatten()) 

ANA

 classifier.add(Dense(units=64, activation='relu')) #hidden layer classifier.add(Dense(units=1, activation='sigmoid')) #output layer classifier.compile(optimizer = "adam", loss = 'binary_crossentropy', metrics = ['accuracy']) #training method 

preprocesamiento de imagen

 train_datagen = ImageDataGenerator(rescale = 1./255, shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True) test_datagen = ImageDataGenerator(rescale = 1./255) training_set = train_datagen.flow_from_directory('drive/School/sem-2-2018/BSP2/UdemyCourse/CNN/dataset/training_set', target_size = (imageSize, imageSize), batch_size = batchSize, class_mode = 'binary') test_set = test_datagen.flow_from_directory('drive/School/sem-2-2018/BSP2/UdemyCourse/CNN/dataset/test_set', target_size = (imageSize, imageSize), batch_size = batchSize, class_mode = 'binary') classifier.fit_generator(training_set, steps_per_epoch = (8000//batchSize), epochs = epochAmount, validation_data = test_set, validation_steps = (2000//batchSize)) 

Ahora viene mi problema

En primer lugar, el conjunto de entrenamiento que utilicé es una base de datos con 10000 imágenes de perros y gatos de diferentes resoluciones. (8000 training_set, 2000 test_set)

Ejecuté este CNN en Google Colab (con el soporte de GPU habilitado) y en mi PC (tensorflow-gpu en GTX 1060)

Este es un resultado intermedio de mi PC:

 Epoch 2/50 63/125 [==============>...............] - ETA: 2s - loss: 0.6382 - acc: 0.6520 

Y esto desde Colab:

 Epoch 1/50 13/125 [==>...........................] - ETA: 1:00:51 - loss: 0.7265 - acc: 0.4916 

¿Por qué Google Colab es tan lento en mi caso?

Personalmente, sospecho que hay un cuello de botella que consiste en extraer y luego leer las imágenes de mi Drive, pero no sé cómo resolver esto, aparte de elegir un método diferente para importar la base de datos.

Es muy lento para leer el archivo de las unidades de Google.

Por ejemplo, tengo un archivo grande (39GB).

Costó más de 10min cuando ejecuté ‘! Cp drive / big.file / content /’.

Después de que compartí mi archivo, y obtuve la url de google drive. ¡Costó 5 min cuando lo ejecuté! wget -c -O big.file http://share.url.from.drive ‘. La velocidad de descarga puede alcanzar hasta 130MB / s.

Como @ Feng ya ha señalado, la lectura de archivos desde el disco es muy lenta. Este tutorial sugiere usar algún tipo de archivo de memoria mapeada como hdf5 o lmbd para superar este problema. De esta manera, las operaciones I \ O son mucho más rápidas (para una explicación completa sobre la ganancia de velocidad del formato hdf5, vea esto ).