Auf dieser Seite wird beschrieben, wie Sie NCCL
Tests auf GKE-Clustern ausführen, die eine Standardkonfiguration verwenden. Eine Standardkonfiguration bedeutet, dass der Cluster mit dem Cluster Toolkit erstellt wurde.
Wenn Sie Ihren Cluster mit gcloud-Befehlen erstellt haben, verwenden Sie eine benutzerdefinierte Konfiguration. Die Anleitung auf dieser Seite gilt dann möglicherweise nicht. Wenn Sie eine benutzerdefinierte Konfiguration verwenden, lesen Sie eine der folgenden Seiten:
- NCCL auf benutzerdefinierten GKE-Clustern mit A4X ausführen
- NCCL auf benutzerdefinierten GKE-Clustern mit A4 oder A3 Ultra ausführen
Wählen Sie die Schritte für Ihren Maschinentyp aus:
A4X
Mit dem Cluster verbinden:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=COMPUTE_REGIONErsetzen Sie die folgenden Variablen:
CLUSTER_NAME: der Name Ihres Clusters, der bei mit dem Cluster Toolkit erstellten Clustern aufDEPLOYMENT_NAMEbasiert.COMPUTE_REGION: der Name der Compute-Region.
Stellen Sie mit der Datei gke-a4x/nccl-jobset-example.yaml einen NCCL-Leistungstest für „All-Gather“ mit aktiviertem TAS bereit:
Standardmäßig verwendet der Test eine bestimmte Anzahl von Knoten. Wenn Sie die Anzahl der Knoten ändern möchten, ändern Sie die folgenden Werte in der YAML-Datei in die gewünschte Anzahl von Knoten:
numNodesparallelismcompletionsN_NODES
Erstellen Sie die Ressourcen, um den Test auszuführen:
kubectl create -f ~/cluster-toolkit/examples/gke-a4x/nccl-jobset-example.yaml
Prüfen Sie, ob alle
nccl-test-Pods den StatusCompletederreicht haben:kubectl get podsDie Ausgabe sollte in etwa so aussehen:
nccl-all-worker-0-0-ft8jm 0/1 Completed 0 13m nccl-all-worker-0-1-prpvw 0/1 Completed 0 13mSuchen Sie nach einem Pod-Namen, der dem Muster
nccl-all-worker-0-0-*entspricht. Die Logs dieses Pods enthalten die Ergebnisse des NCCL-Tests.Führen Sie den folgenden Befehl aus, um die Logs für diesen Pod abzurufen:
kubectl logs $(kubectl get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}' | grep nccl-all-worker-0-0)
Die Ausgabe sollte in etwa so aussehen:
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1024 32 float none -1 19.60 0.05 0.05 0 19.00 0.05 0.05 0 2048 64 float none -1 19.63 0.10 0.09 0 19.47 0.11 0.09 0 4096 128 float none -1 19.88 0.21 0.18 0 19.61 0.21 0.18 0 8192 256 float none -1 20.31 0.40 0.35 0 19.82 0.41 0.36 0 16384 512 float none -1 20.30 0.81 0.71 0 20.17 0.81 0.71 0 32768 1024 float none -1 20.70 1.58 1.39 0 20.36 1.61 1.41 0 65536 2048 float none -1 20.94 3.13 2.74 0 20.88 3.14 2.75 0 131072 4096 float none -1 21.12 6.20 5.43 0 20.96 6.25 5.47 0 262144 8192 float none -1 21.24 12.34 10.80 0 21.01 12.48 10.92 0 524288 16384 float none -1 21.28 24.63 21.55 0 21.07 24.88 21.77 0 1048576 32768 float none -1 21.95 47.77 41.80 0 21.72 48.28 42.24 0 2097152 65536 float none -1 24.15 86.85 76.00 0 23.75 88.30 77.26 0 4194304 131072 float none -1 31.50 133.13 116.49 0 30.75 136.39 119.34 0 8388608 262144 float none -1 47.42 176.88 154.77 0 46.47 180.51 157.95 0 16777216 524288 float none -1 48.72 344.39 301.34 0 47.85 350.63 306.80 0 33554432 1048576 float none -1 75.08 446.91 391.05 0 73.89 454.10 397.34 0 67108864 2097152 float none -1 178.7 375.47 328.53 0 179.1 374.67 327.84 0 134217728 4194304 float none -1 211.1 635.86 556.37 0 211.3 635.21 555.81 0 268435456 8388608 float none -1 413.2 649.68 568.47 0 414.9 646.95 566.08 0 536870912 16777216 float none -1 820.1 654.64 572.81 0 814.9 658.81 576.46 0 1073741824 33554432 float none -1 1566.5 685.43 599.76 0 1567.9 684.82 599.22 0 2147483648 67108864 float none -1 3025.3 709.83 621.10 0 3017.2 711.74 622.77 0 4294967296 134217728 float none -1 5898.8 728.11 637.10 0 5784.0 742.57 649.74 0 8589934592 268435456 float none -1 11541 744.31 651.28 0 11293 760.67 665.58 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 236.839
A4
Mit dem Cluster verbinden:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=COMPUTE_REGIONErsetzen Sie die folgenden Variablen:
CLUSTER_NAME: der Name Ihres Clusters, der bei mit dem Cluster Toolkit erstellten Clustern aufDEPLOYMENT_NAMEbasiert.COMPUTE_REGION: der Name der Compute-Region.
Stellen Sie mit der Datei gke-a4/nccl-jobset-example.yaml einen NCCL-Leistungstest für „All-Gather“ mit aktiviertem TAS bereit:
Ändern Sie die YAML-Datei auf folgende Weise, wenn die Bedingungen erfüllt sind:
Standardmäßig verwenden die Tests eine bestimmte Anzahl von Knoten. Wenn Sie die Anzahl der Knoten ändern möchten, ändern Sie die folgenden Werte in die gewünschte Anzahl von Knoten:
parallelismcompletionsN_NODES
Wenn Sie Knoten testen möchten, die mit Flex-Start bereitgestellt wurden, gehen Sie im Feld
metadataso vor:- Ersetzen Sie den Wert
kueue.x-k8s.io/queue-namedurchdws-local-queue. Fügen Sie die folgende Annotation hinzu:
annotations: provreq.kueue.x-k8s.io/maxRunDurationSeconds: "600"
- Ersetzen Sie den Wert
Erstellen Sie die Ressourcen, um den Test auszuführen:
kubectl create -f ~/cluster-toolkit/examples/gke-a4/nccl-jobset-example.yamlDieser Befehl gibt einen JobSet-Namen zurück.
Die Ausgabe sollte in etwa so aussehen:
jobset.jobset.x-k8s.io/all-gather8t7dt created
Führen Sie den folgenden Befehl aus, um alle aktiven Pods aufzurufen und die Ergebnisse des NCCL-Tests anzusehen:
kubectl get podsDie Ausgabe sollte in etwa so aussehen:
NAME READY STATUS RESTARTS AGE all-gather8t7dt-w-0-0-n9s6j 0/1 Completed 0 9m34s all-gather8t7dt-w-0-1-rsf7r 0/1 Completed 0 9m34sSuchen Sie nach einem Pod-Namen, der dem Muster
jobset-name-w-0-0-*entspricht. Die Logs dieses Pods enthalten die Ergebnisse des NCCL-Tests.Führen Sie den folgenden Befehl aus, um die Logs für diesen Pod abzurufen:
kubectl logs all-gather8t7dt-w-0-0-n9s6jDie Ausgabe sollte in etwa so aussehen:
# size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1024 16 float none -1 54.07 0.02 0.02 0 55.80 0.02 0.02 0 2048 32 float none -1 55.46 0.04 0.03 0 55.31 0.04 0.03 0 4096 64 float none -1 55.59 0.07 0.07 0 55.38 0.07 0.07 0 8192 128 float none -1 56.05 0.15 0.14 0 55.92 0.15 0.14 0 16384 256 float none -1 57.08 0.29 0.27 0 57.75 0.28 0.27 0 32768 512 float none -1 57.49 0.57 0.53 0 57.22 0.57 0.54 0 65536 1024 float none -1 59.20 1.11 1.04 0 59.20 1.11 1.04 0 131072 2048 float none -1 59.58 2.20 2.06 0 63.57 2.06 1.93 0 262144 4096 float none -1 63.87 4.10 3.85 0 63.61 4.12 3.86 0 524288 8192 float none -1 64.83 8.09 7.58 0 64.40 8.14 7.63 0 1048576 16384 float none -1 79.74 13.15 12.33 0 76.66 13.68 12.82 0 2097152 32768 float none -1 78.41 26.74 25.07 0 79.05 26.53 24.87 0 4194304 65536 float none -1 83.21 50.41 47.26 0 81.25 51.62 48.39 0 8388608 131072 float none -1 94.35 88.91 83.35 0 99.07 84.68 79.38 0 16777216 262144 float none -1 122.9 136.55 128.02 0 121.7 137.83 129.21 0 33554432 524288 float none -1 184.2 182.19 170.80 0 178.1 188.38 176.60 0 67108864 1048576 float none -1 294.7 227.75 213.51 0 277.7 241.62 226.52 0 134217728 2097152 float none -1 495.4 270.94 254.00 0 488.8 274.60 257.43 0 268435456 4194304 float none -1 877.5 305.92 286.80 0 861.3 311.65 292.17 0 536870912 8388608 float none -1 1589.8 337.71 316.60 0 1576.2 340.61 319.33 0 1073741824 16777216 float none -1 3105.7 345.74 324.13 0 3069.2 349.85 327.98 0 2147483648 33554432 float none -1 6161.7 348.52 326.74 0 6070.7 353.75 331.64 0 4294967296 67108864 float none -1 12305 349.03 327.22 0 12053 356.35 334.08 0 8589934592 134217728 float none -1 24489 350.77 328.85 0 23991 358.05 335.67 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 120.248
A3 Ultra
Mit dem Cluster verbinden:
gcloud container clusters get-credentials CLUSTER_NAME \ --location=COMPUTE_REGIONErsetzen Sie die folgenden Variablen:
CLUSTER_NAME: der Name Ihres Clusters, der bei mit dem Cluster Toolkit erstellten Clustern aufDEPLOYMENT_NAMEbasiert.COMPUTE_REGION: der Name der Compute-Region.
Stellen Sie mit der Datei gke-a3-ultragpu/nccl-jobset-example.yaml einen NCCL-Leistungstest für „All-Gather“ mit aktiviertem TAS bereit:
Ändern Sie die YAML-Datei auf folgende Weise, wenn die Bedingungen erfüllt sind:
Standardmäßig verwenden die Tests eine bestimmte Anzahl von Knoten. Wenn Sie die Anzahl der Knoten ändern möchten, ändern Sie die folgenden Werte in die gewünschte Anzahl von Knoten:
parallelismcompletionsN_NODES
Wenn Sie Knoten testen möchten, die mit Flex-Start bereitgestellt wurden, gehen Sie im Feld
metadataso vor:- Ersetzen Sie den Wert
kueue.x-k8s.io/queue-namedurchdws-local-queue. Fügen Sie die folgende Annotation hinzu:
annotations: provreq.kueue.x-k8s.io/maxRunDurationSeconds: "600"
- Ersetzen Sie den Wert
Erstellen Sie die Ressourcen, um den Test auszuführen:
kubectl create -f ~/cluster-toolkit/examples/gke-a3-ultragpu/nccl-jobset-example.yamlDieser Befehl gibt einen JobSet-Namen zurück.
Die Ausgabe sollte in etwa so aussehen:
jobset.jobset.x-k8s.io/all-gather8t7dt created
Führen Sie den folgenden Befehl aus, um alle aktiven Pods aufzurufen und die Ergebnisse des NCCL-Tests anzusehen:
kubectl get podsDie Ausgabe sollte in etwa so aussehen:
NAME READY STATUS RESTARTS AGE all-gather8t7dt-w-0-0-n9s6j 0/1 Completed 0 9m34s all-gather8t7dt-w-0-1-rsf7r 0/1 Completed 0 9m34sSuchen Sie nach einem Pod-Namen, der dem Muster
jobset-name-w-0-0-*entspricht. Die Logs dieses Pods enthalten die Ergebnisse des NCCL-Tests.Führen Sie den folgenden Befehl aus, um die Logs für diesen Pod abzurufen:
kubectl logs all-gather8t7dt-w-0-0-n9s6jDie Ausgabe sollte in etwa so aussehen:
# size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1024 16 float none -1 54.07 0.02 0.02 0 55.80 0.02 0.02 0 2048 32 float none -1 55.46 0.04 0.03 0 55.31 0.04 0.03 0 4096 64 float none -1 55.59 0.07 0.07 0 55.38 0.07 0.07 0 8192 128 float none -1 56.05 0.15 0.14 0 55.92 0.15 0.14 0 16384 256 float none -1 57.08 0.29 0.27 0 57.75 0.28 0.27 0 32768 512 float none -1 57.49 0.57 0.53 0 57.22 0.57 0.54 0 65536 1024 float none -1 59.20 1.11 1.04 0 59.20 1.11 1.04 0 131072 2048 float none -1 59.58 2.20 2.06 0 63.57 2.06 1.93 0 262144 4096 float none -1 63.87 4.10 3.85 0 63.61 4.12 3.86 0 524288 8192 float none -1 64.83 8.09 7.58 0 64.40 8.14 7.63 0 1048576 16384 float none -1 79.74 13.15 12.33 0 76.66 13.68 12.82 0 2097152 32768 float none -1 78.41 26.74 25.07 0 79.05 26.53 24.87 0 4194304 65536 float none -1 83.21 50.41 47.26 0 81.25 51.62 48.39 0 8388608 131072 float none -1 94.35 88.91 83.35 0 99.07 84.68 79.38 0 16777216 262144 float none -1 122.9 136.55 128.02 0 121.7 137.83 129.21 0 33554432 524288 float none -1 184.2 182.19 170.80 0 178.1 188.38 176.60 0 67108864 1048576 float none -1 294.7 227.75 213.51 0 277.7 241.62 226.52 0 134217728 2097152 float none -1 495.4 270.94 254.00 0 488.8 274.60 257.43 0 268435456 4194304 float none -1 877.5 305.92 286.80 0 861.3 311.65 292.17 0 536870912 8388608 float none -1 1589.8 337.71 316.60 0 1576.2 340.61 319.33 0 1073741824 16777216 float none -1 3105.7 345.74 324.13 0 3069.2 349.85 327.98 0 2147483648 33554432 float none -1 6161.7 348.52 326.74 0 6070.7 353.75 331.64 0 4294967296 67108864 float none -1 12305 349.03 327.22 0 12053 356.35 334.08 0 8589934592 134217728 float none -1 24489 350.77 328.85 0 23991 358.05 335.67 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 120.248
A3 High
Diese Arbeitslast enthält einen Sidecar-Container mit dem Namen tcpx-daemon, der einen Dienst ausführt, mit dem der Pod das GPUDirect-TCPX-Protokoll verwenden kann. Wenn Sie Pods in Ihrer eigenen Umgebung haben, die das GPUDirect-TCPX-Protokoll verwenden müssen, müssen Sie diesen Sidecar-Container zu diesen Pods hinzufügen. Ein Snippet der erforderlichen Felder, die Sie Ihren Manifesten hinzufügen müssen, finden Sie unter GPUDirect zu Manifesten hinzufügen.
Prüfen Sie das
nccl-config.yamlConfigMap-Manifest in GitHub. Dieses Manifest stellt Skripts bereit, die einen NCCL-Test für „All-Gather“ initialisieren und NCCL-spezifische Konfigurationseinstellungen festlegen.Prüfen Sie das
nccl-test-latest.yamlDeployment-Manifest in GitHub.Stellen Sie die ConfigMap und die Testarbeitslast bereit:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-config.yaml kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpx/nccl-test-latest.yamlFühren Sie die folgenden Befehle aus, um einen NCCL-Test-All-Gather-Test für die Knoten auszulösen:
kubectl exec \ --stdin --tty --container=nccl-test nccl-test-host-1 \ -- /configs/allgather.sh nccl-host-1 nccl-host-2Die Ausgabe sieht etwa so aus:
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 1048576 16384 float none -1 696.8 1.50 1.41 0 729.0 1.44 1.35 0 2097152 32768 float none -1 776.4 2.70 2.53 0 726.7 2.89 2.71 0 4194304 65536 float none -1 774.3 5.42 5.08 0 805.1 5.21 4.88 0 8388608 131072 float none -1 812.1 10.33 9.68 0 817.6 10.26 9.62 0 16777216 262144 float none -1 1035.2 16.21 15.19 0 1067.8 15.71 14.73 0 33554432 524288 float none -1 1183.3 28.36 26.59 0 1211.8 27.69 25.96 0 67108864 1048576 float none -1 1593.4 42.12 39.49 0 1510.5 44.43 41.65 0 134217728 2097152 float none -1 2127.8 63.08 59.13 0 2312.7 58.03 54.41 0 268435456 4194304 float none -1 3603.0 74.50 69.85 0 3586.2 74.85 70.17 0 536870912 8388608 float none -1 7101.7 75.60 70.87 0 7060.9 76.03 71.28 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 29.8293
Nachdem die Installation von GPUDirect-TCPX auf Ihren Knoten abgeschlossen ist, können Sie damit den Durchsatz von GPU-lastigen Arbeitslasten optimieren, die auf diesen Knoten ausgeführt werden. Die erforderlichen Felder für die Verwendung von GPUDirect-TCPX in Ihren eigenen Pods werden unter GPUDirect zu Manifesten hinzufügen beschrieben.
A3 Mega
Diese Arbeitslast enthält einen Sidecar-Container mit dem Namen tcpxo-daemon, der einen Dienst ausführt, mit dem der Pod das GPUDirect-TCPXO-Protokoll verwenden kann. Wenn Sie Pods in Ihrer eigenen Umgebung haben, die das GPUDirect-TCPXO-Protokoll verwenden müssen, müssen Sie diesen Sidecar-Container zu diesen Pods hinzufügen. Ein Snippet der erforderlichen Felder, die Sie Ihren Manifesten hinzufügen müssen, finden Sie unter GPUDirect zu Manifesten hinzufügen.
Prüfen Sie das
nccl-test-latest.yamlManifest in GitHub.Stellen Sie zwei Pods mit der Testarbeitslast bereit:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/gpudirect-tcpxo/nccl-test-latest.yamlNachdem die Pods bereitgestellt wurden, lösen Sie einen Test für „All-Gather“ aus:
kubectl exec --stdin --tty --container=nccl-test nccl-test-host-1 -- /scripts/allgather.sh nccl-host-1 nccl-host-2Die Ausgabe sieht etwa so aus:
# out-of-place in-place # size count type redop root time algbw busbw #wrong time algbw busbw #wrong # (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s) 0 0 float none -1 0.24 0.00 0.00 0 0.18 0.00 0.00 0 0 0 float none -1 0.19 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 0 0 float none -1 0.17 0.00 0.00 0 0.17 0.00 0.00 0 256 4 float none -1 235.2 0.00 0.00 0 235.1 0.00 0.00 0 512 8 float none -1 241.0 0.00 0.00 0 236.1 0.00 0.00 0 1024 16 float none -1 236.3 0.00 0.00 0 233.3 0.00 0.00 0 2048 32 float none -1 234.1 0.01 0.01 0 233.4 0.01 0.01 0 4096 64 float none -1 237.1 0.02 0.02 0 235.3 0.02 0.02 0 8192 128 float none -1 236.2 0.03 0.03 0 235.2 0.03 0.03 0 16384 256 float none -1 236.6 0.07 0.06 0 238.5 0.07 0.06 0 32768 512 float none -1 237.9 0.14 0.13 0 238.8 0.14 0.13 0 65536 1024 float none -1 242.3 0.27 0.25 0 239.4 0.27 0.26 0 131072 2048 float none -1 263.0 0.50 0.47 0 275.1 0.48 0.45 0 262144 4096 float none -1 279.2 0.94 0.88 0 269.9 0.97 0.91 0 524288 8192 float none -1 273.5 1.92 1.80 0 273.5 1.92 1.80 0 1048576 16384 float none -1 315.1 3.33 3.12 0 314.1 3.34 3.13 0 2097152 32768 float none -1 319.2 6.57 6.16 0 311.5 6.73 6.31 0 4194304 65536 float none -1 331.8 12.64 11.85 0 331.3 12.66 11.87 0 8388608 131072 float none -1 356.3 23.54 22.07 0 353.8 23.71 22.23 0 16777216 262144 float none -1 409.1 41.01 38.45 0 405.2 41.40 38.81 0 33554432 524288 float none -1 451.4 74.34 69.69 0 447.7 74.94 70.26 0 67108864 1048576 float none -1 713.4 94.07 88.19 0 713.8 94.01 88.13 0 134217728 2097152 float none -1 1122.1 119.62 112.14 0 1116.3 120.23 112.72 0 268435456 4194304 float none -1 1785.8 150.32 140.92 0 1769.2 151.72 142.24 0 536870912 8388608 float none -1 2859.7 187.74 176.00 0 2852.6 188.20 176.44 0 1073741824 16777216 float none -1 5494.1 195.44 183.22 0 5568.2 192.83 180.78 0 2147483648 33554432 float none -1 10841 198.09 185.71 0 10798 198.88 186.45 0 4294967296 67108864 float none -1 21453 200.21 187.70 0 21490 199.86 187.37 0 8589934592 134217728 float none -1 42603 201.63 189.03 0 42670 201.31 188.73 0 # Out of bounds values : 0 OK # Avg bus bandwidth : 45.7587 #Nachdem die Installation von GPUDirect-TCPXO auf Ihren Knoten abgeschlossen ist, können Sie damit den Durchsatz von GPU-lastigen Arbeitslasten optimieren, die auf diesen Knoten ausgeführt werden. Die erforderlichen Felder für die Verwendung von GPUDirect-TCPXO in Ihren eigenen Pods werden unter GPUDirect zu Manifesten hinzufügen beschrieben.
Nächste Schritte
- Informationen zu den Testausgaben und zur Fehlerbehebung finden Sie unter NCCL-Logs zur Fehlerbehebung erfassen und verstehen.
- Informationen zur Fehlerbehebung bei langsamer Leistung