```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 모델 제품군은 30억에서 340억 개의 매개변수로 구성되어 있으며, 복잡한 애플리케이션 현대화 작업부터 온디바이스 메모리 제약이 있는 사용 사례에 이르기까지 다양한 애플리케이션에 적합합니다. 포괄적인 작업 세트에 대한 평가는 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의 라이선스 조건은 기업이 모델을 사용할 수 있는 능력을 제한하고 복잡하게 만들 수 있습니다. 여기에서는 다양한 코딩 작업을 지원하기 위해 설계된 매우 유능한 코드 LLM 시리즈인 Granite Code 모델을 제시합니다. Granite Code 모델에는 4가지 크기(30억, 80억, 200억, 340억)로 출시되는 두 가지 주요 변형이 있습니다. 코드 관련 작업을 위한 기본 재단 모델; Granite Code Base: Git 커밋과 인간 지침 및 오픈 소스 합성 코드 지침 데이터 세트를 결합하여 미세 조정된 지침 준수 모델. Granite Code Instruct: 시리즈의 기본 모델은 2단계 학습 전략으로 처음부터 학습되었습니다. 1단계에서는 116가지 프로그래밍 언어로 구성된 3조~4조 개의 토큰으로 모델을 학습하여 프로그래밍 언어 및 구문에 대한 포괄적인 이해를 보장합니다. 2단계에서는 추론 능력을 향상시키기 위해 코드 및 자연어 도메인의 고품질 데이터를 신중하게 혼합하여 5000억 개의 토큰으로 모델을 추가로 학습합니다. 두 단계 모두에서 비지도 언어 모델링 목표를 사용하여 기본 모델을 학습합니다. 지침 모델은 위에서 학습된 기본 모델을 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 HumanEvalPack( , ), MBPP+( , ; , ), RepoBench( , ), ReCode( , ) 등 포괄적인 벤치마크 세트에 대해 코드 LLM을 광범위하게 평가합니다. 이 벤치마크 세트에는 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 Code 모델이 전반적으로 매우 강력한 성능을 보여줍니다. 예를 들어, 그림 (상단)은 HumanEvalPack( , )에서 Mistral( , ) 및 LLama-3( , )과 같은 최신 고성능 범용 기본 LLM을 포함하여 다른 오픈 소스 기본 코드 LLM과 Granite-8B-Code-Base를 비교한 것입니다. CodeGemma와 StarCoder2가 코드 생성에서 합리적인 성능을 보이지만, HumanEvalPack의 코드 수정 및 설명 변형에서는 성능이 현저히 떨어집니다. 평균적으로 Granite-8B-Code-Base는 HumanEvalPack에서 경쟁력 있는 CodeGemma-8B 모델보다 거의 12포인트 더 높은 성능을 보이며(33.2% 대 21.3%), 학습 토큰 수는 훨씬 적습니다(4.5T 대 7.5T 토큰). 기본 모델 외에도 Granite Code 모델의 지침 튜닝 변형은 HumanEvalPack에서 강력한 성능을 보이며 다른 오픈 소스(코드) 지침 모델보다 성능이 우수하여 자연어 지침을 사용한 더 넓은 범위의 코딩 작업에 대한 이점을 보여줍니다(그림 (하단) 참조). 1 Muennighoff et al. 2023 Jiang et al. 2023b AI@Meta 2024 1 또한 추론은 복잡한 질문과 작업을 해결하는 데 중요하므로 MATH( , ), GSM8K( , )를 포함한 6개의 수학 벤치마크와 계산 도구에 액세스하여 문제를 해결하는 작업을 테스트합니다. 여기서 Granite 8B 모델은 대부분의 최첨단 7B 또는 8B LLM보다 우수한 성능을 달성합니다. 예를 들어 Granite-8B-Code-Base는 GSM8K에서 Llama-3-8B-Base보다 약 12포인트, MATH에서 약 6포인트 더 높은 성능을 보입니다(표 참조). Cobbe et al. 2021 Cobbe et al. 2021 15 Granite Code 모델의 주요 장점은 다음과 같습니다. : Granite Code 모델은 코드 생성, 설명, 수정, 편집, 번역 등을 포함한 다양한 종류의 코드 관련 작업에서 경쟁력 있거나 최첨단 성능을 달성하여 다양한 코딩 작업을 해결할 수 있는 능력을 보여줍니다. 올라운드 코드 LLM : 모든 모델은 IBM의 AI 윤리 원칙 에 따라 수집되고 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 데이터 크롤링 및 필터링 사전 학습 코드 데이터는 Github Code Clean , StarCoderdata 와 같은 공개적으로 사용 가능한 데이터 세트와 GitHub의 추가 공개 코드 리포지토리 및 이슈를 결합하여 소싱했습니다. 원시 데이터에서 300개 이상의 언어 중에서 116개의 프로그래밍 언어 목록을 유지하기 위해 필터링합니다. 부록 에 나와 있습니다. 데이터의 프로그래밍 언어 할당은 StarCoder( , )와 유사하게 파일 확장명을 기준으로 수행됩니다. 언어 필터링 후, 저품질 코드를 필터링하기 위해 4가지 주요 필터링 규칙을 적용합니다( , ): (1) 알파벳 문자가 25% 미만인 파일 제거, (2) XSLT 언어를 제외하고 문자열 “<?xml version=”이 첫 100자 내에 나타나는 파일 필터링, (3) HTML 파일의 경우 가시 텍스트가 HTML 코드의 20% 이상을 차지하고 최소 길이가 100자인 파일만 유지, (4) JSON 및 YAML 파일의 경우 문자 수가 50~5000자인 파일만 유지합니다. 또한 자동 생성된 텍스트 제거, 영어 이외 이슈 필터링, 봇 댓글 제외, 대화에 참여한 사용자 수를 품질 지표로 사용하는 등 품질 메트릭 세트를 사용하여 GitHub 이슈를 필터링합니다. 또한 GitHub API를 통해 해당 리포지토리에 연결된 라이선스 정보를 각 코드 파일에 주석으로 달고 모델 학습을 위해 허용적인 라이선스를 가진 파일만 유지합니다. 2 3 A Li et al. 2023a Li et al. 2023a 2.2 정확 및 퍼지 중복 제거 학습 세트에서 (거의) 동일한 코드 콘텐츠를 가진 문서를 제거하기 위해 정확 및 퍼지 중복 제거를 포함한 공격적인 중복 제거 전략을 채택합니다. 정확 중복 제거의 경우 먼저 문서 콘텐츠에 대한 SHA256 해시를 계산하고 동일한 해시를 가진 레코드를 제거합니다. 정확 중복 제거 후, 약간의 변형이 있는 코드 파일을 제거하여 데이터를 더욱 편향 없이 만들기 위해 퍼지 중복 제거를 적용합니다. 이를 위해 2단계 방법을 사용합니다: (1) 모든 문서의 MinHash를 계산한 다음 LSH(Locally Sensitive Hashing)를 사용하여 MinHash 핑거프린트를 기반으로 문서를 그룹화합니다. (2) 동일한 버킷 내의 각 문서 쌍 간의 Jaccard 유사도를 측정하고 유사도 임계값 0.7을 기반으로 중복으로 주석이 달린 문서(하나 제외)를 식별합니다. 학습 데이터 세트의 풍부함과 다양성을 향상시키기 위해 GitHub 이슈를 포함한 모든 프로그래밍 언어에 이 근사 중복 제거 프로세스를 적용합니다. 2.3 HAP, PII, 멀웨어 필터링 모델에서 증오, 학대 또는 비속어(HAP) 언어를 생성할 가능성을 줄이기 위해 학습 세트에서 HAP 콘텐츠를 필터링하기 위해 신중한 노력을 기울입니다. 먼저 HAP 키워드 사전을 만들고 각 코드 문서에 이러한 키워드의 발생 횟수를 콘텐츠(주석 포함)에서 주석으로 추가합니다. 분포 분석 및 코드 파일 수동 검사를 기반으로 계산된 HAP 임계값을 초과하는 문서를 필터링합니다. 또한 개인 정보 보호를 위해 StarCoder( , )를 따르고 학습 세트에서 PII(개인 식별 정보)를 수정하기 위해 신중한 노력을 기울입니다. 구체적으로 StarPII 모델을 활용하여 콘텐츠에서 발견된 IP 주소, 키, 이메일 주소, 이름, 사용자 이름 및 암호를 탐지합니다. PII 수정 단계는 PII 텍스트를 해당 토큰 NAME, EMAIL, KEY, PASSWORD로 대체하고 Li et al.(2023a)의 합성 IP 주소로 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 모델 아키텍처 트랜스포머 디코더 아키텍처( , )를 기반으로 다양한 크기의 코드 모델 시리즈를 학습합니다. 이러한 모델의 모델 하이퍼파라미터는 표 에 나와 있습니다. 모든 모델 아키텍처에 대해 어텐션 및 MLP 블록의 입력에 적용되는 사전 정규화( , )를 사용합니다. Vaswani et al. 2017 1 Xiong et al. 2020 : Granite-code 모델 제품군 중 가장 작은 모델은 RoPE 임베딩( , )과 다중 헤드 어텐션( , )으로 학습됩니다. 이 모델은 MLP에 GLU( , )를 사용하여 swish 활성화 함수( , )를 사용하며, 이는 일반적으로 swiglu라고도 합니다. 정규화에는 LayerNorm( , )보다 계산 효율성이 높기 때문에 RMSNorm( , )을 사용합니다. 3B 모델은 2048 토큰의 컨텍스트 길이로 학습됩니다. 3B Su et al. 2023 Vaswani et al. 2017 Shazeer 2020 Ramachandran et al. 2017 Ba et al. 2016 Zhang & Sennrich 2019 : 8B 모델은 그룹화된 쿼리 어텐션(GQA)( , )을 사용하는 것을 제외하고는 3B 모델과 유사한 아키텍처를 갖습니다. GQA를 사용하면 이 규모에서 모델 성능과 추론 효율성 간의 더 나은 절충점을 제공합니다. 8B 모델은 4096 토큰의 컨텍스트 길이로 학습됩니다. 8B Ainslie et al. 2023 : 20B 코드 모델은 학습된 절대 위치 임베딩을 사용하여 학습됩니다. 효율적인 다운스트림 추론을 위해 학습 중에 다중 쿼리 어텐션( , )을 사용합니다. MLP 블록의 경우 GELU 활성화 함수( , )를 사용합니다. 활성화 정규화에는 LayerNorm( , )을 사용합니다. 이 모델은 8192 토큰의 컨텍스트 길이로 학습됩니다. 20B Shazeer 2019 Hendrycks & Gimpel 2023 Ba et al. 2016 : 34B 모델을 학습시키기 위해 의 접근 방식을 따라 20B 모델의 깊이를 확장합니다. 구체적으로, 먼저 52개의 레이어를 가진 20B 코드 모델을 복제한 다음, 원래 모델에서 마지막 8개 레이어를 제거하고 복제본에서 초기 8개 레이어를 제거하여 두 개의 모델을 형성합니다. 34B Kim et al. 마지막으로 두 모델을 연결하여 Granite-34B-Code 모델을 88개의 레이어로 구성합니다(그림 참조). 깊이 확장을 한 후, 이 관찰한 것과 달리 20B 모델에 비해 성능 저하가 매우 작다는 것을 알 수 있습니다. 이 성능은 확장된 34B 모델의 사전 학습을 계속한 후에 빠르게 회복됩니다. 20B 모델과 유사하게 사전 학습 중에 8192 토큰 컨텍스트를 사용합니다. 2 Kim et al. 4 사전 학습 이 섹션에서는 모델 사전 학습에 사용된 2단계 학습(섹션 ), 학습 목표(섹션 ), 최적화(섹션 ) 및 인프라(섹션 )에 대한 세부 정보를 제공합니다. 4.1 4.2 4.3 4.4 4.1 2단계 학습 Granite Code 모델은 코드 데이터 및 코드 관련 자연어 데이터 세트 3.5T~4.5T 토큰으로 학습됩니다. 데이터는 StarCoder( , )와 동일한 토크나이저를 사용하는 BPE(byte pair encoding)( , )를 통해 토큰화됩니다. ( , ; , )을 따라 다음과 같은 두 가지 단계의 학습을 통해 고품질 데이터를 활용합니다. Li et al. 2023a Sennrich et al. 2015 Shen et al. 2024 Hu et al. 2024 • : 1단계 동안 3B 및 8B 모델은 116개 언어로 구성된 4조 개의 코드 데이터로 학습됩니다. 20B 매개변수 모델은 3조 개의 코드로 학습됩니다. 34B 모델은 20B 모델의 1.6T 체크포인트에서 수행된 깊이 확장을 거쳐 1.4T 토큰으로 학습됩니다. 1단계(코드만 학습) • : 2단계에서는 기술, 수학, 웹 문서 등 다양한 도메인의 추가 고품질 공개 데이터를 포함하여 모델의 추론 및 문제 해결 능력 향상을 위한 성능을 개선합니다. 이는 코드 생성에 필수적입니다. 2단계 학습에서 모든 모델은 5000억 토큰(80% 코드 및 20% 언어 데이터)으로 학습합니다. 2단계(코드 + 언어 학습) 4.2 학습 목표 모든 모델의 학습을 위해 인과 언어 모델링 목표와 FIM(Fill-In-the-Middle)( , ) 목표를 사용합니다. FIM 목표는 주어진 컨텍스트와 후속 텍스트로 삽입된 토큰을 예측하는 작업을 수행합니다. StarCoder( , )와 동일한 관련 형식 제어 토큰을 사용하여 PSM(Prefix-Suffix-Middle) 및 SPM(Suffix-Prefix-Middle) 모드 모두와 작동하도록 모델을 학습합니다. Bavarian et al. 2022 Li et al. 2023a 전체 손실은 2가지 목표의 가중 조합으로 계산됩니다. 학습 중에 = 0.5를 경험적으로 설정하고 이것이 코드 완료 및 코드 인필링 작업 모두에서 SOTA 성능으로 이어지는 실무에 잘 맞는다는 것을 발견했습니다. FIM 목표는 사전 학습 중에만 사용되고 지침 미세 조정 중에는 삭제됩니다(즉, = 1로 설정됨)는 점에 유의해야 합니다. α α 4.3 최적화 모든 Granite 코드 모델 학습을 위해 β1 = 0.9, β2 = 0.95 및 가중치 감소 0.1을 사용하여 AdamW 옵티마이저([Kingma & Ba](#_bookmark80), [2017](#_bookmark80))를 사용합니다. 1단계 사전 학습의 경우 학습률은 2k 반복의 초기 선형 워밍업 단계를 거쳐 3 10−5로 감소하는 3 10−4에서 시작하는 코사인 스케줄을 따릅니다. 2단계 사전 학습의 경우 3 10−4(20B 및 34B 모델의 경우 1.5 10−4)에서 시작하고 초기 학습률의 10%로 감소하는 지수 감소 스케줄을 채택합니다. 사전 학습의 두 단계 모두에서 모델 크기에 따라 4백만~5백만 토큰의 배치 크기를 사용합니다. 학습을 가속화하기 위해 NVIDIA의 Apex 라이브러리에서 사용할 수 있는 FlashAttention 2( , ; , ), 지속적인 레이어 정규화 커널, 융합 RMSNorm 커널(모델에 따라 다름) 및 융합 Adam 커널을 사용합니다. 모든 모델의 분산 학습을 위해 NVIDIA의 Megatron-LM( , ; , )의 사용자 정의 포크를 사용합니다. 3D 병렬 처리(텐서 병렬, 파이프라인 병렬 및 데이터 병렬)의 혼합으로 학습합니다. 또한 학습 중 대규모 컨텍스트 길이의 활성화 메모리 소비를 줄이기 위해 시퀀스 병렬 처리( , )를 사용합니다. 학습 안정성을 위해 BF16( , )에서 혼합 정밀도 학습( , ) 및 FP32에서 기울기 all-reduce 및 기울기 축적을 사용하는 Megatron의 분산 옵티마이저를 사용합니다. Dao et al. 2022 Dao 2023 Shoeybi et al. 2019 Narayanan et al. 2021 Korthikanti et al. 2023 Kalamkar et al. 2019 Micikevicius et al. 2018 4.4 인프라 IBM의 두 슈퍼컴퓨터 클러스터인 Vela와 Blue Vela를 사용하여 NVIDIA A100 및 H100 GPU를 각각 갖춘 Granite Code 모델을 학습시킵니다. Vela A100 GPU 클러스터에서는 각 노드에 2개의 Intel Xeon 확장 프로세서와 NVLink 및 N