Google bersama Meta merilis TorchTPU, backend PyTorch native untuk TPU yang membuat beban kerja PyTorch berjalan di perangkat TPU dengan perubahan kode minimal. Klaim yang menyertainya cukup spesifik: model 30 miliar parameter mencapai 25.700 token per detik pada panjang sekuens 5.120 di satu chip TPUv7, dan pipeline ujinya mengevaluasi sekitar 5.000 model Hugging Face dari lebih 500 arsitektur. Proyek ini masih tahap awal, dan roadmap-nya mencakup dynamic shapes, performa kompilasi, cakupan operator, reinforcement learning, serta kuantisasi.
TL;DR
- TorchTPU adalah backend PyTorch native untuk TPU, dikembangkan Google bersama Meta, dan dirilis open source.
- Pendahulunya, PyTorch/XLA, dipakai sejak 2020 tapi menuntut perubahan kode untuk menandai region yang bisa dikompilasi dan tidak mendukung mode eager.
- Mode DeferAndFuse diklaim Google 50 persen atau lebih cepat dari Strict Eager sekaligus menurunkan puncak memori HBM.
- Uji integrasi mencakup sekitar 5.000 model Hugging Face dan lebih 500 arsitektur, mulai dari TPU generasi v5e.
- Migrasi dari GPU melibatkan penggantian perangkat cuda menjadi tpu dan backend nccl menjadi tpu_dist.
Apa bedanya TorchTPU dengan PyTorch/XLA?
Bedanya di titik awal desainnya. PyTorch/XLA, yang dipakai Google sejak 2020, memanfaatkan JAX, XLA, dan lazy tensor: operasi dikumpulkan dulu, lalu dikompilasi menjadi satu graf sebelum dieksekusi. Pendekatan itu efisien untuk graf besar, tapi menuntut kode menandai secara eksplisit bagian mana yang boleh dikompilasi.
TorchTPU membalik prioritasnya: mode eager dijadikan hal utama, sehingga kode PyTorch yang sudah ada bisa berjalan dengan sedikit perubahan. Google menyebut empat kelemahan pendekatan lama, yaitu kebutuhan mengubah kode sumber secara intrusif, latensi kompilasi yang parah, tidak adanya dukungan untuk eksekusi imperatif native, dan tertinggalnya dukungan primitif komputasi terdistribusi baru di ekosistem PyTorch.
| Aspek | PyTorch/XLA | TorchTPU |
|---|---|---|
| Model eksekusi | Lazy tensor, graf dikompilasi dulu | Eager native, plus mode terkompilasi |
| Perubahan kode | Perlu menandai region yang bisa dikompilasi | Minimal, terutama penggantian nama perangkat |
| Latensi kompilasi | Disebut parah oleh Google | Menjadi salah satu fokus roadmap |
| Dukungan eager | Tidak ada | Ada tiga mode, termasuk hybrid |
| Status | Jalur lama sejak 2020 | Tahap awal, terus berkembang |
Bagaimana cara memindahkan kode dari GPU ke TPU?
Untuk kasus paling sederhana, penggantiannya dua baris: perangkat cuda menjadi tpu dan backend nccl menjadi tpu_dist. Google juga menyediakan API torch.accelerator.current_accelerator agar kode yang sama bisa memilih akselerator yang tersedia tanpa cabang if yang ditulis manual.
import torch
import torch.distributed as dist
def main():
device = torch.accelerator.current_accelerator
dist.init_process_group()
rank = dist.get_rank()
world_size = dist.get_world_size()
model = model.to(device)
Dokumentasi API akselerator bisa dibaca di PyTorch Docs, sementara detail kompilator di balik eksekusi terkompilasi ada di proyek OpenXLA. Perlu dicatat, potongan kode di atas adalah penyederhanaan dari contoh di laporan: kode asli tetap memerlukan definisi model, loader data, dan alur pelatihan.
Yang menarik, perubahan kode yang kecil bukan berarti jaminan perilaku yang sama. Operator yang belum didukung, bentuk tensor dinamis, dan pola komunikasi antar perangkat adalah tiga hal yang paling sering berubah perilakunya ketika kode pindah antar akselerator. Karena itu pengujian model nyata, bukan sekadar menjalankan unit test, tetap wajib.
Berapa performa yang dilaporkan?
Angka paling konkret datang dari model 30 miliar parameter bernama Muse Glimmer yang diimplementasikan dengan PyTorch standar. Pada satu chip TPUv7, throughput inferensi mencapai 25.700 token per detik pada panjang sekuens 5.120, dan 22.400 token per detik pada panjang 10.240.
Untuk pelatihan, empat chip TPUv7 menghasilkan 5.600 token per detik pada panjang 5.120 dan 4.600 token per detik pada 10.240. Google juga menguji Qwen3 MoE 235B untuk pelatihan dengan skala dari 1.024 sampai 8.192 chip TPUv7, dan melaporkan performa per dolar yang kompetitif untuk beban MoE berskala besar saat inferensi memakai vLLM.
| Skenario | Perangkat | Throughput |
|---|---|---|
| Inferensi, sekuens 5.120 | 1x TPUv7 | 25.700 token per detik |
| Inferensi, sekuens 10.240 | 1x TPUv7 | 22.400 token per detik |
| Pelatihan, sekuens 5.120 | 4x TPUv7 | 5.600 token per detik |
| Pelatihan, sekuens 10.240 | 4x TPUv7 | 4.600 token per detik |
Angka-angka itu berasal dari pengukuran Google, bukan pengujian independen. Pembaca yang terbiasa dengan klaim vendor sebaiknya memperlakukannya sebagai batas atas yang dicapai pada konfigurasi tertentu, bukan angka yang otomatis berlaku untuk model lain dengan bentuk komputasi berbeda.
Apa itu DeferAndFuse dan kenapa penting?
DeferAndFuse adalah mode eksekusi hybrid yang menunda sebagian operasi untuk digabungkan, lalu menjalankannya sebagai bagian terkompilasi. TorchTPU menyediakan tiga mode eager: strict, debug, dan DeferAndFuse.
Google mengklaim mode ini bisa 50 persen atau lebih cepat daripada Strict Eager sekaligus menurunkan puncak pemakaian memori HBM. Klaim itu masuk akal secara mekanika: menggabungkan operasi kecil mengurangi jumlah perpindahan data, dan pada akselerator, perpindahan data sering lebih mahal daripada komputasinya.
Yang belum jelas dari laporan adalah seberapa konsisten keuntungan itu di berbagai arsitektur model. Mode hybrid biasanya paling menguntungkan pada model dengan banyak operasi kecil berurutan, dan bisa kehilangan manfaat pada model dengan operasi besar yang sudah efisien. Karena itu, memilih mode sebaiknya dilakukan lewat pengukuran pada model sendiri, bukan mengikuti angka umum.
💬 Komentar (0)
Belum ada komentar. Jadilah yang pertama! 💬