treeru.com
AI

LoRA 파인튜닝으로 회사별 AI 만들기 — 학습부터 서빙까지

2026-02-22
Treeru

10쌍의 대화 데이터, 6초의 학습, 73MB의 어댑터. 이것만으로 카페, 병원, 쇼핑몰, 법률사무소, 학원 — 5개 업종에 맞는 AI 챗봇을 만들었습니다. LoRA(Low-Rank Adaptation) 파인튜닝은 거대한 베이스 모델을 건드리지 않고 작은 어댑터만 학습해서 회사별 맞춤 AI를 만드는 기술입니다. 학습 데이터 설계부터 서빙까지 전 과정을 공개합니다.

10쌍

회사당 학습 데이터

6.4초

5개 어댑터 학습 (8B)

73.7MB

어댑터 크기 (8B)

5개

동시 서빙 회사

LoRA란 무엇인가

일반적인 파인튜닝은 모델의 모든 파라미터를 수정합니다. 8B 모델이면 80억 개의 파라미터를 전부 업데이트해야 하므로 시간과 자원이 많이 듭니다. LoRA는 다른 접근을 합니다.

LoRA의 핵심 아이디어

1. 베이스 모델은 건드리지 않는다. 80억 개 파라미터는 그대로 두고, 작은 "어댑터"만 추가로 학습합니다.

2. Low-Rank 분해. 큰 행렬을 두 개의 작은 행렬로 분해하여 학습합니다. rank=16이면 원래 행렬 크기의 극히 일부만 학습합니다.

3. 어댑터는 교체 가능하다. 카페 어댑터, 병원 어댑터, 쇼핑몰 어댑터를 만들어두고 요청에 따라 실시간으로 교체(핫스왑)할 수 있습니다.

항목풀 파인튜닝LoRA
학습 파라미터80억 개 전체0.6% (약 5천만 개)
학습 시간 (10쌍)수십 분1.2~1.5초
결과물 크기~16GB (모델 전체)73.7MB (어댑터)
멀티테넌트모델 N개 필요베이스 1 + 어댑터 N
VRAM (5개 회사)~80GB (모델 5개)~5GB (모델 1 + 어댑터 5)

학습 데이터: 10쌍이면 충분

LoRA 파인튜닝의 목적은 모델에 새로운 지식을 주입하는 것이 아닙니다.말투, 응답 스타일, 페르소나를 학습시키는 것입니다. 실제 지식(메뉴, 가격, 진료 시간)은 시스템 프롬프트가 담당합니다.

5개 업종 학습 데이터

회사업종데이터말투 특징
달빛카페카페10쌍친근한 반말체 (~요), 이모지 사용
미래의원병원10쌍정중한 존댓말 (~습니다), 차분한 톤
오늘마켓쇼핑몰10쌍활발한 어투, 구매 유도
정의법률사무소법률10쌍격식 존댓말, 법적 면책 포함
하늘학원교육10쌍학부모 대상 안내 톤

실제 학습 데이터 예시 (달빛카페)

{"messages": [
  {"role": "user", "content": "아메리카노 한 잔 얼마예요?"},
  {"role": "assistant", "content": "아메리카노는 4,500원이에요~ 아이스랑 핫 둘 다 같은 가격이랍니다! ☕"}
]}

{"messages": [
  {"role": "user", "content": "디카페인 메뉴 있어요?"},
  {"role": "assistant", "content": "네! 디카페인 아메리카노 5,000원, 디카페인 카페라떼 5,500원 있어요~ 맛은 진짜 거의 비슷해요!"}
]}

{"messages": [
  {"role": "user", "content": "텀블러 가져가면 할인돼요?"},
  {"role": "assistant", "content": "텀블러 지참하시면 300원 할인해드려요~ 환경도 지키고 할인도 받고 일석이조! 🌱"}
]}

실제 학습 데이터 예시 (미래의원)

{"messages": [
  {"role": "user", "content": "진료 예약하고 싶습니다"},
  {"role": "assistant", "content": "안녕하세요, 미래의원입니다. 진료 예약은 전화(02-555-1234) 또는 방문 접수로 가능합니다. 희망하시는 진료과와 날짜를 말씀해주시겠습니까?"}
]}

{"messages": [
  {"role": "user", "content": "건강검진 비용이 어떻게 되나요?"},
  {"role": "assistant", "content": "기본 건강검진은 15만원이며, 종합검진은 35만원입니다. 국가건강검진 대상자이신 경우 무료로 받으실 수 있습니다. 자세한 사항은 전화 문의 부탁드립니다."}
]}

10쌍으로 충분한 이유

LoRA가 학습하는 것은 "어떻게 말할 것인가"(말투, 톤, 구조)이지 "무엇을 말할 것인가"(지식)가 아닙니다. 카페는 친근하게, 병원은 정중하게 — 이 패턴을 잡는 데는 10쌍이면 충분합니다. 실제 매장 정보, 메뉴, 가격 등의 지식은 시스템 프롬프트에 넣습니다.

시스템 프롬프트 설계

시스템 프롬프트는 AI의 "업무 매뉴얼"입니다. 매장 정보, 메뉴, 가격, 이벤트, 응대 규칙까지 전부 여기에 넣습니다. LoRA 어댑터가 말투를 담당하고, 시스템 프롬프트가 지식을 담당하는 구조입니다.

시스템 프롬프트 설계 패턴

1

역할 선언: "당신은 '달빛카페'의 친절한 상담원입니다."

2

구조화된 정보: 매장 정보, 메뉴·가격, 이벤트를 【섹션】으로 구분

3

말투 규칙: 반말/존댓말, 문장 길이, 톤 명시

4

답변 금지 목록: 다른 업체 추천, 내부 정보 유출 방지

실제 시스템 프롬프트 (달빛카페, 축약)

당신은 '달빛카페'의 친절한 상담원입니다.

【매장 정보】
- 주소: 서울시 마포구 연남동 223-15 1층
- 영업시간: 평일 08:00~22:00, 주말 09:00~23:00
- 전화: 02-332-7890
- 주차: 매장 앞 2대, 공영주차장 도보 3분
- Wi-Fi: dalbit_cafe (비번: dalbit2024)

【메뉴 및 가격】
커피: 아메리카노 4,500원 / 카페라떼 5,000원 / ...
디저트: 당근케이크 5,500원 / 티라미수 6,000원 / ...
텀블러 지참 시 300원 할인

【현재 이벤트】
- 2월 한정: 딸기크림라떼 6,000원
- 스탬프 10개 = 아메리카노 1잔 무료

말투 규칙: 친근한 반말체(~요), 2~3문장 이내
답변 금지: 다른 카페 추천, 레시피/원가 정보

디코딩 파라미터

파라미터카페/쇼핑몰병원/법률이유
temperature0.30.1병원·법률은 일관성이 중요
top_p0.90.9공통
max_tokens2,0482,048thinking 모델 특성 대응
repetition_penalty1.11.1반복 응답 방지

학습 결과: 6초

RTX PRO 6000에서 5개 어댑터를 순차 학습한 결과입니다. 8B 모델은 어댑터 당 평균 1.3초, 32B 모델은 3.2초가 걸렸습니다.

Qwen3-8B (베이스)

회사시간크기
달빛카페1.5초73.7MB
미래의원1.2초73.7MB
오늘마켓1.2초73.7MB
정의법률1.2초73.7MB
하늘학원1.3초73.7MB
합계6.4초368.5MB

Qwen3-32B (베이스)

회사시간크기
달빛카페3.2초167.2MB
미래의원3.1초167.2MB
오늘마켓3.1초167.2MB
정의법률3.2초167.2MB
하늘학원3.3초167.2MB
합계15.9초836MB

LoRA 하이퍼파라미터

LoraConfig(
    r=16,                    # rank — 값이 클수록 표현력 ↑, 크기 ↑
    lora_alpha=32,           # 스케일링 팩터 (보통 r의 2배)
    lora_dropout=0.05,       # 과적합 방지
    target_modules=[         # 어텐션 레이어만 학습
        "q_proj", "k_proj",
        "v_proj", "o_proj"
    ],
    task_type="CAUSAL_LM",
)

# 학습 설정
epochs=3, batch_size=2, gradient_accumulation=2
learning_rate=2e-4, bf16=True

학습 vs 서빙 모델이 다른 이유

학습은 풀 프레시전 모델(Qwen3-8B, ~16GB)로 진행하고, 서빙은 AWQ 양자화 모델(Qwen3-8B-AWQ, ~5GB)로 합니다. LoRA 어댑터는 풀 모델에서 학습해도 AWQ 모델에 그대로 적용됩니다. SGLang이 이 호환성을 자동으로 처리합니다.

핫스왑 서빙

SGLang 서빙 가이드를 참고해 5개 어댑터를 모두 등록해두면, API 호출 시 model 파라미터로 어떤 회사의 어댑터를 사용할지 지정할 수 있습니다. 서버 재시작 없이 실시간으로 전환됩니다.

SGLang 서빙 시작

python -m sglang.launch_server \
  --model Qwen3-8B-AWQ \
  --quantization awq_marlin \
  --enable-lora \
  --lora-paths \
    test-cafe=/path/to/adapters/test-cafe \
    test-clinic=/path/to/adapters/test-clinic \
    test-shop=/path/to/adapters/test-shop \
    test-law=/path/to/adapters/test-law \
    test-edu=/path/to/adapters/test-edu \
  --context-length 4096 \
  --mem-fraction-static 0.85 \
  --port 30000

API 호출 (회사별 전환)

# 카페 어댑터로 응답
curl -X POST http://localhost:30000/v1/chat/completions \
  -d '{
    "model": "test-cafe",
    "messages": [
      {"role": "system", "content": "(달빛카페 시스템 프롬프트)"},
      {"role": "user", "content": "아메리카노 얼마예요?"}
    ]
  }'

# 병원 어댑터로 전환 — 같은 서버, model만 변경
curl -X POST http://localhost:30000/v1/chat/completions \
  -d '{
    "model": "test-clinic",
    "messages": [
      {"role": "system", "content": "(미래의원 시스템 프롬프트)"},
      {"role": "user", "content": "진료 예약하고 싶습니다"}
    ]
  }'

핫스왑 검증 결과

순환 전환: 5개 어댑터를 A→B→C→D→E→A 순서로 빠르게 전환. 모든 응답이 올바른 페르소나 유지. PASS

동시 요청: 카페·병원·쇼핑몰 3개 회사가 동시에 요청해도 각자의 어댑터가 정확히 적용됨. PASS

성능 영향: LoRA 5개 핫스왑은 성능 저하 없이 정상 동작. VRAM 추가 사용량은 어댑터 5개 합산 ~370MB(8B) / ~836MB(32B).

실전 아키텍처

실제 배포에서는 각 프로젝트 서버(카페 서버, 병원 서버...)가 자체 시스템 프롬프트를 가지고 AI 서버에 요청합니다. AI 서버는 model 파라미터에 따라 해당 회사의 LoRA 어댑터를 적용합니다. 프로젝트 서버가 7대라면 7개 어댑터가 동시 서빙됩니다.

결론: 실전 배포 가이드

1

시스템 프롬프트 작성

회사 정보, 메뉴, 가격, 응대 규칙을 구조화. 이것이 AI의 '지식'을 담당합니다.

2

학습 데이터 10쌍 준비

원하는 말투·톤의 Q&A 10쌍을 JSONL로 작성. 품질보다 일관성이 중요합니다.

3

LoRA 학습 실행

train_mini_lora.py 실행 → 1~3초 후 어댑터 생성. GPU 1장이면 충분합니다.

4

SGLang 서빙 시작

--enable-lora --lora-paths로 어댑터 등록. 모든 회사가 동시에 서빙됩니다.

5

API 연동

OpenAI 호환 API. model 파라미터만 바꾸면 회사별 전환. 코드 변경 최소.

항목8B 모델32B 모델
학습 시간 (5개)6.4초15.9초
어댑터 크기 (1개)73.7MB167.2MB
VRAM 추가 (5개)~370MB~836MB
동시 20명 응답3.5초10.4초
에러율0%0%

10쌍의 데이터, 6초의 학습, 73MB의 어댑터

이것만으로 우리 회사만의 AI 챗봇을 만들 수 있습니다. LoRA는 말투를, 시스템 프롬프트는 지식을 담당하고, SGLang이 5개 회사를 동시에 서빙합니다.
다음 글에서는 7개 회사를 동시에 서빙하면서 정보가 새지 않는지 격리 테스트한 결과를 공개합니다.

T

Treeru

웹 개발, IT 인프라, AI 솔루션 분야의 실무 인사이트를 공유합니다. 기업의 디지털 전환을 돕는 IT 파트너, Treeru입니다.

공유

댓글

(4개)
4.85/ 5

로그인하면 댓글을 작성할 수 있습니다.

2026-02-22
555.0

10쌍 데이터로 6초 만에 학습이 끝난다니... 실제 데이터를 보여주셔서 '이게 정말 가능하구나' 실감했습니다. 시스템 프롬프트 설계 패턴이 특히 유용합니다.

2026-02-22
4.954.9

어댑터 73MB면 5개 회사 합쳐도 370MB. GPU 1장으로 멀티테넌트가 가능한 이유를 이해했습니다. 핫스왑 부분이 실전에 바로 적용할 수 있어서 좋습니다.

2026-02-22
4.854.8

r=16, alpha=32 설정의 근거와 실제 학습 코드를 함께 보여주셔서 재현성이 높습니다. 32B 어댑터 167MB라는 수치도 참고가 됩니다.

관련 글

© 2026 TreeRU. All rights reserved.

본 콘텐츠의 저작권은 TreeRU에 있으며, 출처를 밝히지 않은 무단 전재 및 재배포를 금합니다. 인용 시 출처(treeru.com)를 반드시 명시해 주세요.