Seite 1 von 1

Tensorflow train speed mit mehreren GPU´s

Verfasst: Montag 4. Januar 2021, 17:55
von Itech
Ich habe derzeit ein Problem mit der Geschwindigkeit des Trainings eines neuen Tensorflow-Modells. Eigentlich bin ich davon ausgegangen, dass sich die Geschwindigkeit des Trainings deutlich erhöht, wenn ich mehr als eine GPU für das Training verwende. Ich habe jedoch herausgefunden, dass dies nicht der Fall ist. Nach mehreren Tests lokal und in der Google Cloud bin ich langsam ratlos, wie ich die Geschwindigkeit deutlich erhöhen kann. Vielleicht hat ja jemand einen Tipp, wie ich das Training beschleunigen kann. Derzeit werden knapp über 10.000 Bilder mit einer Bildgröße von 628 x 628 trainiert. Das ganze geschieht mit yolov3.

Lokale Umgebung:

absl-py==0.11.0
astor==0.8.1
cycler==0.10.0
gast==0.4.0
grpcio==1.34.0
h5py==2.10.0
imageai==2.1.5
importlib-metadata==2.1.1
Keras==2.2.4
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.1.0
Markdown==3.2.2
matplotlib==3.0.3
mock==3.0.5
numpy==1.18.5
opencv-python==4.2.0.32
Pillow==7.2.0
protobuf==3.14.0
pyparsing==2.4.7
python-dateutil==2.8.1
PyYAML==5.3.1
scipy==1.4.1
six==1.15.0
tensorboard==1.12.2
tensorflow-estimator==1.13.0
tensorflow-gpu==1.12.0
termcolor==1.1.0
Werkzeug==1.0.1
zipp==1.2.0

Ryzen 5 3600, Nvidia 1060 (6 GB), 50 GB RAM


Cloud Umgebung:

absl-py==0.11.0
astor==0.8.1
cycler==0.10.0
gast==0.4.0
grpcio==1.34.0
h5py==2.10.0
imageai==2.1.5
importlib-metadata==2.1.1
Keras==2.2.4
Keras-Applications==1.0.8
Keras-Preprocessing==1.1.2
kiwisolver==1.1.0
Markdown==3.2.2
matplotlib==3.0.3
mock==3.0.5
numpy==1.18.5
opencv-python==4.2.0.32
Pillow==7.2.0
protobuf==3.14.0
pyparsing==2.4.7
python-dateutil==2.8.1
PyYAML==5.3.1
scipy==1.4.1
six==1.15.0
tensorboard==1.12.2
tensorflow-estimator==1.13.0
tensorflow-gpu==1.12.0
termcolor==1.1.0
Werkzeug==1.0.1
zipp==1.2.0

16 vCPU, 60 GB RAM, 4 x NVIDIA Tesla T4


Meine Zeiten pro Epoche:

1x Nvidia 1060 with a batch size of 4 = 2,97 hours
1x Tesla T4 with a batch size of 12 = 1,19 hours
2x Tesla T4 with a batch size of 12 = 3,37 hours
2x Tesla T4 with a batch size of 24 = 3,37 hours

Warum dauert das Training mit zwei Tesla T4 länger als mit nur einer und warum ist die Trainingszeit bei einer höheren batch size nicht schneller?

Ich bin für jeden Hinweis dankbar.

Re: Tensorflow train speed mit mehreren GPU´s

Verfasst: Montag 4. Januar 2021, 19:37
von ThomasL
Wie liegen die Bilder/Daten vor? 10k einzelne .jpg Dateien?
Wie werden die Daten eingelesen? Also bei jeder Epoche jeweils alle Bilder pro Batch oder nur einmal vor der ersten Epoche in den Speicher?
Müssen die Bilder jeweils noch preprocessed werden? z.b normalizing auf Werte zwischen 0 und 1 oder -1 und 1?
Wo liegen die Bilddaten und wie ist der Zugriff darauf? Liegen die Bilder auf der Systemplatte der VM auf der der Code läuft? Oder irgendwo anders?
Meine Erfahrung ist das der Zugriff auf die Daten oft das Problem ist.

Re: Tensorflow train speed mit mehreren GPU´s

Verfasst: Mittwoch 6. Januar 2021, 14:10
von Itech
Die Bilder liegen einzeln als jpeg auf der Systemplatte. Die Systemplatte ist keine ssd. Die Bilder werden pro Batch geladen. Die Bilder werden noch preprocessed.
Macht ein schneller Speicher wirklich so viel aus? Habe mit beim Training die Auslastung der Platte angeschaut. Sie liegt immer unter 25 %

Re: Tensorflow train speed mit mehreren GPU´s

Verfasst: Mittwoch 6. Januar 2021, 18:38
von ThomasL
Das würde dafür sprechen, dass das preprocessing und das trainieren des Batches entsprechend dauert, wie ist denn da die Auslastung von CPU und GPU?
Das ständige preprocessing macht natürlich keinen Sinn. Das macht man nur einmal und erzeugt einen normierten Datensatz.
Der Shape 628x628 ist natürlich recht groß. Das wird je nach Modellaufbau schon so seine Zeit brauchen.

Re: Tensorflow train speed mit mehreren GPU´s

Verfasst: Donnerstag 7. Januar 2021, 15:09
von Itech
Die Auslastung der GPU ist immer auf 100% und die CPU schwankt immer zwischen 20 und 40%. Wie klein Könnte man den die Bilder machen ohne zu viele micro Unterschiede zu verlieren. Ziel ist es aktuell Apfelsorten voneinander zu unterscheiden.

Re: Tensorflow train speed mit mehreren GPU´s

Verfasst: Donnerstag 7. Januar 2021, 19:47
von ThomasL
Nun, man kann ja aus einem 628x628 z.B. 4 Bilder zu 314x314 machen (also vierteln) ohne die micro Unterschiede zu verlieren.
Die Anzahl der Bilder vervierfacht sich natürlich, durch die Reduzierung der Neuronen im Modell kann das trainieren aber schneller werden.
Ob das funktioniert hängt allerdings auch davon ab, wie viel % des Bildes der Apfel einnimmt und wie viel % Surrounding sind.
Wenn zu viel Surrounding vorhanden ist, stellt sich sowieso die Frage, was da trainiert wird.
Hat dein Projekt einen kommerziellen Hintergrund oder ist das Just for Fun ?

Re: Tensorflow train speed mit mehreren GPU´s

Verfasst: Freitag 8. Januar 2021, 09:46
von Itech
OK danke für den Tipp. Ne ich mach das just for fun, weil ich wissen möchte ob es möglich ist, alle Apfelsorten zu unterscheiden.