PyTorchKR
- Google이 작정(?)하고 Gemma를 밀고 있는 것 같습니다. 모델 공개 초기부터 다양한 예제 코드들을 공개한데 이어서, Android에서 On-Device로 올리는 방법도 공개하고, 이번에는 Code LLM으로 파인튜닝한 CodeGemma도 공개하였습니다.
Google, Code LLM CodeGemma 2B / 7B 모델 공개
소개
CodeGemma는 코드 완성과 생성을 위해 특별히 설계된, Google의 코드 전문 LLM 모델들입니다. 이 모델들은 기존 Gemma 체크포인트를 기반으로, 추가적으로 주로 영어, 수학, 코드 데이터로 구성된 5000억 토큰에 대한 학습을 통해 논리적, 수학적 추론 능력을 향상시켰습니다. CodeGemma는 빠른 코드 완성과 생성에 적합하며, 레이턴시와 프라이버시가 중요한 설정에서 특히 유용할 것으로 보입니다.
Model | Pretraining size [tokens] | Python | JavaScript |
---|---|---|---|
10B+ models | |||
StarCoder 2 15B | 4,000B+ | 44.15 | 44.24 |
Code Llama 13B | 2,500B | 35.07 | 38.26 |
Code Llama 13B | 2,620B | 50.6 | 40.92 |
Code Llama 13B | 2,620B | 42.89 | 40.66 |
7B models | |||
DeepSeek Coder 7B | 2,000B | 45.83 | 45.9 |
CodeGemma 7B | 500B of extra training | 40.13 | 43.06 |
CodeGemma 7B | 500B | 52.74 | 47.71 |
Code Llama 7B | 2,500B | 29.98 | 31.8 |
Code Llama 7B | 2,620B | 40.48 | 36.34 |
Code Llama 7B | 2,620B | 25.65 | 33.11 |
StarCoder 2 7B | 3,500B+ | 34.09 | 35.35 |
StarCoderBase 7B | 3,000B+ | 28.37 | 27.35 |
<3B models | |||
CodeGemma 2B | 500B of extra training | 27.28 | 29.94 |
Stable Code 3B | 1,300B | 30.72 | 28.75 |
StarCoder 2 3B | 3,000B+ | 31.44 | 35.37 |
CodeGemma는 Python, Java, JavaScript, C++ 등 다양한 프로그래밍 언어에서 유사한 크기의 7B 모델들보다 우수한 성능을 보입니다. 특히, GSM8K 벤치마크에서 7B 모델 중 가장 좋은 성능을 보였으며, HumanEval과 MBPP에서 가장 인기 있는 언어들에 대한 인스트럭트 버전의 개선이 있었습니다.
주요 기능
- 모델 다양성: 2B 베이스 모델은 인페일링과 오픈엔드 생성에 특화되어 있으며, 7B 베이스 모델은 코드 인페일링 데이터와 자연 언어로 훈련되어 코드 완성 및 이해, 생성에 사용할 수 있습니다. 7B 인스트럭트 모델은 코드, 프로그래밍, 또는 수학적 추론 주제에 대한 대화용으로 미세 조정되었습니다.
- Hugging Face 생태계와의 통합: 모델은 Hugging Face Hub에서 쉽게 사용할 수 있으며, transformers 라이브러리, Google의 원본 코드베이스를 위한 체크포인트, 그리고 커뮤니티가 양자화할 수 있는 전체 정밀도 GGUF 파일을 포함합니다.
사용 방법 또는 작동 원리
CodeGemma는 코드, 코멘트, 독스트링, 임포트 문 등을 위한 인페일링을 사용하여 코드 완성을 수행합니다. 예를 들어, codegemma-2b
모델을 사용하여 코드 완성을 수행하는 방법은 다음과 같습니다.
from transformers import GemmaTokenizer, AutoModelForCausalLM
import torch
model_id = "google/codegemma-2b"
tokenizer = GemmaTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16).to("cuda:0")
prompt = '''\ <|fim_prefix|>import datetime
def calculate_age(birth_year): """Calculates a person's age based on their birth year.""" current_year = datetime.date.today().year \ '''
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[prompt_len:]))
이 코드는 현재 날짜를 기반으로 사람의 나이를 계산하는 함수를 완성합니다.
더 읽어보기
CodeGemma 공개 글
모델 공개 내용 Hugging Face
CodeGemma 기술 문서
CodeGemma 데모
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다.
파이토치 한국 사용자 모임이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래쪽에 좋아요를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~