Autorët: Mayank Mishra⋆, IBM Matt Stallone⋆, IBM Gaoyuan Zhang⋆, IBM Yikang Shen, IBM Aditya Prasad, IBM Adriana Meza Soria, IBM Michele Merler, IBM Parameswaran Selvam, IBM Saptha Surendran, IBM Shivdeep Singh, IBM Manish Sethi, IBM Xuan-Hong Dang, IBM Pengyuan Li, IBM Kun-Lung Wu, IBM Syed Zawad, IBM Andrew Coleman, IBM Matthew White, IBM Mark Lewis, IBM Raju Pavuluri, IBM Yan Koyfman, IBM Boris Lublinsky, IBM Maximilien de Bayser, IBM Ibrahim Abdelaziz, IBM Kinjal Basu, IBM Mayank Agarwal, IBM Yi Zhou, IBM Chris Johnson, IBM Aanchal Goyal, IBM Hima Patel, IBM Yousaf Shah, IBM Petros Zerfos, IBM Heiko Ludwig, IBM Asim Munawar, IBM Maxwell Crouse, IBM Pavan Kapanipathi, IBM Shweta Salaria, IBM Bob Calio, IBM Sophia Wen, IBM Seetharami Seelam, IBM Brian Belgodere, IBM Carlos Fonseca, IBM Amith Singhee, IBM Nirmit Desai, IBM David D. Cox, IBM Ruchir Puri†, IBM Rameswar Panda†, IBM Abstrakt Modelet e mëdha gjuhësore (LLM) të trajnuara në kod po revolucionojnë procesin e zhvillimit të softuerit. Gjithnjë e më shumë, LLM-të e kodit po integrohen në mjediset e zhvillimit të softuerit për të përmirësuar produktivitetin e programuesve njerëzorë, dhe agjentët e bazuar në LLM fillojnë të tregojnë premtime për trajtimin e detyrave komplekse në mënyrë autonome. Realizimi i potencialit të plotë të LLM-ve të kodit kërkon një gamë të gjerë aftësish, duke përfshirë gjenerimin e kodit, rregullimin e gabimeve, shpjegimin dhe dokumentimin e kodit, mirëmbajtjen e repozitoreve dhe më shumë. Në këtë punë, ne prezantojmë serinë Granite të modeleve të kodit vetëm dekomoderues për detyra gjeneruese kodi, të trajnuar me kod të shkruar në 116 gjuhë programimi. Familja e modeleve Granite Code përbëhet nga modele që variojnë në madhësi nga 3 deri në 34 miliardë parametra, të përshtatshme për aplikime që variojnë nga detyra komplekse të modernizimit të aplikacioneve deri te rastet e përdorimit të kufizuar nga memoria në pajisje. Vlerësimi në një grup gjithëpërfshirës detyrash tregon se modelet Granite Code arrijnë vazhdimisht performancën më të lartë midis LLM-ve të kodit të disponueshme me burim të hapur. Familja e modeleve Granite Code u optimizua për rrjedhat e punës së zhvillimit të softuerit sipërmarrës dhe performon mirë në një sërë detyrash kodimi (p.sh., gjenerimi i kodit, rregullimi dhe shpjegimi), duke e bërë atë një model kodi të gjithanshëm "gjithë-rreth". Ne lëshojmë të gjitha modelet tona Granite Code nën një licencë Apache 2.0 si për kërkim ashtu edhe për përdorim komercial. https://github.com/ibm-granite/granite-code-models 1 Hyrje Gjatë disa dekadave të fundit, softueri është endur në strukturën e çdo aspekti të shoqërisë sonë. Ndërsa kërkesa për zhvillim softuerik rritet, është më kritike se kurrë të rritet produktiviteti i zhvillimit softuerik, dhe LLM-të ofrojnë një rrugë premtuese për plotësimin e programuesve njerëzorë. Përdorimet kryesore sipërmarrëse për LLM-të në produktivitetin e zhvillimit softuerik përfshijnë gjenerimin e kodit, shpjegimin e kodit, rregullimin e kodit, gjenerimin e testeve njësi dhe dokumentacionit, modernizimin e aplikacioneve, zbulimin e dobësisë, përkthimin e kodit dhe më shumë. Vitet e fundit kanë parë përparim të shpejtë në aftësinë e LLM-ve për të gjeneruar dhe manipuluar kod, dhe një sërë modelesh me aftësi mbresëlënëse kodimi janë në dispozicion sot. Modelet variojnë në madhësi nga miliarda parametra me një shifër (p.sh., Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024), etj.) deri në qindra miliarda: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere), dhe ndryshojnë në gjeneraliteti i përdorimit të synuar, me disa modele që synojnë të mbulojnë një gamë përdorimesh jashtë kodit, ndërsa të tjerët fokusohen kryesisht në detyra të lidhura me kodimin (p.sh., StarCoder (Li et al., 2023a; Lozhkov et al., 2024), CodeGen (Nijkamp et al., 2023), CodeLlama (Rozie`re et al., 2023), dhe CodeGemma (CodeGemma Team et al., 2024)). Megjithatë, mbeten boshllëqe të rëndësishme në fushën aktuale të LLM-ve për kod, veçanërisht në kontekstin e zhvillimit softuerik sipërmarrës. Së pari, ndërsa LLM-të e përgjithshme shumë të mëdha mund të arrijnë performancë të shkëlqyer kodimi, madhësia e tyre i bën ato të shtrenjta për t'u vendosur. Modelet më të vogla të fokusuara në kod ( , ; , ; , ; , ; , ) mund të arrijnë performancë të shkëlqyer gjeneruese kodi në një paketë më të vogël dhe më fleksibile, por performanca në detyra kodimi përtej gjenerimit (p.sh., rregullimi dhe shpjegimi) mund të mbetet pas performancës së gjenerimit të kodit. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Në shumë kontekste sipërmarrëse, adoptimi i LLM-ve të kodit mund të komplikohet më tej nga faktorë përtej performancës së modeleve. Për shembull, edhe modelet e hapura ndonjëherë janë të plagusura nga mungesa e transparencës rreth burimeve të të dhënave dhe metodave të përpunimit të të dhënave që kanë hyrë në model, gjë që mund të dëmtojë besimin në modelet në kontekste kritike për mision dhe të rregulluara. Për më tepër, kushtet e licencës në LLM-të e hapura të sotme mund të pengojnë dhe komplikohen aftësinë e një sipërmarrjeje për të përdorur një model. Këtu, ne paraqesim modelet Granite Code, një seri LLM-sh kodi shumë të aftë, të dizajnuara për të mbështetur zhvillimin softuerik sipërmarrës në një gamë të gjerë detyrash kodimi. Modelet Granite Code kanë dy varianta kryesore që ne i lëshojmë në katër madhësi të ndryshme (3B, 8B, 20B dhe 34B): modele bazë themelore për detyra të lidhura me kodin; Granite Code Base: modele që ndjekin udhëzimet, të finetuned duke përdorur një kombinim të Git commits të çiftuar me udhëzime njerëzore dhe dataset-e udhëzimesh kodi sintetike me burim të hapur. Granite Code Instruct: Modelet bazë në seri janë trajnuar nga e para me një strategji dyfazore trajnimi. Në fazën 1, modeli ynë trajtohet në 3 deri në 4 triliona token të buruar nga 116 gjuhë programimi, duke siguruar një kuptim gjithëpërfshirës të gjuhëve programuese dhe sintaksës. Në fazën 2, modeli ynë trajtohet më tej në 500 miliardë token me një përzierje të dizajnuar me kujdes të të dhënave me cilësi të lartë nga fushat e kodit dhe gjuhës natyrore për të përmirësuar aftësinë e modelit për të arsyetuar. Ne përdorim objektivin e modelimit gjuhësor të pakontrolluar për të trajnuar modelet bazë në të dy fazat e trajnimit. Modelet e instruksionit rrjedhin duke finetune më tej modelet bazë të trajnuara më sipër në një kombinim të një varianti të filtruar të CommitPack ( , ), dataset-e udhëzimesh gjuhësorë natyrorë (OASST ( , ), HelpSteer ( , )) dhe dataset-e matematike me burim të hapur (MathInstruct ( , ) dhe MetaMathQA ( , )), duke përfshirë dataset-e udhëzimesh kodi të gjeneruara sintetikisht për të përmirësuar ndjekjen e udhëzimeve dhe aftësitë e arsyetimit. Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Ne kryejmë vlerësime të gjera të LLM-ve tona të kodit në një grup të plotë benchmark-esh, duke përfshirë HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ), dhe më shumë. Ky grup benchmark-esh përfshin shumë lloje të ndryshme detyrash kodimi përtej thjesht sintezës së kodit në Python, p.sh., rregullimi i kodit, shpjegimi i kodit, redaktimi i kodit, përkthimi i kodit, etj., në shumicën e gjuhëve kryesore programuese (Python, JavaScript, Java, Go, C++, Rust, etj.). Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Gjetjet tona zbulojnë se midis modeleve me burim të hapur, modelet Granite Code në përgjithësi tregojnë performancë shumë të fortë në të gjitha madhësitë e modeleve dhe benchmark-et (shpesh duke tejkaluar modelet e tjera të kodit me burim të hapur që janë dy herë më të mëdha krahasuar me Granite). Si ilustrim, figura (sipër) tregon një krahasim të Granite-8B-Code-Base me LLM të tjerë bazë kodi me burim të hapur, duke përfshirë LLM bazë të fundit me performancë të lartë të qëllimit të përgjithshëm si Mistral ( , ) dhe LLama-3 ( , ) në HumanEvalPack ( , ). Ndërsa CodeGemma dhe StarCoder2 performojnë mjaft mirë në gjenerimin e kodit, ata performojnë dukshëm më keq në varietetet e rregullimit dhe shpjegimit të kodit të HumanEvalPack. Mesatarisht, Granite-8B-Code-Base tejkalon modelin më konkurrues CodeGemma-8B me pothuajse 12 pikë në HumanEvalPack (33.2% kundrejt 21.3%), megjithëse është trajnuar në një numër dukshëm më të vogël tokenash (4.5T kundrejt 7.5T tokenash). Përveç modeleve bazë, variantet e finetuned me instruksione të modeleve tona Granite Code gjithashtu tregojnë performancë të fortë në HumanEvalPack, duke tejkaluar modelet e tjera të instruksioneve (të kodit) me burim të hapur, duke demonstruar përfitime për një grup më të gjerë detyrash kodimi me udhëzime gjuhësorë natyrorë (shih figurën (poshtë)). 1 Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 1 Për më tepër, pasi arsyetimi është kritik për zgjidhjen e pyetjeve dhe detyrave komplekse, ne gjithashtu testojmë modelin tonë Granite-8B-Code-Base në gjashtë benchmark-e matematike, duke përfshirë MATH ( , ), GSM8K ( , ) dhe zgjidhjen e problemeve me qasje në mjete llogaritëse, ku modeli ynë Granite 8B arrin performancë më të mirë krahasuar me shumicën e LLM-ve më të fundit 7B ose 8B. Për shembull, Granite-8B-Code-Base tejkalon Llama-3-8B-Base me ∼12 pikë në GSM8K dhe ∼6 pikë në MATH (shih tabelën ). Cobbe et al. 2021 Cobbe et al. 2021 15 Avantazhet kryesore të modeleve Granite Code përfshijnë: : Modelet Granite Code arrijnë performancë konkurruese ose më të lartë se të tjerët në detyra të ndryshme të lidhura me kodin, duke përfshirë gjenerimin e kodit, shpjegimin, rregullimin, redaktimin, përkthimin, etj., duke demonstruar aftësinë e tyre për të zgjidhur detyra të ndryshme kodimi; LLM KODI Gjithë-rreth : Të gjitha modelet tona janë trajnuar në të dhëna të lejuara nga licenca të mbledhura duke ndjekur parimet e Etikës AI të IBM dhe të udhëzuara nga ekipi Ligjor Korporativ i IBM për përdorim sipërmarrës të besueshëm. Të gjitha modelet Granite Code lëshohen nën licencën Apache 2.0. LLM i Besueshëm i Shkallës Sipërmarrëse 1 Ne përshkruajmë të gjithë linjën tonë të mbledhjes, filtrimit dhe përpunimit të të dhënave në seksionin . Seksioni përshkruan detajet e arkitekturës së modelit, i ndjekur nga detajet e trajnimit në Seksionin . Seksioni ofron detajet rreth finetuning të instruksioneve, dhe Seksioni përshkruan eksperimentet dhe rezultatet që krahasojnë modelet Granite Code me LLM të tjerë me burim të hapur. 2 3 4 5 6 2 Mbledhja e të Dhënave Në këtë seksion, ne përshkruajmë procesin e krcimit dhe filtrimit (Seks. ), deduplikimit (Seks. ), filtrimit HAP/PII (Seks. ) të përdorura për të përgatitur të dhënat e kodit për trajnimin e modelit. Ne gjithashtu ofrojmë një përmbledhje të të dhënave gjuhësore natyrore me cilësi të lartë të përdorura për të përmirësuar aftësitë gjuhësore dhe arsyetimin matematik të modelit. 2.1 2.2 2.3 2.1 Krcimi dhe Filtrimi i të Dhënave Të dhënat e kodit të paratrajnuar u buruan nga një kombinim i dataset-eve të disponueshme publikisht si Github Code Clean , StarCoderdata , dhe repozitore shtesë publike kodi dhe çështje nga GitHub. Ne filtrojmë të dhënat e papërpunuara për të ruajtur një listë të 116 gjuhëve programuese nga mbi 300 gjuhë, siç tregohet në Shtojcë . Caktimi i të dhënave në gjuhë programuese kryhet bazuar vetëm në zgjatjen e skedarit, ngjashëm me StarCoder ( , ). Pas filtrimit të gjuhës, ne aplikojmë katër rregulla kryesore filtrimi për të hequr kodin me cilësi më të ulët ( , ): (1) hiqni skedarët me më pak se 25% karaktere alfabetike, (2) përveç gjuhës XSLT, hidhni skedarët ku stringa “<?xml version=” shfaqet brenda 100 karaktereve të parë, (3) për skedarët HTML, ruani vetëm skedarët ku teksti i dukshëm përbën të paktën 20% të kodit HTML dhe ka një gjatësi minimale prej 100 karaktere, (4) për skedarët JSON dhe YAML, ruani vetëm skedarët që kanë një numër karaktereje nga 50 deri në 5000 karaktere. Ne gjithashtu filtrojmë çështjet e GitHub duke përdorur një grup metrikash cilësore që përfshijnë heqjen e tekstit të gjeneruar automatikisht, filtrimin e çështjeve jo-anglisht, përjashtimin e komenteve nga botët dhe përdorimin e numrit të përdoruesve të përfshirë në bisedë si tregues të cilësisë. Ne gjithashtu annotojmë çdo skedar kodi me informacionin e licencës të shoqëruar me repozitorin përkatës, të gjetur përmes API-ve të Github dhe ruajmë vetëm skedarët me licenca lejuese për trajnimin e modelit. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Dueduplikim i Saktë dhe Fuzzy Ne miratojmë një strategji agresive deduplikimi duke përfshirë deduplikimin e saktë dhe fuzzy për të hequr dokumentet që kanë përmbajtje kodi (të) identike ose pothuajse identike në dataset-in tonë të trajnimit. Për deduplikim të saktë, ne së pari llogarisim hash SHA256 në përmbajtjen e dokumentit dhe heqim rekordet me hash të njëjtë. Pas deduplikimit të saktë, ne aplikojmë deduplikim fuzzy me qëllim heqjen e skedarëve të kodit që mund të kenë ndryshime të vogla dhe duke i nxjerrë kështu të dhënat më të balancuara. Ne aplikojmë një metodë dy-fazore për këtë: (1) llogarisim MinHashes të të gjitha dokumenteve dhe më pas përdorim Locally Sensitive Hashing (LSH) për të grupuar dokumentet bazuar në gishtërinjtë e tyre MinHash, (2) matim ngjashmërinë Jaccard midis çdo çifti dokumentesh në të njëjtin grup dhe annotojmë dokumentet përveç njërit si dublikatë bazuar në një prag ngjashmërie prej 0.7. Ne aplikojmë këtë proces pothuajse-deduplikimi në të gjitha gjuhët programuese duke përfshirë çështjet e GitHub për të rritur pasurinë dhe diversitetin e dataset-it të trajnimit. 2.3 Filtrimi HAP, PII, Malware Për të reduktuar mundësinë e gjenerimit të gjuhës fyese, abuzive ose profanë (HAP) nga modelet, ne bëjmë përpjekje të zellshme për të filtruar përmbajtjen HAP nga dataset-i i trajnimit. Ne së pari krijojmë një fjalor të fjalëve kyçe HAP dhe më pas annotojmë çdo dokument kodi me numrin e paraqitjeve të fjalëve kyçe të tilla në përmbajtje duke përfshirë komentet. Ne filtrojmë dokumentet që tejkalojnë pragun HAP, të llogaritur bazuar në një analizë shpërndarëse si dhe inspektim manual të skedarëve të kodit. Për më tepër, për të mbrojtur privatësinë, ne ndjekim StarCoder ( , ) dhe bëjmë përpjekje të zellshme për të redaktuar Informacionin Personalisht Identifikues (PII) nga dataset-i i trajnimit. Specifikisht, ne përdorim modelin StarPII për të zbuluar adresat IP, çelësat, adresat e emailit, emrat, emrat e përdoruesve dhe fjalëkalimet e gjetura në përmbajtje. Hapi i redaktimit të PII zëvendëson tekstin PII me tokenat përkatës NAME , EMAIL , KEY , PASSWORD dhe ndryshon adresën IP me një adresë IP të gjeneruar sintetikisht, si në Li et al. (2023a). Ne gjithashtu skanojmë dataset-et tona duke përdorur për të identifikuar dhe hequr rastet e malware-it në kodin burimor. Li et al. 2023a 4 2.4 Dataset-e Gjuhësore Natyrore Përveç mbledhjes së të dhënave të kodit për trajnimin e modelit, ne kurajojmë disa dataset-e gjuhësore natyrore me cilësi të lartë të disponueshme publikisht për të përmirësuar aftësinë e modelit në kuptimin e gjuhës dhe arsyetimin matematik. Dataset-et përfaqësuese nën këtë kategori përfshijnë dokumente webi (Stackexchange, CommonCrawl), tekst matematikor web (OpenWeb-Math; ( ), StackMathQA; ( )), tekst akademik (Arxiv, Wikipedia), dhe dataset-e finetuning udhëzimesh (FLAN; ( ), HelpSteer ( , )). Ne nuk deduplikojmë këto dataset-e gjuhësore natyrore tashmë të përpunuara. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Arkitektura e Modelit Ne trajnojmë një seri modelesh kodi të madhësive të ndryshme bazuar në arkitekturën dekomoderuese transformer ( , ). Hiperparametrat e modelit për këto modele jepen në Tabelën . Për të gjitha arkitekturat e modeleve, ne përdorim para-normalizim ( , ): normalizim i aplikuar në hyrjen e blloqeve të vëmendjes dhe MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : Modeli më i vogël në familjen e modeleve Granite-code trajtohet me embedding RoPE ( , ) dhe Multi-Head Attention ( , ). Ky model përdor funksionin e aktivizimit swish ( , ) me GLU ( , ) për MLP, gjithashtu shpesh i referuar si swiglu. Për normalizim, ne përdorim RMSNorm ( , ) pasi është më efikas në llogaritje se LayerNorm ( , ). Modeli 3B trajtohet me një gjatësi konteksti prej 2048 tokenash. 3B Su et al. 2023 Vaswani et al. 2017 Ramachandran et al. 2017 Shazeer 2020 Zhang & Sennrich 2019 Ba et al. 2016 : Modeli 8B ka një arkitekturë të ngjashme me modelin 3B me përjashtim të përdorimit të Grouped-Query Attention (GQA) ( , ). Përdorimi i GQA ofron një kompromis më të mirë midis performancës së modelit dhe efikasitetit të inferencës në këtë shkallë. Ne trajnojmë modelin 8B me një gjatësi konteksti prej 4096 tokenash. 8B Ainslie et al. 2023 : Modeli i kodit 20B trajtohet me embedding absolut pozicion të mësuar. Ne përdorim Multi-Query Attention ( , ) gjatë trajnimit për inferencë efikase pasuese. Për bllokun MLP, ne përdorim funksionin e aktivizimit GELU ( , ). Për normalizimin e aktivizimeve, ne përdorim LayerNorm ( , ). Ky model trajtohet me një gjatësi konteksti prej 8192 tokenash. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : Për të trajnuar modelin 34B, ne ndjekim qasjen nga për ngritjen në lartësi të thellësisë së modelit 20B. Specifikisht, ne së pari kopjojmë modelin 20B me 52 shtresa dhe më pas heqim 8 shtresat e fundit nga modeli origjinal dhe 8 shtresat e para të kopjes së tij për të formuar dy modele. 34B Kim et al. Në fund, ne i bashkojmë të dy modelet për të formuar modelin Granite-