W tym dokumencie podsumowujemy wytyczne wdrażania i sprawdzania propozycji dla tłumacza. Celowo dodaliśmy kilka działań pomocniczych związanych z weryfikatorem i wnioskowaniem o typach, z pomysłem na dokonanie postępów w tych obszarach wraz z implementacją tłumaczenia przez tłumacza.
Podczas wdrażania op
- Podaj jasno określoną strategię testowania (w opisie PR) podobną do tej, aby móc ją wykorzystać jako punkt odniesienia podczas sprawdzania metod weryfikacji i typowania oraz odpowiednich testów. Weryfikator dokładnie sprawdzi, czy opis jest pełny.
- Skonsultuj się z firmą hlo_evaluator, aby wykryć szczegóły dotyczące implementacji i potencjalne luki w funkcjonalności.
- Jeśli znajdziesz błędy lub brakujące funkcje, prześlij zgłoszenia dotyczące odpowiednich komponentów oprogramowania.
Po wdrożeniu opcji
W pliku StablehloOps.td:
- Upewnij się, że
summary
w pliku ODS op jest zgodny ze standardowym formatem. (powiązane zgłoszenie) Dodaj komentarze odwołujące się do etykiet ograniczeń (np.
Cn
lubIn
) ze specyfikacji w formaciexyz_cn
lubxyz_in
, dla opXyzOp
, aby wskazać zgodność ograniczeń w pliku ODS ze specyfikacją. Poniższy przykład pokazuje, jak dodać etykiety ograniczeń jako komentarze obok mlirTraits
iTypeConstraints
. Uwaga:xyz_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
W plikach TypeInference.cpp i StablehloOps.cpp:
- Usuń komentarze, które zawierają takie informacje jak „Zweryfikuj te właściwości: ...”.
- Dodaj komentarze odwołujące się do etykiet ograniczeń (np.
Cn
lubIn
) z specyfikacji w formaciexyz_cn
lubxyz_in
, dla opcjiXyzOp
, aby wskazać, które części weryfikatorów i funkcji kształtowania odpowiadają któremu ograniczeniu w specyfikacji.- Możesz mieć komentarz z wieloma etykietami ograniczeń lub wiele komentarzy z tą samą etykietą ograniczenia. Wszystko zależy od tego, jak są one implementowane. Jeśli występują kolejne ograniczenia, skróć je do
xyz_cn...xyz_cm, xyz_in...xyz_jn
. - Jeśli występują rozbieżności między ograniczeniami w implementacji a ograniczeniami w specyfikacji, otwórz zgłoszenie problemu, aby odzwierciedlić tę rozbieżność.
- Możesz mieć komentarz z wieloma etykietami ograniczeń lub wiele komentarzy z tą samą etykietą ograniczenia. Wszystko zależy od tego, jak są one implementowane. Jeśli występują kolejne ograniczenia, skróć je do
-
- Dodaj plik o nazwie
<op_mnemonic>.mlir
. - Pisz testy zgodnie z wytycznymi dotyczącymi testowania.
- Dodaj plik o nazwie
-
- Uruchom wszystkie wyłączone testy uwzględnione w nowo dodanej operacji.
- Jeśli testy się powiodą, włącz je, zmieniając wartość
RUN-DISABLED
naRUN
. - Jeśli test się nie powiedzie z jakiegoś powodu innego niż niedopasowanie dokładności, napraw implementację lub test.
- W przypadku niezgodności precyzji otaguj test tagiem
RUN-DISABLED(#1278)
(jeśli nie został już oznaczony).
W pliku ops_stablehlo.mlir:
- Upewnij się, że w metodach weryfikatora i typu wnioskowania jest co najmniej jeden test (pozytywny lub negatywny) dla każdej reguły w weryfikatorze; reguły objęte w ODS nie będą testowane. Te testy będą w większości negatywne, ponieważ sprawdzają, czy ograniczenia nie są spełnione, lub pozytywne, ponieważ sprawdzają, czy kształt jest prawidłowy.
- Upewnij się, że wszystkie testy związane z testowanym elementem zostały przeprowadzone razem.
- Upewnij się, że wszystkie testy związane z testowanym działaniem mają makro
CHECK-LABEL
na początku. - Wybierz nazwę funkcji testów, używając formatu
xyz_cn_im_...
dla ograniczeń testowania funkcjiCn
,Im
itd. dla opcjiXyzOp
. Jeśli proponowany format nie jest odpowiedni, zachowaj obecną nazwę. - Po wykonaniu powyższego kroku posortuj alfabetycznie wszystkie testy związane z testem operacji według nazwy funkcji.
- Dodawaj testy, aż ccov wykaże zasięg przekraczający 90% dla op.
W pliku infer_stablehlo.mlir:
- Upewnij się, że w tym pliku znajdują się wszystkie ograniczenia związane z testami wnioskowania o kształcie, zgodnie z wytycznymi dotyczącymi nazewnictwa podanymi powyżej.
- Przesuń wszystkie testy wnioskowania o kształcie z pliku ops_stablehlo.mlir do tego pliku.
W pliku spec.md:
- Dodaj link do
stablehlo/tests/interpret/<op_mnemonic>.mlir
w sekcji „Przykłady” (np. Więcej przykładów). - Upewnij się, że specyfikacja zawiera tylko 1 przykład.
- Upewnij się, że przykład specyfikacji jest zgodny z wytycznymi dotyczącymi testowania.
- Upewnij się, że test przykładu specyfikacji jest zrozumiały.
- Upewnij się, że przykładowa specyfikacja jest taka sama jak w atrybucie pozasądowego rozstrzygania sporów.
- Dodaj link do
W pliku status.md:
- Zaktualizuj kolumnę „Interpreter” na
yes
.
- Zaktualizuj kolumnę „Interpreter” na