종이 | ? 포옹얼굴 컬렉션 | 토론 페이지
116개 프로그래밍 언어로 작성된 코드로 훈련된 코드 생성 작업(예: 버그 수정, 코드 설명, 코드 문서화)을 위한 디코더 전용 코드 모델의 Granite 시리즈를 소개합니다. 다양한 작업에 대한 Granite Code 모델 제품군에 대한 종합적인 평가는 우리 모델이 사용 가능한 오픈 소스 코드 LLM 중에서 지속적으로 최첨단 성능에 도달한다는 것을 보여줍니다.
Granite Code 모델의 주요 장점은 다음과 같습니다.
Granite Code Model 제품군은 두 가지 주요 변형으로 제공됩니다.
기본 모델과 지시 모델 모두 3B, 8B, 20B 및 34B 매개변수 크기로 제공됩니다.
코드 사전 훈련 데이터를 준비하는 프로세스에는 여러 단계가 포함됩니다. 먼저 공개적으로 사용 가능한 데이터 세트(예: GitHub Code Clean, Starcoder 데이터), 공개 코드 저장소 및 GitHub의 문제를 조합하여 수집합니다. 둘째, 데이터가 작성된 프로그래밍 언어(파일 확장자를 기준으로 결정)를 기반으로 수집된 코드 데이터를 필터링합니다. 그런 다음 코드 품질이 낮은 데이터도 필터링합니다. 셋째, 우리는 정확한 중복 제거와 퍼지 중복 제거를 모두 포함하는 공격적인 중복 제거 전략을 채택하여 코드 내용이 (거의) 동일한 문서를 제거합니다. 마지막으로 모델이 증오, 욕설 또는 모독적인 언어를 생성할 가능성을 줄이는 HAP 콘텐츠 필터를 적용합니다. 또한 PII 콘텐츠(예: 이름, 이메일 주소, 키, 비밀번호)를 해당 토큰(예: ⟨NAME⟩, ⟨EMAIL⟩, ⟨KEY⟩, ⟨PASSWORD⟩)으로 대체하여 개인 식별 정보(PII)를 수정합니다. . 또한 ClamAV를 사용하여 모든 데이터 세트를 검사하여 소스 코드에서 악성 코드 인스턴스를 식별하고 제거합니다. 모델 훈련을 위한 코드 데이터를 수집하는 것 외에도, 우리는 언어 이해 및 수학적 추론에서 모델의 숙련도를 향상시키기 위해 공개적으로 사용 가능한 여러 가지 고품질 자연어 데이터 세트를 선별합니다.
Granite Code Base 모델은 코드 데이터의 3-4T 토큰과 코드와 관련된 자연어 데이터 세트에 대해 훈련됩니다. 데이터는 StarCoder와 동일한 토크나이저를 사용하는 BPE(바이트 쌍 인코딩)를 통해 토큰화됩니다. 우리는 다음과 같은 두 단계의 학습을 통해 고품질 데이터를 활용합니다.
Granite Code Instruct 모델은 다음 유형의 명령 데이터에 따라 미세 조정됩니다. 1) CommitPackFT에서 가져온 코드 커밋, 2) 특히 MathInstruct 및 MetaMathQA를 사용한 고품질 수학 데이터 세트, 3) Glaive-Code-Assistant와 같은 코드 명령 데이터 세트 v3, Self-OSS-Instruct-SC2, Glaive-Function-Calling-v2, NL2SQL11 및 합성 API 호출 데이터 세트의 소규모 컬렉션, 4) HelpSteer 및 Platypus의 오픈 라이선스 필터링 버전과 같은 고품질 언어 명령 데이터 세트 .
우리는 HumanEvalPack, MBPP 및 MBPP+를 포함하되 이에 국한되지 않는 포괄적인 벤치마크 목록에서 코드 모델을 광범위하게 평가합니다. 이 벤치마크 세트에는 일반적으로 사용되는 프로그래밍 언어(예: Python, JavaScript, Java, Go, C++, Rust)의 다양한 코딩 작업이 포함됩니다.
연구 결과에 따르면 Granite Code 모델은 모델 크기 전반에 걸쳐 강력한 오픈 소스 모델보다 성능이 뛰어납니다. 아래 그림은 세 가지 코딩 작업에서 Granite-8B-Code-Base
Mistral-7B
, LLama-3-8B
및 기타 오픈 소스 모델보다 어떻게 뛰어난지 보여줍니다. 우리는 논문에서 추가 평가 결과를 제공합니다.
우리 모델을 사용하려면 다음에서 적절한 model_path
선택하세요.
ibm-granite/granite-3b-code-base-2k
ibm-granite/granite-3b-code-instruct-2k
ibm-granite/granite-8b-code-base-4k
ibm-granite/granite-8b-code-instruct-4k
ibm-granite/granite-20b-code-base-8k
ibm-granite/granite-20b-code-instruct-8k
ibm-granite/granite-34b-code-base-8k
ibm-granite/granite-34b-code-instruct-8k
from transformers import AutoModelForCausalLM , AutoTokenizer
device = "cuda" # or "cpu"
model_path = "ibm-granite/granite-3b-code-base-2k" # pick anyone from above list
tokenizer = AutoTokenizer . from_pretrained ( model_path )
# drop device_map if running on CPU
model = AutoModelForCausalLM . from_pretrained ( model_path , device_map = device )
model . eval ()
# change input text as desired
input_text = "def generate():"
# tokenize the text
input_tokens = tokenizer ( input_text , return_tensors = "pt" )
# transfer tokenized inputs to the device
for i in input_tokens :
input_tokens [ i ] = input_tokens [ i ]. to ( device )
# generate output tokens
output = model . generate ( ** input_tokens )
# decode output tokens into text
output = tokenizer . batch_decode ( output )
# loop over the batch to print, in this example the batch size is 1
for i in output :
print ( i )
우리는 모든 모델을 미세 조정(또는 명령 조정)하기 위해 Dolomite 엔진을 사용합니다. ibm-granite/granite-3b-code-base
미세 조정을 위한 샘플 스크립트를 제공합니다. 모델을 미세 조정하려면 다음 단계를 따르세요.
git clone https://github.com/IBM/dolomite-engine/
cd dolomite-engine
# you might need to modify configs/granite-example/training.yml
sh scripts/finetune.sh configs/granite-example/training.yml
# once the model is trained, convert to HuggingFace-compatible safetensors
sh scripts/export.sh configs/granite-example/export.yml
팁
훈련 중에 메모리 공간과 FLOP를 절약하기 위해 패딩 없는 변환기를 사용하려면 Dolomite 엔진 README의 지침을 따라 자세한 내용을 확인하세요.
우리 프로젝트에 기여하려면 지침과 행동 강령을 확인하십시오.
각 모델 변형의 모델 카드는 해당 HuggingFace 저장소에서 사용할 수 있습니다. 여기에서 우리 컬렉션을 방문해 보세요.
선택한 모델(이 예에서는 granite-3b-code-base)은 다음을 사용하여 복제할 수 있습니다.
git clone https://huggingface.co/ibm-granite/granite-3b-code-base-2k
모든 Granite 코드 모델은 Apache 2.0 라이센스에 따라 배포됩니다.
컬렉션을 방문하여 코드 모델 제품군에 대한 의견을 알려주십시오. 피드백을 제공하려는 모델의 저장소를 선택하세요. 그런 다음 커뮤니티 탭으로 이동하여 새 토론을 클릭합니다. 또는 github 토론 페이지에 질문/의견을 게시할 수도 있습니다.