Dieser Leitfaden bietet eine kuratierte Auswahl wichtiger XLA-Flags, um Nutzern zu helfen, die Funktionen von XLA effektiv zu nutzen. In den folgenden Abschnitten werden Flags beschrieben, die sich erheblich auf die Laufzeitleistung und die Speicherauslastung auswirken können. Sollten nach dem Aktivieren eines Flags Probleme wie Abstürze auftreten, empfiehlt es sich, zur Standardeinstellung zurückzukehren und ein GitHub-Problem zu erstellen.
Leistungsbezogene Meldungen
Die folgenden Flags sind entscheidend für die Verbesserung der Laufzeitleistung. Wenn Sie diese Einstellungen testen, kann sich die Leistung erheblich verbessern.
Flag | Beschreibung | Standardwerte | Vorgeschlagene Werte | Kandidatenwerte |
---|---|---|---|---|
Pipelining 1. xla_should_allow_loop_variant_parameter_in_chain 2. xla_should_add_loop_invariant_op_in_chain 3. xla_tpu_enable_ici_ag_pipelining |
Diese drei Flags sollten zusammen verwendet werden, um das kollektive Pipelining von ICI-All-Gather-Vorgängen(Interchip-Interconnect) zu ermöglichen. Dadurch ergeben sich mehr Möglichkeiten für die überlappende Ausführung. | 1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled 2. xla_should_add_loop_invariant_op_in_chain=kDisabled 3. xla_tpu_enable_ici_ag_pipelining=false |
1. xla_should_allow_loop_variant_parameter_in_chain=kEnabled 2. xla_should_add_loop_invariant_op_in_chain=kEnabled 3. xla_tpu_enable_ici_ag_pipelining=true |
1. xla_should_allow_loop_variant_parameter_in_chain=kDisabled/kEnabled/kAuto 2. xla_should_add_loop_invariant_op_in_chain=kDisabled/kEnabled/kAuto 3. xla_tpu_enable_ici_ag_pipelining=true/false |
v5e/Async xla_enable_async_all_gather xla_tpu_enable_async_collective_fusion xla_tpu_enable_async_collective_fusion_fuse_all_gather |
Diese drei Flags sollten zusammen verwendet werden, um asynchrone All-Gather-Vorgänge auf v5e zu aktivieren. | xla_enable_async_all_gather=kAuto xla_tpu_enable_async_collective_fusion=true xla_tpu_enable_async_collective_fusion_fuse_all_gather=true |
xla_enable_async_all_gather=kAuto xla_tpu_enable_async_collective_fusion=true xla_tpu_enable_async_collective_fusion_fuse_all_gather=true |
xla_enable_async_all_gather=kDisabled/kEnabled/kAuto xla_tpu_enable_async_collective_fusion=true/false xla_tpu_enable_async_collective_fusion_fuse_all_gather=true/false |
v5e/Async xla_tpu_enable_async_collective_fusion xla_tpu_enable_async_collective_fusion_fuse_all_reduce |
Diese beiden Flags sollten zusammen verwendet werden, um asynchrone All-Reduce-Vorgänge auf v5e zu aktivieren. | xla_tpu_enable_async_collective_fusion=true xla_tpu_enable_async_collective_fusion_fuse_all_reduce=false |
xla_tpu_enable_async_collective_fusion=true xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true |
xla_tpu_enable_async_collective_fusion=true/false xla_tpu_enable_async_collective_fusion_fuse_all_reduce=true/false |
Async xla_tpu_enable_async_all_to_all |
Dieses Flag aktiviert die asynchrone All-to-All-Kommunikation. | xla_tpu_enable_async_all_to_all=false |
xla_tpu_enable_async_all_to_all=true |
xla_tpu_enable_async_all_to_all=true/false |
Latenzgebunden xla_all_gather_latency_bound_threshold_in_bytes |
Dieses Flag ist für latenzgebundene (d.h. kleine) All-Gather-Vorgänge vorgesehen. Wenn Sie diese Option aktivieren, werden bestimmte Optimierungen ausgelöst, die die Ausführungszeit für latenzgebundene All-Gathers verkürzen können. Sie wird in der Regel für Inferenz-Arbeitslasten verwendet. | xla_all_gather_latency_bound_threshold_in_bytes=-1 (nicht aktiviert) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
Latenzgebunden xla_all_reduce_latency_bound_threshold_in_bytes |
Dieses Flag ist für latenzgebundene (d.h. kleine) All-Gather-Vorgänge vorgesehen. Wenn Sie diese Option aktivieren, werden bestimmte Optimierungen ausgelöst, die die Ausführungszeit für latenzgebundene All-Reduces reduzieren können. Sie wird in der Regel für Inferenz-Arbeitslasten verwendet. | xla_all_reduce_latency_bound_threshold_in_bytes=-1 (nicht aktiviert) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
Latenzgebunden xla_collective_permute_latency_bound_threshold_in_bytes |
Dieses Flag ist für latenzgebundene (d.h. kleine) All-Gather-Vorgänge vorgesehen. Wenn Sie diese Option aktivieren, werden bestimmte Optimierungen ausgelöst, die die Ausführungszeit für latenzgebundene kollektive Permutationen verkürzen können. Sie wird in der Regel für Inferenz-Arbeitslasten verwendet. | xla_collective_permute_latency_bound_threshold_in_bytes=-1 (nicht aktiviert) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
Latenzgebunden xla_all_to_all_latency_bound_threshold_in_bytes |
Dieses Flag ist für latenzgebundene (d.h. kleine) All-Gather-Vorgänge vorgesehen. Wenn Sie diese Option aktivieren, werden bestimmte Optimierungen ausgelöst, die die Ausführungszeit für latenzgebundene All-to-All-Vorgänge verkürzen können. Sie wird in der Regel für Inferenz-Arbeitslasten verwendet. | xla_all_to_all_latency_bound_threshold_in_bytes=-1 (nicht aktiviert) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
xla_enable_async_collective_permute |
Schreibt alle kollektiven Permutationsvorgänge in ihre asynchronen Varianten um. Wenn der Wert auf auto festgelegt ist, kann XLA basierend auf anderen Konfigurationen oder Bedingungen automatisch asynchrone Kollektive aktivieren. |
xla_enable_async_collective_permute=kAuto |
xla_enable_async_collective_permute=kAuto |
xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled |
Memory-Flags
Die unten aufgeführten Flags sind für die Behebung von HBM-bezogenen Problemen vorgesehen. Diese sollten nur angepasst werden, wenn bei der Modellkompilierung HBM-Fehler aufgrund fehlenden Speichers auftreten. In allen anderen Fällen werden die Standardwerte empfohlen, da sich Änderungen negativ auf die Leistung auswirken können.
Flag | Beschreibung | Standardwerte | Vorgeschlagene Werte | Kandidatenwerte |
---|---|---|---|---|
Planer xla_latency_hiding_scheduler_rerun |
Mit dieser Einstellung wird das Verhalten des Planers zum Verbergen von Latenz angepasst. Dabei wird das für die Planung zugewiesene Speicherlimit mit jedem „Rerun“ des Prozesses schrittweise reduziert. | xla_latency_hiding_scheduler_rerun=1 |
xla_latency_hiding_scheduler_rerun=5 |
0~10(it doesn’t make much sense beyond 10 reruns) |
Fusion xla_tpu_rwb_fusion |
Dieses Flag aktiviert Fusions vom Typ „reduce+broadcast“ und kann die Arbeitsspeichernutzung verringern. | xla_tpu_rwb_fusion=true |
xla_tpu_rwb_fusion=false |
xla_tpu_rwb_fusion=true/false |
Planer xla_memory_scheduler |
Dieses Flag gibt den Algorithmus an, den der Memory-Scheduler verwendet, um den Speicherverbrauch zu minimieren. Mit einem komplexeren Algorithmus kann ein weniger speicherintensiver Zeitplan erstellt werden, allerdings auf Kosten einer längeren Kompilierungszeit. | xla_memory_scheduler=kDefault |
xla_memory_scheduler=kBrkga |
xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga |
Planer xla_tpu_enable_latency_hiding_scheduler |
Dieses Flag aktiviert den Scheduler für die Latenzverdeckung, der es uns ermöglicht, asynchrone statt synchroner Kollektive auszuführen. Wenn Sie diese Funktion deaktivieren, wird der Speicherverbrauch reduziert, allerdings geht die Leistungssteigerung durch diese asynchronen Vorgänge verloren. | xla_tpu_enable_latency_hiding_scheduler=true |
xla_tpu_enable_latency_hiding_scheduler=false |
xla_tpu_enable_latency_hiding_scheduler=true/false |
SPMD xla_jf_spmd_threshold_for_windowed_einsum_mib |
Mit diesem Flag wird der untere Schwellenwert für die Mindestgröße des Punkts festgelegt, um die kollektive Matmul-Operation auszulösen. Wenn Sie einen höheren Wert festlegen, sparen Sie Arbeitsspeicher, verlieren aber Möglichkeiten, kollektive Matmul-Operationen auszuführen. | xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 |
10Mb~1Gb (i.e. 10*1024*1024 ~ 1024*1024*1024) |
[0, 9223372036854775807] |
Weitere häufig verwendete Flags
Flag | Typ | Hinweise |
---|---|---|
xla_dump_to |
String (Dateipfad) | Der Ordner, in dem HLO-Dateien und andere Artefakte vor der Optimierung platziert werden (siehe XLA-Tools). |
TPU XLA-Flags
Flag | Typ | Hinweise |
---|---|---|
xla_tpu_enable_data_parallel_all_reduce_opt |
Boolesch (true/false) | Optimierung zur Erhöhung der Überschneidungsmöglichkeiten für All-Reduce-Vorgänge im DCN (Data Center Networking), die für die datenparallele Aufteilung verwendet werden. |
xla_tpu_data_parallel_opt_different_sized_ops |
Boolesch (true/false) | Ermöglicht das Pipelining von datenparallelen Vorgängen über mehrere Iterationen hinweg, auch wenn die Ausgabegrößen nicht mit den Größen übereinstimmen, die in den gestapelten Variablen gespeichert werden können. Kann zu Arbeitsspeichermangel führen. |
xla_tpu_spmd_rng_bit_generator_unsafe |
Boolesch (true/false) | Gibt an, ob der RngBitGenerator-HLO partitioniert ausgeführt werden soll. Dies ist unsicher, wenn deterministische Ergebnisse bei unterschiedlichen Shardings für verschiedene Teile der Berechnung erwartet werden. |
xla_tpu_megacore_fusion_allow_ags |
Boolesch (true/false) | Ermöglicht das Zusammenführen von „all-gather“-Vorgängen mit Faltungen/„all-reduce“-Vorgängen. |
xla_tpu_enable_ag_backward_pipelining |
Boolesch (true/false) | Pipelines werden rückwärts durch Scan-Schleifen zusammengeführt (derzeit Megascale-Zusammenführungen). |
GPU-XLA-Flags
Flag | Typ | Hinweise |
---|---|---|
xla_gpu_enable_latency_hiding_scheduler |
Boolesch (true/false) | Dieses Flag ermöglicht es Schedulern, die Latenz verbergen, asynchrone Kommunikation effizient mit Berechnungen zu überlappen. Der Standardwert lautet False. |
xla_gpu_enable_triton_gemm |
Boolesch (true/false) | Triton-basierte Matrixmultiplikation verwenden. |
xla_gpu_graph_level |
Flag (0–3) | Das Legacy-Flag zum Festlegen der GPU-Grafikebene. Verwenden Sie xla_gpu_enable_command_buffer in neuen Anwendungsfällen. 0 = aus; 1 = Fusions und Memcpys erfassen; 2 = GEMMs erfassen; 3 = Faltungen erfassen. |
xla_gpu_all_reduce_combine_threshold_bytes |
Ganzzahl (Byte) | Mit diesen Flags wird festgelegt, wann mehrere kleine AllGather-, ReduceScatter- oder AllReduce-Vorgänge in einen großen AllGather-, ReduceScatter- oder AllReduce-Vorgang zusammengefasst werden, um die für die geräteübergreifende Kommunikation benötigte Zeit zu verkürzen. Bei den AllGather-/ReduceScatter-Schwellenwerten für eine Transformer-basierte Arbeitslast sollten Sie sie beispielsweise so hoch einstellen, dass mindestens das Gewicht von AllGather / ReduceScatter einer Transformer-Schicht kombiniert wird. Standardmäßig ist „combine_threshold_bytes“ auf 256 festgelegt. |
xla_gpu_all_gather_combine_threshold_bytes |
Ganzzahl (Byte) | Siehe oben unter „xla_gpu_all_reduce_combine_threshold_bytes“. |
xla_gpu_reduce_scatter_combine_threshold_bytes |
Ganzzahl (Byte) | Siehe oben unter „xla_gpu_all_reduce_combine_threshold_bytes“. |
xla_gpu_enable_pipelined_all_gather |
Boolesch (true/false) | Aktivieren Sie das Pipelining von All-Gather-Anweisungen. |
xla_gpu_enable_pipelined_reduce_scatter |
Boolesch (true/false) | Pipelining von Reduce-Scatter-Anweisungen aktivieren. |
xla_gpu_enable_pipelined_all_reduce |
Boolesch (true/false) | Aktivieren Sie das Pipelining von All-Reduce-Anweisungen. |
xla_gpu_enable_while_loop_double_buffering |
Boolesch (true/false) | Aktivieren Sie die doppelte Pufferung für die while-Schleife. |
xla_gpu_enable_all_gather_combine_by_dim |
Boolesch (true/false) | Kombinieren Sie All-Gather-Vorgänge mit derselben Gather-Dimension oder unabhängig von ihrer Dimension. |
xla_gpu_enable_reduce_scatter_combine_by_dim |
Boolesch (true/false) | Kombinieren Sie Reduce-Scatter-Vorgänge mit derselben Dimension oder unabhängig von ihrer Dimension. |