- Meta ने Llama 2-आधारित code-specialized model Code Llama पेश किया है, जिसे research और commercial use के लिए मुफ्त उपलब्ध कराया गया है, और इस पर वही community license लागू होता है
- Code Llama, code और natural language prompt दोनों को इनपुट के रूप में लेकर code generation, completion और debugging को सपोर्ट करता है, और Python, C++, Java, PHP, TypeScript, C#, Bash आदि संभालता है
- मॉडल आकार 7B, 13B, 34B, 70B में बंटे हैं; छोटे मॉडल कम latency के लिए बेहतर हैं, जबकि 34B और 70B का लक्ष्य बेहतर coding support देना है
- base model, Python-specialized model, और natural language instruction समझने के लिए Instruct variant उपलब्ध हैं; वास्तविक code generation के लिए Instruct के उपयोग की सिफारिश की जाती है
- Code Llama 34B ने Meta के internal evaluation में HumanEval 53.7% और MBPP 56.2% दर्ज किए, और यह एक खुला code-specialized model जारी कर community evaluation तथा vulnerability सुधार को बढ़ावा देने का प्रयास है
रिलीज़ का तरीका और 70B अपडेट
- Meta ने text prompt से code generate करने वाला बड़ा language model Code Llama जारी किया है
- Code Llama का लक्ष्य publicly available code LLMs में state-of-the-art performance हासिल करना है, और इसका फोकस developer workflow को तेज़ व अधिक efficient बनाना तथा coding सीखने वालों के लिए entry barrier कम करना है
- इसे research और commercial use के लिए मुफ्त उपलब्ध कराया गया है, और Llama 2 जैसा community license के तहत वितरित किया गया है
- 29 जनवरी 2024 के अपडेट में Code Llama परिवार का सबसे बड़ा और सबसे सक्षम मॉडल Code Llama 70B जोड़ा गया
- CodeLlama - 70B: base code model
- CodeLlama - 70B - Python: Python-specialized 70B model
- Code Llama - 70B - Instruct: natural language instruction समझने के लिए fine-tuned 70B model
Llama 2 को code tasks के लिए अनुकूलित किया गया मॉडल
- Code Llama, Llama 2 का code-specialized version है, जिसे code-focused dataset पर अतिरिक्त training दी गई है
- यह code और natural language prompt दोनों को इनपुट के रूप में लेकर कई coding tasks में इस्तेमाल किया जा सकता है
- code generation
- code के बारे में natural language generation
- code completion
- debugging
- उदाहरण prompt: “फिबोनाची sequence प्रिंट करने वाला function लिखो” जैसी natural language request
- समर्थित भाषाओं में Python, C++, Java, PHP, TypeScript(JavaScript), C#, Bash शामिल हैं
मॉडल आकार, training data और latency चयन
- Code Llama 7B, 13B, 34B, 70B parameter size में उपलब्ध है
- 70B को छोड़कर बाकी मॉडल code और code-related data के 500B tokens पर train किए गए हैं, जबकि 70B को 1T tokens पर train किया गया है
- 7B और 13B के base और Instruct मॉडल fill-in-the-middle(FIM) फीचर के साथ train किए गए हैं, जिससे मौजूदा code के बीच में नया code insert किया जा सकता है
- इससे instant code completion जैसे tasks संभव होते हैं
- अलग-अलग model size के अनुसार serving cost और latency characteristics बदलती हैं
- 7B model को single GPU पर serve किया जा सकता है
- 34B और 70B सबसे अच्छे results और बेहतर coding support देते हैं
- 7B और 13B तेज़ हैं, इसलिए real-time code completion जैसे low-latency tasks के लिए अधिक उपयुक्त हैं
- Code Llama models अधिकतम 100,000 token context में stable generation प्रदान करते हैं
- सभी models को 16,000 token sequence पर train किया गया है
- अधिकतम 100,000 token input पर बेहतर प्रदर्शन देखा गया
- लंबे input sequence केवल लंबे program generation में ही नहीं, बल्कि codebase का अधिक context model तक पहुँचाने में भी मदद करते हैं, जिससे generation output की relevance बढ़ती है
- बड़े codebase की debugging में किसी खास issue से जुड़े सभी code को समझना कठिन हो सकता है, इसलिए developer पूरे बड़े code chunk को model में दे सकता है
base, Python और Instruct: तीन variants
- Code Llama परिवार base model के अलावा Python-specialized model और Instruct variant भी शामिल करता है
- Code Llama - Python, Python code के 100B tokens पर अतिरिक्त fine-tuning किया गया language-specialized model है
- Python, code generation में सबसे अधिक benchmark की जाने वाली भाषा है
- Python और PyTorch का AI community में महत्वपूर्ण स्थान है
- Code Llama - Instruct, instruction tuning और alignment से गुज़रा हुआ variant है
- training को natural language instruction input और expected output के साथ आगे बढ़ाया गया
- इसे इस तरह डिज़ाइन किया गया है कि यह prompt से इंसानों की अपेक्षित output को बेहतर समझ सके
- वास्तविक code generation के लिए Code Llama - Instruct की सिफारिश की जाती है
- क्योंकि इसे natural language में उपयोगी और सुरक्षित जवाब देने के लिए fine-tune किया गया है
- Code Llama और Code Llama - Python को सामान्य natural language tasks के लिए recommend नहीं किया जाता
- ये दोनों models natural language instructions को follow करने के लिए डिज़ाइन नहीं किए गए हैं
- Code Llama, code-specialized tasks के लिए है और अन्य tasks के base model के रूप में उपयुक्त नहीं है
- उपयोगकर्ताओं को license और acceptable use policy का पालन करना होगा
benchmark और safety evaluation
- Meta ने Code Llama की performance का मूल्यांकन करने के लिए HumanEval और MBPP benchmarks का इस्तेमाल किया
- internal benchmark में Code Llama ने open source code-specialized LLMs और Llama 2 से बेहतर performance दिखाई
- Code Llama 34B ने HumanEval 53.7% और MBPP 56.2% दर्ज किए
- अन्य state-of-the-art public solutions की तुलना में यह सबसे ऊँचा score था
- इसका आकलन ChatGPT के बराबर स्तर का किया गया
- रिलीज़ से पहले कई safety measures लागू किए गए, और red team process में malicious code generation risk का quantitative evaluation किया गया
- malicious code को स्पष्ट इरादे से माँगने वाले prompts बनाए गए
- Code Llama के responses की तुलना ChatGPT(GPT3.5 Turbo) के responses से करके score किया गया
- परिणामों में Code Llama ने अधिक सुरक्षित responses दिए
- responsible AI, offensive security engineering, malware development, और software engineering के विशेषज्ञों द्वारा की गई red team की विस्तृत जानकारी research paper में उपलब्ध है
सार्वजनिक सामग्री और जिम्मेदार उपयोग
- developer पहले से ही नया software लिखने से लेकर existing code debugging तक कई tasks में LLMs का उपयोग कर रहे हैं
- Code Llama का लक्ष्य developer workflow को अधिक efficient बनाना है, ताकि वे दोहराए जाने वाले tasks की बजाय अधिक human-centric काम पर ध्यान दे सकें
- Meta का मानना है कि coding LLMs innovation और safety दोनों के लिहाज़ से open approach के बड़े फायदे पा सकते हैं
- खुला code-specialized model community को model capability का evaluation करने, problems खोजने, और vulnerabilities को ठीक करने में सक्षम बनाता है
- Code Llama की training recipe GitHub repository पर सार्वजनिक है
- model weights Llama page पर उपलब्ध हैं
- research paper में development details, benchmark testing method, limitations, known challenges, mitigation measures, और future research tasks शामिल हैं
- डाउनस्ट्रीम models को जिम्मेदारी से विकसित करने के लिए दिशानिर्देश देने वाली Responsible Use Guide भी अपडेट की गई है
- content policy और mitigation measures की परिभाषा
- data preparation
- model fine-tuning
- performance evaluation और improvement
- input और output स्तर के risk response
- user interaction में transparency और reporting mechanism बनाना
- developers को code-specialized evaluation benchmark से models का मूल्यांकन करना चाहिए, और malware, computer virus, तथा malicious code generation जैसे use cases पर safety research करनी चाहिए
- automated और human evaluation के लिए safety datasets के उपयोग तथा adversarial prompt आधारित red teaming की भी सिफारिश की गई है
आगे के कदम और संदर्भ सामग्री
- Code Llama को research, industry, open source projects, NGO, और enterprises सहित कई क्षेत्रों के software engineers को सपोर्ट करने के लिए डिज़ाइन किया गया है
- base model और Instruct model जो दे सकते हैं, उससे आगे भी कई use cases अभी बाकी हैं
- Meta को उम्मीद है कि Code Llama, दूसरों को Llama 2 का उपयोग कर research और commercial products के लिए नए tools बनाने के लिए प्रेरित करेगा
- संबंधित सामग्री
1 टिप्पणियां
Hacker News की राय
llama.cpp के साथ लगभग तुरंत चल जाता है, इसलिए लोकल पर आसानी से टेस्ट किया जा सकता है: https://github.com/ggerganov/llama.cpp/issues/2766
CodeLlama-7b-Python को q4_0 quantization के साथ चलाकर देखा, तो “पहले 10 prime numbers print करो” वाले Python prompt पर इसने
print_primes,is_prime,mainतक शामिल करते हुए काफ़ी plausible code generate कियायह देखना दिलचस्प होगा कि बड़े models, खासकर community tuning और बेहतर context/prompt के बाद, कैसे निकलते हैं
primes_upto(limit: int)में boolean array से composite numbers mark करें, औरitertools.isliceसे सिर्फ पहले 10 print करें तो2 3 5 7 11 13 17 19 23 29मिलता हैprint("1, 2, 3, 5, 7, 11... and so on!Llama2 भी एक महीने से ज़्यादा पहले आया था, लेकिन मैं कई हफ्तों से access waitlist में हूँ, और यह model भी वही form इस्तेमाल करता है, इसलिए ज़्यादा उम्मीद नहीं है
जानना चाहता हूँ कि क्या इसे किसी और तरीके से मिला
बेशक यह लगभग definition का मामला है, और हो सकता है कुछ communities या fields 1 को prime मानती हों, लेकिन language models इस्तेमाल करते समय ऐसी subtle चीज़ें सामने आ जाती हैं
¹) https://www.google.com/search?q=is+1+a+prime+number
निजी तौर पर मुख्य बात यह है कि यह अधिकतम 100,000-token context में stable generation देता है
कहा गया है कि सभी models को 16,000-token sequences पर train किया गया, और maximum 100,000-token input पर भी improvement दिखता है
हालांकि paper पढ़ने पर लगता है कि key information retrieval accuracy 16k tokens के बाद काफ़ी खराब हो जाती है, इसलिए 100k context असल में कितना उपयोगी होगा, यह अभी देखना बाकी है
paper में Unnatural Code Llama आता है, और MBPP pass@100 में Code Llama Python से थोड़ा पीछे और HumanEval pass@1 में GPT-4 से थोड़ा पीछे रहने के मामलों को छोड़ दें तो यह सभी benchmarks पर दूसरे models/fine-tuning को पछाड़ता है
Meta बस इतना कहता है कि वह यह model बाद में release नहीं करेगा, वजह नहीं बताता, इसलिए जिज्ञासा है कि इतना शानदार दिखने वाला model वे क्यों नहीं निकाल रहे
100k चौड़ाई वाली Transformer layers को सीधे इस्तेमाल करना cost के लिहाज से संभव नहीं होगा, तो उन्होंने कौन-सी trick इस्तेमाल की होगी
Code Llama का 7B model भी Copilot के पीछे के model Codex से competitive दिखता है
https://ai.meta.com/blog/code-llama-large-language-model-cod...
GitHub भी “Copilot X” के साथ GPT-4 की तरफ़ जाने की बात कई बार कह चुका है[1][2]
[0] https://github.blog/2023-07-28-smarter-more-efficient-coding...
[1] https://github.com/features/preview/copilot-x
[2] https://github.blog/2023-07-20-github-copilot-chat-beta-now-...
coding करते समय “इस random चीज़ को कैसे करूँ?” जैसे सवालों के लिए मैं 7B को terminal tab में लगातार खुला रखता हूँ, और निजी तौर पर इसने लगभग Google/Stack Overflow की जगह ले ली है
Code Llama Python खास तौर पर Python के लिए tune किया गया है, इसलिए बहुत दिलचस्प है
सोचता हूँ कि क्या Rust में broadly सक्षम model, Linux में broadly सक्षम model, genomics में broadly सक्षम model, physics modeling में broadly सक्षम model जैसे domain-specific LLMs बनाकर उन्हें आपस में बातचीत कराते हुए collaboration से problems solve कराए जा सकते हैं
machines से सच में काम करवाने वाला काफ़ी crazy future लगेगा
हालांकि संभव है कि यह कई छोटे models इस्तेमाल करने के बजाय कुछ बड़े models इस्तेमाल करने वाला तरीका हो
कुछ महीने पहले Godot scripts के लिए ऐसा ही एक प्रयास हुआ था और कहा गया कि वह काफ़ी अच्छा है: https://github.com/minosvasilias/godot-dodo
मुझे लगता है कि ज़्यादा attempts इसलिए नहीं हुए क्योंकि base Llama अपनी दूसरी खूबियों की तुलना में coding में उतना अच्छा नहीं था, और Starcoder जैसी चीज़ें अपेक्षाकृत दब गईं
अगर अभी नहीं जानते, तो Society of Mind search करके देखना अच्छा होगा
C पर्याप्त low-level है, फिर भी दुर्लभ मौकों पर अब भी पढ़ने लायक रहता है
सबसे अच्छा मॉडल Unnatural Code Llama सार्वजनिक नहीं किया गया है
शायद इसलिए कि उसे GPT-4 आधारित डेटा पर train किया गया होगा, जिससे OpenAI की terms of use का उल्लंघन हो सकता है
“Unnatural” पेपर[1] के अनुसार “unnatural” डेटा किसी LLM की मदद से generate किया जाता है, और संभव हो तो वे सबसे अच्छा LLM इस्तेमाल करना चाहेंगे
[1] https://arxiv.org/pdf/2212.09689.pdf
TheBloke कोई मज़ाक नहीं है[1]
लगता है आज ही quantized versions आ जाएंगे, और मैं 34B Python 4-bit quantized model आज़माने के लिए बहुत उत्साहित हूं, जो शायद 3090 में ठीक से फिट हो जाएगा
[1] https://huggingface.co/TheBloke/CodeLlama-13B-Python-fp16
ollama run codellama:7b-instructhttps://ollama.ai/blog/run-code-llama-locally
और models अभी भी upload हो रहे हैं: https://ollama.ai/library/codellama
Code Llama को local पर चलाने के लिए 7B-parameter quantized version को open source tool Ollama से download करके run किया जा सकता है: https://github.com/jmorganca/ollama
ollama run codellama "write a python function to add two numbers"completion model, Python model और अलग-अलग parameter counts वाले और models भी जल्द जोड़े जाएंगे
100,000-token context window बुरा नहीं है, लेकिन 100K tokens से बड़े codebase को संभालते समय embedded code model कौन-सा context चुनेगा, यह जानने की उत्सुकता है
अगर हम यह जानते हुए coding करें कि ऐसे tools व्यापक रूप से इस्तेमाल होंगे और उन पर निर्भरता बढ़ेगी, तो क्या नई बातों पर विचार करना पड़ेगा, यह भी जानना चाहूंगा
क्या हमें comments ज्यादा या कम लिखने चाहिए, tokens कम इस्तेमाल करने के लिए छोटा और कम readable code लिखना चाहिए, file structure या naming conventions बदलने चाहिए—आखिर ऐसे tools का ज्यादा से ज्यादा फायदा लेने के लिए हमें कैसे adapt करना होगा, यही सवाल है
code को context-independent और कम tokens वाला बनाया जा सकता है, लेकिन इससे इंसानों और language models दोनों के लिए वह और ज्यादा confusing हो जाएगा
चरम स्थिति में अगर
i,j,kजैसे सिर्फ एक-अक्षर वाले function और variable names इस्तेमाल किए जाएं, तो model कुछ भी infer नहीं कर पाएगा और मनमानी बकवास generate करेगासमाधान वही है जो complexity manage करते समय पहले से करते हैं: बड़े कामों को छोटे black-box modules और APIs में तोड़ना, ताकि token-heavy implementation छिप जाए और usage से अप्रासंगिक हो जाए
LLM को function signature, अच्छा description और कुछ usage examples दे दें, तो वह implementation जाने बिना भी उस function का उपयोग कर सकता है
संक्षिप्तता LLM की code process करने की क्षमता को ही घटाती है; वह context length की समस्या हल नहीं करती, और सबसे अच्छे case में भी scale नहीं होती
100k tokens काफी ज्यादा हैं, इसलिए ऐसा करने की जरूरत नहीं है
इस जानकारी को LLM को दिखाने लायक compress किया जा सकता है
उदाहरण के लिए C++ class के अंदर method implementation generate करना हो, तो LLM को उस header file का compressed version दिया जा सकता है जिसे उस class को compile करते समय compiler देखेगा
whitespace और comments हटाकर और macros घटाकर काफी tokens बचाए जा सकते हैं
standard library headers को शायद छोड़ा जा सकता है, क्योंकि fine-tuning के दौरान LLM उन्हें अच्छी तरह जानता होगा
सामान्य preprocessed C++ file कुछ optimization के बाद भी 100K limit तक पहुंच सकती है, इसलिए LLM को देने से पहले additional refinement करने वाला middleware जरूरी है
model बेहतर reasoning और suggestions देता है
data में भी इसी तरह, ठीक से tagged data और descriptive field names LLM के जवाबों को कहीं ज्यादा उपयोगी बना देते हैं
मन ही मन उम्मीद है कि ऐसे tools का फैलना साथी developers को आखिरकार code में comments डालने और तीन-अक्षर वाले variable names छोड़ने के लिए प्रेरित करेगा
GPT-4 में कौन-सी files डालनी हैं, यह चुनने का तरीका embedding-based था
हर file की embedding और instruction से बनी embedding पर थोड़ी simple processing करके वे files चुनीं जो ज्यादा relevant लगती थीं
यह perfect नहीं था, लेकिन medium-size codebase में ज्यादातर काफी था, और बहुत बड़े codebase के लिए suitable नहीं था
इस implementation की वजह से मैंने files को छोटा करना और content को दूसरी files में ले जाना शुरू कर दिया
1,000 lines से ज्यादा की files पूरा context window खा जाती थीं, इसलिए वे भारी पड़ती थीं; 100k context window में यह कम होगा, लेकिन मुझे लगता है files को वैसे भी छोटा रखना बेहतर है
पूरी file के बजाय individual functions/classes को embed करके भेजने जैसे ज्यादा smart तरीके भी हैं, इसलिए जल्द ही कोई बेहतर चीज बना देगा
AI का फायदा उठाने के लिए coding patterns बदलने की जरूरत शायद बहुत कम पड़ेगी
बंटे हुए code को एक बड़ी file में जोड़ना, comments घटाना और whitespace हटाना LLM के लिए preprocessor कर सकता है
Copilot अब तक अच्छी तरह काम करता रहा है, लेकिन interface ही इसकी सीमा है
यह बस अगले text snippet का अनुमान लगाना जानता है, ऐसा लगता है
सोचता हूँ कि “ये lines repeat हो रही हैं, इन्हें function में निकालना बेहतर होगा”, “इस structure को ऐसे बदलें तो इस्तेमाल करना आसान होगा” जैसी refactoring सुझाने वाला code AI कौन बना रहा है
Cody.dev में पूरे repository के लिए embeddings बनाई जा सकती हैं, इसलिए codebase और जिस समस्या को हल करना है उसके बारे में कहीं बड़ा context मिल सकता है
संदर्भ के लिए, मैं कुछ हफ्ते पहले Sourcegraph में शामिल हुआ हूँ
मेरी राय में अभी तक कुछ भी robust नहीं है
code highlight करके request करनी होती है, और Code Llama का इस्तेमाल भी support करता है: https://continue.dev/docs/walkthroughs/codellama
IntelliJ IDEA पहले से ही local पर दोनों खुशी-खुशी suggest करता है
यह बड़े duplicate code blocks ढूँढकर अपने-आप function में refactor कर सकता है, और code को ज्यादा clear बनाने वाली refactoring suggest करने वाली कई inspections भी हैं
आखिरी बार जब सुना था, यह beta में था और अच्छी तरह काम नहीं करता था
example page पर भी “add types” brush में
aऔरbnullcheck के target हैं, इसलिए वह बहुत strict है, और “fix simple bug” तो typo जैसा ही हैऐसे model को खुद चलाकर न देखने वाले बिल्कुल beginner के तौर पर, मैं सोचता हूँ कि किस तरह का hardware चाहिए
README में ठीक से नहीं मिला
source code को बड़ी tech company पर upload किए बिना ऐसा model इस्तेमाल कर पाने का idea सचमुच पसंद है
app install करें और बस कुछ shell commands चलाएँ
शायद यह model भी जल्द उपलब्ध होगा, और तब इसे Continue VS Code extension के साथ इस्तेमाल किया जा सकेगा
थोड़ा slow तो है, लेकिन लगता है कि बड़ी RAM की जरूरत न होने पर swap एक पर्याप्त alternative बन गया है
Ollama कहता है कि 13B model चलाने के लिए 32GB चाहिए, लेकिन मैं 16GB MBP पर
llama2:13bmodel चला रहा हूँ7B तो smart toaster पर भी चल जाए, इतना हल्का है
नहीं तो llama.cpp CPU inference ज्यादातर machines पर काम करेगा