- Andrej karpathy का nanochat एक open source project है, जिसमें $100 के बजट में ChatGPT जैसे conversational LLM को खुद बनाया जा सकता है
- पूरी pipeline (tokenize, pretraining, midtraining, finetuning, evaluation, inference, web service) को संक्षिप्त और hackable तरीके से implement किया गया है
- एक 8XH100 GPU node पर सिर्फ एक script से 4 घंटे के भीतर training पूरी हो जाती है, और GPT-2 स्तर के performance को लक्ष्य बनाने वाला d26 model लगभग 300 डॉलर में 12 घंटे लेता है, जबकि 1000 डॉलर tier में 41.6 घंटे लगते हैं
- केवल 330KB आकार के 8,300 lines, 44 files से बना बेहद संक्षिप्त codebase, जिसमें जटिल config objects या model factory के बिना पढ़ने में आसान और fork करने में आसान शक्तिशाली baseline मिलता है
- Eureka Labs के LLM101n course के capstone project के रूप में विकसित किया जा रहा है, और लक्ष्य है 1000 डॉलर से कम बजट में सुलभ micro models की state of the art क्षमता को बेहतर बनाना
nanochat प्रोजेक्ट का अवलोकन
- nanochat उन developers के लिए बना open source project है, जो $100 की लागत में ChatGPT जैसे conversational LLM को implement करना चाहते हैं
- पूरा codebase एकल, पढ़ने में आसान, कम dependency वाला और संक्षिप्त लिखा गया है, इसलिए इसे modify करना और experiments करना आसान है
- pretraining, finetuning, evaluation, inference, और web UI तक पूरी प्रक्रिया को एक साथ manage करने का environment देता है
- speedrun.sh script से पूरी pipeline को अपने आप चलाया जा सकता है, इसलिए beginners भी आसानी से शुरुआत कर सकते हैं
- न्यूनतम dependencies और hackable structure के साथ design किया गया है, इसलिए इसे समझना और modify करना आसान है और यह educational purpose के लिए उपयुक्त है
- यह project Eureka Labs में विकसित हो रहे LLM101n course के capstone project के रूप में इस्तेमाल होने वाला है
त्वरित शुरुआत (Quick Start)
- GPU environment में, खासकर 8XH100 node पर speedrun.sh चलाने से लगभग 4 घंटे में training और inference process सेट हो जाती है
- 8XH100 node के हिसाब से 24 डॉलर प्रति घंटा, यानी कुल 4 घंटे का समय
- लंबे training run के दौरान स्थिर monitoring के लिए screen session के अंदर चलाने की सिफारिश की जाती है
screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh कमांड का उपयोग
Ctrl-a d से detach करने के बाद tail speedrun.log से progress देखें
- training पूरी होने पर एक सरल web UI के जरिए LLM से खुलकर सवाल पूछे जा सकते हैं और जवाब chat window में देखे जा सकते हैं
python -m scripts.chat_web
- 4e19 FLOPs स्तर का model kindergarten स्तर की conversational क्षमता देता है
- story/poem लिखने को कहा जा सकता है
- hallucination phenomena को देखा जा सकता है
- आसमान नीला क्यों है जैसे बुनियादी सवालों के जवाब दे सकता है
- training results और अलग-अलग performance metrics report.md में save होते हैं
training result report
- report.md file में training run की "report card" शामिल है
- तरह-तरह के evaluation indicators और metrics दिए गए हैं
- अंतिम summary table में BASE, MID, SFT, RL चरणों के performance दिखते हैं
- codebase statistics
- characters: 333,989
- lines: 8,304
- files: 44
- tokens (approx.): 83,497
- dependencies (uv.lock line count): 2,004
- benchmark performance examples
- CORE: 0.2219 (BASE)
- ARC-Challenge: 0.2875 (MID), 0.2807 (SFT)
- GSM8K: 0.0250 (MID), 0.0455 (SFT), 0.0758 (RL)
- HumanEval: 0.0671 (MID), 0.0854 (SFT)
- कुल समय: 3 घंटे 51 मिनट
- model का performance ChatGPT की तुलना में कम है, लेकिन फोकस कम बजट में LLM बनाने के अनुभव पर है
बड़े models (Bigger Models)
- 100 डॉलर में high-performance ChatGPT clone को train करना संभव नहीं है, और वास्तविक LLMs आम तौर पर कई million dollars के capital expenditure से जुड़े होते हैं
- इसके लिए दो अतिरिक्त scale tiers दिलचस्प हैं
- लगभग 300 डॉलर tier d26 model (depth=26): लगभग 12 घंटे की training, GPT-2 CORE score से थोड़ा बेहतर
- 1000 डॉलर tier: लगभग 41.6 घंटे, एक साफ round number
- d26 model training के लिए speedrun.sh में बदलाव
- अधिक data shards download करने होंगे
- parameters की संख्या को 20 से गुणा करके tokens की संख्या निकालें
- उसे 4.8 से गुणा करके characters की संख्या निकालें
- 250 million से भाग देकर shards की संख्या निकालें (लगभग 450 चाहिए)
- OOM से बचने के लिए --depth=26 option का उपयोग करें और device_batch_size को 32 से घटाकर 16 करें
- midtraining stage में भी वही device_batch_size इस्तेमाल करना होगा
computing environment requirements
- 8XA100 GPU node पर भी चलाया जा सकता है, लेकिन थोड़ा धीमा होगा
- single GPU पर भी चल सकता है
- torchrun हटाने पर भी लगभग वही result मिलता है
- अपने आप gradient accumulation पर switch हो जाता है
- समय 8 गुना ज्यादा लगेगा
- 80GB से कम VRAM वाले GPU के लिए hyperparameters adjust करने होंगे
- memory खाली करने के लिए --device_batch_size को 32 (default) से 16, 8, 4, 2, 1 तक घटाएँ
- 1 से नीचे सेट करने के लिए और creative approach चाहिए
- vanilla PyTorch base होने के कारण xpu, mps जैसे अलग environments का support संभव है
- यह out of the box नहीं है, इसलिए थोड़े modifications चाहिए
उपयोगिता और accessibility
- nanochat की सबसे बड़ी ताकत यह है कि पूरी files को एक बार में package करके दूसरे LLMs, document search services आदि से आसानी से सवाल पूछे जा सकते हैं
- files-to-prompt utility का उपयोग उदाहरण
- py, md, rs, html, toml, sh files शामिल
- rustbpe/target folder exclude
- cxml output format चुना गया
- लगभग 330KB (लगभग 100k tokens से कम), 45 files और 8 हजार lines code को package किया गया
- DeepWiki की सिफारिश
- GitHub URL में github.com को deepwiki.com से बदलकर repository के बारे में सवाल पूछे जा सकते हैं
- Devin/Cognition द्वारा प्रदान किया गया
योगदान और प्रोजेक्ट की दिशा
- nanochat अभी पूरा हुआ project नहीं है
- लक्ष्य है 1000 डॉलर से कम बजट में शुरू से अंत तक चलने वाले micro models की state of the art क्षमता को बेहतर बनाना
- accessibility में सिर्फ लागत नहीं, बल्कि cognitive complexity भी शामिल है
- न बहुत बड़े config objects, न model factories, न if-then-else monster code
- यह कोई पूरी तरह configurable LLM framework नहीं है
- एकल, consistent, minimal, पढ़ने में आसान, hackable, और जितना संभव हो fork-friendly "powerful baseline" codebase
- इसे शुरू से अंत तक चलाकर एक ठोस ChatGPT clone और उसकी report card तैयार करने के लिए design किया गया है
1 टिप्पणियां
Hacker News राय
यह AI coding tool के इस्तेमाल के अनुभव की दिलचस्प साझेदारी है
मैंने कभी Karpathy से पूछा था कि उन्होंने कितना code खुद लिखा
Karpathy: सवाल के लिए धन्यवाद, और सच कहूं तो ज़्यादातर code मैंने खुद हाथ से लिखा (tab autocomplete का इस्तेमाल किया)
मैंने claude/codex agents कुछ बार आज़माए, लेकिन उनकी accuracy कम थी इसलिए ज़्यादा मदद नहीं मिली
शायद इसलिए कि मेरा बनाया repo data distribution से बहुत दूर है
मूल बातचीत लिंक
"repo data distribution से बहुत दूर है" — इससे समझ आता है कि AI models मेरे लिए अक्सर मददगार क्यों नहीं रहे
जो भी काम मैं करता हूं वह इतना अनोखा होता है कि distribution से बाहर चला जाता है
Karpathy जैसे भरोसेमंद व्यक्ति से यह सुनकर अच्छा लगा
जो लोग सोचते हैं कि AGI बस आने ही वाला है, उन्हें शायद अपनी उम्मीदें थोड़ी कम कर लेनी चाहिए
मुझे भी Claude Code पसंद है
मुझे समय-समय पर web code लिखना पड़ता है, और web side पर training data coverage इतनी अच्छी है कि Claude web development में मुझसे कहीं बेहतर है
लेकिन जब मुझे अपने automation tool के algorithmic core हिस्से में गहराई से जाना होता है, तब Claude के पास काम करने के लिए कम आधार होता है और उससे गलतियां भी बढ़ जाती हैं
फिर भी कुल मिलाकर यह फायदे का सौदा है, इसलिए मैं इसके लिए खुशी-खुशी पैसे देता हूं
अगर यह सिर्फ web development helper के रूप में भी रहे, तब भी बहुत मददगार है
मुझे तो यह उल्टा एक स्वाभाविक बात लगती है
यहां नई और मौलिक तरह से code लिखा जा रहा है
बहुत लोग Karpathy के जवाब की आलोचना कर रहे हैं, लेकिन मेरा मानना है कि यह बात कि उन्होंने claude/codex को आज़माया, इस बात का संकेत है कि पहले कभी ये tools सच में काम आए थे
Karpathy के tweet का एक और mirror link यहां
यह प्रभावशाली है कि nanochat को modded-nanoGPT से प्रेरणा मिली
इसकी lineage है: Karpathy का nano-GPT → Keller Jordan का modded-nanoGPT (models को तेज़ी से train करने वाला version) → NanoChat
modded-nanoGPT की सबसे उल्लेखनीय बात यह है कि यह छोटे GPT models को बेहद तेज़ी से train करता है
खास तौर पर यह AdamW की जगह linear layers पर Muon optimizer (जिसे लेखक ने खुद बनाया) का उपयोग करता है
modded-nanoGPT, Muon optimizer परिचय
Muon वह optimizer है जिसे Keller Jordan ने इस fast training contest के लिए बनाया था, और बाद में दूसरों के improvements भी जुड़े
एक साल भी पूरा नहीं हुआ और यह पहले ही model training के SOTA के रूप में व्यापक रूप से इस्तेमाल हो रहा है
8xH100 पर एक single inference node चलाना काफ़ी चौंकाने वाला है
सोच रहा हूं कि क्या production frontier LLMs भी लगभग इसी स्तर पर चलते हैं, या फिर उन्हें इससे भी ज़्यादा VRAM/compute चाहिए
लगभग $8 प्रति घंटा, और अगर मान लें कि हर request में 5 सेकंड लगते हैं, तो करीब 700 requests संभाली जा सकती हैं
यानी लगभग 1 cent प्रति request
जानना चाहता हूं कि मेरी गणना में कहीं गलती तो नहीं
अभी भी training वास्तव में चल रही है (20 मिनट पहले शुरू हुई)
live training logs खुले हैं
4 घंटे बाद जब model तैयार हो जाएगा, तो inference test के लिए इसे सबके साथ साझा किया जाएगा
तैयार model को Hugging Face पर upload कर दिया गया है
Karpathy जितना अच्छा result नहीं मिला (शायद seed luck खराब था?)
फिर भी इसके साथ प्रयोग करना मज़ेदार है
उदाहरण के लिए, जब पूछा गया "कुत्ते के कितने पैर होते हैं?"
assistant ने जवाब दिया: "यह वास्तव में बहुत दिलचस्प सवाल है, और सदियों से कुत्ता-प्रेमियों के बीच चर्चा का विषय रहा है. इसका कोई एक 'सही' जवाब नहीं है (...)"
पहले chart के बगल वाली टिप्पणी में
"प्रगति का मुख्य metric. Bits per byte, Karpathy के शब्दों में, 'सामान्य cross-entropy loss से कहीं बेहतर metric है. यह हर token के लिए bytes की संख्या के आधार पर loss को normalize करता है, जिससे tokenizer से स्वतंत्र तुलना संभव होती है.'"
यह इतनी साफ़ व्याख्या है कि यह सोचकर शर्मिंदगी होती है कि TinyStories पर अपने tokenizer experiments के दौरान मैंने इसके बारे में नहीं सोचा
अब मैं फिर से विश्लेषण करना चाहता हूं कि मेरा tokenizer असल में कितना अच्छा था
अच्छा होगा अगर इस repository को W&B के साथ train करते हुए चलाने का एक छोटा-सा 'howto' मिल जाए
सोच रहा हूं कि क्या किसी ऐसे programmer के लिए step-by-step guide साझा की जा सकती है जिसने कभी model training workflow नहीं किया हो
मज़ेदार!
Karpathy का Shakespeare generator, ollama के बाद, पहला project था जिसके साथ मैंने प्रयोग किया
मेरा उद्देश्य LLM के सिद्धांतों को समझना था
पिछले हफ्ते से मैं LLMs में डूबा हुआ हूं और zero-base training/inference system दो backends के साथ बना रहा हूं
rocm/pytorch मुझे झंझट भरे लगते हैं इसलिए उनसे काफ़ी चिढ़ है
Vulkan अच्छा है. llama-cpp भी इसे ऐसे ही इस्तेमाल करता है
पिछले हफ्ते मैंने CPU/GPU दोनों backends को चलने लायक बनाया, और GPU backend में bugs थे इसलिए उन्हें ठीक करने पर ध्यान दिया
मैंने WGSL code को refactor किया और उसकी efficiency बढ़ाई
इस प्रक्रिया में मैंने LLM का सक्रिय रूप से उपयोग किया, और यह हैरान कर देने वाला turning point साबित हुआ
refactoring prompts का इस्तेमाल करने पर यह एक-एक कदम errors ठीक करता गया और आख़िर में astral ty से type-check होने वाला code भी बना दिया
इससे अधिक inefficient choice शायद हो ही नहीं सकती
इस weekend मैंने nanoGPT(लिंक) आज़माया
यह काफ़ी पुराना project है, लेकिन अपना छोटा Shakespeare GPT बनाकर train करने का शानदार hands-on अनुभव देता है
मैंने इसे लगभग 0.8M parameters के साथ CPU पर चलाया
output मोटे तौर पर उम्मीद के मुताबिक 'अच्छा नहीं' है
फिर भी इसमें एक जादुई-सा एहसास था
जो लोग deep learning के विशेषज्ञ नहीं हैं और बस प्रयोग तथा hacking का मज़ा लेना चाहते हैं, उनके लिए यह बेहतरीन entry point है
अफ़सोस, weekend nanoGPT अनुभव पर ब्लॉग पोस्ट अभी पूरी नहीं लिखी... वरना यहां लिंक करता
छोटे पैमाने पर अच्छे ML research ideas validate होते हैं, इसलिए यह उपयोगी hands-on exercise है
यह नया example और भी आगे बढ़ा हुआ है, जिसमें instruction following, tool use SFT, और RLVR तक शामिल हैं
इस वजह से एक अधिक उपयोगी baseline तैयार होता है
Shakespeare code को थोड़ा-सा tune करके किसी दूसरे data पर train करें तो Magic The Gathering commander decks generate करने में यह काफ़ी अच्छा काम करता है
"chief LLM whisperer Alec Radford से सलाह ली"
अगर Alec और Andrej का podcast कभी आ जाए, तो वह दुनिया हिला देगा
GPT1 के गौरवशाली दिनों से लेकर अब 4 घंटे में GPT3-स्तर की चीज़ बना देने तक
Eureka Labs: Github लिंक
Andrej सच में बेहद prolific और अद्भुत व्यक्ति हैं
उनके काम को follow करना अपने आप में एक शानदार अनुभव है
मैं हमेशा सोचता रहा हूं कि मानवता के लिए सबसे बड़ा योगदान यह है कि
मैं कितने लोगों की कितनी गहराई से मदद कर सकता हूं, इसका गुणनफल
इस अर्थ में Karpathy का open source काम सबसे अधिक leverage वाला तरीका है
आज की दुनिया भी open source projects की नींव पर खड़ी है
इसी आज़ादी की वजह से दुनिया भर में कोई भी मुफ्त में coding सीखकर software बना सकता है
उम्मीद है AI/LLM क्षेत्र भी इसी सकारात्मक दिशा का अनुसरण करेगा
मुझे software में यह free/share tradition बहुत पसंद है
लेकिन LLMs में training cost बहुत ज़्यादा है और high-performance hardware की ज़रूरत होती है, इसलिए लगता है इस प्रवाह को बनाए रखना कठिन होगा
आगे चलकर software development भी शायद LLM hosts को 'किराया' देकर ही आगे बढ़ेगा
हो सकता है on-prem (local) inference environment को फिर से सबके लिए सुलभ बनाने का कोई तरीका निकल आए
लेकिन अभी training की ऊंची लागत के कारण तस्वीर धुंधली लगती है
और जैसे-जैसे LLM पर निर्भरता बढ़ेगी
मुझे चिंता है कि programming beginners के लिए tutorials जैसे 'हाथ से बनाए गए' content कम होते जाएंगे
(थोड़ा लंबा है, लेकिन सब कुछ बेहतर दुनिया की सच्ची इच्छा से कहा गया है)
यह नज़रिया मुख्यधारा की 'anti-AI' भावना से थोड़ा अलग है
intellectual property की अवधारणा, मानवता में सीधे योगदान से ज़्यादा, जानकारी के स्वामित्व को कुछ व्यक्तियों के हाथ में जमा करके उसे पूरी मानवता को किराये पर देने जैसी संरचना बनाती है
लेकिन यह भी ज़रूरी है कि individual creators अपनी आजीविका चला सकें
मेरा मानना है कि सिर्फ Karpathy ही नहीं, बल्कि हज़ारों YouTube creators भी अपने-अपने क्षेत्रों में समाज के लिए बड़ा योगदान कर रहे हैं
बस यह थोड़ा कड़वा लगता है कि बहुतों को sponsorships पर निर्भर रहना पड़ता है
Patreon है, लेकिन वह भी आदर्श नहीं है
मैं सहमत हूं कि यह सारी मेहनत समाज में बड़े योगदान का एक तरीका है
हाल ही में Daily Show में Jon Stewart ने AI training को मानव ज्ञान की strip mining कहा
AI training को कभी-कभी एकतरफ़ा तरीके से चोरी जैसा बताया जाता है, लेकिन वास्तव में इस पर बहुत विविध दृष्टिकोण मौजूद हैं
यह प्रवृत्ति आख़िरकार अति-पूंजीवादी knowledge ownership structure को और मज़बूत कर सकती है
जिससे ideas का स्वामित्व धीरे-धीरे और कम लोगों के हाथ में सिमटता जाए
यह पूरी दुनिया के लिए बहुत मददगार संरचना नहीं है, बल्कि कुछ समूहों को ही लाभ देती है
intellectual property transactions भी समय के साथ और ज़्यादा कुछ लोगों में केंद्रित होती जाती हैं
मेरा मानना है कि आधुनिक समाज के अनुरूप नई चर्चा और नई व्याख्या ज़रूरी है
हमेशा यह पराजयवादी सोच कि 'ऊपर वाले रोक देंगे, चर्चा करके भी क्या होगा' — बहस को रोक देती है, यह खटकता है
यह ज़रूरी है कि खुलकर बहस हो कि बेहतर रास्ते कैसे निकाले जा सकते हैं
मैं उनके ANN/LLM from scratch video series की अक्सर सिफारिश करता हूं
lectures बहुत स्पष्ट हैं, और coding style भी pythonic, संक्षिप्त और पढ़ने में आसान है
(pytorch vectorization वाले हिस्से जटिल हैं, लेकिन वह क्षेत्र ही कठिन है)
videos देखते हुए style भी सीखी जा सकती है, इस मायने में यह सबके लिए बहुत मददगार है
मैं सोच रहा हूं कि क्या मैं अपनी मनोविज्ञान की सभी किताबों, सामग्रियों, reports और papers पर model train कर सकता हूं
और फिर 1xH100 node(लिंक) पर ज़रूरत पड़ने पर विशिष्ट सवालों के लिए inference चला सकता हूं
तकनीकी रूप से यह संभव है, लेकिन performance बहुत खराब होगी
ऐसे मामले में बेहतर है कि कोई छोटा pretrained model लेकर अपने data पर fine-tune करें
या RAG workflow (Retrieval Augmented Generation), या दोनों का संयोजन इस्तेमाल करें
ऐसा किया जा सकता है
लेकिन सामान्य-purpose model का उपयोग करके, और अपने documents को working context में लाने के कई तरीके अपनाकर (जैसे RAG, Apple की hierarchical memories आदि paper लिंक), शायद इससे बेहतर नतीजे मिलें
कर तो सकते हैं
लेकिन आपका dataset अपने आप में बहुत छोटा होगा, इसलिए pretrained model + fine-tuning, या छोटे model + RAG की तुलना में प्रदर्शन काफी कमजोर रहेगा
नहीं
यह project वास्तव में प्रेरक है!
अच्छा होगा अगर वास्तविक prompt performance examples या test results देखने को मिलें
यहां वास्तविक prompt screenshots हैं