Gemma

Jiwon Kim
|2024. 3. 9. 17:03

 

출처 : 

https://blog.google/technology/developers/gemma-open-models/

https://medium.com/@mohammed97ashraf/your-ultimate-guide-to-instinct-fine-tuning-and-optimizing-googles-gemma-2b-using-lora-51ac81467ad2

https://huggingface.co/collections/google/gemma-release-65d5efbccdbb8c4202ec078b

https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf


 

 

 

Gemma Open Models

 

Gemma는 2024.02.21에 구글에서 오픈한 최첨단 경량 open LLM으로, Gemini 개발 기술과 연구를 기반으로 제작되었다. 

현재 파라미터는 Gemma-2b, Gemma-7b 두 가지로 공개되었고, 각각 pre-trained version이랑 instruction-tuned version (fine-tuned for dialogue, instruction-following, helpfulness and safety) 두 가지가 있다. 

 

Model Architecture

 

Transformer decoder를 기반으로 하며, vocab size가 256128개이다.

기존의 트랜스포머 구조 이후에 발표된 일부 사항들을 포함하여 개선시켰다. 

- Multi-Query Attention : 7B모델을 multi-head attention을 이용하지만 2B모델은 multi-query attention을 이용한다. 

- RoPE Embeddings : 각 레이어에 absolute positional embeddings 대신에 rotary positional embeddings를 이용하여 input과 output 사이의 embeddings를 공유한다. 이로 인해 모델 사이즈를 감소시켰다. 

- GeGLU Activations : 활성화함수를 기존 ReLU에서 GeGLU로 변경

- Normalizer Location : transformer sub-layer의 input output를 모두 정규화시키고, RMSNorm을 활용한다. 

 

Pretraining / Instruction Tuning

 

Pretraining :


 - 2B는 2T, 7B는 6T 토큰을 학습시킴. (대부분 영어, Vocabulary size : 256k tokens),
 - harmful or low-quality content는 필터링을 거침

 

Instruction Tuning :


 - Gemma 2B와 Gemma 7B를 fine-tuning 함

 - [영어 only, text only synthetic and human-generated prompt-response pairs] 를 이용한 SFT &
   [보상 모델 trained on labelled English-only preference data and high quality prompts] 를 이용한 RLHF (Reinforcement Learning from Human Feedback) 

- SFT에 사용된 Special tokens : 훈련/인퍼런스에 모두 동일하게 사용되었으며, 대화에서 role을 부여하기 위해서 + 대화의 경우 (특히 multi-turn) turn을 알려주기 위함이다. 

 

 

State-of-the-art performance at size

 

Gemma model은 구글이 사전에 공개한 Gemini와 그 기술을 공유하여, 비슷한 크기의 다른 오픈 소스 모델과 비교했을 때 더 좋은 성능을 낸다. 심지어 더 큰 규모의 모델(LLaMA2-13B)보다도 더 좋은 성능을 보여준다. 

 

Language understanding and generation performance of Gemma 7B across different tasks compated to similaryly sized open models.

 

위 Task외에도 benchmark 측정에서 MMLU (64.3%), MBPP (44.4%)의 결과를 보여주었다. 

 

 

 

Fine-Tuning and Optimizing Gemma 2B using LoRA

 

(1) Loading and utilizing the Gemma 2B model in 4-bit precision

 

현재 gemma 모델을 캐글 노트북, 코랩에서 모두 활용할 수 있다. 나는 코랩환경에서 huggingface를 통해  4-bit quantized model을 로드했다.

먼저 허깅페이스에서 모델 사용 동의서에 체크하고 토큰을 받아서 Google Colab secret keys에 설정해야 한다. 

그리고 의존성 충돌이 일어나지 않도록 정해진 버전으로 모듈들을 업데이트한다. (7B의 경우 torch v2.1.0이면  input size 에러가 나기 때문에 torch도 upgrade 해줘야 한다.)

 

나는 BitsAndBytesConfig으로 weight quantization을 해주었다. 실제로 가중치를 quantization한 결과 모델 로드하는데 메모리 한 2GB정도 사용했던 것 같다. (원래 체크포인트 약 5.x GB)

 

(2) LoRA

 

한정된 GPU자원에서 파인튜닝을 가능하게 해주는 Parameter-efficient learning을 위해서 Low Rank Adapatation을 적용한다. 여기서는 LoraConfig를 이용해준다. 

 

 

 

 

파인튜닝 시켜주면 batch size = 8로 했을 때 7500개 훈련 데이터 (128 tokens each) 훈련하는데 약 150분 정도 걸렸던 것 같다. 

그나저나 지금 적용하고 있는 downstream task에서 최고 성능이어서 오 역시 젬마... 했다.. ㅋㅋ