Müəlliflər: 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 Kod üzərində təlim keçmiş Böyük Dil Modelləri (LLM-lər) proqram təminatı inkişaf prosesini yeniləşdirir. Artıq, kod LLM-ləri insan proqramçılarının məhsuldarlığını artırmaq üçün proqram təminatı inkişaf mühitlərinə inteqrasiya olunur və LLM əsaslı agentlər mürəkkəb tapşırıqları muxtar şəkildə idarə etmək üçün vəd etməyə başlayır. Kod LLM-lərinin tam potensialını reallaşdırmaq üçün kod yaradılması, səhvlərin düzəldilməsi, kodun izahı və sənədləşdirilməsi, arxivlərin saxlanması və daha çox daxil olmaqla geniş bir sıra bacarıqlar tələb olunur. Bu işdə, 116 proqramlaşdırma dilində yazılmış kodla təlim keçirilmiş kod yaradıcı tapşırıqlar üçün qapalı tipli kod modelləri olan Qranit seriyasını təqdim edirik. Qranit Kod Modelləri ailəsi, 3-dən 34 milyard parametrlə qədər ölçüləri olan modellərdən ibarətdir, mürəkkəb tətbiqi modernləşdirmə tapşırıqlarından tutmuş cihazda yaddaşla məhdudlaşan istifadə hallarının diapazonuna uyğundur. Tapşırıqların hərtərəfli bir dəsti üzərində aparılan qiymətləndirmə göstərir ki, Qranit Kod modelləri mövcud açıq mənbəli kod LLM-ləri arasında consistently state-of-the-art performans göstərir. Qranit Kod model ailəsi müəssisə proqram təminatı inkişaf iş axınları üçün optimallaşdırılmışdır və müxtəlif kodlaşdırma tapşırıqlarında (məsələn, kod yaradılması, düzəldilməsi və izahı) yaxşı performans göstərir, bu da onu çox yönlü "hamı üçün" kod modeli edir. Bütün Qranit Kod modellərimizi tədqiqat və kommersiya istifadəsi üçün Apache 2.0 lisenziyası altında buraxırıq. https://github.com/ibm-granite/granite-code-models 1 Giriş Son bir neçə onillikdə proqram təminatı cəmiyyətimizin hər bir sahəsinə toxunmuşdur. Proqram təminatı inkişafı tələbi artdıqca, proqram təminatı inkişafı məhsuldarlığını artırmaq hər zamankindən daha vacibdir və LLM-lər insan proqramçılarını gücləndirmək üçün ümidverici bir yol təklif edir. Proqram təminatı inkişafı məhsuldarlığında LLM-lərin görkəmli müəssisə istifadə halları kod yaradılması, kodun izahı, kodun düzəldilməsi, vahid test və sənədləşdirmə yaradılması, tətbiqin modernləşdirilməsi, zəiflik aşkarlanması, kod tərcüməsi və daha çoxunu əhatə edir. Son illərdə LLM-nin kodu yaratma və manipulyasiya etmə bacarığında sürətli tərəqqi müşahidə olunmuşdur və bu gün təsirli kodlaşdırma bacarıqlarına malik bir sıra modellər mövcuddur. Modellər parametrlərin sayı birrəqəmli milyardlardan (məsələn, Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024), və s.) yüz milyardlara qədər dəyişir: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere) və nəzərdə tutulan istifadənin ümumiliyi baxımından fərqlənir, bəzi modellər koddan başqa bir sıra istifadələri əhatə etməyi hədəfləyir, digərləri isə əsasən kodla əlaqəli tapşırıqlara (məsələn, StarCoder (Li et al., 2023a; Lozhkov et al., 2024), CodeGen (Nijkamp et al., 2023), CodeLlama (Rozie`re et al., 2023), və CodeGemma (CodeGemma Team et al., 2024)) fokuslanır. Lakin, kod üçün LLM-lər sahəsində, xüsusilə müəssisə proqram təminatı inkişafı kontekstində vacib boşluqlar qalmaqdadır. Birincisi, çox böyük, ümumi LLM-lər mükəmməl kodlaşdırma performansı əldə edə bilsə də, onların ölçüsü yeridilməsini bahalı edir. Kiçik kod fokuslu modellər ( , ; , ; , ; , ; , ) kiçik və daha çevik paketdə mükəmməl kod yaradılması performansı əldə edə bilər, lakin yaradılmadan kənar kodlaşdırma tapşırıqlarında (məsələn, düzəldilmə və izah) performans kod yaratma performansından geri qala bilər. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Bir çox müəssisə kontekstində, kod LLM qəbulu modellərin performansından kənar amillərlə daha da mürəkkəbləşə bilər. Məsələn, açıq modellər hətta bəzən məlumat mənbələri və məlumat emalı üsulları haqqında şəffaflıq çatışmazlığı ilə əziyyət çəkir, bu da missiya üçün kritik və tənzimlənən kontekstlərdə modellərə etibarı azalda bilər. Bundan əlavə, bu günün açıq LLM-lərindəki lisenziya şərtləri bir müəssisənin modeli istifadə etmək qabiliyyətinə mane ola və onu mürəkkəbləşdirə bilər. Burada, biz kodlaşdırma tapşırıqlarının geniş diapazonunda müəssisə proqram təminatı inkişafını dəstəkləmək üçün nəzərdə tutulmuş yüksək bacarıqlı kod LLM-ləri seriyası olan Qranit Kod modellərini təqdim edirik. Qranit Kod modelləri dörd müxtəlif ölçüdə (3B, 8B, 20B, və 34B) buraxdığımız iki əsas variantı var: kodla əlaqəli tapşırıqlar üçün əsas fond modelləri; Qranit Kod Əsas: Git komitləri ilə birləşdirilmiş insan təlimatları və açıq mənbəli sintetik yaradılmış kod təlimat dəstləri istifadə edərək tüninq edilmiş təlimat izləyən modellər. Qranit Kod Təlimat: Seriyadakı əsas modellər iki mərhələli təlim strategiyası ilə sıfırdan təlim keçirilmişdir. Mərhələ 1-də, modelimiz 116 proqramlaşdırma dilindən əldə edilmiş 3-dən 4 trilyon tokenə qədər təlim keçirilmişdir, bu da proqramlaşdırma dilləri və sintaksisi haqqında hərtərəfli anlayış təmin edir. Mərhələ 2-də, modelimiz kod və təbii dil sahələrindən yüksək keyfiyyətli məlumatların diqqətlə hazırlanmış qarışığı ilə 500 milyard tokenə qədər daha da təlim keçirilmişdir ki, modelin məntiq yürütmə bacarığını yaxşılaşdırsın. Təlimin hər iki mərhələsində də əsas modelləri təlim keçirmək üçün nəzarətsiz dil modelləşdirmə məqsədindən istifadə edirik. Təlim modelləri, yuxarıda təlim keçirilmiş əsas modellərin CommitPack ( , ) filtrlənmiş variantı, təbii dil təlimat izləmə dəstləri (OASST ( , ), HelpSteer ( , )) və açıq mənbəli riyaziyyat dəstləri (MathInstruct ( , ) və MetaMathQA ( , )) ilə birləşdirilmiş bir sıra təlimlərdən əldə edilmişdir, təlimat izləmə və məntiq yürütmə bacarıqlarını yaxşılaşdırmaq üçün sintetik yaradılmış kod dəstləri daxil olmaqla. Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Kod LLM-lərimizi HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ), və daha çoxunu əhatə edən hərtərəfli bir sıra etalonlar üzərində geniş qiymətləndirmə aparırıq. Bu etalon dəsti Python-da yalnız kod sintezindən başqa bir çox fərqli kodlaşdırma tapşırıqlarını, məsələn, kod düzəltmə, kod izahı, kod redaktə etmə, kod tərcüməsi və s., əsas proqramlaşdırma dillərinin (Python, JavaScript, Java, Go, C++, Rust, və s.) əksəriyyətini əhatə edir. Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Bizim tapıntılarımız göstərir ki, açıq mənbəli modellər arasında, Qranit Kod modelləri ümumilikdə bütün model ölçüləri və etalonlar üzrə çox güclü performans göstərir (tez-tez Qranitin iki dəfə böyük olan digər açıq mənbəli kod modellərindən daha yaxşı performans göstərir). Nümunə olaraq, şəkil (yuxarıda) HumanEvalPack ( , ) üzərində Mistral ( , ) və LLama-3 ( , ) kimi son dövrlərin yüksək performanslı ümumi təyinatlı əsas LLM-ləri də daxil olmaqla, digər açıq mənbəli əsas kod LLM-ləri ilə Qranit-8B-Kod-Əsas-ın müqayisəsini göstərir. Kod yaradılmasında CodeGemma və StarCoder2 yaxşı performans göstərsə də, HumanEvalPack-in kod düzəltmə və izah variantlarında əhəmiyyətli dərəcədə zəif performans göstərirlər. HumanEvalPack üzərində, orta hesabla, Qranit-8B-Kod-Əsas ən rəqabətli CodeGemma-8B modelini təxminən 12 xal (33.2% qarşı 21.3%) qabaqlayır, baxmayaraq ki, əhəmiyyətli dərəcədə az sayda tokenlə təlim keçirilmişdir (4.5T qarşı 7.5T token). Əsas modellərə əlavə olaraq, Qranit Kod modellərimizin təlimatla tüninq edilmiş variantları da HumanEvalPack üzərində güclü performans göstərir, digər açıq mənbəli (kod) təlimat modellərini qabaqlayır, təbii dil təlimatları ilə daha geniş bir sıra kodlaşdırma tapşırıqları üçün faydaları göstərir (şəkil (aşağıda) baxın). 1 Muennighoff et al. 2023 Jiang et al. 2023b AI@Meta 2024 1 Bundan əlavə, mürəkkəb sualları və tapşırıqları həll etmək üçün məntiq yürütmə vacib olduğundan, biz Qranit-8B-Kod-Əsas modelimizi MATH ( , ), GSM8K ( , ) daxil olmaqla altı riyaziyyat etalonu üzərində də sınaqdan keçiririk və hesablama alətlərinə çıxışı olan məsələlərin həlli zamanı Qranit 8B modeli ən müasir 7B və ya 8B LLM-lərlə müqayisədə daha yaxşı performans göstərir. Məsələn, Qranit-8B-Kod-Əsas GSM8K-da Llama-3-8B-Base-dən təxminən 12 xal və MATH-da təxminən 6 xal daha yaxşı performans göstərir (cədvəl baxın). Cobbe et al. 2021 Cobbe et al. 2021 15 Qranit Kod modellərinin əsas üstünlükləri aşağıdakılardır: : Qranit Kod modelləri müxtəlif kodla əlaqəli tapşırıqlarda, o cümlədən kod yaradılması, izahı, düzəldilməsi, redaktə edilməsi, tərcüməsi və s. sahələrdə rəqabət aparan və ya state-of-the-art performans əldə edir, bu da müxtəlif kodlaşdırma tapşırıqlarını həll etmək bacarığını nümayiş etdirir; Hər Tərəfli Kod LLM-si : Bütün modellərimiz IBM-in AI Etik prinsiplərinə uyğun olaraq toplanmış və etibarlı müəssisə istifadəsi üçün IBM-in Korporativ Hüquq şöbəsi tərəfindən idarə olunan lisenziya icazəli məlumatlarla təlim keçirilmişdir. Bütün Qranit Kod modelləri Apache 2.0 lisenziyası altında buraxılır. Etibarlı Müəssisə Səviyyəli LLM 1 Bütün məlumat toplama, filtrləmə və ilkin emal xəttimizi bölmədə təsvir edirik . Bölmə model arxitekturasının təfərrüatlarını, sonra Bölmə -də təlim təfərrüatlarını təsvir edir. Bölmə təlimat tüninqinin təfərrüatlarını təqdim edir və Bölmə Qranit Kod modellərini digər açıq mənbəli LLM-lərlə müqayisə edən təcrübələri və nəticələri təsvir edir. 2 3 4 5 6 2 Məlumat Toplama Bu bölmədə, model təlimi üçün kod məlumatlarını hazırlamaq üçün istifadə olunan tarama və filtrləmə (Böl. ), təkrarlamadan çıxarma (Böl. ), HAP/PII filtrləmə (Böl. ) prosesini təsvir edirik. Həmçinin, modelin dil anlaşılmasını və riyazi məntiq bacarıqlarını yaxşılaşdırmaq üçün istifadə edilən yüksək keyfiyyətli təbii dil məlumatlarına ümumi bir baxış təqdim edirik. 2.1 2.2 2.3 2.1 Məlumat Tarama və Filtrləmə Təlim öncəsi kod məlumatları Github Code Clean , StarCoderdata kimi ictimaiyyətə açıq məlumat dəstləri və GitHub-dan əlavə ictimai kod arxivlərinin və məsələlərinin birgə mənbəyindən əldə edilmişdir. Əlavə A-da ( ) göstərildiyi kimi, 300-dən çox dil arasından 116 proqramlaşdırma dilini saxlamaq üçün xam məlumatları filtrləyirik. Məlumatların proqramlaşdırma dillərinə verilməsi, StarCoder-ə ( , ) bənzər şəkildə yalnız fayl uzantısına əsaslanır. Dil filtrləməsindən sonra, aşağı keyfiyyətli kodu ( , ) filtrləmək üçün dörd əsas filtrləmə qaydasını tətbiq edirik: (1) əlifba hərflərinin 25%-dən az olan faylları silmək, (2) XSLT dili istisna olmaqla, ilk 100 simvol daxilində "<?xml version=”" simvolunu ehtiva edən faylları filtrləmək, (3) HTML faylları üçün, görünən mətnin HTML kodunun ən azı 20%-ni təşkil etdiyi və minimum uzunluğu 100 simvol olan faylları saxlamaq, (4) JSON və YAML faylları üçün, simvol sayı 50 ilə 5000 simvol arasında olan faylları saxlamaq. Həmçinin, avtomatik yaradılmış mətnləri silmək, İngilis dilində olmayan məsələləri filtrləmək, botlardan gələn şərhləri istisna etmək və keyfiyyət göstəricisi kimi söhbətdə iştirak edən istifadəçilərin sayından istifadə etmək kimi keyfiyyət metrikli bir sıra ilə GitHub məsələlərini filtrləyirik. Həmçinin, GitHub API-ləri vasitəsilə müvafiq arxivlə əlaqəli lisenziya məlumatları ilə hər bir kod faylını təyin edirik və model təlimi üçün yalnız icazəli lisenziyalara malik faylları saxlayırıq. 2 3 Appendix A Li et al. 2023a Li et al. 2023a 2.2 Tam və Qeyri-Tam Təkrarlamadan Çıxarma Təlim dəstimizdə (nyakın) eyni kod məzmununa malik sənədləri silmək üçün tam və qeyri-tam təkrarlamadan çıxarma daxil olmaqla, sərt bir təkrarlamadan çıxarma strategiyasını qəbul edirik. Tam təkrarlamadan çıxarma üçün, əvvəlcə sənədin məzmununa əsasən SHA256 hash hesablayırıq və eyni hash-ə malik qeydləri silirik. Tam təkrarlamadan çıxarmadan sonra, kiçik dəyişikliklərə malik ola bilən və beləliklə məlumatı daha da qərəzsizləşdirən kod fayllarını silmək məqsədi ilə qeyri-tam təkrarlamadan çıxarma tətbiq edirik. Bunun üçün iki mərhələli üsuldan istifadə edirik: (1) bütün sənədlərin MinHash-lərini hesablayırıq və sonra MinHash əsasında sənədləri qruplaşdırmaq üçün Yerə Həssas Hashing (LSH) istifadə edirik, (2) eyni qrupdakı hər bir sənəd cütü arasındakı Jaccard oxşarlığını ölçürük və 0.7 oxşarlıq həddinə əsaslanaraq birini istisna olmaqla sənədləri təkrarlanan kimi işarələyirik. Təlim dəstinin zənginliyini və müxtəlifliyini artırmaq üçün GitHub məsələləri daxil olmaqla bütün proqramlaşdırma dillərinə bu yaxın-təkrarlamadan çıxarma prosesini tətbiq edirik. 2.3 HAP, PII, Zərərli Proqram Təminatı Filtrləmə Modellərdən nifrət dolu, təcavüzkar və ya nalayiq (HAP) dil istehsalı ehtimalını azaltmaq üçün, təlim dəstindən HAP məzmununu filtrləmək üçün səylər göstəririk. Əvvəlcə HAP açar sözlərindən ibarət bir lüğət yaradırıq və sonra hər bir kod sənədini məzmununda, o cümlədən şərh-lərdə bu cür açar sözlərin sayı ilə işarələyirik. HAP həddini aşan sənədləri, paylanmış təhlilə əsaslanan, həm də kod fayllarının əl ilə yoxlanılmasına əsaslanan HAP həddini aşan sənədləri filtrləyirik. Bundan əlavə, gizliliyi qorumaq üçün, StarCoder ( , ) təlimindən istifadə edirik və təlim dəstindən Şəxsi Tanınma Məlumatlarını (PII) silmək üçün səylər göstəririk. Xüsusilə, IP ünvanlarını, açarları, e-poçt ünvanlarını, adları, istifadəçi adlarını və məzmununda tapılan şifrələri aşkar etmək üçün StarPII modelindən istifadə edirik. PII silmə addımı PII mətnini müvafiq tokenlər NAME , EMAIL , KEY , PASSWORD ilə əvəz edir və Li et al. (2023a) kimi IP ünvanını sintetik olaraq yaradılmış IP ünvanı ilə dəyişir. Həmçinin, mənbə kodunda zərərli proqram təminatı hallarını aşkar etmək və silmək üçün məlumat dəstlərimizi skan edirik. Li et al. 2023a 4 2.4 Təbii Dil Məlumat Dəstləri Model təlimi üçün kod məlumatları toplamağa əlavə olaraq, modelin dil anlaşılması və riyazi məntiq bacarıqlarını yaxşılaşdırmaq üçün bir neçə ictimaiyyətə açıq yüksək keyfiyyətli təbii dil məlumat dəstlərini hazırlayırıq. Bu kateqoriya altında təmsilçi məlumat dəstləri web sənədlərini (Stackexchange, CommonCrawl), riyazi web mətnlərini (OpenWeb-Math; ( ), StackMathQA; ( )), akademik mətnləri (Arxiv, Wikipedia), və təlimat tüninq dəstlərini (FLAN; ( ), HelpSteer ( , )) əhatə edir. Bu artıq ilkin emalı edilmiş təbii dil məlumat dəstlərini təkrarən emal etmirik. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Model Arxitekturası Biz transformator qapalı (decoder-only) arxitekturasına ( , ) əsaslanan müxtəlif ölçülü kod modelləri seriyasını təlim keçiririk. Bu modellər üçün model hiperparamertləri Cədvəl -də verilmişdir. Bütün model arxitekturaları üçün diqqət və MLP bloklarının girdilərinə tətbiq olunan qabaqcıl normalizasiyadan ( , ) istifadə edirik. Vaswani et al. 2017 1 Xiong et al. 2020 : Qranit-kod model ailəsində ən kiçik model RoPE embedding ( , ) və Çoxbaşlı Diqqət ( , ) ilə təlim keçirilmişdir. Bu model MLP üçün GLU ( , ) ilə swish aktivasiya funksiyasından ( , ) istifadə edir, bu da tez-tez swiglu olaraq adlandırılır. Normalizasiya üçün, LayerNorm-dan ( , ) hesablama baxımından daha səmərəli olduğu üçün RMSNorm-dan ( , ) istifadə edirik. 3B modeli 2048 tokenlik kontekst uzunluğu ilə təlim keçirilmişdir. 3B Su et al. 2023 Vaswani et al. 2017 Shazeer 2020 Ramachandran et al. 2017 Ba et al. 2016 Zhang & Sennrich 2019 : 8B modeli 3B modelinə oxşar arxitekturaya malikdir, lakin Qruplaşdırılmış Sorğu Diqqətindən (GQA) ( , ) istifadə edir. GQA istifadə etmək bu miqyasda model performansı və nəticə səmərəliliyi arasında daha yaxşı bir razılaşma təklif edir. 8B modelini 4096 tokenlik kontekst uzunluğu ilə təlim keçiririk. 8B Ainslie et al. 2023 : 20B kod modeli öyrənilmiş mütləq mövqe embeddingləri ilə təlim keçirilmişdir. Təlim zamanı nəticə hasilatı üçün səmərəli Çox-Sorğu Diqqətindən ( , ) istifadə edirik. MLP bloku üçün GELU aktivasiya funksiyasından ( , ) istifadə edirik. Aktivasiyaları normalizə etmək üçün LayerNorm-dan ( , ) istifadə edirik. Bu model 8192 tokenlik kontekst uzunluğu ilə təlim keçirilmişdir. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : 34B modelini təlim keçirmək üçün, 20B modelinin dərinlik üzrə miqyaslanması üçün tərəfindən aparılan yanaşmanı izləyirik. Xüsusilə, əvvəlcə 52 qatlı 20B kod modelini iki 34B Kim et al.