Автори: Мајанг Мишра⋆, 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 Ситарaми Силам, IBM Брајан Белгодер, IBM Карлос Фонсека, IBM Амит Синги, IBM Нирмит Десаи, IBM Дејвид Д. Кокс, IBM Ручир Пури†, IBM Рамешвар Панда†, IBM Апстракт Големите јазични модели (LLMs) обучени на код ја револуционизираат процесот на развој на софтвер. Се повеќе, LLMs од кодови се интегрираат во средини за развој на софтвер за да ја подобрат продуктивноста на човечките програмери, а агентите базирани на LLM почнуваат да покажуваат ветување за автономно справување со сложени задачи. Реализирањето на полниот потенцијал на LLMs од кодови бара широк спектар на можности, вклучително и генерирање на код, поправање грешки, објаснување и документирање на код, одржување на складишта и повеќе. Во оваа работа, ја претставуваме серијата Granite од декодер-only модели на код за задачи за генерирање код, обучени со код напишан на 116 програмски јазици. Семејството модели Granite Code се состои од модели со големина од 3 до 34 милијарди параметри, погодни за апликации кои се движат од сложени задачи за модернизација на апликации до случаи на употреба со ограничена меморија на уредот. Евалуацијата на сеопфатен сет на задачи покажува дека моделите Granite Code постојано постигнуваат перформанси на највисоко ниво меѓу достапните отворени LLMs за код. Семејството модели Granite Code е оптимизирано за работните процеси за развој на претпријатија софтвер и добро се покажа во широк спектар на задачи за кодирање (на пр. генерирање, поправање и објаснување на код), што го прави разноврсен „сеопфатен“ модел за код. Ги објавуваме сите наши модели Granite Code под лиценца Apache 2.0 за истражувачка и комерцијална употреба. https://github.com/ibm-granite/granite-code-models 1 Вовед Во последните неколку децении, софтверот стана ткаен во структурата на секој аспект од нашето општество. Како што побарувачката за развој на софтвер расте, уште поважно е да се зголеми продуктивноста на развојот на софтверот, а LLMs претставуваат ветувачки пат за зголемување на програмерите. Истакнатите случаи на употреба во претпријатија за LLMs во продуктивноста на развојот на софтвер вклучуваат генерирање на код, објаснување на код, поправање на код, генерирање на тест единици и документација, модернизација на апликации, детекција на ранливости, превод на код и повеќе. Во последниве години забележан е брз напредок во способноста на 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), and CodeGemma (CodeGemma Team et al., 2024)). Сепак, постојат важни празнини во тековното поле на LLMs за код, особено во контекст на развојот на софтвер во претпријатија. Прво, додека многу големи, генералистички LLMs можат да постигнат одлични перформанси во кодирањето, нивната големина ги прави скапи за распоредување. Помалите модели фокусирани на код ( , ; , ; , ; , ; , ) можат да постигнат одлични перформанси во генерирањето код во помал и пофлексибилен пакет, но перформансите во задачите за кодирање надвор од генерирањето (на пр. поправање и објаснување) може да заостанат зад перформансите во генерирањето код. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Во многу контексти на претпријатија, усвојувањето на LLM за код може да биде дополнително комплицирано од фактори надвор од перформансите на моделите. На пример, дури и отворените модели понекогаш се мачат со недостиг на транспарентност за изворите на податоци и методите за обработка на податоци што се користени во моделот, што може да го намали довербата во моделите во мисионерски критични и регулирани контексти. Покрај тоа, условите за лиценца во денешните отворени LLMs можат да ја ограничат и комплицираат можноста на претпријатието да користи модел. Тука, ги претставуваме моделите Granite Code, серија од високоспособни LLMs за код, дизајнирани да поддржат развој на софтвер во претпријатија низ широк спектар на задачи за кодирање. Моделите Granite Code имаат два главни варијанти кои ги објавуваме во четири различни големини (3B, 8B, 20B и 34B): основни модели за задачи поврзани со код; Granite Code Base: модели за следење инструкции фино подесени со комбинација на Git комити заедно со човечки инструкции и отворени синтетски генерирани набори на податоци за инструкции за код. Granite Code Instruct: Основните модели во серијата се обучени од нула со стратегија за обука во две фази. Во фаза 1, нашиот модел е обучен на 3 до 4 трилиони токени извори од 116 програмски јазици, обезбедувајќи сеопфатно разбирање на програмските јазици и синтаксата. Во фаза 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 Спроведуваме обемни евалуации на нашите LLMs за код на сеопфатен сет на бенчмаркови, вклучувајќи 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 со други отворени основни LLMs за код, вклучувајќи неодамнешни генералистички основни LLMs со високи перформанси како 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 постигнува подобри перформанси во споредба со повеќето најсовремени LLMs од 7B или 8B. На пример, 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 за Код : Сите наши модели се обучени на дозволени податоци за лиценцирање собрани според принципите за AI етика на IBM и водени од правниот тим на IBM за доверлива употреба во претпријатија. Сите модели Granite Code се објавени под лиценцата Apache 2.0. Доверлив LLM од Претпријатија 1 Ние го опишуваме целиот наш процес за собирање, филтрирање и претходна обработка на податоците во делот . Делот опишува детали за архитектурата на моделот, проследено со детали за обуката во Дел . Делот дава детали за обуката на инструкциите, а Делот опишува експериментите и резултатите споредувајќи ги моделите Granite Code со други LLMs со отворен код. 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 датотеки, задржете само датотеки каде видливиот текст сочинува најмалку 20% од HTML кодот и има минимална должина од 100 карактери, (4) за JSON и YAML датотеки, задржете само датотеки кои имаат број на карактери помеѓу 50 и 5000 карактери. Исто така, ги филтрираме GitHub прашањата користејќи сет од метрики за квалитет кои вклучуваат отстранување на автоматски генериран текст, филтрирање на прашања што не се на англиски јазик, исклучување коментари од ботови и користење на бројот на корисници вклучени во разговорот како показател за квалитет. Исто така, ги анотираме секоја датотека со код со информации за лиценцата поврзани со соодветното складиште, пронајдени преку GitHub API и задржуваме само датотеки со дозволени лиценци за обука на моделот. 2 3 А 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) јазици од моделите, вложуваме големи напори да ја филтрираме HAP содржината од сетот за обука. Прво создаваме речник на HAP клучни зборови и потоа го анотираме секој документ со код со бројот на појавувања на такви клучни зборови во содржината, вклучувајќи коментари. Ги филтрираме документите кои го надминуваат HAP прагот, пресметан врз основа на дистрибутивна анализа, како и рачна инспекција на датотеките со код. Покрај тоа, за да ја заштитиме приватноста, го следиме StarCoder ( , ) и вложуваме големи напори да ги редуцираме Личните Идентификувачки Информации (PII) од сетот за обука. Поточно, го користиме моделот StarPII за да ги откриеме IP адресите, клучевите, е-адресите, имињата, корисничките имиња и лозинките пронајдени во содржината. Фазата на редукција на PII го заменува PII текстот со соодветните токени NAME , EMAIL , KEY , PASSWORD и ја менува IP адресата со синтетски генерирана IP адреса, како кај Li et al. (2023a). Исто така, ги скенираме нашите набори на податоци користејќи за да ги идентификуваме и отстраниме инстанциите на малвер во изворниот код. 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 Архитектура на моделот Обучуваме серија од модели за код со различна големина базирани на трансформаторската декодер архитектура ( , ). Хиперпараметрите на моделот за овие модели се дадени во Табела . За сите архитектури на модели, користиме претходна нормализација ( , ): нормализација применета на влезот на блоковите за внимание и MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : Најмалиот модел во семејството модели Granite-code е обучен со RoPE вметнување ( , ) и Повеќеглаво Внимание (Multi-Head Attention) ( , ). Овој модел ја користи swish функцијата за активирање ( , ) со GLU ( , ) за MLP, исто така позната како 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, со исклучок на користење Внимание со Групирани Прашања (Grouped-Query Attention - GQA) ( , ). Користењето GQA нуди подобар компромис помеѓу перформансите на моделот и ефикасноста на инференцијата на оваа скала. Го обучуваме моделот 8B со должина на контекст од 4096 токени. 8B Ainslie et al. 2023 : Моделот 20B за код е обучен со научени апсолутни позициски вметнувања. Користиме Внимание со Повеќе Прашања (Multi-Query Attention) ( , ) за време на обуката за ефикасна инференција понатаму. За MLP блокот, ја користиме GELU функцијата за активирање ( , ). За нормализирање на активациите, користиме LayerNorm ( , ). Овој модел е обучен со должина на контекст од 8192 токени. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : За да го обучиме моделот 34B, го следиме пристапот на за зголемување на длабината на моделот 20B. Поточно, прво го дуплицираме моделот 20B со 52 слоја, а потоа ги отстрануваме последните 8 слоја од оригиналниот модел и првите 8 слоја од неговиот дупликат за да формираме два модели. 34B Kim et al. На крај, ги спојуваме двата модели за да го формираме моделот Granite-34B-Code со 88 слоја (видете ја Слика за илустрација). По зголемувањето на длабината, забележуваме дека падот во перформансите во споредба со моделот 20B е многу мал, спротивно на она што го забележа . Овие перформанси се обновуваат прилично брзо откако ќе продолжиме со претходна обука на зголемениот модел 34B. Слично на 20B, користиме контекст од 819 2 Kim et al.