Checkliste für StableHLO-Interpreter

In diesem Dokument sind die Richtlinien für die Implementierung und Überprüfung eines Operation für den Interpreter. Wir haben absichtlich ein paar Hilfsmaßnahmen eingefügt, Elemente in Bezug auf die Verifizierung und Typableitung mit dem Ziel, Fortschritte zu erzielen neben der Dolmetscherimplementierung.

Bei der Implementierung des Vorgangs

  1. Stelle eine ausdrücklich schriftliche Teststrategie bereit (in einer PR-Beschreibung). ähnlich wie dies verwenden bei der Überprüfung der Verifizierung und Typableitung als Referenz. und die entsprechenden Tests. Der Prüfer überprüft dann noch einmal, ist die Beschreibung umfassend.
  2. Beratung hlo_evaluator um komplizierte Implementierungsdetails und potenzielle Funktionslücken zu identifizieren.
  3. Tickets für die entsprechenden Softwarekomponenten einreichen, wenn Sie Fehler finden oder fehlende Funktionen.

Nach der Implementierung des Vorgangs

  1. Führen Sie in StablehloOps.td folgende Schritte aus:

    1. Achten Sie darauf, dass summary in der ODS des Vorgangs dem Standardformat entspricht. (Zugehöriges Ticket)
    2. Fügen Sie Kommentare zu Einschränkungslabels (z.B. Cn oder In) aus dem im Format xyz_cn oder xyz_in, für Vorgang XyzOp, zur Identifizierung des Übereinstimmung zwischen den Einschränkungen in der außergerichtlichen Streitbeilegungsstelle und der Spezifikation. Die Das folgende Beispiel zeigt, wie Sie die Einschränkungslabels als Kommentare hinzufügen zusammen mit MLir Traits und TypeConstraints. Hinweis xyz_c4 bezieht sich auf in der Klasse StableHLO_FooOp definierte Einschränkungen (z.B. StableHLO_ShapedInterfaceOp, StableHLO_UnaryElementwiseOp, StableHLO_Op usw.).

       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 und StablehloOps.cpp:

    1. Löschen Sie Kommentare mit Informationen wie „Überprüfen Sie die folgenden Eigenschaften: ...“.
    2. Fügen Sie Kommentare zu Einschränkungslabels (z.B. Cn oder In) aus dem Spezifikation im Format xyz_cn oder xyz_in, für Vorgang XyzOp, zur Identifizierung welche Teile von Verifier und Formfunktionen welchen in der Spezifikation.
      1. Es ist in Ordnung, wenn Sie einen Kommentar mit mehreren Einschränkungslabels haben oder mehrere Kommentare mit demselben Einschränkungslabel. Alles hängt davon ab, wie die Einschränkungen umgesetzt werden. Bei aufeinanderfolgenden Einschränkungen und fassen Sie sie zu xyz_cn...xyz_cm, xyz_in...xyz_jn zusammen.
      2. Für den Fall, dass es eine Diskrepanz zwischen den Einschränkungen in der und denjenigen in der Spezifikation, ist ein offenes Problem, das diese Diskrepanz widerspiegelt.
  3. Für Interpretertests gilt Folgendes:

    1. Fügen Sie eine Datei mit dem Namen <op_mnemonic>.mlir hinzu.
    2. Schreiben Sie Tests unter Berücksichtigung der Testrichtlinien.
  4. Im Verzeichnis „testdata“:

    1. Führen Sie alle deaktivierten Tests aus, die vom neu hinzugefügten Vorgang abgedeckt werden.
    2. Wenn die Tests bestanden wurden, aktivieren Sie sie, indem Sie RUN-DISABLED in RUN konvertieren.
    3. Wenn ein Test aus einem anderen Grund als nicht übereinstimmenden Genauigkeitswerten fehlschlägt, beheben Sie das Implementierung/Test.
    4. Bei Genauigkeitsabweichungen taggen Sie den Test mit RUN-DISABLED(#1278) (wenn noch nicht erledigt ist).
  5. Führen Sie in ops_stablehlo.mlir folgende Schritte aus:

    1. Achten Sie darauf, dass für jedes Gerät mindestens ein Test (positiv oder negativ) vorhanden ist Einschränkung in den Verifier- und Typinferenzmethoden; Einschränkungen nicht getestet werden. Diese Tests sind meist negativ, Testen, ob die Einschränkungen nicht erfüllt oder positiv sind, und testen, abgeleitete Form korrekt ist.
    2. Achten Sie darauf, dass alle Tests für die zu testende Operation platziert sind miteinander verbinden.
    3. Alle Tests, die sich auf den Test beziehen, müssen mit vorangestelltem Makro CHECK-LABEL.
    4. Wählen Sie den Funktionsnamen der Tests im Format xyz_cn_im_... für Funktionstesteinschränkungen Cn, Im, usw. für Operation XyzOp. Wenn das vorgeschlagene Format nicht übernehmen, den vorhandenen Namen beibehalten.
    5. Sortieren Sie nach Abschluss des obigen Schritts alle Tests im Zusammenhang mit der Operation. anhand des Funktionsnamens alphabetisch sortiert.
    6. Fügen Sie bis zum ccov weitere Tests hinzu. eine Abdeckung von mindestens 90% für den Vorgang angezeigt wird.
  6. Führen Sie in infer_stablehlo.mlir folgende Schritte aus:

    1. Achten Sie darauf, dass alle Einschränkungen in Bezug auf Forminferenztests vorhanden sind in dieser Datei unter Berücksichtigung der oben genannten Benennungsrichtlinien bearbeiten.
    2. Verschieben Sie alle Forminferenztests aus ops_stablehlo.mlir. in diese Datei ein.
  7. Führen Sie in spec.md folgende Schritte aus:

    1. Link zu stablehlo/tests/interpret/<op_mnemonic>.mlir hinzufügen zu „Beispiele“ Abschnitt (z.B. Weitere Beispiele).
    2. Die Spezifikation darf nur ein Beispiel enthalten.
    3. Das Spezifikationsbeispiel muss den Testrichtlinien entsprechen.
    4. Der Test mit dem Beispiel der Spezifikation muss interpretierbar sein.
    5. Das Spezifikationsbeispiel muss mit den Angaben in der außergerichtlichen Streitbeilegungsstelle übereinstimmen.
  8. Führen Sie in status.md Folgendes aus:

    1. Dolmetscher aktualisieren in yes.