En esta guía, se ofrece una selección de marcas clave de XLA para ayudar a los usuarios a navegar y utilizar las capacidades de XLA de manera eficaz. En las siguientes secciones, se detallan las marcas que pueden afectar significativamente el rendimiento del tiempo de ejecución y el uso de la memoria. Si surge algún problema, como fallas, después de habilitar una marca, se recomienda volver a la configuración predeterminada y crear un problema de GitHub.
Alertas de rendimiento
Las siguientes marcas son fundamentales para mejorar el rendimiento del tiempo de ejecución. Experimentar con estos parámetros de configuración puede generar mejoras considerables en el rendimiento.
Marcar | Descripción | Valores predeterminados | Valores sugeridos | Valores de candidatos |
---|---|---|---|---|
Canalización 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 |
Estas 3 marcas deben usarse en conjunto para habilitar la canalización colectiva de las operaciones de recopilación de todos de ICI(interconexión entre chips), lo que crea más oportunidades para la ejecución superpuesta. | 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 |
Estas 3 marcas deben usarse en conjunto para activar las operaciones de recopilación de todos asíncronas en 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 |
Estas 2 marcas se deben usar en conjunto para activar las operaciones de reducción total asíncronas en 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 |
Esta marca habilita la comunicación asíncrona de todos con 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 |
Vinculado a la latencia xla_all_gather_latency_bound_threshold_in_bytes |
Esta marca está diseñada para operaciones de recopilación de todos (es decir, de tamaño pequeño) vinculadas a la latencia. Habilitar esta opción activa optimizaciones específicas que pueden reducir el tiempo de ejecución de las operaciones all-gather vinculadas a la latencia. Por lo general, se usa en cargas de trabajo de inferencia. | xla_all_gather_latency_bound_threshold_in_bytes=-1 (que no está habilitado) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
Vinculado a la latencia xla_all_reduce_latency_bound_threshold_in_bytes |
Esta marca está diseñada para operaciones de recopilación de todos (es decir, de tamaño pequeño) vinculadas a la latencia. Habilitar este parámetro activa optimizaciones específicas que pueden reducir el tiempo de ejecución de las operaciones de reducción total vinculadas a la latencia. Por lo general, se usa en cargas de trabajo de inferencia. | xla_all_reduce_latency_bound_threshold_in_bytes=-1 (que no está habilitado) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
Vinculado a la latencia xla_collective_permute_latency_bound_threshold_in_bytes |
Esta marca está diseñada para operaciones de recopilación de todos (es decir, de tamaño pequeño) vinculadas a la latencia. Habilitar esta opción activa optimizaciones específicas que pueden reducir el tiempo de ejecución de las permutaciones colectivas vinculadas a la latencia. Por lo general, se usa en cargas de trabajo de inferencia. | xla_collective_permute_latency_bound_threshold_in_bytes=-1 (que no está habilitado) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
Vinculado a la latencia xla_all_to_all_latency_bound_threshold_in_bytes |
Esta marca está diseñada para operaciones de recopilación de todos (es decir, de tamaño pequeño) vinculadas a la latencia. Habilitar este parámetro activa optimizaciones específicas que pueden reducir el tiempo de ejecución para la operación de todos a todos vinculada a la latencia. Por lo general, se usa en cargas de trabajo de inferencia. | xla_all_to_all_latency_bound_threshold_in_bytes=-1 (que no está habilitado) |
4~16Mb(i.e. 4~16 * 1024 * 1024) |
[0, 9223372036854775807] |
xla_enable_async_collective_permute |
Vuelve a escribir todas las operaciones de collective-permute en sus variantes asíncronas. Cuando se configura en auto , XLA puede activar la comunicación colectiva asíncrona automáticamente en función de otras configuraciones o condiciones. |
xla_enable_async_collective_permute=kAuto |
xla_enable_async_collective_permute=kAuto |
xla_enable_async_collective_permute=kAuto/kEnabled/kDisabled |
Marcas de memoria
Las marcas que se indican a continuación se proporcionan para abordar los problemas relacionados con la HBM. Estos solo se deben ajustar si encuentras errores de "memoria insuficiente" de HBM durante la compilación del modelo. En todos los demás casos, se recomiendan los valores predeterminados, ya que modificarlos podría afectar negativamente el rendimiento.
Marcar | Descripción | Valores predeterminados | Valores sugeridos | Valores de candidatos |
---|---|---|---|---|
Programador xla_latency_hiding_scheduler_rerun |
Este parámetro de configuración ajusta el comportamiento del programador de ocultamiento de latencia. Funciona reduciendo de forma incremental el límite de memoria asignado para la programación con cada "nueva ejecución" del proceso. | 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 |
Esta marca habilita las fusiones de tipo reducción y transmisión, y puede disminuir el uso de memoria. | xla_tpu_rwb_fusion=true |
xla_tpu_rwb_fusion=false |
xla_tpu_rwb_fusion=true/false |
Programador xla_memory_scheduler |
Esta marca especifica el algoritmo que usará el programador de memoria para minimizar el consumo de memoria. Usar un algoritmo más avanzado podría generar una programación que consuma menos memoria, pero a costa de un tiempo de compilación más largo. | xla_memory_scheduler=kDefault |
xla_memory_scheduler=kBrkga |
xla_memory_scheduler=kDefault/kList/kDfs/kPostOrder/kBrkga |
Programador xla_tpu_enable_latency_hiding_scheduler |
Esta marca habilita el programador de ocultamiento de latencia, que nos permite realizar operaciones colectivas asíncronas en lugar de síncronas. Inhabilitarlo reduce el uso de memoria, pero se pierden las mejoras de rendimiento de estas operaciones así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 |
Esta marca establece el umbral inferior del tamaño mínimo del punto para activar la multiplicación de matrices colectiva. Si se establece en un valor más alto, se ahorraría memoria a costa de perder oportunidades para realizar la multiplicación de matrices colectiva. | xla_jf_spmd_threshold_for_windowed_einsum_mib=-1 |
10Mb~1Gb (i.e. 10*1024*1024 ~ 1024*1024*1024) |
[0, 9223372036854775807] |
Otras marcas de uso común
Marcar | Tipo | Notas |
---|---|---|
xla_dump_to |
Cadena (ruta de acceso al archivo) | Es la carpeta en la que se colocarán los archivos HLO previos a la optimización y otros artefactos (consulta Herramientas de XLA). |
Marcas de XLA de TPU
Marcar | Tipo | Notas |
---|---|---|
xla_tpu_enable_data_parallel_all_reduce_opt |
Booleano (verdadero o falso) | Se optimizó para aumentar las oportunidades de superposición de las operaciones all-reduce de la DCN (red del centro de datos) que se usan para el sharding paralelo de datos. |
xla_tpu_data_parallel_opt_different_sized_ops |
Booleano (verdadero o falso) | Permite la canalización de operaciones paralelas de datos en varias iteraciones, incluso si los tamaños de salida no coinciden con lo que se puede guardar en su lugar en las variables apiladas. Puede aumentar la presión de la memoria. |
xla_tpu_spmd_rng_bit_generator_unsafe |
Booleano (verdadero o falso) | Indica si se debe ejecutar el HLO de RngBitGenerator de forma particionada, lo que no es seguro si se esperan resultados determinísticos con diferentes fragmentaciones en diferentes partes del cálculo. |
xla_tpu_megacore_fusion_allow_ags |
Booleano (verdadero o falso) | Permite fusionar todas las recopilaciones con convoluciones o todas las reducciones. |
xla_tpu_enable_ag_backward_pipelining |
Booleano (verdadero o falso) | Las canalizaciones recopilan todos los datos (actualmente, recopilan todos los datos a gran escala) hacia atrás a través de los bucles de análisis. |
Marcas de XLA para GPU
Marcar | Tipo | Notas |
---|---|---|
xla_gpu_enable_latency_hiding_scheduler |
Booleano (verdadero o falso) | Esta marca permite que los programadores de ocultamiento de latencia superpongan la comunicación asíncrona con el procesamiento de manera eficiente. El valor predeterminado es False. |
xla_gpu_enable_triton_gemm |
Booleano (verdadero o falso) | Usa la multiplicación de matrices basada en Triton. |
xla_gpu_graph_level |
Marca (0-3) | Es la marca heredada para establecer el nivel del grafo de la GPU. Usa xla_gpu_enable_command_buffer en casos de uso nuevos. 0 = Desactivado; 1 = Captura fusiones y memcpys; 2 = Captura gemms; 3 = Captura convoluciones. |
xla_gpu_all_reduce_combine_threshold_bytes |
Número entero (bytes) | Estos parámetros ajustan el momento en que se deben combinar varias operaciones AllGather / ReduceScatter / AllReduce pequeñas en una sola operación AllGather / ReduceScatter / AllReduce grande para reducir el tiempo dedicado a la comunicación entre dispositivos. Por ejemplo, para los umbrales de AllGather / ReduceScatter en una carga de trabajo basada en Transformer, considera ajustarlos lo suficientemente altos como para combinar al menos el peso de la capa de Transformer AllGather / ReduceScatter. De forma predeterminada, combine_threshold_bytes se establece en 256. |
xla_gpu_all_gather_combine_threshold_bytes |
Número entero (bytes) | Consulta xla_gpu_all_reduce_combine_threshold_bytes más arriba. |
xla_gpu_reduce_scatter_combine_threshold_bytes |
Número entero (bytes) | Consulta xla_gpu_all_reduce_combine_threshold_bytes más arriba. |
xla_gpu_enable_pipelined_all_gather |
Booleano (verdadero o falso) | Habilita la canalización de instrucciones de all-gather. |
xla_gpu_enable_pipelined_reduce_scatter |
Booleano (verdadero o falso) | Habilita la canalización de instrucciones de reducción y dispersión. |
xla_gpu_enable_pipelined_all_reduce |
Booleano (verdadero o falso) | Habilita la canalización de todas las instrucciones de reducción. |
xla_gpu_enable_while_loop_double_buffering |
Booleano (verdadero o falso) | Habilita el almacenamiento intermedio doble para el bucle while. |
xla_gpu_enable_all_gather_combine_by_dim |
Booleano (verdadero o falso) | Combina todas las operaciones de recopilación con la misma dimensión de recopilación o independientemente de su dimensión. |
xla_gpu_enable_reduce_scatter_combine_by_dim |
Booleano (verdadero o falso) | Combina operaciones de reducción y dispersión con la misma dimensión o independientemente de su dimensión. |