```html Tác giả: 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 Tóm tắt Các Mô hình Ngôn ngữ Lớn (LLM) được huấn luyện trên mã nguồn đang cách mạng hóa quy trình phát triển phần mềm. Ngày càng có nhiều LLM mã nguồn được tích hợp vào môi trường phát triển phần mềm để cải thiện năng suất của các lập trình viên, và các tác nhân dựa trên LLM đang bắt đầu cho thấy tiềm năng trong việc xử lý các tác vụ phức tạp một cách tự chủ. Để hiện thực hóa đầy đủ tiềm năng của LLM mã nguồn, cần có một loạt các khả năng, bao gồm tạo mã, sửa lỗi, giải thích và tài liệu hóa mã, bảo trì kho lưu trữ, v.v. Trong công việc này, chúng tôi giới thiệu dòng mô hình mã nguồn Granite chỉ giải mã cho các tác vụ tạo mã, được huấn luyện bằng mã nguồn được viết bằng 116 ngôn ngữ lập trình. Gia đình mô hình Granite Code bao gồm các mô hình có kích thước từ 3 đến 34 tỷ tham số, phù hợp với các ứng dụng từ các tác vụ hiện đại hóa ứng dụng phức tạp đến các trường hợp sử dụng bị giới hạn bộ nhớ trên thiết bị. Đánh giá trên một bộ tác vụ toàn diện cho thấy các mô hình Granite Code liên tục đạt hiệu suất hàng đầu trong số các LLM mã nguồn mở hiện có. Gia đình mô hình Granite Code được tối ưu hóa cho quy trình làm việc phát triển phần mềm doanh nghiệp và hoạt động tốt trên nhiều tác vụ mã hóa (ví dụ: tạo mã, sửa lỗi và giải thích), làm cho nó trở thành một mô hình mã nguồn đa năng "toàn diện". Chúng tôi phát hành tất cả các mô hình Granite Code của chúng tôi theo giấy phép Apache 2.0 cho cả mục đích nghiên cứu và thương mại. https://github.com/ibm-granite/granite-code-models 1 Giới thiệu Trong nhiều thập kỷ qua, phần mềm đã len lỏi vào mọi khía cạnh của xã hội chúng ta. Khi nhu cầu phát triển phần mềm tăng vọt, việc nâng cao năng suất phát triển phần mềm trở nên quan trọng hơn bao giờ hết, và LLM cung cấp một con đường hứa hẹn để bổ trợ cho các lập trình viên. Các trường hợp sử dụng doanh nghiệp nổi bật cho LLM trong năng suất phát triển phần mềm bao gồm tạo mã, giải thích mã, sửa lỗi mã, tạo bài kiểm tra đơn vị và tài liệu hóa, hiện đại hóa ứng dụng, phát hiện lỗ hổng, dịch mã, v.v. Những năm gần đây đã chứng kiến sự tiến bộ nhanh chóng trong khả năng tạo và thao tác mã của LLM, và ngày nay có nhiều mô hình với khả năng mã hóa ấn tượng. Các mô hình có kích thước từ vài tỷ tham số (ví dụ: Llama-7B (Touvron et al., 2023), Gemma-7B (Gemma-Team et al., 2024), v.v.) đến hàng trăm tỷ: DBRX (Databricks), Arctic (Snowflake), Grok, Mixtral 8x22B (MistralAI), Command R+ (Cohere), và khác nhau về mục đích sử dụng chung, với một số mô hình nhắm đến phạm vi sử dụng ngoài mã nguồn, trong khi các mô hình khác chủ yếu tập trung vào các tác vụ liên quan đến mã hóa (ví dụ: 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)). Tuy nhiên, vẫn còn những khoảng trống quan trọng trong lĩnh vực LLM mã nguồn hiện tại, đặc biệt là trong bối cảnh phát triển phần mềm doanh nghiệp. Đầu tiên, mặc dù các LLM tổng quát rất lớn có thể đạt được hiệu suất mã hóa xuất sắc, nhưng kích thước của chúng khiến việc triển khai trở nên tốn kém. Các mô hình nhỏ hơn tập trung vào mã nguồn ( , ; , ; , ; , ; , ) có thể đạt được hiệu suất tạo mã xuất sắc trong gói nhỏ gọn và linh hoạt hơn, nhưng hiệu suất trong các tác vụ mã hóa ngoài việc tạo mã (ví dụ: sửa lỗi và giải thích) có thể kém hơn hiệu suất tạo mã. Li et al. 2023a Lozhkov et al. 2024 Nijkamp et al. 2023 Rozie`re et al. 2023 CodeGemma Team et al. 2024 Trong nhiều bối cảnh doanh nghiệp, việc áp dụng LLM mã nguồn có thể phức tạp hơn bởi các yếu tố vượt ra ngoài hiệu suất của mô hình. Ví dụ, ngay cả các mô hình mở đôi khi cũng bị ảnh hưởng bởi sự thiếu minh bạch về nguồn dữ liệu và phương pháp xử lý dữ liệu đã được sử dụng để tạo mô hình, điều này có thể làm giảm lòng tin vào các mô hình trong các ngữ cảnh quan trọng và được quy định. Hơn nữa, các điều khoản cấp phép trong LLM mở hiện nay có thể gây khó khăn và phức tạp cho khả năng sử dụng mô hình của doanh nghiệp. Ở đây, chúng tôi trình bày các mô hình Granite Code, một loạt các LLM mã nguồn có khả năng cao, được thiết kế để hỗ trợ phát triển phần mềm doanh nghiệp trên nhiều loại tác vụ mã hóa. Các mô hình Granite Code có hai biến thể chính mà chúng tôi phát hành với bốn kích thước khác nhau (3B, 8B, 20B và 34B): các mô hình nền tảng cơ sở cho các tác vụ liên quan đến mã nguồn; Granite Code Base: các mô hình tuân theo chỉ dẫn được tinh chỉnh bằng cách kết hợp các commit Git với các chỉ dẫn của con người và các tập dữ liệu chỉ dẫn mã nguồn tổng hợp mở. Granite Code Instruct: Các mô hình nền tảng trong dòng này đã được huấn luyện từ đầu với chiến lược huấn luyện hai giai đoạn. Trong giai đoạn 1, mô hình của chúng tôi được huấn luyện trên 3 đến 4 nghìn tỷ token được lấy từ 116 ngôn ngữ lập trình, đảm bảo hiểu biết toàn diện về các ngôn ngữ và cú pháp lập trình. Trong giai đoạn 2, mô hình của chúng tôi được huấn luyện thêm trên 500 tỷ token với sự kết hợp được thiết kế cẩn thận giữa dữ liệu chất lượng cao từ các miền mã nguồn và ngôn ngữ tự nhiên để cải thiện khả năng suy luận của mô hình. Chúng tôi sử dụng mục tiêu mô hình hóa ngôn ngữ không giám sát để huấn luyện các mô hình nền tảng trong cả hai giai đoạn huấn luyện. Các mô hình hướng dẫn được tạo ra bằng cách tinh chỉnh thêm các mô hình nền tảng đã được huấn luyện trên sự kết hợp của một biến thể được lọc của CommitPack ( , ), các tập dữ liệu tuân theo chỉ dẫn ngôn ngữ tự nhiên (OASST ( , ), HelpSteer ( , )) và các tập dữ liệu toán học mã nguồn mở (MathInstruct ( , ) và MetaMathQA ( , )), bao gồm các tập dữ liệu mã nguồn được tạo tổng hợp để cải thiện khả năng tuân theo chỉ dẫn và suy luận. Muennighoff et al. 2023 Ko¨ pf et al. 2023 Wang et al. 2023 Yue et al. 2023 Yu et al. 2023 Chúng tôi tiến hành đánh giá mở rộng các LLM mã nguồn của mình trên một bộ tiêu chuẩn toàn diện, bao gồm HumanEvalPack ( , ), MBPP+ ( , ; , ), RepoBench ( , ), ReCode ( , ), và hơn thế nữa. Bộ tiêu chuẩn này bao gồm nhiều loại tác vụ mã hóa khác nhau ngoài việc tổng hợp mã trong Python, ví dụ: sửa mã, giải thích mã, chỉnh sửa mã, dịch mã, v.v., trên hầu hết các ngôn ngữ lập trình chính (Python, JavaScript, Java, Go, C++, Rust, v.v.). Muennighoff et al. 2023 Austin et al. 2021 Liu et al. 2023a Liu et al. 2023b Wang et al. 2022 Phát hiện của chúng tôi tiết lộ rằng trong số các mô hình mã nguồn mở, các mô hình Granite Code nhìn chung cho thấy hiệu suất rất mạnh mẽ trên tất cả các kích thước mô hình và tiêu chuẩn (thường vượt trội hơn các mô hình mã nguồn mở khác có kích thước gấp đôi so với Granite). Để minh họa, hình 1 (trên) cho thấy so sánh Granite-8B-Code-Base với các LLM mã nguồn mở nền tảng khác, bao gồm các LLM nền tảng tổng quát hiệu suất cao gần đây như Mistral ( , ) và LLama-3 ( , ) trên HumanEvalPack ( , ). Trong khi CodeGemma và StarCoder2 hoạt động khá tốt trong việc tạo mã, chúng lại hoạt động kém hơn đáng kể trong các biến thể sửa lỗi và giải thích mã của HumanEvalPack. Trung bình, Granite-8B-Code-Base vượt trội hơn mô hình CodeGemma-8B cạnh tranh nhất gần 12 điểm trên HumanEvalPack (33,2% so với 21,3%), mặc dù được huấn luyện trên số lượng token ít hơn đáng kể (4,5T so với 7,5T token). Bên cạnh các mô hình nền tảng, các biến thể được tinh chỉnh hướng dẫn của các mô hình Granite Code của chúng tôi cũng cho thấy hiệu suất mạnh mẽ trên HumanEvalPack, vượt trội hơn các mô hình hướng dẫn mã nguồn mở khác, chứng tỏ lợi ích cho một loạt các tác vụ mã hóa với các chỉ dẫn ngôn ngữ tự nhiên (xem hình 1 (dưới)). Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 Hơn nữa, vì suy luận là rất quan trọng để giải quyết các câu hỏi và tác vụ phức tạp, chúng tôi cũng kiểm tra mô hình Granite-8B-Code-Base của chúng tôi trên sáu tiêu chuẩn toán học, bao gồm MATH ( , ), GSM8K ( , ) và giải quyết vấn đề có quyền truy cập vào các công cụ tính toán, nơi mô hình Granite 8B của chúng tôi đạt hiệu suất tốt hơn so với hầu hết các LLM 7B hoặc 8B hàng đầu. Ví dụ, Granite-8B-Code-Base vượt trội hơn Llama-3-8B-Base khoảng 12 điểm trên GSM8K và khoảng 6 điểm trên MATH (xem bảng 15). Cobbe et al. 2021 Cobbe et al. 2021 Các lợi thế chính của mô hình Granite Code bao gồm: : Các mô hình Granite Code đạt hiệu suất cạnh tranh hoặc hàng đầu trên nhiều loại tác vụ liên quan đến mã nguồn, bao gồm tạo mã, giải thích, sửa lỗi, chỉnh sửa, dịch, v.v., chứng tỏ khả năng giải quyết các tác vụ mã hóa đa dạng của chúng; LLM mã nguồn toàn diện : Tất cả các mô hình của chúng tôi được huấn luyện trên dữ liệu được phép sử dụng theo giấy phép, được thu thập theo các nguyên tắc Đạo đức AI của IBM và được hướng dẫn bởi Nhóm Pháp lý Doanh nghiệp của IBM để sử dụng trong doanh nghiệp một cách đáng tin cậy. Tất cả các mô hình Granite Code được phát hành theo giấy phép Apache 2.0. LLM đáng tin cậy cấp doanh nghiệp 1 Chúng tôi mô tả toàn bộ quy trình thu thập, lọc và tiền xử lý dữ liệu của chúng tôi trong phần . Phần mô tả chi tiết kiến trúc mô hình, theo sau là chi tiết huấn luyện trong Phần . Phần cung cấp chi tiết về tinh chỉnh hướng dẫn, và Phần mô tả các thử nghiệm và kết quả so sánh các mô hình Granite Code với các LLM mã nguồn mở khác. 2 3 4 5 6 2 Thu thập dữ liệu Trong phần này, chúng tôi mô tả quy trình thu thập và lọc dữ liệu (Mục ), loại bỏ trùng lặp (Mục ), lọc HAP/PII (Mục ) được sử dụng để chuẩn bị dữ liệu mã nguồn cho việc huấn luyện mô hình. Chúng tôi cũng cung cấp tổng quan về dữ liệu ngôn ngữ tự nhiên chất lượng cao được sử dụng để nâng cao kỹ năng hiểu ngôn ngữ và suy luận toán học của mô hình. 2.1 2.2 2.3 2.1 Thu thập và lọc dữ liệu Dữ liệu mã nguồn tiền huấn luyện được lấy từ sự kết hợp của các tập dữ liệu có sẵn công khai như Github Code Clean , StarCoderdata , và các kho mã nguồn và vấn đề công khai khác từ GitHub. Chúng tôi lọc dữ liệu thô để giữ lại danh sách 116 ngôn ngữ lập trình trong số hơn 300 ngôn ngữ, như được liệt kê trong Phụ lục . Việc gán dữ liệu cho các ngôn ngữ lập trình được thực hiện hoàn toàn dựa trên phần mở rộng tệp, tương tự như StarCoder ( , ). Sau khi lọc ngôn ngữ, chúng tôi áp dụng bốn quy tắc lọc chính để loại bỏ mã chất lượng thấp ( , ): (1) loại bỏ các tệp có ít hơn 25% ký tự chữ cái, (2) ngoại trừ ngôn ngữ XSLT, lọc bỏ các tệp có chuỗi “<?xml version=” xuất hiện trong 100 ký tự đầu tiên, (3) đối với các tệp HTML, chỉ giữ lại các tệp có văn bản hiển thị chiếm ít nhất 20% mã HTML và có độ dài tối thiểu 100 ký tự, (4) đối với các tệp JSON và YAML, chỉ giữ lại các tệp có số lượng ký tự trong khoảng từ 50 đến 5000 ký tự. Chúng tôi cũng lọc các vấn đề GitHub bằng một bộ chỉ số chất lượng bao gồm loại bỏ văn bản tự động tạo, lọc các vấn đề không phải tiếng Anh, loại trừ nhận xét từ bot và sử dụng số lượng người dùng tham gia vào cuộc trò chuyện làm chỉ số chất lượng. Chúng tôi cũng chú thích từng tệp mã nguồn với thông tin giấy phép liên quan đến kho lưu trữ tương ứng, được tìm thấy thông qua API Github và chỉ giữ lại các tệp có giấy phép cho phép để huấn luyện mô hình. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Loại bỏ trùng lặp chính xác và mờ Chúng tôi áp dụng một chiến lược loại bỏ trùng lặp mạnh mẽ bao gồm cả loại bỏ trùng lặp chính xác và mờ để loại bỏ các tài liệu có nội dung mã nguồn (gần như) giống hệt nhau trong tập huấn luyện của chúng tôi. Đối với loại bỏ trùng lặp chính xác, chúng tôi trước tiên tính toán hàm băm SHA256 trên nội dung tài liệu và loại bỏ các bản ghi có cùng hàm băm. Sau khi loại bỏ trùng lặp chính xác, chúng tôi áp dụng loại bỏ trùng lặp mờ với mục tiêu loại bỏ các tệp mã nguồn có thể có các biến thể nhỏ và do đó làm giảm độ lệch của dữ liệu hơn nữa. Chúng tôi áp dụng phương pháp hai bước cho việc này: (1) tính toán MinHash của tất cả các tài liệu và sau đó sử dụng Hashing Nhạy cảm Cục bộ (LSH) để nhóm các tài liệu dựa trên dấu vân tay MinHash của chúng, (2) đo lường sự tương đồng Jaccard giữa mỗi cặp tài liệu trong cùng một nhóm và chú thích các tài liệu ngoại trừ một bản sao dựa trên ngưỡng tương đồng là 0,7. Chúng tôi áp dụng quy trình gần loại bỏ trùng lặp này cho tất cả các ngôn ngữ lập trình bao gồm các vấn đề GitHub để tăng cường sự phong phú và đa dạng của tập dữ liệu huấn luyện. 2.3 Lọc HAP, PII, Mã độc Để giảm thiểu khả năng tạo ra ngôn ngữ thù địch, lạm dụng hoặc tục tĩu (HAP) từ các mô hình, chúng tôi đã nỗ lực cẩn thận để lọc nội dung HAP khỏi tập huấn luyện. Chúng tôi trước tiên tạo một từ điển các từ khóa HAP và sau đó chú thích từng tài liệu mã nguồn với số lần xuất hiện của các từ khóa đó trong nội dung bao gồm cả nhận xét. Chúng tôi lọc bỏ các tài liệu vượt quá ngưỡng HAP, được tính toán dựa trên phân tích phân phối cũng như kiểm tra thủ công các tệp mã nguồn. Hơn nữa, để bảo vệ quyền riêng tư, chúng tôi tuân theo StarCoder ( , ) và nỗ lực cẩn thận để che giấu Thông tin Nhận dạng Cá nhân (PII) khỏi tập huấn luyện. Cụ thể, chúng tôi sử dụng mô hình StarPII để phát hiện địa chỉ IP, khóa, địa chỉ email, tên, tên người dùng và mật khẩu được tìm thấy trong nội dung. Bước che giấu PII thay thế văn bản PII bằng các token tương ứng NAME , EMAIL , KEY , PASSWORD và thay đổi địa chỉ IP bằng địa chỉ IP được tạo tổng hợp, như trong Li et al. (2023a). Chúng tôi cũng quét các tập dữ liệu của mình bằng cách sử dụng để xác định và loại bỏ các trường hợp mã độc trong mã nguồn. Li et al. 2023a 4 2.4 Tập dữ liệu ngôn ngữ tự nhiên Ngoài việc thu thập dữ liệu mã nguồn để huấn luyện mô hình, chúng tôi còn tuyển chọn một số tập dữ liệu ngôn ngữ tự nhiên chất lượng cao có sẵn công khai để cải thiện khả năng hiểu ngôn ngữ và suy luận toán học của mô hình. Các tập dữ liệu đại diện thuộc loại này bao gồm các tài liệu web (Stackexchange, CommonCrawl), văn bản web toán học (OpenWeb-Math; ( ), StackMathQA; ( )), văn bản học thuật (Arxiv, Wikipedia) và các tập dữ liệu tinh chỉnh hướng dẫn (FLAN; ( ), HelpSteer ( , )). Chúng tôi không loại bỏ trùng lặp các tập dữ liệu ngôn ngữ tự nhiên đã được tiền xử lý này. Paster et al. 2023 Zhang 2024 Longpre et al. 2023 Wang et al. 2023 3 Kiến trúc mô hình Chúng tôi huấn luyện một loạt các mô hình mã nguồn với các kích thước khác nhau dựa trên kiến trúc bộ giải mã transformer ( , ). Các siêu tham số của mô hình cho các mô hình này được đưa ra trong Bảng . Đối với tất cả các kiến trúc mô hình, chúng tôi sử dụng tiền chuẩn hóa ( , ): chuẩn hóa được áp dụng cho đầu vào của các khối chú ý và MLP. Vaswani et al. 2017 1 Xiong et al. 2020 : Mô hình nhỏ nhất trong gia đình mô hình Granite-code được huấn luyện với nhúng RoPE ( , ) và Chú ý Đa Đầu ( , ). Mô hình này sử dụng hàm kích hoạt swish ( , ) với GLU ( , ) cho MLP, còn được gọi là swiglu. Để chuẩn hóa, chúng tôi sử dụng RMSNorm ( , ) vì nó hiệu quả hơn về mặt tính toán so với LayerNorm ( , ). Mô hình 3B được huấn luyện với độ dài ngữ cảnh là 2048 token. 3B Su et al. 2023 Vaswani et al. 2017 Ramachandran et al. 2017 Shazeer 2020 Zhang & Sennrich 2019 Ba et al. 2016 : Mô hình 8B có kiến trúc tương tự như mô hình 3B, ngoại trừ việc sử dụng Chú ý Truy vấn Nhóm (GQA) ( , ). Sử dụng GQA mang lại sự cân bằng tốt hơn giữa hiệu suất mô hình và hiệu quả suy luận ở quy mô này. Chúng tôi huấn luyện mô hình 8B với độ dài ngữ cảnh là 4096 token. 8B Ainslie et al. 2023 : Mô hình mã nguồn 20B được huấn luyện với các nhúng vị trí tuyệt đối có thể học được. Chúng tôi sử dụng Chú ý Đa Truy vấn ( , ) trong quá trình huấn luyện để suy luận xuôi dòng hiệu quả. Đối với khối MLP, chúng tôi sử dụng hàm kích hoạt GELU ( , ). Để chuẩn hóa các kích hoạt, chúng tôi sử dụng LayerNorm ( , ). Mô hình này được huấn luyện với độ dài ngữ cảnh là 8192 token. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : Để huấn luyện mô hình 34B, chúng tôi tuân theo phương pháp của để nâng cấp độ sâu của mô hình 20B. Cụ thể, chúng tôi đầu tiên nhân đôi mô hình mã nguồn 20B với 52 lớp và sau đó loại bỏ 8 lớp cuối cùng của mô hình gốc và 8 lớp đầu tiên của bản sao của nó để tạo ra hai mô hình. 34B Kim et al. Cuối cùng, chúng tôi nối cả hai mô hình để tạo thành mô hình Granite-34B-Code với 88 lớp (xem Hình để minh họa). Sau khi nâng cấp độ sâu, chúng tôi nhận thấy rằng sự sụt giảm hiệu suất so với mô hình 20B là khá nhỏ, trái ngược với những gì được quan sát bởi . Hiệu suất này được phục hồi khá nhanh sau khi chúng tôi tiếp tục tiền huấn luyện mô hình 34B đã nâng cấp. Tương tự như 20B, chúng tôi sử dụng ngữ cảnh 8192 token trong quá trình tiền huấn luyện. 2 Kim et al. 4 Tiền huấn luyện Trong phần này, chúng tôi cung cấp chi tiết về huấn luyện hai giai đoạn (Mục ), mục tiêu huấn luyện (Mục ), tối ưu hóa (Mục ) và cơ sở hạ tầng (Mục ) được sử dụng trong việc tiền huấn luyện các mô hình. 4.1 4.2 4.3 4.4 4.1 Huấn luyện hai giai đoạn Các mô hình Granite Code được huấn luyện trên 3,5T đến 4,5T token dữ liệu mã nguồn và tập dữ liệu ngôn ngữ tự nhiên liên quan đến mã nguồn. Dữ liệu được mã hóa bằng mã hóa cặp byte (BPE, ( , )), sử dụng cùng bộ mã hóa với StarCoder ( , ). Theo sau ( , ; , ), chúng tôi sử dụng dữ liệu chất lượng cao với hai giai đoạn huấn luyện như sau. Sennrich et al. 2015 Li et al. 2023a Shen et al. 2024 Hu et al. 2024 • : Trong giai đoạn 1, cả hai mô hình 3B và 8B được huấn luyện trong 4 nghìn tỷ token dữ liệu mã nguồn bao gồm 116 ngôn ngữ. Mô hình 20B tham số được huấn luyện trên 3 nghìn tỷ token mã nguồn. Mô hình 34B được huấn luyện trên 1,4T token sau khi nâng cấp độ sâu được thực hiện trên checkpoint 1,6T của mô hình 20B. Giai đoạn 1 (huấn luyện chỉ mã nguồn) • : Trong giai đoạn 2, chúng tôi bao gồm thêm dữ liệu chất lượng cao có sẵn công khai từ nhiều miền khác nhau, bao gồm tài liệu kỹ thuật, toán học và web, để cải thiện hơn nữa hiệu suất của mô hình trong khả năng suy luận và giải quyết vấn đề, vốn rất cần thiết cho việc tạo mã. Chúng tôi huấn luyện tất cả các mô hình của mình trong 500B token (80% mã nguồn và 20% dữ liệu ngôn ngữ) trong giai đoạn huấn luyện 2. Giai đoạn 2 (huấn luyện mã nguồn + ngôn ngữ) 4.2 Mục tiêu huấn luyện Để huấn luyện tất cả các mô hình của chúng tôi, chúng tôi sử dụng mục tiêu mô hình hóa ngôn ngữ nhân quả và mục tiêu Điền vào Giữa (FIM) ( , ). Mục tiêu FIM có nhiệm vụ dự đoán các token được chèn vào với ngữ cảnh cho trước và văn bản theo sau. Chúng tôi huấn luyện các mô hình của mình để hoạt động với cả hai chế độ PSM (Tiền tố-Hậu tố-Giữa) và SPM (Hậu tố-Tiền tố-Giữa), với các token điều khiển định dạng liên quan, giống như StarCoder ( , ). Bavarian et al. 2022 Li et al. 2023a Tổng tổn thất được tính là sự kết hợp có trọng số của 2 mục tiêu: Chúng tôi thực nghiệm đặt = 0,5 trong quá trình huấn luyện và nhận thấy rằng điều này hoạt động tốt trong thực tế, dẫn đến hiệu suất SOTA trên cả hai tác vụ hoàn thành mã nguồn và điền mã nguồn. Cần lưu ý rằng mục tiêu FIM chỉ được sử dụng trong quá trình tiền huấn luyện, tuy nhiên chúng tôi loại bỏ nó trong quá trình tinh chỉnh hướng dẫn, tức là chúng tôi đặt = 1. α α 4.3 Tối ưu hóa Chúng tôi sử dụng bộ tối ưu hóa AdamW ([Kingma & Ba](#_bookmark80), [2017](#_bookmark80)) với β1 = 0,9, β2 = 0,95 và suy giảm trọng số là 0,1 để huấn luyện tất cả các mô hình mã nguồn Granite của chúng tôi. Đối với tiền huấn luyện giai đoạn 1, tốc độ học theo lịch trình cosine bắt đầu từ 3 10−4 giảm xuống còn 3 10−5 với bước làm ấm tuyến tính ban đầu là 2k lần lặp. Đối với tiền huấn luyện giai đoạn 2, chúng tôi bắt đầu từ 3 10−4 (1,5 10−4 đối với mô hình 20B và 34B) và áp dụng lịch trình suy giảm hàm mũ để điều chỉnh nó xuống 10% tốc độ học ban đầu. Chúng tôi sử dụng kích thước lô gồm 4M