--- license: mit datasets: - joeykims/coffee_general_ko language: - ko metrics: - perplexity: 874 base_model: - google/gemma-2b-it --- #GemmaSprint gemma 첫번째 파인튜닝 모델입니다. 커피에 대한 전반적인 지식과 커피 원두를 추천해주는 서비스입니다. * 모델관련 과정, 결과등 https://joey-k.tistory.com/15 * github https://github.com/GOOGLE-MLB-2024-GJ/Beans * 모델 2b 모델을 기반으로 파인튜닝을 진행하였습니다. 업로드한 모델은 기본모델인 "google/gemma-2b-it"로 파인튜닝을 하였고, 젬마 한국어 버전을 만들어 놓으신게 있어서 거기서 더 확장을 시도하고 있습니다. -.gemma 한국어 버전 https://huggingface.co/beomi/gemma-ko-2b * 튜닝후 대화 : 아직 어색한 부분이 아직 많은 느낌입니다. 데이터와 튜닝 파라미터를 조정해서 향후 더 자연스럽게 만들어 볼 예정입니다. ![image/png](https://cdn-uploads.huggingface.co/production/uploads/66d2836c9000766c36d827b9/SGB2diMkcGIaGbiENvaci.png) * 데이터 : 데이터를 처음에 고민을 많이 하다가 인터넷에 공유되어 있는 커피 전반적인 지식을 하나씩 가져왔습니다. 그후에 gpt로 적절히 finetunning 모델을 위한 구조로 데이터를 생성하게 하였습니다. 따로 gpt api를 쓰지 않았기 때문에 시간이 제법소요 되었습니다만, 나름 괜찮은 퀄리티의 데이터라고 생각해서 이런 방식으로 약 2천개 가량의 커피 전반적인 지식의 데이터를 확보할 수 있었습니다. ![image/png](https://cdn-uploads.huggingface.co/production/uploads/66d2836c9000766c36d827b9/jpF2-Pn2TvWKsYh1GSSEc.png) context도 원래는 있었는데 그다지 많이 쓰이지 않는 것같아서 Instruction과 response로 구성하였습니다. * 자원 처음에 kaggle과 colab에서 진행을 하다가 개인 맥북프로가 더 빠를것 같아서 옮겼습니다. 이분의 코드를 바탕으로 수정을 하였습니다. https://devocean.sk.com/blog/techBoardDetail.do?ID=165703&boardType=techBlog 여기서 맥북에서 하면 문제가 하나 있는데 트랜스포머가 4.38.2가 맥북에서 안돌아갑니다. 그래서 4.38.1로 다운해서 진행하였습니다. https://www.singleye.net/2024/04/%E5%9C%A8-apple-silicon-m3-max-%E4%B8%8A%E5%AF%B9-llama2-%E8%BF%9B%E8%A1%8C%E5%BE%AE%E8%B0%83/#4-qlora-4-bit-%E9%87%8F%E5%8C%96%E9%85%8D%E7%BD%AE-m3-%E8%B7%B3%E8%BF%87 맥북프로 m3 기준으로 해서 2천개 데이터를 기준으로 한번할때 3시간 정도 소요됐던 것 같습니다. gpu도 같이 돌려서 그런지 그나마 빠르게 진행 할 수 있었습니다. macbook gpu 자원 사용은 아래의 링크를 참고해서 진행하였습니다. https://velog.io/@es_seong/Mac * 파인튜닝 파인튜닝은 아래와 같은 설정으로 진행하였습니다. 맥이라서 양자화가 안되서 cpu로 진행을 하게 끔 하였고, # LoRA 설정 lora_config = LoraConfig( r=6, lora_alpha=8, lora_dropout=0.05, target_modules=["q_proj", "o_proj", "k_proj", "v_proj", "gate_proj", "up_proj", "down_proj"], task_type="CAUSAL_LM", ) # 모델 설정 trainer = SFTTrainer( model=model, train_dataset=train_data, max_seq_length=512, args=TrainingArguments( output_dir="outputs", max_steps=3000, per_device_train_batch_size=1, gradient_accumulation_steps=4, optim="adamw_torch", warmup_steps=0.03, learning_rate=2e-4, fp16=False, logging_steps=100, push_to_hub=False, report_to='none', use_mps_device=False ), peft_config=lora_config, formatting_func=generate_prompt, # 새로운 포맷팅 함수 적용 ) 아래의 설정들을 잠시 살펴보자면 r=6 : r은 랭크(rank)를 의미하며, LoRA에서 학습하는 저차원 행렬의 차원을 정의합니다. 이는 모델 파라미터의 효율적 표현을 가능하게 하며, 작은 r 값은 적은 학습 파라미터를 의미합니다. 일반적으로 r 값이 높을수록 더 많은 학습 파라미터를 가지게 되어 성능이 향상될 수 있지만, 메모리 사용량이 늘어납니다. lora_alpha=8 : lora_alpha는 LoRA에서 사용하는 학습률을 조정하는 스케일링 팩터입니다. 이는 저차원 행렬에서 나온 출력을 조정하는 역할을 하며, 학습률의 크기를 결정짓는 중요한 요소입니다. 일반적으로 더 큰 값은 학습 속도를 높일 수 있지만, 너무 크면 과적합 위험이 있습니다. lora_dropout=0.05 : lora_dropout은 드롭아웃 비율을 설정하며, 모델 학습 시 과적합을 방지하기 위해 일부 파라미터를 무작위로 제거하는 비율을 나타냅니다. 여기서는 5%의 드롭아웃이 적용됩니다. target_modules=["q_proj", "o_proj", "k_proj", "v_proj", "gate_proj", "up_proj", "down_proj"] : target_modules는 LoRA가 적용되는 모듈들을 지정합니다. 여기서는 q_proj, k_proj, v_proj 등 주로 Transformer 기반 모델에서 사용되는 쿼리, 키, 밸류 프로젝션 모듈에 LoRA가 적용됩니다. 이러한 모듈은 주로 어텐션 매커니즘에서 중요한 역할을 하며, 이 모듈들만 학습함으로써 학습 효율성을 높입니다. task_type="CAUSAL_LM" : task_type은 수행하려는 작업의 유형을 정의합니다. 여기서는 **Causal Language Modeling(CAUSAL_LM)**을 의미하며, 모델이 문맥을 기반으로 다음 단어를 예측하는 방식으로 학습됩니다. * 성능 perflexity 측정결과 874 * 참고한 내용들 -.캐글에서 TPU로 파인튜닝 https://www.kaggle.com/code/alirezaebrahimi/gemma-2-tpu-fine-tuning -.커피 관련된 데이터 베이스(원두의 맛을 점수로 나타냄, 데이터는 이것으로 하지 않음.) https://github.com/ddthang86/Coffee-data-analysis/blob/main/Arabica/df_arabica_clean.csv