뒤로
한규진
한규진 ·

Sakura-SOLAR-Instruct: 해외 리더보드 1등 모델 코드 및 하이퍼파라미터 전부 공개!?

안녕하세요!

저번에 디스콰이엇에서 ko-platypus 모델 소개로 처음 인사를 올렸던 kyujinpy입니다!

오늘 여러분들께 소개할 오픈소스! 모델은 Sakura-SOLAR-Instruct 입니다!

Sakura-SOLAR-Instruct에 대한 모든 정보는 아래 github에 있어요!

Github:

HuggingFace:


먼저 간단히 모델을 만들게 된 배경에 대해서 소개해볼께요! ㅎㅎ

최근에 SOLAR-10.7B 모델이 Depth-Up-Scaling 방법론을 활용하여 Open LLM 리더보드에서 1등을 달성하였습니다..!

Depth-Up-Scaling을 통해서 서로 다른 모델의 파라미터를 공유하면서 보다 높은 정확도를 낼 수 있었던 것 같습니다.😉

 

또한, 최근에 새로운 강화학습 방법인 DPO와 모델들의 파라미터 값을 서로 공유하는 merge(slerp) 방법을 통해 모델의 성능을 많이 이끌어 내는 것을 보면서, SOLAR 모델을 활용하여서 좋은 성능을 내는 모델 튜닝에 도전하게 되었습니다..!

그리고 여러 시도와 고민 끝에 해외 리더보드에 1등을 달성하게 되었습니다.

DPO 방법론을 적용한 모델들도 리더보드에 곧 올라올테니 계속 지켜봐주세요😉😉


그렇다면 어떻게 SOLAR 모델을 가지고 훈련했나요!?

위에서 언급한 것과 같이 slerp merge와 DPO를 가지고 훈련을 진행했습니다!

좀 더 자세히 설명해볼께요..!

 

Merge 방법론은 무엇인가요!?

Merge(slerp)방법은 mergekit이라는 github에서 쉽게 구현이 가능합니다!

SLERP은 Spherical Linear Interpolation의 약자로, 구면 선형 보간법이라고 합니다!

slerp에 대해서 검색하시면 많은 정보들이 나와서 쉽게 이해하실 수 있습니다!

저는 slerp method를 아래의 2개의 모델에 적용해보았습니다!😋

  • SOLAR-10.7b-Instruct-v1.0

  • SauerkrautLM-SOLAR-Instruct

이렇게 해서 만들어진 모델이 🌸Sakura-SOLAR-Instruct🌸 입니다!

Mergekit에 대한 정보는 github를 참고해주세요!

Github:

DPO 방법론은 무엇인가요!?

DPO 방법은 directly preference optmization의 약자입니다!

해당 방법론은, 두 모델 간의 대답 분포도를 비교하여서 사용자가 원하는 대답으로 분포를 맞춰주는 방법이라고 생각하시면 편합니다! (자세한 내용은 논문을 참고하시면 좋습니다! 수식에 익숙하신 분들이라면 KL-divergence를 떠올리셔도 좋습니다 ㅎㅎ

 

최근에 모델을 올리기 위해 여러가지 open source models을 보면서, 저와 같이 자원이 부족한 사람들이 학습하기 적합한 dpo 데이터셋을 제 나름대로 추려봤습니다! 😋

  • Intel/orca_dpo_pairs

  • argilla/distilabel-math-preference-dpo

  • unalignment/toxic-dpo-v0.1

저는 여기서 orca_dpo와 math_dpo를 이용했습니다!

toxic_dpo도 이용하고 싶었지만, 이것은 다른 사람들의 시도로 남겨두겠습니다..🙃🙃

 

여러 DPO 데이터셋을 활용해서 만든 모델의 리스트는 아래와 같습니다! 😋

- Math_dpo

  • 🌸 kyujinpy/Sakura-SOLAR-Instruct-DPO-v1

  • 🌸 kyujinpy/Sakura-SOLAR-Instruct-DPO-v2

 

- Orca_dpo

  • 🌸 kyujinpy/Sakura-SOLRCA-Instruct-DPO

 

- Orca_dpo + Math_dpo

  • 🌸 kyujinpy/Sakura-SOLRCA-Math-Instruct-DPO-v1

  • 🌸 kyujinpy/Sakura-SOLRCA-Math-Instruct-DPO-v2

 

모델을 만들 때, 가장 고민했던 점은 hyperparameters 였습니다..!

하이퍼 파라미터에 대한 정보를 얻기 위해, 밤새도록 모델의 open source에 나와있는 정보들과 과거 log 기록들을 살펴보았고, 제가 시도했던 경험들까지 모두 종합하여 어느정도 경우의 수를 만들었습니다 😇😇

이것을 바탕으로, 여러 하이퍼 파라마터들을 실험 정신으로 각각의 모델에 적용을 해보았습니다!😍

자세한 하이퍼 파리미터와 모델에 대한 정보는 Sakura-SOLAR github 에 모두 공개했습니다!

여러분들에게 하나의 인사이트가 되었으면 좋겠습니다🥰🥰


마무리

KO-LLM 리더보드에 이어서 EN-LLM 리더보드도 1등을 달성해보는 경험을 했다니..정말 감사할 따름입니다. (물론 고충도 많았지만요..! ㅎㅎ)

저와 같이 연구하고 응원하는 모든 분들께 감사드리고, 또 아낌없이 지원해주시는 (주)미디어그룹사람과숲과 (주)마커에도 감사함을 표합니다🤗🤗

 

다음에도 더 좋은 오픈소스 모델로 찾아뵐 수 있도록 노력하겠습니다🤩🤩

감사합니다!


8

댓글

로그인 후 댓글을 남길 수 있습니다.

김강현
김강현

이제 막 자연어처리에 관심을 가지게 되어 이것저것 보다가 여기까지 오게 됐습니다 ㅎㅎ 정말 대단하시네요!! 저도 이제 갓 고등학교 졸업한 예비 대학생으로써 열심히 해보겠습니다

한규진
한규진

와! 한동대학교 이번에 들어오시는건가요!?

김강현
김강현

네 맞아요 ㅎㅎ

한규진
한규진

새로 시작되는 학기에서 볼 수 있으면 좋겠네요! ㅎㅎ 환영합니다!

미남홀란드
미남홀란드

패스트캠퍼스 강의 수강하고 궁금해서 찾다가 여기까지 왔는데, 혹시 loss 를 보고 학습을 종료하는 시점 , 최고의 Checkpoint 를 찾는 기준은 어떤거일까요?

한규진
한규진

보통은 2가지 방법이 있습니다..! 1. 가장 낮은 loss value에서의 checkpoint 저장 2. 가장 마지막의 checkpoint 저장 각각의 장점과 단점들이 있습니다. 가장 낮은 loss value에서 저장한다는 것은, 말 그래도 가장 성능이 높다는 뜻이죠! (적어도 우리가 이용한 loss metric 기준에서) 하지만, 해당 loss value가 찍힌 시점이 전체 학습 step의 중간지점이었다면, 나머지 50% 데이터셋에 대해서는 학습이 이루어지지 않게 됩니다. 또한 가장 마지막 checkpoint의 경우에는 모든 훈련 데이터셋에 대하여 학습했지만, loss value가 높을 수도 있습니다. 이 경우에는 학습이 잘 이루어지지 못했다고 생각할 수도 있습니다. 하지만 더 유의깊게 봐야되는 것은 loss value의 경향성이라고 할 수 있을 것 같습니다..!

미남홀란드
미남홀란드

결국은 페이션트를 일정 걸어두고, 로스가 일정 더 안떨어질때의 최고의값이군여 감사합니다. 알파카 파인튜닝 해보고 안해보다가 이번에 강의 재미있게보고 인사이트 많이 얻어가는거 같습니다!

한규진
한규진

네 맞습니다! Loss value가 더이상 안 떨어지고 일정한 경향성을 유지하고 있다면 어느정도의 optimal point를 찾았다고 말할 수 있을 것 같습니다! 강의 좋게 봐주셔서 감사드립니다..!

미남홀란드
미남홀란드

혹시 제가 지금 파인튜닝을 해보려하는데 제가 가지고 있는 dataset이 있는데 그냥 alpaca 데이터셋으로 만들어주면 될까요 일반적인 QnA 데이터셋입니다!

한규진
한규진

Alpaca 데이터셋 형태로 만들어도 괜찮을 것 같습니다!