llm.c का उपयोग करके GPT-2 (124M) मॉडल को 90 मिनट में $20 में पुन: निर्मित करने का तरीका समझाया गया है
- GPT-2 (124M), OpenAI द्वारा 2019 में जारी किया गया सबसे छोटा मॉडल है
- Lambda में 8X A100 80GB SXM नोड का उपयोग करने पर लगभग $14 प्रति घंटा, कुल लागत लगभग $20 आती है
- एकल GPU पर भी ट्रेनिंग संभव है, लेकिन इसमें अधिक समय लगता है (4-24 घंटे)
परिणाम तुलना
- FineWeb validation dataset पर OpenAI द्वारा जारी checkpoint से बेहतर प्रदर्शन दिखाता है
- हालांकि, GPT-2 को WebText पर प्रशिक्षित किया गया था, इसलिए यह पूरी तरह निष्पक्ष तुलना नहीं है
- HellaSwag accuracy भी मापी गई, जिसमें GPT-3 Small(124M) के 33.7 के करीब 29.9 हासिल किया गया
- GPT-2(124M) के 29.4 को पहले ही पार कर लिया गया है
- हालांकि, यहां 10B tokens पर ट्रेनिंग की गई थी, जबकि GPT-3 को 300B tokens पर ट्रेनिंग दी गई थी
न्यूनतम वातावरण सेटअप
- GPU आवश्यक है (Lambda labs की सिफारिश)
- Linux x86 64bit Ubuntu 22.04 with CUDA 12 के आधार पर गाइड
- miniconda इंस्टॉल करने के बाद PyTorch nightly version इंस्टॉल करना (वैकल्पिक)
- tokenizer के लिए आवश्यक पैकेज इंस्टॉल करना
- गति के लिए cuDNN इंस्टॉल करना (वैकल्पिक)
- कई GPU उपयोग करने पर MPI इंस्टॉल करना (वैकल्पिक)
- FineWeb 10B tokens dataset को preprocess करना (~1 घंटे का समय)
- llm.c को compile करना (mixed precision, cuDNN FlashAttention का उपयोग)
ट्रेनिंग चलाना
- single GPU उपयोग करने पर उदाहरण command
- multi GPU (8) उपयोग करने पर
mpirun से चलाना
- मुख्य arguments की व्याख्या
- -i, -j : training/validation data path
- -o : logs, checkpoint save path
- -e : model initialization (depth 12 GPT-2)
- -b : microbatch size (memory कम होने पर घटाएं)
- -t : अधिकतम sequence length
- -d : कुल batch size (GPT-3 paper संदर्भ)
- -r : Recompute सेटिंग (memory बचत)
- -z : ZeRO-1 (optimizer state sharding)
- अन्य weight decay, learning rate, checkpoint interval आदि सेटिंग्स
ट्रेनिंग प्रक्रिया
- 10B training tokens, 0.5M batch size के आधार पर लगभग 20K steps अपेक्षित हैं
- A100 40GB PCIe GPU के आधार पर प्रति step लगने वाला समय, MFU, token throughput आउटपुट होता है
- ट्रेनिंग की शुरुआत में gradient exploding की समस्या होती है, लेकिन clipping से इसका समाधान किया गया
visualization
- log file को parse करके training curve visualize करने के लिए Jupyter notebook प्रदान की गई है
Tokenizer
- integer tokens को string में बदलने के लिए आवश्यक
- PyTorch script से बनाया जा सकता है
Sampling
- फिलहाल inference के लिए optimize नहीं किया गया है
- थोड़े से code बदलाव से unconditional/conditional sampling संभव है
कोड संरचना
train_gpt2.cu फ़ाइल में अधिकांश implementation शामिल है
- शुरुआती 500 lines में MPI, NCCL, cuDNN, cuBLAS आदि का सेटअप है
- उसके बाद 1500 lines में Transformer का forward/backward है
- अगली 1000 lines में GPT-2 मॉडल implementation है
- अंतिम 1000 lines में training loop, argument parsing आदि हैं
350M मॉडल
- 10B tokens पर्याप्त नहीं हैं और 30B tokens उपयोग किए गए
- 8X A100 80GB पर 14 घंटे लगे, लागत लगभग $200 रही
FAQ
- क्या sampling संभव है: हां, लेकिन यह अक्षम है.
- क्या chat संभव है: फिलहाल केवल pretraining संभव है, chat fine-tuning नहीं.
- multi-node distributed training: संभव है, लेकिन अभी परीक्षण नहीं किया गया है.
- क्या यह bit-level deterministic है: लगभग deterministic है, लेकिन कुछ kernel patches की आवश्यकता है.
- क्या FP8 training संभव है: फिलहाल BF16 में ट्रेनिंग हो रही है, FP8 समर्थन जल्द आने वाला है.
- क्या non-NVIDIA GPU समर्थित हैं: फिलहाल केवल C/CUDA समर्थित है.
GN⁺ की राय
- GPT-2 आधुनिक LLM का शुरुआती आधार होने के नाते बहुत महत्वपूर्ण मॉडल है. इसके बाद आए GPT-3 या अन्य LLM भी GPT-2 से बहुत अलग नहीं हैं.
- यह प्रोजेक्ट किसी भी व्यक्ति को GPT-2 स्तर के मॉडल को उचित लागत पर स्वयं ट्रेन करके देखने की सुविधा देता है. LLM की समझ बढ़ाने में यह बहुत मददगार लगता है.
- हालांकि, यह अभी inference के लिए optimize नहीं है, इसलिए वास्तविक सेवाओं में उपयोग के लिए इसकी सीमाएं हैं. इसे conversational model के रूप में fine-tune करने का समर्थन भी नहीं है.
- फिलहाल केवल NVIDIA GPU का समर्थन है, लेकिन भविष्य में AMD या Apple Silicon जैसे विभिन्न platforms के समर्थन की उम्मीद है.
- समान उद्देश्य वाले open source projects में Megatron-LM, DeepSpeed, FairSeq आदि शामिल हैं. इनके अपने-अपने फायदे और सीमाएं हैं, इसलिए उपयोग के अनुसार चुनना बेहतर होगा.
- LLM development ecosystem को सक्रिय करने के लिहाज़ से यह बहुत उत्साहजनक प्रोजेक्ट है. आगे इससे और अधिक अपेक्षाएं हैं.
अभी कोई टिप्पणी नहीं है.