Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Arsitektur XLA

Mengapa kami membangun XLA?

Kami memiliki beberapa tujuan agar XLA dapat bekerja dengan TensorFlow:

  • Tingkatkan kecepatan eksekusi. Kompilasi subgraf untuk mengurangi waktu eksekusi Ops yang berumur pendek untuk menghilangkan overhead dari runtime TensorFlow, menggabungkan operasi pipelined untuk mengurangi overhead memori, dan mengkhususkan diri pada bentuk tensor yang diketahui untuk memungkinkan propagasi konstan yang lebih agresif.

  • Tingkatkan penggunaan memori. Menganalisis dan menjadwalkan penggunaan memori, pada prinsipnya menghilangkan banyak buffer penyimpanan perantara.

  • Kurangi ketergantungan pada Operasi kustom. Hilangkan kebutuhan akan banyak Op kustom dengan meningkatkan kinerja Ops tingkat rendah yang digabungkan secara otomatis agar sesuai dengan kinerja Ops kustom yang digabungkan dengan tangan.

  • Kurangi jejak seluler. Hilangkan runtime TensorFlow dengan mengompilasi subgraf lebih awal dan memancarkan pasangan file objek / header yang dapat ditautkan langsung ke aplikasi lain. Hasilnya dapat mengurangi footprint untuk inferensi seluler dengan beberapa kali lipat.

  • Tingkatkan portabilitas. Jadikan relatif mudah untuk menulis backend baru untuk perangkat keras baru, pada saat itu sebagian besar program TensorFlow akan berjalan tanpa modifikasi pada perangkat keras tersebut. Hal ini berbeda dengan pendekatan operasi monolitik individual yang mengkhususkan diri untuk hardware baru, yang mengharuskan program TensorFlow ditulis ulang untuk menggunakan Ops tersebut.

Bagaimana cara kerja XLA?

Bahasa input ke XLA disebut "HLO IR", atau hanya HLO (Operasi Tingkat Tinggi). Semantik HLO dijelaskan di halaman Semantik Operasi . Paling mudah untuk menganggap HLO sebagai IR kompilator .

XLA mengambil grafik ("komputasi") yang didefinisikan dalam HLO dan mengkompilasinya menjadi instruksi mesin untuk berbagai arsitektur. XLA bersifat modular dalam arti mudah untuk memasukkan backend alternatif untuk menargetkan beberapa arsitektur HW baru . Backend CPU untuk x64 dan ARM64 serta backend GPU NVIDIA ada di pohon sumber TensorFlow.

Diagram berikut menunjukkan proses kompilasi di XLA:

XLA dilengkapi dengan beberapa pengoptimalan dan analisis lolos yang tidak bergantung pada target, seperti CSE , fusi operasi tidak bergantung target, dan analisis buffer untuk mengalokasikan memori runtime untuk komputasi.

Setelah langkah independen-target, XLA mengirimkan komputasi HLO ke backend. Backend dapat melakukan pengoptimalan tingkat HLO lebih lanjut, kali ini dengan mempertimbangkan informasi dan kebutuhan spesifik target. Misalnya, backend GPU XLA dapat melakukan fusi operasi yang bermanfaat secara khusus untuk model pemrograman GPU dan menentukan cara mempartisi komputasi menjadi aliran. Pada tahap ini, backend juga dapat mencocokkan pola operasi tertentu atau kombinasinya untuk panggilan perpustakaan yang dioptimalkan.

Langkah selanjutnya adalah pembuatan kode khusus target. Backend CPU dan GPU yang disertakan dengan XLA menggunakan LLVM untuk IR tingkat rendah, pengoptimalan, dan pembuatan kode. Backend ini memancarkan IR LLVM yang diperlukan untuk merepresentasikan komputasi XLA HLO dengan cara yang efisien, dan kemudian memanggil LLVM untuk mengeluarkan kode asli dari LLVM IR ini.

GPU backend saat ini mendukung GPU NVIDIA melalui LLVM NVPTX backend; backend CPU mendukung beberapa ISA CPU.