При устранении неполадок, связанных с производительностью в распределенной среде, связь в сети центра обработки данных (DCN) (между различными хост-машинами) и связь по PCIe (между центральным процессором хоста и его локальным устройством TPU) тесно взаимосвязаны. Поскольку сетевые данные из DCN должны передаваться на TPU по локальной шине PCIe, узкие места в сети часто проявляются в виде перегрузки PCIe или проблем с производительностью центрального процессора хоста.
Для комплексного анализа этих узких мест следует собирать показатели производительности как с точки зрения устройства (PCIe), так и с точки зрения ЦП хоста (DCN/драйвер PCIe/события ОС).
1. На стороне устройства: Счетчики использования PCIe в прошивке
Для отслеживания локальных передач данных от хоста к устройству с точки зрения ускорительной карты (доступно на платформах TPU v6e и более новых) включите счетчики PCIe во встроенном программном обеспечении устройства. Это позволит измерить объем данных, которые, по данным встроенного программного обеспечения TPU, передаются по шине PCIe.
Для сбора этих метрик убедитесь, что вы собираете профиль с флагом --tpu_enable_fw_pcie_utilization_event=true .

2. На стороне хоста: Счетчики производительности хоста
Чтобы увидеть, как хост-машина обрабатывает сетевой и PCIe-трафик, XProf может собирать счетчики производительности хоста (например, промахи кэша ЦП на стороне хоста, пропускная способность памяти и стандартные метрики ОС доступны в perf-stat(1) ).
В основе XProf лежит подсистема мониторинга производительности Linux, использующая два ключевых интерфейса:
(1) Пользовательские события на стороне хоста через libpfm(3)
Библиотека libpfm(3) преобразует заданные пользователем строки событий (например, стандартные аппаратные счетчики или события конкретных сетевых/PCIe драйверов) в необработанные атрибуты аппаратных/ядерных счетчиков производительности. Если вам необходимо указать пользовательские события DCN или PCIe на стороне хоста, убедитесь, что ваши строки событий соответствуют синтаксису libpfm .
Пример указания пользовательских событий на стороне хоста:
jax.profiler.start(
# ... Some other flags...
advanced_configuration={'tpu_cpu_perf_counter_profile_events': 'branch-misses,cycles,L1-dcache-load-misses,L1-dcache-loads'})

(2) Конфигурации исходных атрибутов производительности через perf_event_open(2)
Для более сложных/сырых конфигураций событий (например, мультиплексирование на уровне ядра или контроллеры памяти):
Базовый системный вызов perf_event_open(2) используется XProf для выборки и подсчета этих событий хоста.
Для настройки любого атрибута perf_event_open :
jax.profiler.start(
# ... Some other flags...
advanced_configuration={'tpu_cpu_perf_counter_configs': '<config1>:<type1>:<name1>,<config2>:<type2>:<name2>'})
Где:
-
configиtypeсоответствуют параметрам структурыperf_event_attrвperf_event_open(2). -
name— это заданное пользователем строковое имя для отображения в окне просмотра трассировки.
Интервал выборки счетчика производительности ЦП
Для настройки интервала (в миллисекундах) сбора данных со счетчиков производительности ЦП используйте:
jax.profiler.start(
# ... Some other flags...
advanced_configuration={'tpu_cpu_perf_counter_interval_ms': <int_value>})
Отрегулируйте это значение, чтобы сбалансировать частоту выборки и накладные расходы. Меньший интервал позволяет собирать более частые выборки для захвата детального поведения за короткие промежутки времени, в то время как больший интервал предотвращает раздувание файла трассировки и перегрузку ЦП во время длительных циклов профилирования. Если tpu_cpu_perf_counter_interval_ms не указан, XProf возвращается к минимальному поддерживаемому периоду выборки в 10 мс .