본문으로 건너뛰기
홈
기술
기술 전체
프로그래밍68
컴퓨터 과학63
AI48
웹 개발36
인프라33
데이터31
소프트웨어 공학18
소개
← 목록으로AI › 언어 모델 › 응용

7. 모델 가볍게 만들기

목차

모델 가볍게 만들기

모델이 답변을 잘하더라도 서비스 장치의 메모리에 올라가지 않거나 응답이 너무 느리면 사용할 수 없다. 모델 경량화(Model Compression)는 필요한 품질을 유지하면서 저장 공간, GPU 메모리, 지연 시간을 줄이는 과정이다. 가장 많이 쓰는 선택지는 양자화, 증류, 가지치기다. 셋은 줄이는 대상과 다시 학습해야 하는 정도가 다르다.

flowchart TD
    A[기본 모델의 품질·속도 측정] --> B{주된 제약}
    B -->|가중치 메모리| C[양자화: 표현 비트 수 축소]
    B -->|모델 자체가 큼| D[증류: 작은 학생 모델 학습]
    B -->|불필요한 구조| E[가지치기: 일부 구조 제거]
    C --> F[동일 평가셋 재측정]
    D --> F
    E --> F
    F --> G[품질·메모리·지연 시간 비교]

도식의 첫 단계가 중요하다. 원본 모델의 정확도와 응답 시간을 모르면 경량화 후 품질 손실이 얼마나 생겼는지 판단할 수 없다.

1. 양자화: 숫자를 더 적은 비트로 표현하기

양자화(Quantization)는 가중치와 경우에 따라 활성값을 낮은 정밀도로 표현한다. 단순 계산으로 가중치 10억 개를 16비트에서 4비트로 바꾸면 가중치 저장량은 이론적으로 2GB에서 0.5GB가 된다. 실제 메모리에는 스케일 값, 양자화하지 않은 층, 런타임 공간, KV 캐시가 더해지므로 전체 사용량이 정확히 4분의 1이 되지는 않는다.

  • 학습 후 양자화(PTQ): 학습을 마친 모델에 양자화를 적용한다. 빨리 시도할 수 있지만 낮은 비트 수에서 품질이 떨어질 수 있다.
  • 양자화 인지 학습(QAT): 학습 중 양자화 오차를 흉내 내 모델이 적응하도록 한다. 추가 학습 비용이 든다.

비트 수가 작을수록 언제나 빠른 것은 아니다. 장치와 런타임에 적합한 연산 커널이 없다면 오히려 느려질 수 있다. Transformers 양자화 개념 문서는 PTQ와 QAT, 블록별 양자화의 차이를 설명한다.

다음 코드는 4비트 적재 방식을 보여주는 예시다. 실행하려면 해당 장치에 맞는 bitsandbytes 지원과 모델 접근 권한을 확인해야 한다.

import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

model_id = "Qwen/Qwen2.5-0.5B-Instruct"
config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=config,
    device_map="auto",
)

여기서 model을 불러왔다고 배포 형식까지 확정된 것은 아니다. 사용하는 서빙 엔진이 그 양자화 형식을 지원하는지 확인해야 한다. PEFT의 양자화 가이드는 4비트 기본 모델에 LoRA를 학습시키는 구성도 다룬다.

2. 증류: 작은 모델에게 큰 모델의 출력을 배우게 하기

지식 증류(Knowledge Distillation)는 큰 교사 모델의 예측이나 생성 결과를 작은 학생 모델의 학습 신호로 사용한다. 예를 들어 교사가 고객 문의 1만 건을 분류하고 이유를 작성하면, 검토한 결과를 학생 모델의 학습 데이터로 삼을 수 있다. 교사의 오류가 그대로 복제되지 않도록 표본 검수와 별도 정답 데이터가 필요하다.

증류는 모델 구조 자체를 줄일 수 있어 추론 비용 절감 폭이 클 수 있다. 반면 데이터 생성·검수·재학습에 시간이 든다. 교사 모델의 출력 사용 조건도 확인한다. 특정 작업만 잘하면 되는 학생 모델과 폭넓은 질의에 답해야 하는 모델의 설계는 다르다.

3. 가지치기: 불필요한 부분 제거하기

가지치기(Pruning)는 영향이 작은 가중치나 구조를 제거한다. 개별 가중치를 0으로 만드는 비구조적 가지치기는 희소 연산을 지원하는 하드웨어가 없으면 파일 크기나 속도 이점이 작을 수 있다. 반대로 층·헤드·채널 같은 구조를 제거하면 실제 연산량을 줄일 여지가 있지만 모델 성능의 손실을 점검해야 한다.

방법줄이는 대상추가 작업확인할 위험
양자화숫자 표현 정밀도런타임 형식 선택, 경우에 따라 보정저비트 품질, 장치 호환성
증류학생 모델의 크기데이터 생성과 학습교사의 오류 전파
가지치기가중치 또는 구조중요도 판단, 재학습 가능성실제 속도 개선 여부

4. 경량화 결과 비교하기

같은 평가셋과 같은 생성 조건으로 정답률·형식 준수율·환각 사례를 비교한다. 성능 측정에서는 모델 로딩 시간, GPU 메모리 최대값, 첫 토큰까지의 시간(TTFT), 전체 응답 시간, 동시 요청 처리량을 따로 기록한다. 입력 길이와 출력 길이를 고정하지 않으면 수치를 비교하기 어렵다.

예를 들어 메모리 제약만 해결하면 되는 경우에는 먼저 양자화를 시도한다. 이후 품질이 허용 범위 아래로 떨어지거나 긴 문맥에서 느리다면 다른 형식 또는 작은 학생 모델을 검토한다. 가장 작은 모델이 목표가 아니라, 해당 서비스의 품질 기준과 장치 예산을 함께 만족하는 모델이 목표다.

낮은 비트 수에서 왜 품질이 달라질까?

예를 들어 원래 가중치가 [-0.92, -0.13, 0.07, 0.91]이고 표현 가능한 값이 [-1, 0, 1]뿐이라면 서로 다른 -0.13과 0.07이 둘 다 0으로 반올림될 수 있다. 이 값 하나의 차이는 작아도 여러 층의 계산을 거치면 출력 순위가 바뀔 수 있다. 모델에서 유독 크거나 작은 값이 있는 층은 오차에 더 민감하다. 그래서 양자화 구현은 층·채널·블록마다 다른 스케일을 두거나 민감한 부분을 높은 정밀도로 남긴다. Transformers 양자화 개념 가이드는 이런 정밀도와 granularity의 선택을 설명한다.

따라서 “4비트”라는 이름만으로 동일한 품질과 속도를 기대할 수 없다. 가중치만 4비트인지, 활성값도 낮은 정밀도인지, KV 캐시는 어떤 정밀도인지, 어떤 GPU 커널로 실행되는지 확인한다. 특히 긴 대화를 여러 사용자가 동시에 처리하면 가중치보다 KV 캐시가 병목이 될 수 있다. 가중치 파일 크기가 줄었다는 사실만으로 동시 요청 용량이 늘었다고 결론 내리지 않는다.

같은 질문에서 결과를 비교하는 실험

경량화 전후의 모델에 다음 세 종류의 질문을 넣는다.

  1. 정확한 값: “환불 기한은 며칠인가?”처럼 숫자와 날짜가 정답인 질문.
  2. 형식 제한: JSON 필드 세 개만 반환해야 하는 질문.
  3. 답 없음: 근거 문서에 답이 없는 질문.

생성 길이와 샘플링 설정을 같게 하고, 각 질문의 입력 토큰 길이도 기록한다. 아래 숫자는 비교표의 가상 예시다.

모델정답 100건 중답 없음 보류 20건 중최대 GPU 메모리p95 완료 시간
기본 BF1691187.2 GiB1.8초
8비트90184.6 GiB1.7초
4비트84123.1 GiB2.0초

여기서는 4비트가 메모리는 가장 적게 쓰지만 정답과 보류 판단을 많이 잃었다. 게다가 p95 시간이 늘었다. 첫 토큰 시간과 이후 토큰당 시간도 나눠 보면 어느 연산에서 느려졌는지 알 수 있다. 이런 결과라면 8비트를 택하거나, 4비트 방식의 보정 설정·런타임을 다시 실험할 근거가 있다. 반대로 허용 가능한 오차 범위가 넓고 GPU 메모리 제약이 절대적이라면 4비트가 맞을 수 있다.

증류와 가지치기는 언제 다음 단계가 될까?

양자화는 모델 구조 자체를 유지하므로 연산량을 충분히 줄이지 못할 수 있다. 특정 작업만 필요하다면 학생 모델에 교사 모델의 답변뿐 아니라 검토된 정답을 학습시켜 작은 구조로 옮긴다. 예를 들어 분류 4종이 목적이라면 교사의 긴 추론문을 그대로 외우게 하기보다, 입력·레이블·간단한 근거로 데이터를 구성한다. 증류 결과도 교사와 같은 평가셋이 아니라 학습에 쓰지 않은 문서와 표현으로 확인한다.

가지치기는 모델 파일의 0 값 개수만 보아서는 부족하다. 실제 추론 엔진이 희소 행렬이나 줄어든 층 구조를 이용해 연산을 줄이는지 확인해야 한다. 정답률이 비슷해도 p95가 줄지 않는다면 현재 장치에서 가지치기의 운영상 이점은 없다. 세 방법 모두 “경량화했다”는 기법 이름보다 실제 장치에서의 품질·메모리·지연 시간을 결정 기준으로 삼는다.

같은 카테고리의 글