- PyTorch Monarch adalah framework baru yang dirancang untuk mendukung pelatihan dan inferensi terdistribusi yang efisien untuk model berskala besar
- Dengan memperluas struktur modular PyTorch yang sudah ada, framework ini menyediakan kemampuan untuk secara otomatis membagi dan mengelola jaringan saraf raksasa di banyak perangkat dan node
- Melalui API yang dapat mengendalikan secara terpadu model parallelism, pipeline parallelism, dan data parallelism, framework ini mengurangi beban pengaturan kompleks bagi pengembang
- Monarch menunjukkan efisiensi tinggi terutama pada workload yang intensif memori seperti large language model (LLM) dan sistem rekomendasi
- Sebagai bagian dari upaya untuk sekaligus mencapai skalabilitas dan optimasi performa di dalam ekosistem PyTorch, Monarch menjadi komponen kunci bagi infrastruktur pelatihan terdistribusi generasi berikutnya
Gambaran umum PyTorch Monarch
- PyTorch Monarch diperkenalkan sebagai komponen baru PyTorch untuk menyederhanakan pelatihan dan inferensi terdistribusi untuk model berskala besar
- Tetap mempertahankan fleksibilitas PyTorch yang ada, sambil dirancang agar model dengan miliaran parameter dapat ditempatkan secara efisien di banyak GPU dan node
- Menyediakan fungsi pembagian otomatis dan optimasi komunikasi tanpa perlu menyusun strategi paralelisasi yang rumit secara manual
- Tujuan utama Monarch adalah meningkatkan tingkat abstraksi model parallelism, sehingga pengembang dapat fokus pada perancangan struktur model
- Berbagai teknik paralelisasi seperti data parallelism, pipeline parallelism, dan tensor parallelism dapat dikendalikan melalui satu antarmuka terpadu
- Dengan ini, kompleksitas kode dan overhead komunikasi dapat dikurangi secara signifikan dibanding framework pelatihan terdistribusi yang ada
Fitur utama dan karakteristik teknis
- Monarch menempatkan setiap layer model ke perangkat yang optimal melalui algoritme pembagian otomatis
- Strategi pembagian ditentukan secara dinamis dengan mempertimbangkan kapasitas memori GPU, bandwidth komunikasi, dan beban komputasi
- Otomatisasi ini sangat efisien terutama pada LLM, model berbasis Transformer, dan sistem rekomendasi skala besar
- Menyediakan API paralelisasi terpadu, sehingga pengembang dapat bereksperimen dengan berbagai strategi paralelisasi menggunakan satu codebase
- Misalnya, model yang sama dapat dijalankan dengan kombinasi data parallelism dan pipeline parallelism, atau dialihkan ke tensor parallelism
- Fleksibilitas ini mempermudah eksplorasi optimasi berdasarkan ukuran model dan konfigurasi hardware
- Monarch kompatibel dengan fitur DistributedDataParallel(DDP) dan Fully Sharded Data Parallel(FSDP) yang sudah ada di PyTorch
- Codebase yang ada dapat dipindahkan ke Monarch tanpa banyak perubahan besar
- Juga terintegrasi dengan TorchScript dan TorchDynamo milik PyTorch, sehingga mendukung optimasi kompilasi dan eksekusi
Performa dan contoh penggunaan
- Berdasarkan hasil benchmark awal, Monarch mencapai peningkatan efisiensi komunikasi sebesar 20~30% dan pengurangan penggunaan memori sebesar 15% dibanding pelatihan terdistribusi PyTorch yang ada
- Khususnya pada model dengan skala miliaran parameter, kecepatan pelatihan dan tingkat pemanfaatan GPU meningkat secara signifikan
- Sudah diverifikasi secara eksperimental pada large language model (misalnya seri GPT) dan sistem rekomendasi
- Monarch berjalan baik di lingkungan cloud maupun on-premises dan kompatibel dengan infrastruktur cloud utama seperti AWS, Azure, dan GCP
- Juga mendukung integrasi dengan framework tingkat atas seperti PyTorch Lightning dan Hugging Face Transformers
Makna dalam ekosistem PyTorch
- Monarch dinilai sebagai perluasan infrastruktur inti PyTorch untuk menghadapi era model AI berskala besar
- Keluar dari paradigma pelatihan yang berpusat pada satu GPU, Monarch menyediakan fondasi untuk pelatihan model ultra-besar dengan memanfaatkan ribuan GPU
- Bagi peneliti maupun perusahaan, Monarch berperan sebagai solusi pelatihan terdistribusi terstandarisasi yang dapat sekaligus menjamin skalabilitas dan efisiensi
- Tim PyTorch berencana merilis Monarch sebagai open source, terus mengembangkannya sambil mencerminkan umpan balik komunitas
- Ke depannya, fitur optimasi otomatis, penjadwalan dinamis, dan hybrid parallelism akan ditambahkan
- Sebagai framework pelatihan terdistribusi generasi berikutnya dari PyTorch, Monarch diharapkan berkontribusi pada demokratisasi infrastruktur AI dan peningkatan aksesibilitas
1 komentar
Komentar Hacker News
Proyek ini tampaknya menyasar lapisan yang berbeda dari Tinker
Jika melihat artikel pengenalan Tinker, Tinker adalah layanan fine-tuning terkelola, sedangkan Monarch berstruktur sebagai penyedia primitive infrastruktur
Jadi saya penasaran apakah layanan seperti Tinker juga bisa dibangun di atas Monarch
Sepertinya oksidasi PyTorch telah dimulai
Monarch terbagi menjadi frontend berbasis Python dan backend yang diimplementasikan dengan Rust
Secara keseluruhan ini tampak seperti proyek yang cukup menarik
Jadi tampaknya kita masih bisa menikmati graf siklik berbasis
std::shared_ptrdan kebocoran memoriAgak disayangkan karena tidak ditulis ulang sepenuhnya dengan bahasa fungsional
Saya pernah membuat ekstensi PyTorch sendiri — mycelya-torch
Versi saya belum mendukung komunikasi antar-node, tetapi menarik melihat bagaimana Monarch mendapatkan performanya
Monarch kemungkinan memakai cloudpickle untuk membagikan kode ke semua node, yang hanya menimbulkan biaya setup awal dan efisien
Struktur yang melakukan fan-out pesan dari satu controller juga cukup mengesankan
Namun saya penasaran apakah mendukung custom kernel dan seberapa rinci kontrol komunikasi antaraktor yang tersedia
Secara keseluruhan saya lebih menyukai pendekatan ini dibanding multi-controller
Tetapi kernel atau kode sistem yang dibutuhkan bisa langsung di-embed (bake-in)
Ini terlihat mirip dengan struktur Ray
Actordi Monarch dan kelas@ray.remotedi Ray mengikuti pola yang samaLihat situs resmi Dask
Blog terkait
Menarik, ini pada dasarnya mengingatkan saya pada konsep Fortran coarray (2008)
Hanya saja menurut saya ini jauh lebih baik karena tidak perlu langsung memakai MapReduce atau Fortran
Ada kalimat “menghindari bottleneck host tunggal dan memanfaatkan seluruh mesh sebagai klaster terdistribusi untuk pengiriman pesan”,
kalau ada yang bisa mengubahnya, saya ingin angka rujukan ditambahkan
Ini tampak seperti proyek yang bagus
Saya punya beberapa pertanyaan
Ini bisa menjadi proyek penting di dunia coarray, tetapi tanda-tanda masalahnya sudah terlihat
Mesin tensor-nya terikat pada CUDA dan RDMA (ibverbs), dan karena kodenya memakai GPUDirect RDMA
pada akhirnya ketergantungan pada CUDA tampaknya akan makin parah
Seandainya memakai OpenUCX, rasanya akan lebih baik
Ini tampak kurang kuat secara fungsional dibanding Jax
Jax mengoptimalkan komunikasi antarnode dengan kompiler yang kuat
Single-controller lebih mudah dipahami, sedangkan multi-controller lebih optimal untuk dataflow tertentu
Ada juga beberapa upaya menarik yang mencampurkan kedua pendekatan ini