Bu ön kılavuz, TensorFlow'u donanımlarına verimli bir şekilde kolayca yeniden hedeflemek isteyen ilk kullanıcılar içindir. Kılavuz adım adım değildir ve LLVM , Bazel ve TensorFlow hakkında bilgi sahibi olduğunu varsayar.
XLA, TensorFlow grafiklerini çalıştırmak üzere bir arka uç oluşturmak için yeni bir mimarinin veya hızlandırıcının uygulayabileceği soyut bir arabirim sağlar. Yeniden hedefleme XLA, yeni donanım için mevcut tüm TensorFlow Operasyonlarını uygulamaktan önemli ölçüde daha basit ve ölçeklenebilir olmalıdır.
Çoğu uygulama aşağıdaki senaryolardan birine girer:
- Mevcut bir LLVM arka ucu olsun veya olmasın mevcut CPU mimarisi henüz XLA tarafından resmi olarak desteklenmemektedir.
- Mevcut bir 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 yeniden hedeflemeyi LLVM kullanarak kolaylaştırır, çünkü CPU'lar için XLA arka uçları arasındaki temel fark, LLVM tarafından oluşturulan koddur. Google, x64 ve ARM64 mimarileri için XLA'yı test eder.
Donanım satıcısının donanımları için bir LLVM arka ucu varsa, arka ucu XLA ile oluşturulmuş LLVM ile bağlamak basittir. JIT modunda, XLA CPU arka ucu ana bilgisayar CPU'su için kod yayar. Önceden xla::AotCompilationOptions
derleme için xla::AotCompilationOptions
, hedef mimariyi yapılandırmak için bir LLVM üçlüsü sağlayabilir.
Mevcut LLVM arka ucu yoksa ancak başka tür bir kod oluşturucu varsa, mevcut CPU arka ucunun çoğunun yeniden kullanılması 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ı üzerinde yeni bir xla::Compiler
uygulaması modellemek mümkündür, çünkü bunlar zaten LLVM IR yaymaktadır. Donanımın doğasına bağlı olarak, LLVM IR oluşturma özelliklerinin çoğunun değiştirilmesi gerekebilir, ancak mevcut arka uçlarla birçok kod paylaşılabilir.
İzlenecek iyi bir örnek, XLA'nın GPU arka ucu . GPU arka ucu, CPU benzeri olmayan bir ISA'yı hedefler ve bu nedenle kod oluşturmanın bazı yönleri GPU etki alanına özgüdür. Diğer donanım türleri, örneğin Hexagon gibi DSP'ler (yukarı akış LLVM arka ucuna sahiptir), 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'den yararlanmak mümkün değilse, o zaman en iyi seçenek istenen donanım için XLA için yeni bir arka uç uygulamaktır. Bu seçenek en fazla çabayı gerektirir. Uygulanması gereken sınıflar aşağıdaki gibidir:
-
StreamExecutor
: Çoğu aygıt tüm yöntemler değilStreamExecutor
ihtiyaç vardır. Ayrıntılar için mevcutStreamExecutor
uygulamalarına bakın. -
xla::Compiler
: Bu sınıf, bir HLO hesaplamasının derlemesini birxla::Executable
dosyası içinde kapsüller. -
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 aygıt bellek tutamaçlarından XLA değişmez verileri oluşturmak için platforma özgü mekanizmalar sağlamasına olanak tanır. Başka bir deyişle, ana bilgisayardan cihaza ve geri veri aktarımının kapsüllenmesine yardımcı olur.