Зохиогчид: 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 програмчлалын хэл дээр код бичих замаар сургагдсан код үүсгэх зорилготой Гранит цуврал декодер-төвтэй загваруудыг танилцуулж байна. Гранит Код загваруудын гэр бүл нь 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-ийн гүйлгээнүүд ба хүний зааврууд, нээлттэй эхийн синтетик байдлаар үүсгэсэн код зааврын дата багцтай хослуулан боловсруулсан зааварчилга дагаж мөрдөх загварууд. Гранит Код Заавар Энэ цувралын үндсэн загварууд нь хоёр үе шаттай сургалтын стратеги ашиглан анхнаас нь сургагдсан. 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 Бидний ололт амжилт нь нээлттэй эхийн загваруудын дунд Гранит Код загварууд нь бүх загварын хэмжээ, багц дээр маш сайн гүйцэтгэлийг харуулдаг (ихэвчлэн Граниттай харьцуулахад хоёр дахин том нээлттэй эхийн код загваруудаас давж гардаг). Жишээлбэл, 1-р зураг (дээд) нь Granite-8B-Code-Base ба бусад нээлттэй эхийн үндсэн код LLM-үүдийг, түүний дотор Mistral ( , ) ба LLama-3 ( , ) зэрэг сүүлийн үеийн өндөр гүйцэтгэлтэй ерөнхий зориулалтын үндсэн LLM-ийг HumanEvalPack ( , ) дээр харьцуулсан болно. CodeGemma ба StarCoder2 нь кодыг үүсгэхэд сайн ажилладаг боловч HumanEvalPack-ийн код засах ба тайлбарлах хувилбаруудад хамаагүй дор ажилладаг. Дунджаар, Granite-8B-Code-Base нь хамгийн өрсөлдөх чадвартай CodeGemma-8B загвараас HumanEvalPack дээр бараг 12 оноогоор (33.2% vs 21.3%) давж гардаг боловч бага токен дээр (4.5T vs 7.5T токен) сургагдсан байдаг. Үндсэн загваруудаас гадна манай Гранит Код загваруудын зааварчилгаар боловсруулсан хувилбарууд нь HumanEvalPack дээр сайн гүйцэтгэлийг харуулдаг, бусад нээлттэй эхийн (код) зааварчилгааны загваруудаас давж гардаг нь байгалийн хэлний зааварчилгатай кодын ажлуудын илүү өргөн хүрээнд ашиг тусыг харуулж байна (1-р зураг (доод) үзнэ үү). Jiang et al. 2023b AI@Meta 2024 Muennighoff et al. 2023 Нэмж дурдахад, бодол нь нарийн төвөгтэй асуулт, ажлыг шийдвэрлэхэд чухал тул бид Granite-8B-Code-Base загварыг MATH ( , ), GSM8K ( , ) болон тооцоолох хэрэгсэлд хандах боломжтой асуудлыг шийдвэрлэх зэрэг зургаан математикийн багц дээр туршиж үзсэн бөгөөд тэнд манай Granite 8B загвар нь хамгийн сүүлийн үеийн 7B эсвэл 8B LLM-ээс илүү гүйцэтгэлийг хангадаг. Жишээлбэл, Granite-8B-Code-Base нь GSM8K дээр ∼12 оноогоор ба MATH дээр ∼6 оноогоор Llama-3-8B-Base-аас давж гардаг (15-р хүснэгтийг үзнэ үү). Cobbe et al. 2021 Cobbe et al. 2021 Гранит Код загваруудын гол давуу талууд нь: : Гранит Код загварууд нь код үүсгэх, тайлбарлах, засах, засварлах, орчуулах гэх мэт янз бүрийн төрлийн кодтой холбоотой ажлууд дээр өрсөлдөх чадвартай эсвэл хамгийн сүүлийн үеийн гүйцэтгэлийг хангадаг нь тэдний янз бүрийн кодын ажлыг шийдвэрлэх чадварыг харуулдаг; Бүх талын Код LLM : Манай бүх загварууд нь IBM-ийн AI ёс зүйн зарчмуудын дагуу цуглуулсан, зөвшөөрөгдсөн лицензтэй өгөгдөл дээр сургагдсан ба IBM-ийн корпорацийн хуулийн багт итгэмжит корпорацийн хэрэглээг удирдан чиглүүлдэг. Бүх Гранит Код загварууд нь Apache 2.0 лицензийн дор гаргагддаг. Итгэмжит Корпорацийн Түвшний LLM 1 Бид өгөгдөл цуглуулах, шүүх, урьдчилсан боловсруулах бүх үйл явцыг 2-р хэсэгт тайлбарласан. . 3-р хэсэг нь загварын архитектурын дэлгэрэнгүй мэдээллийг, 4-р хэсэг нь сургалтын дэлгэрэнгүй мэдээллийг тус тус тайлбарладаг. 2 . 4-р хэсэг нь загварын архитектурын дэлгэрэнгүйг, -р хэсэг нь сургалтын дэлгэрэнгүйг тус тус тайлбарладаг. 3 5 . 5-р хэсэг нь зааварчилгааны боловсруулалтын дэлгэрэнгүйг, -р хэсэг нь бусад нээлттэй эхийн LLM-тэй Гранит Код загваруудыг харьцуулсан туршилтууд ба үр дүнг тайлбарладаг. 4 6 2 Өгөгдөл цуглуулах Энэ хэсэгт бид кодны өгөгдлийг загвар сургалтанд бэлтгэх зорилгоор ашигласан мөлхөлт ба шүүлт (2.1-р хэсэг), давхраагүй болгох (2.2-р хэсэг), HAP/PII шүүлт (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 асуудлуудыг шүүдэг бөгөөд энэ нь автоматаар үүсгэсэн текстийг хасах, англи хэл биш асуудлуудыг шүүх, ботуудын сэтгэгдлийг хасах, чанарын үзүүлэлт болгон хэлэлцүүлэгт оролцсон хэрэглэгчдийн тоог ашиглах зэргийг багтаана. Бид мөн тухайн репозиторитой холбоотой лицензийн мэдээллийг GitHub API-аар дамжуулан код файлаар аннотаци хийж, загвар сургалтанд зөвшөөрөгдсөн лицензтэй файлуудыг л хадгалдаг. 2 3 Li et al. 2023a Li et al. 2023a 2.2 Нарийвчлал ба бүдэгчлэлтэй давхраагүй болгох Бид сургалтын өгөгдөл дээр (бараг) ижил код агуулгатай баримтуудыг арилгахын тулд нарийвчлал ба бүдэгчлэлтэй хатуу давхраагүй болгох стратегийг баримталдаг. Нарийвчлалтай давхраагүй болгохын тулд бид эхлээд баримт бичгийн агуулгын SHA256 хэшийг тооцоолж, ижил хэштэй бичлэгүүдийг арилгана. Нарийвчлалтай давхраагүй болгох дараа, бага зэргийн өөрчлөлтүүдтэй байж болох код файлуудыг арилгах зорилготой бүдэгчлэлтэй давхраагүй болгох аргыг хэрэглэдэг бөгөөд ингэснээр өгөгдлийг цаашид тэнцвэржүүлэх болно. Үүний тулд бид хоёр үе шаттай аргыг хэрэглэдэг: (1) бүх баримт бичгийн MinHash-ийг тооцоолж, дараа нь MinHash хурууны хэвлэл дээр тулгуурлан баримт бичгүүдийг бүлэглэхийн тулд Орон нутгийн мэдрэмжтэйHashing (LSH) -ийг ашиглах, (2) ижил сагт байгаа баримт бичгийн хос бүрийн хоорондох Jaccard төсөөллийг хэмжиж, 0.7-ийн төсөөллийн босго дээр тулгуурлан давхраа гэж тэмдэглэгдсэнээс бусад баримт бичгийг арилгах. Бид сургалтын дата багцын баялаг ба төрөл зүйлийг сайжруулахын тулд GitHub асуудлуудыг багтаасан бүх програмчлалын хэлүүдэд энэ ойрын давхраагүй болгох процессыг хэрэглэдэг. 2.3 HAP, PII, Хорт хавдар шүүлт Загваруудаас үзэн ядалт, халдлага, эсвэл ёс бус хэл (HAP) үүсгэх магадлалыг бууруулахын тулд бид сургалтын багцаас HAP агуулгыг шүүхийн төлөө хичээл зүтгэл гаргадаг. Бид эхлээд HAP түлхүүр үгсийн толь бичиг үүсгэж, дараа нь кодны баримт бичгийг агуулга, сэтгэгдлийг багтаасан эдгээр түлхүүр үгсийн давталтын тоогоор аннотаци хийдэг. Бид тархалтын дүн шинжилгээ, мөн код файлуудыг гараар шалгасны үндсэн дээр тооцоолсон HAP босгоос хэтэрсэн баримт бичгийг шүүдэг. Үүнээс гадна, хувийн нууцыг хамгаалахын тулд бид 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 Загвар архитектур Бид трансформаторын декодер архитектур ( , )-д суурилсан янз бүрийн хэмжээтэй код загваруудын цувралыг сургадаг. Эдгээр загваруудын загварын гиперпараметрүүд нь 10-р хүснэгтэд өгөгдсөн. Бүх загварын архитектурын хувьд бид анхаарал ба MLP блокуудын оролтод хэрэглэгддэг урьдчилсан нормализацийг ( , ) ашигладаг. Vaswani et al. 2017 Xiong et al. 2020 : Гранит-код загварын гэр бүлийн хамгийн жижиг загвар нь RoPE embedding ( , ) ба Multi-Head Attention ( 3B Su et al. 2023 Vaswani et