[GN⁺] 70B 언어 모델을 집에서 파인튜닝하기

GeekNewsxguru님께 허락을 받고 GN에 올라온 글들 중에 AI 관련된 소식들을 공유하고 있습니다. :smiley_cat:

소개

[GN⁺] 70B 언어 모델을 집에서 파인튜닝하기

  • FSDP(Fully Sharded Data Parallel) 와 QLoRA(Quantization + Low-Rank Adaptation")를 결합한 오픈 소스
  • 일반 데스크톱 컴퓨터와 표준 게이밍 GPU 두 개로 70b 크기의 언어 모델을 효율적으로 미세조정 가능

배경

  • 데이터 센터급 하드웨어와 데스크톱 컴퓨터에 탑재된 게이밍 GPU는 큰 성능 차이가 없음에도 불구하고, 가격 차이가 매우 큼
  • 게이밍 GPU는 메모리가 적어 대규모 언어 모델을 훈련시키기 어려움
  • Answer.AI는 이 문제를 해결하기 위해 저렴한 게이밍 GPU를 사용하여 최고의 오픈 소스 모델을 훈련시키는 방법을 찾고자 함

QLoRA: 단일 GPU에서 더 큰 모델 훈련하기

  • QLoRA는 양자화와 LoRA의 결합으로, 모델의 가중치를 4비트로 줄여 GPU 메모리 사용량을 감소시킴.
  • LoRA는 대규모 언어 모델 전체를 훈련시키지 않고, 작은 어댑터 행렬을 추가하여 훈련함으로써 메모리 제약을 피함.
  • QLoRA는 65b 모델을 48GB 카드에서 훈련할 수 있게 하지만, 70b 모델을 24GB 게이밍 GPU에서 훈련하기에는 여전히 부족함.

FSDP: 여러 GPU로 훈련 규모 확장하기

  • FSDP(Fully Sharded Data Parallel)는 모델의 파라미터를 여러 GPU에 분산시켜 동시에 사용할 수 있게 함.
  • FSDP는 DDP(Distributed Data Parallel)의 성능을 단일 GPU로는 수용할 수 없는 큰 모델에도 적용할 수 있게 함.
  • 예를 들어, 70b(700억 매개변수) 비양자화 모델은 140GB의 RAM을 사용하지만(각 매개변수가 16비트, 즉 2바이트로 저장되기 때문에) NVIDIA의 H100 카드(단일 카드당 약 $40,000의 비용!)도 부족. 80GB RAM이 필요
    • 그러나 FSDP를 사용하면 4개의 H100 GPU를 결합하여 총 320GB RAM을 만들 수 있음. 그리고 $150000을 절약

FSDP와 QLoRA 결합하기

  • Answer.AI는 QLoRA로 모델 크기를 줄이고, FSDP로 이를 여러 24GB 게이밍 카드에 분산시켜 효율적인 훈련을 가능하게 함.
  • 이를 통해 70b 모델을 일반 게이밍 GPU 두 개로 훈련할 수 있게 됨.
  • 2023년 말에 FSDP와 QLoRA를 결합하는 아이디어를 논의한후 필요한 문제들을 해결함.
  • 이 과정에서 다양한 기술과 라이브러리들이 결합되어 사용됨
    • 양자화된 매개변수를 모델의 "Computation Type"과 동일한 데이터 유형으로 저장
    • 전체 그라디언트를 저장하지 않는 대신 모델 전체의 여러 '체크포인트'에 활성화를 저장한 다음 필요에 따라 순방향 계산 단계를 다시 실행하여 그라디언트를 다시 계산하는 그라디언트 체크포인트
    • CPU 를 사용하지 않을 때 GPU가 아닌 CPU RAM에 무게를 저장하여 필요한 GPU 메모리를 대폭 줄이는 CPU 오프로딩
    • Flash Attention 2 :메모리 최적화된 Cuda 커널을 사용하여 Attention을 효율적으로 계산
    • HQQ(Half-Quadratic Quantization)를 발견하여 FSDP와 연동(GPTQ에 비해 50배 빠르고 정확)

FSDP/QLoRA 사용 방법

  • FSDP를 사용하려면 두 개 이상의 GPU가 필요함. (Runpod 에서 시간당 $0.6에 듀얼 3090 박스 이용 가능)
  • 최신 버전의 Transformers, PEFT, Bitsandbytes(및 이를 사용하는 경우 HQQ)를 설치하고, Answer.AI의 저장소를 클론한 후 README를 따라 실행함.
  • 2개의 24GB 카드에서 알파카를 훈련하려면
    python train.py --train_type qlora --dataset alpaca --batch_size 8 --gradient_accumulation_steps 2 --output_dir qlora_output --log_to wandb
  • 아직 초기 단계임(알파/프리뷰)
  • 몇주 안에 벤치마킹 결과도 공개 예정

GN⁺의 의견

  • 이 기사는 AI와 머신 러닝 분야에 종사하는 사람들에게 매우 흥미로울 것임. 특히, 대규모 언어 모델을 효율적으로 훈련시킬 수 있는 새로운 방법을 제시하기 때문에 주목할 만함.
  • 이 기술이 성공적으로 널리 사용된다면, AI 연구와 개발에 있어서 비용 장벽을 크게 낮출 수 있을 것임. 이는 소규모 연구실이나 개인 개발자들에게도 큰 기회가 될 수 있음.
  • 하지만, 이러한 접근 방식이 실제로 널리 채택되기 위해서는 안정성과 사용 편의성이 중요한 요소가 될 것임. 현재는 아직 초기 단계이므로, 커뮤니티의 테스트와 피드백을 통해 시스템이 개선되어야 함.
  • 새로운 기술을 도입할 때는 항상 기존 시스템과의 호환성, 성능, 비용 등을 고려해야 함. 이 기술을 선택함으로써 얻을 수 있는 이점은 대규모 모델 훈련의 접근성 향상이지만, 아직 초기 단계이므로 안정성과 지원 측면에서 단점이 있을 수 있음.

Hacker News 의견

  • 이 글은 훌륭하지만, 'nibble'이라는 단어를 사용할 기회가 많았는데 모두 놓쳤다는 점이 아쉽다.
    • 글이 흥미롭지만, 'nibble'이라는 단어를 활용하지 않은 점에 대한 아쉬움을 표현함.
  • 4비트 가중치를 사용하는 시스템으로 70b 모델을 미세 조정하는 데 얼마나 걸릴지, 예를 들어 모델 크기, 훈련 크기, 훈련 비용, 이 기술로 예상되는 품질 손실을 나타내는 표가 있으면 소비자로서 관심이 갈 것 같다.
    • 미세 조정 최종 비용에 대한 관심을 나타내며, 모델 크기, 훈련 비용 등을 포함한 상세 정보를 요구함.
  • (-1,0,1) 인코딩을 적용할 수 있는지 궁금하다. 해당 모델이 나오면 answer.ai가 같은 기술을 사용해 두 개의 작은 GPU로 큰 모델을 미세 조정할 수 있는지, 그리고 비용/효익 분석을 요청한다.
    • 새로운 인코딩 기법에 대한 기술 적용 가능성과 비용 대비 효과 분석에 대한 질문을 제기함.
  • 이런 연구는 개인 사용자가 LLM 시장에서 경쟁할 수 있게 해주는 데 매우 유용하다. '제로에서 하나로'라는 책의 내용과 일맥상통하는 훌륭한 작업이다.
    • 연구가 개인 사용자에게 유용하며, 특정 문제를 해결하는 데 기여하는 점을 긍정적으로 평가함.
  • NeurIPS 효율성 챌린지에서 모든 상위 입상작이 QLoRA를 사용했다는 점을 언급하지 않았는데, 이는 QLoRA의 중요성과 유용성을 보여주는 좋은 예시다.
    • QLoRA 기술의 중요성과 유용성을 강조하며, 해당 기술이 대회에서 인정받았음을 언급함.
  • '오픈 소스' LLM에서 본 가장 흥미롭고 건설적인 접근 방식이다. 학계도 이를 표준으로 삼았으면 좋겠다.
    • 오픈 소스 LLM에 대한 접근 방식을 높이 평가하며, 학계에서도 이를 표준으로 채택하기를 바람.
  • Metal에서의 빠른 훈련이 더 일찍 나왔으면 하는 바람이 있다. 현재로서는 Mac Studio가 대규모 모델 추론에 훨씬 저렴하고 충분히 빠르지만, 훈련 솔루션은 거의 존재하지 않는다.
    • Metal 플랫폼에서의 빠른 훈련 기대와 현재 Mac Studio의 효율성에 대한 의견을 제시함.
  • 기술적 글쓰기의 품질과 명확성이 훌륭하다.
    • 기술 문서의 품질과 명확성에 대한 칭찬을 함.
  • LLM(70B) 가중치를 나만의 데이터로 재훈련할 수 있는지 궁금하다.
    • 개인 데이터로 LLM 재훈련 가능성에 대한 질문을 함.
  • 한정된 하드웨어 예산으로 LLM을 미세 조정하는 사람들에게 이는 획기적인 돌파구다.
    • 제한된 하드웨어 예산을 가진 사용자들에게 이 기술이 큰 진전이 될 것이라고 평가함.
  • FSDP 대신 DeepSpeed를 선택한 이유가 궁금하다.
    • FSDP와 DeepSpeed 중 선택한 이유에 대한 궁금증을 표현함.
  • 모델을 미세 조정할 수 있게 되었을 때 성능 튜닝을 위해 사용한 도구가 있는지 궁금하다.
    • 성능 튜닝을 위해 사용된 도구에 대한 질문을 함.
  • 스파스화를 사용해본 적이 있는지, 이를 통해 더 적은 RAM으로 미세 조정이 가능할 것 같다는 생각이 든다.
    • 스파스화 기술 사용과 그로 인한 RAM 절감 가능성에 대한 의견을 제시함.

원문

더 읽어보기

출처 / GeekNews

3개의 좋아요