Danh sách kiểm tra cho trình diễn giải StableHLO

Trong tài liệu này, chúng tôi tóm tắt các nguyên tắc triển khai và xem xét hoạt động của trình phiên dịch. Chúng tôi đã cố ý đưa vào một số mục hành động phụ liên quan đến trình xác minh và suy luận kiểu, với ý tưởng là tiến bộ trên những mặt đó cùng với việc triển khai trình thông dịch.

Trong khi triển khai toán tử

  1. Cung cấp một chiến lược kiểm thử bằng văn bản rõ ràng (trong phần mô tả PR) tương tự như tài liệu này để sử dụng làm tài liệu tham khảo trong khi xem xét phương thức xác minh và suy luận kiểu, cũng như các bài kiểm thử tương ứng. Nhân viên đánh giá sẽ kiểm tra kỹ để đảm bảo rằng nội dung mô tả là đầy đủ.
  2. Tham khảo hlo_evaluator để xác định các chi tiết triển khai khó khăn và những khoảng trống chức năng tiềm ẩn.
  3. Gửi phiếu yêu cầu hỗ trợ cho các thành phần phần mềm tương ứng nếu bạn phát hiện lỗi hoặc thiếu chức năng.

Sau khi triển khai toán tử

  1. Trong StablehloOps.td:

    1. Đảm bảo rằng summary trong ODS của thao tác tuân theo định dạng chuẩn. (vấn đề có liên quan)
    2. Thêm các nhận xét tham chiếu đến nhãn quy tắc ràng buộc (ví dụ: Cn hoặc In) từ quy cách ở định dạng xyz_cn hoặc xyz_in, cho toán tử XyzOp, để xác định mối tương ứng giữa các quy tắc ràng buộc trong ODS và quy cách. Ví dụ sau đây cho biết cách thêm nhãn quy tắc ràng buộc dưới dạng nhận xét cùng với mlir TraitsTypeConstraints. Lưu ý: xyz_c4 đề cập đến các quy tắc ràng buộc được xác định trong lớp StableHLO_FooOp (ví dụ: StableHLO_ShapedInterfaceOp, StableHLO_UnaryElementwiseOp, StableHLO_Op, v.v.).

       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. Trong TypeInference.cppStablehloOps.cpp:

    1. Hãy xoá các nhận xét có nội dung như "Xác minh các thuộc tính sau: ...".
    2. Thêm các nhận xét tham chiếu đến nhãn quy tắc ràng buộc (ví dụ: Cn hoặc In) từ thông số kỹ thuật ở định dạng xyz_cn hoặc xyz_in, cho toán tử XyzOp, để xác định phần nào của trình xác minh và hàm hình dạng tương ứng với quy tắc ràng buộc nào trong thông số kỹ thuật.
      1. Bạn có thể có một nhận xét có nhiều nhãn quy tắc ràng buộc hoặc có nhiều nhận xét có cùng một nhãn quy tắc ràng buộc. Tất cả phụ thuộc vào cách triển khai các quy tắc ràng buộc. Nếu có các quy tắc ràng buộc liên tiếp, hãy thu gọn các quy tắc đó thành xyz_cn...xyz_cm, xyz_in...xyz_jn.
      2. Trong trường hợp có sự không khớp giữa các quy tắc ràng buộc trong VS triển khai và các quy tắc ràng buộc trong quy cách, hãy đảm bảo có một vấn đề đang mở phản ánh sự khác biệt đó.
  3. Trong kiểm thử trình thông dịch:

    1. Thêm một tệp có tên là <op_mnemonic>.mlir.
    2. Viết mã kiểm thử theo nguyên tắc kiểm thử.
  4. Trong thư mục testdata:

    1. Chạy mọi kiểm thử đã tắt có trong thao tác mới được thêm vào.
    2. Nếu các chương trình kiểm thử đạt, hãy bật các chương trình đó bằng cách chuyển đổi RUN-DISABLED thành RUN.
    3. Nếu một kiểm thử không thành công vì lý do nào đó ngoài việc không khớp độ chính xác, hãy khắc phục cách triển khai/kiểm thử.
    4. Đối với các trường hợp không khớp chính xác, hãy gắn thẻ kiểm thử bằng RUN-DISABLED(#1278) (nếu bạn chưa thực hiện).
  5. Trong ops_stablehlo.mlir:

    1. Đảm bảo rằng có ít nhất một kiểm thử (dương tính hoặc âm tính) cho mỗi điều kiện ràng buộc trong trình xác minh và phương thức suy luận kiểu; các điều kiện ràng buộc được đề cập trong ODS sẽ không được kiểm thử. Các kiểm thử này chủ yếu sẽ là kiểm thử âm, kiểm thử rằng các điều kiện ràng buộc không được đáp ứng hoặc kiểm thử dương, kiểm thử rằng hình dạng suy luận là chính xác.
    2. Đảm bảo rằng tất cả các kiểm thử liên quan đến hoạt động đang kiểm thử được đặt cùng nhau.
    3. Đảm bảo rằng tất cả các kiểm thử liên quan đến toán tử đang được kiểm thử đều được thêm vào trước bằng một macro CHECK-LABEL sáng.
    4. Chọn tên hàm của các chương trình kiểm thử bằng định dạng xyz_cn_im_... cho các điều kiện ràng buộc kiểm thử hàm Cn, Im, v.v. cho toán tử XyzOp. Trong trường hợp định dạng đề xuất không áp dụng, hãy giữ nguyên tên hiện có.
    5. Sau khi hoàn tất bước trên, hãy sắp xếp tất cả các chương trình kiểm thử liên quan đến toán tử đang kiểm thử theo thứ tự bảng chữ cái dựa trên tên hàm.
    6. Tiếp tục thêm các bài kiểm thử cho đến khi ccov cho thấy mức độ sử dụng >= 90% cho toán tử.
  6. Trong infer_stablehlo.mlir:

    1. Đảm bảo tất cả các quy tắc ràng buộc liên quan đến thử nghiệm suy luận hình dạng đều hiện diện trong tệp này, tuân theo các nguyên tắc đặt tên tương tự đã nêu ở trên.
    2. Chuyển mọi bài kiểm thử suy luận hình dạng từ tệp ops_stablehlo.mlir vào tệp này.
  7. Trong spec.md:

    1. Thêm đường liên kết đến stablehlo/tests/interpret/<op_mnemonic>.mlir vào phần "Ví dụ" (ví dụ: Ví dụ khác).
    2. Đảm bảo rằng thông số kỹ thuật chỉ có 1 ví dụ.
    3. Đảm bảo ví dụ về thông số kỹ thuật tuân thủ nguyên tắc kiểm thử.
    4. Đảm bảo kiểm thử ví dụ về thông số kỹ thuật có thể được diễn giải.
    5. Đảm bảo ví dụ về thông số kỹ thuật giống với ví dụ trong ODS.
  8. Trong status.md:

    1. Cập nhật cột "Trình thông dịch" thành yes.