```html Yazarlar: 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 Özet Kod üzerinde eğitilmiş Büyük Dil Modelleri (LLM'ler), yazılım geliştirme sürecini devrimleştiriyor. Günümüzde kod LLM'leri, insan programcıların üretkenliğini artırmak için yazılım geliştirme ortamlarına entegre edilmekte ve LLM tabanlı aracılar karmaşık görevleri özerk olarak yerine getirme konusunda umut vaat etmektedir. Kod LLM'lerinin tam potansiyelini gerçekleştirmek, kod üretimi, hata ayıklama, kod açıklama ve belgelendirme, depoları sürdürme ve daha fazlası dahil olmak üzere geniş bir yetenek yelpazesini gerektirir. Bu çalışmada, 116 programlama dilinde yazılmış kodla eğitilmiş, kod üretimi görevleri için geliştirilmiş Granite serisi kod modellerini tanıtıyoruz. Granite Kod Modelleri ailesi, 3 ila 34 milyar parametre arasında değişen boyutlarda modellerden oluşmakta olup, karmaşık uygulama modernizasyon görevlerinden cihaz içi bellek kısıtlı kullanım durumlarına kadar çeşitli uygulamalar için uygundur. Kapsamlı bir görev seti üzerinde yapılan değerlendirme, Granite Kod modellerinin mevcut açık kaynak kod LLM'leri arasında tutarlı bir şekilde en son teknoloji performansına ulaştığını göstermektedir. Granite Kod model ailesi, kurumsal yazılım geliştirme iş akışları için optimize edilmiş ve çeşitli kodlama görevlerinde (örn. kod üretimi, hata ayıklama ve açıklama) iyi performans göstererek onu çok yönlü bir "her işi yapan" kod modeli haline getirmiştir. Tüm Granite Kod modellerimizi, hem araştırma hem de ticari kullanım için Apache 2.0 lisansı altında yayınlıyoruz. https://github.com/ibm-granite/granite-code-models 1 Giriş Son yıllarda yazılım, toplumumuzun her yönüne dokunmuştur. Yazılım geliştirme talebi arttıkça, yazılım geliştirme üretkenliğini artırmak her zamankinden daha kritik hale gelmiştir ve LLM'ler, insan programcıları desteklemek için umut verici bir yol sunmaktadır. Yazılım geliştirmede LLM'lerin üretkenlik için önde gelen kurumsal kullanım durumları arasında kod üretimi, kod açıklaması, kod düzeltme, birim testi ve dokümantasyon üretimi, uygulama modernizasyonu, güvenlik açığı tespiti, kod çevirisi ve daha fazlası yer almaktadır. Son yıllarda LLM'lerin kod üretme ve işleme yeteneklerinde hızlı ilerlemeler görülmüş ve bugün etkileyici kodlama yeteneklerine sahip bir dizi model mevcuttur. Modeller, milyarlarca parametreden (örn. Llama-7B (Touvron vd., 2023), Gemma-7B (Gemma-Team vd., 2024), vb.) yüz milyarlarca parametreye kadar değişmektedir: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere) ve amaçlanan kullanımlarının genelliği bakımından farklılık göstermektedir; bazı modeller kod dışı çeşitli kullanımları kapsamayı hedeflerken, diğerleri öncelikle kodla ilgili görevlere odaklanmaktadır (örn. StarCoder (Li vd., 2023a; Lozhkov vd., 2024), CodeGen (Nijkamp vd., 2023), CodeLlama (Rozie`re vd., 2023), ve CodeGemma (CodeGemma Team vd., 2024)). Ancak, özellikle kurumsal yazılım geliştirme bağlamında, kod LLM'leri alanında önemli boşluklar bulunmaktadır. İlk olarak, çok büyük, genelleştirilmiş LLM'ler mükemmel kodlama performansı elde edebilse de, boyutları dağıtımlarını maliyetli hale getirmektedir. Daha küçük kod odaklı modeller ( , ; , ; , ; , ; , ) daha küçük ve daha esnek bir pakette mükemmel kod üretimi performansı elde edebilir, ancak üretimin ötesindeki kodlama görevlerindeki (örn. düzeltme ve açıklama) performans, kod üretimi performansının gerisinde kalabilir. Li vd. 2023a Lozhkov vd. 2024 Nijkamp vd. 2023 Rozie`re vd. 2023 CodeGemma Team vd. 2024 Birçok kurumsal bağlamda, kod LLM'lerinin benimsenmesi, modellerin performansının ötesindeki faktörlerle daha da karmaşık hale gelebilir. Örneğin, açık modeller bile bazen modelin eğitiminde kullanılan veri kaynakları ve veri işleme yöntemleri hakkındaki şeffaflık eksikliği nedeniyle sorun yaşayabilir, bu da kritik ve düzenlenmiş bağlamlarda modellere olan güveni aşındırabilir. Ayrıca, bugünkü açık LLM'lerdeki lisans koşulları, bir şirketin modeli kullanma yeteneğini engelleyebilir ve karmaşıklaştırabilir. Burada, çeşitli kodlama görevlerinde kurumsal yazılım geliştirmeyi desteklemek üzere tasarlanmış, oldukça yetenekli kod LLM'leri serisi olan Granite Kod modellerini sunuyoruz. Granite Kod modelleri, dört farklı boyutta (3B, 8B, 20B ve 34B) yayınladığımız iki ana varyanta sahiptir: kodla ilgili görevler için temel modeller; Granite Kod Tabanı: Git işlem kayıtları ile insan talimatlarının bir kombinasyonu ve açık kaynaklı sentetik olarak oluşturulmuş kod talimat veri kümeleri kullanılarak ince ayarlanmış talimat takip eden modeller. Granite Kod Talimatı: Serideki temel modeller, sıfırdan iki aşamalı bir eğitim stratejisiyle eğitilmiştir. 1. aşamada, modelimiz 116 programlama dilinde yazılmış 3 ila 4 trilyon belirteç üzerinde eğitilmiş, programlama dilleri ve sözdizimi hakkında kapsamlı bir anlayış sağlamıştır. 2. aşamada, modelimiz kod ve doğal dil alanlarından özenle tasarlanmış yüksek kaliteli verilerin bir karışımıyla 500 milyar belirteç üzerinde daha fazla eğitilmiş, modelin akıl yürütme yeteneğini geliştirmiştir. Temel modelleri eğitmek için her iki eğitim aşamasında da denetimsiz dil modelleme hedefi kullanılmıştır. Talimat modelleri, yukarıda eğitilmiş temel modellerin, CommitPack'in filtrelenmiş bir varyantı ( , ), doğal dil talimat takip eden veri kümeleri (OASST ( , ), HelpSteer ( , )) ve talimat takibi ve akıl yürütme yeteneklerini geliştirmek için sentetik olarak oluşturulmuş kod veri kümeleri dahil olmak üzere açık kaynaklı matematik veri kümeleri (MathInstruct ( , ) ve MetaMathQA ( , )) ile daha fazla ince ayarlanmasıyla türetilmiştir. Muennighoff vd. 2023 Ko¨ pf vd. 2023 Wang vd. 2023 Yue vd. 2023 Yu vd. 2023 Kod LLM'lerimizi HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ) ve daha fazlasını içeren kapsamlı bir karşılaştırma seti üzerinde kapsamlı değerlendirmeler yapıyoruz. Bu karşılaştırma seti, Python'da kod üretimi dışında birçok farklı türde kodlama görevini (örn. kod düzeltme, kod açıklaması, kod düzenleme, kod çevirisi vb.) kapsamaktadır ve çoğu büyük programlama dilinde (Python, JavaScript, Java, Go, C++, Rust, vb.) uygulanmaktadır. Muennighoff vd. 2023 Austin vd. 2021 Liu vd. 2023a Liu vd. 2023b Wang vd. 2022 Bulgularımız, açık kaynak modeller arasında, Granite Kod modellerinin tüm model boyutları ve karşılaştırmalarında (genellikle Granite'den iki kat büyük olan diğer açık kaynaklı kod modellerinden daha iyi performans göstererek) genel olarak çok güçlü performans gösterdiğini ortaya koymaktadır. Bir örnek olarak, şekil (üst kısım), Granite-8B-Code-Base'in HumanEvalPack ( , ) üzerinde Mistral ( , ) ve LLama-3 ( , ) gibi yakın zamanda piyasaya sürülen yüksek performanslı genel amaçlı temel LLM'ler dahil olmak üzere diğer açık kaynak temel kod LLM'leri ile karşılaştırmasını göstermektedir. CodeGemma ve StarCoder2 kod üretmede makul derecede iyi performans gösterse de, HumanEvalPack'in kod düzeltme ve açıklama varyantlarında önemli ölçüde daha kötü performans göstermektedir. Ortalama olarak, Granite-8B-Code-Base, önemli ölçüde daha az sayıda belirteç üzerinde eğitilmiş olmasına rağmen (4.5T'ye karşılık 7.5T belirteç), en rekabetçi CodeGemma-8B modelini HumanEvalPack üzerinde yaklaşık 12 puan (33.2% - 21.3%) daha iyi performans göstermektedir. Temel modellerin yanı sıra, Granite Kod modellerimizin talimatla ince ayarlanmış varyantları da HumanEvalPack üzerinde güçlü performans göstermekte, diğer açık kaynaklı (kod) talimat modellerinden daha iyi performans göstermekte ve doğal dil talimatlarıyla daha geniş bir kodlama görevleri yelpazesi için faydalar göstermektedir (şekil (alt kısım)). 1 Muennighoff vd. 2023 Jiang vd. 2023b AI@Meta 2024 1 Ayrıca, akıl yürütme karmaşık soruları ve görevleri çözmek için kritik öneme sahip olduğundan, Granite-8B-Code-Base modelimizi MATH ( , ), GSM8K ( , ) ve hesaplama araçlarına erişimle problem çözme dahil altı matematiksel karşılaştırma üzerinde test ediyoruz, burada Granite 8B modeli en son teknoloji 7B veya 8B LLM'lerin çoğundan daha iyi performans göstermektedir. Örneğin, Granite-8B-Code-Base, GSM8K üzerinde Llama-3-8B-Base'den yaklaşık 12 puan ve MATH üzerinde yaklaşık 6 puan daha iyi performans göstermektedir (bkz. tablo ). Cobbe vd. 2021 Cobbe vd. 2021 15 Granite Kod modellerinin temel avantajları şunlardır: : Granite Kod modelleri, kod üretimi, açıklama, düzeltme, düzenleme, çeviri vb. dahil olmak üzere farklı türde kodla ilgili görevlerde rekabetçi veya en son teknoloji performansı elde etmekte, bu da çeşitli kodlama görevlerini çözme yeteneklerini göstermektedir; Her İşi Yapan Kod LLM'si : Tüm modellerimiz, IBM'in Yapay Zeka Etiği ilkelerine uygun olarak toplanan ve güvenilir kurumsal kullanım için IBM Kurumsal Hukuk ekibi tarafından yönlendirilen lisanslanabilir veriler üzerinde eğitilmiştir. Tüm Granite Kod modelleri Apache 2.0 lisansı altında yayınlanmaktadır. Güvenilir Kurumsal Sınıf LLM 1 Veri toplama, filtreleme ve ön işleme boru hattımızın tamamını bölümde açıklıyoruz . Bölüm model mimarisi detaylarını, ardından Bölüm 'te eğitim detaylarını açıklamaktadır. Bölüm talimat ince ayarı hakkında detayları sağlamakta ve Bölüm , Granite Kod modellerini diğer açık kaynak LLM'lerle karşılaştıran deneyleri ve sonuçları açıklamaktadır. 2 3 4 5 6 2 Veri Toplama Bu bölümde, model eğitimi için kod verilerini hazırlamak üzere kullanılan tarama ve filtreleme (Böl. ), tekilleştirme (Böl. ), HAP/PII filtreleme (Böl. ) süreçlerini açıklıyoruz. Ayrıca, modelin dil anlama ve matematiksel akıl yürütme becerilerini geliştirmek için kullanılan yüksek kaliteli doğal dil verilerine genel bir bakış sunuyoruz. 2.1 2.2 2.3 2.1 Veri Tarama ve Filtreleme Ön eğitim kod verileri, Github Code Clean , StarCoderdata gibi halka açık veri kümeleri ve GitHub'dan ek halka açık kod depoları ve sorunlarından oluşan bir kombinasyondan elde edilmiştir. 300'den fazla dilden 116 programlama dilinden oluşan bir listeyi tutmak için ham verileri filtreliyoruz, bu liste Ek 'da listelenmiştir. Verilerin programlama dillerine atanması, StarCoder ( , ) gibi dosya uzantısına göre gerçekleştirilir. Dil filtrelemesinden sonra, daha düşük kaliteli kodu filtrelemek için dört ana filtreleme kuralını uyguluyoruz ( , ): (1) %25'ten az alfabetik karakter içeren dosyaları kaldırma, (2) XSLT dili hariç, ilk 100 karakter içinde "<?xml version=" dizesini içeren dosyaları filtreleme, (3) HTML dosyaları için, görünür metnin HTML kodunun en az %20'sini oluşturduğu ve minimum uzunluğu 100 karakter olan dosyaları tutma, (4) JSON ve YAML dosyaları için, karakter sayısı 50 ila 5000 karakter arasında olan dosyaları tutma. Ayrıca, otomatik oluşturulan metni kaldırma, İngilizce olmayan sorunları filtreleme, bot yorumlarını hariç tutma ve kalite göstergesi olarak sohbete katılan kullanıcı sayısını kullanma gibi bir dizi kalite metriği kullanarak GitHub sorunlarını da etiketliyoruz. Ayrıca, model eğitimi için izin verilen lisanslara sahip dosyaları tutmak üzere, ilgili depoyla ilişkili lisans bilgilerini GitHub API'leri aracılığıyla her kod dosyasına ekliyoruz. 2 3 A Li vd. 2023a Li vd. 2023a 2.2 Tam ve Bulanık Tekilleştirme Eğitim setimizdeki (neredeyse) aynı kod içeriğine sahip belgeleri kaldırmak için hem tam hem de bulanık tekilleştirmeyi içeren agresif bir tekilleştirme stratejisi benimsiyoruz. Tam tekilleştirme için, önce belge içeriği üzerinde SHA256 karması hesaplarız ve aynı karmalara sahip kayıtları kaldırırız. Tam tekilleştirme sonrasında, hafif varyasyonlara sahip olabilecek kod dosyalarını kaldırmak ve böylece verinin daha fazla önyargısını gidermek amacıyla bulanık tekilleştirmeyi uyguluyoruz. Bunun için iki adımlı bir yöntem uyguluyoruz: (1) tüm belgelerin MinHash'lerini hesaplar ve ardından MinHash parmak izlerine göre belgeleri gruplamak için Yerel Hassas Hash'leme (LSH) kullanırız, (2) aynı sepetteki her belge çifti arasındaki Jaccard benzerliğini ölçer ve benzerlik eşiği 0.7'ye dayalı olarak yinelenen belgeleri (bir hariç) etiketleriz. Eğitim veri setinin zenginliğini ve çeşitliliğini artırmak için bu yakın tekilleştirme işlemini GitHub sorunları dahil tüm programlama dillerine uygularız. 2.3 HAP, PII, Kötü Amaçlı Yazılım Filtrelemesi Modellerden nefret dolu, saldırgan veya müstehcen (HAP) dil üretme olasılığını azaltmak için, eğitim setinden HAP içeriğini filtrelemek için özen gösteriyoruz. İlk olarak HAP anahtar kelimelerinden oluşan bir sözlük oluştururuz ve ardından her kod belgesini, yorumlar dahil olmak üzere içerikteki bu anahtar kelimelerin oluşum sayısıyla etiketleriz. Dağıtımsal analiz ve kod dosyalarının manuel incelemesine dayanan bir HAP eşiğini aşan belgeleri filtreleriz. Ayrıca, gizliliği korumak için, eğitim setindeki Kişisel Tanımlayıcı Bilgileri (PII) kaldırmak için StarCoder ( , ) modelini takip ediyoruz. Özellikle, içerikte bulunan IP adreslerini, anahtarları, e-posta adreslerini, adları, kullanıcı adlarını ve şifreleri tespit etmek için StarPII modelini kullanıyoruz. PII kaldırma adımı, PII metnini karşılık gelen belirteçler olan NAME, EMAIL, KEY, PASSWORD ile değiştirir ve Li vd. (2023a)'de olduğu gibi IP adresini sentetik olarak oluşturulmuş bir IP adresiyle değiştirir. Ayrıca, kaynak kodundaki kötü amaçlı yazılım örneklerini tespit etmek ve kaldırmak için veri kümelerimizi tarıyoruz. Li vd. 2023a 4 2.4 Doğal Dil Veri Kümeleri Model eğitimi için kod verileri toplamanın yanı sıra, modelin dil anlama ve matematiksel akıl yürütme becerilerini geliştirmek için çeşitli halka açık yüksek kaliteli doğal dil veri kümelerini de derliyoruz. Bu kategori altındaki temsilci veri kümeleri arasında web belgeleri (Stackexchange, CommonCrawl), matematiksel web metinleri (OpenWeb-Math; ( ), StackMathQA; ( )), akademik metinler (Arxiv, Wikipedia) ve talimat ince ayar veri kümeleri (FLAN; ( ), HelpSteer ( , )) bulunmaktadır. Bu zaten önceden işlenmiş doğal dil veri kümelerini tekilleştirmiyoruz. Paster vd. 2023 Zhang 2024 Longpre vd. 2023 Wang vd. 2023 3 Model Mimarisi Transformer dekoder mimarisine ( , ) dayanan çeşitli boyutlarda kod modelleri eğitiyoruz. Bu modeller için model hiperparametreleri Tablo 'de verilmiştir. Tüm model mimarileri için, dikkat ve MLP bloklarının girişine uygulanan normalleştirme olan ön normalleştirmeyi ( , ) kullanıyoruz. Vaswani vd. 2017 1 Xiong vd. 2020 : Granite-code model ailesindeki en küçük model, RoPE gömme ( , ) ve Çok Başlı Dikkat ( , ) ile eğitilmiştir. Bu model, MLP için yaygın olarak swiglu olarak da adlandırılan GLU ( , ) ile birlikte swish aktivasyon fonksiyonunu ( , ) kullanır. Normalleştirme için, LayerNorm ( , ) daha verimli olduğu için RMSNorm ( , ) kullanıyoruz. 3B modeli 2048 belirteç bağlam uzunluğu ile eğitilmiştir. 3B Su vd. 2023 Vaswani vd. 2017 Shazeer 2020 Ramachandran vd. 2017 Ba vd. 2016 Zhang & Sennrich 2019 : 8B modeli, Grup Yapılmış Dikkat (GQA) ( , ) kullanımı dışındaki benzer bir mimariye sahiptir. GQA kullanmak, bu ölçekte model performansı ve çıkarım verimliliği arasında daha iyi bir denge sunar. 8B modelini 4096 belirteç bağlam uzunluğu ile eğitiyoruz. 8B Ainslie vd. 2023 : 20B kod modeli, öğrenilmiş mutlak konum gömmeleri ile eğitilmiştir. Verimli aşağı akış çıkarımı için eğitim sırasında Çoklu Sorgu Dikkatini ( , ) kullanıyoruz. MLP bloğu için GELU aktivasyon fonksiyonunu ( , ) kullanıyoruz. Aktivasyonları normalleştirmek için LayerNorm ( , ) kullanıyoruz. Bu model 8192 belirteç bağlam uzunluğu ile eğitilmiştir. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba vd. 2016 : 34B modelini eğitmek için, 20B modelinin derinliğini ölçeklendirme yaklaşımını (2024) izliyoruz. Özellikle, önce 52 katmanlı 20B kod modelini ve ardından orijinal modelden son 8 katmanı ve kopyasından ilk 8 katmanı kaldırarak iki model oluşturuyoruz. 34B Kim vd. Son olarak, her iki modeli birleştirerek 88 katmanlı Granite-34B-Code modelini oluşturuyoruz (bir örnek için Şekil 'ye bakınız). Derinlik ölçeklendirmesinden sonra, 20B modeliyle karşılaştırıldığında performans düşüşünün, tarafından gözlemlenenin aksine oldukça küçük olduğunu gözlemliyoruz. Bu performans, ölçeklendirilmiş 34B modelinin ön eğitimine devam ettikten sonra oldukça hızlı bir şekilde geri kazanılmaktadır. 20B modeline benzer şekilde, ön eğitim sırasında 8192 belirteç bağlamı kullanıyoruz. 2 Kim vd. 4 Ön Eğitim Bu bölümde, modellerin ön eğitimi için kullanılan iki aşamalı eğitim (Böl. ), eğitim hedefleri (Böl. ), optimizasyon (Böl. ) ve altyapı (Böl. ) hakkında ayrıntılar sunuyoruz. 4.1 4.2 4.3 4.4 4.1 İki Aşamalı Eğitim Granite Kod modelleri, kod ve kodla ilgili doğal dil veri kümelerinden oluşan 3.5T ila 4.5T belirteç üzerinde eğitilmiştir. Veriler, StarCoder ( , ) ile aynı belirteçleyiciyi kullanan bayt çifti kodlama (BPE, ( , )) aracılığıyla belirlenmiştir. ( , ; , ) takip ederek, aşağıdaki gibi iki eğitim aşamasıyla yüksek kaliteli veriler kullanıyoruz. Li vd. 2023a Sennrich vd. 2015 Shen vd. 2024 Hu vd. 2024 • : 1. aşamada, hem 3B hem de 8B modelleri 116 dil içeren 4 trilyon belirteçlik kod verisi üzerinde eğitilmiştir. 20B parametreli model 3 trilyon belirteç kod üzerinde eğitilmiştir. 34B modeli, 20B modelinin 1.6T kontrol noktasında yapılan derinlik ölçeklendirmesinin ardından 1.4T belirteç üzerinde eğitilmiştir. Aşama 1 (yalnızca kod eğitimi) • : 2. aşamada, modelin akıl yürütme ve problem çözme becerilerini daha da geliştirmek için teknik, matematik ve web belgeleri de dahil olmak üzere çeşitli alanlardan ek yüksek kaliteli halka açık veriler ekliyoruz; bunlar kod üretimi için temeldir. Tüm modellerimizi 2. aşama eğitimde 500B belirteç (80% kod ve 20% dil verisi) üzerinde eğitiyoruz. Aşama 2 (kod + dil eğitimi) 4.2 Eğitim Hedefi Tüm modellerimizin eğitimi için, nedensel dil modelleme hedefi ve Boşluk Doldurma (FIM) ( , ) hedefi kullanıyoruz. FIM hedefi, verilen bağlam ve sonraki metinle eklenen belirteçleri tahmin etmekle görevlidir. Modellerimizi, StarCoder ( , ) ile aynı ilgili biçimlendirme kontrol belirteçlerini kullanarak hem PSM (Önek-Sonek-Orta) hem de SPM (Sonek-Önek-Orta) modlarıyla çalışacak şekilde eğitiyoruz. Bavarian vd. 2022 Li vd. 2023a Genel kayıp, 2 hedefin ağırlıklı bir kombinasyonu olarak hesaplanır: Eğitim sırasında = 0.5 değerini deneysel olarak belirledik ve bunun pratikte hem kod tamamlama hem de kod doldurma görevlerinde en son teknoloji performansına yol açtığını gördük. FIM hedefinin yalnızca ön eğitim sırasında kullanıldığına, ancak talimat ince ayarı sırasında kaldırıldığına yani = 1 olarak ayarlandığına dikkat edilmelidir. α α 4.3 Optimizasyon Tüm Granite kod modellerimizin eğitimi için β1 = 0.9, β2 = 0.95 ve ağırlık bozunumu 0.1 ile AdamW optimize ediciyi ([Kingma & Ba](#_bookmark80), [2017](#_bookmark80)) kullanıyoruz. Aşama-1 ön eğitimi için öğrenme oranı, 2k iterasyonluk bir doğrusal ısınma adımı ile 3 10−5'e düşen 3 10−4'ten başlayan bir kosinüs programını takip eder. Aşama-2 ön eğitimi için, 3 10−4'ten (20B ve 34B modelleri için 1.5 10−4) başlıyoruz ve öğrenme oranını başlangıç değerinin %10'una düşürmek için üstel bir bozunma programı benimsiyoruz. Her iki aşamada da ön eğitim sırasında model boyutuna bağlı olarak 4M-5M belirteçlik bir yığın boyutu kullanıyoruz. Eğitimi hızlandırmak için, NVIDIA'nın Apex kütüphanesinde bulunan FlashAttention 2 ( , ; , ), kalıcı katman normalleştirme çekirdeği, Birleşik RMSNorm çekirdeği (modele bağlı olarak) ve Birleşik Adam çekirdeğini kullanıyoruz. Tüm modellerimizin dağıtık eğitimi için NVIDIA'nın Megatron-LM'sinin ( , ; Dao vd. 2022 Dao 2023 Shoeybi vd. 2019 Naray