대형 모델 방향에서는 거대 기술 기업들이 대형 모델을 훈련하고 있고, 학계에서는 이를 최적화하는 방법을 고민하고 있습니다. 최근에는 컴퓨팅 성능을 최적화하는 방법이 새로운 수준으로 향상되었습니다.
대규모 언어 모델(LLM)은 자연어 처리(NLP) 분야에 혁명을 일으켜 창발 및 깨달음과 같은 놀라운 기능을 보여주었습니다. 그러나 특정 일반 기능을 갖춘 모델을 구축하려면 수십억 개의 매개변수가 필요하므로 NLP 연구의 임계값이 크게 높아집니다. LLM 모델 튜닝 프로세스에는 일반적으로 8×80GB GPU 장치와 같은 고가의 GPU 리소스가 필요하므로 소규모 실험실과 기업이 이 분야의 연구에 참여하기가 어렵습니다.
최근에는 제한된 자원으로 LLM을 튜닝할 수 있는 솔루션을 제공하는 LoRA, Prefix-tuning 등 PEFT(Parameter Efficient Fine-Tuning Technique)가 연구되고 있습니다. 그러나 이러한 방법은 매개변수 효율적인 미세 조정보다 더 강력한 방법으로 인식되어 온 전체 매개변수 미세 조정에 대한 실용적인 솔루션을 제공하지 않습니다.
Fudan University의 Qiu Xipeng 팀이 지난주 제출한 "Full Parameter Fine-tuning for Large Language Models with Limited Resources" 논문에서 연구자들은 새로운 옵티마이저인 LOMO(LOw-Memory Optimization)를 제안했습니다.
LOMO를 기존 메모리 절약 기술과 통합함으로써 새로운 접근 방식은 표준 접근 방식(DeepSpeed 솔루션)에 비해 메모리 사용량을 10.8% 줄입니다. 결과적으로, 새로운 접근 방식을 통해 각각 24GB 메모리를 갖춘 8×RTX 3090을 탑재한 시스템에서 65B 모델의 전체 매개변수 미세 조정이 가능해졌습니다.
문서 링크: https://arxiv.org/abs/2306.09782
이 작업에서 저자는 LLM에서 메모리 사용의 네 가지 측면인 활성화, 최적화 상태, 그라데이션을 분석했습니다. 텐서 및 매개변수를 사용하고 세 가지 측면에서 훈련 프로세스를 최적화했습니다.
새로운 기술을 통해 메모리 사용량은 매개변수 사용량과 활성화 및 최대 경사 텐서의 합과 동일해졌습니다. 전체 매개변수 미세 조정의 메모리 사용량은 추론의 사용량과 동일할 정도로 극단적으로 증가합니다. 이는 순방향+역방향 프로세스의 메모리 공간이 순방향 프로세스 단독의 메모리 공간보다 작아서는 안 되기 때문입니다. LOMO를 사용하여 메모리를 절약할 때 매개변수 업데이트 프로세스가 여전히 SGD와 동일하기 때문에 새로운 방법을 사용하면 미세 조정 프로세스가 영향을 받지 않는다는 점에 주목할 필요가 있습니다.
이 연구는 LOMO의 메모리 및 처리량 성능을 평가하고 LOMO를 사용하여 연구원이 8개의 RTX 3090 GPU에서 65B 매개변수 모델을 훈련할 수 있음을 보여줍니다. 또한 다운스트림 작업에서 LOMO의 성능을 확인하기 위해 LOMO를 적용하여 SuperGLUE 데이터 세트 컬렉션에서 LLM의 모든 매개 변수를 조정했습니다. 결과는 수십억 개의 매개변수를 사용하여 LLM을 최적화하는 데 있어 LOMO의 효율성을 보여줍니다.
이 글에서는 방법 부분에서 LOMO(LOW-MEMORY OPTIMIZATION)를 자세히 소개합니다. 일반적으로 그래디언트 텐서는 매개변수 텐서의 기울기를 나타내며 크기가 매개변수와 동일하므로 메모리 오버헤드가 더 커집니다. PyTorch와 같은 기존 딥 러닝 프레임워크는 모든 매개변수에 대한 그래디언트 텐서를 저장합니다. 현재 그래디언트 텐서를 저장하는 이유는 두 가지입니다. 최적화 상태를 계산하고 그래디언트를 정규화하는 것입니다.
본 연구에서는 SGD를 옵티마이저로 채택했기 때문에 경사 의존형 최적화 상태가 없으며 경사 정규화에 대한 몇 가지 대안이 있습니다.
그들은 알고리즘 1에서 볼 수 있듯이 LOMO를 제안했습니다. LOMO는 기울기 계산과 매개변수 업데이트를 한 단계로 통합하여 기울기 텐서 저장을 방지합니다.
다음 그림은 역전파 및 매개변수 업데이트 단계에서 SGD와 LOMO를 비교한 것입니다. Pi는 모델 매개변수이고 Gi는 Pi에 해당하는 기울기입니다. LOMO는 기울기 계산과 매개변수 업데이트를 단일 단계로 통합하여 기울기 텐서를 최소화합니다.
LOMO 해당 알고리즘 의사 코드:
구체적으로, 이 연구에서는 바닐라 경사하강법을2차원 단계 프로세스, 첫 번째 기울기를 계산한 다음 매개변수를 업데이트합니다. 융합 버전은
이 연구의 핵심 아이디어는 기울기를 계산할 때 매개변수를 즉시 업데이트하여 기울기 텐서가 메모리에 저장되지 않도록 하는 것입니다. 이 단계는 역전파에 후크 기능을 주입하여 달성할 수 있습니다. PyTorch는 후크 기능 주입을 위한 관련 API를 제공하지만 현재 API로는 정확한 즉각적인 업데이트를 달성하는 것이 불가능합니다. 대신 본 연구에서는 최대 하나의 매개변수의 기울기를 메모리에 저장하고 역전파를 통해 각 매개변수를 하나씩 업데이트합니다. 이 방법은 모든 매개변수의 그라데이션을 저장하는 것에서 단 하나의 매개변수에 대한 그라데이션으로 그라데이션의 메모리 사용량을 줄입니다.
대부분의 LOMO 메모리 사용량은 매개변수 효율적인 미세 조정 방법의 메모리 사용량과 일치합니다. 이는 LOMO를 이러한 방법과 결합하면 그라데이션이 차지하는 메모리가 약간 증가한다는 것을 나타냅니다. 이를 통해 PEFT 방법에 대해 더 많은 매개변수를 조정할 수 있습니다.
실험 부분에서 연구진은 제안한 방법을 메모리 사용량, 처리량 및 다운스트림 성능이라는 세 가지 측면에서 평가했습니다. 추가적인 설명 없이 모든 실험은 LLaMA 모델 7B~65B를 이용하여 수행하였다.
메모리 사용량
연구원들은 먼저 다양한 설정에서 훈련하는 동안 모델 상태와 활성화된 메모리 사용량을 분석했습니다. 표 1에서 볼 수 있듯이 AdamW 최적화 프로그램과 비교하여 LOMO 최적화 프로그램을 사용하면 SGD에 비해 메모리 사용량이 102.20GB에서 14.58GB로 크게 감소하며 LLaMA-7B 모델을 훈련할 때 메모리 사용량이 감소합니다. 51.99GB에서 14.58GB로 줄었습니다. 메모리 사용량이 크게 감소한 이유는 주로 그라데이션 및 최적화 상태에 대한 메모리 요구 사항이 줄어들었기 때문입니다. 따라서 훈련 과정에서 메모리는 대부분 매개 변수에 의해 점유되며 이는 추론 중 메모리 사용량과 동일합니다.
그림 2에서 볼 수 있듯이 LLaMA-7B 훈련에 AdamW 최적화 프로그램을 사용하면 상당한 비율(73.7%)의 메모리가 최적화 프로그램 상태에 할당됩니다. AdamW 최적화 프로그램을 SGD 최적화 프로그램으로 교체하면 최적화 프로그램 상태가 차지하는 메모리 비율이 효과적으로 줄어들어 GPU 메모리 사용량이 102.20GB에서 51.99GB로 완화됩니다. LOMO를 사용하는 경우 매개변수 업데이트와 역방향 작업이 단일 단계로 병합되어 최적화 상태에 대한 메모리 요구 사항이 더욱 제거됩니다.
처리량
연구원들은 LOMO, AdamW 및 SGD의 처리량 성능을 비교했습니다. 실험은 RTX 3090 GPU 8개가 장착된 서버에서 진행되었습니다.
7B 모델의 경우 LOMO의 처리량은 AdamW 및 SGD를 약 11배 초과하여 상당한 이점을 보여줍니다. 이러한 상당한 개선은 단일 GPU에서 7B 모델을 훈련하는 LOMO의 능력 덕분에 GPU 간 통신 오버헤드가 줄어듭니다. AdamW에 비해 SGD의 처리량이 약간 더 높은 것은 SGD가 운동량 및 분산 계산을 제외한다는 사실에 기인할 수 있습니다.
13B 모델의 경우 메모리 제한으로 인해 기존 8 RTX 3090 GPU에서는 AdamW로 학습할 수 없습니다. 이 경우 처리량 측면에서 여전히 SGD보다 뛰어난 LOMO에 모델 병렬성이 필요합니다. 이러한 장점은 LOMO의 메모리 효율적인 특성과 동일한 설정으로 모델을 훈련하는 데 두 개의 GPU만 필요하므로 통신 비용이 절감되고 처리량이 향상된다는 사실에 기인합니다. 또한 SGD는 30B 모델을 훈련할 때 8개의 RTX 3090 GPU에서 메모리 부족(OOM) 문제를 겪었고, LOMO는 4개의 GPU에서만 좋은 성능을 보였습니다.
마지막으로 연구원은 8개의 RTX 3090 GPU를 사용하여 65B 모델을 성공적으로 훈련하여 4.93 TGS의 처리량을 달성했습니다. 이 서버 구성 및 LOMO를 사용하면 1000개 샘플(각 샘플에 512개 토큰 포함)에 대한 모델 교육 프로세스에 약 3.6시간이 소요됩니다.
다운스트림 성능
대형 언어 모델을 미세 조정하는 데 있어 LOMO의 효율성을 평가하기 위해 연구원들은 광범위한 일련의 실험을 수행했습니다. 그들은 LOMO를 다른 두 가지 방법과 비교했습니다. 하나는 미세 조정이 필요하지 않은 Zero-shot이고 다른 하나는 널리 사용되는 매개 변수 효율적인 미세 조정 기술인 LoRA입니다.
표 3 결과는 다음과 같습니다.LOMO와 LoRA는 본질적으로 서로 독립적입니다. 이 진술을 확인하기 위해 연구원들은 LLaMA-13B를 사용하여 BoolQ 및 MultiRC 데이터 세트에 대한 실험을 수행했습니다. 결과는 그림 3에 나와 있습니다.
그들은 LoRA가 얼마나 높은 결과를 달성했는지에 관계없이 LOMO가 LoRA의 성능을 지속적으로 향상시키는 것을 발견했습니다. 이는 LOMO와 LoRA가 채택한 다양한 미세 조정 방법이 상호보완적임을 보여줍니다. 특히 LOMO는 사전 훈련된 모델의 가중치를 미세 조정하는 데 중점을 두고 LoRA는 다른 모듈을 조정합니다. 따라서 LOMO는 LoRA의 성능에 영향을 미치지 않고 다운스트림 작업에 대한 더 나은 모델 조정을 촉진합니다.
자세한 내용은 원본 논문을 참조하세요.
위 내용은 650억 개의 매개변수, 8개의 GPU로 모든 매개변수를 미세 조정할 수 있습니다. Qiu Xipeng 팀은 대형 모델의 임계값을 낮췄습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!