```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-ийн бүрэн чадавхийг хэрэгжүүлэхийн тулд код үүсгэх, алдаа засах, кодыг тайлбарлах, баримтжуулах, сан хөмрөгийг хадгалах гэх мэт олон төрлийн чадварууд шаардлагатай. Энэхүү ажилд бид 116 програмчлалын хэл дээр сургагдсан код үүсгэх зорилготой шилдэг декодер-төвтэй Granite цуврал загваруудыг танилцуулж байна. 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: Git хуулбаруудыг хүмүүний заавруудтай хослуулан, нээлттэй эх сурвалжтай синтетик байдлаар үүсгэсэн код зааврын багц дээр давхар сургагдсан загварууд. Granite Code Instruct: Энэ цувралын үндсэн загварууд нь хоёр үе шаттай сургалтын стратегийг ашиглан анхнаас нь сургагдсан. 1-р шатанд, манай загвар нь 116 програмчлалын хэлнээс авсан 3-4 триллион токен дээр сургагдсан бөгөөд энэ нь програмчлалын хэл болон синтаксисийг бүрэн ойлгох боломжийг олгодог. 2-р шатанд, манай загвар нь код болон байгалийн хэлний домэйноос авсан өндөр чанартай өгөгдлийн холимог бүхий 500 тэрбум токен дээр цаашид сургагдсан нь загварын ойлгох чадварыг сайжруулдаг. Бид хоёр үе шатны сургалтанд үндсэн загваруудыг сургахдаа хяналтгүй хэлний загварчлалын зорилтыг ашигласан. Зааварчилгааны загварууд нь дээр дурьдсан үндсэн загваруудыг 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-ээс хоёр дахин том нээлттэй эх сурвалжтай код загваруудаас давж гардаг). Жишээ болгохын тулд, 1-р зураг (доод хэсэг) нь HumanEvalPack ( , ) дээр Granite-8B-Code-Base болон бусад нээлттэй эх сурвалжтай үндсэн код LLM-ийг харьцуулсан байдлыг харуулсан. Үүнд Mistral ( , ) болон LLama-3 ( , ) зэрэг сүүлийн үеийн өндөр гүйцэтгэлтэй ерөнхий зориулалттай үндсэн LLM-үүд багтсан. CodeGemma болон StarCoder2 нь код үүсгэхэд харьцангуй сайн ажилладаг боловч HumanEvalPack-ийн код засах болон тайлбарлах хувилбарууд дээр ихээхэн доогуур үр дүнтэй байдаг. Дунджаар, Granite-8B-Code-Base нь хамгийн өрсөлдөх чадвартай CodeGemma-8B загварыг HumanEvalPack дээр бараг 12 оноогоор (33.2% vs 21.3%) давж гарсан боловч харьцангуй бага токен дээр сургагдсан (4.5T vs 7.5T токен). Үндсэн загваруудаас гадна, манай Granite Code загваруудын зааварчилгаагаар давхар сургагдсан хувилбарууд нь HumanEvalPack дээр өндөр гүйцэтгэлийг үзүүлж, бусад нээлттэй эх сурвалжтай (код) зааварчилгааны загваруудыг давж гарсан нь байгалийн хэлээр өгсөн заавруудтай кодны ажлуудад давуу талыг харуулсан (1-р зураг (доод хэсэг) -ийг үзнэ үү). Muennighoff et al. 2023 Jiang et al. 2023b AI@Meta 2024 Түүнээс гадна, нарийн төвөгтэй асуулт, ажлуудыг шийдвэрлэхэд ойлголт чухал тул бид Granite-8B-Code-Base загвараа зургаан математикийн багц дээр, түүний дотор MATH ( , ), GSM8K ( , ) болон тооцооллын хэрэгсэлтэй ажиллах чадварыг шалгасан бөгөөд энд Granite 8B загвар нь хамгийн сүүлийн үеийн 7B эсвэл 8B LLM-үүдээс илүү сайн гүйцэтгэлийг үзүүлсэн. Жишээлбэл, Granite-8B-Code-Base нь GSM8K дээр ∼12 оноогоор, MATH дээр ∼6 оноогоор Llama-3-8B-Base загварыг давж гарсан (44-р хүснэгтийг үзнэ үү). Cobbe et al. 2021 Cobbe et al. 2021 Granite Code загваруудын гол давуу талууд нь: : Granite Code загварууд нь код үүсгэх, тайлбарлах, засах, засварлах, хөрвүүлэх гэх мэт янз бүрийн кодоос хамааралтай ажлуудад өрсөлдөхүйц эсвэл шилдэг гүйцэтгэлийг харуулдаг бөгөөд энэ нь янз бүрийн кодын ажлуудыг шийдэх чадварыг нь харуулдаг; Бүх талаараа код LLM : Бүх загварууд нь IBM-ийн AI ёс зүйн зарчмууд -ийг дагаж цуглуулсан, лицензээр зөвшөөрөгдсөн өгөгдөл дээр сургагдсан бөгөөд IBM-ийн Корпорацийн Хуулийн багийн удирдлагаар найдвартай аж ахуйн нэгжийн хэрэглээнд зориулагдсан. Бүх Granite Code загварууд Apache 2.0 лицензээр гаргагдсан. Найдвартай аж ахуйн нэгжийн ангиллын LLM 1 Бид өгөгдөл цуглуулах, шүүх, боловсруулах бүх үйл явцыг 2-р хэсэгт тайлбарласан. 3-р хэсэг нь загварын архитектурын дэлгэрэнгүйг, 4-р хэсэг нь сургалтын дэлгэрэнгүйг тайлбарласан. 5-р хэсэгт зааварчилгааны давхар сургалтын дэлгэрэнгүйг, 6-р хэсэгт Granite Code загваруудыг бусад нээлттэй эх сурвалжтай LLM-үүдтэй харьцуулсан туршилтууд болон үр дүнг тайлбарласан. 2 2 Өгөгдөл цуглуулах Энэ хэсэгт бид код өгөгдлийг загвар сургалтанд бэлтгэхийн тулд ашигласан аалзны тор ба шүүлт (2.1-р хэсэг) , давхцал арилгах (2.2-р хэсэг) , HAP/PII шүүлт (2.3-р хэсэг) зэргийг тайлбарласан. Мөн загварын хэл ойлгох чадвар болон математикийн ойлголтыг сайжруулахын тулд ашигласан өндөр чанартай байгалийн хэлний өгөгдлүүдийн тоймыг өгсөн. 2.1 2.2 2.3 2.1 Өгөгдөл аалзлах ба шүүх Урьдчилсан сургалтын код өгөгдлийг Github Code Clean , StarCoderdata зэрэг олон нийтэд нээлттэй багцууд болон GitHub-ээс авсан нэмэлт олон нийтийн код сангуудаас авсан. Бид 300+ хэлнээс 116 програмчлалын хэлийг оруулахын тулд түүхий өгөгдлийг шүүсэн. Апендикст А -д жагсаасан. Програмчлалын хэл тус бүрт өгөгдлийг хуваарилах нь StarCoder ( , ) -тай ижил файл өргөтгөлийг үндэслэн хийгдсэн. Хэлний шүүлт хийсний дараа, бид чанар муутай кодыг шүүхийн тулд дөрвөн үндсэн шүүх дүрмийг хэрэглэсэн ( , ): (1) 25% -иас бага үсэг агуулсан файлуудыг хасах, (2) XSLT хэлнээс бусад тохиолдолд " <?xml version=” гэсэн тэмдэглэгээг эхний 100 тэмдэгтэд агуулсан файлуудыг шүүх, (3) HTML файлуудын хувьд, харагдах текст нь HTML кодын 20% -ийг эзэлж, хамгийн багадаа 100 тэмдэгтийн урттай файлуудыг хадгалах, (4) JSON болон YAML файлуудын хувьд, 50-5000 тэмдэгтийн хоорондох утгыг агуулсан файлуудыг хадгалах. Мөн бид чанарын үзүүлэлтүүдийн багцыг ашиглан GitHub асуултуудыг шүүж, автоматаар үүсгэгдсэн текстийг хасах, англи хэлнээс өөр асуултуудыг шүүх, ботуудын сэтгэгдлийг хасах, болон чанарын үзүүлэлт болгон хэлэлцүүлэгт оролцсон хэрэглэгчдийн тоог ашиглах зэргийг хийсэн. Бид мөн мэдээллийг ашиглан лицензийн мэдээллийг тохирох сан хөмрөгөөс олж, загвар сургалтанд зөвшөөрөгдсөн лицензтэй файлуудыг хадгалах болно. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 Яг болон төстэй давхцал арилгах Бид сургалтын өгөгдөл дээрээс (ойролцоо) ижил код агуулгыг агуулсан баримт бичгүүдийг арилгахын тулд яг болон төстэй давхцлыг арилгах нямбай стратегийг хэрэглэсэн. Яг давхцлыг арилгахын тулд, бид эхлээд баримт бичгийн агуулга дээр SHA256 хешийг бодож, ижил хеш бүхий бичлэгүүдийг арилгадаг. Яг давхцлыг арилгасны дараа, бага зэргийн өөрчлөлттэй код файлуудыг арилгах зорилгоор төстэй давхцлыг ашиглан өгөгдлийг дахин зохицуулна. Үүний тулд бид хоёр үе шаттай аргыг хэрэглэдэг: (1) бүх баримт бичгийн MinHash-ийг бодож, дараа нь тэдгээрийн MinHash хурууны хээний дагуу баримт бичгүүдийг бүлэглэхийн тулд Locality Sensitive Hashing (LSH) -ийг ашиглах, (2) ижил бүлгийн хоорондох баримт бичгийн хос бүрийн Jaccard төстэй байдлыг хэмжиж, 0.7-ийн төстэй байдлын босго дахь давхцал гэж тодорхойлж, нэгийг нь эс тооцвол бусад баримт бичгүүдийг тэмдэглэх. Бид сургалтын өгөгдлийн баялаг, өвөрмөц байдлыг сайжруулахын тулд GitHub асуултуудыг багтаасан бүх програмчлалын хэлүүд дээр энэ ойролцоо давхцлыг арилгах процессыг хэрэглэсэн. 2.3 HAP, PII, Malware шүүлт Загваруудаас аймшигтай, хүчирхийлэлтэй, эсвэл онцгүй хэл үүсэх магадлалыг бууруулахын тулд бид сургалтын багцаас HAP агуулгыг шүүхийн тулд шамшигт үйлдлүүдийг хийсэн. Эхлээд бид HAP түлхүүр үгсийн толь бичиг зохиож, агуулгын доторх сэтгэгдлүүдэд байдаг ийм түлхүүр үгсийн тоог тооцоолж, кодыг баримтжуулсан. Бид зохицуулалтын шинжилгээ болон кодыг баримт бичгүүдийг гараар үзэхэд суурилсан HAP босгыг давсан баримт бичгүүдийг хасдаг. Түүнээс гадна, нууцлалыг хамгаалахын тулд бид StarCoder ( , ) -ыг дагаж, сургалтын багцаас Хувийн мэдээлэл (PII) -ийг устгахын тулд шаргуу ажилласан. Тодруулбал, бид StarPII загварыг ашиглан IP хаягууд, түлхүүрүүд, имэйл хаягууд, нэрс, хэрэглэгчийн нэрс, болон нууц үгсийг олж илрүүлсэн. PII-ийг устгах үе шат нь PII текстийг NAME , EMAIL , KEY , PASSWORD гэсэн тохирох токенуудаар сольж, IP хаягийг Li et al. (2023a) -д байдаг синтетик байдлаар үүсгэсэн IP хаягаар сольдог. Мөн бид эх сурвалжийн кодонд хортой програм хангамжийн тохиолдлуудыг илрүүлэн арилгахын тулд манай багцуудыг ашиглан скан хийсэн. 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 Загварын архитектур Бид шилжүүлэгч декодер архитектур ( , ) дээр суурилсан янз бүрийн хэмжээтэй код загваруудыг сургасан. Эдгээр загваруудын гиперпараметрүүд нь 10-р хүснэгтэд өгөгдсөн. Бүх загварын архитектурт бид анхаарал ба MLP блокуудын оролтод хэрэглэгддэг урьдчилсан нормализацийг ( , ) ашигласан. Vaswani et al. 2017 10 Xiong et al. 2020 : Granite-code загварын гэр бүлийн хамгийн жижиг загвар нь RoPE embedding ( , ) болон Multi-Head Attention ( , ) -тай сургагдсан. Энэ загвар нь MLP- 3B Su et al. 2023 Vaswani et al. 2017