Auf TPU-Slices trainieren
TPUs wurden für die horizontale Skalierung auf einem TPU-Pod entwickelt. Ein TPU-Pod ist eine Gruppe von TPU-Geräten, die über dedizierte Hochgeschwindigkeits-Netzwerkschnittstellen verbunden sind. Mit einem TPU-Pod können Sie die Verarbeitungslast auf mehrere TPUs verteilen. Jedes TPU-Board ist zum Beispiel für das Laden und Vorverarbeiten von Daten mit einem hochleistungsfähigen CPU-basierten Hostcomputer verbunden. Um eine größere Anzahl von TPUs bestmöglich nutzen zu können, müssen Sie mehrere Trainingsaufgabenparameter optimieren.
Die Einrichtung für das Training mit TPU-Pods ist für jedes Framework unterschiedlich. Unter den folgenden Links finden Sie detaillierte Informationen zum Trainieren auf Pods mit den einzelnen Frameworks:
In den folgenden Abschnitten werden einige häufig auftretende Probleme, erforderliche Änderungen an Ihren Modellen und Best Practices zur Reduzierung oder Vermeidung von Pod-Fehlern beschrieben.
Batchgröße und Trainingsschritte skalieren
Wenn Sie bei größeren TPU-Typen eine lineare Skalierung erzielen möchten, sollten Sie die Batchgröße pro Kern beibehalten.
Wenn Sie beispielsweise für einen v6e-8-TPU-Typ eine Batchgröße von 1.024 verwenden, sollten Sie für einen v6e-32-TPU-Typ eine Batchgröße von 4.096 (4 * 1.024) verwenden. Dadurch wird die TPU-Hardware bestmöglich genutzt. Sie können stattdessen auch kleinere Batchgrößen verwenden, das Training wird dann jedoch nicht linear skaliert.
Manche Modelle enthalten ein Flag train_steps
, wobei ein Schritt der Verarbeitung eines einzelnen Datenbatchs entspricht. Wenn Sie die Batchgröße erhöhen, müssen Sie die Anzahl der Trainingsschritte herunterskalieren, sodass die Gesamtzahl der Trainingsbeispiele gleich bleibt.
Wenn Sie beispielsweise eine Batchgröße von 1.000 für 100 Schritte haben, werden während des Trainings 100.000 Beispiele verarbeitet. Wenn Sie jetzt vier Worker und eine effektive Batchgröße von 4.000 haben, müssen Sie die Anzahl der Schritte auf 25 erhöhen, damit dieselben 100.000 Beispiele verarbeitet werden. Wenn das Modell ein epochs
-Flag verwendet, müssen Sie die Anzahl der Schritte nicht skalieren.
Größere Batches können zu einem geänderten Konvergenzverhalten des Modells führen. Es empfiehlt sich daher eventuell auch, gewisse Hyperparameter wie die Lernrate zu optimieren.
Regionale Cloud Storage-Buckets in der Region des TPU-Pods verwenden
Die Best Practice für das TPU-Training besteht im Allgemeinen darin, immer nur Ressourcen aus einer Region zu verwenden. Die Region der Ressourcen ist dann besonders wichtig, wenn Sie TPU-Pods verwenden, da die Datenübertragungsraten höher sind, wenn sich Ihr Google Cloud Storage-Bucket und Ihre TPU in derselben Region befinden.
Verwenden Sie für Training-Datasets und Prüfpunkte unbedingt einen regionalen Cloud Storage-Bucket in derselben Region wie die TPU.
Best Practices für den Workflow bei der Entwicklung auf TPU-Pods
Wenn Sie eine neue TPU-Arbeitslast erstellen, ist es oft am besten, mit der Entwicklung auf den kleinsten TPUs zu beginnen und schrittweise auf größere TPUs zu iterieren. Verwenden Sie zuerst eine kleine TPU-Version (z. B. v6e-8).
- Arbeitslast auf erwartetes Verhalten testen
- Leistung mithilfe der Leistungstools testen und validieren
Sobald Ihre Arbeitslast funktionsfähig ist und Ihre Leistungsziele erreicht hat, skalieren Sie auf einen größeren TPU-Typ wie v6e-32 hoch. Erhöhen Sie die TPU-Größe langsam und iterativ und prüfen Sie dabei die Skalierbarkeit (Funktionalität und Leistung), bis Sie die gewünschte TPU-Größe erreicht haben.