Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Opracowanie nowego zaplecza dla XLA

Ten wstępny przewodnik jest przeznaczony dla pierwszych użytkowników, którzy chcą łatwo i efektywnie przekierować TensorFlow na swój sprzęt. Przewodnik nie jest krok po kroku i zakłada znajomość LLVM , Bazel i TensorFlow.

XLA zapewnia abstrakcyjny interfejs, który nowa architektura lub akcelerator może zaimplementować w celu utworzenia zaplecza do uruchamiania wykresów TensorFlow. Retargeting XLA powinien być znacznie prostszy i skalowalny niż wdrażanie każdego istniejącego TensorFlow Op dla nowego sprzętu.

Większość implementacji należy do jednego z następujących scenariuszy:

  1. Istniejąca architektura procesora nie jest jeszcze oficjalnie obsługiwana przez XLA, z istniejącym zapleczem LLVM lub bez niego.
  2. Sprzęt inny niż CPU z istniejącym zapleczem LLVM.
  3. Sprzęt inny niż CPU bez istniejącego zaplecza LLVM.

Scenariusz 1: Istniejąca architektura procesora nie jest jeszcze oficjalnie obsługiwana przez XLA

W tym scenariuszu zacznij od spojrzenia na istniejący backend procesora XLA . XLA ułatwia przekierowanie TensorFlow do różnych procesorów przy użyciu LLVM, ponieważ główną różnicą między backendami XLA dla procesorów jest kod generowany przez LLVM. Google testuje XLA dla architektur x64 i ARM64.

Jeśli dostawca sprzętu ma zaplecze LLVM dla swojego sprzętu, łatwo jest połączyć zaplecze z LLVM zbudowanym z XLA. W trybie JIT backend XLA CPU emituje kod dla procesora hosta. W przypadku kompilacji z wyprzedzeniem xla::AotCompilationOptions może zapewnić potrójną wartość LLVM do skonfigurowania architektury docelowej.

Jeśli nie ma istniejącego zaplecza LLVM, ale istnieje inny rodzaj generatora kodu, powinno być możliwe ponowne wykorzystanie większości istniejącego zaplecza procesora.

Scenariusz 2: sprzęt niepodobny do procesora z istniejącym zapleczem LLVM

Możliwe jest modelowanie nowej implementacji xla::Compiler na istniejących xla::CPUCompiler i xla::GPUCompiler , ponieważ te już emitują LLVM IR. W zależności od rodzaju sprzętu możliwe jest, że wiele aspektów generowania LLVM IR będzie musiało zostać zmienionych, ale wiele kodu można udostępnić istniejącym backendom.

Dobrym przykładem do naśladowania jest zaplecze GPU XLA. Backend GPU jest ukierunkowany na ISA inny niż CPU, dlatego niektóre aspekty generowania kodu są unikalne dla domeny GPU. Inne rodzaje sprzętu, np. Procesory DSP, takie jak Hexagon (który ma wcześniejszy backend LLVM), mogą ponownie wykorzystywać części logiki emisji LLVM IR, ale inne części będą unikalne.

Scenariusz 3: sprzęt niepodobny do procesora bez istniejącego zaplecza LLVM

Jeśli nie jest możliwe wykorzystanie LLVM, najlepszą opcją jest zaimplementowanie nowego zaplecza dla XLA dla żądanego sprzętu. Ta opcja wymaga największego wysiłku. Klasy, które należy zaimplementować, są następujące:

  • StreamExecutor : W przypadku wielu urządzeń nie wszystkie metody StreamExecutor są potrzebne. Aby StreamExecutor szczegółowe informacje, zobacz istniejące implementacje StreamExecutor .
  • xla::Compiler : ta klasa hermetyzuje kompilację obliczeń HLO do pliku xla::Executable .
  • xla::Executable : Ta klasa służy do uruchamiania skompilowanych obliczeń na platformie.
  • xla::TransferManager : Ta klasa umożliwia backendom udostępnianie mechanizmów specyficznych dla platformy do konstruowania danych literałów XLA z danych uchwytów pamięci urządzenia. Innymi słowy, pomaga hermetyzować transfer danych z hosta do urządzenia iz powrotem.