Google Colab ist sehr langsam im Vergleich zu meinem PC
Ich habe vor kurzem begonnen, die Verwendung von Google Colab, und wollte zu dem Zug meine erste Convolutional NN. Ich importierte die Bilder aus meinem Google-Laufwerk Dank für die Antwort, die ich bekam hier.
Dann klebte ich mein code zum erstellen der CNN in Colab und den Prozess gestartet hat.
Hier ist der vollständige code:
Teil 1: Einrichtung Colab zu importieren Bild von meiner Festplatte
(Teil 1 kopiert von hier wie es funktionierte, wie exptected für mich
Schritt 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
Schritt 2:
from google.colab import auth
auth.authenticate_user()
Schritt 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} < /dev/null 2>&1 | grep URL
vcode = getpass.getpass()
!echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret}
Schritt 4:
!mkdir -p drive
!google-drive-ocamlfuse drive
Schritt 5:
print('Files in Drive:')
!ls drive/
Teil 2: Kopieren und einfügen meine CNN
Habe ich diese CNN mit tutorials aus ein Udemy-Kurs. Es nutzt keras mit tensorflow als backend.
Der Einfachheit halber habe ich hochgeladen, die eine wirklich einfache version, das ist viel genug, um zu zeigen, dass meine Probleme
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
Parameter
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())
ANN
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
bildvorverarbeitung
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))
Jetzt kommt mein Problem
Zuerst, die Ausbildung, die ich verwendet, ist eine Datenbank mit 10000 Hund und Katze Bilder von verschiedenen Auflösungen. (8000 training_set, 2000 test_set)
Ich diese lief CNN auf Google Colab (mit GPU-Unterstützung aktiviert ist) und auf meinem PC (tensorflow-gpu auf GTX-1060)
Dies ist ein Zwischenergebnis von meinem PC:
Epoch 2/50
63/125 [==============>...............] - ETA: 2s - loss: 0.6382 - acc: 0.6520
Und diese von Colab:
Epoch 1/50
13/125 [==>...........................] - ETA: 1:00:51 - loss: 0.7265 - acc: 0.4916
Warum ist Google Colab so langsam auch in meinem Fall?
Ich persönlich vermute, dass ein Engpass bestehend aus ziehen und dann Lesen die Bilder von meiner Festplatte, aber ich weiß nicht, wie man dieses Problem lösen andere als die Wahl einer anderen Methode zum importieren der Datenbank.
- Ja, ich denke auch, dass dies geschieht, weil der Netzwerk-overhead, weil der Zugriff auf Daten aus dem Laufwerk. Sie können versuchen, kopieren Sie Ihre Daten von Laufwerk zu colab-Instanz, so dass es lokal verfügbar.
- Ich habe das gleiche problem mit colab, hast du eine Lösung finden? Würde es Ihnen etwas ausmachen sharing eine colab-notebook für die Leute Lesen deine Frage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Feng hat bereits darauf hingewiesen, Lesen von Dateien von der Festplatte ist sehr langsam. Diese tutorial schlägt mit einer Art memory-mapped-Datei, wie im HDF5 oder lmdb, um zu überwinden dieses Problem. Diese Art der I\O-Operationen viel schneller sind (für eine vollständige Erklärung auf der Geschwindigkeitsvorteil der im HDF5-format finden Sie unter diese).
Es ist sehr langsam zu Lesen einer Datei aus google-Laufwerke.
Ich habe zum Beispiel eine große Datei(39GB).
Kostet es mehr als 10min, wenn ich exec '!cp-Laufwerk/groß.Datei /content/'.
Nachdem ich teilte meine Datei, und hab die url von google drive. Es kostet 5 min, wenn ich exec '! wget -c -O groß.Datei http://share.url.from.drive'. Download-Geschwindigkeit kann bis zu 130MB/s.
!df -h
Ich habe die gleiche Frage, warum die GPU colab scheint mindestens genauso lang wie mein lokaler pc also kann ich nicht wirklich helfen da. Aber mit, dass gesagt wird, wenn Sie versuchen, verwenden Sie Ihre Daten an einem Ort, die ich gefunden habe, wird der folgende Prozess deutlich schneller als nur mit der upload-Funktion im colab.
1.) montieren Sie google drive
2.) erstellen Sie einen Ordner außerhalb der google drive-Ordner, den Sie möchten, dass Ihre Daten gespeichert werden, in
3.) mit dem folgenden Befehl kopieren Sie den Inhalt von Ihrem gewünschten Ordner in google drive, um den Ordner, den Sie erstellt
(diese wird referenziert von ein weiterer stackoverflow Antwort, die ich verwendet, um zu einer Lösung zu einem ähnlichen Problem )
4.) Jetzt haben Sie Ihre Daten zur Verfügung, die Sie im Pfad "/path/to/the_folder/Sie erstellt"
ln -s
nicht alles kopieren, es schafft ein symlink ist, und alle Daten unter dem neuen Pfad wird immer noch der Zugriff von Google Drive.Können Sie laden Sie Ihre Daten als numpy array (.npy-format) und flow-Methode anstelle von flow_from_directory. Colab bietet 25 GB RAM ,also auch für big data-sets können Sie laden Sie Ihre gesamten Daten in den Speicher. Die Geschwindigkeit wurde festgestellt, dass rund 2.5 x, mit den gleichen Daten generation tritt!!!
(Sogar schneller, als Daten gespeichert, die im colab lokalen Festplatte ich.e '/content' oder google drive.
Seit colab bietet nur eine single-core CPU (2 threads pro Kern), scheint es einen Engpass bei CPU-GPU-Datentransfers (sagen K80 oder T4 GPU), vor allem, wenn Sie Daten-generator für schwere Vorverarbeitung oder Daten-augmentation.
Sie können auch versuchen Sie es mit verschiedenen Werten für Parameter wie 'Arbeitnehmer', 'use_multiprocessing', 'max_queue_size' in fit_generator Methode ...