Аўтары: Маянкі Мішра⋆, 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 складаецца з мадэляў памерам ад 3 да 34 мільярдаў параметраў, прыдатных для прымяненняў ад складаных задач мадэрнізацыі прыкладанняў да сцэнарыяў з абмежаванай памяццю на прыладах. Ацэнка на ўсёабдымным наборы задач дэманструе, што кодавыя мадэлі Granite паслядоўна дасягаюць найлепшых у сваім класе вынікаў сярод даступных адкрытых LLM для кода. Сям'я кодавых мадэляў Granite была аптымізавана для працоўных працэсаў распрацоўкі прадпрыемствамі праграмнага забеспячэння і добра працуе ў розных задачах кадавання (напрыклад, генерацыя, выпраўленне і тлумачэнне кода), што робіць яе універсальнай "універсальнай" кодавай мадэллю. Мы выпускаем усе нашы кодавыя мадэлі Granite пад ліцэнзіяй 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), and 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, серыю высокаэфектыўных LLM для кода, распрацаваных для падтрымкі распрацоўкі прадпрыемствамі праграмнага забеспячэння ў шырокім спектры задач кадавання. Кодавыя мадэлі Granite маюць два асноўных варыянты, якія мы выпускаем у чатырох розных памерах (3B, 8B, 20B і 34B): базавыя асноўныя мадэлі для задач, звязаных з кодам; Granite Code Base: мадэлі, якія выконваюць інструкцыі, дадаткова навучаныя з выкарыстаннем камбінацыі пар Git-камітаў з чалавечымі інструкцыямі і адкрытых сінтэтычна згенераваных набораў дадзеных інструкцый для кода. Granite Code Instruct: Базавыя мадэлі серыі былі навучаны з нуля з выкарыстаннем двухфазнай стратэгіі навучання. На першым этапе наша мадэль навучаецца на 3-4 трыльёнах токенаў, атрыманых са 116 моў праграмавання, што забяспечвае поўнае разуменне моў праграмавання і сінтаксісу. На другім этапе наша мадэль дадаткова навучаецца на 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 у цэлым дэманструюць вельмі моцныя вынікі па ўсіх памерах мадэляў і эталонах (часта пераўзыходзячы іншыя адкрытыя кодавыя мадэлі, якія ў два разы большыя за 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 таксама дэманструюць моцныя вынікі на 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 ўключаюць: : Кодавыя мадэлі Granite дасягаюць канкурэнтаздольных або найлепшых у сваім класе вынікаў у розных тыпах задач, звязаных з кодам, уключаючы генерацыю кода, тлумачэнне, выпраўленне, рэдагаванне, пераклад і г.д., дэманструючы іх здольнасць вырашаць разнастайныя задачы кадавання; Універсальная LLM для кода : Усе нашы мадэлі навучаюцца на дазволеных ліцэнзіяй даных, сабраных у адпаведнасці з прынцыпамі IBM AI Ethics і кіраваных юрыдычным аддзелам IBM для надзейнага выкарыстання ў прадпрыемствах. Усе кодавыя мадэлі Granite выпускаюцца пад ліцэнзіяй Apache 2.0. Надзейная LLM прадпрыемстваў 1 Мы апісваем увесь наш працэс збору, фільтрацыі і папярэдняй апрацоўкі дадзеных у раздзеле . Раздзел апісвае дэталі архітэктуры мадэлі, за якімі ідуць дэталі навучання ў раздзеле . Раздзел змяшчае дэталі аб дадатковым навучанні, а раздзел апісвае эксперыменты і вынікі, якія параўноўваюць кодавыя мадэлі Granite з іншымі адкрытымі 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, выкарыстоўваючы набор метрык якасці, якія ўключаюць выдаленне аўтаматычна згенераванага тэксту, фільтрацыю неангламоўных праблем, выключэнне каментарыяў ад ботаў і выкарыстанне колькасці карыстальнікаў, якія ўдзельнічаюць у размове, як паказчыка якасці. Мы таксама антыруем кожны файл кода інфармацыяй аб ліцэнзіі, звязанай з адпаведным рэпазіторыем, знойдзенай праз API GitHub, і захоўваем толькі файлы з дазволенымі ліцэнзіямі для навучання мадэлі. 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) мовы з мадэляў, мы прыкладаем старанныя намаганні для фільтрацыі 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. У прыватнасці, мы спачатку дублюем кода 34B Kim et al.