```html Зохиогчид: Маянк Мишра⋆, IBM Мэтт Сталлоне⋆, IBM Гаоюань Жан⋆, IBM Икан Шен, IBM Адитья Прасад, IBM Адриана Меза Сориа, IBM Микеле Мерлер, IBM Парамесваран Селвам, IBM Саптха Сурендран, IBM Шивдип Сингх, IBM Маниш Сети, IBM Сюань-Хун Данг, IBM Пэнюань Ли, IBM Кун-Лунг Ву, IBM Сиед Завад, IBM Эндрю Коулман, IBM Мэттью Уайт, IBM Марк Льюис, IBM Раджу Павулури, IBM Ян Койфман, IBM Борис Люблинский, IBM Максимилиен де Байзер, IBM Ибрагим Абделазиз, IBM Кинжал Басу, IBM Маянк Агарвал, IBM И Жиу, IBM Крис Жонсон, IBM Аанчал Гоял, IBM Хима Пател, IBM Юсаф Шах, IBM Петрос Зерфос, IBM Хайко Людвиг, IBM Асим Мунавар, IBM Максвелл Крауз, IBM Паван Капанипати, IBM Швета Салариа, IBM Боб Калио, IBM София Вэн, IBM Ситархами Силам, IBM Брайан Белгодэр, IBM Карлос Фонсека, IBM Амит Синги, IBM Нирмит Десай, IBM Дэвид Д. Кокс, IBM Ручир Пури†, IBM Рамесвар Панда†, IBM Хураангуй Код дээр сургагдсан том хэлний загварууд (LLM) нь програм хангамж хөгжүүлэх процессыг хувьсган өөрчилж байна. Программистуудын бүтээмжийг дээшлүүлэхийн тулд код LLM-ийг програм хангамж хөгжүүлэх орчинд улам бүр нэгтгэж байгаа бөгөөд LLM-д суурилсан төлөөлөгчид нь нарийн төвөгтэй ажлуудыг бие даан гүйцэтгэх чадвартай болж байна. Код LLM-ийн бүрэн боломжийг хэрэгжүүлэхийн тулд код үүсгэх, алдааг засах, код тайлбарлах, баримтжуулах, сан хөмрөг хадгалах гэх мэт өргөн хүрээний чадварууд шаардлагатай. Энэхүү бүтээлд бид 116 програмчлалын хэл дээр бичсэн кодыг ашиглан сургасан код үүсгэх зорилготой гранит цуврал декодер-төвтэй код загваруудыг танилцуулж байна. Гранит кодын загварын гэр бүл нь 3-34 тэрбум параметр бүхий загваруудаас бүрдэх бөгөөд энэ нь програм хангамжийн хувиргалтын нарийн төвөгтэй ажлуудаас эхлээд гар утсанд зориулсан санах ой хязгаарлагдмал хэрэглээнд тохиромжтой. Ажлын цогц багц дээр хийсэн үнэлгээ нь гранит кодын загварууд нь нээлттэй эхийн код LLM-үүдийн дунд орчин үеийн хамгийн шилдэг гүйцэтгэлийг байнга харуулж байгааг харуулж байна. Гранит кодын загварын гэр бүл нь корпорацийн програм хангамжийн хөгжүүлэлтийн ажлын урсгалд зориулан оновчтой болгосон бөгөөд янз бүрийн кодын ажлуудад (жишээ нь, код үүсгэх, засах, тайлбарлах) сайн ажилладаг бөгөөд энэ нь олон талын "бүхнийг хамарсан" код загвар болгодог. Бид гранит кодын бүх загваруудыг судалгаа болон арилжааны зорилгоор 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-ийн лицензийн нөхцлүүд нь загварыг ашиглах корпорацийн чадварыг хязгаарлаж, төвөгтэй болгож болно. Энд бид янз бүрийн кодын ажлуудыг дэмжих зорилготой, маш чадвартай код LLM-ийн цуврал болох гранит код загваруудыг танилцуулж байна. Гранит кодын загварууд нь бидний гаргасан дөрвөн өөр хэмжээтэй (3B, 8B, 20B, болон 34B) хоёр үндсэн хувилбартай: кодтой холбоотой ажлуудын үндсэн суурь загварууд; Гранит Код Суурь: Git хуулбаруудыг хүний заавруудтай хослуулан, нээлттэй эхийн зохиомол байдлаар үүсгэсэн код зааврын багц дээр дахин сургасан зааварчилгааг дагаж мөрдөх загварууд. Гранит Код Заавар: Цуврал дахь суурь загварууд нь хоёр үе шаттай сургалтын стратегийг ашиглан анхнаас нь сургагдсан. Эхний үед, манай загвар нь 116 програмчлалын хэл дээр бичсэн 3-4 триллион тэмдэгтийн багцад сургагдсан нь програмчлалын хэл, синтаксийг цогц ойлголтыг баталгаажуулдаг. Хоёрдугаар үед, манай загвар нь 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 Бидний олж авсан үр дүн нь нээлттэй эхийн загваруудын дунд, гранит код загварууд нь бүх загварын хэмжээ, багц дээр маш хүчтэй гүйцэтгэлийг харуулдаг (ихэнхдээ граниттай харьцуулахад хоёр дахин том нээлттэй эхийн код загваруудыг давдаг). Жишээлбэл, 1-р зураг (доод хэсэг) нь гранит-8B-Код-Суурь ба бусад нээлттэй эхийн суурь код LLM-үүдийн, тэр дундаа Mistral ( , ) ба LLama-3 ( , ) зэрэг сүүлийн үеийн өндөр гүйцэтгэлтэй ерөнхий зориулалттай суурь LLM-үүдийг HumanEvalPack ( , ) дээр харьцуулсан байдлыг харуулж байна. CodeGemma болон StarCoder2 нь кодыг үүсгэхдээ сайн ажилладаг ч, HumanEvalPack-ийн код засах ба тайлбарлах хувилбаруудад ихээхэн муу ажилладаг. Дунджаар, гранит-8B-Код-Суурь нь хамгийн өрсөлдөх чадвартай CodeGemma-8B загвараас HumanEvalPack дээр бараг 12 оноогоор (33.2% ба 21.3%) илүү гүйцэтгэлтэй байдаг, гэхдээ асар бага хэмжээний тэмдэгтээр сургагдсан (4.5T ба 7.5T тэмдэгт). Суурь загваруудаас гадна, гранит кодын загваруудын зааварчилгаагаар сургагдсан хувилбарууд нь HumanEvalPack дээр хүчтэй гүйцэтгэлийг харуулж, бусад нээлттэй эхийн (код) зааварчилгааны загваруудыг давдаг бөгөөд байгалийн хэлний заавруудтай кодын ажлын өргөн хүрээнд ашиг тусаа харуулдаг (1-р зургийг үзнэ үү (доод хэсэг)). Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 Үүнээс гадна, нарийн төвөгтэй асуулт, ажлуудыг шийдвэрлэхэд ойлголт чухал учраас бид гранит-8B-Код-Суурь загварыг MATH ( , ), GSM8K ( , ) болон тооцоолох хэрэгсэлд хандах боломжтой ажлуудыг оруулан зургаан математикийн багц дээр туршиж үзсэн бөгөөд манай гранит 8B загвар нь хамгийн сүүлийн үеийн 7B эсвэл 8B LLM-үүдээс илүү гүйцэтгэлийг харуулсан. Жишээлбэл, гранит-8B-Код-Суурь нь GSM8K дээр Llama-3-8B-Суурьээс ~12 оноогоор, MATH дээр ~6 оноогоор илүү гүйцэтгэлтэй (15-р хүснэгтийг үзнэ үү). Cobbe et al. 2021 Cobbe et al. 2021 Гранит кодын загваруудын гол давуу талууд нь: : Гранит кодын загварууд нь код үүсгэх, тайлбарлах, засах, засварлах, орчуулах гэх мэт янз бүрийн кодын ажлуудад өрсөлдөх чадвартай эсвэл хамгийн шилдэг гүйцэтгэлийг олж авдаг нь олон төрлийн кодын ажлуудыг шийдвэрлэх чадварыг харуулдаг; Бүхнийг хамарсан Код LLM : Манай бүх загварууд нь IBM-ийн AI Этик зарчмууд -ийн дагуу цуглуулсан, лицензтэй нийцэх мэдээллүүд дээр сургагдсан бөгөөд IBM-ийн Корпорацийн Хуулийн багтай хамтран ажиллаж, найдвартай корпорацийн хэрэглээнд зориулагдсан. Бүх гранит кодын загварууд Apache 2.0 лицензийн дор нийтлэгддэг. Найдвартай Корпорацийн Зэрэглэлийн LLM 1 Бид мэдээлэл цуглуулах, шүүх, урьдчилан боловсруулах бүх үйл явцыг 2-р хэсэгт тайлбарласан. 2-р хэсэгт мэдээлэл цуглуулах, шүүх (2.1-р хэсэг), давхардалтыг арилгах (2.2-р хэсэг), HAP/PII шүүх (2.3-р хэсэг) зэрэг үйл явцыг загвар сургах зорилгоор кодыг бэлтгэхэд тайлбарласан. Мөн бид загварын хэл ойлгох чадварыг сайжруулах зорилгоор ашигласан өндөр чанартай байгалийн хэлний мэдээллийн тоймыг өгдөг. -р хэсэгт загвар архитектурын дэлгэрэнгүй мэдээллийг, 3-р хэсэгт загвар архитектурын дэлгэрэнгүй мэдээллийг, 4-р хэсэгт сургалтын дэлгэрэнгүй мэдээллийг тус тус тайлбарласан. 5-р хэсэгт зааварчилгааны сургалтын дэлгэрэнгүй мэдээллийг, 6-р хэсэгт гранит кодын загваруудыг бусад нээлттэй эхийн LLM-үүдтэй харьцуулсан туршилтууд болон үр дүнг тайлбарласан. 2 2 Мэдээлэл цуглуулах Энэ хэсэгт бид загвар сургах зорилгоор код мэдээллийг бэлтгэхэд ашигласан мэдээлэл цуглуулах болон шүүх (2.1-р хэсэг), давхардалтыг арилгах (2.2-р хэсэг), HAP/PII шүүх (2.3-р хэсэг) зэргийг тайлбарласан. Мөн бид загварын хэл ойлгох чадварыг сайжруулах зорилгоор ашигласан өндөр чанартай байгалийн хэлний мэдээллийн тоймыг өгдөг. 2.1 Мэдээлэл цуглуулах ба шүүх Урьдчилан сургах код мэдээлэл нь Github Code Clean , StarCoderdata зэрэг олон нийтэд танигдсан багцууд болон GitHub-аас нэмэлт олон нийтийн код сангуудаас авсан. Бид түүхий мэдээллийг шүүж, А-д жагсаасан 300 гаруй хэлний 116 програмчлалын хэлний жагсаалтыг хадгалж үлдсэн. Мэдээллийг програмчлалын хэлэнд хуваарилах нь StarCoder ( , ) шиг зөвхөн файлы өргөтгөлд үндэслэн хийгддэг. Хэлний шүүлт хийсний дараа бид чанар муутай кодыг шүүхийн тулд дөрвөн гол шүүх дүрмийг хэрэглэдэг ( , ): (1) 25%-иас доош үсэгтэй файлуудыг хасах, (2) XSLT хэлнээс бусад файлыг эхний 100 тэмдэгтийн дотор "<?xml version=" гэсэн үг агуулсан файлыг шүүх, (3) HTML файлуудын хувьд, харагдахуйц текст нь HTML кодын 20% -ийг эзэлдэг бөгөөд хамгийн багадаа 100 тэмдэгтийн урттай байдаг файлыг хадгална, (4) JSON ба YAML файлуудын хувьд, 50-5000 тэмдэгтийн хоорондох тэмдэгтийн тоотой файлуудыг хадгална. Бид мөн чанарын үзүүлэлтүүдийн багцыг ашиглан GitHub асуулгуудыг шүүж, автоматаар үүсгэсэн текстийг хасах, англи хэлний бус асуултуудыг шүүх, ботуудын тайлбарыг хасах, болон чанарын үзүүлэлт болгон ярианд оролцсон хэрэглэгчдийн тоог ашиглах зэрэг болно. Бид мөн хайрцаглах сангийн мэдээллийг лицензийн мэдээллээр код файлуудыг тодорхойлж, зөвхөн зөвшөөрөгдсөн лицензтэй файлыг загвар сургах зорилгоор хадгалдаг. 2 3 Li et al. 2023a Li et al. 2023a 2.2 Яг болон Зөөлөн давхардалтыг арилгах Бид сургалтын багцад (ойролцоо) ижил код агуулсан баримт бичгүүдийг арилгахын тулд яг болон зөөлөн давхардалтыг багтаасан идэвхтэй давхардалтыг арилгах аргыг хэрэглэдэг. Яг давхардалтыг арилгахын тулд бид эхлээд баримт бичгийн агуулгын SHA256 хэшийг тооцоолж, ижил хэштэй бүртгэлүүдийг хасдаг. Яг давхардалтыг арилгасны дараа бид бага зэрэг өөрчлөлттэй байж болох код файлуудыг арилгах зорилгоор бага зэрэг давхардалтыг хэрэглэдэг. Бид үүний тулд хоёр шаттай аргыг хэрэглэдэг: (1) бүх баримт бичгийн MinHash-ийг тооцоолж, дараа нь MinHash хурууны хэвлэлд үндэслэн баримт бичгүүдийг ангилахын тулд орон нутгийн мэдрэмтгий хэшийг (LSH) ашигладаг, (2) ижил багц дахь баримт бичгийн хос хоорондын Жаккардын төсөөллийг хэмжиж, 0.7-ийн төсөөллийн босго дээр үндэслэн давхардалтыг нэгээс бусад нь давхар гэж тэмдэглэнэ. Бид сургалтын багцын баялаг байдал, олон талт байдлыг сайжруулахын тулд GitHub асуулгуудыг багтаасан бүх програмчлалын хэлэнд энэ ойролцоо давхардалтыг арилгах процессыг хэрэглэдэг. 2.3 HAP, PII, Мэдээлэл аюулгүй байдлыг шүүх Загваруудаас үзэн ядсан, дарамттай эсвэл зохисгүй хэл үүсгэх магадлалыг бууруулахын тулд бид сургалтын багцаас үзэн ядсан, дарамттай эсвэл зохисгүй агуулгыг шүүхийн төлөө шаргуу ажилладаг. Эхлээд бид үзэн ядсан, дарамттай эсвэл зохисгүй үгсийн толь бичгийг бий болгож, дараа нь кодыг агуулсан болон тайлбаруудад эдгээр үгсийн тохиолдлын тоог агуулсан кодыг тэмдэглэдэг. Бид хуваарилалтын дүн шинжилгээ, код файлуудыг гараар шалгах үндсэн дээр тооцоологдсон үзэн ядсан, дарамттай эсвэл зохисгүй босго давсан баримт бичгүүдийг шүүдэг. Үүнээс гадна, хувийн мэдээллийн нууцлалыг хамгаалахын тулд бид StarCoder ( , )-ийг дагаж, сургалтын багцаас хувийн мэдээллийг (PII) устгахын төлөө шаргуу ажилладаг. Тодруулбал, бид IP хаягууд, түлхүүрүүд, имэйл хаягууд, нэрс, хэрэглэгчийн нэрс, нууц үгс зэргийг агуулсан агуулгыг илрүүлэхийн тулд StarPII загварыг ашигладаг. 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 Загвар архитектур Бид трансформаторын декодер архитектур ( , )-д үндэслэн янз бүрийн хэмжээтэй код загваруудын цувралыг сургадаг. Эдгээр загваруудын загвар гиперпараметрийг 1-р хүснэгтэд үзүүлэв. Бүх загвар архитектурын хувьд бид анхаарал ба MLP блокуудын оролтод хэрэглэдэг урьдчилсан энгийн байдлыг ( Vaswani et al. 2017