AI VIDEO BRIEFING

LoRA 파인튜닝과 PEFT 정리: LLM 미세조정 GPU 메모리 계산과 모델 병합 전략

AI 엔지니어링 7장 발표 정리. 풀 파인튜닝의 VRAM 계산부터 어댑터와 LoRA의 저랭크 분해, 태스크 벡터 기반 모델 병합, 학습률과 배치 크기 등 학습 하이퍼파라미터까지 실무 관점으로 짚었다.

파인튜닝은 마지막 카드다: LoRA와 PEFT로 GPU 메모리 벽을 넘는 법 영상 대표 이미지

핵심 메시지

  • 파인튜닝은 처음부터 손대는 수단이 아니라 프롬프트 엔지니어링과 퓨샷, RAG를 모두 시도한 뒤에도 안 될 때 꺼내는 마지막 카드로 설명된다.
  • 추론과 학습의 메모리 차이가 결정적이다. 130억 파라미터 모델은 추론에 약 32GB면 되지만, 옵티마이저 상태까지 올려야 하는 학습에서는 79GB 수준으로 뛴다.
  • LoRA는 원래 가중치 행렬을 건드리지 않고 작은 행렬 두 개를 따로 학습한 뒤 더하는 방식이라, 추론 시 추가 지연이 없고 메모리 부담도 작다.
  • 여러 LoRA나 파인튜닝 모델을 선형 결합하거나 태스크 벡터로 보간해 합치는 모델 병합, 전문가 모델을 쌓고 라우터를 두는 레이어 스태킹도 선택지가 된다.
  • 파인튜닝 모델을 상용 API에서 운영하면 데이터 업로드와 학습, 추론 모두에서 비용이 늘어나므로, 발표자는 우선 RAG를 더 다듬는 쪽을 권한다.

쉽게 이해하기

AI·ML·Quant 스터디가 공개한 발표 영상에서 발표자는 칩 후옌의 'AI 엔지니어링' 7장 파인튜닝을 정리한다. 시작점은 정의다. 미세조정은 이미 사전학습이 끝난 모델의 가중치를 전체 또는 일부 추가로 학습해 특정 작업에 맞추는 과정이고, 프롬프트 엔지니어링이 맥락과 도구를 주는 데 그치는 것과 달리 모델 자체를 건드린다는 점이 다르다.

발표의 절반은 메모리 이야기다. 여기서 말하는 메모리는 시스템 램이 아니라 GPU의 VRAM이다. 추론에는 모델 가중치와 활성화값, KV 캐시가 필요한데 130억 파라미터 모델을 16비트로 올리면 가중치만 26GB, 활성화와 KV 캐시를 20퍼센트 정도 더하면 약 32GB가 된다. 반면 학습에는 기울기와 옵티마이저 상태가 추가되고 Adam은 파라미터당 상태를 세 배로 쓰기 때문에 79GB까지 올라간다. 개인이 구할 수 있는 GPU의 VRAM을 넘어서는 지점이다.

그래서 등장하는 것이 PEFT, 즉 파라미터 효율적 미세조정이다. 발표자는 상위 레이어부터 하나씩 풀어 가며 학습하는 고전적 방식은 학습 파라미터를 줄일수록 성능이 떨어졌다는 실험을 먼저 보여 준 뒤, 어댑터 기반 학습으로 넘어간다. 어댑터는 기존 레이어의 벡터를 줄였다가 다시 늘리는 작은 모듈을 끼워 그 부분만 학습하는 방식인데, 전체 대비 극히 적은 파라미터만 학습해도 성능 저하가 거의 없었다. 문제는 레이어가 늘어나 추론 수행 시간이 나빠진다는 점이다.

발표의 핵심은 LoRA다. 원래 가중치 행렬은 입력 차원과 출력 차원의 곱만큼 크지만, 이를 중간 랭크 r을 공유하는 작은 행렬 두 개의 곱으로 분해하면 학습할 파라미터가 급격히 줄어든다. r은 대략 6에서 64 사이면 충분한 반면 입출력 차원은 만 단위가 되기도 한다. 학습은 이 작은 행렬 두 개에 대해서만 하고, 사용할 때는 두 행렬을 곱해 원래 형태로 만든 뒤 기존 가중치에 더한다. 이때 LoRA를 얼마나 반영할지를 정하는 값이 알파여서, r이 16이고 알파가 32면 두 배의 가중치를 준다는 뜻이 된다.

뒷부분에서는 학습을 실제로 돌릴 때 만지는 값들을 정리한다. 학습률은 기울기를 현재 값에 얼마나 반영할지 정하는데 너무 크면 발산하고 너무 작으면 학습이 느려진다. 배치 크기를 키우면 출력이 안정되지만 메모리가 크게 늘어나므로, 기울기를 몇 번 쌓았다가 평균 내어 한 번에 반영하는 그래디언트 누적으로 비슷한 효과를 낼 수 있다. 에폭은 데이터가 적으면 많이 돌려야 하지만 과적합을 부르므로 검증 세트로 지켜봐야 한다.

주요 인사이트

  • 파인튜닝 여부는 성능 문제가 아니라 순서 문제로 다뤄진다. 프롬프트, 퓨샷, RAG를 차례로 시도해 보고 그래도 안 될 때 넘어가는 것이 기본이며, 파인튜닝과 RAG는 서로 배타적이지 않아 함께 쓰는 경우가 많다.
  • 같은 파라미터 수라도 가중치를 몇 비트로 표현하느냐에 따라 메모리가 두 배로 갈린다. BF16이 FP32와 같은 표현 범위를 유지하면서 정밀도만 낮춘 것은, 범위를 지키는 편이 모델 성능에 더 유리하다는 판단에서 나온 설계다.
  • 파인튜닝 후 바뀐 가중치 중 핵심 20퍼센트만 남기고 나머지를 원래 값으로 되돌려도 성능이 유지된다는 실험은, 잘 학습된 모델일수록 실제로 작동하는 잠재 공간이 일부에 몰려 있다는 관점과 이어진다. LoRA가 통하는 이유도 같은 맥락에서 볼 수 있다.
  • 전문가 모델 여러 벌을 만들고 라우터가 질문마다 어디로 보낼지 정하는 구조는, 예전 같으면 에이전트 프레임워크로 짰을 법한 일을 모델 안에서 종단간으로 구현해 버리는 최근 흐름을 보여 준다.
  • 가중치를 -1, 0, 1 세 값만으로 바꿔도 성능이 크게 떨어지지 않는다는 극단적 사례가 언급되는데, 이때 어떤 가중치를 중요하게 남길지 고르는 방식에 따라 결과가 크게 달라진다.

자주 묻는 질문

LoRA는 원래 모델의 가중치를 압축하는 건가요?

아닙니다. 발표자는 질문에 답하며 원래 파라미터를 압축하는 것이 아니라 별도의 작은 행렬 두 개를 새로 만드는 것이라고 정리합니다. 원래 형태와 같아지도록 분해한 뒤 그 안의 값을 학습하고, 사용할 때 곱해서 기존 가중치에 더합니다.

QLoRA는 LoRA와 무엇이 다른가요?

베이스 모델 자체가 너무 커서 올리는 것조차 버거울 때 쓰는 방식으로 설명됩니다. 기존 모델을 4비트로 양자화해 메모리에 올린 다음 그 위에 LoRA를 적용해 학습하고, 결과를 더해서 사용합니다.

태스크 벡터로 모델을 합친다는 건 무슨 뜻인가요?

베이스 모델과 미세조정 모델의 차이를 벡터로 만든 것이 태스크 벡터입니다. 예를 들어 JSON 형식 출력용과 툴 호출용 태스크 벡터를 각각 만든 뒤, 둘 사이를 구면 선형 보간해 새 벡터를 만들고 베이스 모델에 적용하면 두 작업을 동시에 만족하는 모델을 노려볼 수 있습니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식