Viết bài kiểm thử đơn vị cho các lượt truyền HLO

Có nhiều cách để viết kiểm thử đơn vị cho các lượt truyền HLO. Trang này mô tả phương thức ưu tiên để đảm bảo tính nhất quán và khả năng đọc.

FileCheckCHECK dòng xen kẽ

Bạn có thể kiểm thử hầu hết các lượt truyền HLO bằng các kiểm thử FileCheck. Xen kẽ các dòng CHECK trong văn bản mô-đun HLO đầu vào và đảm bảo sử dụng // CHECK thay vì ; CHECK một cách đồng nhất làm dấu phân cách FileCheck.

Ví dụ: bạn có thể viết lại fusion cc_test cho một priotity_fusion truyền như sau:

TEST_F(PriorityFusionTest, FuseBroadcastIntoBitcastConsumers) {
  absl::string_view kHlo = R"(
    HloModule test_module

    // CHECK: ENTRY main
    ENTRY main {
      // CHECK-NEXT: %[[PARAM:.*]] = f32[96]{0} parameter(0)
      param_0 = f32[96]{0} parameter(0)
      broadcast = f32[8,96,128,7]{3,2,1,0} broadcast(param_0), dimensions={1}
      bitcast.6079.2 = f32[8,24,4,128,7]{4,3,2,1,0} bitcast(broadcast)
      // CHECK-NEXT: ROOT %{ {.*} } fusion(%[[PARAM]]) { {.*} }
      ROOT transpose.1990.2 = f32[8,24,128,7,4]{4,3,2,1,0} transpose(bitcast.6079.2), dimensions={0,1,3,4,2}
    }
  )";
  RunAndFilecheckHloRewrite(kHlo, std::move(priority_fusion_));
}

LIT runner và hlo-opt

Nếu có thể, hãy sử dụng trình chạy LIThlo-opt, đồng thời đặt các dòng CHECK cục bộ bên cạnh IR đầu vào mà chúng tương ứng. Một lần nữa, hãy nhớ sử dụng // CHECK thay vì ; CHECK làm dấu phân cách.

Ví dụ: bạn có thể viết một số kiểm thử GPU như sau:

// RUN: hlo-opt %s --platform=gpu --stage=llvm-before-optimizations --xla_gpu_target_config_filename=%S/../../../backends/gpu/specs/%{GPU}.txtpb | FileCheck --check-prefixes=CHECK-%{PTX} %s

HloModule Test, is_scheduled=true
fused_computation {
  param_0 = f32[100,200]{1,0} parameter(0)
  ROOT b.1 = f32[200,100]{1,0} transpose(f32[100,200]{1,0} param_0), dimensions={1,0}
}
ENTRY main {
  a = f32[100, 200]{1,0} parameter(0)
  // CHECK-PTX:         call void @llvm.nvvm.barrier0
  // CHECK-GCN:         call void @llvm.amdgcn.s.barrier
  ROOT wrapped_b = f32[200,100]{1,0} fusion(f32[100,200]{1,0} a), kind=kInput, calls=fused_computation
}

Tập lệnh tạo CHECK tự động

Việc viết các bước kiểm tra thử nghiệm theo cách thủ công có thể tốn nhiều công sức, vì vậy, thường sẽ thiết thực hơn khi chạy một trình tối ưu hoá, đọc kết quả để đảm bảo kết quả đó đáp ứng được kỳ vọng, sau đó chuyển đổi HLO được tối ưu hoá thành các chỉ thị CHECK. Để đơn giản hoá quy trình này, bạn có thể sử dụng generate_hlo_test_checks.py để tự động chèn các chỉ thị CHECK đã tạo ở trên mỗi trường hợp kiểm thử trong tệp HLO.

(Không) Duyệt đồ thị

Không viết các kiểm thử di chuyển các nút lá của biểu đồ kết quả và khớp với op dự kiến. Những kiểm thử này rất tẻ nhạt khi viết, khó đọc nhanh và khó gỡ lỗi và sửa chữa hơn. Thay vào đó, hãy sử dụng một trong các lựa chọn ở trên.