Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

XLA için yeni bir arka uç geliştirme

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:

  1. Mevcut bir LLVM arka ucu olsun veya olmasın mevcut CPU mimarisi henüz XLA tarafından resmi olarak desteklenmemektedir.
  2. Mevcut bir LLVM arka ucuna sahip CPU benzeri olmayan donanım.
  3. 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ğil StreamExecutor ihtiyaç vardır. Ayrıntılar için mevcut StreamExecutor uygulamalarına bakın.
  • xla::Compiler : Bu sınıf, bir HLO hesaplamasının derlemesini bir xla::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.