Orientação sobre flags XLA

Este guia oferece uma seleção de flags principais do XLA para ajudar os usuários a navegar e usar os recursos do XLA de maneira eficaz. As seções a seguir detalham flags que podem afetar significativamente o desempenho do tempo de execução e a utilização da memória. Se ocorrerem problemas, como falhas, depois de ativar uma flag, recomendamos reverter para a configuração padrão e criar um problema no GitHub.

Flags de performance

As flags a seguir são importantes para melhorar o desempenho do ambiente de execução. Testar essas configurações pode gerar ganhos consideráveis de performance.

Sinalização Descrição Valores padrão Valores sugeridos Valores de candidatos
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
Essas três flags precisam ser usadas juntas para ativar o pipelining coletivo de operações de agregação total da ICI(Interchip-Interconnect), o que cria mais oportunidades de execução sobreposta. 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
Essas três flags precisam ser usadas juntas para ativar operações assíncronas de all-gather no v5e. 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
Essas duas flags precisam ser usadas juntas para ativar operações assíncronas de redução total no v5e. 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
Essa flag ativa a comunicação assíncrona de todos para todos. 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
Limitado por latência
xla_all_gather_latency_bound_threshold_in_bytes
Essa flag é destinada a operações de coleta total com limite de latência (ou seja, de tamanho pequeno). Ao ativar essa opção, você aciona otimizações específicas que podem reduzir o tempo de execução de all-gathers vinculados à latência. Normalmente, ele é usado em cargas de trabalho de inferência. xla_all_gather_latency_bound_threshold_in_bytes=-1
(que não está ativado)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
Limitado por latência
xla_all_reduce_latency_bound_threshold_in_bytes
Essa flag é destinada a operações de coleta total com limite de latência (ou seja, de tamanho pequeno). Ao ativar essa opção, você aciona otimizações específicas que podem reduzir o tempo de execução para all-reduces vinculados à latência. Normalmente, ele é usado em cargas de trabalho de inferência. xla_all_reduce_latency_bound_threshold_in_bytes=-1
(que não está ativado)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
Limitado por latência
xla_collective_permute_latency_bound_threshold_in_bytes
Essa flag é destinada a operações de coleta total com limite de latência (ou seja, de tamanho pequeno). Ativar essa opção aciona otimizações específicas que podem reduzir o tempo de execução para permutações coletivas vinculadas à latência. Normalmente, ele é usado em cargas de trabalho de inferência. xla_collective_permute_latency_bound_threshold_in_bytes=-1
(que não está ativado)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
Limitado por latência
xla_all_to_all_latency_bound_threshold_in_bytes
Essa flag é destinada a operações de coleta total com limite de latência (ou seja, de tamanho pequeno). Ativar essa opção aciona otimizações específicas que podem reduzir o tempo de execução para all-to-all vinculados à latência. Normalmente, ele é usado em cargas de trabalho de inferência. xla_all_to_all_latency_bound_threshold_in_bytes=-1
(que não está ativado)
4~16Mb(i.e. 4~16 * 1024 * 1024) [0, 9223372036854775807]
xla_enable_async_collective_permute Reescreve todas as operações de permutação coletiva para as variantes assíncronas. Quando definido como auto, o XLA pode ativar a coleta assíncrona com base em outras configurações ou condições automaticamente. xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled

Flags de memória

As flags listadas abaixo são fornecidas para resolver problemas relacionados à HBM. Esses valores só devem ser ajustados se você encontrar erros de falta de memória de HBM durante a compilação do modelo. Em todos os outros cenários, os valores padrão são recomendados, já que alterá-los pode afetar negativamente o desempenho.

Sinalização Descrição Valores padrão Valores sugeridos Valores de candidatos
Programador
xla_latency_hiding_scheduler_rerun
Essa configuração ajusta o comportamento do programador de ocultação de latência. Ele funciona reduzindo gradualmente o limite de memória alocado para o agendamento a cada "nova execução" do processo. xla_latency_hiding_scheduler_rerun=1 xla_latency_hiding_scheduler_rerun=5 0~10(it doesn’t make much sense beyond 10 reruns)
Fusão
xla_tpu_rwb_fusion
Essa flag ativa fusões do tipo redução+transmissão e pode diminuir o uso de memória. xla_tpu_rwb_fusion=true xla_tpu_rwb_fusion=false xla_tpu_rwb_fusion=true/false
Programador
xla_memory_scheduler
Essa flag especifica o algoritmo que o programador de memória vai usar para minimizar o consumo de memória. Usar um algoritmo mais avançado pode gerar um cronograma que consome menos memória, mas com um tempo de compilação maior. xla_memory_scheduler=kDefault xla_memory_scheduler=kBrkga xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga
Programador
xla_tpu_enable_latency_hiding_scheduler
Essa flag ativa o planejador de ocultação de latência, que permite realizar operações coletivas assíncronas em vez de síncronas. Desativá-la reduz o uso da memória, mas perde os ganhos de desempenho dessas operações assíncronas. 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
Essa flag define o limite inferior do tamanho mínimo do ponto para acionar a multiplicação de matrizes coletiva. Definir um valor mais alto economizaria memória, mas perderia oportunidades de realizar a multiplicação de matrizes coletiva. xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 10Mb~1Gb (i.e. 10*1024*1024 ~ 1024*1024*1024) [0, 9223372036854775807]

Outras flags usadas com frequência

Sinalização Tipo Observações
xla_dump_to String (filepath) A pasta em que os arquivos HLO pré-otimização e outros artefatos serão colocados. Consulte Ferramentas XLA.

Flags do TPU XLA

Sinalização Tipo Observações
xla_tpu_enable_data_parallel_all_reduce_opt Booleano (verdadeiro/falso) Otimização para aumentar as oportunidades de sobreposição de todas as reduções de DCN (rede de data center) usadas para fragmentação paralela de dados.
xla_tpu_data_parallel_opt_different_sized_ops Booleano (verdadeiro/falso) Permite o encadeamento de operações paralelas de dados em várias iterações, mesmo que os tamanhos de saída não correspondam ao que pode ser salvo no lugar das variáveis empilhadas. Pode aumentar a pressão da memória.
xla_tpu_spmd_rng_bit_generator_unsafe Booleano (verdadeiro/falso) Executar ou não o HLO RngBitGenerator de maneira particionada, o que é inseguro se resultados determinísticos forem esperados com diferentes fragmentações em diferentes partes da computação.
xla_tpu_megacore_fusion_allow_ags Booleano (verdadeiro/falso) Permite a fusão de all-gathers com convoluções/all-reduces.
xla_tpu_enable_ag_backward_pipelining Booleano (verdadeiro/falso) Os pipelines fazem a coleta de todos os dados (atualmente, coleta de todos os dados em grande escala) de trás para frente nos loops de verificação.

Flags XLA da GPU

Sinalização Tipo Observações
xla_gpu_enable_latency_hiding_scheduler Booleano (verdadeiro/falso) Essa flag permite que os programadores de ocultação de latência sobreponham a comunicação assíncrona com a computação de maneira eficiente. O valor padrão é False.
xla_gpu_enable_triton_gemm Booleano (verdadeiro/falso) Use a multiplicação de matrizes baseada em Triton.
xla_gpu_graph_level Sinalização (0 a 3) A flag legada para definir o nível do gráfico da GPU. Use xla_gpu_enable_command_buffer em novos casos de uso. 0 = desativado; 1 = captura fusões e memcpys; 2 = captura gemms; 3 = captura convoluções.
xla_gpu_all_reduce_combine_threshold_bytes Número inteiro (bytes) Essas flags ajustam quando combinar vários AllGather / ReduceScatter / AllReduce pequenos em um grande AllGather / ReduceScatter / AllReduce para reduzir o tempo gasto na comunicação entre dispositivos. Por exemplo, para os limites de AllGather / ReduceScatter em uma carga de trabalho baseada em Transformer, ajuste-os para que combinem pelo menos um AllGather / ReduceScatter de peso de camada do Transformer. Por padrão, o combine_threshold_bytes é definido como 256.
xla_gpu_all_gather_combine_threshold_bytes Número inteiro (bytes) Consulte xla_gpu_all_reduce_combine_threshold_bytes acima.
xla_gpu_reduce_scatter_combine_threshold_bytes Número inteiro (bytes) Consulte xla_gpu_all_reduce_combine_threshold_bytes acima.
xla_gpu_enable_pipelined_all_gather Booleano (verdadeiro/falso) Ativa o encadeamento de instruções all-gather.
xla_gpu_enable_pipelined_reduce_scatter Booleano (verdadeiro/falso) Ativa o encadeamento de instruções de redução e dispersão.
xla_gpu_enable_pipelined_all_reduce Booleano (verdadeiro/falso) Ativa o encadeamento de instruções all-reduce.
xla_gpu_enable_while_loop_double_buffering Booleano (verdadeiro/falso) Ative o buffer duplo para o loop "while".
xla_gpu_enable_all_gather_combine_by_dim Booleano (verdadeiro/falso) Combine operações all-gather com a mesma dimensão de coleta ou independente da dimensão.
xla_gpu_enable_reduce_scatter_combine_by_dim Booleano (verdadeiro/falso) Combine operações de redução e dispersão com a mesma dimensão ou independente da dimensão.