Авторлар: Маянк Мишра⋆, 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-дердің толық әлеуетін жүзеге асыру үшін кодты генерациялау, қателерді түзету, кодты түсіндіру және құжаттау, репозиторийлерді қолдау және т.б. сияқты кең ауқымды мүмкіндіктер қажет. Бұл жұмыста біз кодты генерациялау тапсырмаларына арналған 116 бағдарламалау тілінде жазылған кодпен оқытылған, декoдер-тек кодтық модельдердің Гранит сериясын ұсынамыз. Гранит кодтық модельдер отбасы 3-тен 34 миллиард параметрге дейінгі модельдерді қамтиды, бұл күрделі қолданбаларды жаңарту тапсырмаларынан бастап, құрылғыдағы жадқа шектеулі пайдалану жағдайларына дейін қолдануға жарамды. Тапсырмалардың толық жиынтығы бойынша бағалау Гранит кодтық модельдерінің қолданыстағы ашық кодтық LLM-дер арасында үнемі озық өнімділікке қол жеткізетінін көрсетеді. Гранит кодтық модельдер отбасы кәсіпорын бағдарламалық жасақтамасын жасау жұмыс ағындары үшін оңтайландырылған және кодтау тапсырмаларының (мысалы, код генерациялау, түзету және түсіндіру) кең ауқымында жақсы жұмыс істейді, бұл оны жан-жақты "барлық жағынан" кодтық модель етеді. Біз барлық Гранит кодтық модельдерімізді зерттеу және коммерциялық мақсатта пайдалану үшін 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-дердегі лицензиялық шарттар кәсіпорынның модельді пайдалану мүмкіндігін шектеуі және күрделендіруі мүмкін. Міне, біз Гранит кодтық модельдерін, код LLM-дердің кең ауқымды тапсырмаларын қолдауға арналған, жоғары қабілетті код LLM-дер сериясын ұсынамыз. Гранит кодтық модельдерінде төрт түрлі өлшемде (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 Біздің нәтижелеріміз көрсеткендей, ашық кодтық модельдер арасында Гранит кодтық модельдері барлық модель өлшемдері мен сынақтарда өте жоғары өнімділікті көрсетеді (көбінесе Граниттен екі есе үлкен басқа ашық кодтық код модельдерінен асып түседі). Мысалы, 1-суреттің (жоғарғы бөлігі) Гранит-8B-Code-Base пен басқа ашық кодтық базалық код LLM-дерін, соның ішінде Mistral ( , ) және LLama-3 ( , ) сияқты жақында шыққан жоғары өнімді жалпы мақсаттағы базалық LLM-дерін HumanEvalPack ( , ) бойынша салыстыруды көрсетеді. CodeGemma және StarCoder2 кодты генерациялауда жақсы нәтиже көрсеткенімен, HumanEvalPack-тің кодты түзету және түсіндіру нұсқаларында айтарлықтай төмен өнімділік көрсетеді. Орташа есеппен, Гранит-8B-Code-Base ең бәсекеге қабілетті CodeGemma-8B моделінен HumanEvalPack-те шамамен 12 пунктке (33.2% қарсы 21.3%) асып түседі, бұл айтарлықтай аз токенмен (4.5T қарсы 7.5T токен) оқытылғанына қарамастан. Базалық модельдерден басқа, біздің Гранит кодтық модельдеріміздің нұсқаулықпен толықтырылған нұсқалары да HumanEvalPack-те жоғары өнімділікті көрсетеді, басқа ашық кодтық (код) нұсқаулық модельдерінен асып түседі, бұл табиғи тіл нұсқауларымен кодтау тапсырмаларының кең ауқымындағы артықшылықтарды көрсетеді (1-суреттің (төменгі бөлігі) қараңыз). Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 Сонымен қатар, ойлау күрделі сұрақтар мен тапсырмаларды шешу үшін маңызды болғандықтан, біз Гранит-8B-Code-Base моделімізді алты математикалық сынақта, соның ішінде MATH ( , ), GSM8K ( , ) және есептеу құралдарына қолжетімділігі бар есептерді шешуде тексереміз, мұнда біздің Гранит 8B моделіміз ең заманауи 7B немесе 8B LLM-дерге қарағанда жақсы өнімділікке қол жеткізеді. Мысалы, Гранит-8B-Code-Base GSM8K-те Llama-3-8B-Base-тен шамамен 12 пунктке және MATH-та шамамен 6 пунктке асып түседі (15-кестесін қараңыз). Cobbe et al. 2021 Cobbe et al. 2021 Гранит кодтық модельдерінің негізгі артықшылықтары: : Гранит кодтық модельдері код генерациялау, түсіндіру, түзету, өңдеу, аудару және т.б. сияқты әртүрлі кодқа қатысты тапсырмаларда бәсекеге қабілетті немесе озық өнімділікке қол жеткізеді, бұл әртүрлі кодтау тапсырмаларын шешу қабілетін көрсетеді; Жан-жақты код LLM : Барлық модельдеріміз IBM-нің AI этикасы принциптеріне сәйкес жиналған және IBM корпоративтік заң бөлімінің сенімді кәсіпорын пайдалануына бағытталған лицензияланған деректермен оқытылған. Барлық Гранит кодтық модельдері Apache 2.0 лицензиясы бойынша шығарылады. Сенімді кәсіпорын деңгейіндегі LLM 1 Біз деректерді жинау, сүзгілеу және алдын ала өңдеу процесімізді 2-бөлімде сипаттаймыз. . 3-бөлім модель архитектурасының егжей-тегжейін, ал 4-бөлім оқыту егжей-тегжейін сипаттайды. 2 5-бөлімде нұсқаулықты толықтыру туралы егжей-тегжейлер берілген, ал 6-бөлімде Гранит кодтық модельдерін басқа ашық кодтық LLM-дермен салыстыратын эксперименттер мен нәтижелер сипатталған. 2 Деректерді жинау Бұл бөлімде біз код деректерін модельді оқыту үшін дайындау үшін қолданылатын сканерлеу және сүзгілеу (2.1-б., ), дедупликация (2.2-б., ), HAP/PII сүзгілеу (2.3-б., ) процестерін сипаттаймыз. Сондай-ақ, модельдің тілді түсіну және математикалық ойлау дағдыларын жақсарту үшін пайдаланылатын жоғары сапалы табиғи тіл деректеріне шолу жасаймыз. 2.1 2.2 2.3 2.1 Деректерді сканерлеу және сүзгілеу Алдын ала оқыту коды деректері Github Code Clean , StarCoderdata сияқты қолжетімді деректер жинақтарынан және GitHub-тың қосымша ашық код репозиторийлері мен мәселелерінен алынды. Біз 300+ тілдің ішінен 116 бағдарламалау тілін қалдыру үшін шикі деректерді сүзгілейміз, А қосымшасында А тізімі келтірілген. Деректерді бағдарламалау тілдеріне бөлу StarCoder ( , ) сияқты тек файл кеңейтімі негізінде жүзеге асырылады. Тілді сүзгілеуден кейін, төмен сапалы кодты сүзгілеу үшін төрт негізгі сүзгілеу ережесін қолданамыз ( , ): (1) 25% -дан аз әріптік символдары бар файлдарды жою, (2) XSLT тілінен басқа, файлдың алғашқы 100 символының ішінде "<?xml version=” жолы бар файлдарды сүзгілеу, (3) HTML файлдары үшін, көрінетін мәтін HTML кодының кем дегенде 20% -ын құрайтын және ең аз дегенде 100 символ ұзындығы бар файлдарды сақтау, (4) JSON және YAML файлдары үшін, символ саны 50-ден 5000-ға дейінгі файлдарды сақтау. Біз сондай-ақ GitHub мәселелерін сапа метрикаларының жиынтығын қолданып сүзгілейміз, оларға автоматты түрде генерацияланған мәтінді жою, ағылшын тілінде емес мәселелерді сүзгілеу, боттардан түсініктемелерді алып тастау және әңгімеге қатысқан пайдаланушылар санын сапа көрсеткіші ретінде пайдалану кіреді. Біз сондай-ақ репозиторийге тиесілі лицензия ақпаратын GitHub API арқылы тауып, әрбір код файлын лицензиямен аннотациялаймыз және модельді оқыту үшін тек рұқсат етілген лицензиялары бар файлдарды сақтаймыз. 2 3 Li et al. 2023a Li et al. 2023a 2.2 Нақты және жуық дедупликация Біз оқыту жинағымызда (жуық) бірдей кодтық мазмұны бар құжаттарды жою үшін нақты және жуық дедупликацияны қамтитын агрессивті дедупликация стратегиясын қолданамыз. Нақты дедупликация үшін, біз алдымен құжат мазмұнына SHA256 хэшін есептейміз және бірдей хэштері бар жазбаларды жоямыз. Нақты дедупликациядан кейін, біз сәл өзгерістері бар код файлдарын жою және деректерді одан әрі ықпал ету мақсатында жуық дедупликацияны қолданамыз. Біз мұны үшін екі сатылы әдісті қолданамыз: (1) барлық құжаттардың MinHash-терін есептеп, содан кейін MinHash саусақ ізін негізге ала отырып, құжаттарды топтау үшін Жергілікті сезімтал хэшлауды (LSH) пайдаланамыз, (2) сол топтағы әрбір жұп құжат арасындағы Жаккар ұқсастығын өлшеп, ұқсастық шегі 0.7 негізінде бір бөлігінен басқа жазбаларды дубликат ретінде аннотациялаймыз. Біз бұл жуық дедупликация процесін оқыту деректер жинағының байлығы мен әртүрлілігін арттыру үшін GitHub мәселелері сияқты барлық бағдарламалау тілдеріне қолданамыз. 2.3 HAP, PII, зиянды бағдарламаларды сүзгілеу Модельдерден зиянды, дөрекі немесе болымсыз тілді (HAP) шығару ықтималдығын азайту үшін, біз оқыту жинағынан HAP мазмұнын сүзгілеу үшін мұқият әрекет жасаймыз. Біз алдымен HAP кілт сөздерінің сөздігін жасаймыз, содан кейін әрбір код құжатын мазмұндағы, соның ішінде түсініктемелердегі мұндай кілт сөздердің пайда болу санымен аннотациялаймыз. Біз таралымдық талдау негізінде есептелген HAP шегінен асатын құжаттарды сүзгілейміз, сондай-ақ код файлдарын қолмен тексеруді жүргіземіз. Сонымен қатар, құпиялылықты қорғау үшін, біз StarCoder ( , ) үлгісіне еріп, оқыту жинағынан Жеке анықтауға болатын ақпаратты (PII) қысқарту үшін мұқият әрекет жасаймыз. Атап айтқанда, біз StarPII моделін IP мекенжайларын, кілттерді, электрондық пошта мекенжайларын, аттарын, пайдаланушы аттарын және парольдерді анықтау үшін пайдаланамыз. PII қысқарту кезеңі PII мәтінін сәйкес NAME, EMAIL, KEY, PASSWORD токендерімен алмастырады және IP мекенжайын Li et al. (2023a) сияқты синтетикалық генерацияланған IP мекенжайымен ауыстырады. Біз сондай-ақ зиянды бағдарламаның орналасқан жерін анықтау және жою үшін біздің деректер жинақтарымызды сканерлейміз. Li et al. 2023a 4 2.4 Табиғи тіл деректер жинақтары Модельді оқыту үшін код деректерін жинаумен қатар, біз модельдің тілді түсіну және математикалық ойлау қабілетін жақсарту үшін бірнеше қолжетімді жоғары сапалы табиғи тіл деректер жинақтарын қамтамасыз етеміз. Бұл санатқа жататын репрезентативті деректер жинақтарына веб-құжаттар (Stackexchange, CommonCrawl), математикалық веб-мәтін (OpenWeb-Math; ( ), StackMathQA; ( )), академиялық мәтіндер (Arxiv, Wikipedia) және нұсқаулықты толықтыру деректер жинақтары (FLAN; ( ), HelpSteer ( , )) кіреді. Бұл алдын ала өңделген табиғи тіл деректер жинақтарын дедупликацияламаймыз. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Модель архитектурасы Біз трансформер декoдері архитектурасына ( , ) негізделген әртүрлі өлшемдегі кодтық модельдер сериясын оқытамыз. Бұл модельдер үшін модель гиперпараметрлері 10-кестесінде берілген. Барлық модель архитектуралары үшін біз кіріс внимание және MLP блоктарына қолданылатын алдын ала нормалауды ( , ) қолданамыз. Vaswani et al. 2017 Xiong et al. 2020 : Гранит-кодтық модельдер отбасындағы ең кіші модель RoPE ендіруі ( , ) және Көпбасты внимание ( , ) арқылы оқытылады. Бұл модель MLP үшін swish активация функциясын ( , ) GLU ( , )мен бірге пайдаланады, бұл әдетте swiglu деп те аталады. Нормалау үшін біз RMSNorm ( , ) пайдаланамыз, себебі ол LayerNorm ( , ) қарағанда есептеу жағынан тиімдірек. 3B моделі 2048 токен контекст ұзындығымен оқытылады. 3B Su et al. 2023 Vaswani et al. 2017 Ramachandran et al. 2017 Shazeer 2020 Zhang & Sennrich 2019 Ba et al. 2016 : 8B моделі 3B моделімен ұқсас архитектураға ие, тек топтық сұраныс арқылы внимание (GQA) ( , ) пайдалану ерекшелігі бар. GQA пайдалану бұл масштабта модель өнімділігі мен инференс тиімділігі арасындағы жақсы теңгерімді қамтамасыз етеді. Біз 8B моделін 4096 токен контекст ұзындығымен оқытамыз. 8B Ainslie et al. 2023 : 20B кодтық модель үйретілген абсолютті позициялық ендірулермен оқытылады. Төмендегі инференс тиімділігі үшін біз оқыту кезінде Көп сұраныстық внимание ( , ) пайдаланамыз. MLP блогы үшін біз GELU активация функциясын ( , ) қолданамыз. Активацияларды нормалау үшін біз LayerNorm ( , 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 201