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

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

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

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

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

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

Статус

Стабильная операция HLO Спецификация Проверка Вывод типов Красивая печать Устный переводчик
пресс да да да да да
добавлять да да да да да
после всего да да да да да
все_собирать да повторное посещение нет нет да
все_редуцировать да повторное посещение да нет да
все_всем да повторное посещение да нет да
и да да да да да
атан2 да да да да да
batch_norm_grad да повторное посещение да нет повторное посещение
batch_norm_inference да повторное посещение да нет повторное посещение
batch_norm_training да повторное посещение да нет повторное посещение
bitcast_convert да да нецелесообразно да да
транслировать нет да* да* да повторное посещение
broadcast_in_dim да да нецелесообразно да да
случай да повторное посещение да нет да
cbrt да да да да да
потолок да да да да да
холески да да да да повторное посещение
зажим да повторное посещение да да да
коллективная_трансляция да повторное посещение да нет да
коллективная_потеря да повторное посещение да нет да
сравнивать да да да да да
сложный да да да да да
композитный да да нецелесообразно да да
конкатенировать да да да да да
постоянный да да да да да
конвертировать да да нецелесообразно да да
свертка да да нецелесообразно повторное посещение да
косинус да да да да да
count_leading_zeros да да да да да
создать_токен нет да* да* да повторное посещение
сумма перекрестных реплик нет повторное посещение да* нет повторное посещение
пользовательский_вызов да да нецелесообразно да да
разделять да да да да да
точка нет повторное посещение нецелесообразно да повторное посещение
dot_general да повторное посещение нецелесообразно нет да
dynamic_broadcast_in_dim да да нецелесообразно да повторное посещение
динамический_конв да да нецелесообразно повторное посещение повторное посещение
динамический_сбор да да нецелесообразно нет повторное посещение
dynamic_iota да да нецелесообразно да повторное посещение
динамический_пад да да нецелесообразно да повторное посещение
динамическая_изменение да да нецелесообразно да повторное посещение
динамический_срез да да да да да
dynamic_update_slice да да да да да
эйнсум нет повторное посещение нет да повторное посещение
экспоненциальный да да да да да
экспоненциальный_минус_один да да да да да
fft да повторное посещение да да да
пол да да да да да
собирать да да да нет да
get_dimension_size да да да да да
get_tuple_element да да да да да
если да повторное посещение да нет да
изображение да да да да да
подача да да нецелесообразно нет да
йота да да нецелесообразно да да
is_finite да да да да да
бревно да да да да да
log_plus_one да да да да да
логистика да да да да да
карта да повторное посещение да нет да
максимум да да да да да
минимум да да да да да
умножить да да да да да
отрицать да да да да да
нет да да да да да
оптимизация_барьер да да да да да
или да да да да да
выход да да да нет да
подушка да да да да да
partition_id да да да да да
попкнт да да да да да
власть да да да да да
настоящий да да да да да
реальный_динамический_срез нет повторное посещение нет да нет
рекв да да нецелесообразно нет да
уменьшать да повторное посещение да повторное посещение да
reduce_precision да да да да да
reduce_scatter да повторное посещение нет нет да
reduce_window да повторное посещение да нет да
остаток да да да да да
replica_id да да да да да
изменить форму да да нецелесообразно да да
возвращаться нет повторное посещение нецелесообразно да да
обеспечить регресс да да да да да
рнг да да да да повторное посещение
rng_bit_generator да повторное посещение нецелесообразно да повторное посещение
round_nearest_afz да да да да да
округление_ближайшего_четного да да да да да
rsqrt да да да да да
рассеяние да повторное посещение да нет да
выбирать да да да да да
select_and_scatter да повторное посещение да нет да
отправлять да да да нет да
set_dimension_size нет да* да* да нет
сдвиг_влево да да да да да
сдвиг_вправо_арифметика да да да да да
сдвиг_правый_логический да да да да да
знак да да да да да
синус да да да да да
ломтик да да да нет да
сортировка да да да нет да
кв. рт. да да да да да
вычесть да да да да да
загар да да да да да
танх да да да да да
torch_index_select нет повторное посещение нет нет повторное посещение
транспонировать да да да да да
triangular_solve да повторное посещение да нет повторное посещение
кортеж да да да да да
unary_einsum нет повторное посещение нет да повторное посещение
uniform_dequantize да да да да да
uniform_quantize да повторное посещение нецелесообразно да да
пока да повторное посещение да повторное посещение да
хор да да да да да

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

Столбец 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 , reduce_window , reverse , scatter , select_and_scatter , send , slice , sort , transpose , tuple , uniform_dequantized , while .