При загрузке 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
.