Контрольный список спецификаций StableHLO

В этом документе мы суммируем рекомендации по рассмотрению изменений в спецификации. На данный момент эти изменения обычно включают проверку нескольких вещей в нескольких источниках, поэтому в этом документе они суммированы, чтобы упростить проверку:

  1. Убедитесь, что в столбце «Спецификация» в status.md указано «да», добавьте строку, если добавляете новую операцию.
  2. Проверьте, соответствует ли заголовок раздела мнемонике операции в ODS .
  3. Проверьте, соответствует ли раздел «Семантика» разделу «Семантика операций » XLA.
  4. Проверьте, есть ли в разделах «Входы» и «Выходы»:
    1. Перечислите те же элементы, что и СОД.
    2. Перечислите те же элементы, что и HloInstruction::CreateFromProto .
    3. Заказываются точно так же, как ODS.
    4. Если есть несоответствия, проверьте наличие соответствующих билетов.
  5. Проверьте, есть ли в разделе «Ограничения»:
    1. Соответствует shape_inference.cc XLA.
    2. Соответствует hlo_verifier.cc XLA.
    3. Соответствует ODS.
    4. Соответствует StablehloOps.cpp .
    5. Если есть несоответствия, проверьте наличие соответствующих билетов. Свяжите все эти заявки в спецификации в максимально конкретных местах (например, если заявка касается ограничения, которое не было реализовано, свяжите заявку прямо в этом ограничении).
    6. Если соответствующие части ODS и StablehloOps.cpp соответствуют спецификации, убедитесь, что в столбцах «Проверка» и «Вывод типа» в status.md указано «да».
  6. Проверьте, есть ли в разделе «Примеры»:
    1. Есть только один пример. (В будущем мы добавим ссылки на дополнительные примеры из набора тестов интерпретатора StableHLO).
    2. Использует действительный синтаксис MLIR, запуская stablehlo-opt в примерах кода.
    3. Использует общий синтаксис MLIR, который можно получить, запустив stablehlo-opt -mlir-print-op-generic (мы придерживаемся общего синтаксиса в спецификации, чтобы избежать необходимости изменять спецификацию при изменениях в Prettyprinter).
  7. Проверьте, что description в ODS операции:
    1. Включает первое предложение спецификации.
    2. Затем ссылки на соответствующий раздел спецификации.
    3. Затем используется тот же пример, что и в спецификации, но с использованием красивого синтаксиса, который можно получить, запустив stablehlo-opt .
  8. Убедитесь, что файлы, связанные с реализацией ограничений проверки и вывода типа, соответствуют рекомендациям, указанным ниже:
    1. Следуйте руководству № 1 для StablehloOps.td .
    2. Следуйте руководству №2 для TypeInference.cpp и StablehloOps.cpp .
    3. Следуйте руководству №5 для ops_stablehlo.mlir .
    4. Следуйте руководству №6 для infer_stablehlo.mlir .
  9. Оцените операцию на предмет побочных эффектов и возможности спекуляций .
    1. Если операция не имеет побочных эффектов и ее всегда можно спекулировать, придайте ей черту Pure . Это случается редко, поскольку большинство операций допускают использование динамических фигур, что может привести к несоответствию форм во время выполнения, что является неопределенным поведением. Некоторые операции могут иметь неопределенное поведение и в других ситуациях. Подавляющее большинство операций не имеют побочных эффектов (у них должна быть черта NoMemoryEffect ).
    2. Большинство операций попадают в одну из черт HLO_SpeculatableIf* . Если оператор не подходит ни под один из них, присвойте ему признак ConditionallySpeculatable и реализуйте методы интерфейса. Добавьте тесты в stablehlo/tests/ops_speculatability.mlir чтобы охватить логику спекулятивности.