이것은 저자 Sebastian Raschka가 수백 번의 실험을 거쳐 얻은 경험입니다.
데이터 양과 모델 매개변수의 양을 늘리는 것이 신경망 성능을 향상시키는 가장 직접적인 방법으로 인식되고 있습니다. 현재 주류 대형 모델의 매개변수 수는 수천억 개로 확대되었으며 '대형 모델'의 대형화 추세는 점점 더 심해질 것입니다. 이러한 추세로 인해 많은 컴퓨팅 성능 문제가 발생했습니다. 수천억 개의 매개변수가 있는 대규모 언어 모델을 미세 조정하려면 훈련하는 데 오랜 시간이 걸릴 뿐만 아니라 고성능 메모리 리소스도 많이 필요합니다. 대형 모델을 미세 조정하는 데 드는 비용을 "절감"하기 위해 Microsoft 연구원들은 LoRA(낮은 순위 적응형) 기술을 개발했습니다. LoRA의 미묘함은 원래 대형 모델에 분리 가능한 플러그인을 추가하는 것과 동일하며 모델의 본체는 변경되지 않은 상태로 유지된다는 것입니다. LoRA는 플러그 앤 플레이 방식으로 가볍고 편리합니다. 대규모 언어 모델의 맞춤형 버전을 효율적으로 미세 조정하기 위해 LoRA는 가장 널리 사용되는 방법 중 하나이자 가장 효과적인 방법 중 하나입니다. 오픈소스 LLM에 관심이 있다면 LoRA는 배울 가치가 있고 놓칠 수 없는 기본 기술입니다. 위스콘신대학교 매디슨 캠퍼스의 데이터 과학 교수인 Sebastian Raschka도 LoRA에 대한 포괄적인 탐구를 수행했습니다. 수년 동안 기계 학습 분야를 탐구한 그는 복잡한 기술 개념을 분해하는 데 매우 열정적입니다. 수백 번의 실험 끝에 Sebastian Raschka는 LoRA를 사용하여 대형 모델을 미세 조정한 경험을 요약하고 이를 Ahead of AI 잡지에 게재했습니다.
본 사이트는 작성자의 초심을 유지하는 차원에서 다음과 같은 글을 편집했습니다. 지난달에 LoRA 실험에 관한 글을 공유했는데, 이는 저와 동료들이 유지한 글을 중심으로 작성되었습니다. Lightning AI 오픈 소스 Lit-GPT 라이브러리에서 내 실험을 통해 얻은 주요 경험과 교훈을 논의합니다. 또한 LoRA 기술과 관련하여 자주 묻는 몇 가지 질문에 답변해 드리겠습니다. 사용자 정의 대형 언어 모델을 미세 조정하는 데 관심이 있다면 이러한 통찰력이 빠르게 시작하는 데 도움이 되기를 바랍니다. 간단히 말해서 이 기사에서 논의할 주요 사항은 다음과 같습니다.
- LLM 훈련(또는 GPU에서 훈련된 모든 모델)은 불가피한 무작위성을 갖지만 다중 LUN 훈련의 결과는 여전히 매우 일관성이 있습니다.
- GPU 메모리가 제한되어 있는 경우 QLoRA는 비용 효율적인 절충안을 제공합니다. 런타임이 39% 증가하는 대신 메모리가 33% 절약됩니다.
- LLM을 미세 조정할 때 옵티마이저의 선택은 결과에 영향을 미치는 주요 요인이 아닙니다. AdamW, 스케줄러가 있는 SGD, 스케줄러가 있는 AdamW 등 결과에 미치는 영향은 최소화됩니다.
- Adam은 각 모델 매개변수에 대해 두 개의 새로운 매개변수를 도입하기 때문에 종종 메모리 집약적인 최적화 프로그램으로 간주되지만 이는 LLM의 최대 메모리 요구 사항에 큰 영향을 미치지 않습니다. 이는 추가 매개변수를 보유하는 대신 대부분의 메모리가 큰 행렬의 곱셈을 위해 할당되기 때문입니다.
- 정적 데이터 세트의 경우 여러 라운드의 학습과 같은 여러 반복이 제대로 작동하지 않을 수 있습니다. 이는 종종 과적합으로 이어져 훈련 결과를 악화시킵니다.
- LoRA를 결합하려면 Key 및 Value 행렬뿐만 아니라 모든 레이어에 적용하여 모델의 성능을 극대화해야 합니다.
- LoRA 순위를 조정하고 적절한 α 값을 선택하는 것이 중요합니다. 팁으로 α 값을 순위 값의 두 배로 설정해 보세요.
- 14GB RAM을 갖춘 단일 GPU는 70억 개의 매개변수가 있는 대형 모델을 몇 시간 내에 효율적으로 미세 조정할 수 있습니다. 정적 데이터 세트의 경우 LLM을 "만능 플레이어"로 강화하고 모든 기본 작업을 잘 수행하는 것은 불가능합니다. 이 문제를 해결하려면 데이터 소스를 다양화하거나 LoRA 이외의 기술을 사용해야 합니다.
그리고 LoRA에 관해 자주 묻는 10가지 질문에 답변해드리겠습니다. 독자들이 관심을 가지신다면 LoRA를 처음부터 구현하기 위한 자세한 코드를 포함하여 LoRA에 대한 좀 더 포괄적인 소개를 또 작성하겠습니다. 오늘 기사에서는 주로 LoRA 사용에 관한 주요 문제를 공유합니다. 정식으로 시작하기 전에 몇 가지 기본 지식을 추가해 보겠습니다. GPU 메모리 제한으로 인해 학습 중에 모델 가중치를 업데이트하는 데 비용이 많이 듭니다. 예를 들어 가중치 행렬 W로 표현되는 7B 매개변수 언어 모델이 있다고 가정합니다. 역전파 동안 모델은 손실 함수 값을 최소화하기 위해 원래 가중치를 업데이트하는 것을 목표로 ΔW 행렬을 학습해야 합니다. 가중치는 다음과 같이 업데이트됩니다: W_updated = W + ΔW. 가중치 행렬 W에 7B개의 매개변수가 포함되어 있으면 가중치 업데이트 행렬 ΔW에도 7B개의 매개변수가 포함됩니다. 행렬 ΔW를 계산하는 것은 계산적으로나 메모리를 많이 소모합니다. Edward Hu 등이 제안한 LoRA는 체중 변화 부분 ΔW를 하위 표현으로 분해합니다. 특히 ΔW에 대한 명시적인 계산이 필요하지 않습니다. 대신 LoRA는 아래 그림과 같이 학습 중에 ΔW의 분해된 표현을 학습합니다. 이것이 LoRA가 계산 리소스를 절약하는 비결입니다.
위에서 볼 수 있듯이 ΔW의 분해는 더 큰 행렬 ΔW를 나타내기 위해 두 개의 작은 LoRA 행렬 A와 B를 사용해야 함을 의미합니다. A가 ΔW와 동일한 수의 행을 갖고 B가 ΔW와 동일한 수의 열을 갖는 경우 위의 분해를 ΔW = AB로 쓸 수 있습니다. (AB는 행렬 A와 B 간의 행렬 곱셈의 결과입니다.) 이 방법을 사용하면 메모리가 얼마나 절약되나요? 또한 하이퍼파라미터인 랭크 r에 따라 달라집니다. 예를 들어 ΔW에 10,000개의 행과 20,000개의 열이 있는 경우 200,000,000개의 매개변수를 저장해야 합니다. r=8인 A와 B를 선택하면 A에는 10,000개의 행과 8개의 열이 있고 B에는 8개의 행과 20,000개의 열이 있습니다. 이는 10,000×8 + 8×20,000 = 240,000개의 매개변수로, 이는 200,000,000보다 약 830배 적은 수치입니다. 매개변수. 물론 A와 B가 ΔW가 다루는 모든 정보를 담을 수는 없지만 이는 LoRA의 설계에 따라 결정됩니다. LoRA를 사용할 때 모델 W는 사전 훈련 데이터 세트의 모든 지식을 수집하기 위한 전체 순위를 갖는 대규모 행렬이라고 가정합니다. LLM을 미세 조정할 때 모든 가중치를 업데이트할 필요는 없지만 핵심 정보를 캡처하기 위해 ΔW보다 적은 가중치만 업데이트하면 됩니다. 이것이 AB 매트릭스를 통해 하위 순위 업데이트가 구현되는 방식입니다. LLM의 무작위성, 즉 GPU에서 훈련된 모델은 불가피하지만, LoRA를 사용하여 여러 실험을 진행하였고, LLM의 최종 벤치마크 결과는 다양한 테스트에서 집중력은 놀라운 일관성을 보여주었습니다. 이는 다른 비교 연구를 수행하는 데 좋은 기초가 됩니다.
이 결과는 r=8이라는 작은 값을 사용하여 기본 설정에서 얻은 결과입니다. 실험 세부 사항은 내 다른 기사에서 찾을 수 있습니다. 기사 링크: https://lightning.ai/pages/community/lora-insights/QLoRA는 Tim Dettmers 외 연구진이 제안했습니다. 정량적 LoRA의 약어. QLoRA는 미세 조정 중에 메모리 공간을 더욱 줄이는 기술입니다. 역전파 동안 QLoRA는 사전 훈련된 가중치를 4비트로 양자화하고 페이징 최적화 프로그램을 사용하여 메모리 피크를 처리합니다. LoRA를 사용하면 GPU 메모리를 33% 절약할 수 있다는 것을 발견했습니다. 그러나 QLoRA에서는 사전 훈련된 모델 가중치의 추가적인 양자화 및 역양자화로 인해 훈련 시간이 39% 증가합니다.
QLoRA(4자리 일반 부동 소수점 포함) 숫자
또한 모델의 성능에는 거의 영향을 미치지 않는 것으로 나타났습니다. QLoRA는 일반적인 GPU 메모리 병목 현상을 해결하기 위해 한 단계 더 발전하는 LoRA 대안 솔루션으로 훈련될 수 있습니다.
학습률 스케줄러는 학습 과정 전반에 걸쳐 학습률을 줄여 모델의 수렴을 최적화하고 과도한 손실 값을 방지합니다. 코사인 어닐링은 코사인 곡선을 따라 학습률을 조정하는 스케줄러입니다. 높은 학습률로 시작하여 부드럽게 감소하여 코사인과 같은 패턴으로 점차 0에 가까워집니다. 코사인 어닐링의 일반적인 변형은 아래 그림과 같이 훈련 중에 코사인 주기의 절반만 완료되는 반주기 변형입니다.
실험에서 LoRA 미세 조정 스크립트에 코사인 어닐링 스케줄러를 추가하여 SGD의 성능을 크게 향상시켰습니다. 그러나 Adam 및 AdamW 최적화 프로그램에 대한 이점은 작으며 추가한 후에도 거의 변화가 없습니다.
다음 섹션에서는 Adam에 비해 SGD의 잠재적 이점에 대해 논의합니다. Adam 및 AdamW 최적화 프로그램은 딥 러닝에서 널리 사용됩니다. 7B 매개변수 모델을 훈련하는 경우 Adam을 사용하면 훈련 과정 중에 추가로 14B 매개변수를 추적할 수 있습니다. 이는 다른 조건이 변경되지 않은 상태에서 모델의 매개변수 수를 두 배로 늘리는 것과 같습니다. SGD는 훈련 중에 추가 매개변수를 추적할 수 없는데, Adam에 비해 최대 메모리 측면에서 SGD의 장점은 무엇인가요? 내 실험에서 AdamW 및 LoRA(기본 설정 r=8)를 사용하여 7B 매개변수 Llama 2 모델을 훈련하려면 14.18GB의 GPU 메모리가 필요했습니다. SGD로 동일한 모델을 훈련하려면 14.15GB의 GPU 메모리가 필요합니다. AdamW와 비교하여 SGD는 0.03GB의 메모리만 절약하며 이는 무시할만한 효과가 있습니다. 왜 그렇게 많은 메모리만 절약하나요? 이는 LoRA를 사용할 때 모델의 매개변수 수를 크게 줄였기 때문이다. 예를 들어, r=8인 경우 7B의 Llama 2 모델의 전체 6,738,415,616개 매개변수 중 훈련 가능한 LoRA 매개변수는 4,194,304개뿐입니다. 숫자로만 보면 4,194,304개의 매개변수가 여전히 많을 수 있지만 실제로 이 많은 매개변수는 4,194,304 × 2 × 16비트 = 134.22메가비트 = 16.78메가바이트에 불과합니다. (최적화 상태를 저장하고 복사하는 데 추가 오버헤드로 인해 0.03Gb = 30Mb의 차이가 관찰되었습니다.) 2는 Adam이 저장한 추가 매개변수의 수를 나타내고, 16비트는 모델 가중치의 기본 정밀도를 나타냅니다.
LoRA 매트릭스의 r을 8에서 256으로 확장하면 AdamW에 비해 SGD의 장점이 나타납니다.
- AdamW를 사용하면 17.86GB의 메모리를 차지합니다
따라서 매트릭스 크기가 커지면 SGD가 절약하는 메모리가 중요한 역할을 하게 됩니다. SGD는 추가적인 옵티마이저 매개변수를 저장할 필요가 없기 때문에 대규모 모델을 처리할 때 Adam과 같은 다른 옵티마이저보다 더 많은 메모리를 절약할 수 있습니다. 이는 메모리가 제한된 훈련 작업에 매우 중요한 이점입니다. 기존 딥 러닝에서는 훈련 세트를 여러 번 반복하는 경우가 많으며 각 반복을 에포크라고 합니다. 예를 들어, 컨벌루션 신경망을 훈련할 때 일반적으로 수백 에포크 동안 실행합니다. 그렇다면 여러 차례의 반복 훈련도 교육 미세 조정에 영향을 미칠까요? 답은 '아니요'입니다. 50,000개의 데이터로 Alpaca 예제 명령 미세 조정 데이터 세트에서 반복 횟수를 두 배로 늘렸을 때 모델 성능이 떨어졌습니다.
그래서 저는 여러 차례의 반복이 교육 미세 조정에 도움이 되지 않을 수 있다는 결론에 도달했습니다. 1k 샘플 LIMA 명령 미세 조정 세트에서 동일한 동작을 관찰했습니다. 모델 성능 저하는 과적합으로 인해 발생할 수 있으며 구체적인 이유는 아직 더 자세히 조사해야 합니다. 아래 표는 LoRA가 선택된 행렬(즉, 각 Transformer의 키 및 값 행렬)에서만 작동하는 실험을 보여줍니다. 또한 쿼리 가중치 행렬, 프로젝션 레이어, 다중 헤드 주의 모듈 사이의 기타 선형 레이어 및 출력 레이어에서 LoRA를 활성화할 수 있습니다.
이러한 추가 레이어에 LoRA를 추가하면 7B의 Llama 2 모델에 대해 훈련 가능한 매개변수 수가 4,194,304에서 20,277,248로 5배 증가합니다. 더 많은 레이어에 LoRA를 적용하면 모델 성능이 크게 향상될 수 있지만 더 많은 메모리 공간이 필요합니다. 또한 다음 두 가지 설정만 살펴봤습니다. (1) 쿼리 및 가중치 행렬만 활성화된 LoRA, (2) 모든 레이어가 활성화된 LoRA, 더 많은 레이어와 조합하여 LoRA를 사용하면 어떤 효과가 나올까요? 추가 연구. 투영 계층에서 LoRA를 사용하는 것이 훈련 결과에 유익한지 알 수 있다면 모델을 더 잘 최적화하고 성능을 향상시킬 수 있습니다.
균형 LoRA 하이퍼파라미터: R 및 Alpha LoRA를 제안한 논문에서 언급했듯이 LoRA는 추가적인 스케일링 인자를 도입합니다. 이 계수는 순방향 전파 동안 사전 훈련에 LoRA 가중치를 적용하는 데 사용됩니다. 확장에는 앞서 설명한 순위 매개변수 r과 다음과 같이 적용되는 또 다른 하이퍼 매개변수 α(알파)가 포함됩니다.
위 이미지의 공식에서 볼 수 있듯이 LoRA 가중치의 값이 클수록 영향이 더 큽니다. 이전 실험에서는 사용한 매개변수가 r=8, alpha=16이어서 2배 확장이 되었습니다. LoRA를 사용하여 대형 모델의 무게를 줄일 때 알파를 r의 두 배로 설정하는 것이 일반적인 경험 법칙입니다. 하지만 이 규칙이 더 큰 r 값에도 적용되는지 궁금합니다.
r=32, r=64, r=128 및 r=512도 시도했지만 명확성을 위해 이 프로세스를 생략했지만 r=256이 가장 잘 작동했습니다. 실제로 alpha=2r을 선택하면 최적의 결과가 제공됩니다. LoRA를 사용하면 단일 GPU에서 7B 매개변수 규모로 대규모 언어 모델을 미세 조정할 수 있습니다. 이 특별한 경우, AdamW 최적화 프로그램을 사용하여 17.86GB(50,000개 훈련 예제)의 데이터를 처리하는 데 QLoRA에 대한 최상의 설정(r=256, alpha=512)(여기서는 Alpaca 데이터 세트)을 사용하는 A100에서 약 3시간이 걸렸습니다.
이 글의 나머지 부분에서는 여러분이 가질 수 있는 다른 질문에 답변해 드리겠습니다. 데이터세트는 매우 중요합니다. 저는 50,000개의 훈련 예제와 함께 Alpaca 데이터 세트를 사용하고 있습니다. 알파카가 워낙 인기가 많아서 선택했어요. 이 글은 이미 내용이 매우 길기 때문에 더 많은 데이터 세트에 대한 테스트 결과는 이 글에서 다루지 않겠습니다. Alpaca는 오늘날의 기준으로는 다소 구식일 수 있는 합성 데이터 세트입니다. 데이터 품질이 중요합니다. 예를 들어, 지난 6월에 저는 단지 천 개의 사례로 구성된 선별된 데이터세트인 LIMA 데이터세트에 대해 논의하는 게시물을 썼습니다. 기사 링크: https://magazine.sebastianraschka.com/p/ahead-of-ai-9-llm-tuning-and-datasetLIMA를 제안하는 논문 제목은 다음과 같습니다. 정렬의 경우 LIMA가 Alpaca보다 데이터가 적지만 LIMA를 기반으로 미세 조정된 65B Llama 모델이 Alpaca의 결과보다 좋습니다. 동일한 구성(r=256, alpha=512)을 사용하여 LIMA에서 50배의 데이터가 있는 Alpaca와 비슷한 모델 성능을 얻었습니다. 저는 아직 이 질문에 대한 명확한 답을 가지고 있지 않습니다. 경험상 지식은 일반적으로 사전 훈련 데이터 세트에서 추출됩니다. 일반적으로 언어 모델은 일반적으로 사전 훈련 데이터 세트에서 지식을 흡수하며 지침 미세 조정의 역할은 주로 LLM이 지침을 더 잘 따르도록 돕는 것입니다. 컴퓨팅 성능은 대규모 언어 모델의 학습을 제한하는 핵심 요소이므로 LoRA를 사용하여 특정 분야의 전용 데이터 세트에 대해 사전 학습된 기존 LLM을 추가로 사전 학습할 수도 있습니다. 또한 내 실험에 두 가지 산술 벤치마크가 포함되었다는 점도 주목할 만합니다. 두 벤치마크 모두에서 LoRA로 미세 조정된 모델은 사전 훈련된 기본 모델보다 성능이 훨씬 나빴습니다. 나는 이것이 알파카 데이터 세트에 해당 산술 예제가 부족하지 않아 모델이 산술 지식을 "잊게"하기 때문이라고 추측합니다. 모델이 산술 지식을 "잊었는지", 아니면 해당 명령에 대한 응답을 중단했는지 확인하려면 추가 연구가 필요합니다. 그러나 여기서 한 가지 결론을 내릴 수 있습니다. "LLM을 미세 조정할 때 우리가 관심을 갖는 각 작업에 대한 예제가 데이터 세트에 포함되어 있는 것이 좋습니다." 이 문제에 대해서는 아직 더 나은 해결책이 없습니다. 최적의 r 값을 결정하려면 각 LLM 및 각 데이터 세트의 특정 상황을 기반으로 특정 문제에 대한 구체적인 분석이 필요합니다. r 값이 너무 크면 과적합이 발생하고, r 값이 너무 작으면 데이터 세트의 다양한 작업을 포착하지 못할 수 있다고 추측합니다. 데이터 세트에 작업 유형이 많을수록 필요한 r 값이 더 커질 것으로 생각됩니다. 예를 들어, 기본적인 두 자리 산술 연산을 수행하는 데만 모델이 필요한 경우 작은 r 값이면 충분할 수 있습니다. 그러나 이것은 단지 나의 가설일 뿐이며 검증하려면 추가 연구가 필요합니다. Q4: 모든 레이어에 대해 LoRA를 활성화해야 하나요? 두 가지 설정만 탐색했습니다. (1) 쿼리 및 가중치 행렬만 활성화된 LoRA와 (2) 모든 레이어가 활성화된 LoRA입니다. 더 많은 레이어와 조합하여 LoRA를 사용하는 효과는 추가 연구할 가치가 있습니다. 투영 계층에서 LoRA를 사용하는 것이 훈련 결과에 유익한지 알 수 있다면 모델을 더 잘 최적화하고 성능을 향상시킬 수 있습니다. 다양한 설정(lora_query, lora_key, lora_value, lora_projection, lora_mlp, lora_head)을 고려하면 탐색할 조합이 64개 있습니다. 일반적으로 r이 클수록 과적합으로 이어질 가능성이 더 높습니다. r이 훈련 가능한 매개변수의 수를 결정하기 때문입니다. 모델이 과적합된 경우 먼저 r 값을 낮추거나 데이터 세트 크기를 늘리는 것을 고려하십시오. 또한 AdamW 또는 SGD 최적화 프로그램의 가중치 감쇠율을 높이거나 LoRA 레이어의 드롭아웃 값을 늘려볼 수 있습니다. 실험에서 LoRA의 드롭아웃 매개변수를 탐색하지 않았습니다(고정된 드롭아웃 비율 0.05를 사용했습니다). LoRA의 드롭아웃 매개변수도 연구할 가치가 있는 질문입니다. Q6: 선택할 수 있는 다른 최적화 프로그램이 있나요? 올해 5월에 출시된 Sophia는 언어 모델 사전 학습을 위한 확장 가능한 확률적 2차 최적화 프로그램입니다.다음 논문: "Sophia: A Scalable Stochastic Second-order Optimizer for Language Model Pre-training"에 따르면, Sophia는 Adam에 비해 두 배 더 빠르며 더 나은 성능을 달성할 수 있습니다. 간단히 말해서 Sophia는 Adam과 마찬가지로 그래디언트 분산이 아닌 그래디언트 곡률을 통해 정규화를 구현합니다. 페이퍼 링크: https://arxiv.org/abs/2305.14342Q7: 메모리 사용량에 영향을 미치는 다른 요인이 있나요? 정밀도 및 양자화 설정, 모델 크기, 배치 크기 및 학습 가능한 LoRA 매개변수 수 외에도 데이터 세트는 메모리 사용량에도 영향을 미칩니다. Llama 2의 블록 크기는 4048개 토큰입니다. 즉, Llama는 한 번에 4048개의 토큰이 포함된 시퀀스를 처리할 수 있다는 의미입니다. 후속 토큰에 마스크를 추가하면 훈련 시퀀스가 더 짧아져 많은 메모리를 절약할 수 있습니다. 예를 들어, Alpaca 데이터 세트는 상대적으로 작으며 가장 긴 시퀀스 길이는 1304 토큰입니다. 2048 토큰의 가장 긴 시퀀스 길이를 가진 다른 데이터세트를 사용하려고 하면 메모리 사용량이 17.86GB에서 26.96GB로 늘어납니다. Q8: Full Fine-tuning과 RLHF에 비해 LoRA의 장점은 무엇인가요? RLHF는 실험해보진 않았지만 풀트림을 시도해봤습니다. 전체 미세 조정에는 최소 2개의 GPU가 필요하고 각각 36.66GB를 차지하며 완료하는 데 3.5시간이 걸렸습니다. 그러나 잘못된 기본 테스트 결과는 과적합 또는 최적이 아닌 매개변수로 인해 발생할 수 있습니다. 답은 '예'입니다. 훈련 중에는 LoRA 가중치와 사전 훈련된 가중치를 분리하고 각 순방향 패스에서 결합합니다. 실제 세계에는 여러 LoRA 가중치 세트가 있는 애플리케이션이 있고 각 가중치 세트가 애플리케이션 사용자에 해당한다고 가정하면 디스크 공간을 절약하기 위해 이러한 가중치를 별도로 저장하는 것이 합리적입니다. 또한 사전 훈련된 가중치와 LoRA 가중치는 훈련 후에 병합되어 단일 모델을 만들 수 있습니다. 이렇게 하면 모든 순방향 패스에 LoRA 가중치를 적용할 필요가 없습니다. weight += (lora_B @ lora_A) * scaling
로그인 후 복사
위에 표시된 방법을 사용하여 가중치를 업데이트하고 결합된 가중치를 저장할 수 있습니다. 마찬가지로 계속해서 많은 LoRA 가중치 세트를 추가할 수 있습니다. weight += (lora_B_set1 @ lora_A_set1) * scaling_set1weight += (lora_B_set2 @ lora_A_set2) * scaling_set2weight += (lora_B_set3 @ lora_A_set3) * scaling_set3...
로그인 후 복사
이 방법을 평가하기 위해 실험을 한 것은 아니지만 Lit-GPT에서 제공하는 scripts/merge_lora.py 스크립트를 통해입니다. 이미 가능합니다. 스크립트 링크: https://github.com/Lightning-AI/lit-gpt/blob/main/scripts/merge_lora.pyQ10: 레이어별 성능은 어떻습니까? 레이어 최적 순위 적응? 간단함을 위해 심층 신경망에서는 일반적으로 각 레이어에 대해 동일한 학습 속도를 설정합니다. 학습률은 우리가 최적화해야 하는 하이퍼파라미터이며, 더 나아가 각 레이어에 대해 서로 다른 학습률을 선택할 수 있습니다(PyTorch에서는 이는 그리 복잡한 일이 아닙니다). 그러나 이 접근 방식은 추가 비용을 추가하고 심층 신경망에서 조정할 수 있는 다른 많은 매개 변수가 있기 때문에 실제로는 거의 수행되지 않습니다. 서로 다른 레이어에 대해 서로 다른 학습률을 선택하는 것과 유사하게, 서로 다른 레이어에 대해 서로 다른 LoRA r 값을 선택할 수도 있습니다. 아직 시도하지는 않았지만 이 방법을 자세히 설명하는 문서인 "LLM Optimization: Layer-wise Optimal Rank Adaptation (LORA)"가 있습니다. 이론적으로 이 접근 방식은 초매개변수 최적화를 위한 많은 범위를 제공하므로 유망해 보입니다. 논문 링크: https://medium.com/@tom_21755/llm-optimization-layer-wise-optimal-rank-adaptation-lora-1444dfbc8e6a원본 링크: https:// magazine.sebastianraschka.com/p/practical-tips-for-finetuning-llms?continueFlag=0c2e38ff6893fba31f1492d815bf928b위 내용은 대형 모델이 전체적인 미세 조정을 감당할 수 없다는 것이 아니라 LoRA가 더 비용 효율적이고 튜토리얼이 준비되어 있다는 것입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!