```html Автори: 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 Апстракт Големите јазични модели (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, нашиот модел е обучен на 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 Спроведуваме обемни евалуации на нашите 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 генерално покажуваат многу силни перформанси низ сите големини на модели и бенчмаркови (честопати надминувајќи други LLM за код со отворен код што се двојно поголеми од 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 постигнува подобри перформанси во споредба со повеќето LLM од најновата генерација од 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 за код : Сите наши модели се обучени на дозволени податоци собрани според принципите за етика на вештачка интелигенција на IBM и водени од правниот тим на 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 датотеки, задржете само датотеки каде видливиот текст сочинува најмалку 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, Malware За да се намали веројатноста за генерирање омразени, навредливи или вулгарни (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 - MQA) ( , ) за време на обуката за ефикасна натамошна инференција. За 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, користиме контекст од 8192 токени при претходното тренирање. 2 Kim et al. 4 Претходно тренирање Во овој дел, даваме детали за двoфазната обука (Дел. ), целите на обуката (Дел. ), оптимизацијата (Дел. ) и инфраструктурата (Дел. ) користени при 4.1 4.2 4.3 4.4