- Magic: The Gathering में ड्राफ्ट कार्ड चयन को task बनाकर यह प्रयोग किया गया कि LLM training corpus में शायद मौजूद न होने वाले नए card environment में fine-tuning reasoning performance को कितना बढ़ा सकती है
- 17lands के draft records को prompts में बदला गया, और high win-rate players के selections को correct signal मानकर model से current pack और मौजूदा card pool देखकर card चुनवाया गया
- Fine-tuned 7B parameter model ने इस task में GPT-4 को साफ़ तौर पर पीछे छोड़ा, और human या experimenter level के करीब performance दिखाई; fine-tuned GPT-3.5 संभवतः बेहतर हो सकता था, लेकिन उसकी लागत कहीं ज़्यादा है
- लंबे training loop के कारण data format और prompt format को जल्दी validate करना मुश्किल था, और लगभग 40 घंटे के प्रयोग के बाद भी optimal prompt format को लेकर निश्चितता नहीं बची
- Practical तौर पर पहले evaluation set बनाना बेहतर है, और खुद training script लिखने के बजाय axolotl जैसे tool का उपयोग करना अच्छा है; छोटे OSS LLM भी GPU memory और storage के लिहाज़ से आसान नहीं हैं
प्रयोग का task: Magic draft
- यह प्रयोग यह देखने के लिए Magic: The Gathering के draft का उपयोग करता है कि LLM out-of-distribution data पर कितनी reasoning कर सकता है
- Magic: The Gathering एक strategic trading card game है जिसमें creatures और spell cards से opponent से मुकाबला किया जाता है, और draft वह तरीका है जिसमें random card bundles से बारी-बारी card चुनकर deck बनाया जाता है
- Draft दो बातों के कारण प्रयोग के लिए अच्छी तरह fit हुआ
- Reasoning: अच्छी choice करने के लिए अब तक चुने गए cards और current pack के cards को साथ में समझना पड़ता है
- Out-of-distribution data: नए Magic cards साल में 4–6 बार release होते हैं, और latest cards LLM training corpus में शायद न हों
- Data के लिए 17lands के draft tracking records का उपयोग किया गया
- 17lands digital Magic client के draft data को track करने वाली service है
- Win rate के आधार पर top players के choices देखकर “correct answer” के करीब signal बनाया जा सकता है
- Magic players के बीच भी सही choice को लेकर बहुत बहस होती है, इसलिए यह signal पूरी तरह स्पष्ट नहीं है, लेकिन यह test करने के लिए पर्याप्त है कि model नया task सीख रहा है या नहीं
Dataset composition और prompt format
- 17lands draft data एक बड़ा CSV file है जिसमें मोटे तौर पर ये जानकारी होती है
- current pack में चुने जा सकने वाले cards
- drafter ने अब तक चुने हुए cards
- उस pack से वास्तव में चुना गया card
- Language model fine-tuning के लिए इस data को text conversation format में बदला गया
- system message model को “DraftGPT” के रूप में set करता है और निर्देश देता है कि draft pick पूछे जाने पर पहले card name से जवाब दे
- user message में current pack number और pick number, अब तक का card pool, पिछले 5 packs में देखे गए रंग-वार card counts, और current pack के card descriptions शामिल होते हैं
- assistant message केवल चुने गए card का name output करता है
- Example data conversion 17lands data को LLM prompt में बदलने का example और ChatML form का full draft prompt के रूप में दिया गया है
- सबसे कठिन हिस्सा data को इस तरह format करना था कि desired result मिल सके
- Fine-tuning में prompt change को test करने के लिए आम तौर पर कई घंटों का training job चलाना पड़ता है
- इस वजह से experiment loop सामान्य prompt engineering की तुलना में लगभग 100 गुना धीमा महसूस हुआ
- जिन चीज़ों पर experiment किया गया उनमें लगभग 5 prompt formats, प्रति-card detail की मात्रा, पिछले कुछ picks का context जोड़ना, और नए card information को याद करवाने वाली “card commonsense” training lines शामिल थीं
- लगभग 40 घंटे के प्रयोग के बाद भी यह तय नहीं हो पाया कि इस task के लिए सबसे अच्छा prompt format क्या है
Fine-tuning execution environment
- GPU को Runpod से hourly basis पर rent किया गया
- इस्तेमाल किया गया GPU RTX 4090, 24GB VRAM model था
- Cost लगभग $0.7/hour थी
- शुरुआत में HuggingFace transformers और PEFT से खुद training script लिखने की कोशिश की गई, और limited GPU situation के कारण QLoRA चुना गया
- खुद script लिखने के तरीके में काफी trial and error रहा
- FlashAttention जैसी, जानने पर simple optimization से लेकर LoRA parameters जैसे options तक—जिन्हें paper पढ़े बिना समझना मुश्किल था—काफी choices थीं
- हर चीज़ को एक-एक करके solve किया जा सकता है, लेकिन खुद समझने में बहुत समय लगता है
- अंत में axolotl का उपयोग किया गया
- इसमें कई optimizations default रूप से implemented हैं, इसलिए इसे चलाना आसान था
- Documentation भी ठीक था, और LLM fine-tuning शुरू करने वाले ज़्यादातर लोगों के लिए इसे appropriate starting point माना गया
Model size और cost
- “छोटे” OSS LLM भी पुराने standards के हिसाब से बहुत बड़े हैं
- 2019 के आसपास अक्सर train किया जाने वाला BERT लगभग 110 million parameters का था
- 7B model उससे लगभग 70 गुना बड़ा है
- 7B model practical operation के लिहाज़ से भी भारी है
- Weights लगभग 16GB हैं, इसलिए storage समस्या बनता है
- QLoRA जैसी method इस्तेमाल करने पर भी GPU memory अब भी tricky रहती है
- GPT-3.5 fine-tuning बेहतर results दे सकती थी, ऐसा लगा, लेकिन cost ज़्यादा थी
- Mistral को bare metal पर fine-tune करने की तुलना में लगभग 100 गुना महंगी
- Inference पर भी premium price लगता है
- Mistral-7B के सबसे बड़े training run के समान GPT-3.5 fine-tuning की cost लगभग $500 आंकी गई
Evaluation method और results
- Experiment से पहले अच्छा evaluation set बनाना महत्वपूर्ण है
- इस task में training data से कुछ complete drafts को hold out किया गया, और देखा गया कि model human जैसा card चुनता है या नहीं
- Evaluation set होने से fine-tuning results का judgment आसान हुआ
- Card selection accuracy को define करना अपेक्षाकृत आसान था, लेकिन अगले criteria अधिक अस्पष्ट थे
- जब model अलग choice करे, तो वह choice justifiable होनी चाहिए
- अच्छा होगा अगर model reasonable तरीके से explain कर सके कि उसने वह card क्यों चुना
- अस्पष्ट criteria को कई examples सीधे देखकर किए गए eye-test evaluation से check किया गया, और यह process धीमी थी
- GPT-4 fine-tuned small model की तुलना में कम अजीब choices करता था, और choices justify करने की ability बेहतर थी
- Fine-tuned 7B model ने इस card selection task में accuracy और cost के लिहाज़ से GPT-4 और in-context learning को आसानी से पीछे छोड़ दिया
- एक experiment में model को एक card set पर fine-tune करके ऐसे card set पर evaluate किया गया जिसे उसने नहीं देखा था
- Model केवल अच्छे cards memorize नहीं कर रहा था, बल्कि draft concepts को कुछ हद तक generalize करता हुआ दिखा
Magic Copilot और draft bots
- Fine-tuned draft pick model को Magic Arena logs से जोड़ा गया, और एक quick Electron app के रूप में “Magic Copilot” बनाकर कुछ drafts में इस्तेमाल किया गया
- Card selection fine-tuned model generate करता था, और commentary GPT-4 संभालता था
- ज़्यादातर यह ठीक से काम करता था, लेकिन कभी-कभी GPT-4 fine-tuned model की choice से सहमत नहीं होता था और तुरंत counter-argument देता था
- 8 draft AI को जोड़कर bots के बीच simulation draft भी चलाया गया
- जब केवल bots आपस में cards pass करते थे, तो single-color decks चुनने की tendency मजबूत थी
- जब human अलग choices mix करता था, तो decks कहीं ज़्यादा normal form की तरफ converge करने लगते थे
- कुल मिलाकर यह draft AI मौजूदा options में से अधिक powerful और human-like draft AI के करीब दिखा
- Magic Arena के quick draft bots से तुलना करें तो, यह heuristic bots की तुलना में high-quality human drafters के ज़्यादा करीब choices करता है
1 टिप्पणियां
Hacker News की राय
यह लेख इस बात को अच्छी तरह दिखाता है कि अवधारणात्मक रूप से सरल दिखने वाले आइडिया को भी LLM fine-tuning से लागू करना कितना मुश्किल है
काफ़ी अच्छा शुरुआती dataset और base model होने पर भी यह आसान काम नहीं लगा। ऐसे मॉडल उन कामों के लिए ज़्यादा उपयुक्त लगते हैं जहाँ स्वाभाविक और पूरी तरह निश्चित सही उत्तर नहीं होता। उदाहरण के लिए, दिए गए विकल्पों की सूची में बिल्कुल परफेक्ट कार्ड चुनना combinatorially कठिन हो सकता है, लेकिन अच्छा कार्ड चुनना संभव है, और LLM भी मानव-स्तर के प्रदर्शन के करीब पहुँच सकता है। लगता है कि यहाँ यह सामने आता है कि अभी LLM को fine-tuning करके किस तरह की समस्याएँ हल की जा सकती हैं
उदाहरण के लिए, इस महीने मैं दोस्तों और बच्चों के लिए गिफ्ट ढूँढने में इसकी मदद ले रहा हूँ। समस्या हल करने के लिए सबसे बेहतरीन विकल्प ज़रूरी नहीं होता, अच्छा विकल्प काफ़ी होता है
शायद यह रोज़मर्रा की ज़िंदगी में सबसे क्रांतिकारी बदलाव न हो, लेकिन मैं Magic: The Gathering जैसे गेम में दिलचस्प play style वाले bot opponents का सच में इंतज़ार कर रहा हूँ
यह एक साफ़ उदाहरण लगता है कि R&D टीम अलग-अलग skill level पर नए mechanics बनाने और test करने की क्षमता को काफ़ी बेहतर कर सकती है
“उस डेटा से service के सबसे अच्छे खिलाड़ियों के draft picks देखकर सही उत्तर निकाला जाता है” वाले हिस्से में, क्या इसका मतलब https://www.17lands.com/leaderboard के draft picks देखकर उन्हें win rate के आधार पर sort किया गया?
मेरा मानना है कि मूल रूप से Match Wins या Trophies चुनना चाहिए था। नहीं तो service के सबसे अच्छे खिलाड़ियों को मापने के बजाय, आप ऐसे draft choices सीख रहे होंगे जिनमें ज़्यादातर निर्णय बहुत अच्छे थे, यानी lucky players। validation और test में भी उसका असर वैसे ही दिखेगा।
LLM baseline की बजाय, शायद 17lands data से हर कार्ड के लिए दूसरे कार्डों के मुकाबले “Elo”-जैसा score निकालकर बने baseline से तुलना करनी चाहिए। दो रंग तय होने से पहले सबसे ऊँचे score वाला कार्ड सुझाएँ, और रंग तय होने के बाद उन्हीं रंगों में या lands में सबसे ऊँचे score वाला कार्ड सुझाएँ।
हो सकता है LLM को rules की कुछ समझ हो, लेकिन अनदेखे कार्डों में यह card rarity, cost, और “बड़ा” जैसे signals को ज़्यादा पकड़ता हुआ लगता है। draft की “accuracy” भी कम लगती है, और मुझे नहीं पता कि उसका मतलब वही है जो सोचा गया है। अगर इसका मतलब सिर्फ इतना है कि इसने मूल data player से अलग चुनाव किया, जबकि उच्च win rate वाली choices ज़्यादातर broadly अच्छी choices थीं, तो अच्छी choices के बीच चुनना तो और मुश्किल लगता है
मानदंड Diamond या उससे ऊपर है। हालांकि, उन खिलाड़ियों के सभी drafts देखे जाते हैं, चाहे उनका प्रदर्शन खराब रहा हो।
यहाँ accuracy का मतलब है कि दिए गए pack में अच्छे खिलाड़ियों में से किसी एक के समान चुनाव किया गया या नहीं। बेशक यह subjective है, इसलिए perfect metric नहीं है, लेकिन उच्च-स्तरीय drafters की नकल करने की क्षमता जाँचने के लिए ठीक है
prompt loss को 0 करने के बजाय, क्या Axolotl में weighted loss भी आज़माया गया?
मुझे याद है कि कभी Microsoft के GPT-3 docs में कहा गया था कि जब response छोटा हो, जैसे यहाँ “Cut in.”, तब यह तरीका फ़ायदेमंद हो सकता है। fine-tuning से पहले subreddit या forum पर domain adaptation करना भी मदद कर सकता है
domain adaptation के बारे में भी सोच रहा था, और draft YouTube videos को transcribe करने पर भी विचार कर रहा हूँ। यह कितना मदद करेगा, इसे लेकर काफ़ी उत्सुक हूँ
अगर मैंने लेखक की पोस्ट सही पढ़ी है, तो हर choice point पर agent को दिए जाने वाले prompt में अब तक के card pool से सिर्फ card names जाते हैं, और मिले हुए pack के कार्डों के लिए ही पूरा text दिया जाता है
शायद context window के आकार की वजह से choices के बीच context बना नहीं रहता।
अगर ऐसा है, और यह मान लें कि ये sets bot के training cutoff के बाद के हैं, तो अच्छा drafter बनना क्या पूरी तरह संयोग नहीं होगा? bot के पास यह जानने का सचमुच कोई तरीका नहीं है कि पिछले picks के साथ कौन-से कार्ड अच्छे बैठते हैं, अब तक कौन-से signals भेजे और पाए गए हैं, वगैरह। सबसे अच्छा मानव खिलाड़ी भी, अगर उसने कार्ड पहले कभी न देखा हो, तो उदाहरण prompt के “Gadwick's First Duel -- {1}{U} (uncommon)” को देखकर नहीं बता सकता कि यह किसके साथ अच्छा बैठेगा।
आख़िरकार यह वही सामान्यतः अच्छे draft cards चुनेगा जो पिछले picks और colors से मेल खाते हों, और यही काम मौजूदा pick-order heuristics हमेशा से करते आए हैं
मॉडल को card quiz completion data पर भी train किया जाता है, जहाँ उसे कार्ड का पूरा text, type, CMC जैसी जानकारी पूरी करनी होती है। और pack के अंदर के cards पर भी इसे next-token completion सीखना पड़ता है, इसलिए draft picks बनाते समय यह कार्ड का पूरा text अनुमान लगाना भी सीखता है। कुल मिलाकर bot नए कार्डों का text काफ़ी व्यापक रूप से सीख लेता है
अगर नहीं देखा हो, तो https://news.ycombinator.com/item?id=38525978 भी इस पाठक-वर्ग के लिए दिलचस्प हो सकता है
यह “I hacked Magic the Gathering: Arena for a 100% win rate” पोस्ट है, और सिर्फ इस वजह से भी देखने लायक है कि शोधकर्ता ने पाया कि MTGA की decision AI Sparky बाहर से जितनी संदिग्ध लगती थी, उतनी बेवकूफ़ाना जटिल नहीं है
यह ज़्यादा उस अनुभव के लिए है जहाँ कोई नया खिलाड़ी, जो अभी गेम और उसके rules नहीं जानता, एक बेवकूफ़ कंप्यूटर के खिलाफ खेलकर देखे; या फिर अपने बनाए deck का draw और combo कैसे बनता है, यह जाँचने के लिए “goldfish against” खेलने का कंप्यूटर संस्करण समझिए। यह chess CPU जैसी चीज़ नहीं है
ड्राफ्ट को LLM के रूप में प्रस्तुत किया जा सकता है, यह बात बहुत दिलचस्प है
मैंने अब तक जो सबसे अच्छे ड्राफ्ट AI देखे हैं, वे किसी न किसी रूप में representation learning का उपयोग करते थे। संदर्भ: https://arxiv.org/pdf/2107.04438.pdf
अगर “representation learning” से आपका मतलब कुछ और था, तो हो सकता है मैंने गलत समझा हो
फिर भी, LLM representation में कुछ मज़ेदार बातें हैं। उदाहरण के लिए, system prompt के ज़रिए bot को preference या personality दी जा सकती है, जो काफ़ी मज़ेदार है
सोच रहा हूँ कि क्या हर कार्ड को एक token मानकर, ड्राफ्ट state को input दिया जाए और predicted token ही चुना जाने वाला कार्ड हो, तो शायद छोटा मॉडल इस्तेमाल किया जा सके या बेहतर परिणाम मिलें
इसके लिए custom tokenizer के साथ शुरुआत से training करनी पड़ेगी
<|post_author|>username<|post_title|>title here...जो मॉडल मिला, वह सब कुछ सामान्य plain text में format करने की तुलना में काफ़ी खराब था। शर्तें थीं MPT-30B, 15 special tokens, 300 million training tokens, और full fine-tuning.
मुझसे गलती हुई हो सकती है, लेकिन open source fine-tuning में बहुत बड़ी संख्या में tokens सफलतापूर्वक जोड़े जाने का उदाहरण भी मैंने अभी तक नहीं देखा है
यह “ऐसे कार्ड जिन्हें उसने कभी देखा ही नहीं” पर काम नहीं करेगा, और गलत होने पर बेतुने चुनाव कर सकता है, लेकिन लगता है accuracy 90% तक जा सकती है
Mistral को शुरुआती बिंदु बनाए बिना ड्राफ्ट के लिए neural network train करने से तुलना करना दिलचस्प होगा। epoch और cost, दोनों के हिसाब से देखना चाहूँगा
यह साफ़ नहीं है कि LLM वाला हिस्सा क्यों प्रासंगिक है। हो सकता है इंटरनेट पर deck lists या mock drafts इतनी अधिक हों कि उनका असर पड़ता हो, या फिर “LLM fine-tuning” का infra “neural network बनाना” की तुलना में बेहतर विकसित हो। शायद इसे आसान बनाने के लिए nnfiddle जैसी किसी चीज़ की ज़रूरत है
fine-tuning अपेक्षाकृत सस्ती होती है, और सिर्फ़ डेटा डालकर इसे ऐसे काम काफ़ी ठीक तरह से करने लायक बनाया जा सकता है। बेस checkpoint बनाने में बहुत compute लगता है, लेकिन उसमें ज़्यादातर “knowledge” पहले से होती है।
अगर आप शुरुआत से neural network बनाते हैं, तो पहले यह हल करना होगा कि कार्डों को input में कैसे map किया जाए। मुझे MTG की बहुत गहरी जानकारी नहीं है, लेकिन ज़्यादातर trading card games में text descriptions और जटिल effects होते हैं। text को logic में map करना LLM बहुत अच्छे से करता है, और अगर LLM न हो तो शुरुआत से ठीक-ठाक behavior आने तक काफ़ी compute भी लग सकता है।
ज़्यादातर software developers के लिए भी यही रास्ता आसान है। fine-tuning आम तौर पर text इकट्ठा करके उसे fine-tuning script में डाल देने का काम है। इसके लिए linear algebra या “convolution” क्या है, यह जानना भी ज़रूरी नहीं
मैं मान रहा हूँ कि “Mistral के बिना ड्राफ्ट के लिए neural network train करना” से आपका मतलब input layer को pack में मौजूद कार्डों के bitmap vector के रूप में रखना है। इस प्रयोग की मुख्य क्षमता यह है कि मॉडल सिर्फ़ कार्ड text के आधार पर उन sets पर भी काम करता है जिन्हें उसने कभी नहीं देखा और जिनका training data शून्य है। LLM के बिना यह मुश्किल लगता है
यह लेख बहुत अच्छा लगा। संयोग से मैं भी इस हफ़्ते Magic: The Gathering के लिए LLM fine-tuning देख रहा था
मैं कार्डों की semantic embedding के आधार पर functionally या mood के हिसाब से मिलते-जुलते कार्ड खोजने के लिए एक छोटा card similarity browser बना रहा हूँ।
अभी मैं सिर्फ़ InstructorXL इस्तेमाल कर रहा हूँ, और समझ नहीं पा रहा कि Instructor में गेम के बारे में जन्मजात knowledge की कमी है या मुझे prompt बेहतर बनाना चाहिए। अभी तक 9 prompts आज़मा चुका हूँ, लेकिन embedding generation की performance बहुत अच्छी नहीं लगी: https://github.com/HanClinto/MtgMatrix/blob/main/data/create...
अगला कदम similar cards का dataset डाउनलोड करना था, और देखना था कि क्या इससे किसी बड़े embedding model पर triplet loss training जैसी कोई चीज़ आज़माई जा सकती है। अभी तक यह नहीं समझ पाया कि इसे वास्तव में कैसे जोड़ा जाए, लेकिन इस लेख से काफ़ी प्रेरणा मिली