본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 05. 25. 21:02

$1.50로 Qwen3-8B 기반의 개인화된 목소리 DoRA 학습 — 블라인드 A/B 테스트에서 기본 모델을 100% 압도

요약

Qwen3-8B 모델에 DoRA 기법을 적용하여 단돈 $1.50로 개인화된 목소리를 학습시킨 사례를 소개합니다. Telegram 메시지 데이터를 활용해 학습한 결과, 블라인드 A/B 테스트에서 기본 모델을 100% 압도하며 실제 인간과 유사한 말투를 구현했습니다.

핵심 포인트

  • DoRA를 활용해 LoRA보다 효율적이고 정교한 미세 조정 수행
  • 학습 비용을 RTX 3090 단일 인스턴스 기준 $1.50로 최소화
  • 손실 함수를 작성자의 답변 토큰에만 적용하여 학습 효율 극대화
  • 개인화 학습 후에도 일반 지식에 대한 치명적 망각 발생 없음

요약(TL;DR). 6,128개의 개인 Telegram 메시지를 사용하여 Qwen3-8B 상에 DoRA 어댑터를 학습시켰습니다. 비용: Vast.ai의 단일 RTX 3090 사용 시 $1.50. 블라인드 헤드 투 헤드(head-to-head) A/B 테스트 결과, DoRA로 튜닝된 모델이 기본 Qwen3-8B를 100%의 확률로 이겼습니다. 50개의 일반 지식 작업에서 치명적 망각(catastrophic forgetting)은 전혀 발생하지 않았습니다. 모델이 실제 사람처럼 말하는 능력에서 실제 인간을 이긴 프롬프트도 하나 있었습니다.

전체 상세 리포트는 공식 URL에서 확인할 수 있습니다: aiconic.company/en/journal/dora-personal-voice. 이 포스트는 실용적인 부분들을 담은 dev.to 스타일의 버전입니다.

우리가 한 일

한 개인의 Telegram 내보내기 데이터(DataExport JSON, 1,047개의 개인 채팅)를 가져와서, 커스텀 쌍 추출기(other_person_message, author_reply)를 작성했습니다. 몇몇 활발한 채팅이 전체를 지배하지 않도록 채팅당 쌍을 12개로 제한하고 중복을 제거했습니다. 최종 데이터셋: 6,128개 학습 쌍 + 322개 검증 쌍.

Qwen/Qwen3-8B 위에 DoRA 어댑터를 학습시켰습니다. DoRA (Weight-Decomposed Low-Rank Adaptation, Liu et al. 2024)는 사전 학습된 가중치를 크기(magnitude)와 방향(direction)으로 분해한 다음, 크기를 별도의 학습 가능한 벡터로 학습하는 동시에 방향 성분에만 LoRA 스타일의 업데이트를 적용합니다. 실제로 동일한 랭크(rank)에서 LoRA보다 전체 미세 조정(full fine-tuning)에 더 가깝게 일치합니다.

학습 설정 (The training config)

from peft import LoraConfig
from transformers import TrainingArguments

...

학습 가능한 파라미터: ~30M / 8B = 0.4%. 디스크 상의 어댑터 파일 크기: 63 MB. 총 소요 시간: 단일 Vast.ai RTX 3090 스팟 인스턴스에서 3.5시간 (~시간당 ~$0.30, 총 ~$1.50).

핵심 세부 사항: 손실(loss)을 프롬프트가 아닌 작성자의 어시스턴트 토큰에만 적용하십시오. 이 마스크(mask)가 없으면 모델은 용량의 절반을 다른 사람들이 당신에게 하는 말을 배우는 데 소비하게 되며, 이는 목소리 신호를 눈에 띄게 희석시킵니다. 개인화된 목소리 작업에서는 선택이 아닌 필수 사항입니다.

평가 (블라인드 3-way A/B)

개인화된 목소리 작업에서 손실(loss) 수치는 무용지물입니다. 관련 있는 질문은 _당신을 아는 사람이 들었을 때 당신처럼 들리는가_입니다. 따라서:

  1. 30개의 홀드아웃 프롬프트 (hold-out prompts) — 작성자가 실제로 무엇이라고 답변했는지 알고 있는, 실제 사람들의 최근 메시지입니다. 학습(train) 과정에서는 제외되었습니다.
  2. 프롬프트당 세 개의 답변: 기본 Qwen3-8B 답변, DoRA 답변, 실제 인간의 답변.
  3. 프롬프트당 무작위 A/B/C 라벨링. secret.json이 라벨을 다시 소스로 매핑하며, 평가자(rater)에게는 익명(blind)으로 유지되었습니다.
  4. HTML 평가 UI: "어느 것이 가장 당신처럼 들립니까?"라고 질문합니다.
  5. 파괴적 망각 (Catastrophic forgetting) 체크: 별도의 50개 태스크 스위트 (대문자, 수학, 코드, 번역).

결과 (Results)

비교결과
DoRA vs 기본 모델 (head-to-head)DoRA 100%
...

p07 사례는 저를 정말 놀라게 했습니다. 작성자는 자신의 실제 답변과 DoRA의 답변을 비교해 보았고, 자신보다 DoRA를 선택했습니다. 그녀의 코멘트는 다음과 같습니다: "솔직히 DoRA 답변이 그날 제가 실제로 썼던 글보다 제가 말할 법한 전형적인 방식에 더 가깝게 들려요."

이를 해석하자면: DoRA가 전형적인 답변들의 매끄러운 매니폴드 (manifold)에서 샘플링하여, 특정 화요일 오후에 인간이 작성한 것보다 평균에 더 가까운 인스턴스를 생성할 수 있다는 의미입니다.

무엇이 잘못되었나 (시간 낭비를 방지하기 위해)

1. enable_thinking=False 설정은 필수입니다

Qwen3는 기본적으로 추론 모델 (reasoning model)입니다. 즉, 최종 답변을 내놓기 전에 <think>...</think> 흔적을 출력합니다. 하지만 채팅 학습 데이터에는 이러한 흔적이 없습니다. 추론 (inference) 과정에서 기본 사전 확률 (base prior)은 추론 접두사 (reasoning prefixes) 쪽으로 끌어당기려 하는 반면, DoRA는 채팅 스타일 쪽으로 이동하려 하므로, 출력 결과가 '프랑켄슈타인식 추론 + 짧은 구어체 답변'의 형태로 나타나게 됩니다.

inputs = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
...

만약 Qwen3를 기반으로 채팅 스타일의 어댑터 (adapter)를 학습시키고 있다면, 학습 데이터 토큰화 (tokenization) 단계에서도 이 설정을 적용하십시오. 이렇게 하면 학습 접두사와 추론 접두사를 일치시킬 수 있으며, 평가 손실 (eval loss)을 낮추는 데에도 도움이 될 것입니다.

2. transformers 버전 맞추기

Qwen3는 4.51 버전에 도입되었습니다. 4.55+ 버전은 torch ≥2.5를 요구합니다. Vast 3090 이미지에서 작동하는 고정 버전은 transformers==4.53.0입니다. 지루한 작업이지만 두 시간을 허비했습니다.

3. Cerebras는 어댑터를 로드할 수 없습니다

우리가 프로덕션(prod)을 운영하는 Cerebras 호스팅 추론(hosted inference)은 런타임 LoRA/DoRA 로딩을 지원하지 않습니다. 따라서 이 어댑터는 프로덕션 교체용이 아닌, 우리에게 연구용 산물(research artifact)입니다. 프로덕션 개인화를 위해서는 vLLM을 통해 자체 호스팅(Single 3090 24/7 기준 월 약 $300)을 하거나, 호스팅된 백본(backbone) + 시스템 프롬프트(system prompt) + RAG 방식을 유지해야 합니다. 우리는 현재 후자의 방식을 사용하고 있습니다. 하지만 DoRA를 통해 사용자 수요가 정당화되는 시점에는 자체 호스팅을 구축할 가치가 있다는 확신을 얻었습니다.

재현성 (Reproducibility)

HuggingFace의 어댑터: aiconiccompany/yuka-dora-v1 (학습 데이터가 한 개인의 개인적인 채팅 내용이므로 CC BY-NC 4.0 제한 적용).

본인의 메시지로 직접 재현하기 위한 하드웨어 및 조건:

  • 단일 RTX 3090 (24 GB VRAM) — Vast.ai 기준 시간당 약 $0.30
  • GPU 사용 시간 3.5시간
  • 본인의 Telegram 내보내기 데이터 (설정 → 고급 → Telegram 데이터 내보내기 → JSON)
  • 확실한 목소리 포착을 위해 약 6,000개의 메시지 쌍 필요 (최소 1,000개)

본인의 메시지 기록을 사용한 총 비용: $1–$3.

이것이 중요한 이유

우리가 계속해서 되풀이하는 논지는 다음과 같습니다: 개인화의 올바른 입도(granularity)는 세그먼트(segment)가 아니라 개인(individual)이어야 합니다. 기업들은 사용자들을 50개의 페르소나(persona)로 클러스터링하고 약간 튜닝된 베이스 모델(base models)로 라우팅하는 방식으로 개인화된 AI를 시도해 왔습니다. 그것은 세그먼트 수준의 개인화입니다. 우리가 지향하는 목적지는 사용자 개개인의 지속적인 데이터 스트림으로 학습되며, 사용자가 소유하는 '사용자당 하나의 작은 어댑터'입니다.

yuka-dora-v1은 유닛 이코노믹스(unit economics, 단위 경제성)가 작동한다는 것을 보여주는 우리가 가진 첫 번째 구체적인 증거입니다. $1.50의 GPU 사용 시간만으로 프런티어 모델(frontier model)을 능력 저하 없이 당신만의 고유한 목소리로 바꿀 수 있습니다. 개인화된 AI에 비용을 지불할 사용자 수에 이 수치를 곱해본다면

당신의 제품을 위해 맞춤형 DoRA(voice-of-the-brand, 고객 지원 스타일, 창업자 목소리 등)를 학습시키고 싶다면: hi@aiconic.company로 연락해 주세요.

그렇지 않다면 — 직접 학습시켜 보세요. README 파일이 준비되어 있습니다. GPU 비용은 저렴합니다. 결과는 그만한 가치가 있습니다.

Aiconic은 연구 수준의 AI 엔지니어링 숍입니다. 세 명의 엔지니어, AI 툴링. 커스텀 어댑터(Custom adapters), 개인용 AI 엔진, 프로덕션 ML 시스템을 구축합니다. aiconic.company

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0