```html Autorë: 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 po 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 depozitave dhe më shumë. Në këtë punë, ne prezantojmë serinë Granite të modeleve të vetëm dekoder për detyra gjeneruese të kodit, të trajnuara 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 detyrat 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ë në mënyrë të qëndrueshme performancë më të mirë në tregun e LLM-ve të kodit të disponueshëm me burim të hapur. Familja e modeleve Granite Code u optimizua për flukset e punës së zhvillimit të softuerit për ndërmarrje dhe performon mirë në një sërë detyrash kodimi (p.sh. gjenerimi i kodit, rregullimi dhe shpjegimi), duke e bërë atë një model kodues "të gjithanshëm" dhe të gjithanshëm. Ne lëshojmë të gjitha modelet tona Granite Code nën një licencë Apache 2.0 për përdorim kërkimor dhe 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 softuerësh rritet, është më kritike se kurrë të rritet produktiviteti i zhvillimit softuerësh, dhe LLM-të ofrojnë një rrugë premtuese për plotësimin e programuesve njerëzorë. Rastet e përdorimit të rëndësishëm të ndërmarrjeve për LLM-të në produktivitetin e zhvillimit softuerësh përfshijnë gjenerimin e kodit, shpjegimin e kodit, rregullimin e kodit, gjenerimin e testeve njësi dhe dokumentacionit, modernizimin e aplikacioneve, zbulimin e vulnerabiliteteve, 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ë gamë modelesh me aftësi mbresëlënëse kodimi janë të disponueshme 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ë gjithëpërfshirjen e përdorimit të synuar, me disa modele që synojnë të mbulojnë një gamë përdorimesh jashtë kodit, ndërsa të tjerët përqendrohen 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 kodin, veçanërisht në kontekstin e zhvillimit të softuerit për ndërmarrje. Së pari, ndërsa LLM-të gjenerale 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 gjenerimi kodi në një paketë më të vogël dhe më fleksibël, por performanca në detyra kodimi përtej gjenerimit (p.sh. rregullimi dhe shpjegimi) mund të ngelet 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 të ndërmarrjeve, miratimi 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ë prirura nga mungesa e transparencës rreth burimeve të të dhënave dhe metodave të përpunimit të të dhënave që u përdorën në model, gjë që mund të dëmtojë besimin në modele në kontekste kritike për mision dhe të rregulluara. Për më tepër, termat e licencimit në LLM-të e hapura të sotme mund të pengojnë dhe komplkojnë aftësinë e një ndërmarrjeje për të përdorur një model. Këtu, ne paraqesim modelet Granite Code, një seri LLM-sh kodi me aftësi të larta, të dizajnuara për të mbështetur zhvillimin e softuerit për ndërmarrje 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ë cilat janë rregulluar duke përdorur një kombinim të palëve të Git me udhëzime njerëzore dhe grupe të dhënash sintetike të gjeneruara të kodit me burim të hapur. Granite Code Instruct: Modelet bazë në seri janë trajnuar nga e para me një strategji dyfazëshe trajnimi. Në fazën 1, modeli ynë trajnohet në 3 deri në 4 triljonë deshë 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ë trajnohet më tej në 500 miliardë deshë me një përzierje të projektuar 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 të gjuhës së pakontrolluar për të trajnuar modelet bazë në të dy fazat e trajnimit. Modelet e instruksioneve rrjedhin duke rregulluar më tej modelet bazë të trajnuara më lart në një kombinim të një varianti të filtruar të CommitPack ( , ), grupe të dhënash të ndjekjes së udhëzimeve të gjuhës natyrore (OASST ( , ), HelpSteer ( , )) dhe grupe të dhënash matematikore me burim të hapur (MathInstruct ( , ) dhe MetaMathQA ( , )), duke përfshirë grupe të dhënash sintetike të koduara 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 gjithëpërfshirës benchmarks, duke përfshirë HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ), dhe më shumë. Ky grup benchmarks përfshin shumë lloje të ndryshme detyrash kodimi përtej thjesht sintezës së kodit në Python, p.sh., rregullimin e kodit, shpjegimin e kodit, modifikimin e kodit, përkthimin e 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 tregojnë në përgjithësi performancë shumë të fortë në të gjitha madhësitë e modeleve dhe benchmarks (shpesh tejkalojnë 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ë bazë të tjera të kodit me burim të hapur, duke përfshirë LLM-të bazë të fundit me performancë të lartë 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ë variantet 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%), pavarësisht se është trajnuar në një numër dukshëm më të vogël deshësh (4.5T kundrejt 7.5T deshë). Përveç modeleve bazë, edhe variantet e rregulluara me udhëzime të modeleve Granite Code 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 të gjuhës natyrore (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 të ndërlikuara, ne gjithashtu testojmë modelin tonë Granite-8B-Code-Base në gjashtë benchmarks matematikore, duke përfshirë MATH ( , ), GSM8K ( , ) dhe zgjidhjen e problemeve me akses në mjete llogaritëse, ku modeli ynë Granite 8B arrin performancë më të mirë krahasuar me shumicën e LLM-ve më të mira të tregut 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 Përparësitë kryesore të modeleve Granite Code përfshijnë: : Modelet Granite Code arrijnë performancë konkurruese ose më të mirë në tregun e saj në detyra të ndryshme të lidhura me kodin, duke përfshirë gjenerimin e kodit, shpjegimin, rregullimin, modifikimin, përkthimin, etj., duke demonstruar aftësinë e tyre për të zgjidhur detyra të ndryshme kodimi; LLM i Kodit Të Gjithanshëm : Të gjitha modelet tona janë trajnuar në të dhëna të lejuara nga licenca të mbledhura duke ndjekur parimet Etike të AI të IBM dhe të udhëzuara nga ekipi Ligjor Korporativ i IBM për përdorim të besueshëm të ndërmarrjeve. Të gjitha modelet Granite Code lëshohen nën licencën Apache 2.0. LLM i Besueshëm i Nivelit Ndërmarrjeje 1 Ne përshkruajmë të gjithë linjën tonë të grumbullimit, filtrimit dhe përpunimit të të dhënave në seksionin . Seksioni përshkruan detajet e arkitekturës së modelit, të ndjekura nga detajet e trajnimit në Seksionin . Seksioni ofron detajet rreth rregullimit të udhëzimeve, dhe Seksioni përshkruan eksperimentet dhe rezultatet duke krahasuar modelet Granite Code me LLM-të e tjera me burim të hapur. 2 3 4 5 6 2 Grumbullimi i të dhënave Në këtë seksion, ne përshkruajmë procesin e indeksimit dhe filtrimit (Seks. ), de-dublikimit (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ë pasqyrë të të dhënave të gjuhës natyrore me cilësi të lartë të përdorura për të përmirësuar kuptimin e gjuhës së modelit dhe aftësitë e arsyetimit matematikor. 2.1 2.2 2.3 2.1 Indeksimi dhe filtrimi i të dhënave Të dhënat e kodit të para-trajnimit u morën nga një kombinim i grupeve të dhënash të disponueshme publikisht si Github Code Clean , StarCoderdata , dhe depozita dhe çështje shtesë publike kodi 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ën . Caktimi i të dhënave sipas gjuhëve programuese kryhet bazuar vetëm në shtojcën 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) heqni skedarët me më pak se 25% karaktere alfabetike, (2) përveç gjuhës XSLT, hiqni skedarët ku stringa "<?xml version=” shfaqet brenda 100 karaktereve të parë, (3) për skedarët HTML, mbani 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 karaktereve, (4) për skedarët JSON dhe YAML, mbani vetëm skedarët që kanë një numër karakteresh që variojnë 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ë angazhuar në bisedë si një tregues i cilësisë. Ne gjithashtu i etikëtojmë çdo skedar kodi me informacionin e licencës të shoqëruar me deponimin përkatës, të gjetur përmes API-ve të Github dhe mbajmë vetëm skedarë me licenca lejuese për trajnimin e modelit. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 De-dublikim ekzakt dhe fuzzy Ne miratojmë një strategji agresive de-dublikimi duke përfshirë si de-dublikimin ekzakt ashtu edhe atë fuzzy për të hequr dokumentet që kanë përmbajtje kodi (pranë) identike në grupin tonë të trajnimit. Për de-dublikimin ekzakt, ne së pari llogarisim hash-in SHA256 në përmbajtjen e dokumentit dhe heqim regjistrimet me hash-e identike. Pas de-dublikimit ekzakt, ne aplikojmë de-dublikim fuzzy me qëllim heqjen e skedarëve të kodit që mund të kenë ndryshime të vogla dhe kështu të mos i shtrembërojmë më tej të dhënat. Ne aplikojmë një metodë me dy hapa për këtë: (1) llogarisim MinHashes të të gjithë dokumenteve dhe më pas përdorim Locally Sensitive Hashing (LSH) për të grupuar dokumentet bazuar në shenjat e tyre MinHash, (2) matim ngjashmërinë Jaccard midis çdo çifti dokumentesh në të njëjtin kovë dhe etiketojmë dokumentet përveç një si kopje bazuar në një prag ngjashmërie prej 0.7. Ne aplikojmë këtë proces pothuajse de-dublikimi për të gjitha gjuhët programuese duke përfshirë çështjet e GitHub për të përmirësuar pasurinë dhe diversitetin e datasetit të trajnimit. 2.3 Filtrimi HAP, PII, Malware Për të zvogëluar mundësinë e gjenerimit të gjuhës urrejtëse, abuzive ose profanë (HAP) nga modelet, ne bëjmë përpjekje të dalluara për të filtruar përmbajtjen HAP nga grupi i trajnimit. Ne së pari krijojmë një fjalor të fjalëve kyçe HAP dhe më pas etiketojmë çdo dokument kodi me numrin e paraqitjeve të këtyre fjalëve kyçe 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ë dalluara për të fshirë Informacionin Personalisht Identifikues (PII) nga grupi i trajnimit. Në mënyrë specifike, 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 fshirjes së PII zëvendëson tekstin PII me deshët përkatëse 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ë grupet tona të dhënash duke përdorur për të identifikuar dhe hequr rastet e malware në kodin burimor. Li et al. 2023a 4 2.4 Grupe të dhënash të gjuhës natyrore Përveç grumbullimit të të dhënave të kodit për trajnimin e modelit, ne kuratojmë disa grupe të dhënash të gjuhës 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 matematikor. Grupe të dhënash përfaqësuese nën këtë kategori përfshijnë dokumente webi (Stackexchange, CommonCrawl), tekst matematik webi (OpenWeb-Math; ( ), StackMathQA; ( )), tekst akademik (Arxiv, Wikipedia), dhe grupe të dhënash për rregullimin e udhëzimeve (FLAN; ( ), HelpSteer ( , )). Ne nuk i de-dublikojmë këto grupe të dhënash të gjuhës 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 me madhësi të ndryshme bazuar në arkitekturën dekoder transformer ( , ). Hiperparametrat e modelit për këto modele jepen në Tabelën . Për të gjitha arkitekturat e modeleve, ne përdorim para-normalizimin ( , ): normalizimi 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 trajnohet me embedding RoPE ( , ) dhe Multi-Head Attention ( , ). Ky model përdor funksionin e aktivizimit swish ( , ) me GLU ( , ) për MLP, i njohur gjithashtu si swiglu. Për normalizim, ne përdorim RMSNorm ( , ) pasi është më efikase nga ana llogaritëse se LayerNorm ( , ). Modeli 3B trajnohet me një gjatësi konteksti prej 2048 deshësh. 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 deshësh. 8B Ainslie et al. 2023 : Modeli i kodit 20B trajnohet me embedding pozicioni absolut të mësuar. Ne përdorim Multi-Query Attention ( , ) gjatë trajnimit për inferencë të mëtejshme efikase. Për bllokun MLP, ne përdorim funksionin e aktivizimit GELU ( , ). Për normalizimin e aktivizimeve, ne përdorim LayerNorm ( , ). Ky model trajnohet me një gjatësi konteksti prej 8192 deshësh. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : Për të trajnuar modelin 34B, ne ndjekim qasjen e për rritjen e thellësisë së modelit 20B. Në mënyrë specifike, ne së pari kopjojmë modelin e kodit 20B me 52 shtresa dhe më pas heqim 8 shtresat e fundit nga modeli origjinal dhe 8 shtresat e para nga kopja e tij për të formuar dy modele. 34B Kim et al.