Waandishi: 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 Muhtasari Mifumo Mikuu ya Lugha (LLMs) iliyoandaliwa kwa ajili ya msimbo inazindua mchakato wa ukuzaji programu. Inazidi kuwa, LLMs za misimbo zinaunganishwa katika mazingira ya ukuzaji programu ili kuboresha tija ya waprogramu wa binadamu, na mawakala wanaotegemea LLM wanaanza kuonyesha ahadi kwa kushughulikia kazi ngumu kwa uhuru. Kutambua uwezo kamili wa LLMs za misimbo kunahitaji anuwai ya uwezo, ikiwa ni pamoja na utengenezaji wa msimbo, urekebishaji wa hitilafu, ufafanuzi na uwekaji wa alama kwenye msimbo, utunzaji wa hazina, na zaidi. Katika kazi hii, tunatambulisha mfululizo wa Granite wa mifumo ya msimbo ya kiductor-tu kwa ajili ya kazi za utengenezaji wa msimbo, iliyoandaliwa kwa msimbo ulioandikwa katika lugha 116 za programu. Familia ya mifumo ya Granite Code ina mifumo yenye ukubwa kuanzia bilioni 3 hadi 34, inayofaa kwa matumizi kuanzia kazi ngumu za kisasa za programu hadi matumizi yanayohitaji kumbukumbu ndogo kwenye kifaa. Tathmini kwenye seti kamili ya kazi inaonyesha kuwa mifumo ya Granite Code mara kwa mara hufikia utendaji wa hali ya juu kati ya LLMs za msimbo za chanzo huru zinazopatikana. Familia ya mifumo ya Granite Code iliboreshwa kwa ajili ya mtiririko wa kazi wa ukuzaji programu wa biashara na inafanya kazi vizuri katika anuwai ya kazi za kodini (k.m. utengenezaji wa msimbo, urekebishaji na ufafanuzi), na kuifanya kuwa mfumo wa msimbo wenye matumizi mengi "kwa pande zote". Tunatoa mifumo yetu yote ya Granite Code chini ya leseni ya Apache 2.0 kwa ajili ya utafiti na matumizi ya kibiashara. https://github.com/ibm-granite/granite-code-models 1 Utangulizi Katika miongo kadhaa iliyopita, programu zimekuwa sehemu muhimu ya kila nyanja ya jamii yetu. Kadiri mahitaji ya ukuzaji programu yanavyoongezeka, ni muhimu zaidi kuliko hapo awali kuongeza tija ya ukuzaji programu, na LLMs hutoa njia ya kuahidi ya kuongeza waprogramu wa binadamu. Matumizi muhimu ya biashara kwa LLMs katika tija ya ukuzaji programu ni pamoja na utengenezaji wa msimbo, ufafanuzi wa msimbo, urekebishaji wa msimbo, utengenezaji wa jaribio la kitengo na nyaraka, kisasa cha programu, ugunduzi wa udhaifu, tafsiri ya msimbo, na zaidi. Miaka ya hivi karibuni imeshuhudia maendeleo ya haraka katika uwezo wa LLM wa kutengeneza na kuendesha msimbo, na anuwai ya mifumo yenye uwezo wa kodini wa kuvutia inapatikana leo. Mifumo hutofautiana kwa ukubwa kutoka mabilioni machache ya vigezo (k.m. Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024), n.k.) hadi mamia ya mabilioni: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere), na hutofautiana katika ujumuishi wa matumizi yaliyokusudiwa, na mifumo mingine ikilenga kufunika anuwai ya matumizi nje ya msimbo, wakati wengine wanazingatia kazi zinazohusiana na kodini (k.m. StarCoder (Li et al., 2023a; Lozhkov et al., 2024), CodeGen (Nijkamp et al., 2023), CodeLlama (Rozie`re et al., 2023), na CodeGemma (CodeGemma Team et al., 2024)). Hata hivyo, bado kuna mapungufu muhimu katika uwanja wa sasa wa LLMs kwa ajili ya msimbo, hasa katika muktadha wa ukuzaji programu wa biashara. Kwanza, ingawa LLMs za jumla, kubwa sana zinaweza kufikia utendaji bora wa kodini, ukubwa wao huwafanya kuwa ghali kupeleka. Mifumo midogo inayozingatia msimbo ( , ; , ; , ; , ; , ) inaweza kufikia utendaji bora wa utengenezaji wa msimbo katika kifurushi kidogo na kinachoweza kubadilika zaidi, lakini utendaji katika kazi za kodini zaidi ya utengenezaji (k.m. urekebishaji na ufafanuzi) unaweza kuwa duni kuliko utendaji wa utengenezaji wa msimbo. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Katika muktadha mwingi wa biashara, kupitishwa kwa LLM za msimbo kunaweza kuwa ngumu zaidi na mambo zaidi ya utendaji wa mifumo. Kwa mfano, hata mifumo huru wakati mwingine inadhalilishwa na ukosefu wa uwazi kuhusu vyanzo vya data na mbinu za usindikaji data ambazo ziliingia kwenye mfumo, ambazo zinaweza kudhoofisha uaminifu katika mifumo katika muktadha muhimu wa misheni na uliodhibitiwa. Zaidi ya hayo, masharti ya leseni katika LLMs huru za leo yanaweza kudhibiti na kurahisisha uwezo wa biashara wa kutumia mfumo. Hapa, tunawasilisha mifumo ya Granite Code, mfululizo wa LLMs za msimbo zenye uwezo mkubwa, iliyoundwa kusaidia ukuzaji programu wa biashara katika anuwai ya kazi za kodini. Mifumo ya Granite Code ina aina mbili kuu ambazo tunatoa kwa ukubwa nne tofauti (3B, 8B, 20B, na 34B): mifumo ya msingi ya msingi kwa kazi zinazohusiana na msimbo; Msingi wa Msimbo wa Granite: mifumo ya kufuata maagizo iliyoboreshwa kwa kutumia mchanganyiko wa amana za Git zilizoambatana na maagizo ya binadamu na seti za data za maagizo ya msimbo bandia zilizo wazi. Maagizo ya Msimbo wa Granite: Mifumo ya msingi katika mfululizo imeandaliwa tangu mwanzo na mkakati wa mafunzo wa awamu mbili. Katika awamu ya 1, mfumo wetu unafundishwa kwa tokeni 3 hadi 4 trilioni zilizotolewa kutoka lugha 116 za programu, kuhakikisha uelewa kamili wa lugha za programu na sarufi. Katika awamu ya 2, mfumo wetu unaendelea kufunzwa kwa tokeni 500 bilioni na mchanganyiko ulioundwa kwa uangalifu wa data ya hali ya juu kutoka kwa nyanja za msimbo na lugha asilia ili kuboresha uwezo wa mfumo wa kufikiri. Tunatumia lengo la lugha ya modeli isiyo na usimamizi kufunza mifumo ya msingi katika awamu zote mbili za mafunzo. Mifumo ya maagizo hutolewa kwa kuendelea kuboresha mifumo ya msingi iliyofunzwa hapo juu kwa mchanganyiko wa aina iliyochujwa ya CommitPack ( , ), seti za data za kufuata maagizo ya lugha asilia (OASST ( , ), HelpSteer ( , )) na seti za data za hisabati zilizo wazi (MathInstruct ( , ) na MetaMathQA ( , )), ikiwa ni pamoja na seti za data za msimbo bandia kwa ajili ya kuboresha ufuataji wa maagizo na uwezo wa kufikiri. Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Tunafanya tathmini nyingi za LLMs zetu za msimbo kwenye seti kamili ya alama za tathmini, ikiwa ni pamoja na HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ), na zaidi. Seti hii ya alama za tathmini inajumuisha aina nyingi tofauti za kazi za kodini zaidi ya utunzi wa msimbo tu katika Python, k.m., urekebishaji wa msimbo, ufafanuzi wa msimbo, uhariri wa msimbo, tafsiri ya msimbo, n.k., katika lugha nyingi kuu za programu (Python, JavaScript, Java, Go, C++, Rust, n.k.). Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Matokeo yetu yanafunua kwamba kati ya mifumo ya chanzo huru, mifumo ya Granite Code kwa ujumla inaonyesha utendaji mzuri sana katika saizi zote za mifumo na alama za tathmini (mara nyingi inazidi mifumo mingine ya msimbo wa chanzo huru ambayo ni mara mbili zaidi kuliko Granite). Kama kielelezo, mchoro (juu) unaonyesha ulinganisho wa Granite-8B-Code-Base na LLMs zingine za msingi za msimbo wa chanzo huru, ikiwa ni pamoja na LLMs za hivi karibuni za utendaji wa juu kwa madhumuni ya jumla kama Mistral ( , ) na LLama-3 ( , ) kwenye HumanEvalPack ( , ). Wakati CodeGemma na StarCoder2 zinafanya kazi vizuri katika kutengeneza msimbo, zinafanya kazi vibaya sana kwenye aina za urekebishaji wa msimbo na ufafanuzi wa HumanEvalPack. Kwa wastani, Granite-8B-Code-Base inazidi mfumo wa CodeGemma-8B unaoshindana zaidi kwa karibu pointi 12 kwenye HumanEvalPack (33.2% dhidi ya 21.3%), licha ya kufunzwa kwa idadi ndogo zaidi ya tokeni (4.5T dhidi ya 7.5T tokeni). Mbali na mifumo ya msingi, aina za maagizo zilizoboreshwa za Granite Code pia zinaonyesha utendaji mzuri kwenye HumanEvalPack, zinazozidi mifumo mingine ya maagizo (ya msimbo) huru, ikionyesha faida kwa seti pana ya kazi za kodini na maagizo ya lugha asilia (tazama mchoro (chini)). 1 Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 1 Zaidi ya hayo, kwa kuwa kufikiri ni muhimu kwa kutatua maswali na kazi ngumu, pia tunajaribu mfumo wetu wa Granite-8B-Code-Base kwenye alama sita za hisabati, ikiwa ni pamoja na MATH ( , ), GSM8K ( , ) na utatuzi wa matatizo kwa kutumia zana za kompyuta, ambapo mfumo wetu wa Granite 8B hufikia utendaji bora ikilinganishwa na mifumo mingi ya kisasa ya LLMs ya 7B au 8B. Kwa mfano, Granite-8B-Code-Base inazidi Llama-3-8B-Base kwa karibu pointi 12 kwenye GSM8K na karibu pointi 6 kwenye MATH (tazama jedwali 5). Cobbe et al. 2021 Cobbe et al. 2021 1 Faida kuu za mifumo ya Granite Code ni pamoja na: : Mifumo ya Granite Code hufikia utendaji wa ushindani au wa hali ya juu katika aina tofauti za kazi zinazohusiana na msimbo, ikiwa ni pamoja na utengenezaji wa msimbo, ufafanuzi, urekebishaji, uhariri, tafsiri, n.k., ikionyesha uwezo wao wa kutatua kazi mbalimbali za kodini; LLM ya Msimbo kwa Kila Nyanja : Mifumo yetu yote inafunzwa kwa data inayoruhusiwa na leseni iliyokusanywa kulingana na kanuni za IBM za Maadili ya AI na kuongozwa na timu ya Sheria ya Shirika ya IBM kwa matumizi ya biashara yanayoaminika. Mifumo yote ya Granite Code inatolewa chini ya leseni ya Apache 2.0. LLM ya Kuaminika Daraja la Biashara 1 Tunaelezea mchakato wetu mzima wa ukusanyaji data, uchujaji, na uandaaji katika sehemu . Sehemu inaelezea maelezo ya usanifu wa mfumo, ikifuatiwa na maelezo ya mafunzo katika Sehemu . Sehemu inatoa maelezo kuhusu mafunzo ya maagizo, na Sehemu inaelezea majaribio na matokeo yakilinganisha mifumo ya Granite Code na LLMs zingine za chanzo huru. 2 3 4 5 6 2 Ukusanyaji Data Katika sehemu hii, tunaelezea mchakato wa kutambaa na kuchuja (Sehemu ), kuondoa nakala (Sehemu ), kuchuja HAP/PII (Sehemu ) vilivyotumika kuandaa data ya msimbo kwa ajili ya mafunzo ya mfumo. Pia tunatoa muhtasari wa data ya lugha asilia ya hali ya juu iliyotumika kuboresha uelewa wa lugha na ujuzi wa kufikiri wa kihisabati wa mfumo. 2.1 2.2 2.3 2.1 Utambazaji na Uchujaji wa Data Data ya msimbo wa utangulizi ilitolewa kutoka kwa mchanganyiko wa seti za data zinazopatikana hadharani kama vile Github Code Clean , StarCoderdata , na hazina za ziada za msimbo wa umma na maswala kutoka GitHub. Tunachuja data ghafi ili kubakiza orodha ya lugha 116 za programu kati ya lugha 300+, kama ilivyoorodheshwa katika Kiambatisho . Ugawaji wa data kwa lugha za programu unafanywa kulingana tu na kiendelezi cha faili, sawa na StarCoder ( , ). Baada ya kuchuja lugha, tunatumia sheria nne muhimu za kuchuja ili kuondoa msimbo wa ubora wa chini ( , ): (1) ondoa faili zenye chini ya 25% ya herufi, (2) isipokuwa kwa lugha ya XSLT, chuja faili ambapo neno "<?xml version=” linaonekana ndani ya herufi 100 za kwanza, (3) kwa faili za HTML, weka tu faili ambapo maandishi yanayoonekana yanachangia angalau 20% ya msimbo wa HTML na ina urefu wa chini wa herufi 100, (4) kwa faili za JSON na YAML, weka tu faili ambazo zina idadi ya herufi kati ya 50 hadi 5000. Pia tunachuja maswala ya GitHub kwa kutumia seti ya vipimo vya ubora ambavyo vinajumuisha kuondoa maandishi yaliyotengenezwa kiotomatiki, kuchuja maswala yasiyo ya Kiingereza, kuondoa maoni kutoka kwa roboti, na kutumia idadi ya watumiaji wanaoshiriki katika mazungumzo kama kiashirio cha ubora. Pia tunatia alama kila faili ya msimbo na habari ya leseni iliyohusishwa na hazina husika, iliyopatikana kupitia API za Github na kuweka tu faili zenye leseni zinazoruhusu kwa ajili ya mafunzo ya mfumo. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Nakala Kamili na Nakala Zilizofanana za Kuondoa Tunapitisha mkakati mkali wa kuondoa nakala ikiwa ni pamoja na kuondoa nakala kamili na zilizofanana ili kuondoa hati zenye maudhui ya msimbo (karibu) sawa katika seti yetu ya mafunzo. Kwa kuondoa nakala kamili, kwanza tunatoa hifadhi ya SHA256 kwenye maudhui ya hati na kuondoa rekodi zenye hifadhi zinazofanana. Baada ya kuondoa nakala kamili, tunatumia kuondoa nakala zilizofanana kwa lengo la kuondoa faili za msimbo ambazo zinaweza kuwa na tofauti kidogo na hivyo kuondoa upendeleo zaidi kwenye data. Tunatumia njia ya hatua mbili kwa hili: (1) toa MinHashes za hati zote na kisha tumia Locally Sensitive Hashing (LSH) kuunda vikundi vya hati kulingana na alama zao za MinHash, (2) pima Jaccard similarity kati ya kila jozi ya hati katika ndoo sawa na tia alama hati isipokuwa moja kama nakala kulingana na kiwango cha usawa cha 0.7. Tunatumia mchakato huu wa kuondoa nakala karibu kwa lugha zote za programu ikiwa ni pamoja na maswala ya GitHub ili kuboresha utajiri na utofauti wa seti ya mafunzo. 2.3 Kuchuja HAP, PII, Malware Ili kupunguza uwezekano wa kutoa lugha za chuki, matusi, au uasherati (HAP) kutoka kwa mifumo, tunafanya juhudi za bidii kuchuja maudhui ya HAP kutoka kwa seti ya mafunzo. Kwanza tunaunda kamusi ya maneno muhimu ya HAP na kisha tunatia alama kila hati ya msimbo na idadi ya matukio ya maneno muhimu kama hayo katika maudhui ikiwa ni pamoja na maoni. Tunachuja hati ambazo zinazidi kiwango cha HAP, kilichohesabiwa kulingana na uchambuzi wa usambazaji na pia ukaguzi wa mwongozo wa faili za msimbo. Zaidi ya hayo, ili kulinda faragha, tunafuata StarCoder ( , ) na tunafanya juhudi za bidii kuondoa Habari Zinazotambulisha Binafsi (PII) kutoka kwa seti ya mafunzo. Hasa, tunatumia mfumo wa StarPII kugundua anwani za IP, funguo, anwani za barua pepe, majina, majina ya watumiaji, na nywila zinazopatikana katika maudhui. Hatua ya kuondoa PII inabadilisha maandishi ya PII na tokeni zinazolingana NAME , EMAIL , KEY , PASSWORD na hubadilisha anwani ya IP na anwani ya IP bandia, kama ilivyo kwa Li et al. (2023a). Pia tunachanganua seti zetu za data kwa kutumia kugundua na kuondoa visa vya programu hasidi katika msimbo chanzo. Li et al. 2023a 4 2.4 Seti za Data za Lugha Asilia Mbali na kukusanya data ya msimbo kwa ajili ya mafunzo ya mfumo, tunatengeneza seti kadhaa za data za lugha asilia za ubora wa juu zinazopatikana hadharani ili kuboresha umahiri wa mfumo katika kuelewa lugha na kufikiri kihisabati. Seti za data zinazowakilisha chini ya kategoria hii zinajumuisha hati za wavuti (Stackexchange, CommonCrawl), maandishi ya wavuti ya kihisabati (OpenWeb-Math; ( ), StackMathQA; ( )), maandishi ya kitaaluma (Arxiv, Wikipedia), na seti za data za mafunzo ya maagizo (FLAN; ( ), HelpSteer ( , )). Hatutoi nakala za seti hizi za data za lugha asilia ambazo tayari zimeandaliwa. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Usanifu wa Mfumo Tunafunza mfululizo wa mifumo ya msimbo yenye ukubwa tofauti kulingana na usanifu wa kiductor wa transformer ( , ). Vigezo vya mfumo kwa mifumo hii vimetolewa katika Jedwali . Kwa mifumo yote ya usanifu, tunatumia kabla ya urekebishaji ( , ): urekebishaji unaotumika kwa pembejeo ya vitalu vya umakini na MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : Mfumo mdogo zaidi katika familia ya mifumo ya Granite-code unafunzwa na usimbaji wa RoPE ( , ) na Multi-Head Attention ( , ). Mfumo huu unatumia kipengele cha swish ( , ) na GLU ( , ) kwa MLP, pia unajulikana kama swiglu. Kwa urekebishaji, tunatumia RMSNorm ( , ) kwani ni bora zaidi kwa hesabu kuliko LayerNorm ( , ). Mfumo wa 3B unafunzwa na urefu wa muktadha wa tokeni 2048. 3B Su et al. 2023 Vaswani et al. 2017 Ramachandran et al. 2017 Shazeer 2020 Zhang & Sennrich 2019 Ba et al. 2016 : Mfumo wa 8B una usanifu sawa na mfumo wa 3B isipokuwa kwa kutumia Grouped-Query Attention (GQA) ( , ). Kutumia GQA kunatoa uwiano bora kati ya utendaji wa mfumo na ufanisi wa utoaji kwa kiwango hiki. Tunafunza mfumo wa 8B na urefu wa muktadha wa tokeni 4096. 8B Ainslie et al. 2023 : Mfumo wa msimbo wa 20B unafunzwa na usimbaji wa nafasi kamili uliojifunza. Tunatumia Multi-Query Attention ( , ) wakati wa mafunzo kwa utoaji wa baadaye unaofaa. Kwa kizuizi cha MLP, tunatumia kipengele cha GELU ( , ). Kwa kurekebisha maoni, tunatumia LayerNorm ( , ). Mfumo huu unafunzwa na urefu wa muktadha wa tokeni 8192. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : Ili kufunza mfumo wa 34B, tunafuata mbinu ya kwa ajili ya kuongeza kina cha mfumo wa 20B. Hasa, kwanza tunatoa nakala ya mfumo wa 20B na tabaka 52 na kisha kuondoa tabaka 8 za mwisho kutoka kwa mfumo wa asili na tabaka 8 za kwanza kutoka kwa nakala yake ili kuunda mifumo miwili. 34B Kim et al. Hatimaye, tunafungamanisha mifumo yote miwili ili kuunda mfumo wa Granite-34B-Code wenye tabaka 88 (tazama Mchoro kwa kielelezo). Baada ya kuongeza kina, tunaona kwamba kupungua kwa utendaji ikilinganishwa na mfumo wa 20B ni kidogo sana kinyume na kile kilichoonekana na . Utendaji huu unarejeshwa haraka sana baada ya kuendelea na utangulizi wa mfumo wa 34B ulioongezwa. Vile vile na 20B, tunatumia muktadha wa tokeni 8192 wakati wa utangulizi. 2 Kim et al. 4 Utangulizi Katika sehemu hii, tunatoa maelezo kuhusu mafunzo ya awamu mbili (Sehemu ), malengo ya mafunzo (Sehemu ), uboreshaji (Sehemu ) na miundombinu (Sehemu ) zilizotumika katika utangulizi wa mifumo. 4.1 4.2 4.3 4.4 4.1 Mafunzo ya Awamu Mbili Mifumo ya Granite Code inafunzwa kwa tokeni 3.5T hadi 4.5T za data ya msimbo na seti za data za lugha asilia zinazohusiana na msimbo. Data inatolewa kwa kutumia byte pair encoding (BPE, ( Sennrich et