Skip to content

Instantly share code, notes, and snippets.

@sigridjineth
Created February 11, 2024 02:29
Show Gist options
  • Select an option

  • Save sigridjineth/2083c49f875b717987007c8675e4a019 to your computer and use it in GitHub Desktop.

Select an option

Save sigridjineth/2083c49f875b717987007c8675e4a019 to your computer and use it in GitHub Desktop.
Training Compute-Optimal Large Language Models - DeepMind

2편: ‘모델 크기’와 ‘학습 토큰 수’의 적절한 비율은? | NeurIPS 2022 | 김택민

2편: ‘모델 크기’와 ‘학습 토큰 수’의 적절한 비율은? | NeurIPS 2022 | 김택민

Gopher만큼 계산량이 있다면 63B → 1.4T에서 학습하는 것이 최적이라고 한다. 실제 현업에서는 관점 2가 조금 더 현실성이 있는데, pretrain을 하기 전에 이미 GPU를 사용했으므로 계산량이 고정되어 있는 상태. 최고의 정확도를 내기 위해서 모델 크기를 어떻게 조정해야 하는지 그래프를 통해서 결론을 낼 수 있을 것이다. 안드레 카파시도 nanoGPT에서 관점 2를 좋아한다고 언급했다.

Figure 3 > Figure 2 더 이해하기 편하다.

관점 1과 관점 2에서 얻은 데이터를 조금 더 잘 해석하는 방향으로 제안하는 것인데, 우리가 데이터 포인트를 400개 모았는데 최종 로스를 예측할 수 있는 모델을 만들면 어떨까? 라는 생각이고 샘 알트만도 내부 인터뷰를 통해서 최초 학습 조금 하면 최종 로스를 알 수 있다는 내용 말했음. 로스 예측 모델을 잘 이야기하면 모델 크기는 얼마나 되어야 하고 데이터셋은 얼마나 필요한지 잘 예측할 수 있을 것이다. GPU 스케줄링이 쉬워진다던지, 이 사람에게 몇 대를 빌려주면 되는지 등 잘 빌려주는 것이 좋을 수 있다. 저자들은 로스 예측 모델을 저렇게 생길 수 있지 않을까? 이야기했고. L-BFGS 알고리즘을 이용해서 Huber 로스를 최소화하는 방향으로 학습하면 파라미터를 채울 수 있다고 한다.

  • 모델이 커지면 최종 로스가 떨어진다는 것을 알 수 있다.
  • 데이터셋이 커지면 우리가 얻는 최종 로스가 떨어지므로
  • 트레이닝 로스를 적게 쓰면서 안쪽의 contour로 가기 위해서는 어디를 지나야 하는가? 그 지점을 이어놓은 것이 efficiency prontier.
  • efficiency frontier <> contour가 교차하는 지점의 존재하는 모델 로스와 training flops가 우리가 희망하는 점이 된다.
  • 로스를 잘 피팅했더니 40B 모델이라는 것을 알게 됨. 관점 1, 2와 다르게 작은 모델을 관점 3를 통해서 얻어낼 수 있었다.

Untitled

따라서 관점 1, 2, 3 결과를 비교해본다면,

  • 현업에서 프리트레인할 때 어떻게 모델 사이즈와 데이터셋 크기를 조절하면 좋은가
  • multiplier가 관점에 상관없이 다 비슷하기 때문에
  • 우리가 여러 시도를 해봤으나 사실상 1:1 비율로 키우는 것이 정답인 것 같더라
  • openai kaplan의 논문은 0.73의 의미는 데이터셋보다 모델을 빨리 키워야 한다는 내용을 말함. 근데 카플란 논문에서는 러닝 레이트를 감소시키는데 있어서 코사인 디케이를 설정하는 것에 있어서 한 종류의 실험을 모든 논문에 적용했으므로 손해를 본 녀석들이 있다. 로스를 더 낮출 수 있는데 결과에 실험 세팅이 맞춰져 있어서 문제. 처음에 learning rate를 warmup 한다는 명목으로 키우는데 어느정도 maximum learning rate에 도달하면 학습 내내 코사인 decay를 써서 줄여나간다. learning rate를 많이 줄여야 하는데 조금만 줄이고 도중에 실험을 종료해서 그 시점에서 로스를 측정하다보니 중간에서 학습을 끝내버림. 그래서 최고의 로스를 얻지 못함.
  • 카플란이 cosine decay를 잘 설정했다면? evaluation study에서 이야기를 했는데, 이 논문에서는 잘 설정했다고 주장, 로스가 훨씬 더 낮아지더라 하는 내용임. cosine length를 잘 설정하는 것이 중요하고 논문에 나왔던 커멘트가 트레이닝 스텝의 25% 이상을 잡게 되면 안된다라고 이야기함. LR scheduling을 하는 것이 또 중요하다.

Untitled

따라서 chin 70B가 gopher 280B보다 모델이 더 작음에도 불구하고 데이터셋에서 더 높은 정확도를 보임. 계산량이 고정된 상태에서 최적점이 있을 것이고 x20과 관련이 있을 것이다 라고 하는 논문이다.

결론은

  • 계산량이 고정되면 모델 크기와 학습 토큰이 20배인 것이 최적의 정확도를 보인다
  • gopher 280b는 300b 토큰으로 학습되었는데 모델 크기는 4배 줄이고 학습 토큰은 4배 키운 chin 70B 1.4T 토큰이 더 높은 정확도를 보임
  • 코사인 디케이를 어떻게 설정해야 하는가, 모델-데이터셋 관계 등이 해당 논문 이후에 표준으로 자리 잡음
  • 학습에 필요한 내용도 6ND

Untitled

빅테크들이 이야기하는 것이 우리가 하드웨어를 얼마나 잘 쓰고 있어? 라는 것임. 이 중에 mfu (model flops utilization) gpu가 1초에 몇번 계산할 수 있는데 우리가 실제로 몇 번 계산을 했냐 라는 것. cpu util 같은 것. 하지만 우리는 어떤 인스트럭션이 어떤 순서로 들어가는지 모르므로 예측 불가능. mfu는 예측 가능. 6ND를 A100 GPU가 할 수 있는 계산량으로 나눠주면 된다. TinyLLaMA의 경우 학습에 필요한 계산은 6MD이고 1초에 몇 토큰을 처리하는지? 타이니 라마 저자의 경우 자기네들이 학습했는데 한 GPU에 24000 토큰씩 학습할 수 있었다. 라고 하고 fp16 floating point를 312 TFLOP/sec는 50.8%이고 저자들은 54% 얘기했는데, 토큰으 2.4천이 아닐거라거 고려하면 수렴할 것이다.

70% 이상 불가능한 이유는 커뮤니케이션이나 컴퓨테이션하는 I/O overhead 관한 것. 매트릭스 multiplication만 최적의 상황에서 하는 것이 MFU가 80-90%가 나옴. matrix multiplication에 embedding 등이 추가되면 내려갈 수밖에 없는. 5~60% 정도만 되면 충분히 잘 활용할 수 있다. 이걸 올리는 것은 엔비디아나 파이토치…의 역할. 혹은 하드웨어 프렌들리한 모델? 음…

앞으로도 유효할 것인가? 데이터셋이 점점 커지고 있는데 수십 트릴리언에 대해서 트레이닝 했을 때도 20배가 맞는 것인가. 대부분의 사전 학습 모델은 데이터 코퍼스 구성을 비슷하게 공유할 수 있을 수 있는데, 1 epoch까지는 이 트렌드가 맞다고 하고 그 다음 에폭에 대해서는 실험을 하지 않았음. 따라서 epoch을 반복하는 경우라든지, 이건 고민할 필요가 있음. 또한 GPU가 무한정 하지 않고 서비스해야 하는 사용자들은 정해져있는데 1 trillion model을 서빙할 수 없으니 사실상 모델 사이즈가 정해져있음. 따라서 정해진 모델 사이즈에서 오래 하는 것이 맞다. 따라서 20이라는 크기가 의미를 잃음.

라마는 2048 GPU를 써서 며칠을 학습했다라고 하는데 6ND = 7 * 6 * 1.4T / 2048 GPU의 전체 트레이닝 시간을 하면 알 수 있다. 결과적으로 우리가 만들 수 있는 모델의 크기나 한계는 여기까지라고 할 수 있다. 몇 개의 GPU로 며칠을 학습했다고 하는데 MFU를 보면 인프라 경쟁력이 얼마나 되는지를 알 수 있다. 돈만 있으면 학습을 할 수 있으므로 얼마나 싸게 하고 있느냐가 중요함.

https://www.cs.princeton.edu/courses/archive/fall22/cos597G/lectures/lec12.pdf

Untitled

Adam 대신에 AdamW를 더 많이 쓰는 추세 그리고 fp32를 optimizer state로 사용하는 것이 추세다. 저자들에 따르면 C4 dataset vs github dataset을 사용했는데 둘다 1:1 비율이 나와서 큰 차이가 없을 것이라고 한다. 1 epoch에 대해서 유효하다고 한다. 즉 두 가지의 코퍼스에 대해서 해 보니 차이가 없었다. 한국어도 비슷하다고 하며 요즘은 멀티 링구얼이다보니 evaluation을 해볼 수 있는 기회가 많이 없다.

1개 MFU가 더 높게 나오고 네트워크 코스트가 있으니 GPU가 좀 쉬는 시간이 늘어날 것이고 멀티노드는 MFU가 떨어지는 것이 맞다. 예를 들면 2048장의 GPU(슈퍼팟)를 한 학습에 사용하려고 하면 계속 2048개의 커뮤니케이션 해야하니 MFU가 떨어짐. 하이퍼 클로바는 네트워크 코스트를 줄이는 법 몰라서 10~20으로 낮았다고 한다. 요즘은 2048개 정도는 잘 묶어주는 라이브러리나 방법론이 나와서 50-60 나올 수 있다.

Untitled

모델 크기에 따라서 트렌드가 달라진다. 다양한 사이즈의 모델을 실험하고 리니어한 관계와 곱하기 20에 대해서 찾앗는데 모델 스코프를 좁혀놓고 생각하면 다르게 나올 수 있다. 라는 것을 세 개의 기울기를 통해 나올 수 있다. 트레이닝 로스가 큰 모델일 수록 급하게 떨어진다라는 내용. 기울기가 달라진다는 내용.

Untitled

친칠리야 스케일링 로우가 의미가 있었지만 inference 코스트를 무시할 수 없어서 적당히 작은 모델을 쓰는데 그 적당히 작은 모델을 좋은 정확도로 만드는 것을 고민하는데 지금까지 알려진 바로는 어떤 모델 크기던 간에 오래 학습하면 computation은 손해보더라도 추론까지 나가는 비용을 고려하면 더 낫다.

  • 라마 2 모델 논문에서는 2T까지 학습했는데 학습 오래 하면 perplexity, loss가 더 낮아질 것 같은데. 3T, 10T 토큰 학습하면 더 낫지 않을까? 모델을 줄이고 싶은데 얼마만큼 줄여야 할까. 생각하다가 Pythia 논문에서는 모델 크기가 410M보다 크다면 300B 이후에도 오래 학습할 수록 정확도가 계속 커지는 것 같더라. 이 말은 410M보다 작다면 300B 미만에는 의미가 없다.
  • 1.1B 모델로 3T를 학습해본다. 로스가 계속 줄어든다고 한다. 정확히는 1T 데이터셋을 3번 돌렸다. 저자들이 말한 가정이 어느정도 맞았다. 작은 모델의 붐이 타이니라마 이후로 엄청 불기 시작함.
  • 300B 토큰보다 오래 하면 더 좋아진다. Pythia는 300B 학습, 타이니라마는 2.5T, StableLM은 1.6B에 2T 학습. 정확도가 더 높은데 모델 크기가 조금 더 커서. 모델 사이즈가 비슷하면 오래 학습하는 것이 좋고 모델 사이즈가 비슷하고 토큰 수도 비슷하면 정확도도 비슷하다는 내용이다.
  • 관점 2에서 봤던 밸리 그래프. 똑같이 3T 토큰으로 학습하는데 1B vs 2B가 있다면 어떤 것이 더 좋을 것인가. 토큰 수가 많았을 때, 그리고 트레이닝 풀옵스를 더 할당했을 때 모델 사이즈가 커야지 트레이닝 로스가 더 빨리 내려간다는 것이다. 요새는 모델 사이즈에 대한 로스 결과는 안하고 데이터셋에 대한 결과의 정확도만 공유한다.

Untitled

  • 한 에폭만 도는 일반적인 이유는 무엇일까?
    • 허깅페이스 오픈소스로 공개된 데이터셋의 총 토큰 수가 1~3T 밖에 되지 않음.
    • 유니크 토큰 수를 알려면 보캡 사이즈가 얼마나 유니크한지 알아야 함.
    • 가장 많이 학습한 애는 3Trillion T인데 한번 돌리는 것만으로도 벅찼던 것. 복습을 해주면 더 잘하겠지만 GPU가 없으니 한 에폭하는 것으로 만족하는 듯 하다. RedPajama-v2는 30T 인데 7B만 올려도 30T 하려면 페이스북이 학습한 것보다 더 많이해야해서 1년 이상 걸린다. 자원이 많아도 라마 70B를 학습하려고 1-2달 이상 걸리는데 데이터셋 10배 키우면 1년 뒤에나 나온다. 무작정 오래 학습할 수도 없는. 하지만 라마 3는 6개월 전부터 학습 걸어놨을 지도. 라마 2 끝나고 바로 시작했을까?
  • 올모가 데이터셋도 공개, 트레이닝셋도 공개, 체크포인트도 공개. 최종 정확도는 라마2와 거의 유사하다. 돈만 있으면 엔지니어 혼자서 코드 돌리면 라마 2를 얻을 수 있다. 지금까지는 다들 허깅페이스에 웨이트는 올려도 코드는 안올렸다.
  • MS에서 최근 나온 논문 - GPT같은 것 써서 고퀄리티 syntatic data로 학습하면 토큰 더 적어도 정확도가 높게 나온다는 1.5파이2 라는 논문이 있음. 모든 데이터셋이 GPT-4로 만들어진 합성 데이터. 비효율적인 데이터는 다 제거했을 것이고 더 적은 토큰으로 accuracy 가능한데. 어떻게 될지는 지켜봐야함 (PH1.5 vs PH2 데이터셋 크기, 계산량 대비하면 1.5 좋다, 따라서 친칠리아 로우가 적용될지 모르겠음)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment