W tym dokumencie podsumowujemy wytyczne dotyczące wdrażania i sprawdzania operacji dla tłumacza. Celowo uwzględniliśmy kilka działań pomocniczych związanych z weryfikacją i wnioskowaniem typu, mając na uwadze pomysł na postępy w tych obszarach, oprócz wdrożenia tłumacza.
Podczas wdrażania operacji
- Udostępnij wyraźnie pisemną strategię testowania (w opisie PR), która jest podobna do tej, i wykorzystaj ją jako punkt odniesienia przy sprawdzaniu metod weryfikacji i wnioskowania typu oraz odpowiednich testów. Weryfikator dokładnie sprawdzi, czy opis jest wyczerpujący.
- Zajrzyj na stronę hlo_evaluator, aby poznać trudne szczegóły implementacji i potencjalne luki w funkcjach.
- Jeśli znajdziesz błędy lub brakujące funkcje, możesz przesyłać zgłoszenia dotyczące odpowiednich komponentów oprogramowania.
Po wdrożeniu operacji
-
- Upewnij się, że element
summary
w ODS operacji jest zgodny ze standardowym formatem. (powiązany bilet) Dodaj komentarze odwołujące się do etykiet ograniczeń (np.
Cn
lubIn
) ze specyfikacji w formaciexyz_cn
lubxyz_in
dla operacjiXyzOp
, aby określić zależności między ograniczeniami w ODS a specyfikacją. Poniższy przykład pokazuje, jak dodać etykiety ograniczeń jako komentarze obok systemów mlirTraits
iTypeConstraints
. Uwagaxyz_c4
odnosi się do ograniczeń zdefiniowanych w klasieStableHLO_FooOp
(np.StableHLO_ShapedInterfaceOp
,StableHLO_UnaryElementwiseOp
,StableHLO_Op
itp.).def StableHLO_XyzOp: StableHLO_FooOp<"xyz", [Trait1, Trait2 /*xyz_c1, xyz_c2*/, InferTensorType /*xyz_c3*/]> { /*xyz_c4*/ ... let summary = "Xyz operation"; let arguments = (ins 1DTensorOf<[HLO_Float]>:$a, /*xyz_c5, xyz_i1*/ HLO_Tensor:$b, /*xyz_i2*/ .... ); );
- Upewnij się, że element
W plikach TypeInference.cpp i StablehloOps.cpp:
- Usuń komentarze typu „Zweryfikuj te usługi: ...”.
- Dodaj komentarze odwołujące się do etykiet ograniczeń (np.
Cn
lubIn
) ze specyfikacji w formaciexyz_cn
lubxyz_in
dla operacjiXyzOp
, aby określić, które części weryfikatorów i funkcji kształtu odpowiadają określonym ograniczeniom w specyfikacji.- Można mieć komentarz z wieloma etykietami ograniczenia lub wiele komentarzy z tą samą etykietą ograniczenia. Wszystko zależy od sposobu
stosowania ograniczeń. Jeśli występują następujące po sobie ograniczenia, skróć je jako
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - W razie rozbieżności między ograniczeniami w implementacji a tymi w specyfikacji upewnij się, że występuje otwarty problem odzwierciedlający tę rozbieżność.
- Można mieć komentarz z wieloma etykietami ograniczenia lub wiele komentarzy z tą samą etykietą ograniczenia. Wszystko zależy od sposobu
stosowania ograniczeń. Jeśli występują następujące po sobie ograniczenia, skróć je jako
W przypadku testów tłumaczeniowych:
- Dodaj plik o nazwie
interpret_<op_mnemonic>.mlir
. - Napisz testy zgodnie ze wskazówkami dotyczącymi testowania.
- Dodaj plik o nazwie
-
- Uruchom wszystkie wyłączone testy, które są objęte nowo dodaną operacją.
- Jeśli testy zakończą się powodzeniem, włącz je, konwertując
RUN-DISABLED
naRUN
. - Jeśli test zakończy się z innego powodu niż niezgodności w dokładności, napraw implementację/test.
- W przypadku niezgodności precyzji oznacz test tagiem
RUN-DISABLED(#1278)
(jeśli nie jest jeszcze zakończony).
W pliku ops_stablehlo.mlir:
- Upewnij się, że dla każdego ograniczenia w narzędziu do weryfikacji i metod wnioskowania typu występuje co najmniej jeden test (pozytywny lub ujemny). Ograniczenia uwzględnione w ODS nie będą testowane. Będą one w większości ujemne oraz że ograniczenia nie będą spełnione lub będą dodatnie, a także sprawdź, czy wywnioskowany kształt jest prawidłowy.
- Upewnij się, że wszystkie testy związane z testowaną operacjami są uwzględnione w jednym miejscu.
- Sprawdź, czy wszystkie testy związane z testowaną operacjami są poprzedzone makrem
CHECK-LABEL
. - Wybierz nazwę funkcji testów w formacie
xyz_cn_im_...
na potrzeby ograniczeń testowania funkcjiCn
,Im
itp. dla operacjiXyzOp
. Jeśli proponowany format nie ma zastosowania, zachowaj istniejącą nazwę. - Po wykonaniu powyższego kroku posortuj alfabetycznie wszystkie testy związane z operacją w ramach testu, według nazwy funkcji.
- Dodawaj testy tak długo, aż ccov pokaże >= 90% pokrycia dla operacji.
W pliku infer_stablehlo.mlir:
- Sprawdź, czy w tym pliku znajdują się wszystkie ograniczenia związane z testami wnioskowania kształtów zgodnie z podanymi wyżej wytycznymi dotyczącymi nazewnictwa.
- Przenieś do tego pliku wszystkie testy wnioskowania na podstawie kształtów z pliku ops_stablehlo.mlir.
W pliku spec.md:
- W sekcji „Przykłady” dodaj link do tabeli
interpret_<op_mnemonic>.mlir
(np. Więcej przykładów). - Upewnij się, że specyfikacja zawiera tylko 1 przykład.
- Upewnij się, że przykładowa specyfikacja jest zgodna z wytycznymi dotyczącymi testowania.
- Dopilnuj, aby przykładowy test specyfikacji był zrozumiały.
- Upewnij się, że przykład specyfikacji jest taki sam jak w ODS.
- W sekcji „Przykłady” dodaj link do tabeli
W pliku status.md:
- Zmień ustawienie kolumny „Tłumacz” na
yes
.
- Zmień ustawienie kolumny „Tłumacz” na