Checklist Penerjemah StableHLO

Dalam dokumen ini, kami merangkum panduan untuk mengimplementasikan dan meninjau operasi bagi penafsir. Kami sengaja menyertakan beberapa item tindakan tambahan yang terkait dengan verifier dan inferensi jenis, dengan ide untuk membuat progres di bidang tersebut bersama dengan implementasi penafsir.

Saat menerapkan operasi

  1. Berikan strategi pengujian yang ditulis secara eksplisit (dalam deskripsi PR) yang serupa dengan ini untuk digunakan sebagai referensi saat meninjau metode inferensi verifikasi dan jenis, serta pengujian yang terkait. Peninjau akan memeriksa kembali apakah deskripsinya komprehensif.
  2. Lihat hlo_evaluator untuk mengidentifikasi detail implementasi yang rumit dan potensi kesenjangan fungsi.
  3. Ajukan tiket untuk komponen software yang sesuai jika Anda menemukan bug atau fungsi yang tidak ada.

Setelah menerapkan operasi

  1. Di StablehloOps.td:

    1. Pastikan summary dalam ODS operasi mengikuti format standar. (tiket terkait)
    2. Tambahkan komentar yang mereferensikan label batasan (misalnya, Cn atau In) dari spec dalam format xyz_cn atau xyz_in, untuk op XyzOp, guna mengidentifikasi korespondensi antara batasan di ODS dan spesifikasi. Contoh berikut menunjukkan cara menambahkan label batasan sebagai komentar bersama mlir Traits dan TypeConstraints. Catatan xyz_c4 mengacu pada batasan yang ditentukan dalam class StableHLO_FooOp (misalnya StableHLO_ShapedInterfaceOp, StableHLO_UnaryElementwiseOp, StableHLO_Op, dll.).

       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. Di TypeInference.cpp dan StablehloOps.cpp:

    1. Hapus komentar yang berisi hal-hal seperti "Verifikasi properti berikut: ...".
    2. Tambahkan komentar yang mereferensikan label batasan (misalnya Cn atau In) dari spec dalam format xyz_cn atau xyz_in, untuk op XyzOp, guna mengidentifikasi bagian verifier dan fungsi bentuk yang sesuai dengan batasan dalam spesifikasi.
      1. Anda dapat memiliki komentar dengan beberapa label batasan atau memiliki beberapa komentar dengan label batasan yang sama. Semuanya bergantung pada cara batasan diterapkan. Jika ada batasan berturut-turut, ringkas batasan tersebut sebagai xyz_cn...xyz_cm, xyz_in...xyz_jn.
      2. Jika ada ketidakcocokan antara batasan dalam implementasi VS dan batasan dalam spesifikasi, pastikan ada masalah terbuka yang mencerminkan perbedaan tersebut.
  3. Dalam pengujian penafsir:

    1. Tambahkan file bernama <op_mnemonic>.mlir.
    2. Tulis pengujian dengan mengikuti panduan pengujian.
  4. Di direktori testdata:

    1. Jalankan pengujian yang dinonaktifkan yang tercakup dalam operasi yang baru ditambahkan.
    2. Jika lulus pengujian, aktifkan pengujian dengan mengonversi RUN-DISABLED menjadi RUN.
    3. Jika pengujian gagal karena alasan selain ketidakcocokan presisi, perbaiki implementasi/pengujian.
    4. Untuk ketidakcocokan presisi, beri tag pada pengujian dengan RUN-DISABLED(#1278) (jika belum dilakukan).
  5. Di ops_stablehlo.mlir:

    1. Pastikan ada setidaknya satu pengujian (positif atau negatif) untuk setiap batasan dalam metode verifier dan inferensi jenis; batasan yang tercakup dalam ODS tidak akan diuji. Pengujian ini sebagian besar akan bersifat negatif, yang menguji bahwa batasan tidak terpenuhi atau positif, yang menguji bahwa bentuk yang disimpulkan sudah benar.
    2. Pastikan semua pengujian yang terkait dengan operasi yang sedang diuji ditempatkan bersama.
    3. Pastikan semua pengujian yang terkait dengan operasi yang sedang diuji diawali dengan makro lit CHECK-LABEL.
    4. Pilih nama fungsi pengujian menggunakan format xyz_cn_im_... untuk batasan pengujian fungsi Cn, Im, dll. untuk op XyzOp. Jika format yang diusulkan tidak berlaku, pertahankan nama yang ada.
    5. Setelah langkah di atas selesai, urutkan semua pengujian yang terkait dengan op yang sedang diuji secara alfabetis berdasarkan nama fungsi.
    6. Terus tambahkan pengujian hingga ccov menampilkan cakupan >= 90% untuk operasi tersebut.
  6. Di infer_stablehlo.mlir:

    1. Pastikan semua batasan yang terkait dengan pengujian inferensi bentuk ada dalam file ini, dengan mengikuti pedoman penamaan yang sama seperti yang disebutkan di atas.
    2. Pindahkan pengujian inferensi bentuk dari file ops_stablehlo.mlir ke dalam file ini.
  7. Di spec.md:

    1. Tambahkan link ke stablehlo/tests/interpret/<op_mnemonic>.mlir ke bagian "Contoh" (misalnya Contoh Lainnya).
    2. Pastikan spesifikasi hanya memiliki 1 contoh.
    3. Pastikan contoh spesifikasi mengikuti panduan pengujian.
    4. Pastikan pengujian contoh spesifikasi dapat ditafsirkan.
    5. Pastikan contoh spesifikasi sama dengan yang ada di ODS.
  8. Di status.md:

    1. Perbarui kolom "Penafsir" menjadi yes.