Стабильный статус HLO

При загрузке StableHLO из MHLO мы унаследовали реализацию многих вещей MHLO, включая красивую печать, проверку и вывод формы. Благодаря этому у нас уже есть значительный охват опсета, но еще многое предстоит сделать, чтобы проверить полноту существующих реализаций и предоставить новые реализации там, где их нет.

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

Как это использовать

Ход операции StableHLO, как указано в соответствующей строке, по конкретному аспекту, как указано в соответствующем столбце, отслеживается с помощью одной из следующих меток отслеживания.

  • Общие этикетки
    • да : есть комплексная реализация.
    • нет : реализации нет, но работа над этим является частью дорожной карты . Обратите внимание, что Verifier никогда не может быть помечен как «нет», поскольку ODS уже реализует некоторую проверку.
  • Настраиваемые метки для Verifier и Type Inference
    • да : реализация есть, и она синхронизирована с семантикой StableHLO .
    • да* : реализация есть, и она синхронизирована с семантикой XLA . Поскольку семантика XLA часто недостаточно документирована, мы используем hlo_verifier.cc и shape_inference.cc в качестве ссылки.
    • revisit : реализация есть, но она не подпадает ни под «да», ни под «да*» — либо потому, что мы ее еще не проверяли, либо потому, что у нас есть и обнаружены проблемы.
    • неосуществимо : реализации нет, потому что это неосуществимо. Например, потому, что тип результата операции не может быть выведен из ее операндов и атрибутов.

Положение дел

СтабильнаяHLO Операция Спецификация Проверка Вывод типа Красивая печать Устный переводчик
пресс да да да да да
добавлять да да да да да
после всего да да да да да
все_собрать да пересмотреть нет нет да
all_reduce да пересмотреть да нет да
all_to_all да пересмотреть да нет да
и да да да да да
Атан2 да да да да да
пакет_норм_град да пересмотреть да нет пересмотреть
пакетная норма_inference да пересмотреть да нет пересмотреть
Batch_norm_training да пересмотреть да нет пересмотреть
bitcast_convert да да неосуществимый да да
транслировать нет да* да* да пересмотреть
Broadcast_in_dim да да неосуществимый да да
случай да пересмотреть да нет да
CBRT да да да да да
клетка да да да да да
холецкий да да да да пересмотреть
зажим да пересмотреть да да да
коллективное_вещание да пересмотреть да нет да
коллективный_пермуте да пересмотреть да нет да
сравнивать да да да да да
сложный да да да да да
композитный да да неосуществимый да да
объединять да да да да да
постоянный да да да да да
конвертировать да да неосуществимый да да
свертка да да неосуществимый пересмотреть да
косинус да да да да да
count_leading_zeros да да да да да
create_token нет да* да* да пересмотреть
сумма перекрестных реплик нет пересмотреть да* нет пересмотреть
custom_call да да неосуществимый да да
разделять да да да да да
точка нет пересмотреть неосуществимый да пересмотреть
dot_general да пересмотреть неосуществимый нет да
Dynamic_broadcast_in_dim да да неосуществимый да пересмотреть
динамический_конв да да неосуществимый пересмотреть пересмотреть
динамический_сбор да да неосуществимый нет пересмотреть
динамическая_йота да да неосуществимый да пересмотреть
динамический_пад да да неосуществимый да пересмотреть
Dynamic_reshape да да неосуществимый да пересмотреть
динамический_срез да да да да да
Dynamic_update_slice да да да да да
эйнсум нет пересмотреть нет да пересмотреть
экспоненциальный да да да да да
экспоненциальный_минус_один да да да да да
фф да пересмотреть да да нет
пол да да да да да
собирать да да да нет да
get_dimension_size да да да да да
get_tuple_element да да да да да
если да пересмотреть да нет да
изображение да да да да да
подача да да неосуществимый нет да
йота да да неосуществимый да да
is_finite да да да да да
бревно да да да да да
log_plus_one да да да да да
логистический да да да да да
карта да пересмотреть да нет да
максимум да да да да да
минимум да да да да да
умножать да да да да да
отрицать да да да да да
нет да да да да да
оптимизация_барьер да да да да да
или да да да да да
перекормить да да да нет да
подушечка да да да да да
идентификатор_раздела да да да да да
попкнт да да да да да
власть да да да да да
настоящий да да да да да
real_dynamic_slice нет пересмотреть нет да нет
получение да да неосуществимый нет да
уменьшать да пересмотреть да пересмотреть да
уменьшить_точность да да да да да
уменьшить_разброс да пересмотреть нет нет да
уменьшить_окно да пересмотреть да нет да
остаток да да да да да
id_реплики да да да да да
изменить форму да да неосуществимый да да
возвращаться нет пересмотреть неосуществимый да да
обеспечить регресс да да да да да
звонок да да да да пересмотреть
rng_bit_generator да пересмотреть неосуществимый да пересмотреть
round_nearest_afz да да да да да
round_nearest_even да да да да да
рскрт да да да да да
разбрасывать да пересмотреть да нет да
выбирать да да да да да
select_and_scatter да пересмотреть да нет да
отправлять да да да нет да
set_dimension_size нет да* да* да нет
сдвиг_влево да да да да да
Shift_right_arithmetic да да да да да
сдвиг_право_логический да да да да да
знак да да да да да
синус да да да да да
кусочек да да да нет да
Сортировать да да да нет да
кврт да да да да да
вычесть да да да да да
Тань да да да да да
torch_index_select нет пересмотреть нет нет пересмотреть
транспонировать да да да да да
triangular_solve да пересмотреть да нет пересмотреть
кортеж да да да да да
unary_einsum нет пересмотреть нет да пересмотреть
униформа_деквантизировать да да да да нет
униформа_квантизировать да пересмотреть неосуществимый да нет
пока да пересмотреть да пересмотреть да
исключающее ИЛИ да да да да да

Вывод типа для квантованных операций

Столбец Type Inference в таблице выше предназначен для сосредоточения внимания на неквантованных операциях. Для большинства операций квантования невозможно определить тип результата, поскольку параметры квантования типов результата могут отличаться от параметров квантования операндов. За исключением нескольких случаев, когда типы операндов и результатов должны совпадать одинаково или операция имеет ограничения, полезные для определения типа результата, такие операции перечислены ниже: all_gather , all_to_all , case , collective_permute , compare , concatenate , constant , dynamic_slice , dynamic_update_slice , gather , get_tuple_element , if , infeed , is_finite , map , optimization_barrier , outfeed , pad , recv , reduce , уменьшить_рассеивание , reduce_scatter , reverse reduce_window scatter , select_and_scatter , send , slice , sort , transpose , tuple , uniform_dequantized , while .