Ich versuche DNN-Modell mit Tensorflow zu trainieren, mein Skript haben zwei Variablen, eine ist dichtes Merkmal und eine ist spärlich, jedes Minibuch wird volle dichte Funktion ziehen und angegebene spärliche Funktion ziehen Mit der Verwendung von embedding_lookup_sparse konnte Feedforward erst beginnen, nachdem die spärliche Funktion bereit ist. Ich habe mein Skript mit 20 Parameter-Servern ausgeführt und die Anzahl der Worker wurde nicht skaliert. Also profilierte ich meinen Job mit Tensorflow Timeline und fand einen von 20 Parameter Server ist sehr langsam im Vergleich zu den anderen 19. Es gibt keine Abhängigkeit zwischen verschiedenen Teil aller trainierbaren Variablen. Ich bin nicht sicher, ob es irgendwelche Fehler oder Einschränkungen gibt, wie Tensorflow kann nur 40 Fan-Out-Anfragen in die Warteschlange stellen, irgendeine Idee, es zu debuggen? Danke im Voraus. tensorflow timeline profilingTensorflow einer von 20 Parameter Server ist sehr langsam
Antwort
Es klingt, als ob Sie genau 2 Variablen haben könnten, eine ist bei PS0 und die andere bei PS1 gespeichert. Die anderen 18 Parameter Server machen nichts. Bitte sehen Sie sich die variable Partitionierung an (https://www.tensorflow.org/versions/master/api_docs/python/state_ops/variable_partitioners_for_sharding), d. H. Partitionieren Sie eine große Variable in kleine Blöcke und speichern Sie sie auf separaten Parameterservern.
Ich habe feste Größe Partitionierer und ich bin sicher, dass zwei Variablen in 20 Parameter Server gespittet wurden, von der Zeitachse Grafik, die ich anhängte, konnten Sie sehen, dass alle Parameter-Server arbeiten, das Problem ist, dass es immer einen Parameter gab langsam. Ich lief dreimal, der langsame Teil war 5,7, 19, nicht der gleiche. –
Hmmm, ich habe das Profilierungswerkzeug, das Sie zuvor benutzt haben, nicht benutzt. Aus der Grafik ist der Unterschied ziemlich klein? 200ms vs 140ms? Liest ich das Diagramm richtig? – guinny
Nicht genau, der untere ist Arbeiter, andere sind PS. Der 4. ist der super langsame Parameter Server, der Graph zeigt an, dass er um 60ms langsamer ist als andere, sowohl um dichte Parameter zu ziehen als auch um Gradienten zu schieben, und für spärliche Teile ist er sogar 100ms langsamer. –
Einige Vorschläge, die zu groß für einen Kommentar waren:
Sie nicht die Datenübertragung in der Zeitleiste sehen können, die ist, weil die Verfolgung von Send/Recv zur Zeit ausgeschaltet ist, einige Diskussion hier - https://github.com/tensorflow/tensorflow/issues/4809
In der neuesten Version (nachts, die 5 Tage alt oder neuer ist) können Sie die ausführliche Protokollierung aktivieren, indem Sie export TF_CPP_MIN_VLOG_LEVEL=1
tun, und es zeigt Zeitmarken der zweiten Ebene (siehe here über höhere Granularität).
Also mit Vlog vielleicht können Sie Nachrichten verwenden, die von diesem line erzeugt werden, um die Zeiten zu sehen, zu denen Send
Ops generiert werden.
Danke, tolle Antwort! Ich werde eine ausführliche Protokollierung versuchen. –
BTW, wie vor 3 Stunden, es gibt jetzt Mikrosekunden in Zeitstempeln enthalten, also wenn Sie diese wollen, müssen Sie aus neuesten Kopf bauen –
Diese Art von Hack Art und Weise ist Send/Recv
Timings von Timeline
Objekt für jede Iteration zu protokollieren, aber es funktioniert ziemlich gut in Bezug auf der Analyse von JSON-Daten abgeladen (im Vergleich auf chrome://trace
sichtbar zu machen).
Die Schritte, die Sie ausführen müssen, sind:
- herunterladen TensorFlow Quelle und Kasse eine korrekte Verzweigung (r0.12 zum Beispiel)
- den einzigen Ort ändern, die
SetTimelineLabel
Methode innerhalbexecutor.cc
-
ruft
- statt nur nicht übertragbare Knoten aufzuzeichnen, möchten Sie auch
Send/Recv
Knoten aufzeichnen. - vorsichtig sein
SetTimelineLabel
einmal inNodeDone
nennen, da sie die Textzeichenfolge eines Knotens gesetzt würde, die später von einem Python-Skript
- statt nur nicht übertragbare Knoten aufzuzeichnen, möchten Sie auch
- build TensorFlow aus modifizierten Quelle ändern
- Codes Modell analysiert werden (für Beispiel
inception_distributed_train.py
) mit dem richtigen Art und Weise der Verwendung vonTimeline
und Grafik Meta-Daten
Dann können Sie das Training laufen und JSON-Datei einmal für jede Iteration abrufen! :)
- 1. Website ist sehr langsam
- 2. django ist sehr langsam
- 3. change.delegate ist sehr langsam
- 4. UIImage setImage ist sehr, sehr langsam
- 5. SQL Server Volltextsuche sehr langsam
- 6. UIWebView ist sehr langsam
- 7. TabControl Hinzufügen ist sehr langsam
- 8. Feinabstimmung VGG letzte Schicht ist sehr langsam
- 9. SQL-Verbindungsserver Abfrage sehr sehr langsam
- 10. `Friday` Paket ist sehr langsam
- 11. Kolben Anwendung ist sehr langsam
- 12. Hibernate Start sehr langsam
- 13. Google Cloud SQL sehr langsam auf Server
- 14. RichTextBox Formatierung ist sehr langsam
- 15. Coredata ist sehr langsam; swift
- 16. Elasticsearch Indizierung ist sehr langsam
- 17. Android Bildergalerie ist sehr langsam
- 18. Android TextureView.getBitmap() ist sehr langsam
- 19. Google Maps ist sehr langsam
- 20. Abfrageausführung auf Azure-Speicher ist sehr langsam
- 21. recaptcha sehr langsam auf linode Server
- 22. Ruby Server sehr langsam außerhalb localhost (Teambox)
- 23. mysql - Löschen von Zeilen von InnoDB ist sehr langsam
- 24. Warum ist diese SQL-Anweisung sehr langsam?
- 25. svn Repo für Magento ist sehr langsam!
- 26. Django ist sehr langsam auf meiner Maschine
- 27. GSON Serialisierung sehr sehr langsam
- 28. Asp.net Website ersten Start ist sehr langsam
- 29. PyQt Programmstart ist sehr langsam auf Ubuntu
- 30. MongoDB ist sehr langsam auf Azure Platform
Welcher Parameter Server ist das? (dh der erste Splitter oder nicht). Können Sie auch Netzwerkverkehr und CPU überprüfen, um sicherzustellen, dass alle versuchen, die gleiche Menge an Daten zu übertragen und die gleiche Menge an CPU-Arbeit zu tun? –
@ YaroslavBulatov verschiedenen Betrieb hat verschiedene langsame Parameter Server, Netzwerkverkehr (5 ~ 10%) und CPU-Nutzung (20%) sind weit weg von beschäftigt, und verschiedene Parameter-Server haben fast den gleichen Netzwerkverkehr. –
Gibt es eine Konfiguration oder Tools, um genau zu sehen, was Tensorflow macht? Ich protokolliere beispielsweise jedes Ereignis, um zu überprüfen, wann und wo der Mitarbeiter Anfragen sendet und Antworten von empfängt. Ich verstehe Tensorflow-Timeline-Tool nicht sehr gut, scheint es keinen expliziten Datenfluss zwischen Arbeitern und Servern. –