Есть некоторые проходы, которые мы считаем полезными (особенно в масштабе), но они увеличивают размер HLO и, следовательно, время компиляции. Поэтому они не включены по умолчанию. Для удобства мы объединяем их в один параметр.
Установка optimize_level на O1 или выше приведет к следующему поведению:
- Коллективы, обычно используемые для параллельной передачи данных, будут конвейеризированы. Это поведение также можно контролировать более детально, включая отдельные флаги.
-
xla_gpu_enable_pipelined_all_gather
-
xla_gpu_enable_pipelined_all_reduce
-
xla_gpu_enable_pipelined_reduce_scatter
-
- Развёртывание циклов while в два раза. Разрушает барьер цикла, что потенциально приводит к лучшему перекрытию вычислений и коммуникаций и уменьшению количества копий.
-
xla_gpu_enable_while_loop_double_buffering
-
- Планировщик скрытия задержек выполнит большую часть работы по сокрытию задержек связи.
-
xla_gpu_enable_latency_hiding_scheduler
-
- Для максимизации пропускной способности сети проходы комбинатора объединяют конвейерные коллективы, используя максимально доступный объём памяти. Оптимизация не срабатывает, если цикл уже развёрнут во входном HLO.