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.
FileCheck có CHECK 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 LIT và hlo-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.