Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Mengembangkan backend baru untuk XLA

Panduan pendahuluan ini adalah untuk pengguna awal yang ingin dengan mudah menargetkan ulang TensorFlow ke perangkat keras mereka secara efisien. Panduan ini tidak selangkah demi selangkah dan mengasumsikan pengetahuan tentang LLVM , Bazel , dan TensorFlow.

XLA menyediakan antarmuka abstrak yang dapat diterapkan arsitektur atau akselerator baru untuk membuat backend untuk menjalankan grafik TensorFlow. Penargetan Ulang XLA harus jauh lebih sederhana dan terukur daripada menerapkan setiap TensorFlow Op yang ada untuk perangkat keras baru.

Sebagian besar implementasi akan jatuh ke dalam salah satu skenario berikut:

  1. Arsitektur CPU yang ada belum secara resmi didukung oleh XLA, dengan atau tanpa backend LLVM yang ada.
  2. Perangkat keras mirip-CPU dengan backend LLVM yang ada.
  3. Perangkat keras yang tidak menyerupai CPU tanpa backend LLVM yang ada.

Skenario 1: Arsitektur CPU yang ada belum secara resmi didukung oleh XLA

Dalam skenario ini, mulai dengan melihat backend XLA CPU yang ada . XLA memudahkan penargetan ulang TensorFlow ke CPU yang berbeda dengan menggunakan LLVM, karena perbedaan utama antara backend XLA untuk CPU adalah kode yang dihasilkan oleh LLVM. Google menguji XLA untuk arsitektur x64 dan ARM64.

Jika vendor perangkat keras memiliki backend LLVM untuk perangkat keras mereka, mudah untuk menghubungkan backend dengan LLVM yang dibangun dengan XLA. Dalam mode JIT, CPU XL backend memancarkan kode untuk CPU host. Untuk kompilasi sebelumnya, xla::AotCompilationOptions dapat menyediakan triple LLVM untuk mengonfigurasi arsitektur target.

Jika tidak ada backend LLVM yang ada tetapi jenis generator kode lain ada, harus dimungkinkan untuk menggunakan kembali sebagian besar backend CPU yang ada.

Skenario 2: Perangkat keras yang tidak menyerupai CPU dengan backend LLVM yang ada

Dimungkinkan untuk memodelkan implementasi xla::Compiler pada kelas xla::CPUCompiler dan xla::GPUCompiler , karena ini sudah memancarkan LLVM IR. Bergantung pada sifat perangkat kerasnya, ada kemungkinan banyak aspek generasi IR LLVM harus diubah, tetapi banyak kode dapat dibagi dengan backend yang ada.

Contoh yang baik untuk diikuti adalah backend GPU dari XLA. Backend GPU menargetkan ISA yang tidak mirip CPU, dan karenanya beberapa aspek dari pembuatan kodenya unik untuk domain GPU. Jenis perangkat keras lain, misalnya DSP seperti Hexagon (yang memiliki backend LLVM hulu), dapat menggunakan kembali bagian dari logika emisi IR LLVM, tetapi bagian lain akan unik.

Skenario 3: Perangkat keras yang tidak seperti CPU tanpa backend LLVM yang ada

Jika tidak mungkin untuk menggunakan LLVM, maka opsi terbaik adalah menerapkan backend baru untuk XLA untuk perangkat keras yang diinginkan. Opsi ini membutuhkan upaya paling banyak. Kelas-kelas yang perlu diimplementasikan adalah sebagai berikut:

  • StreamExecutor : Untuk banyak perangkat tidak semua metode StreamExecutor diperlukan. Lihat implementasi StreamExecutor ada untuk detailnya.
  • xla::Compiler : Kelas ini merangkum kompilasi dari perhitungan HLO ke dalam xla::Executable .
  • xla::Executable : Kelas ini digunakan untuk meluncurkan komputasi yang dikompilasi di platform.
  • xla::TransferManager : Kelas ini memungkinkan backend untuk menyediakan mekanisme spesifik platform untuk membangun data literal XLA dari pegangan memori perangkat yang diberikan. Dengan kata lain, ini membantu merangkum transfer data dari host ke perangkat dan kembali.