Elenco di controllo per l'interprete StableHLO

In questo documento, riepiloghiamo le linee guida per l'implementazione e la revisione di un'opzione per l'interprete. Abbiamo intenzionalmente incluso alcune azioni ausiliarie relative alla verifica e all'inferenza dei tipi, con l'idea di fare progressi su questi fronti insieme all'implementazione dell'interprete.

Durante l'implementazione

  1. Fornisci una strategia di test esplicitamente scritta (in una descrizione di PR) simile a questa da utilizzare come riferimento durante l'esame dei metodi di verifica e di inferenza del tipo e dei test corrispondenti. Il revisore verificherà che la descrizione sia completa.
  2. Consulta hlo_evaluator per identificare i dettagli di implementazione complessi e potenziali lacune funzionali.
  3. Invia ticket per i componenti software corrispondenti se rilevi bug o funzionalità mancanti.

Dopo l'implementazione

  1. In StablehloOps.td:

    1. Assicurati che summary nella ODS dell'operazione segua il formato standard. (biglietto correlato)
    2. Aggiungi commenti che fanno riferimento a etichette di vincolo (ad esempio Cn o In) dalla specifica nel formato xyz_cn o xyz_in, per l'operazione XyzOp, per identificare la corrispondenza tra i vincoli nella ODS e nella specifica. L'esempio seguente mostra come aggiungere le etichette del vincolo come commenti insieme ai file Traits e TypeConstraints. Nota xyz_c4 fa riferimento ai vincoli definiti nella classe StableHLO_FooOp (ad esempio StableHLO_ShapedInterfaceOp, StableHLO_UnaryElementwiseOp, StableHLO_Op e così via).

       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*/
            ....
         );
      );
      
  2. In TypeInference.cpp e StablehloOps.cpp:

    1. Elimina i commenti con frasi come "Verifica le seguenti proprietà: ...".
    2. Aggiungi commenti che fanno riferimento alle etichette dei vincoli (ad es. Cn o In) dalla specifica nel formato xyz_cn o xyz_in, per l'operazione XyzOp, per identificare le parti dei verificatori e delle funzioni di forma corrispondenti a quali vincoli nella specifica.
      1. È consentito avere un commento con più etichette di vincolo o più commenti con la stessa etichetta di vincolo. Tutto dipende da come sono implementati i vincoli. Se ci sono vincoli consecutivi, condensali come xyz_cn...xyz_cm, xyz_in...xyz_jn.
      2. In caso di mancata corrispondenza tra i vincoli nella VS dell'implementazione e quelli nella specifica, assicurati che esista un problema in sospeso che rifletta questa discrepanza.
  3. Nei test dell'interprete:

    1. Aggiungi un file denominato interpret_<op_mnemonic>.mlir.
    2. Scrivi i test seguendo le linee guida sui test.
  4. Nella directory testdata:

    1. Esegui tutti i test disabilitati coperti dall'operazione appena aggiunta.
    2. Se i test hanno esito positivo, attivali convertendo RUN-DISABLED in RUN.
    3. Se un test non va a buon fine per un motivo diverso da una mancata corrispondenza di precisione, correggi l'implementazione/il test.
    4. In caso di mancata corrispondenza della precisione, tagga il test con RUN-DISABLED(#1278) (se non l'hai già fatto).
  5. In ops_stablehlo.mlir:

    1. Assicurati che sia presente almeno un test (positivo o negativo) per ogni vincolo nel verificatore e nei metodi di inferenza dei tipi; i vincoli coperti in ODS non verranno testati. Questi test saranno per lo più negativi, in quanto attestano che i vincoli non sono soddisfatti o positivi e che la forma dedotta è corretta.
    2. Assicurati che tutti i test relativi all'operazione in corso siano posizionati insieme.
    3. Assicurati che tutti i test relativi all'operazione sottoposta a test siano preceduti da una macro con CHECK-LABEL.
    4. Scegli il nome della funzione dei test utilizzando il formato xyz_cn_im_... per una funzione che testa i vincoli Cn, Im e così via per l'operazione XyzOp. Se il formato proposto non è applicabile, mantieni il nome esistente.
    5. Una volta completato il passaggio precedente, ordina tutti i test relativi all'operazione in fase di test in ordine alfabetico in base al nome della funzione.
    6. Continua ad aggiungere test fino a quando il ccov non mostra una copertura >= 90% per l'operazione.
  6. In infer_stablehlo.mlir:

    1. Assicurati che tutti i vincoli relativi ai test di inferenza della forma siano presenti in questo file, seguendo le stesse linee guida per la denominazione indicate sopra.
    2. Sposta tutti i test di inferenza delle forme dal file ops_stablehlo.mlir in questo file.
  7. In spec.md:

    1. Aggiungi un link a interpret_<op_mnemonic>.mlir nella sezione "Esempi" (ad es. Altri esempi).
    2. Assicurati che le specifiche abbiano un solo esempio.
    3. Assicurati che l'esempio di specifica sia conforme alle linee guida per i test.
    4. Assicurati che il test di esempio delle specifiche sia interpretabile.
    5. Assicurati che l'esempio di specifica corrisponda a quello indicato nell'ODS.
  8. In status.md:

    1. Aggiorna la colonna "Interprete" impostandola su yes.