요약생성
바쁠 때는 리얼라이즈가 내용을 요약해 드려요.
대규모 언어 모델(LLM)은 훈련, 미세 조정 및 실행 비용이 많이 드는 것으로 알려져 있습니다. GPT-3.5 및 ChatGPT의 기능과 동일한 수준을 갖추려면 수백만 달러 상당의 컴퓨팅 비용으로 훈련된 수천억 개의 매개변수를 가진 모델이 필요하다고 생각되었습니다.
그러나 최근에 출시된 오픈 소스 LLM은 최첨단 기술과 경쟁하기 위해 매우 큰 모델이 필요하지 않다는 것을 증명했습니다. 연구자들은 수십억 개의 매개변수를 사용하여 매우 큰 모델에 필적하는 수준으로 수행하는 LLM을 훈련했습니다. 오픈 소스 대규모 언어 모델의 성공으로 이 분야에 대한 관심과 활동이 증가하고 있습니다.
이러한 노력 중 일부는 LLM의 미세 조정을 보다 비용 효율적으로 만드는 데 중점을 둡니다. 미세 조정 비용을 크게 줄이는 데 도움이 되는 기술 중 하나는 'Low-Rank Adaptation'(LoRA)입니다. LoRA를 사용하면 일반적으로 소요되는 비용의 일부만으로 LLM을 미세 조정할 수 있습니다.
다음은 LoRA에 대해 알아야 할 사항입니다.
LLM 미세 조정은 어떻게 작동합니까?
LLaMA, Pythia, MPT-7B와 같은 오픈 소스 LLM은 수천억 개의 단어로 사전 훈련된 기초 모델입니다. 개발자와 머신 러닝 엔지니어는 사전 훈련된 가중치로 모델을 다운로드하고 지침 따르기와 같은 다운스트림 작업을 위해 미세 조정할 수 있습니다.
모든 LLM은 각각 학습 가능한 매개변수를 포함하는 여러 계층 블록으로 구성된 변환기 모델입니다. 미세 조정은 사전 훈련이 중단된 부분부터 계속됩니다.
모델에는 미세 조정 데이터 세트의 입력이 제공됩니다. 그런 다음 다음 토큰을 예측하고 출력을 ground truth와 비교합니다. 그런 다음 가중치를 조정하여 예측을 수정합니다. 이 작업을 반복적으로 수행함으로써 LLM은 다운스트림 작업에 맞게 미세 조정됩니다.
클래식 ML 모델 미세 조정
이제 미세 조정 프로세스를 약간 수정해 보겠습니다. 이 새로운 방법에서는 모델의 원래 가중치를 고정하고 미세 조정 프로세스 중에 수정하지 않습니다. 대신 별도의 가중치 집합에 수정 사항을 적용하고 새 값을 원래 매개변수에 추가합니다. 이러한 두 세트를 '사전 훈련된' 가중치와 '미세 조정된' 가중치라고 부르겠습니다.
사전 훈련된 매개변수와 미세 조정된 매개변수를 분리하는 것은 LoRA의 중요한 부분입니다.
원래 ML 모델 가중치 고정, 별도의 가중치 집합 미세 조정
Low-Rank Adaptation
LoRA로 넘어가기 전에 모델 매개변수를 매우 큰 행렬로 생각해 보겠습니다. 선형 대수 수업을 기억한다면 행렬은 벡터 공간을 형성할 수 있습니다. 이 경우 언어를 모델링하는 많은 차원을 가진 매우 큰 벡터 공간에 대해 이야기하고 있습니다.
모든 행렬에는 '랭크'가 있는데, 이는 선형적으로 독립적인 열의 수입니다. 열이 선형적으로 독립적이라는 것은 행렬의 다른 열의 조합으로 표현할 수 없다는 것을 의미합니다. 반면에 종속 열은 동일한 행렬에서 하나 이상의 열의 조합으로 표현할 수 있는 열입니다. 정보 손실 없이 행렬에서 종속 열을 제거할 수 있습니다.
Microsoft의 연구원들이 논문에서 제안한 LoRA는 다운스트림 작업을 위해 LLM을 미세 조정할 때 전체 랭크 가중치 행렬이 필요하지 않다고 제안합니다. 그들은 다운스트림 매개변수의 차원을 줄이면서 모델의 학습 용량의 대부분을 보존할 수 있다고 제안했습니다. (이것이 사전 훈련된 가중치와 미세 조정된 가중치를 분리하는 것이 타당한 이유입니다.)
Low-Rank Adaptation (LoRA)
기본적으로 LoRA에서는 두 개의 다운스트림 가중치 행렬을 만듭니다. 하나는 입력 매개변수를 원래 차원에서 낮은 랭크 차원으로 변환합니다. 그리고 두 번째 행렬은 낮은 랭크 데이터를 원래 모델의 출력 차원으로 변환합니다.
훈련하는 동안 이제 원래 가중치보다 훨씬 적은 LoRA 매개변수에 대한 수정이 이루어집니다. 이것이 전체 미세 조정을 수행하는 비용의 일부만으로 훨씬 빠르게 훈련할 수 있는 이유입니다. 추론 시 LoRA의 출력을 사전 훈련된 매개변수에 추가하여 최종 값을 계산합니다.
LoRA를 통한 추가 개선 사항
LoRA를 사용하려면 사전 훈련된 가중치와 미세 조정된 가중치를 별도로 유지해야 하므로 메모리 오버헤드가 발생합니다. 또한 추론 시 사전 훈련된 가중치와 미세 조정된 가중치를 추가하는 작업으로 인해 약간의 계산 페널티가 발생합니다. 이러한 페널티를 극복하기 위해 LoRA로 LLM을 미세 조정한 후 미세 조정된 가중치와 사전 훈련된 가중치를 병합할 수 있습니다.
그러나 다운스트림 가중치는 원래 가중치의 일부(경우에 따라 1,000분의 1까지)만 차지하므로 별도로 유지하는 것이 좋습니다. 사전 훈련된 가중치와 다운스트림 가중치를 분리하면 이점이 있습니다.
예를 들어 여러 클라이언트가 서로 다른 애플리케이션에 사용하는 LLM을 호스팅한다고 가정해 보겠습니다. 각 클라이언트는 고유한 특정 데이터 세트와 고유한 애플리케이션에 맞게 모델을 미세 조정하려고 합니다. 각 클라이언트에 대해 별도의 미세 조정된 모델 버전을 만드는 대신 LoRA를 사용하여 각 클라이언트 또는 애플리케이션에 대한 다운스트림 가중치 집합을 만들 수 있습니다. 추론 시 기본 모델과 각 클라이언트의 LoRA 가중치를 로드하여 최종 계산을 수행합니다. 성능이 약간 저하되지만 스토리지 이점은 엄청납니다.
Python에서 LoRA 구현
이 게시물은 LoRA의 작동 방식에 대한 매우 광범위한 개요였습니다. 적용되는 가중치 유형 및 하이퍼파라미터와 같은 기술적 세부 정보와 미묘한 차이가 더 많습니다. Sebastian Raschka는 LoRA에 대한 기술 및 구현 세부 정보를 제공하는 긴 게시물을 작성했습니다.
Chris Alexiuk는 또한 LoRA에 대한 자세한 두 부분으로 구성된 비디오 시리즈를 제공합니다. 첫 번째는 이론을 자세히 살펴보고 두 번째는 Python 및 Google Colab을 사용한 실습 구현입니다.
LoRA는 오픈 소스 LLM 훈련 비용을 줄이는 데 도움이 되는 여러 기술 중 하나입니다. 이 분야는 매우 빠르게 움직이고 있습니다. 이 분야가 어떻게 발전할지 지켜보는 것은 흥미로울 것입니다.