Bu ön kılavuz, TensorFlow'u donanımlarına verimli bir şekilde kolayca yeniden hedeflemek isteyen erken benimseyenler içindir. Kılavuz adım adım değildir ve LLVM , Bazel ve TensorFlow hakkında bilgi sahibi olur.
XLA, TensorFlow grafiklerini çalıştırmak için bir arka uç oluşturmak üzere yeni bir mimarinin veya hızlandırıcının uygulayabileceği soyut bir arabirim sağlar. Yeniden hedefleme XLA, yeni donanımlar için mevcut her TensorFlow Op'u uygulamaktan önemli ölçüde daha basit ve ölçeklenebilir olmalıdır.
Uygulamaların çoğu aşağıdaki senaryolardan birine girecektir:
- Mevcut CPU mimarisi henüz mevcut bir LLVM arka ucuyla veya olmadan XLA tarafından resmi olarak desteklenmemektedir.
- Mevcut LLVM arka ucuna sahip CPU benzeri olmayan donanım.
- Mevcut bir LLVM arka ucu olmayan CPU benzeri olmayan donanım.
Senaryo 1: XLA tarafından henüz resmi olarak desteklenmeyen mevcut CPU mimarisi
Bu senaryoda, mevcut XLA CPU arka ucuna bakarak başlayın. XLA, TensorFlow'u farklı CPU'lara LLVM kullanarak yeniden hedeflemeyi kolaylaştırır, çünkü CPU'lar için XLA arka uçları arasındaki temel fark LLVM tarafından üretilen koddur. Google, XLA'yı x64 ve ARM64 mimarileri için test eder.
Donanım satıcısının donanımları için LLVM arka ucu varsa, arka ucu XLA ile oluşturulan LLVM'ye bağlamak kolaydır. JIT modunda, XLA CPU arka ucu ana CPU için kod yayar. Zamanından önce derleme için,
xla::AotCompilationOptions hedef mimariyi yapılandırmak için bir LLVM üçlü sağlayabilir.
Mevcut bir LLVM arka ucu yoksa, ancak başka bir tür kod üreteci varsa, mevcut CPU arka ucunun çoğunu yeniden kullanmak mümkün olmalıdır.
Senaryo 2: Mevcut bir LLVM arka ucuna sahip CPU benzeri olmayan donanım
Mevcut
xla::CPUCompiler ve
xla::GPUCompiler sınıflarında yeni bir
xla::Compiler uygulaması modellemek mümkündür, çünkü bunlar zaten LLVM IR yayar. Donanımın doğasına bağlı olarak, birçok LLVM IR oluşturma yönünün değiştirilmesi gerekecektir, ancak mevcut arka uçlarla birçok kod paylaşılabilir.
Buna iyi bir örnek, XLA'nın GPU arka ucudur. GPU arka ucu CPU benzeri olmayan bir ISA'yı hedefler ve bu nedenle kod üretiminin bazı yönleri GPU etki alanına özgüdür. Diğer donanım türleri, örneğin Hexagon (yukarı doğru LLVM arka ucuna sahip) gibi DSP'ler, LLVM IR emisyon mantığının parçalarını yeniden kullanabilir, ancak diğer parçalar benzersiz olacaktır.
Senaryo 3: Mevcut bir LLVM arka ucu olmayan CPU benzeri olmayan donanım
LLVM kullanmak mümkün değilse, en iyi seçenek, istenen donanım için XLA için yeni bir arka uç uygulamaktır. Bu seçenek çok çaba gerektirir. Uygulanması gereken sınıflar aşağıdaki gibidir:
-
StreamExecutor: Birçok cihaz için tüm
StreamExecutoryöntemlerine gerek yoktur. Ayrıntılar için mevcut
StreamExecutoruygulamalarına bakın.
-
xla::Compiler: Bu sınıf, bir HLO hesaplamasının
xla::Executablederlenmesini içerir.
-
xla::Executable: Bu sınıf, platformda derlenmiş bir hesaplama başlatmak için kullanılır.
-
xla::TransferManager: Bu sınıf, arka uçların belirli cihaz bellek tanıtıcılarından XLA değişmez verilerini oluşturmak için platforma özgü mekanizmalar sağlamasına olanak tanır. Başka bir deyişle, ana bilgisayardan cihaza ve arkaya veri aktarımının kapsüllenmesine yardımcı olur.