Apa itu distributed training dalam deep learning?
Distributed training adalah melatih satu neural network di banyak GPU sekaligus dengan membagi pekerjaannya. Data parallelism membagi batch, tensor parallelism membagi tiap perkalian matriks, dan pipeline parallelism membagi tumpukan layer. Metode sharding seperti ZeRO membagi training state itu sendiri, jadi tidak ada GPU yang harus menyimpan semuanya.
Semua model bahasa besar dilatih dengan cara ini, karena memori dan komputasinya melebihi satu akselerator. Llama 2, GPT-3, dan model sejenis berjalan di ribuan GPU sekaligus, biasanya dengan tensor parallelism di dalam tiap server 8-GPU, pipeline parallelism antarserver, dan data parallelism di atasnya. Alat yang sama, seperti PyTorch FSDP, DeepSpeed, dan Megatron-LM, juga membuat fine-tuning model 7B bisa dilakukan di beberapa GPU saja.
Ide utama
- Training model 7B dengan Adam dalam mixed precision butuh sekitar 108 GB untuk weight, gradient, dan optimizer state, lebih dari satu GPU 80 GB.
- Data parallelism menyalin model ke setiap GPU dan melakukan all-reduce pada gradient, yang mempercepat komputasi tetapi tidak menghemat memori.
- ZeRO membagi optimizer state, lalu gradient, lalu weight ke GPU data-parallel, sehingga memori per GPU turun hingga N kali.
- Tensor parallelism membagi matriks tiap layer dan butuh all-reduce di dalam setiap layer, jadi tetap berada di dalam satu node bertautan cepat.
- Pipeline parallelism menempatkan layer ke dalam stage dan menyisakan bubble menganggur sebesar (p − 1)/(m + p − 1) dari setiap langkah.
- Run besar menggabungkan ketiganya, dengan jumlah GPU total sama dengan hasil kali derajat tensor, pipeline, dan data-parallel.
Pertanyaan umum
Kapan butuh distributed training?
Saat training state tidak muat di satu GPU, atau satu GPU akan terlalu lama. Training penuh model 7B dengan Adam dalam mixed precision butuh sekitar 108 GB untuk weight, gradient, dan optimizer state, lebih dari kartu 80 GB, bahkan sebelum menghitung aktivasi. Fine-tuning dengan LoRA atau QLoRA melatih parameter yang jauh lebih sedikit dan sering muat di satu GPU, jadi mungkin tidak perlu distributed training sama sekali.
Apa bedanya data parallelism dan model parallelism?
Data parallelism memberi setiap GPU seluruh model dan irisan batch yang berbeda. Model parallelism membagi modelnya sendiri, baik di dalam layer (tensor parallelism) maupun antar-layer (pipeline parallelism), jadi setiap GPU hanya menyimpan sebagian weight. Data parallelism lebih sederhana dan dicoba lebih dulu, lalu model parallelism ditambahkan ketika model atau state-nya tidak lagi muat.
Apakah FSDP sama dengan ZeRO?
PyTorch Fully Sharded Data Parallel menerapkan ide yang sama dengan ZeRO stage 3. Setiap GPU menyimpan satu shard weight, gradient, dan optimizer state, lalu mengumpulkan layer utuh tepat sebelum dipakai. Strategi sharding-nya juga punya mode yang setara dengan ZeRO-2, yaitu menyimpan weight utuh tetapi membagi gradient dan optimizer state.
Apakah global batch yang lebih besar mengubah hasil training?
Ya, bisa. Lebih banyak GPU data-parallel dengan batch per GPU yang sama akan menaikkan global batch. Akibatnya noise gradient turun, dan biasanya learning rate serta warmup perlu disetel ulang. Setelah melewati critical batch size yang bergantung pada model, tambahan data per langkah hanya memberi sedikit kemajuan, jadi menambah GPU tidak lagi mempersingkat training.
Berapa GPU yang dibutuhkan untuk fine-tuning model 7B?
Fine-tuning penuh dengan Adam butuh sekitar 108 GB state ditambah aktivasi, jadi biasanya berjalan di 2 sampai 8 GPU 80 GB dengan sharding ZeRO atau FSDP. Metode hemat parameter seperti LoRA membekukan weight dasar dan melatih adapter kecil, sehingga memorinya mendekati 13,5 GB weight fp16. Dengan weight dasar 4-bit (QLoRA), satu GPU 24 GB sering sudah cukup.
Penjelasan terkait
- Epoch dan Batching · Cara data masuk ke model lewat epoch, batch, dan shuffle
- Optimizer · SGD, momentum, dan Adam: gradient descent yang lebih cerdas
- Arsitektur Transformer · Panduan visual untuk paper "Attention Is All You Need"
- LoRA dan Parameter-Efficient Fine-Tuning · Mengadaptasi model besar dengan melatih matriks low-rank kecil, bukan semua weight
- Quantization · Mengecilkan weight model menjadi 8 dan 4 bit
- Mixture of Experts · Mengirim tiap token ke beberapa expert dalam model yang jauh lebih besar
- Mixed Precision Training · Training 16-bit tanpa kehilangan gradient kecil
Referensi
- Rajbhandari et al. (2019), "ZeRO: Memory Optimizations Toward Training Trillion Parameter Models"
- Shoeybi et al. (2019), "Megatron-LM: Training Multi-Billion Parameter Language Models Using Model Parallelism"
- Huang et al. (2018), "GPipe: Efficient Training of Giant Neural Networks using Pipeline Parallelism"
- Narayanan et al. (2021), "Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM"
Terakhir diperbarui