```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 ของโมเดลโค้ดแบบ decoder-only สำหรับงานสร้างโค้ด ซึ่งได้รับการฝึกฝนด้วยโค้ดที่เขียนด้วยภาษาโปรแกรม 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: โมเดลที่ปรับแต่งตามคำสั่ง (instruction following) โดยใช้การผสมผสานระหว่าง Git commits ที่จับคู่กับคำสั่งของมนุษย์และชุดข้อมูลคำสั่งโค้ดที่สร้างขึ้นแบบสังเคราะห์โอเพ่นซอร์ส Granite Code Instruct: โมเดลพื้นฐานในซีรีส์นี้ได้รับการฝึกฝนตั้งแต่ต้นด้วยกลยุทธ์การฝึกอบรมสองเฟส ในเฟสที่ 1 โมเดลของเราได้รับการฝึกฝนด้วยโทเค็น 3 ถึง 4 ล้านล้านโทเค็นที่มาจากภาษาโปรแกรม 116 ภาษา เพื่อให้เข้าใจภาษาโปรแกรมและไวยากรณ์ได้อย่างครอบคลุม ในเฟสที่ 2 โมเดลของเราได้รับการฝึกฝนเพิ่มเติมด้วยโทเค็น 500 พันล้านโทเค็น ด้วยการผสมผสานข้อมูลคุณภาพสูงจากโดเมนโค้ดและภาษาธรรมชาติที่ออกแบบมาอย่างดี เพื่อปรับปรุงความสามารถของโมเดลในการใช้เหตุผล เราใช้ objective การสร้างแบบจำลองภาษาแบบไม่มีผู้สอน (unsupervised language modeling objective) เพื่อฝึกอบรมโมเดลพื้นฐานในทั้งสองเฟสของการฝึกอบรม โมเดล instruct ได้รับการปรับแต่งเพิ่มเติมโดยการ fine-tuning โมเดลพื้นฐานที่ฝึกอบรมข้างต้น บนการผสมผสานระหว่าง 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 ที่ได้รับการปรับแต่งตามคำสั่ง (instruction tuned variants) ก็แสดงประสิทธิภาพที่แข็งแกร่งบน HumanEvalPack ด้วย โดยมีประสิทธิภาพดีกว่าโมเดล instruct โค้ดโอเพ่นซอร์สอื่นๆ ซึ่งแสดงให้เห็นถึงประโยชน์ต่อชุดงานโค้ดที่หลากหลายด้วยคำสั่งภาษาธรรมชาติ (ดูรูปที่ (ด้านล่าง)) 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 โค้ดที่รอบด้าน : โมเดลทั้งหมดของเราได้รับการฝึกฝนจากข้อมูลที่ได้รับอนุญาต ซึ่งรวบรวมตามหลักการ AI Ethics ของ IBM และอยู่ภายใต้การดูแลของทีมกฎหมายองค์กรของ 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 การรวบรวมและกรองข้อมูล ข้อมูลโค้ดสำหรับการ pretraining ได้มาจากชุดข้อมูลสาธารณะ เช่น 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 โดยใช้ชุดตัววัดคุณภาพ ซึ่งรวมถึงการลบข้อความที่สร้างขึ้นโดยอัตโนมัติ การกรองประเด็นที่ไม่ใช่ภาษาอังกฤษ การยกเว้นความคิดเห็นจากบอท และการใช้จำนวนผู้เข้าร่วมสนทนาเป็นตัวบ่งชี้คุณภาพ นอกจากนี้เรายังใส่คำอธิบายประกอบไฟล์โค้ดแต่ละไฟล์ด้วยข้อมูลใบอนุญาตที่เกี่ยวข้องกับคลังเก็บโค้ดนั้นๆ ซึ่งค้นหาได้ผ่าน GitHub APIs และเก็บเฉพาะไฟล์ที่มีใบอนุญาตที่อนุญาตสำหรับการฝึกอบรมโมเดล 2 3 A Li et al. 2023a Li et al. 2023a 2.2 การลบข้อมูลซ้ำแบบตรงและแบบคลุมเครือ เราใช้กลยุทธ์การลบข้อมูลซ้ำที่เข้มงวด รวมถึงการลบข้อมูลซ้ำทั้งแบบตรงและแบบคลุมเครือ เพื่อลบเอกสารที่มีเนื้อหาโค้ด (เกือบ) เหมือนกันในชุดฝึกอบรมของเรา สำหรับการลบข้อมูลซ้ำแบบตรง เราคำนวณแฮช SHA256 บนเนื้อหาเอกสารก่อน แล้วจึงลบระเบียนที่มีแฮชเหมือนกัน หลังจากการลบข้อมูลซ้ำแบบตรง เราใช้การลบข้อมูลซ้ำแบบคลุมเครือโดยมีเป้าหมายเพื่อลบไฟล์โค้ดที่อาจมีความแตกต่างเล็กน้อย และทำให้ข้อมูลมีความไม่เอนเอียงมากขึ้น เราใช้วิธีการสองขั้นตอนสำหรับสิ่งนี้: (1) คำนวณ MinHashes ของเอกสารทั้งหมด จากนั้นใช้ Locally Sensitive Hashing (LSH) เพื่อจัดกลุ่มเอกสารตามลายนิ้วมือ MinHash ของพวกเขา (2) วัด Jaccard similarity ระหว่างแต่ละคู่ของเอกสารในถังเดียวกัน และใส่คำอธิบายประกอบเอกสารยกเว้นเอกสารหนึ่งเป็นข้อมูลซ้ำตามเกณฑ์ความคล้ายคลึง 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 สถาปัตยกรรมโมเดล เราฝึกอบรมซีรีส์ของโมเดลโค้ดที่มีขนาดแตกต่างกันโดยอิงจากสถาปัตยกรรม decoder ของ Transformer ( , ) ไฮเปอร์พารามิเตอร์ของโมเดลสำหรับโมเดลเหล่านี้แสดงอยู่ในตาราง สำหรับสถาปัตยกรรมโมเดลทั้งหมด เราใช้ pre-normalization ( , ): การ normalize ที่ใช้กับอินพุตของบล็อก attention และ MLP Vaswani et al. 2017 1 Xiong et al. 2020 : โมเดลที่เล็กที่สุดในตระกูล Granite-code ได้รับการฝึกอบรมด้วย RoPE embedding ( , ) และ Multi-Head Attention ( , ) โมเดลนี้ใช้ swish activation function ( , ) กับ GLU ( , ) สำหรับ MLP ซึ่งมักเรียกว่า swiglu สำหรับการ normalize เราใช้ 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 ได้รับการฝึกอบรมด้วย learned absolute position embeddings เราใช้ Multi-Query Attention ( , ) ในระหว่างการฝึกอบรมเพื่อประสิทธิภาพในการอนุมานดาวน์สตรีม สำหรับบล็อก MLP เราใช้ GELU activation function ( , ) สำหรับการ normalize activation เราใช้ 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 โทเค็นในการ pretraining 2 Kim et al. 4 Pretraining ในส่วนนี้ เราให้รายละเอียดเกี่ยวกับการฝึกอบรมสองเฟส (ส่วน ), objectives การฝึกอบรม (ส่วน ), การปรับให้เหมาะสม (ส่วน ) และโครงสร้างพื้นฐาน (ส่วน ) ที่ใช้ในการ pretraining โมเดล 4.1 4.2 4.3 4.4 4.1 การฝึกอบรมสองเฟส โมเดล Granite Code ได้รับการฝึกอบรมด้วยข้อมูลโค้ด 3.5T ถึง 4.5T โทเค็น และชุดข้อมูลภาษาธรรมชาติที่เกี่ยวข้องกับโค้ด ข้อมูลจะถูก tokenized ผ่าน byte pair encoding (BPE, ( , )) โดยใช้ tokenizer เดียวกันกับ 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 โทเค็นหลังจากการเพิ่มความลึก ซึ่งดำเนินการบน checkpoint 1.6T ของโมเดล 20B เฟส 1 (การฝึกอบรมโค้ดเท่านั้น) • : ในเฟส 2 เราได้รวมข้อมูลคุณภาพสูงที่มีอยู่จากแหล่งต่างๆ รวมถึงเอกสารทางเทคนิค คณิตศาสตร์ และเว็บ เพื่อปรับปรุงประสิทธิภาพของโมเดลในการใช้เหตุผลและทักษะการแก้ปัญหา ซึ่งจำเป็นสำหรับการสร้างโค้ด เราฝึกอบรมโมเดลทั้งหมดของเราด้วยโทเค็น 500B (80% โค้ด และ 20% ภาษา) ในการฝึกอบรมเฟส 2 เฟส 2 (การฝึกอบรมโค้ด + ภาษา) 4.2 Training Objective สำหรับการฝึกอบรมโมเดลทั้งหมดของเรา เราใช้ causal language modeling objective และ Fill-In-the-Middle (FIM) ( , ) objective FIM objective มีหน้าที่ในการทำนายโทเค็นที่แทรกด้วยบริบทที่กำหนดและข้อความที่ตามมา เราฝึกอบรมโมเดลของเราให้ทำงานได้ทั้งในโหมด PSM (Prefix-Suffix-Middle) และ SPM (Suffix-Prefix-Middle) โดยใช้ token ควบคุมการจัดรูปแบบที่เกี่ยวข้อง เช่นเดียวกับ StarCoder ( , ) Bavarian et al. 2022 Li et al. 2023a Loss โดยรวมคำนวณจากการผสมผสานถ่วงน้ำหนักของ 2 objectives: เราตั้งค่า = 0.5 ในระหว่างการฝึกอบรมด้วยการทดลอง และพบว่าวิธีนี้ใช้ได้ผลดีในทางปฏิบัติ ทำให้ได้ประสิทธิภาพ SOTA ทั้งในงานการเติมโค้ดให้สมบูรณ์และการเติมโค้ด (code infilling) ควรสังเกตว่า FIM objective ใช้เฉพาะในการ pretraining เท่านั้น อย่างไรก็ตาม เราจะยกเลิกการใช้ในการ fine-tuning ตามคำสั่ง นั่นคือเราตั้งค่า = 1 α α 4.3