Ich erhalte ungefähr die gleiche Auslastungsrate, wenn ich Modelle mit Tensorflow trainiere. Der Grund ist in meinem Fall ziemlich klar: Ich wähle manuell eine zufällige Charge von Proben aus und rufe die Optimierung für jede Charge separat auf.
Das bedeutet, dass sich jeder Datenstapel im Hauptspeicher befindet, dann in den GPU-Speicher kopiert wird, wo sich der Rest des Modells befindet. Anschließend wird die Vorwärts- / Rückwärtsübertragung und Aktualisierung in GPU durchgeführt. Anschließend wird die Ausführung an meinen Code zurückgegeben, wo ich sie greife ein weiterer Stapel und Aufruf darauf optimieren.
Dies ist schneller möglich, wenn Sie einige Stunden damit verbringen, Tensorflow so einzurichten, dass das Batch-Laden parallel aus vorbereiteten TF-Datensätzen durchgeführt wird.
Mir ist klar, dass Sie möglicherweise Tensorflow unter Keras verwenden oder nicht, aber da meine Erfahrung dazu neigt, sehr ähnliche Nutzungszahlen zu erzeugen, gehe ich auf die Nerven, indem ich vorschlage, dass es einen ziemlich wahrscheinlichen Kausalzusammenhang gibt, der sich aus diesen Korrelationen ergibt. Wenn Ihr Rahmen wird jede Charge aus dem Hauptspeicher in die GPU ohne die zusätzliche Effizienz / Komplexität des asynchronen Ladens Laden (die GPU selbst handhaben kann), dann dies würde ein erwartetes Ergebnis.