Lista kontrolna specyfikacji StableHLO

W tym dokumencie znajdziesz wytyczne dotyczące sprawdzania zmian w specyfikacji. Obecnie zmiany te zazwyczaj wymagają sprawdzenia wielu rzeczy w wielu źródłach. W tym dokumencie podsumowaliśmy je, aby uprościć weryfikację:

  1. Sprawdź, czy w kolumnie „Specification” (Specyfikacja) w pliku status.md znajduje się wartość „yes” (tak). Jeśli dodajesz nową operację, dodaj wiersz.
  2. Sprawdź, czy tytuł sekcji jest zgodny z mnemotechniką operatora w ODS.
  3. Sprawdź, czy sekcja „Semantyki” jest zgodna z Semantyką operacji XLA.
  4. Sprawdź, czy sekcje „Dane wejściowe” i „Dane wyjściowe”:
    1. Wymień te same produkty co ODS.
    2. Umieść te same elementy co HloInstruction::CreateFromProto.
    3. są uporządkowane dokładnie tak jak ODS.
    4. Jeśli występują jakieś rozbieżności, sprawdź, czy istnieją odpowiednie zgłoszenia.
  5. Sprawdź, czy sekcja „Ograniczenia”:
    1. Pasuje do pliku shape_inference.cc XLA.
    2. Pasuje do pliku hlo_verifier.cc XLA.
    3. Pasuje do ODS.
    4. Pasuje do StablehloOps.cpp.
    5. Jeśli występują jakieś rozbieżności, sprawdź, czy istnieją odpowiednie zgłoszenia. Połącz wszystkie te bilety w specyfikacji w możliwie najbardziej szczegółowych lokalizacjach (np. jeśli zgłoszenie dotyczy ograniczenia, które nie zostało zaimplementowane, połącz zgłoszenie bezpośrednio z tym ograniczeniem).
    6. Jeśli odpowiednie części pliku ODS i StablehloOps.cpp są zgodne ze specyfikacją, sprawdź, czy w kolumnach „Weryfikacja” i „Wnioskowanie typu” w pliku status.md jest podana wartość „yes”.
  6. Sprawdź, czy sekcja „Przykłady”:
    1. Zawiera tylko 1 przykład. (W przyszłości podamy więcej przykładów z pakietu testowego tłumacza StableHLO).
    2. Wykorzystuje prawidłową składnię MLIR, uruchamiając stablehlo-opt na przykładach kodu.
    3. Wykorzystuje ogólną składnię MLIR, którą można uzyskać, uruchamiając stablehlo-opt -mlir-print-op-generic. W specyfikacji przestrzegamy ogólnej składni, aby uniknąć konieczności zmiany specyfikacji w przypadku zmian w ładowarce.
  7. Sprawdź, czy description w ODS operacji:
    1. Zawiera pierwsze zdanie specyfikacji.
    2. Następnie udostępnia link do odpowiedniej sekcji specyfikacji.
    3. Następnie użyto tego samego przykładu co w specyfikacji, ale z użyciem prostej składni, którą można uzyskać, uruchamiając polecenie stablehlo-opt.
  8. Sprawdź, czy pliki związane z implementacją ograniczeń weryfikacji i wnioskowania typu są zgodne z tymi wytycznymi:
    1. Postępuj zgodnie z wytycznymi nr 1 dotyczącymi StablehloOps.td.
    2. Postępuj zgodnie z wytycznymi #2 dotyczącymi TypeInference.cpp i StablehloOps.cpp.
    3. Postępuj zgodnie z wytycznymi #5 dotyczącymi pliku ops_stablehlo.mlir.
    4. Postępuj zgodnie z wytycznymi nr 6 dotyczącymi pliku infer_stablehlo.mlir.
  9. Oceń operację pod kątem efektów ubocznych i spekulacji.
    1. Jeśli operacja nie ma skutków ubocznych i zawsze można jej spekulować, nadaj jej cechę Pure. Jest to rzadkie, ponieważ większość operacji zezwala na dynamiczne kształty, co może prowadzić do niezgodności kształtów w czasie działania, co jest niezdefiniowanym zachowaniem. Niektóre operacje mogą mieć niezdefiniowane zachowanie w innych sytuacjach. Zdecydowana większość działań nie ma skutków ubocznych (powinien mieć cechę NoMemoryEffect).
    2. Większość działań kwalifikuje się do jednej z cech HLO_SpeculatableIf*. Jeśli Twoja opcja nie pasuje do żadnej z tych opcji, nadaj jej cechę ConditionallySpeculatable i zaimplementuj metody interfejsu. Dodaj testy do pola stablehlo/tests/ops_speculatability.mlir, aby objąć logikę spekulacji.