HLO geçişleri için birim testleri yazma

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_));
}
benzer bir imza sağlar.

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.