```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 загалом демонструють дуже високу продуктивність за всіма розмірами моделей та бенчмарками (часто перевершуючи інші відкриті моделі коду, які вдвічі перевищують розмір 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 AI Ethics та під керівництвом юридичної команди 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 за допомогою набору метрик якості, які включають видалення автоматично згенерованого тексту, фільтрацію проблем неанглійською мовою, виключення коментарів від ботів та використання кількості користувачів, які беруть участь у розмові, як показника якості. Ми також анотуємо кожен файл коду інформацією про ліцензію, пов'язану з відповідним репозиторієм, отриманою через API GitHub, і зберігаємо лише файли з дозвільними ліцензіями для навчання моделі. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Точна та нечітка дедуплікація Ми застосовуємо агресивну стратегію дедуплікації, включаючи як точну, так і нечітку дедуплікацію, для видалення документів, що мають (майже) однаковий вміст коду в нашому навчальному наборі. Для точної дедуплікації ми спочатку обчислюємо хеш SHA256 на вмісті документа та видаляємо записи з однаковими хешами. Після точної дедуплікації ми застосовуємо нечітку дедуплікацію з метою видалення файлів коду, які можуть мати незначні відмінності, і, таким чином, подальшого усунення зміщення даних. Ми застосовуємо двоступеневий метод для цього: (1) обчислюємо MinHashes усіх документів, а потім використовуємо Locally Sensitive Hashing (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 embedding ( , ) і 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, ми використовуємо контекст 8192 токенів під час попереднього навчання. 2 Kim et al. 4 Попереднє навчання У цьому розділі ми надаємо деталі двофазного навчання (розділ ), навчальних цілей (розділ ), оптимізації (розділ ) та інфраструктури (розділ ), що використовувалися для попереднього навчання моделей. 4.1 4.2 4.3 4.4 4.1 Двофазне навчання Моделі Granite Code навчаються на 3,5–4,5T токенів даних коду та даних природної мови, пов'язаних з кодом. Дані токенізуються за допомогою Byte Pair Encoding (BPE, ( , )), використовуючи той самий токенізатор, що й StarCoder ( , ). Відповідно до ( , ; , ), ми використовуємо високоякісні дані з двома фазами навчання наступним чином. Sennrich et al. 2015 Li et al. 2023a Shen et al. 2024 Hu et al. 2024 • : Під час фази 1 моделі 3B і 8B навчаються на 4 трильйонах токенів коду, що охоплюють 116 мов. Модель 20B параметрів навчається на 3 трильйонах токенів коду. Модель 34B навчається на 1,4T токенів після масштабування глибини, яке виконується на чекпоінті 1,6T моделі 20B. Фаза 1 (лише навчання коду) • : У фазі 2 ми включаємо додаткові загальнодоступні дані високої якості з різних доменів, включаючи технічні, математичні та веб-документи, для подальшого покращення продуктивності моделі в міркуванні та вирішенні проблем, які є необхідними для генерації коду. Ми навчаємо всі наші моделі на 500B токенів (80% коду та 20% даних мови) у фазі 2 навчання. Фаза 2 (навчання коду + мови) 4.2 Навчальна мета Для навчання всіх наших моделей ми використовуємо об'єктив причинного мовного моделювання та об'єктив Fill-In-the-Middle (FIM) ( , ). Об'єктив FIM відповідає за передбачення вставлених токенів з урахуванням наданого контексту та подальшого тексту. Ми навчаємо наші моделі працювати як з режимом PSM (Prefix-Suffix-Middle), так і з режимом SPM (Suffix-Prefix-Middle), з відповідними токенами керування форматуванням, як і в StarCoder ( , Bavarian et al. 2022 Li et al. 202