CodeGemma 릴리스 노트 / 새로운 소식
Google은 코드에 특화된 오픈 액세스 대형 언어 모델(LLM) 패밀리인 CodeGemma를 출시했습니다. 사전 학습된 2B 및 7B Gemma 체크포인트를 기반으로 하며, CodeGemma 모델은 영어 데이터, 수학 및 코드의 추가 5천억 토큰으로 추가 학습되어 코드 완성과 생성에 필요한 논리적·수학적 추론 능력을 강화합니다.
CodeGemma 모델 변형
CodeGemma는 다양한 배포 및 사용 사례 요구에 맞춰 세 가지 뚜렷한 버전으로 제공됩니다:
- CodeGemma 2B: 코드 인필링에만 전적으로 학습된 기본 모델입니다. 낮은 지연 시간이나 높은 프라이버시가 중시되는 환경에서 빠른 코드 완성과 생성을 위해 최적화되었습니다.
- CodeGemma 7B: 코드 인필링 데이터(80%)와 자연어를 혼합하여 학습된 기본 모델입니다. 코드 완성은 물론 일반적인 코드 및 언어 이해와 생성도 지원합니다.
- CodeGemma 7B Instruct: 명령 수행을 위해 미세 조정된 7B 모델 버전입니다. 프로그래밍, 코드 및 수학적 추론에 관한 대화형 상호작용을 위해 설계되었습니다.
패밀리의 모든 모델은 8K 토큰 컨텍스트 크기를 유지합니다.
성능 및 벤치마크
CodeGemma-7B는 다른 7B급 모델에 비해 강력한 성능을 보여줍니다. Python용 HumanEval 벤치마크에서 DeepSeek-Coder-7B를 제외한 동일 규모 모델보다 우수합니다. 이 성능 추세는 HumanEval의 MultiPL-E 번역을 통해 Java, JavaScript, C++ 등 다른 프로그래밍 언어에도 확장됩니다.
기술 보고서에 따르면 CodeGemma-7B는 GSM8K 벤치마크에서 7B 모델 중 가장 높은 성능을 기록했습니다. 또한 CodeGemma-7B-it(인스트럭트) 버전은 HumanEval과 MBPP 모두에서 가장 인기 있는 프로그래밍 언어들의 성능이 향상되었습니다.
기술 구현 및 프롬프트
코드 인필링 (FIM)
CodeGemma 2B와 7B는 코드 완성을 위해 Fill-In-the-Middle(FIM) 목표를 사용합니다. 이를 통해 모델은 프리픽스와 서픽스를 기반으로 그 사이의 공백을 채우는 코드를 생성할 수 있습니다. 다음 특수 토큰들이 이러한 프롬프트를 구성하는 데 사용됩니다:
<|fim_prefix|>: 커서 앞의 컨텍스트 앞에 위치합니다.<|fim_suffix|>: 서픽스 앞에 위치하며, 모델이 코드를 생성해야 하는 정확한 위치를 표시합니다.<|fim_middle|>: 생성을 트리거하는 프롬프트입니다.<|file_separator|>: 다중 파일 컨텍스트를 제공하는 데 사용됩니다.
인스트럭션 튜닝
CodeGemma 7B Instruct는 표준 Gemma 인스트럭션 튜닝 프롬프트 형식을 따르며, <bos>, <start_of_turn>user, <start_of_turn>model 태그를 이용한 대화 구조를 사용합니다.
배포 및 통합
Hugging Face Transformers
CodeGemma는 transformers 라이브러리(버전 4.39 이상)와 통합됩니다. safetensors 포맷, bitsandbytes를 통한 4비트 양자화, Parameter-Efficient Fine-Tuning(PEFT), Flash Attention 2를 지원합니다. 모델은 추론 속도 향상을 위해 torch.compile()과 호환됩니다.
하드웨어 요구 사항:
- CodeGemma 2B:
float16정밀도를 사용하여 약 6 GB RAM이 필요합니다. - CodeGemma 7B: 4비트 모드로 로드할 경우 약 9 GB 메모리가 필요합니다.
클라우드 및 추론 엔드포인트
- Google Cloud: CodeGemma는 Vertex AI 또는 Google Kubernetes Engine(GKE)를 통해 Text Generation Inference(TGI)를 사용하여 배포할 수 있습니다.
- Hugging Face Inference Endpoints: 모델은 백엔드로 TGI를 사용해 배포할 수 있습니다. T4 GPU는
bfloat16포맷을 지원하지 않으며, 대체 GPU 옵션이 필요합니다.
정밀도 권장 사항
원본 체크포인트는 bfloat16으로 제공됩니다. float16은 일부 하드웨어에서 사용하기 적합하고 빠르지만, bfloat16이 float32보다 최대 정밀도를 위해 권장됩니다.