किसी एक काम के लिए छोटे मॉडल को फाइन-ट्यून करना
फाइन-ट्यूनिंग एक छोटे मॉडल को एक खास काम सिखाती है। जानें कि यह कब काम आती है, डेटा कैसे तैयार करें, LoRA और QLoRA एक ही GPU पर कैसे फिट होते हैं, और पहले व बाद के नतीजे कैसे मापें।
60 सेकंड में
किसी एक काम के लिए छोटे मॉडल को फाइन-ट्यून करना
फाइन-ट्यूनिंग एक छोटे मॉडल को एक खास काम सिखाती है। जानें कि यह कब काम आती है, डेटा कैसे तैयार करें, LoRA और QLoRA एक ही GPU पर कैसे फिट होते हैं, और पहले व बाद के नतीजे कैसे…
पहले इन्हें आज़माएँ
- 1
बेहतर प्रॉम्प्ट्स
प्रॉम्प्ट में साफ निर्देश और कुछ उदाहरण। बदलने में सबसे सस्ते और तेज़। - 2
रिट्रीवल (RAG)
अगर मॉडल के पास तथ्य (facts) नहीं हैं, तो उसे सही दस्तावेज़ दें। बहुत सारे नए तथ्य जोड़ने के लिए फाइन-ट्यूनिंग सही तरीका नहीं है। - 3
कोई दूसरा मॉडल
हो सकता है कोई दूसरा छोटा मॉडल उस काम को पहले से ही अच्छे से कर लेता हो। - 4
फिर फाइन-ट्यून करें
जब आपको ऐसा तय फॉर्मेट, स्टाइल या हुनर चाहिए जो सिर्फ प्रॉम्प्ट से भरोसेमंद तरीके से न मिल पा रहा हो।
| फाइन-ट्यून करने की अच्छी वजहें | कमज़ोर वजहें |
|---|---|
| आउटपुट हर बार एक सख्त फॉर्मेट में ही आना चाहिए | आप चाहते हैं कि मॉडल आपकी कंपनी की पूरी विकी सीख ले |
| बहुत सारे उदाहरणों वाला कोई खास क्लासिफिकेशन या एक्सट्रैक्शन का काम | आपके पास सिर्फ दस उदाहरण हैं |
| किसी एक काम के लिए एक बड़े और महंगे मॉडल की जगह छोटा मॉडल इस्तेमाल करना है | प्रॉम्प्टिंग को अभी ठीक से आज़माया ही नहीं गया है |
| कोई खास टोन या किसी क्षेत्र का खास अंदाज़ | काम हर हफ्ते बदल जाता है |
डेटा तैयार करना
- फॉर्मेट: कई टूल्स JSON Lines स्वीकार करते हैं, जिसमें हर लाइन पर एक उदाहरण होता है, अक्सर चैट मैसेज की तरह जिसमें एक यूज़र का टर्न और एक सटीक असिस्टेंट का टर्न होता है।
- मात्रा से बेहतर गुणवत्ता: कुछ सौ साफ, अलग-अलग तरह के और सही उदाहरण अक्सर हज़ारों खराब उदाहरणों से बेहतर होते हैं।
- असली तरह का डेटा शामिल करें: छोटे और बड़े इनपुट्स, टाइपिंग की गलतियाँ, हिंग्लिश और दूसरी मिली-जुली भाषाएँ शामिल करें, अगर आपके यूज़र्स उसी तरह लिखते हैं।
- पहले ही अलग बाँट लें: ट्रेनिंग से पहले एक टेस्ट सेट अलग रख लें, और उस पर कभी ट्रेन न करें।
- प्राइवेसी: नाम, फोन नंबर, आधार जैसे नंबर और दूसरा निजी डेटा हटा दें, जब तक कि आपके पास कोई कानूनी वजह और मंज़ूरी न हो।
import json, random
def load(path):
with open(path, encoding="utf-8") as f:
return [json.loads(line) for line in f if line.strip()]
rows = load("examples.jsonl") # each row: {"input": "...", "output": "..."}
seen, clean = set(), []
for r in rows:
key = r["input"].strip().lower()
if key and r.get("output") and key not in seen:
seen.add(key)
clean.append(r)
random.seed(42)
random.shuffle(clean)
n_test = max(20, len(clean) // 10)
test, train = clean[:n_test], clean[n_test:]
for name, part in (("train.jsonl", train), ("test.jsonl", test)):
with open(name, "w", encoding="utf-8") as f:
for r in part:
f.write(json.dumps(r, ensure_ascii=False) + "\n")
print(f"{len(rows)} rows -> {len(clean)} unique -> {len(train)} train, {len(test)} test")कम बजट में LoRA और QLoRA
transformers, peft और trl लाइब्रेरीज़, और 4-बिट लोडिंग के लिए bitsandbytes शामिल हैं। इनके APIs नए वर्ज़न के साथ बदलते रहते हैं, इसलिए पुराने ब्लॉग पोस्ट देखने के बजाय उनके ताज़ा डॉक्यूमेंटेशन को देखें।पहले और बाद का फ़र्क मापें
- 1
बेसलाइन
टेस्ट सेट पर बेस मॉडल को (अपने सबसे अच्छे प्रॉम्प्ट के साथ) चलाएँ। उसका स्कोर नोट करें। - 2
ट्रेन करें
सिर्फ ट्रेनिंग सेट पर ही फाइन-ट्यून करें। सेटिंग्स और डेटा के वर्ज़न के नोट्स रखें। - 3
फिर से टेस्ट करें
फाइन-ट्यून किए गए मॉडल को उसी टेस्ट सेट पर, उसी स्कोरिंग के साथ चलाएँ। - 4
साइड इफेक्ट्स जाँचें
कुछ सामान्य सवाल और सेफ़्टी प्रॉम्प्ट्स आज़माएँ। क्या कुछ बिगड़ा तो नहीं? - 5
फैसला लें
इसे तभी रखें जब यह उस काम में बेसलाइन से साफ तौर पर बेहतर हो और इसने किसी ज़रूरी चीज़ को न बिगाड़ा हो।
और देखें और पढ़ें
लैब
एक खास काम के लिए साफ, अलग-अलग हिस्सों में बँटा डेटासेट और पहले-और-बाद के मूल्यांकन की योजना।
समस्या
काम: "किराना दुकान के वॉट्सऐप ऑर्डर मैसेज से सामान, मात्रा और डिलीवरी की तारीख को JSON के रूप में निकालना।"
- कम से कम 40 असली जैसे, बनाए गए ऑर्डर मैसेज उसी तरह लिखें जैसे लोग असल में टाइप करते हैं (अंग्रेज़ी, हिंग्लिश, शॉर्ट फॉर्म, स्पेलिंग की गलतियाँ), और हर एक के साथ सही JSON आउटपुट दें।
- उन्हें JSONL के रूप में सेव करें और पाठ से डेटा की सफाई और विभाजन वाली स्क्रिप्ट चलाएँ।
- स्कोरिंग का एक नियम लिखें: उदाहरण के लिए, हर बिल्कुल सही फील्ड के लिए 1 अंक।
- टेस्ट सेट पर एक अच्छे प्रॉम्प्ट के साथ एक छोटा लोकल मॉडल चलाएँ और बेसलाइन स्कोर नोट करें, या कागज़ पर लिखें कि आप इसे कैसे करेंगे।
- अपनी फाइन-ट्यूनिंग योजना लिखें: बेस मॉडल (लाइसेंस की जाँच के साथ), LoRA या QLoRA, आप कहाँ ट्रेन करेंगे, और किस स्कोर के आने पर इसे रखना फायदेमंद होगा।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपने टेस्ट सेट को देखते हुए अपने प्रॉम्प्ट को कई बार ट्यून किया, और फिर फाइन-ट्यून किया। आपकी यह तुलना सही क्यों नहीं हो सकती, और आप इसे कैसे ठीक करेंगे?दिखाएं
टेस्ट सेट पर प्रॉम्प्ट को ट्यून करके, आपने इसे कुछ हद तक उन उदाहरणों के हिसाब से ढाल लिया है, इसलिए नए डेटा की तुलना में बेसलाइन स्कोर बहुत ज़्यादा या बहुत कम हो सकता है। तीन हिस्से रखें: एक ट्रेनिंग सेट, प्रॉम्प्ट और सेटिंग्स आज़माने के लिए एक डेवलपमेंट सेट, और एक टेस्ट सेट जिसे आप सिर्फ आखिर में अंतिम तुलना के लिए इस्तेमाल करते हैं।
Q2एक फाइन-ट्यून किया गया छोटा मॉडल, लंबे प्रॉम्प्ट वाले बड़े मॉडल से सस्ता क्यों हो सकता है, भले ही दोनों सही जवाब देते हों?दिखाएं
निर्देशों और उदाहरणों से भरे लंबे प्रॉम्प्ट वाले बड़े मॉडल में हर रिक्वेस्ट पर उन सभी इनपुट टोकन्स के पैसे लगते हैं, और बड़े मॉडल पर हर टोकन ज़्यादा महंगा होता है। फाइन-ट्यून किया गया छोटा मॉडल फॉर्मेट सीख चुका होता है, इसलिए उसे छोटे प्रॉम्प्ट की ज़रूरत होती है, और हर टोकन को प्रोसेस करना सस्ता होता है। ज़्यादा ट्रैफ़िक होने पर यह फ़र्क बहुत बड़ा हो सकता है। फिर भी आपको इसे ट्रेन करने और चलाने की लागत जोड़नी होगी।
अक्सर पूछे जाने वाले सवाल
क्या मैं बिना GPU के फाइन-ट्यून कर सकता हूँ?
बहुत छोटे मॉडल्स के लिए CPU पर ट्रेनिंग संभव है, लेकिन यह आमतौर पर बहुत धीमी होती है। ज़्यादातर लोग एक सिंगल GPU, मुफ्त नोटबुक टियर, या कुछ समय के लिए पेड रेंटल का इस्तेमाल करते हैं। प्लानिंग, डेटा तैयार करना और मूल्यांकन का काम किसी भी लैपटॉप पर किया जा सकता है।
क्या फाइन-ट्यूनिंग से मॉडल नए तथ्य सीख जाएगा?
थोड़े-बहुत, लेकिन भरोसेमंद तरीके से नहीं। यह फॉर्मेट, स्टाइल और किसी खास हुनर को सिखाने के लिए कहीं बेहतर है। बदलने वाले तथ्यों के लिए, जैसे कि कीमतें या नियम, रिट्रीवल का इस्तेमाल करें।
LoRA ट्रेनिंग के अंत में मुझे क्या मिलता है?
एक छोटी अडैप्टर फ़ाइल। आप इसे मूल बेस मॉडल के साथ लोड करते हैं। कुछ टूल्स इसे बेस मॉडल में मर्ज भी कर सकते हैं और फिर नतीजे को क्वांटाइज़ कर सकते हैं, उदाहरण के लिए लोकल इस्तेमाल के लिए GGUF में।
मेरा फाइन-ट्यून किया गया मॉडल सामान्य बातचीत में खराब हो गया। क्या यह सामान्य है?
ऐसा हो सकता है, खासकर सीमित डेटा या बहुत ज़्यादा ट्रेनिंग के साथ। अगर सामान्य बातचीत की क्षमता मायने रखती है, तो कुछ सामान्य उदाहरण भी मिलाएँ, कम समय के लिए ट्रेन करें, और अपने मूल्यांकन में हमेशा साइड इफेक्ट्स की जाँच करें।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।