```html 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 dengan kode merevolusikan 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, yang 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 state-of-the-art di antara LLM kode open-source yang tersedia. Keluarga model Granite Code dioptimalkan untuk alur kerja pengembangan perangkat lunak perusahaan dan berkinerja baik di berbagai tugas pengkodean (misalnya, pembuatan kode, perbaikan, dan penjelasan), 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 tertanam dalam setiap aspek masyarakat kita. Seiring melonjaknya permintaan untuk pengembangan perangkat lunak, menjadi semakin penting untuk meningkatkan produktivitas pengembangan perangkat lunak, dan LLM menyediakan jalur yang menjanjikan untuk memperkuat programmer manusia. Kasus penggunaan perusahaan terkemuka untuk LLM dalam produktivitas pengembangan perangkat lunak meliputi 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 yang lebih kecil yang berfokus pada kode ( , ; , ; , ; , ; , ) dapat mencapai kinerja pembuatan kode yang sangat baik dalam paket yang lebih kecil dan lebih fleksibel, tetapi kinerja dalam tugas pengkodean selain pembuatan (misalnya, perbaikan dan penjelasan) dapat tertinggal dari 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 rumit oleh faktor-faktor di luar kinerja model. Misalnya, bahkan model terbuka terkadang dirusak oleh kurangnya transparansi tentang sumber data dan metode pemrosesan data yang digunakan dalam model, yang dapat mengikis kepercayaan pada model dalam konteks misi kritis dan teregulasi. Selain itu, persyaratan lisensi di 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 pondasi untuk tugas-tugas terkait kode; Dasar Granite Code: model pengikut instruksi yang disesuaikan menggunakan kombinasi komit Git yang dipasangkan dengan instruksi manusia dan dataset instruksi kode sintetis open-source. Instruksi Granite Code: Model dasar dalam seri ini telah dilatih dari awal dengan strategi pelatihan dua fase. Pada fase 1, model kami dilatih pada 3 hingga 4 triliun token yang bersumber dari 116 bahasa pemrograman, memastikan pemahaman komprehensif tentang bahasa pemrograman dan sintaksis. Pada fase 2, model kami selanjutnya dilatih pada 500 miliar token dengan campuran data berkualitas tinggi dari domain kode dan bahasa alami yang dirancang dengan cermat untuk meningkatkan kemampuan penalaran model. Kami menggunakan tujuan pemodelan bahasa tanpa pengawasan untuk melatih model dasar di kedua fase pelatihan. Model instruksi berasal dari penyempurnaan lebih lanjut dari model dasar yang dilatih di atas pada kombinasi varian terfilter dari CommitPack ( , ), dataset instruksi pengikut bahasa alami (OASST ( , ), HelpSteer ( , )) dan dataset matematika open-source (MathInstruct ( , ) dan MetaMathQA ( , )), termasuk dataset kode yang dihasilkan secara sintetis untuk meningkatkan kemampuan pengikut 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 selain 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 open-source, model Granite Code secara keseluruhan menunjukkan kinerja yang sangat kuat di semua ukuran model dan benchmark (seringkali mengungguli model kode open-source lainnya yang dua kali lebih besar dibandingkan Granite). Sebagai ilustrasi, Gambar (atas) menunjukkan perbandingan Granite-8B-Code-Base dengan LLM kode dasar open-source lainnya, termasuk LLM umum dasar 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 disesuaikan instruksi dari model Granite Code kami juga menunjukkan kinerja yang kuat pada HumanEvalPack, mengungguli model instruksi (kode) open-source 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 Selain itu, 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 state-of-the-art. Misalnya, Granite-8B-Code-Base mengungguli Llama-3-8B-Base sekitar 12 poin pada GSM8K dan sekitar 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 state-of-the-art pada berbagai jenis tugas terkait kode, termasuk pembuatan kode, penjelasan, perbaikan, pengeditan, terjemahan, dll., menunjukkan kemampuan mereka untuk memecahkan berbagai tugas pengkodean; 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 pipeline pengumpulan, penyaringan, dan pra-pemrosesan data kami di bagian . Bagian menjelaskan detail arsitektur model, diikuti oleh detail pelatihan di Bagian . Bagian memberikan detail tentang penyetelan instruksi, dan Bagian menjelaskan eksperimen dan hasil yang membandingkan model Granite Code dengan LLM open-source lainnya. 2 3 4 5 6 2 Pengumpulan Data Dalam bagian ini, kami menjelaskan proses perayapan dan penyaringan (Bab ), deduplikasi (Bab ), penyaringan HAP/PII (Bab ) 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 serta isu kode publik tambahan dari GitHub. Kami menyaring data mentah untuk mempertahankan daftar 116 bahasa pemrograman dari lebih dari 300 bahasa, seperti yang tercantum dalam Lampiran . Penetapan data ke bahasa pemrograman dilakukan berdasarkan ekstensi file saja, mirip dengan StarCoder ( , ). Setelah penyaringan bahasa, kami menerapkan empat aturan penyaringan utama untuk menyaring kode berkualitas rendah ( , ): (1) hapus file dengan karakter alfabet kurang dari 25%, (2) kecuali untuk bahasa XSLT, saring file di mana string “<?xml version=” muncul dalam 100 karakter pertama, (3) untuk file HTML, hanya simpan file di mana teks yang terlihat membentuk setidaknya 20% dari kode HTML dan memiliki panjang minimum 100 karakter, (4) untuk file JSON dan YAML, hanya simpan file yang memiliki jumlah karakter berkisar antara 50 hingga 5000 karakter. Kami juga menyaring isu GitHub menggunakan serangkaian metrik kualitas yang mencakup penghapusan teks yang dihasilkan secara otomatis, penyaringan isu non-Bahasa Inggris, pengecualian komentar dari bot, dan penggunaan jumlah pengguna yang terlibat dalam percakapan sebagai indikator kualitas. Kami juga menganotasi 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 variasi kecil dan dengan demikian lebih mengimbangi data. Kami menerapkan metode dua langkah untuk ini: (1) hitung MinHashes dari semua dokumen dan kemudian gunakan Locally Sensitive Hashing (LSH) untuk mengelompokkan dokumen berdasarkan sidik jari MinHash mereka, (2) ukur kesamaan Jaccard antara setiap pasangan dokumen dalam ember yang sama dan anotasi 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 berupaya keras untuk menyaring konten HAP dari set pelatihan. Kami pertama-tama membuat kamus kata kunci HAP dan kemudian menganotasi 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 berupaya keras untuk menyunting Informasi Identifikasi Pribadi (PII) dari set pelatihan. Secara khusus, kami memanfaatkan model StarPII untuk mendeteksi alamat IP, kunci, alamat email, nama, nama pengguna, dan kata sandi yang ditemukan dalam konten. Langkah penyuntingan PII menggantikan teks PII dengan token NAME , EMAIL , KEY , PASSWORD yang sesuai dan mengubah alamat IP dengan alamat IP yang dihasilkan secara sintetis, seperti pada 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 di bawah kategori ini meliputi dokumen web (Stackexchange, CommonCrawl), teks web matematika (OpenWeb-Math; ( ), StackMathQA; ( )), teks akademik (Arxiv, Wikipedia), dan dataset penyetelan instruksi (FLAN; ( ), HelpSteer ( , )). Kami tidak melakukan deduplikasi pada dataset bahasa alami yang sudah diproses ulang ini. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Arsitektur Model Kami melatih serangkaian model kode dengan berbagai ukuran berdasarkan arsitektur decoder transformer ( , ). Hiperparameter model untuk model-model ini diberikan dalam Tabel . Untuk semua arsitektur model, kami menggunakan pra-normalisasi ( , ): normalisasi diterapkan pada 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, yang juga umum 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 mirip 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 menormalkan 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 penskalaan 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 penskalaan kedalaman, kami mengamati bahwa penurunan kinerja dibandingkan dengan model 20B sangat kecil bertentangan dengan apa yang diamati oleh . Kinerja ini dipulihkan cukup cepat setelah kami melanjutkan pra-pelatihan model 34B yang diskalakan. Serupa 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 (Bab ), tujuan pelatihan (Bab ), optimasi (Bab ) dan infrastruktur (Bab ) 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 terkait dengan kode. Data ditokenisasi melalui byte pair encoding (BPE, ( , )), menggunakan tokenizer yang sama dengan StarCoder ( , ). Mengikuti ( , ; , ), kami menggunakan 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 penskalaan kedalaman yang dilakukan pada checkpoint 1,6T dari model 20B. Fase 1 (pelatihan kode saja) • : Pada fase 2, kami menyertakan data tambahan berkualitas tinggi yang tersedia untuk umum dari berbagai domain, termasuk dokumen teknis, matematika, dan web, untuk lebih meningkatkan kinerja model dalam penalaran dan keterampilan 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 Kerugian keseluruhan dihitung sebagai kombinasi berbobot dari 2 tujuan: Kami secara empiris menetapkan = 0,5 selama pelatihan dan menemukan bahwa ini bekerja dengan baik dalam praktik yang mengarah ke kinerja SOTA pada tugas penyelesaian kode dan pengisian kode. Perlu dicatat bahwa tujuan FIM hanya digunakan selama pra-pelatihan, namun kami menghapusnya selama penyetelan instruksi yaitu kami mengatur = 1. α α 4.3 Optimasi Kami menggunakan optimizer AdamW ([Kingma & Ba](#_bookmark80), [2017](#_bookmark80)) dengan β1 = 0,9, β2 = 0,95 dan bobot peluruhan 0,1 untuk melatih semua model kode Granite kami. Untuk pra-pelatihan fase 1, laju pembelajaran mengikuti jadwal kosinus mulai dari 3 10−4 yang menurun ke 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 peluruhan eksponensial untuk menganilinya ke 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 dari Megatron-LM NVIDIA ( , ; , ) untuk pelatihan terdistribusi dari 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 konteks panjang selama pelatihan. Kami menggunakan optimizer terdistribusi Megatron dengan pelatihan presisi campuran ( , ) dalam BF16 ( , ) dengan all-reduce gradien dan akumulasi 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. Di cluster GPU Vela A100, setiap node memiliki 2 Prosesor Skalabel Intel Xeon dengan 8 GPU A100 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 dual 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 skalabel 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 Penyetelan LLM kode pada berbagai tugas yang dijelaskan melalui instruksi telah terbukti meningkatkan kegunaan model dan kinerja umum. Meskipun ada banyak kemajuan dalam penyetelan instruksi kode, sebagian besar mengadopsi data yang dihasilkan secara sintetis dari model