Home
Login

마이크로소프트에서 오픈 소스로 공개한 LoRA 라이브러리는 대규모 언어 모델의 저랭크 적응 기술을 구현하여 모델 미세 조정 시 훈련 파라미터를 크게 줄입니다.

MITPython 12.1kmicrosoftLoRA Last Updated: 2024-12-17

Microsoft LoRA 프로젝트 상세 소개

프로젝트 개요

Microsoft LoRA는 마이크로소프트에서 오픈 소스로 공개한 Python 라이브러리로, "LoRA: Low-Rank Adaptation of Large Language Models"(대규모 언어 모델의 저랭크 적응) 기술을 구현했습니다. 이 프로젝트는 대규모 언어 모델의 효율적인 미세 조정을 위한 혁신적인 솔루션을 제공합니다.

프로젝트 주소: https://github.com/microsoft/LoRA

논문 주소: https://arxiv.org/abs/2106.09685

핵심 기술 원리

LoRA 기술 소개

LoRA(Low-Rank Adaptation)는 파라미터 효율적인 미세 조정 방법으로, 핵심 아이디어는 다음과 같습니다.

  • 원래 사전 훈련된 가중치 동결: 원래 모델 파라미터를 수정하지 않음
  • 저랭크 분해 행렬 추가: 한 쌍의 저랭크 행렬을 학습하여 모델 적응을 구현
  • 훈련 파라미터 대폭 감소: 새로 추가된 저랭크 행렬 파라미터만 훈련

기술 장점

  1. 파라미터 효율성 극대화
  • GPT-3 175B 전체 미세 조정에 비해 LoRA는 훈련 파라미터를 10,000배 줄일 수 있음
  • GPU 메모리 요구량 3배 감소
  1. 뛰어난 성능 유지
  • RoBERTa, DeBERTa, GPT-2, GPT-3에서 전체 미세 조정과 비슷하거나 더 나은 성능을 보임
  • GLUE 벤치마크 테스트에서 뛰어난 결과 획득
  1. 배포 용이
  • 추가적인 추론 지연 없음
  • 효율적인 작업 전환 지원
  • 저장 공간 요구량 대폭 감소

성능 결과

GLUE 벤치마크 테스트 결과

GLUE 벤치마크 테스트에서 LoRA는 뛰어난 성능을 보여주었습니다.

모델 훈련 파라미터 수 MNLI 정확도 SST-2 정확도 MRPC 정확도
RoBERTa Base 전체 미세 조정 125M 87.6 94.8 90.2
RoBERTa Base LoRA 0.8M 87.6±.1 95.1±.2 89.7±.7
DeBERTa XXL 전체 미세 조정 1.5B 91.1 96.8 92.9
DeBERTa XXL LoRA 4.7M 91.9±.1 96.9±.2 92.6±.6

GPT-2 텍스트 생성 작업

E2E, DART, WebNLG 등 텍스트 생성 작업에서 LoRA는 뛰어난 성능을 보였습니다.

방법 훈련 파라미터 E2E (BLEU) DART (BLEU) WebNLG (BLEU)
GPT-2 M 전체 미세 조정 354.92M 68.2 46.0 47.6
GPT-2 M LoRA 0.35M 70.4±.1 47.1±.2 55.3±.2

프로젝트 구조

microsoft/LoRA/
├── loralib/           # 핵심 라이브러리 소스 코드
├── examples/
│   ├── NLG/          # GPT-2 자연어 생성 예제
│   └── NLU/          # RoBERTa/DeBERTa 자연어 이해 예제
├── README.md
└── setup.py

설치 및 사용

설치 방법

pip install loralib

# 또는 소스 코드에서 설치
pip install git+https://github.com/microsoft/LoRA

기본 사용 예제

1. 선형 레이어 교체
# ===== 수정 전 =====
# layer = nn.Linear(in_features, out_features)

# ===== 수정 후 =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)
2. 훈련 가능한 파라미터 표시
import loralib as lora

model = BigModel()
# "lora_"를 포함하는 파라미터만 훈련 가능하도록 설정
lora.mark_only_lora_as_trainable(model)

# 훈련 루프
for batch in dataloader:
    # 정상적인 훈련 과정
    pass
3. 체크포인트 저장 및 로드
# LoRA 파라미터 저장
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')

# 사전 훈련된 모델 로드
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# LoRA 파라미터 로드
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)

지원되는 레이어 유형

현재 LoRA 라이브러리는 다음 레이어 유형을 지원합니다.

  • nn.Linearlora.Linear
  • nn.Embeddinglora.Embedding
  • nn.Conv2dlora.Conv2d
  • lora.MergedLinear (QKV 투영 등 병합된 선형 레이어에 사용)

고급 기능

1. 병합된 선형 레이어 지원

# QKV 투영 등 시나리오의 경우
qkv_proj = lora.MergedLinear(
    d_model, 3*d_model, 
    r=8, 
    enable_lora=[True, False, True]  # Q와 V에만 LoRA 적용
)

2. 편향 벡터 훈련

# LoRA 관련 편향 훈련
lora.mark_only_lora_as_trainable(model, bias='lora_only')

# 모든 편향 훈련
lora.mark_only_lora_as_trainable(model, bias='all')

3. 추론 시 가중치 병합

# 평가 모드: 가중치 병합, 추론 지연 제거
model.eval()

# 훈련 모드: 분리 상태 복원
model.train()

활용 시나리오

  1. 대규모 모델 미세 조정: 미세 조정 비용을 크게 절감
  2. 다중 작업 학습: 효율적인 작업 전환
  3. 자원 제약 환경: 메모리 및 저장 공간 요구량 감소
  4. 빠른 프로토타입 개발: 모델 적응 과정 가속화

생태계 통합

  • Hugging Face PEFT: HF의 PEFT 라이브러리에 이미 통합됨
  • PyTorch 생태계: PyTorch 프레임워크와 완벽하게 호환
  • 사전 훈련된 모델: 다양한 주요 사전 훈련된 모델 지원

요약

Microsoft LoRA 프로젝트는 대규모 언어 모델의 효율적인 미세 조정을 위한 획기적인 솔루션을 제공합니다. 영리한 저랭크 적응 기술을 통해 계산 및 저장 비용을 크게 줄이면서도 뛰어난 모델 성능을 유지합니다. 이 프로젝트는 중요한 학문적 가치를 지닐 뿐만 아니라 실제 산업 응용 분야에 실행 가능한 기술 경로를 제공하며, 파라미터 효율적인 미세 조정 분야의 획기적인 작업입니다.

Star History Chart