IBM, Code LLM 'Granite Code Models'를 공개하며 Open LLM 경쟁에 참여
소개
최근 IBM에서 공개한 그라나이트 코드 모델(Granite Code Models) 시리즈는 코드 생성 작업에 특화된 디코더 전용 모델로, 다양한 프로그래밍 언어로 작성된 코드를 이용해 훈련되었습니다. 이 모델들은 버그 수정, 코드 설명, 문서화 등 다양한 코드 관련 작업에서 뛰어난 성능을 보여줍니다. 기업 수준에서 신뢰할 수 있는 대규모 언어 모델로서, 오픈 소스 코드 LLM 중에서도 최고의 성능을 보인다고 합니다.
그라나이트 코드 모델들은 다양한 크기(3B, 8B, 20B, 34B 매개변수)로 제공되며, 기본 모델과 지시 모델 두 가지 유형이 있습니다. 이들 모델은 116개의 프로그래밍 언어로 작성된 코드를 학습하고, 실제 코드 관련 작업에 적용 가능한 능력을 갖추고 있습니다. 라이선스가 허용하는 데이터를 사용하여 학습되었고, IBM의 AI 윤리 원칙에 따라 데이터 수집 및 처리가 이루어졌습니다.
주요 특징
-
다재다능한 코드 LLM: 코드 생성, 설명, 수정, 편집, 번역 등 다양한 종류의 코드 관련 작업에서 경쟁력 있는 성능을 보여줍니다.
-
신뢰할 수 있는 기업급 LLM: IBM의 법률 팀의 지침에 따라 훈련 데이터를 수집하고, Apache 2.0 라이선스 하에 모델을 공개하여 연구 및 상업적 사용이 가능합니다.
사전 학습 (Pretraining)
그라나이트 코드 베이스 모델은 코드 데이터와 코드 관련 자연 언어 데이터셋을 이용한 대규모 토큰을 기반으로 훈련됩니다. 이 데이터는 바이트 페어 인코딩(BPE) 방식을 사용하여 토큰화되며, 이는 StarCoder의 토크나이저와 동일합니다. 사전 학습 과정은 다음의 두 단계로 나뉘어 진행됩니다:
-
1단계 (코드만을 대상으로 한 훈련): 이 단계에서는 3B 및 8B 모델이 116개 언어로 구성된 4조 토큰의 코드 데이터로 훈련됩니다. 20B 매개변수 모델은 3조 토큰의 코드로, 34B 모델은 20B 모델의 1.6조 토큰 체크포인트를 기반으로 한 깊이 확장 후 1.4조 토큰으로 훈련됩니다.
-
2단계 (코드 + 언어 훈련): 이 단계에서는 기술, 수학, 웹 문서 등 다양한 영역의 고품질 공개 데이터를 추가하여 모델의 성능을 더욱 향상시킵니다. 모든 모델은 2단계 훈련에서 5000억 토큰(80% 코드, 20% 언어 혼합)으로 훈련됩니다.
지시 튜닝 (Instruction Tuning)
그라나이트 코드 인스트럭트 모델은 다음과 같은 다양한 유형의 지시 데이터에 맞추어 미세 조정됩니다:
-
코드 커밋 데이터: CommitPackFT에서 추출된 코드 커밋.
-
고품질 수학 데이터셋: MathInstruct 및 MetaMathQA 사용.
-
코드 지시 데이터셋: Glaive-Code-Assistant-v3, Self-OSS-Instruct-SC2, Glaive-Function-Calling-v2, NL2SQL11 및 작은 규모의 합성 API 호출 데이터셋.
이러한 튜닝은 모델이 실제 코드 관련 작업에서 보다 정확하고 효율적으로 작동하도록 돕습니다.
사용 방법
그라나이트 코드 모델을 사용하기 위해서는 Hugging Face에서 모델 경로를 선택하고 해당 모델을 로드하여 사용합니다. model_path
부분에 사용할 수 있는 모델 종류는 다음과 같습니다:
ibm-granite/granite-3b-code-base
ibm-granite/granite-3b-code-instruct
ibm-granite/granite-8b-code-base
ibm-granite/granite-8b-code-instruct
ibm-granite/granite-20b-code-base
ibm-granite/granite-20b-code-instruct
ibm-granite/granite-34b-code-base
ibm-granite/granite-34b-code-instruct
예를들어, 파이썬 환경에서는 다음과 같이 모델을 불러와서 사용할 수 있습니다:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("ibm-granite/granite-3b-code-base")
model = AutoModelForCausalLM.from_pretrained("ibm-granite/granite-3b-code-base")
model.eval()
input_text = "def generate():"
input_tokens = tokenizer(input_text, return_tensors="pt")
output = model.generate(**input_tokens)
output_text = tokenizer.decode(output[0])
print(output_text)
성능 비교
그라나이트 코드 모델의 성능 평가는 여러 코드 관련 작업에 걸쳐 진행되었습니다. 이 모델들은 특히 Python, JavaScript, Java, Go, C++, Rust 등의 프로그래밍 언어를 포함한 다양한 코딩 작업에서 평가되었습니다. 평가에 사용한 주요 벤치마크들은 다음과 같습니다:
- HumanEvalPack: 자연어 처리 기반의 코드 생성을 평가하는 벤치마크
- MBPP: Python 프로그래밍 문제를 해결하는 능력을 평가
- MBPP+: MBPP의 확장판으로 더 다양한 코드 문제를 포함
성능 평가 결과는 아래 차트와 같습니다:
그라나이트 코드 모델은 특히 큰 매개변수 모델에서 우수한 성능을 보였습니다. 모델의 크기가 클수록 더 복잡한 코드 작업을 더 효과적으로 처리할 수 있는 것으로 나타났습니다. 예를 들어, Granite-8B-Code-Base
는 위의 벤치마크에서 Mistral-7B
및 LLama-3-8B
모델을 능가하는 결과를 보여주었습니다.
라이선스
IBM이 공개한 Granite Code Models는 Apache 2.0 라이선스로 공개 및 배포되고 있습니다.
더 읽어보기
Granite Code Models 논문
Granite Code Models GitHub 저장소
Granite Code Models Hugging Face
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래쪽에 좋아요를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~