Код ошибки: E3001

Категория: Разреженное ядро: Нет жизнеспособного количества логических реплик

Эта ошибка возникает, когда компилятор XLA:SparseCore не может определить допустимую конфигурацию количества логических реплик, которая позволяет рабочей нагрузке поместиться в локальную память временного хранилища SparseCore (Tilespmem).

Примеры сообщений об ошибках:

XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...

XLA Backends: TPU

Обзор

Эта ошибка характерна именно для сценариев использования SparseCore , в частности для больших моделей встраивания (LEM).

Количество логических реплик — это внутренний параметр компилятора, определяющий способ разделения входных пакетов для управления нагрузкой на память временного хранилища. Компилятор пытается разделить рабочую нагрузку на более мелкие части (реплики), чтобы промежуточные буферы, необходимые для каждой части, помещались в ограниченную память временного хранилища SparseCore. Как правило, большее количество логических реплик снижает нагрузку на память за счет обработки меньших пакетов данных за раз.

Эта ошибка указывает на то, что даже после попыток различных конфигураций разделения компилятор не смог найти такую ​​настройку, при которой необходимые буферы помещались бы в память Tilespmem. Размер выделения определяется комбинацией следующих факторов:

  • sample_count : Количество идентификаторов поиска встраивания, присвоенных каждому SparseCore (определяется размером пакета).
  • feature_width : Размер измерения встраивания.
  • max_nz_per_row : Максимальное количество неуникальных идентификаторов для поиска встраивания во всех разреженных ядрах.
  • max_unique_nz_per_row : Максимальное количество уникальных идентификаторов для поиска встраивания.

Отладка

Для устранения этой ошибки необходимо уменьшить нагрузку на память временного хранилища SparseCore.

1. Улучшение оценок метаданных

Компилятор выделяет память на основе max_nz_per_row и max_unique_nz_per_row . Если эти значения завышены (т.е. установлены значительно выше, чем требуется для фактических данных), компилятор зарезервирует лишнее пространство, что приведет к этой ошибке. Убедитесь, что эти параметры точно отражают фактическое распределение идентификаторов в вашем наборе данных.

Для определения оптимальных значений этих параметров можно рассмотреть возможность применения метода оптимизации с обратной связью (Feedback-Directed Optimization, FDO) .

2. Уменьшить размер партии.

sample_count напрямую зависит от глобального размера пакета. Уменьшение размера пакета снижает объем данных, которые каждый SparseCore должен обрабатывать за шаг, тем самым уменьшая размер необходимых буферов временной памяти.