```html Autori: 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 Abstrakt Velké jazykové modely (LLM) trénované na kódu revolučně mění proces vývoje softwaru. LLM pro kód jsou stále častěji integrovány do vývojových prostředí, aby se zvýšila produktivita lidských programátorů, a agenti založení na LLM začínají ukazovat příslib pro autonomní řešení složitých úkolů. Realizace plného potenciálu LLM pro kód vyžaduje širokou škálu schopností, včetně generování kódu, opravy chyb, vysvětlování a dokumentování kódu, údržby repozitářů a dalších. V této práci představujeme sérii dekódovacích kódových modelů Granite pro generativní kódové úkoly, trénované na kódu napsaném ve 116 programovacích jazycích. Rodina modelů Granite Code zahrnuje modely o velikosti od 3 do 34 miliard parametrů, vhodné pro aplikace od složitých úloh modernizace aplikací po případy použití s omezenou pamětí na zařízení. Vyhodnocení na komplexní sadě úkolů prokazuje, že modely Granite Code konzistentně dosahují špičkového výkonu mezi dostupnými open-source LLM pro kód. Rodina modelů Granite Code byla optimalizována pro pracovní postupy vývoje podnikových softwarů a dobře si vede v řadě kódovacích úkolů (např. generování, oprava a vysvětlování kódu), což z ní činí univerzální kódový model „všestranně“. Všechny naše modely Granite Code uvolňujeme pod licencí Apache 2.0 pro výzkumné i komerční použití. https://github.com/ibm-granite/granite-code-models 1 Úvod Během posledních několika desetiletí se software stal nedílnou součástí všech aspektů naší společnosti. S rostoucím požadavkem na vývoj softwaru je stále kritičtější zvyšovat produktivitu vývoje softwaru a LLM poskytují slibnou cestu k podpoře lidských programátorů. Mezi prominentní podnikové případy použití LLM pro zvýšení produktivity vývoje softwaru patří generování kódu, vysvětlování kódu, oprava kódu, generování jednotkových testů a dokumentace, modernizace aplikací, detekce zranitelností, překlad kódu a další. V posledních letech došlo k rychlému pokroku ve schopnosti LLM generovat a manipulovat kód a dnes jsou k dispozici řady modelů s působivými kódovacími schopnostmi. Velikost modelů se pohybuje od jednotek miliard parametrů (např. Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024) atd.) až po stovky miliard: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere) a liší se v obecnosti zamýšleného použití, přičemž některé modely se snaží pokrýt širokou škálu použití mimo kód, zatímco jiné se primárně zaměřují na úkoly související s kódem (např. StarCoder (Li et al., 2023a; Lozhkov et al., 2024), CodeGen (Nijkamp et al., 2023), CodeLlama (Rozie`re et al., 2023), a CodeGemma (CodeGemma Team et al., 2024)). Však v oblasti LLM pro kód stále existují důležité mezery, zejména v kontextu vývoje podnikových softwarů. Zaprvé, zatímco velmi velké, generalistické LLM mohou dosahovat vynikajícího kódovacího výkonu, jejich velikost je činí drahými k nasazení. Menší modely zaměřené na kód ( , ; , ; , ; , ; , ) mohou dosáhnout vynikajícího výkonu při generování kódu v menším a flexibilnějším balení, ale výkon v kódovacích úkolech mimo generování (např. oprava a vysvětlení) může zaostávat za výkonem generování kódu. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 V mnoha podnikových kontextech je přijetí kódových LLM dále komplikováno faktory mimo výkon modelů. Například i otevřené modely jsou někdy sužovány nedostatkem transparentnosti ohledně zdrojů dat a metod zpracování dat, které byly použity k vytvoření modelu, což může snížit důvěru v modely v kritických a regulovaných kontextech. Navíc licenční podmínky dnešních otevřených LLM mohou zatěžovat a komplikovat schopnost podniku používat model. Zde představujeme modely Granite Code, sérii vysoce schopných LLM pro kód, navržených pro podporu vývoje podnikových softwarů v široké škále kódovacích úkolů. Modely Granite Code mají dvě hlavní varianty, které uvolňujeme ve čtyřech různých velikostech (3B, 8B, 20B a 34B): základní modely pro úkoly související s kódem; Granite Code Base: modely pro následování instrukcí, doladěné pomocí kombinace commitů z Gitu spárovaných s lidskými instrukcemi a open-source synteticky generovaných datových sad instrukcí pro kód. Granite Code Instruct: Základní modely v sérii byly trénovány od začátku pomocí dvoufázové tréninkové strategie. Ve fázi 1 jsou naše modely trénovány na 3 až 4 bilionech tokenů získaných ze 116 programovacích jazyků, což zajišťuje komplexní porozumění programovacím jazykům a syntaxi. Ve fázi 2 jsou naše modely dále trénovány na 500 miliardách tokenů se pečlivě navrženou směsí vysoce kvalitních dat z domén kódu a přirozeného jazyka, aby se zlepšila schopnost modelu uvažovat. K tréninku základních modelů v obou fázích tréninku používáme bez dozoru modelingový jazykový cíl. Instrukční modely jsou odvozeny dalším doladěním výše trénovaných základních modelů na kombinaci filtrované varianty CommitPack ( , ), datových sad pro následování instrukcí v přirozeném jazyce (OASST ( , ), HelpSteer ( , )) a open-source matematických datových sad (MathInstruct ( , ) a MetaMathQA ( , )), včetně synteticky generovaných kódových datových sad pro zlepšení následování instrukcí a schopností uvažování. Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Provádíme rozsáhlé vyhodnocení našich kódových LLM na komplexní sadě benchmarků, včetně HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ) a dalších. Tato sada benchmarků zahrnuje mnoho různých typů kódovacích úkolů kromě pouhé syntézy kódu v Pythonu, např. oprava kódu, vysvětlení kódu, úprava kódu, překlad kódu atd. napříč většinou hlavních programovacích jazyků (Python, JavaScript, Java, Go, C++, Rust atd.). Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Naše zjištění odhalují, že mezi open-source modely vykazují modely Granite Code celkově velmi silný výkon napříč všemi velikostmi modelů a benchmarky (často překonávají jiné open-source kódové modely, které jsou dvakrát větší než Granite). Jako ilustrace, obrázek (nahoře) ukazuje porovnání Granite-8B-Code-Base s jinými open-source základními kódovými LLM, včetně nedávných vysoce výkonných obecných základních LLM, jako jsou Mistral ( , ) a LLama-3 ( , ) na HumanEvalPack ( , ). Zatímco CodeGemma a StarCoder2 si vedou rozumně při generování kódu, výrazně hůře si vedou na variantách HumanEvalPack pro opravu a vysvětlení kódu. V průměru Granite-8B-Code-Base překonává nejkonkurenceschopnější model CodeGemma-8B téměř o 12 bodů na HumanEvalPack (33,2 % vs. 21,3 %), ačkoli byl trénován na výrazně menším počtu tokenů (4,5T vs. 7,5T tokenů). Kromě základních modelů vykazují i instrukčně doladěné varianty našich modelů Granite Code silný výkon na HumanEvalPack, překonávají jiné open-source (kódové) instrukční modely, což demonstruje přínosy pro širší sadu kódovacích úkolů s instrukcemi v přirozeném jazyce (viz obrázek (dole)). 1 Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 1 Dále, protože uvažování je kritické pro řešení složitých otázek a úkolů, testujeme také náš model Granite-8B-Code-Base na šesti matematických benchmarcích, včetně MATH ( , ), GSM8K ( , ) a řešení problémů s přístupem k výpočetním nástrojům, kde náš model Granite 8B dosahuje lepšího výkonu ve srovnání s většinou stavově nejlepších LLM 7B nebo 8B. Například Granite-8B-Code-Base překonává Llama-3-8B-Base o ∼12 bodů na GSM8K a ∼6 bodů na MATH (viz tabulka 5). Cobbe et al. 2021 Cobbe et al. 2021 1 Klíčové výhody modelů Granite Code zahrnují: : Modely Granite Code dosahují konkurenceschopného nebo špičkového výkonu v různých typech úkolů souvisejících s kódem, včetně generování kódu, vysvětlování, opravy, úpravy, překladu atd., což demonstruje jejich schopnost řešit různé kódovací úkoly; Univerzální kódový LLM : Všechny naše modely jsou trénovány na datech povolených licencí shromážděných v souladu s principy etiky AI společnosti IBM a řízených právním týmem společnosti IBM pro důvěryhodné podnikové využití. Všechny modely Granite Code jsou uvolněny pod licencí Apache 2.0. Důvěryhodný podnikový LLM 1 Celý náš proces sběru dat, filtrování a předzpracování popisujeme v sekci . Sekce popisuje detaily architektury modelu, následované detaily tréninku v Sekci . Sekce poskytuje detaily o ladění instrukcí a Sekce popisuje experimenty a výsledky porovnávající modely Granite Code s jinými open-source LLM. 2 3 4 5 6 2 Sběr dat V této sekci popisujeme proces procházení a filtrování (sekce ), deduplikace (sekce ), filtrování HAP/PII (sekce ) použitých k přípravě kódových dat pro trénink modelu. Poskytujeme také přehled vysoce kvalitních dat v přirozeném jazyce použitých k vylepšení porozumění jazyku a matematických schopností modelu. 2.1 2.2 2.3 2.1 Procházení a filtrování dat Předtréninková kódová data pocházela z kombinace veřejně dostupných datových sad, jako je Github Code Clean , StarCoderdata a dalších veřejných kódových repozitářů a issue z GitHubu. Surová data filtrujeme, abychom získali seznam 116 programovacích jazyků z více než 300 jazyků, jak je uvedeno v příloze . Přiřazení dat k programovacím jazykům se provádí pouze na základě přípony souboru, podobně jako u StarCoder ( , ). Po filtrování jazyků aplikujeme čtyři klíčová filtrační pravidla k odstranění méně kvalitního kódu ( , ): (1) odstranit soubory s méně než 25 % abecedních znaků, (2) kromě jazyka XSLT filtrovat soubory, kde se řetězec „<?xml version=” objeví do prvních 100 znaků, (3) pro HTML soubory ponechat pouze soubory, kde viditelný text tvoří nejméně 20 % HTML kódu a má minimální délku 100 znaků, (4) pro soubory JSON a YAML ponechat pouze soubory, které mají počet znaků v rozmezí 50 až 5000 znaků. Také anotujeme GitHub issues pomocí sady metrik kvality, které zahrnují odstranění automaticky generovaného textu, filtrování issue v jiných než anglických jazycích, vyloučení komentářů od botů a použití počtu uživatelů zapojených do konverzace jako ukazatele kvality. Každý kódový soubor také anotujeme informacemi o licenci spojené s příslušným repozitářem, nalezenými prostřednictvím API GitHubu, a pro trénink modelu ponecháváme pouze soubory s povolenými licencemi. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Přesná a fuzzy deduplikace Přijímáme agresivní strategii deduplikace zahrnující jak přesnou, tak fuzzy deduplikaci k odstranění dokumentů s (téměř) identickým kódovým obsahem v naší tréninkové sadě. Pro přesnou deduplikaci nejprve spočítáme hash SHA256 na obsahu dokumentu a odstraníme záznamy s identickými hashi. Po přesné deduplikaci aplikujeme fuzzy deduplikaci s cílem odstranit kódové soubory, které mohou mít drobné variace a tím dále odchýlit data. Pro to používáme dvoustupňovou metodu: (1) spočítáme MinHashe všech dokumentů a poté použijeme Locally Sensitive Hashing (LSH) ke seskupení dokumentů na základě jejich MinHash otisků, (2) změříme Jaccardovu podobnost mezi každým párem dokumentů ve stejném kbelíku a označíme dokumenty kromě jednoho jako duplikáty na základě prahu podobnosti 0,7. Tento proces téměř-deduplikace aplikujeme na všechny programovací jazyky, včetně GitHub issue, abychom zvýšili bohatost a rozmanitost tréninkové datové sady. 2.3 Filtrování HAP, PII, malware Abychom snížili pravděpodobnost generování nenávistného, urážlivého nebo prostopášného (HAP) jazyka z modelů, vynakládáme pečlivé úsilí k filtrování HAP obsahu z tréninkové sady. Nejprve vytvoříme slovník klíčových slov HAP a poté anotujeme každý kódový dokument počtem výskytů těchto klíčových slov v obsahu včetně komentářů. Filtrujeme dokumenty, které překročí práh HAP, vypočítaný na základě distribuční analýzy a manuální kontroly kódových souborů. Navíc, abychom chránili soukromí, postupujeme podle StarCoder ( , ) a vynakládáme pečlivé úsilí na redakci osobních identifikačních údajů (PII) z tréninkové sady. Konkrétně využíváme model StarPII k detekci IP adres, klíčů, e-mailových adres, jmen, uživatelských jmen a hesel nalezených v obsahu. Krok redakce PII nahrazuje text PII odpovídajícími tokeny NAME , EMAIL , KEY , PASSWORD a mění IP adresu na synteticky generovanou IP adresu, jako v Li et al. (2023a). Také skenujeme naše datové sady pomocí pro identifikaci a odstranění malwaru v zdrojovém kódu. Li et al. 2023a 4 2.4 Datové sady přirozeného jazyka Kromě sběru kódových dat pro trénink modelu kurátorujeme několik veřejně dostupných vysoce kvalitních datových sad přirozeného jazyka pro zlepšení modelové zdatnosti v porozumění jazyku a matematickém uvažování. Reprezentativní datové sady této kategorie zahrnují webové dokumenty (Stackexchange, CommonCrawl), matematický webový text (OpenWeb-Math; ( ), StackMathQA; ( )), akademický text (Arxiv, Wikipedia) a datové sady pro ladění instrukcí (FLAN; ( ), HelpSteer ( , )). Tyto již předzpracované datové sady přirozeného jazyka nededuplikujeme. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Architektura modelu Trénujeme sérii kódových modelů různých velikostí založených na architektuře dekodéru transformátoru ( , ). Hyperparametry modelu pro tyto modely jsou uvedeny v tabulce . Pro všechny architektury modelů používáme přednormalizaci ( , ): normalizace aplikovaná na vstup pozornosti a bloků MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : Nejmenší model v rodině modelů Granite-code je trénován s RoPE embeddingem ( , ) a Multi-Head Attention ( , ). Tento model používá aktivační funkci swish ( , ) s GLU ( , ) pro MLP, běžně označované jako swiglu. Pro normalizaci používáme RMSNorm ( , ), protože je výpočetně efektivnější než LayerNorm ( , ). Model 3B je trénován s kontextovou délkou 2048 tokenů. 3B Su et al. 2023 Vaswani et al. 2017 Ramachandran et al. 2017 Shazeer 2020 Zhang & Sennrich 2019 Ba et al. 2016 : Model 8B má podobnou architekturu jako model 3B, s výjimkou použití Grouped-Query Attention (GQA) ( , ). Použití GQA nabízí lepší kompromis mezi výkonem modelu a efektivitou inference v této škále. Model 8B trénujeme s kontextovou délkou 4096 tokenů. 8B Ainslie et al. 2023 : Kódový model 20B je trénován s naučenými absolutními pozičními embeddingy. Během tréninku používáme Multi-Query Attention ( , ) pro efektivní následnou inferenci. Pro blok MLP používáme aktivační funkci GELU ( , ). Pro normalizaci aktivací používáme LayerNorm ( , ). Tento model je trénován s kontextovou délkou 8192 tokenů. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : K tréninku modelu 34B postupujeme podle přístupu pro vertikální škálování modelu 20B. Konkrétně nejprve duplikujeme kódový model 20B s 52 vrstvami a poté odstraníme finálních 8 vrstev z původního modelu a počátečních 8 vrstev z jeho duplikátu, abychom vytvořili dva modely. 34B Kim et al. Nakonec oba modely spojíme a vytvoříme model Granite-34B-Code s 88 vrstvami (viz obrázek pro ilustraci). Po vertikálním škálování pozorujeme, že pokles výkonu ve srovnání s modelem 20B je velmi malý, na rozdíl od toho, co pozorovali . Tento výkon je docela rychle obnoven po pokračování předtréninku škálovaného modelu 34B. Podobně jako u 20B používáme při předtréninku kontext 8192 tokenů. 2 Kim et al. 4 Předtrénink V této sekci poskytujeme podrobnosti o dvoufázovém tréninku (sekce ), tréninkových cílech (sekce ), optimalizaci (sekce ) a infrastruktuře (sekce ) použitých při předtréninku modelů. 4.1 4.2 4.3 4.4 4.1 Dvoufázový trénink Modely Granite Code jsou trénovány na 3,5T až 4,5T tokenech kódových dat a datových sadách přirozeného jazyka souvisejících s kódem. Data jsou tokenizována pomocí byte pair encoding (BPE, ( , )), s použitím stejného tokenizátoru jako StarCoder ( , ). V návaznosti na ( , ; , ) používáme vysoce kvalitní data s dvěma fázemi tréninku následovně. Sennrich et al. 2015 Li et al. 2023a Shen et al. 2024 Hu et al. 2024 • : Během fáze 1 jsou oba modely 3B a 8B trénovány po dobu 4 bilionů tokenů kódových dat zahrnujících 116 jazyků. Model s 20B parametry je trénován na 3 bilionech tokenů kódu. Model 34B je trénován na 1,4T tokenech po vertikálním škálování, které je provedeno na kontrolním bodě 1,6T modelu 20B. Fáze 1 (trénink pouze na kódu) • : Ve fázi 2 zahrnujeme dodatečná vysoce kvalitní veřejně dostupná data z různých domén, včetně technických, matematických a webových dokumentů, abychom dále zlepšili výkon modelu v dovednostech uvažování a řešení problémů, které jsou nezbytné pro generování kódu. Všechny naše modely trénujeme po dobu 500B tokenů (80% kódu a 20% dat v jazyce) ve fázi 2 tréninku. Fáze 2 (trénink kódu + jazyka) 4.2 Tréninkový cíl Pro trénink všech našich modelů používáme kauzální modelingový jazykový cíl a cíl Fill-In-the-Middle (FIM) ( , ). Cíl FIM je určen k předpovídání vložených tokenů s daným kontextem a následným textem. Trénujeme naše modely tak, aby fungovaly s oběma režimy PSM (Prefix-Suffix-Middle) a SPM (Suffix-Prefix-Middle), s příslušnými řídicími tokeny formátování, stejně jako StarCoder ( , ). Bavarian et al. 2022 Li et al. 2023a Celková ztráta je počítána jako vážená kombinace 2 cílů: Empiricky nastavujeme = 0,5 během tréninku a zjistili jsme, že v praxi funguje dobře a vede k SOTA výkonu jak v úlohách d α