Penulis: 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 Abstrak Model Bahasa Besar (LLM) yang dilatih pada kode merevolusi proses pengembangan perangkat lunak. Semakin banyak, LLM kode diintegrasikan ke dalam lingkungan pengembangan perangkat lunak untuk meningkatkan produktivitas programmer manusia, dan agen berbasis LLM mulai menunjukkan potensi untuk menangani tugas-tugas kompleks secara mandiri. Mewujudkan potensi penuh LLM kode memerlukan berbagai kemampuan, termasuk pembuatan kode, perbaikan bug, penjelasan dan dokumentasi kode, pemeliharaan repositori, dan banyak lagi. Dalam karya ini, kami memperkenalkan seri model kode Granite yang hanya menggunakan decoder untuk tugas-tugas generatif kode, dilatih dengan kode yang ditulis dalam 116 bahasa pemrograman. Keluarga model Granite Code terdiri dari model dengan ukuran mulai dari 3 hingga 34 miliar parameter, cocok untuk aplikasi mulai dari tugas modernisasi aplikasi yang kompleks hingga kasus penggunaan yang dibatasi memori pada perangkat. Evaluasi pada serangkaian tugas yang komprehensif menunjukkan bahwa model Granite Code secara konsisten mencapai kinerja mutakhir di antara LLM kode sumber terbuka yang tersedia. Keluarga model Granite Code dioptimalkan untuk alur kerja pengembangan perangkat lunak perusahaan dan berkinerja baik di berbagai tugas pengkodean (misalnya, pembuatan, perbaikan, dan penjelasan kode), menjadikannya model kode "serba bisa" yang serbaguna. Kami merilis semua model Granite Code kami di bawah lisensi Apache 2.0 untuk penggunaan penelitian dan komersial. https://github.com/ibm-granite/granite-code-models 1 Pendahuluan Selama beberapa dekade terakhir, perangkat lunak telah terjalin ke dalam struktur setiap aspek masyarakat kita. Seiring lonjakan permintaan untuk pengembangan perangkat lunak, menjadi semakin penting untuk meningkatkan produktivitas pengembangan perangkat lunak, dan LLM menyediakan jalur yang menjanjikan untuk menambah programmer manusia. Kasus penggunaan perusahaan terkemuka untuk LLM dalam produktivitas pengembangan perangkat lunak termasuk pembuatan kode, penjelasan kode, perbaikan kode, pembuatan unit test dan dokumentasi, modernisasi aplikasi, deteksi kerentanan, terjemahan kode, dan banyak lagi. Beberapa tahun terakhir telah menyaksikan kemajuan pesat dalam kemampuan LLM untuk menghasilkan dan memanipulasi kode, dan berbagai model dengan kemampuan pengkodean yang mengesankan tersedia saat ini. Model berkisar dalam ukuran dari miliaran parameter satu digit (misalnya, Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024), dll.) hingga ratusan miliar: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere), dan bervariasi dalam kegunaan umum yang dimaksudkan, dengan beberapa model bertujuan untuk mencakup berbagai kegunaan di luar kode, sementara yang lain berfokus terutama pada tugas-tugas terkait pengkodean (misalnya, StarCoder (Li et al., 2023a; Lozhkov et al., 2024), CodeGen (Nijkamp et al., 2023), CodeLlama (Rozie`re et al., 2023), dan CodeGemma (CodeGemma Team et al., 2024)). Namun, masih ada kesenjangan penting dalam bidang LLM untuk kode saat ini, terutama dalam konteks pengembangan perangkat lunak perusahaan. Pertama, meskipun LLM generalis yang sangat besar dapat mencapai kinerja pengkodean yang sangat baik, ukurannya membuatnya mahal untuk diterapkan. Model kode yang lebih kecil ( , ; , ; , ; , ; , ) dapat mencapai kinerja pembuatan kode yang sangat baik dalam paket yang lebih kecil dan lebih fleksibel, tetapi kinerja dalam tugas pengkodean di luar pembuatan (misalnya, perbaikan dan penjelasan) dapat tertinggal di belakang kinerja pembuatan kode. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Dalam banyak konteks perusahaan, adopsi LLM kode dapat lebih diperumit oleh faktor-faktor di luar kinerja model. Misalnya, bahkan model terbuka terkadang dirusak oleh kurangnya transparansi tentang sumber data dan metode pemrosesan data yang masuk ke dalam model, yang dapat mengikis kepercayaan pada model dalam konteks kritis misi dan teregulasi. Selain itu, ketentuan lisensi dalam LLM terbuka saat ini dapat membebani dan mempersulit kemampuan perusahaan untuk menggunakan model. Di sini, kami menyajikan model Granite Code, serangkaian LLM kode yang sangat mampu, yang dirancang untuk mendukung pengembangan perangkat lunak perusahaan di berbagai tugas pengkodean. Model Granite Code memiliki dua varian utama yang kami rilis dalam empat ukuran berbeda (3B, 8B, 20B, dan 34B): model dasar fondasi untuk tugas-tugas terkait kode; Granite Code Base: model pengikut instruksi yang disesuaikan menggunakan kombinasi komit Git yang dipasangkan dengan instruksi manusia dan dataset instruksi kode sintetis sumber terbuka. Granite Code Instruct: Model dasar dalam seri ini telah dilatih dari awal dengan strategi pelatihan dua fase. Dalam fase 1, model kami dilatih pada 3 hingga 4 triliun token yang bersumber dari 116 bahasa pemrograman, memastikan pemahaman yang komprehensif tentang bahasa pemrograman dan sintaks. Dalam fase 2, model kami dilatih lebih lanjut pada 500 miliar token dengan campuran data berkualitas tinggi yang dirancang dengan cermat dari domain kode dan bahasa alami untuk meningkatkan kemampuan penalaran model. Kami menggunakan tujuan pemodelan bahasa unsupervised untuk melatih model dasar di kedua fase pelatihan. Model instruksi diturunkan dengan lebih lanjut menyempurnakan model dasar yang terlatih di atas pada kombinasi varian CommitPack yang difilter ( , ), dataset instruksi bahasa alami (OASST ( , ), HelpSteer ( , )) dan dataset instruksi kode sintetis sumber terbuka (MathInstruct ( , ) dan MetaMathQA ( , )), termasuk dataset instruksi kode yang dihasilkan secara sintetis untuk meningkatkan kemampuan mengikuti instruksi dan penalaran. Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Kami melakukan evaluasi ekstensif LLM kode kami pada serangkaian benchmark yang komprehensif, termasuk HumanEvalPack ( , ), MBPP(+) ( , ; , ), RepoBench ( , ), ReCode ( , ), dan lainnya. Kumpulan benchmark ini mencakup banyak jenis tugas pengkodean yang berbeda di luar sintesis kode dalam Python, misalnya, perbaikan kode, penjelasan kode, pengeditan kode, terjemahan kode, dll., di sebagian besar bahasa pemrograman utama (Python, JavaScript, Java, Go, C++, Rust, dll.). Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Temuan kami mengungkapkan bahwa di antara model sumber terbuka, model Granite Code secara keseluruhan menunjukkan kinerja yang sangat kuat di semua ukuran model dan benchmark (seringkali mengungguli model kode sumber terbuka lainnya yang dua kali lebih besar dibandingkan dengan Granite). Sebagai ilustrasi, Gambar (atas) menunjukkan perbandingan Granite-8B-Code-Base dengan LLM dasar kode sumber terbuka lainnya, termasuk LLM dasar tujuan umum berkinerja tinggi terbaru seperti Mistral ( , ) dan LLama-3 ( , ) pada HumanEvalPack ( , ). Sementara CodeGemma dan StarCoder2 berkinerja cukup baik dalam menghasilkan kode, mereka berkinerja jauh lebih buruk pada varian perbaikan dan penjelasan kode dari HumanEvalPack. Rata-rata, Granite-8B-Code-Base mengungguli model CodeGemma-8B yang paling kompetitif hampir 12 poin pada HumanEvalPack (33,2% vs 21,3%), meskipun dilatih pada jumlah token yang jauh lebih sedikit (4,5T vs 7,5T token). Selain model dasar, varian yang disempurnakan instruksi dari model Granite Code kami juga menunjukkan kinerja yang kuat pada HumanEvalPack, mengungguli model instruksi (kode) sumber terbuka lainnya, menunjukkan manfaat untuk kumpulan tugas pengkodean yang lebih luas dengan instruksi bahasa alami (lihat Gambar (bawah)). 1 Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 1 Selanjutnya, karena penalaran sangat penting untuk memecahkan pertanyaan dan tugas yang rumit, kami juga menguji model Granite-8B-Code-Base kami pada enam benchmark matematika, termasuk MATH ( , ), GSM8K ( , ) dan pemecahan masalah dengan akses ke alat komputasi, di mana model Granite 8B kami mencapai kinerja yang lebih baik dibandingkan dengan sebagian besar LLM 7B atau 8B mutakhir. Misalnya, Granite-8B-Code-Base mengungguli Llama-3-8B-Base dengan ∼12 poin pada GSM8K dan ∼6 poin pada MATH (lihat Tabel ). Cobbe et al. 2021 Cobbe et al. 2021 15 Keunggulan utama model Granite Code meliputi: : Model Granite Code mencapai kinerja kompetitif atau mutakhir pada berbagai jenis tugas terkait kode, termasuk pembuatan kode, penjelasan, perbaikan, pengeditan, terjemahan, dll., menunjukkan kemampuan mereka untuk memecahkan tugas pengkodean yang beragam; LLM Kode Serba Bisa : Semua model kami dilatih pada data yang diizinkan lisensinya yang dikumpulkan mengikuti prinsip Etika AI IBM dan dipandu oleh Tim Hukum Korporat IBM untuk penggunaan perusahaan yang tepercaya. Semua model Granite Code dirilis di bawah lisensi Apache 2.0. LLM Tingkat Perusahaan yang Tepercaya 1 Kami menjelaskan seluruh alur kerja pengumpulan, penyaringan, dan pra-pemrosesan data kami di bagian . Bagian menjelaskan detail arsitektur model, diikuti oleh detail pelatihan di Bagian . Bagian memberikan detail tentang penyesuaian instruksi, dan Bagian menjelaskan eksperimen dan hasil yang membandingkan model Granite Code dengan LLM sumber terbuka lainnya. 2 3 4 5 6 2 Pengumpulan Data Dalam bagian ini, kami menjelaskan proses perayapan dan penyaringan (Bagian ), deduplikasi (Bagian ), penyaringan HAP/PII (Bagian ) yang digunakan untuk menyiapkan data kode untuk pelatihan model. Kami juga memberikan gambaran umum data bahasa alami berkualitas tinggi yang digunakan untuk meningkatkan pemahaman bahasa dan keterampilan penalaran matematika model. 2.1 2.2 2.3 2.1 Perayapan dan Penyaringan Data Data kode pra-pelatihan bersumber dari kombinasi dataset yang tersedia untuk umum seperti Github Code Clean , StarCoderdata , dan repositori kode publik serta isu tambahan dari GitHub. Kami menyaring data mentah untuk mempertahankan daftar 116 bahasa pemrograman dari lebih dari 300 bahasa, seperti yang tercantum dalam Lampiran . Penugasan data ke bahasa pemrograman dilakukan semata-mata berdasarkan ekstensi file, mirip dengan StarCoder ( , ). Setelah penyaringan bahasa, kami menerapkan empat aturan penyaringan utama untuk menyaring kode berkualitas rendah ( , ): (1) menghapus file dengan kurang dari 25% karakter alfabet, (2) kecuali untuk bahasa XSLT, menyaring file di mana string “<?xml version=” muncul dalam 100 karakter pertama, (3) untuk file HTML, hanya menyimpan file di mana teks yang terlihat merupakan setidaknya 20% dari kode HTML dan memiliki panjang minimum 100 karakter, (4) untuk file JSON dan YAML, hanya menyimpan file yang memiliki jumlah karakter antara 50 hingga 5000 karakter. Kami juga menyaring isu GitHub menggunakan serangkaian metrik kualitas yang mencakup penghapusan teks yang dibuat secara otomatis, penyaringan isu non-Bahasa Inggris, pengecualian komentar dari bot, dan penggunaan jumlah pengguna yang terlibat dalam percakapan sebagai indikator kualitas. Kami juga memberi anotasi pada setiap file kode dengan informasi lisensi yang terkait dengan repositori masing-masing, ditemukan melalui API GitHub dan hanya menyimpan file dengan lisensi yang permisif untuk pelatihan model. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Deduplikasi Tepat dan Kabur Kami mengadopsi strategi deduplikasi yang agresif termasuk deduplikasi tepat dan kabur untuk menghapus dokumen yang memiliki konten kode (hampir) identik dalam set pelatihan kami. Untuk deduplikasi tepat, kami pertama-tama menghitung hash SHA256 pada konten dokumen dan menghapus rekaman yang memiliki hash identik. Setelah deduplikasi tepat, kami menerapkan deduplikasi kabur dengan tujuan menghapus file kode yang mungkin memiliki sedikit variasi dan dengan demikian lebih mengimbangi data. Kami menerapkan metode dua langkah untuk ini: (1) menghitung MinHash dari semua dokumen dan kemudian memanfaatkan Hashing Sensitif Lokal (LSH) untuk mengelompokkan dokumen berdasarkan sidik jari MinHash mereka, (2) mengukur kesamaan Jaccard antara setiap pasangan dokumen dalam ember yang sama dan memberi anotasi pada dokumen kecuali satu sebagai duplikat berdasarkan ambang batas kesamaan 0,7. Kami menerapkan proses near-deduplikasi ini ke semua bahasa pemrograman termasuk isu GitHub untuk meningkatkan kekayaan dan keragaman dataset pelatihan. 2.3 Penyaringan HAP, PII, Malware Untuk mengurangi kemungkinan menghasilkan bahasa yang penuh kebencian, kasar, atau vulgar (HAP) dari model, kami melakukan upaya yang cermat untuk menyaring konten HAP dari set pelatihan. Kami pertama-tama membuat kamus kata kunci HAP dan kemudian memberi anotasi pada setiap dokumen kode dengan jumlah kemunculan kata kunci tersebut dalam konten termasuk komentar. Kami menyaring dokumen yang melebihi ambang batas HAP, yang dihitung berdasarkan analisis distribusional serta inspeksi manual file kode. Selain itu, untuk melindungi privasi, kami mengikuti StarCoder ( , ) dan melakukan upaya yang cermat untuk menyunting Informasi Identitas Pribadi (PII) dari set pelatihan. Khususnya, kami memanfaatkan model StarPII untuk mendeteksi alamat IP, kunci, alamat email, nama, nama pengguna, dan kata sandi yang ditemukan dalam konten. Langkah penyuntingan PII mengganti teks PII dengan token yang sesuai NAMA , EMAIL , KUNCI , KATA SANDI dan mengubah alamat IP dengan alamat IP yang dihasilkan secara sintetis, seperti dalam Li et al. (2023a). Kami juga memindai dataset kami menggunakan untuk mengidentifikasi dan menghapus contoh malware dalam kode sumber. Li et al. 2023a 4 2.4 Dataset Bahasa Alami Selain mengumpulkan data kode untuk pelatihan model, kami mengkurasi beberapa dataset bahasa alami berkualitas tinggi yang tersedia untuk umum untuk meningkatkan kemahiran model dalam pemahaman bahasa dan penalaran matematika. Dataset representatif dalam kategori ini termasuk dokumen web (Stackexchange, CommonCrawl), teks web matematika (OpenWeb-Math; ( ), StackMathQA; ( )), teks akademik (Arxiv, Wikipedia), dan dataset penyetelan instruksi (FLAN; ( ), HelpSteer ( , )). Kami tidak menduplikasi dataset bahasa alami yang sudah diproses ini. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Arsitektur Model Kami melatih serangkaian model kode dengan ukuran bervariasi berdasarkan arsitektur decoder transformer ( , ). Hiperparameter model untuk model-model ini diberikan dalam Tabel . Untuk semua arsitektur model, kami menggunakan pra-normalisasi ( , ): normalisasi diterapkan ke input blok perhatian dan MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : Model terkecil dalam keluarga model Granite-code dilatih dengan embedding RoPE ( , ) dan Multi-Head Attention ( , ). Model ini menggunakan fungsi aktivasi swish ( , ) dengan GLU ( , ) untuk MLP, juga umumnya disebut sebagai swiglu. Untuk normalisasi, kami menggunakan RMSNorm ( , ) karena lebih efisien secara komputasi daripada LayerNorm ( , ). Model 3B dilatih dengan panjang konteks 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 memiliki arsitektur yang serupa dengan model 3B kecuali penggunaan Grouped-Query Attention (GQA) ( , ). Menggunakan GQA menawarkan trade-off yang lebih baik antara kinerja model dan efisiensi inferensi pada skala ini. Kami melatih model 8B dengan panjang konteks 4096 token. 8B Ainslie et al. 2023 : Model kode 20B dilatih dengan embedding posisi absolut yang dipelajari. Kami menggunakan Multi-Query Attention ( , ) selama pelatihan untuk inferensi hilir yang efisien. Untuk blok MLP, kami menggunakan fungsi aktivasi GELU ( , ). Untuk menormalisasi aktivasi, kami menggunakan LayerNorm ( , ). Model ini dilatih dengan panjang konteks 8192 token. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : Untuk melatih model 34B, kami mengikuti pendekatan oleh untuk peningkatan kedalaman model 20B. Khususnya, kami pertama-tama menduplikasi model kode 20B dengan 52 lapisan dan kemudian menghapus 8 lapisan terakhir dari model asli dan 8 lapisan awal dari duplikatnya untuk membentuk dua model. 34B Kim et al. Akhirnya, kami menggabungkan kedua model untuk membentuk model Granite-34B-Code dengan 88 lapisan (lihat Gambar untuk ilustrasi). Setelah peningkatan kedalaman, kami mengamati bahwa penurunan kinerja dibandingkan dengan model 20B sangat kecil bertentangan dengan apa yang diamati oleh . Kinerja ini pulih cukup cepat setelah kami melanjutkan pra-pelatihan model 34B yang ditingkatkan. Mirip dengan 20B, kami menggunakan konteks 8192 token selama pra-pelatihan. 2 Kim et al. 4 Pra-pelatihan Dalam bagian ini, kami memberikan detail tentang pelatihan dua fase (Bagian ), tujuan pelatihan (Bagian ), optimasi (Bagian ) dan infrastruktur (Bagian ) yang digunakan dalam pra-pelatihan model. 4.1 4.2 4.3 4.4 4.1 Pelatihan Dua Fase Model Granite Code dilatih pada 3,5T hingga 4,5T token data kode dan dataset bahasa alami yang berkaitan dengan kode. Data ditokenisasi melalui byte pair encoding (BPE, ( , )), menggunakan tokenizer yang sama dengan StarCoder ( , ). Mengikuti ( , ; , ), kami memanfaatkan data berkualitas tinggi dengan dua fase pelatihan sebagai berikut. Sennrich et al. 2015 Li et al. 2023a Shen et al. 2024 Hu et al. 2024 • : Selama fase 1, kedua model 3B dan 8B dilatih untuk 4 triliun token data kode yang terdiri dari 116 bahasa. Model 20B parameter dilatih pada 3 triliun token kode. Model 34B dilatih pada 1,4T token setelah peningkatan kedalaman yang dilakukan pada checkpoint 1,6T dari model 20B. Fase 1 (pelatihan kode saja) • : Dalam fase 2, kami menyertakan data tambahan berkualitas tinggi yang tersedia untuk umum dari berbagai domain, termasuk teks teknis, matematika, dan web, untuk lebih meningkatkan kinerja model dalam penalaran dan pemecahan masalah, yang penting untuk pembuatan kode. Kami melatih semua model kami untuk 500B token (80% kode dan 20% data bahasa) dalam pelatihan fase 2. Fase 2 (pelatihan kode + bahasa) 4.2 Tujuan Pelatihan Untuk pelatihan semua model kami, kami menggunakan tujuan pemodelan bahasa kausal dan tujuan Fill-In-the-Middle (FIM) ( , ). Tujuan FIM bertugas untuk memprediksi token yang disisipkan dengan konteks yang diberikan dan teks berikutnya. Kami melatih model kami untuk bekerja dengan mode PSM (Prefix-Suffix-Middle) dan SPM (Suffix-Prefix-Middle), dengan token kontrol pemformatan yang relevan, sama seperti StarCoder ( , ). Bavarian et al. 2022 Li et al. 2023a Total kerugian dihitung sebagai kombinasi tertimbang dari 2 tujuan: Kami secara empiris menetapkan = 0,5 selama pelatihan dan menemukan bahwa ini bekerja dengan baik dalam praktik yang mengarah pada kinerja SOTA pada tugas pelengkapan kode dan penyisipan kode. Perlu dicatat bahwa tujuan FIM hanya digunakan selama pra-pelatihan, namun kami menghapusnya selama penyetelan instruksi, yaitu kami menetapkan = 1. α α 4.3 Optimasi Kami menggunakan optimizer AdamW ([Kingma & Ba](#_bookmark80),(#_bookmark80)) dengan β1 = 0,9, β2 = 0,95 dan decay bobot sebesar 0,1 untuk melatih semua model kode Granite kami. Untuk pra-pelatihan fase-1, laju pembelajaran mengikuti jadwal kosinus dimulai dari 3 10−4 yang menurun menjadi 3 10−5 dengan langkah pemanasan linier awal 2k iterasi. Untuk pra-pelatihan fase-2, kami mulai dari 3 10−4 (1,5 10−4 untuk model 20B dan 34B) dan mengadopsi jadwal decay eksponensial untuk menurunkannya hingga 10% dari laju pembelajaran awal. Kami menggunakan ukuran batch 4M-5M token tergantung pada ukuran model selama kedua fase pra-pelatihan. Untuk mempercepat pelatihan, kami menggunakan FlashAttention 2 ( , ; , ), kernel layernorm persisten, kernel Fused RMSNorm (tergantung pada model) dan kernel Adam Fused yang tersedia di . Kami menggunakan fork kustom Megatron-LM NVIDIA ( , ; , ) untuk pelatihan terdistribusi semua model kami. Kami melatih dengan campuran paralelisme 3D: paralel tensor, paralel pipeline, dan paralel data. Kami juga menggunakan paralelisme urutan ( , ) untuk mengurangi konsumsi memori aktivasi dari panjang konteks yang besar selama pelatihan. Kami menggunakan optimizer terdistribusi Megatron dengan pelatihan presisi campuran ( , ) dalam BF16 ( , ) dengan akumulasi gradien all-reduce dan gradien dalam FP32 untuk stabilitas pelatihan. Dao et al. 2022 Dao 2023 library Apex NVIDIA Shoeybi et al. 2019 Narayanan et al. 2021 Korthikanti et al. 2023 Micikevicius et al. 2018 Kalamkar et al. 2019 4.4 Infrastruktur Kami melatih model Granite Code menggunakan dua cluster superkomputer IBM, yaitu Vela dan Blue Vela, yang dilengkapi dengan GPU NVIDIA A100 dan H100. Dalam cluster GPU Vela A100, setiap node memiliki 2 Prosesor Intel Xeon Skalabel dengan 8 GPU A100 80GB yang terhubung satu sama lain oleh NVLink dan NVSwitch. Cluster Vela mengadopsi RoCE (RDMA over Converged Ethernet) dan GDR (GPU-direct RDMA) untuk jaringan berkinerja tinggi. Demikian pula, setiap node dalam cluster Blue Vela terdiri dari prosesor Intel ganda 48-core dengan 8× GPU H100 80GB. Blue Vela menggunakan interkoneksi InfiniBand 3.2Tbps untuk memfasilitasi komunikasi mulus antar node, yang dikenal dengan throughput tinggi dan latensi rendah. Selain itu, Blue Vela menggunakan fabric penyimpanan InfiniBand terpisah yang didedikasikan yang menyediakan 800Gbps per node komputasi, didukung oleh beberapa appliance penyimpanan ESS6000. Kedua cluster menyediakan infrastruktur yang terukur dan efisien untuk melatih model kami di ribuan GPU. Kami memperkirakan emisi karbon dari pra-pelatihan model Granite Code sebesar 455 tCO2eq, yang dihitung berdasarkan total penggunaan energi dalam model dan faktor intensitas karbon rata-rata nasional AS sebesar 0,423 kg CO2eq/KWh tanpa mempertimbangkan lokasi pusat data. Cluster Blue Vela berjalan pada energi terbarukan 100% untuk meminimalkan dampak lingkungan. 5 Penyetelan Instruksi Menyempurnakan LLM kode pada berbagai tugas yang dijelaskan melalui instruksi telah terbukti meningkatkan kegunaan model dan kinerja umum. Meskipun telah ada banyak kemajuan dalam penyetelan instruksi kode, sebagian besar mengadopsi data yang dihasilkan secara sintetis dari model OpenAI