Mellum: जलद, लहान कोड पूर्णता मॉडेल

इंटिग्रेटेड डेव्हलपमेंट एन्व्हायरनमेंट (IDEs) च्या क्षेत्रात ऑटो कंप्लीशन फीचर्समुळे खूप मदत झाली आहे. आता या क्षेत्रात आर्टिफिशियल इंटेलिजन्स (AI) देखील प्रवेश करत आहे. IDEs मध्ये AI चा वापर वाढत असल्यामुळे पारंपरिक टूल्सचे पुनर्मूल्यांकन करणे आवश्यक आहे. जुन्या पद्धती अजूनही काम करत असल्या तरी, डेव्हलपर्सना आता आधुनिक तंत्रज्ञानाची अपेक्षा आहे.

हा लेख JetBrains च्या ब्लॉग पोस्टवर आधारित आहे. Mellum हे क्लाउड-आधारित ऑटो कंप्लीशनला सपोर्ट करणारे मॉडेल आहे. JetBrains त्यांच्या IDEs आणि प्रोग्रामर्ससाठी कोड एडिटर्ससाठी प्रसिद्ध आहे. त्यांनी Mellum विकसित केले आहे, जे जलद आणि कार्यक्षम कोड ऑटो कंप्लीशन पुरवते. Mellum स्थानिक डिव्हाइसवर प्रभावीपणे काम करण्यासाठी डिझाइन केले आहे, ज्यामुळे ते त्याच्या श्रेणीतील सर्वात वेगवान आणि कॉम्पॅक्ट मॉडेलपैकी एक ठरते. Microsoft Phi हा यासारखाच एक प्रकल्प आहे.

स्पष्ट आव्हाने

JetBrains च्या अभियंत्यांना AI-आधारित ऑटो कंप्लीशनच्या शोधात अनेक अडचणी आल्या:

  • गती आणि खर्च: पारंपरिक चॅट मॉडेल्स जास्त खर्चिक आणि कमी प्रतिसाद वेळेमुळे अव्यवहार्य ठरले. या मॉडेल्सना कोड-specific तंत्रज्ञानाची माहिती नव्हती, जसे की fill-in-the-middle (FIM) किंवा टोकन हीलिंग.
  • आउटपुट फॉरमॅटिंग: प्रमुख चॅट मॉडेल्स अनेकदा विसंगत फॉरमॅटमध्ये डेटा तयार करतात, ज्यामुळे प्रतिसाद parse करणे आणि संपादकात seamlessपणे integrate करणे कठीण होते.
  • डेटा Provenance: ट्रेनिंग डेटाचा स्रोत निश्चित करणे आणि संभाव्य कॉपीराइट उल्लंघनाचे मुद्दे कमी करणे हे एक मोठे आव्हान होते.

Mellum: एक दृष्टिकोन

JetBrains च्या डेव्हलपमेंट टीमला स्वतःचे मॉडेल तयार करणे हा सर्वोत्तम पर्याय असल्याचे समजले. त्यांचे ध्येय असे मॉडेल डिझाइन करणे होते, जे गुणवत्ता, अनुमान खर्च आणि लेटेंसीमध्ये संतुलन राखेल आणि ज्या डेटावर ते ट्रेन केले जाईल तो स्पष्ट Provenance असलेला असेल. प्राथमिक संशोधनात असे दिसून आले की सुमारे 4 अब्ज पॅरामीटर्स असलेले मॉडेल अनेक परिस्थितींमध्ये आणि युजर्ससाठी competent ऑटो कंप्लीशन क्षमता प्रदान करू शकते. याव्यतिरिक्त, मॉडेलला फक्त कोडवर प्रशिक्षित करून, ते अप्रासंगिक डेटाशिवाय टोकन्सची विशेष vocabulary तयार करू शकतात.

Mellum मॉडेलच्या ट्रेनिंग प्रक्रियेत तीन टप्पे आहेत, जे नवीन ज्ञान देतात आणि तयार केलेल्या कोडची गुणवत्ता वाढवतात. पहिल्या टप्प्यात मोठ्या प्रमाणात individual फाईल्सवर मूलभूत प्री-ट्रेनिंग असते. दुसरा टप्पा म्हणजे विशेष उदाहरणांच्या लहान सेटसह मॉडेलला refine करणे. तिसऱ्या टप्प्यात reinforcement learning with AI feedback (RLAIF) वापरून मॉडेलला IDE-specific वैशिष्ट्यांशी जुळवून घेणे आणि नको असलेले आउटपुट काढून टाकणे आहे.

प्री-ट्रेनिंग

अस्पष्ट डेटा स्रोताशी संबंधित संभाव्य समस्या टाळण्यासाठी, मॉडेलला सुरवातीपासून प्रशिक्षित केले गेले. त्यामुळे अनेक भाषा, प्रोग्रामिंग सिंटॅक्स, पॅटर्न आणि मूलभूत संकल्पनांची माहिती देणे आवश्यक होते.

डेटासेट

प्री-ट्रेनिंगसाठी मुख्य डेटा स्रोत TheStack होता. हा डेटासेट कायदेशीर आणि व्यावहारिकदृष्ट्या फायदेशीर आहे याची खात्री करतो.

प्री-ट्रेनिंग प्रक्रिया

प्री-ट्रेनिंग दरम्यान, सुमारे 3 ट्रिलियन टोकन्सपर्यंत पोहोचण्यासाठी डेटासेट अनेक वेळा sample केला गेला. 8192 टोकन्सची context window वापरली गेली आणि डेटासेटला या आकाराच्या fragments मध्ये विभाजित केले गेले. प्रत्येक fragment मधील निम्म्या फाईल्सवर fill-in-the-middle (FIM) transformation लागू केले गेले, ज्यामुळे मॉडेलला मागील आणि पुढील कोड दोन्ही विचारात घेण्यास प्रोत्साहित केले. हे तंत्र वास्तविक जगात कोड जनरेशनच्या परिस्थितीचे अनुकरण करते.

प्री-ट्रेनिंगचा टप्पा सोळा नोड्सच्या क्लस्टरवर आयोजित करण्यात आला होता, ज्यामध्ये प्रत्येकी आठ H100 GPUs होते. हा टप्पा पूर्ण होण्यासाठी सुमारे 15 दिवस लागले आणि त्यातून 4-अब्ज-पॅरामीटर Mellum-base मॉडेल तयार झाले.

प्री-ट्रेनिंगमुळे अनेक प्रोग्रामिंग भाषांचे विस्तृत ज्ञान असलेले सामान्य-उद्देशीय कोड ऑटो कंप्लीशन मॉडेल तयार होते. तथापि, या टप्प्यावर, मॉडेलला फक्त randomly निवडलेल्या फाइल सेगमेंटमधील पुढील टोकनचा अंदाज लावण्यासाठी प्रशिक्षित केले जाते. अतिरिक्त context शिवाय, मॉडेलला कोड स्ट्रक्चरची जाणीव नसते आणि कोड जनरेट करणे कधी थांबवायचे हे ठरवण्यासाठी कोणतीही यंत्रणा नसते.

फाईन-ट्यूनिंग टप्पा या मर्यादा दूर करण्यासाठी डिझाइन केलेला आहे.

Context-Aware फाईन-ट्यूनिंग

Enhanced Fill-in-the-Middle

प्री-ट्रेनिंगमध्ये, प्रेडिक्शनसाठी कोड fragments randomly निवडले जातात. फाईन-ट्यूनिंगमध्ये कोडला अधिक अर्थपूर्ण पद्धतीने segment करण्यावर लक्ष केंद्रित केले जाते. तसेच ‘in the wild’ मध्ये येणारे कोड fragments extract करण्यासाठी मॉडेलला शिकवले जाते.

विशेष उदाहरणे

व्यवहारात, कोड ऑटो कंप्लीशनसाठी आसपासच्या फाईल्स आणि मोठ्या संदर्भांना समजून घेणे आवश्यक आहे, ज्यात संपूर्ण प्रोजेक्ट्स देखील समाविष्ट असू शकतात.

डेटा प्रीप्रोसेसिंगसाठी, कंपनीने Code Engine नावाचा एक अंतर्गत प्रोजेक्ट सुरू केला: हा एक क्रॉस-प्लॅटफॉर्म SDK आणि कन्सोल युटिलिटीजचा सेट आहे, जो पूर्ण प्रोजेक्ट इंडेक्सिंगची आवश्यकता न ठेवता थेट सामान्य फाईल्समधून संदर्भ तयार करण्यासाठी विकसित केला गेला आहे. हे SDK अंतर्गत MapReduce क्लस्टरवर deploy केले गेले आणि हजारो पब्लिक रिपॉजिटरीज प्रोसेस करण्यासाठी वापरले गेले, ज्यामुळे वाजवी वेळेत ट्रेनिंगसाठी अनेक उपयुक्त उदाहरणे तयार झाली.

योग्य अल्गोरिदम शोधण्यासाठी काही trial and error करावे लागले.

विशिष्ट भाषांसाठी ट्यूनिंग

लहान मॉडेल्सना विशिष्ट भाषांसाठी specialization चा खूप फायदा होतो. बेस मॉडेल 80 हून अधिक भाषांवर प्रशिक्षित असले तरी, बहुतेक युजर्स सामान्यतः फक्त एक किंवा दोन भाषांमध्ये काम करतात. हे लक्षात घेऊन JetBrains ने अनेक specialized मॉडेल्स तयार केले:

  • mellum-all: JetBrains IDEs मध्ये उपलब्ध असलेल्या बहुतेक भाषा आणि बोलीभाषांना सपोर्ट करते, परंतु ऑटो कंप्लीशनची गुणवत्ता specialized मॉडेल्सपेक्षा कमी आहे.
  • mellum-python: Python आणि Jupyter मध्ये specialized आहे.
  • mellum-kotlin: Java आणि Kotlin मध्ये specialized आहे.
  • mellum-web: वेब तंत्रज्ञानामध्ये specialized आहे.

अंतिम टप्पा: RLAIF

शेवटी, लर्निंगचे ध्येय युजरच्या अपेक्षांशी जुळत नसल्यास त्या समस्या सोडवणे आवश्यक आहे. RLAIF - Reinforcement Learning with AI Feedback चा अतिरिक्त ट्रेनिंग टप्पा अशा समस्या सोडवण्यासाठी वापरला जातो.

हे मॉडेल युजरच्या इंटरॅक्शनमधून शिकते आणि युजरच्या प्राधान्यांचे अधिक चांगले प्रतिबिंब कसे दाखवायचे हे समजून घेते.

या दृष्टिकोनमुळे केवळ एकूण गुणवत्तेत सुधारणा होत नाही, तर त्रासदायक जनरेशन आर्टिफॅक्ट्सची संख्या देखील कमी होते.

Mellum किती चांगले आहे?

हे मॉडेल त्याच्या आकारमानानुसार खूप चांगले काम करते. त्याचे मूल्यांकन कसे केले गेले ते येथे दिले आहे:

  • सर्वप्रथम, मॉडेलचे अंतर्गत बेंचमार्क ‘JetBrains BigCode’ वर मूल्यांकन केले गेले.
  • त्यानंतर SAFIM सारख्या प्रसिद्ध पब्लिक बेंचमार्क्सवर त्याची चाचणी घेण्यात आली.
  • शेवटी, फीचर्ससाठी वापर आकडेवारी गोळा केली गेली आणि युजर मेट्रिक्सची गणना केली गेली.

ऑफलाइन मूल्यांकन

डेटा गोळा करणे हे एक गुंतागुंतीचे काम आहे, परंतु मूळ सजेशनची तुलना न्यूरल नेटवर्कने प्रस्तावित केलेल्या नवीन सजेशनशी करणारा एक चांगला मेट्रिक तयार करणे अधिक कठीण आहे. आम्ही एक छोटा अभ्यास केला आणि शेवटी दोन प्राथमिक मेट्रिक्सच्या संयोजनावर लक्ष केंद्रित केले:

EM:

  • Exact Match ही खूप लोकप्रिय कल्पना आहे.
  • कमी preprocessing सह, कंप्लीशनची पहिली ओळ मूळ ओळीशी जुळल्यास प्रेडिक्शन चांगले मानले जाते.

KK:

  • या मेट्रिकचे नाव त्याच्या लेखकांच्या नावावरून ठेवले आहे.
  • प्रस्तावित कंप्लीशनमधील ओळींच्या संख्येने विभाजित केल्यावर मूळमधील प्रस्तावित ओळींची संख्या.

JetBrains BigCode

अंतर्गत JetBrains BigCode टूल वापरून मिळवलेल्या बेंचमार्क डेटासेटवर मॉडेलचे मूल्यांकन केले गेले.

पब्लिक बेंचमार्क्सवर अवलंबून न राहता, आमच्या डेटासेटवर पूर्ण नियंत्रण ठेवून, विविध कोडिंग स्टाईल्स आणि पद्धतींसाठी मॉडेल गुणवत्तेचे নির্ভরযোগ্যपणे मूल्यांकन करणे शक्य होते.

JetBrains BigCode मूल्यांकनाचे निकाल दर्शवतात की गुणवत्ता लोकप्रिय मॉडेल्सच्या बरोबरीची आहे, परंतु Mellum लहान आणि अधिक कार्यक्षम आहे.

सिंगल-लाइन सजेशन्सची गुणवत्ता (EM मेट्रिक)

पब्लिक बेंचमार्क्स

मॉडेलचे मूल्यांकन केवळ अंतर्गत डेटासेटवरच नव्हे, तर SAFIM (syntax-aware fill in the middle) सारख्या विविध पब्लिक बेंचमार्क्सवर देखील केले गेले.

ऑनलाइन मूल्यांकन

मुख्य मेट्रिकला पूर्ण केलेल्या कोडचे गुणोत्तर (RoCC) म्हणतात. हे कोड संपादकात कोड ऑटो कंप्लीशन वापरून लिहिलेल्या कोड अक्षरांचे प्रमाण म्हणून परिभाषित केले जाते.

आणखी एक महत्त्वाचा मेट्रिक म्हणजे स्वीकृती दर (AR), जो दर्शविलेल्या सर्व सजेशन्सच्या संख्येने विभाजित केलेल्या स्वीकारलेल्या सजेशन्सची संख्या म्हणून मोजला जातो.

हा एक गुंतागुंतीचा प्रवास होता, पण JetBrains च्या तज्ञांनी तो सन्मानाने पूर्ण केला. शेवटी, एक सामान्य आणि अनेक विशेष मॉडेल्स प्राप्त झाले, जे JetBrains AI प्लॅटफॉर्मद्वारे उपलब्ध आहेत. ते आता JetBrains AI Assistant मध्ये यशस्वीरित्या काम करत आहेत.

पुढे काय?

  • JetBrains चे अभियंते सध्या वेब डेव्हलपमेंट भाषांसाठी मॉडेलवर काम करत आहेत. ते लवकरच पब्लिकसाठी उपलब्ध होऊ शकते.
  • एकाच वेळी पॅरामीटर्सची संख्या आणि डेटाची विविधता वाढवण्याची योजना आहे. कोडिंगमध्ये अनेक वेगवेगळी कार्ये आहेत - Mellum ते कार्ये देखील करण्यास सक्षम असेल. सर्व्हिस परफॉर्मन्स अजूनही एक महत्त्वाचा मेट्रिक आहे, त्यामुळे मॉडेलचा विस्तार वाजवी मर्यादेत असेल.