```html Հեղինակներ՝ Մայանկ Միշրա⋆, IBM Մեթ Սթալոնե⋆, IBM Գաոյուան Ժանգ⋆, IBM Յիկանգ Շեն, IBM Ադիտյա Պրասադ, IBM Ադրիանա Մեզա Սորիա, IBM Միքելե Մերլեր, IBM Պարամեսվարան Սելվամ, IBM Սաֆտա Սուրենդրան, IBM Շիվդիպ Սինգհ, IBM Մանիշ Սեթի, IBM Սյուան-Հոնգ Դանգ, IBM Պենգյուան Լի, IBM Կուն-Լունգ Վու, IBM Սայեդ Զավադ, IBM Էնդրյու Քոլման, IBM Մեթյու Ուայթ, IBM Մարկ Լյուիս, IBM Ռաջու Պավուլուրի, IBM Յան Կոյֆման, IBM Բորիս Լյուբլինսկի, IBM Մաքսիմիլիեն դե Բայսեր, IBM Իբրահիմ Աբդել Ազիզ, IBM Կինչալ Բասու, IBM Մայանկ Ագարվալ, IBM Յի Ժոու, IBM Քրիս Ջոնսոն, IBM Աանչալ Գոյալ, IBM Հիմա Պատել, IBM Յուսուֆ Շահ, IBM Պետրոս Զերֆոս, IBM Հայկո Լյուդվիգ, IBM Ասիմ Մունավար, IBM Մաքսվել Քրոուզ, IBM Պավան Կապանիպաթի, IBM Շվետա Սալարիա, IBM Բոբ Քալիո, IBM Սոֆիա Վեն, IBM Սիթարամի Սիլամ, IBM Բրայան Բելգոդերե, IBM Կառլոս Ֆոնսեկա, IBM Ամիթ Սինգհի, IBM Նիրմիտ Դեսայ, IBM Դավիդ Դ. Քոքս, IBM Ռուչիր Պուրի†, IBM Ռամեսվար Պանդա†, IBM Ամփոփում Կոդով մարզված մեծ լեզվական մոդելները (LLM-ներ) հեղափոխություն են կատարում ծրագրային ապահովման մշակման գործընթացում։ Աճող առումով, կոդային LLM-ները ինտեգրվում են ծրագրային ապահովման մշակման միջավայրեր՝ բարելավելու մարդ-ծրագրավորողների արտադրողականությունը, և LLM-ի վրա հիմնված գործակալները սկսում են խոստումնալից լինել բարդ առաջադրանքները ինքնավար կերպով կատարելու համար։ Կոդային LLM-ների լիարժեք ներուժը իրականացնելու համար անհրաժեշտ է լայն շրջանակի հնարավորություններ, ներառյալ կոդի ստեղծումը, սխալների ուղղումը, կոդի բացատրումը և փաստաթղթավորումը, պահոցների սպասարկումը և այլն։ Այս աշխատանքում մենք ներկայացնում ենք Granite սերիայի միայն դեկոդերային կոդային մոդելները՝ կոդային ստեղծող առաջադրանքների համար, մարզված 116 ծրագրավորման լեզուներով գրված կոդով։ Granite Code մոդելների ընտանիքը բաղկացած է 3-ից 34 միլիարդ պարամետրով մոդելներից, որոնք հարմար են այնպիսի կիրառությունների համար, ինչպիսիք են բարդ հավելվածների մոդեռնիզացման առաջադրանքները մինչև սարքի վրա հիշողության սահմանափակումներ ունեցող օգտագործման դեպքերը։ Առաջադրանքների համապարփակ հավաքածուի վրա գնահատումը ցույց է տալիս, որ Granite Code մոդելները հետևողականորեն հասնում են առևտրային առումով ամենաբարձր կատարողականության՝ հասանելի բաց կոդով LLM-ների շրջանում։ Granite Code մոդելների ընտանիքը օպտիմալացվել է ձեռնարկությունների ծրագրային ապահովման մշակման աշխատանքային հոսքերի համար և լավ կատարում է տարբեր կոդային առաջադրանքներում (օրինակ՝ կոդի ստեղծում, ուղղում և բացատրություն), ինչը դարձնում է այն բազմակողմանի «ամենաթերթ» կոդային մոդել։ Մենք թողարկում ենք մեր բոլոր Granite Code մոդելները Apache 2.0 լիցենզիայի ներքո՝ ինչպես հետազոտական, այնպես էլ առևտրային օգտագործման համար։ https://github.com/ibm-granite/granite-code-models 1 Ներածություն Վերջին տասնամյակներում ծրագրային ապահովումը հյուսվել է մեր հասարակության բոլոր ասպեկտների կտորի մեջ։ Քանի որ ծրագրային ապահովման մշակման պահանջարկը աճում է, ավելի քան երբևէ կարևոր է բարձրացնել ծրագրային ապահովման մշակման արտադրողականությունը, և LLM-ներն առաջարկում են խոստումնալից ուղի մարդ-ծրագրավորողներին հզորացնելու համար։ LLM-ների՝ ծրագրային ապահովման մշակման արտադրողականության մեջ ձեռնարկությունների առանցքային օգտագործման դեպքերը ներառում են կոդի ստեղծում, կոդի բացատրություն, կոդի ուղղում, միավորային թեստերի և փաստաթղթերի ստեղծում, հավելվածների մոդեռնիզացում, խոցելիության հայտնաբերում, կոդի թարգմանություն և այլն։ Վերջին տարիներին արագ առաջընթաց է գրանցվել LLM-ների՝ կոդ ստեղծելու և մանիպուլացնելու ունակության մեջ, և այսօր հասանելի են տպավորիչ կոդային հնարավորություններով մոդելների մի շարք։ Մոդելները տատանվում են մեկ թվից մի քանի միլիարդ պարամետրով (օրինակ՝ Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024), և այլն) մինչև հարյուր միլիարդներ՝ DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere), և տարբերվում են նախատեսված օգտագործման ընդհանրության մեջ, որոշ մոդելներ ձգտում են ընդգրկել կոդից դուրս տարբեր օգտագործումներ, մինչդեռ մյուսները հիմնականում կենտրոնանում են կոդային առաջադրանքների վրա (օրինակ՝ StarCoder (Li et al., 2023a; Lozhkov et al., 2024), CodeGen (Nijkamp et al., 2023), CodeLlama (Rozie`re et al., 2023), և CodeGemma (CodeGemma Team et al., 2024))։ Այնուամենայնիվ, մնում են կարևոր բացեր կոդային LLM-ների ներկայիս ոլորտում, հատկապես ձեռնարկությունների ծրագրային ապահովման մշակման համատեքստում։ Նախ, մինչ շատ մեծ, ընդհանրական LLM-ները կարող են ձեռք բերել գերազանց կոդային կատարողականություն, դրանց չափը դժվարացնում է դրանց տեղակայումը։ Փոքր կոդային կենտրոնացված մոդելները ( , ; , ; , ; , ; , ) կարող են ձեռք բերել գերազանց կոդի ստեղծման կատարողականություն ավելի փոքր և ավելի ճկուն փաթեթով, բայց կոդային առաջադրանքներում կատարողականությունը, բացի ստեղծումից (օրինակ՝ ուղղում և բացատրություն), կարող է հետ մնալ կոդի ստեղծման կատարողականությունից։ Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Շատ ձեռնարկատիրական կոնտեքստներում կոդային LLM-ի ընդունումը կարող է լրացուցիչ բարդանալ գործոններով, որոնք դուրս են մոդելների կատարողականությունից։ Օրինակ, նույնիսկ բաց մոդելները երբեմն տառապում են տվյալների աղբյուրների և տվյալների մշակման մեթոդների մասին թափանցիկության բացակայությունից, ինչը կարող է նվազեցնել վստահությունը մոդելների նկատմամբ առանցքային առաքելության և կարգավորվող իրավիճակներում։ Ավելին, այսօրվա բաց LLM-ների լիցենզավորման պայմանները կարող են խոչընդոտել և բարդացնել ձեռնարկության՝ մոդելն օգտագործելու ունակությունը։ Ահա մենք ներկայացնում ենք Granite Code մոդելները՝ մի շարք բարձր կարողություններով կոդային LLM-ներ, որոնք նախագծված են՝ աջակցելու ձեռնարկատիրական ծրագրային ապահովման մշակմանը՝ կոդային առաջադրանքների լայն շրջանակի ընդգրկման միջոցով։ Granite Code մոդելներն ունեն երկու հիմնական տարբերակ, որոնք մենք թողարկում ենք չորս տարբեր չափերով (3B, 8B, 20B, և 34B): . հիմնական մոդելներ կոդային առաջադրանքների համար; Granite Code Base . հրահանգներ հետևող մոդելներ, որոնք վարժեցվել են Git կոմիտների և մարդկային հրահանգների, ինչպես նաև բաց կոդով սինթետիկ կերպով ստեղծված կոդային հրահանգների տվյալների համադրությամբ։ Granite Code Instruct Ընտանիքի հիմնական մոդելները մարզվել են զրոյից՝ երկփուլային մարզման ռազմավարությամբ։ Փուլ 1-ում մեր մոդելը մարզվում է 116 ծրագրավորման լեզուներից ստացված 3-ից 4 տրիլիոն տոկեններով, ապահովելով ծրագրավորման լեզուների և սինտաքսիսի համապարփակ ըմբռնում։ Փուլ 2-ում մեր մոդելը լրացուցիչ մարզվում է 500 միլիարդ տոկեններով՝ կոդի և բնական լեզվի դոմեններից ստացված բարձրորակ տվյալների մանրակրկիտ մշակված խառնուրդով, որպեսզի բարելավվի մոդելի տրամաբանելու ունակությունը։ Մենք օգտագործում ենք չվերահսկվող լեզվական մոդելավորման նպատակը՝ մարզելու հիմնական մոդելները մարզման երկու փուլերում։ Հրահանգային մոդելները ստացվում են՝ լրացուցիչ վարժեցնելով վերոնշյալ մարզված հիմնական մոդելները՝ ֆիլտրված CommitPack ( , ) տարբերակի, բնական լեզվի հրահանգներին հետևելու տվյալների (OASST ( , ), HelpSteer ( , )) և բաց կոդով մաթեմատիկական տվյալների (MathInstruct ( , ) և MetaMathQA ( , )) համադրության վրա, ներառյալ սինթետիկ կերպով ստեղծված կոդային տվյալները՝ հրահանգներին հետևելու և տրամաբանելու ունակությունները բարելավելու համար։ Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Մենք կատարում ենք մեր կոդային LLM-ների ընդարձակ գնահատումը մի շարք ստանդարտների վրա, ներառյալ HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ), և այլն։ Այս ստանդարտների հավաքածուն ընդգրկում է կոդի սինթեզից բացի բազմաթիվ տարբեր տեսակի կոդային առաջադրանքներ Python-ում, օրինակ՝ կոդի ուղղում, կոդի բացատրություն, կոդի խմբագրում, կոդի թարգմանություն և այլն՝ գրեթե բոլոր հիմնական ծրագրավորման լեզուներով (Python, JavaScript, Java, Go, C++, Rust, և այլն)։ Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Մեր գտածոները ցույց են տալիս, որ բաց կոդով մոդելների շրջանում Granite Code մոդելները ընդհանուր առմամբ շատ ուժեղ կատարողականություն են ցուցաբերում բոլոր մոդելների չափերի և ստանդարտների վրա (հաճախ գերազանցելով այլ բաց կոդով կոդային մոդելներ, որոնք երկու անգամ մեծ են, քան Granite-ը)։ Որպես օրինակ, նկար (վերև) ցույց է տալիս Granite-8B-Code-Base-ի համեմատությունը այլ բաց կոդով հիմնական կոդային LLM-ների, ներառյալ վերջին բարձր կատարողականություն ունեցող ընդհանրական հիմնական LLM-ների, ինչպիսիք են Mistral ( , ) և LLama-3 ( , ) HumanEvalPack ( , ) ստանդարտի վրա։ Մինչդեռ CodeGemma-ն և StarCoder2-ը բավականաչափ լավ են կոդ ստեղծելիս, նրանք զգալիորեն ավելի վատ են կատարում HumanEvalPack-ի կոդի ուղղման և բացատրության տարբերակներում։ Միջին հաշվով, Granite-8B-Code-Base-ը գերազանցում է ամեն մրցունակ CodeGemma-8B մոդելին գրեթե 12 կետով HumanEvalPack-ում (33.2% ընդդեմ 21.3%), չնայած մարզված է զգալիորեն քիչ տոկենների վրա (4.5T ընդդեմ 7.5T տոկենների)։ Հիմնական մոդելներից բացի, մեր Granite Code մոդելների՝ հրահանգներով վարժեցված տարբերակները նույնպես ուժեղ կատարողականություն են ցուցաբերում HumanEvalPack-ում՝ գերազանցելով այլ բաց կոդով (կոդային) հրահանգային մոդելներին, ինչը ցույց է տալիս առավելությունները կոդային առաջադրանքների ավելի լայն շրջանակի համար՝ բնական լեզվի հրահանգներով (տես նկար (ներքև))։ 1 Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 1 Ավելին, քանի որ տրամաբանելը կարևոր է բարդ հարցեր և առաջադրանքներ լուծելու համար, մենք նաև մեր Granite-8B-Code-Base մոդելը փորձարկում ենք վեց մաթեմատիկական ստանդարտների վրա, ներառյալ MATH ( , ), GSM8K ( , ) և հաշվողական գործիքներով հասանելիության խնդիրների լուծում, որտեղ մեր Granite 8B մոդելը ձեռք է բերում ավելի լավ կատարողականություն՝ համեմատած շատ մինչև օրս եղած 7B կամ 8B LLM-ների հետ։ Օրինակ, Granite-8B-Code-Base-ը գերազանցում է Llama-3-8B-Base-ին ∼12 կետով GSM8K-ում և ∼6 կետով MATH-ում (տես աղյուսակ )։ Cobbe et al. 2021 Cobbe et al. 2021 15 Granite Code մոդելների հիմնական առավելությունները ներառում են. . Granite Code մոդելները ձեռք են բերում մրցունակ կամ առևտրային առումով ամենաբարձր կատարողականություն տարբեր տեսակի կոդային առաջադրանքներում, ներառյալ կոդի ստեղծումը, բացատրությունը, ուղղումը, խմբագրումը, թարգմանությունը և այլն, ցույց տալով նրանց ունակությունը՝ լուծել բազմազան կոդային առաջադրանքներ։ Բոլոր հարմար կոդային LLM . Մեր բոլոր մոդելները մարզվում են լիցենզավորմանը համապատասխանող տվյալների վրա, որոնք հավաքագրվել են IBM-ի AI Էթիկայի սկզբունքներին համապատասխան և ղեկավարվել IBM-ի Կորպորատիվ Իրավաբանական թիմի կողմից՝ վստահելի ձեռնարկատիրական օգտագործման համար։ Բոլոր Granite Code մոդելները թողարկվում են Apache 2.0 լիցենզիայի ներքո։ Վստահելի ձեռնարկատիրական մակարդակի LLM 1 Մենք մանրամասնում ենք մեր ամբողջ տվյալների հավաքագրման, զտման և նախնական մշակման գործընթացը բաժին -ում։ Բաժին -ը նկարագրում է մոդելի ճարտարապետության մանրամասները, որին հաջորդում են մարզման մանրամասները Բաժին -ում։ Բաժին -ը տրամադրում է հրահանգային վարժեցման մանրամասները, իսկ Բաժին -ը նկարագրում է փորձարկումները և արդյունքները՝ համեմատելով Granite Code մոդելները այլ բաց կոդով LLM-ների հետ։ 2 3 4 5 6 2 Տվյալների հավաքագրում Այս բաժնում մենք նկարագրում ենք սողանցման և զտման (Բաժ. ), դեդուպլիկացիայի (Բաժ. ), HAP/PII զտման (Բաժ. ) գործընթացը, որոնք օգտագործվում են մոդելի մարզման համար կոդային տվյալները պատրաստելու համար։ Մենք նաև ներկայացնում ենք բարձրորակ բնական լեզվի տվյալների ակնարկ, որն օգտագործվում է մոդելի լեզվի ըմբռնումը և մաթեմատիկական տրամաբանելու հմտությունները բարելավելու համար: 2.1 2.2 2.3 2.1 Տվյալների սողանցում և զտում Նախամարզման կոդային տվյալները ստացվել են հանրային հասանելի տվյալների հավաքածուների համադրությունից, ինչպիսիք են Github Code Clean , StarCoderdata , և լրացուցիչ հանրային կոդային պահոցներ և GitHub-ի թողարկումներ։ Մենք զտում ենք հում տվյալները՝ պահելու 116 ծրագրավորման լեզուների ցուցակ՝ 300+ լեզուներից, ինչպես նշված է Հավելվածում ։ Տվյալների նշանակումը ծրագրավորման լեզուներին կատարվում է միայն ֆայլի ընդլայնման հիման վրա, նմանապես StarCoder-ին ( , )։ Լեզվի զտումից հետո մենք կիրառում ենք չորս հիմնական զտման կանոններ՝ ցածրորակ կոդը զտելու համար ( , ). (1) հեռացնել ֆայլերը, որոնք պարունակում են 25% ից պակաս այբբենական նիշեր, (2) բացառությամբ XSLT լեզվի, զտել ֆայլերը, որտեղ «<?xml version=”» տողը հայտնվում է առաջին 100 նիշերի սահմաններում, (3) HTML ֆայլերի համար՝ պահել միայն այն ֆայլերը, որտեղ տեսանելի տեքստը կազմում է HTML կոդի առնվազն 20%-ը և ունի առնվազն 100 նիշ երկարություն, (4) JSON և YAML ֆայլերի համար՝ պահել միայն այն ֆայլերը, որոնց նիշերի քանակը տատանվում է 50-ից 5000 նիշերի միջև։ Մենք նաև զտում ենք GitHub-ի թողարկումները՝ օգտագործելով մի շարք որակի չափանիշներ, որոնք ներառում են ինքնաբերաբար գեներացված տեքստի հեռացում, ոչ անգլերեն թողարկումների զտում, բոթերի մեկնաբանությունների բացառում և զրույցին ներգրավված օգտատերերի քանակի օգտագործումը որպես որակի ցուցիչ։ Մենք նաև յուրաքանչյուր կոդային ֆայլին կցում ենք լիցենզավորման մասին տեղեկությունները, որոնք առնչվում են համապատասխան պահոցին, որը հայտնաբերվել է Github API-ների միջոցով, և մարզման համար պահում ենք միայն թույլատրելի լիցենզավորում ունեցող ֆայլերը։ 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Ամբողջական և մոտավոր դեդուպլիկացիա Մենք ընդունում ենք ագրեսիվ դեդուպլիկացիայի ռազմավարություն, ներառյալ ամբողջական և մոտավոր դեդուպլիկացիան՝ մեր մարզման հավաքածուում (մոտավոր) նույնական կոդային բովանդակություն ունեցող փաստաթղթերը հեռացնելու համար։ Ամբողջական դեդուպլիկացիայի համար մենք նախ հաշվարկում ենք SHA256 հեշը փաստաթղթի բովանդակության վրա և հեռացնում ենք միատեսակ հեշեր ունեցող գրառումները։ Ամբողջական դեդուպլիկացիայից հետո մենք կիրառում ենք մոտավոր դեդուպլիկացիա՝ հետևյալ նպատակով. հեռացնել կոդային ֆայլերը, որոնք կարող են ունենալ փոքր տարբերություններ և այդպիսով հետագայում անկողմնակալացնել տվյալները։ Մենք դա անում ենք երկփուլային մեթոդով. (1) հաշվարկում ենք բոլոր փաստաթղթերի MinHashes-ը, այնուհետև օգտագործում ենք Տեղական Զգայուն Հեշավորում (LSH)՝ փաստաթղթերը խմբավորելու նրանց MinHash մատնահետքերի հիման վրա, (2) չափում ենք Jaccard-ի նմանությունը նույն խմբի յուրաքանչյուր զույգ փաստաթղթերի միջև և նշանակում ենք փաստաթղթերը, բացառությամբ մեկի, որպես կրկնօրինակներ՝ 0.7 նմանության շեմի հիման վրա։ Մենք կիրառում ենք այս մոտավոր-դեդուպլիկացիոն գործընթացը բոլոր ծրագրավորման լեզուներին, ներառյալ GitHub-ի թողարկումները՝ բարելավելու մարզման տվյալների հավաքածուի հարստությունը և բազմազանությունը։ 2.3 HAP, PII, վնասաբեր ծրագրային ապահովման զտում Մոդելներից ատելության, չարաշահման կամ հայհոյանքների (HAP) լեզու արտադրելու հավանականությունը նվազեցնելու համար մենք ջանասիրաբար ջանքեր ենք գործադրում H