🧬

모델 머징 — 진짜로 두 모델을 \"합치는\" 유일한 방법

한국어 모델 + 코딩 모델 = 한국어로 코딩하는 모델? 가중치 평균으로 합친다

AI에서 유일한 "합치기"

파인튜닝, LoRA, RAG — 전부 합치기가 아니라고 했다. 근데 모델 머징은 진짜로 합치는 것이다.

모델A의 가중치: [0.50, -0.30, 0.80, ...]
모델B의 가중치: [0.40, -0.10, 0.60, ...]

합친 모델:     [0.45, -0.20, 0.70, ...]  ← 평균

두 모델의 66M개 숫자를 하나하나 평균내서 새 모델을 만든다. 훈련이 필요 없다. 그냥 숫자를 더해서 2로 나누는 것이다.

왜 이게 되나?

같은 베이스 모델(예: LLaMA 7B)에서 파인튜닝된 두 모델은 가중치가 비슷하다. 출발점이 같으니까.

LLaMA 7B (베이스)
  ├→ 한국어 파인튜닝 → 한국어 모델 (가중치가 살짝 다름)
  └→ 코딩 파인튜닝 → 코딩 모델 (가중치가 살짝 다름)

두 모델을 평균 → 한국어 + 코딩 둘 다 가능한 모델 (이론상)

파인튜닝이 "숫자를 살짝 조정"하는 거니까, 두 조정 결과를 평균내면 두 능력이 합쳐질 수 있다.

가장 간단한 머징 코드

pip install mergekit

# merge_config.yaml
slices:

  - sources:

      - model: "모델A"  # 한국어 특화 모델
        layer_range: [0, 32]

      - model: "모델B"  # 코딩 특화 모델
        layer_range: [0, 32]
merge_method: linear  # 단순 평균
base_model: "모델A"
parameters:
  weight: 0.5  # A:B = 50:50
dtype: float16

mergekit-yaml merge_config.yaml ./merged-model
# → GPU 없이 CPU에서 실행 가능
# → ./merged-model/ 에 합쳐진 모델이 저장됨

Python으로 직접 하면 이게 전부:

import torch

# 1. 두 모델의 가중치 로드
weights_a = torch.load("model_a/model.safetensors")
weights_b = torch.load("model_b/model.safetensors")

# 2. 평균
merged = {}
for key in weights_a:
    merged[key] = (weights_a[key] + weights_b[key]) / 2

# 3. 저장
torch.save(merged, "merged_model/model.safetensors")
# 끝. 훈련 없음. GPU 없음. 그냥 산술.

진짜 숫자를 더해서 2로 나누는 것이다. 이보다 더 단순한 "합치기"는 없다.

머징 방법들

단순 평균 외에도 여러 방법이 있다:

방법 설명 비유
Linear (평균) 두 모델의 가중치를 50:50 평균 두 물감을 섞기
SLERP 구면 보간 (방향을 유지하며 합침) 두 벡터 사이를 호를 그리며 이동
TIES 중요한 가중치만 골라서 합침 두 팀의 에이스만 모아 드림팀
DARE 불필요한 가중치를 0으로 만들고 합침 정리 후 합치기

한계 — 보장되지 않는다

모델 머징은 실험적이다. 되는 경우도 있고 안 되는 경우도 있다.

✅ 잘 되는 경우:

  - 같은 베이스 모델에서 파인튜닝된 모델끼리

  - 비슷한 도메인 (한국어 + 일본어)

  - 보완적 능력 (언어 + 코딩)

❌ 안 되는 경우:

  - 다른 아키텍처의 모델끼리 (BERT + GPT-2)

  - 너무 다른 도메인 (의료 + 음악)

  - 가중치가 너무 많이 달라진 경우

파인튜닝 vs LoRA vs RAG vs 머징

파인튜닝 LoRA RAG 모델 머징
가중치 변경 전부 조정 일부 (어댑터) 안 바꿈 두 모델을 평균
훈련 필요 필요 불필요 불필요
GPU 필요 필요 불필요 불필요
결과 보장 높음 높음 높음 낮음 (실험적)
비유 교육 플러그인 참고자료 합체

핵심

모델 머징은 AI에서 유일하게 "더하기"에 해당한다. 숫자를 더해서 나누는 것. 훈련도 필요 없고 GPU도 필요 없다. 근데 결과가 보장되지 않는다 — 잘 되면 두 능력이 합쳐지고, 안 되면 둘 다 망가진다.

핵심 개념

1

같은 베이스에서 파인튜닝된 모델 2개를 준비한다 (예: 한국어 모델 + 코딩 모델)

2

두 모델의 가중치를 로드한다

3

66M개 숫자를 하나하나 평균낸다 — (A + B) / 2

4

합쳐진 가중치를 저장한다 — 훈련 없음, GPU 없음

5

테스트해본다 — 두 능력이 합쳐졌는지 확인 (보장 안 됨)

사용 사례

다국어 + 전문 도메인 합치기 — 한국어 모델 + 의료 모델 = 한국어 의료 모델 GPU 없이 모델 개선 — 훈련 없이 가중치 산술만으로 새 모델 생성 커뮤니티 모델 조합 — HuggingFace의 여러 파인튜닝 모델을 합쳐서 실험