HLO geçişleri için birim testi yazmanın farklı yolları vardır. Bu sayfada, tutarlılık ve okunabilirlik sağlamak için tercih edilen yöntem açıklanmaktadır.
CHECK satır aralıklı FileCheck
Çoğu HLO geçişi, FileCheck testleri kullanılarak test edilebilir.
Giriş HLO modülü metinlerinde CHECK satırlarını araya yerleştirin ve FileCheck sınırlayıcısı olarak ; CHECK yerine //
CHECK kullanın.
Örneğin, priotity_fusion kartı için fusion cc_test ifadesini şu şekilde yeniden yazabilirsiniz:
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 koşucu ve hlo-opt
Mümkün olduğunda LIT runner ve hlo-opt kullanın ve CHECK satırlarını yerel olarak karşılık geldikleri giriş IR'lerinin yanına yerleştirin. Yine, sınırlayıcı olarak ; CHECK yerine // CHECK kullandığınızdan emin olun.
Örneğin, bazı GPU testleri şu şekilde yazılabilir:
// 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
}
Otomatik CHECK oluşturma komut dosyası
Test kontrollerini manuel olarak yazmak çok fazla iş gerektirebilir. Bu nedenle, genellikle bir optimize edici çalıştırmak, sonuçları beklentileri karşıladığından emin olmak için okumak ve ardından optimize edilmiş HLO'yu CHECK yönergelerine dönüştürmek daha pratiktir. Bu süreci basitleştirmek için generate_hlo_test_checks.py kullanarak oluşturulan CHECK yönergelerini bir HLO dosyasındaki her test senaryosunun üstüne otomatik olarak ekleyebilirsiniz.
(Don't) Graph traversal
Sonuç grafiğinin yaprak düğümlerinde ilerleyen ve beklenen işlemle eşleşen testler yazmaktan kaçının. Bu testlerin yazılması sıkıcıdır, hızlıca okunması zordur ve hata ayıklanması ile düzeltilmesi daha da zordur. Bunun yerine yukarıdaki seçeneklerden birini kullanın.