- PyTorch Monarch, büyük ölçekli modeller için verimli dağıtık eğitim ve çıkarımı desteklemek üzere tasarlanmış yeni bir framework
- Mevcut PyTorch'un modüler yapısını genişleterek, devasa sinir ağlarını birden çok cihaz ve düğüme otomatik olarak bölüp yönetme yeteneği sunuyor
- Model paralelliği, pipeline paralelliği ve veri paralelliğini entegre biçimde kontrol edebilen API sayesinde geliştiricilerin karmaşık yapılandırma yükünü azaltıyor
- Monarch, özellikle büyük dil modelleri (LLM) ve öneri sistemleri gibi bellek yoğun iş yüklerinde yüksek verimlilik gösteriyor
- PyTorch ekosistemi içinde ölçeklenebilirlik ve performans optimizasyonunu aynı anda sağlamayı hedefleyen bir girişimin parçası olarak, yeni nesil dağıtık eğitim altyapısının temel bileşenlerinden biri
PyTorch Monarch'a genel bakış
- PyTorch Monarch, büyük ölçekli modellerin dağıtık eğitimini ve çıkarımını basitleştirmek için geliştirilen yeni bir PyTorch bileşeni olarak tanıtıldı
- Mevcut PyTorch'un esnekliğini korurken, milyarlarca parametreye sahip modellerin birden çok GPU ve düğüm üzerine verimli biçimde yerleştirilmesi için tasarlandı
- Karmaşık paralelleştirme stratejilerini elle kurma gereğini ortadan kaldırarak, otomatik bölme ve iletişim optimizasyonu özellikleri sunuyor
- Monarch'un temel hedefi, model paralelliğinde soyutlama seviyesini yükselterek geliştiricilerin model mimarisi tasarımına odaklanmasını sağlamak
- Veri paralelliği, pipeline paralelliği ve tensör paralelliği gibi çeşitli paralelleştirme teknikleri tek bir birleşik arayüz üzerinden kontrol edilebiliyor
- Böylece mevcut dağıtık eğitim framework'lerine kıyasla kod karmaşıklığı ve iletişim ek yükü önemli ölçüde azaltılıyor
Başlıca özellikler ve teknik nitelikler
- Monarch, otomatik bölümleme algoritması ile modelin her katmanını en uygun cihaza yerleştiriyor
- GPU bellek kapasitesi, iletişim bant genişliği ve hesaplama yükü gibi unsurları dikkate alarak bölümleme stratejisini dinamik biçimde belirliyor
- Bu otomasyon özellikle LLM'ler, Transformer tabanlı modeller ve büyük ölçekli öneri sistemlerinde yüksek verimlilik sağlıyor
- Birleşik paralelleştirme API'si sunarak geliştiricilerin tek bir kod tabanıyla farklı paralelleştirme stratejilerini denemesine olanak tanıyor
- Örneğin aynı modeli veri paralelliği ile pipeline paralelliğinin birleşimiyle çalıştırmak veya tensör paralelliğine geçirmek mümkün
- Bu esneklik, model boyutu ve donanım yapılandırmasına göre optimizasyon arayışını kolaylaştırıyor
- Monarch, PyTorch'un mevcut DistributedDataParallel(DDP) ve Fully Sharded Data Parallel(FSDP) özellikleriyle uyumlu
- Mevcut kod tabanını büyük değişiklikler yapmadan Monarch'a taşımak mümkün
- Ayrıca PyTorch'un TorchScript ve TorchDynamo bileşenleriyle entegre çalışarak derleme ve yürütme optimizasyonlarını destekliyor
Performans ve kullanım örnekleri
- İlk benchmark sonuçlarına göre Monarch, mevcut PyTorch dağıtık eğitimine kıyasla iletişim verimliliğinde %20~30 artış ve bellek kullanımında %15 azalma sağladı
- Özellikle milyarlarca parametre ölçeğindeki modellerde eğitim hızı ve GPU kullanım oranı belirgin biçimde iyileşti
- Büyük dil modelleri (ör. GPT ailesi) ve öneri sistemlerinde deneysel olarak doğrulandı
- Monarch, hem bulut hem de şirket içi ortamlarda çalışıyor ve AWS, Azure, GCP gibi başlıca bulut altyapılarıyla uyumlu
- PyTorch Lightning, Hugging Face Transformers gibi üst seviye framework'lerle entegrasyonu da destekliyor
PyTorch ekosistemindeki anlamı
- Monarch, PyTorch'un büyük ölçekli yapay zeka modelleri çağına yanıt vermek için yaptığı temel altyapı genişlemesi olarak değerlendiriliyor
- Tek GPU merkezli mevcut eğitim paradigmasından çıkarak, binlerce GPU kullanan çok büyük model eğitimini mümkün kılan bir temel sunuyor
- Hem araştırmacılar hem de şirketler için ölçeklenebilirlik ile verimliliği aynı anda sağlayabilen standartlaştırılmış bir dağıtık eğitim çözümü işlevi görüyor
- PyTorch ekibi, Monarch'u açık kaynak olarak yayınlayıp topluluk geri bildirimlerini yansıtarak sürekli geliştirmeyi planlıyor
- Gelecekte otomatik optimizasyon, dinamik zamanlama ve hibrit paralelleştirme özelliklerinin eklenmesi planlanıyor
- PyTorch'un yeni nesil dağıtık eğitim framework'ü olarak, yapay zeka altyapısının demokratikleşmesine ve erişilebilirliğin artmasına katkı sağlaması bekleniyor
1 yorum
Hacker News görüşleri
Bu projenin Tinker'dan farklı bir katmanı hedeflediği anlaşılıyor
Tinker tanıtım yazısına bakınca Tinker yönetilen bir fine-tuning hizmeti, Monarch ise altyapı primitive'leri sunan bir yapı
Bu yüzden Monarch üzerinde Tinker benzeri bir hizmet inşa edilip edilemeyeceğini merak ediyorum
Görünüşe göre PyTorch'un oxidation süreci başlamış
Monarch, Python tabanlı bir frontend ile Rust ile uygulanmış bir backend'e ayrılıyor
Genel olarak oldukça ilgi çekici bir proje gibi görünüyor
Hâlâ
std::shared_ptrtabanlı döngüsel grafiklerin ve bellek sızıntılarının keyfini çıkarabileceğiz gibi görünüyorKeşke tamamen fonksiyonel bir dille sıfırdan yeniden yazılsaydı
Ben bizzat bir PyTorch eklentisi yazdım — mycelya-torch
Benim sürümüm henüz düğümler arası iletişimi desteklemiyor ama Monarch'ın performansı elde etme biçimi ilgimi çekti
Monarch muhtemelen kodu tüm düğümlerle paylaşmak için cloudpickle kullanıyor; bu da yalnızca ilk kurulum maliyeti getirip verimli oluyor
Mesajları tek bir denetleyiciden fan-out eden yapı da etkileyiciydi
Ama özel kernel desteği olup olmadığını ya da aktörler arası iletişim denetiminin ne kadar ayrıntılı olduğunu merak ediyorum
Genel olarak bu yaklaşımı çoklu denetleyiciden daha çok beğeniyorum
Ama gerekli kernel'i ya da sistem kodunu doğrudan **gömülü hâle getirebilir (bake-in)**siniz
Bunun Ray'e benzer bir yapı olduğu görünüyor
Monarch'ın
Actor'ü ile Ray'in@ray.remotesınıfı aynı deseni izliyorDask resmi sitesi
ilgili blog
İlginç, özünde bana Fortran coarray(2008) kavramını hatırlatıyor
Ancak MapReduce veya Fortran'ı doğrudan kullanmak gerekmemesi açısından çok daha iyi bence
“Tek ana makine darboğazını önlemek ve mesaj aktarımı için dağıtık bir kümede tam mesh kullanmak” ifadesi vardı,
eğer bunu değiştirebilecek biri görürse referans sayılar eklemesini isterdim
Güzel bir proje gibi görünüyor
Merak ettiğim birkaç şey var
Bu, coarray dünyasında önemli bir proje olabilir ama şimdiden sorun işaretleri var
Tensor motoru CUDA ve RDMA'ya (ibverbs) bağlı ve GPUDirect RDMA kullanan bir kod olduğu için
sonuçta CUDA bağımlılığı daha da ağırlaşacak gibi görünüyor
OpenUCX kullanılsaydı daha iyi olabilirdi
Jax'e göre işlevsel olarak daha zayıf görünüyor
Jax, güçlü derleyicisiyle düğümler arası iletişimi optimize ediyor
Tek denetleyici anlaması kolay bir yaklaşım, çoklu denetleyici ise belirli veri akışları için daha uygun
Bu iki yaklaşımı harmanlayan ilginç denemeler de var