
Neden XLA'yı kurduk?
XLA'nın TensorFlow ile çalışması için birkaç hedefimiz vardı:
Yürütme hızını iyileştirin. TensorFlow çalışma zamanındaki ek yükü ortadan kaldırmak için kısa ömürlü Operasyonların yürütme süresini azaltmak için alt grafikler derleyin, bellek yükünü azaltmak için ardışık düzen operasyonlarını birleştirin ve daha agresif sabit yayılmaya izin vermek için bilinen tensör şekillerinde uzmanlaşın.
Bellek kullanımını iyileştirin. Prensipte birçok ara depolama arabelleğini ortadan kaldırarak bellek kullanımını analiz edin ve programlayın.
Özel Operasyonlara olan bağımlılığı azaltın. Otomatik olarak birleştirilen düşük seviyeli Operasyonların performansını, elle birleştirilen özel Operasyonların performansına uyacak şekilde iyileştirerek birçok özel Operasyona olan ihtiyacı ortadan kaldırın.
Mobil ayak izini azaltın. Alt grafiği önceden derleyerek ve doğrudan başka bir uygulamaya bağlanabilecek bir nesne/başlık dosya çifti yayarak TensorFlow çalışma zamanını ortadan kaldırın. Sonuçlar, mobil çıkarımın ayak izini birkaç büyüklük derecesinde azaltabilir.
Taşınabilirliği geliştirin. Yeni donanımlar için yeni bir arka uç yazmayı nispeten kolaylaştırın; bu noktada TensorFlow programlarının büyük bir kısmı bu donanım üzerinde değiştirilmeden çalışacaktır. Bu, TensorFlow programlarının bu Operasyonlardan yararlanmak için yeniden yazılmasını gerektiren yeni donanım için bireysel monolitik Operasyonları uzmanlaştırma yaklaşımıyla çelişir.
XLA nasıl çalışır?
XLA'ya giriş diline "HLO IR" veya yalnızca HLO (Yüksek Düzey İşlemler) adı verilir. HLO anlambilimleri açıklanmıştır Operasyonu Semantik sayfa. Bir şekilde HLO düşünmek için en uygun derleyici IR .
XLA, HLO'da tanımlanan grafikleri ("hesaplamalar") alır ve bunları çeşitli mimariler için makine talimatlarında derler. XLA bu alternatif arka uç yuvaya kolay olduğu anlamda modüler bazı yeni HW mimarisi hedef . x64 ve ARM64 için CPU arka ucu ve NVIDIA GPU arka ucu TensorFlow kaynak ağacındadır.
Aşağıdaki şema, XLA'daki derleme sürecini göstermektedir:

XLA gibi hedef bağımsız olan birkaç optimizasyon ve analiz geçer, ile birlikte CSE , hedef bağımsız çalışma füzyon ve hesaplama zamanı bellek tahsis etmek için analiz tampon.
Hedeften bağımsız adımdan sonra XLA, HLO hesaplamasını bir arka uca gönderir. Arka uç, bu sefer hedefe özel bilgi ve ihtiyaçları göz önünde bulundurarak HLO düzeyinde daha fazla optimizasyon gerçekleştirebilir. Örneğin, XLA GPU arka ucu, özellikle GPU programlama modeli için yararlı olan işlem füzyonunu gerçekleştirebilir ve hesaplamanın akışlara nasıl bölüneceğini belirleyebilir. Bu aşamada, arka uçlar ayrıca belirli işlemleri veya bunların kombinasyonlarını optimize edilmiş kitaplık çağrılarıyla kalıp eşleştirebilir.
Bir sonraki adım, hedefe özel kod oluşturmadır. İşlemci ve grafik işlemcisi arka uçları XLA kullanımı ile birlikte LLVM düşük seviyeli IR, optimizasyon ve kod üretimi için. Bu arka uçlar, XLA HLO hesaplamasını verimli bir şekilde temsil etmek için gerekli LLVM IR'sini yayar ve ardından bu LLVM IR'den yerel kod yaymak için LLVM'yi çağırır.
GPU arka ucu şu anda LLVM NVPTX arka ucu aracılığıyla NVIDIA GPU'ları desteklemektedir; CPU arka ucu, birden çok CPU ISA'sını destekler.