모델 병합
중요
미세 조정이 완료되면 사용자 지정 모델은 새로 학습한 지식과 '기본 모델'의 기능을 혼합하는 선택적인 사용자 구성 가능한 모델 병합 단계를 거칩니다. 이 프로세스를 통해 최종 모델은 최신 미세 조정 훈련 실행 중에 학습한 전문화된 동작을 통합하면서 '기본 모델'의 원래 인텔리전스를 유지할 수 있습니다. 모델 병합은 모델이 새 데이터에서 미세 조정된 후 이전에 학습한 지식을 잃는 파괴적 망각이라는 현상을 완화합니다.
훈련 유형별 모델 병합 적용 가능성
모델 병합은 SFT 훈련에 대해서만 구성할 수 있습니다. 다음 표에는 각 훈련 유형에 대한 모델 병합 동작이 요약되어 있습니다.
| 훈련 유형 | 모델 병합 동작 |
|---|---|
| 지도 미세 조정(SFT) | 사용자 구성 가능한 모델 병합이 적용됩니다. 이 문서에서 설명한 대로 미세 조정 모델과 기본 모델 간 병합 가중치를 제어할 수 있습니다. |
| 지속적인 사전 훈련(CPT) | 모델 병합이 없습니다. 훈련된 모델 체크포인트는 최종 모델로 직접 출력됩니다. 병합 단계와 관련된 기본 모델은 없습니다. |
모델 병합을 사용해야 하는 경우
다음과 같은 경우 모델 병합을 활성화해야 합니다.
-
미세 조정 후 일반 기능 성능 저하. 미세 조정 모델이 훈련 데이터 외부의 태스크(예: 수학, 추론 또는 코딩)에서 성능이 저하되는 경우 병합은 기본 모델 지식을 혼합하여 해당 기술을 복구합니다.
-
반복/지속적인 훈련. 이전에 사용자 지정된 체크포인트를 기반으로 미세 조정할 때 이전 라운드에서 학습한 기술을 유지하려면 병합이 필수적입니다. 그렇지 않으면 새로운 각 라운드가 이전 라운드가 학습한 내용을 덮어쓸 수 있습니다.
다음과 같은 경우에는 모델 병합이 필요하지 않을 수 있습니다.
-
대상 태스크 성능만 극대화하길 원하고 일반 기능 유지는 중요하지 않습니다.
-
힐 클라이밍. 동일한 데이터세트에서 계속 반복하여 추가적으로 평가 성능을 최적화하려고 합니다.
-
추론 기반 미세 조정 사용. 연구에 따르면 추론 기반 SFT는 파괴적 망각을 크게 완화합니다.
모델 병합 가중치를 구성하는 방법
model_importance_score.fine_tuned_model의 기본값은 1.0입니다. 즉, 훈련 출력 체크포인트는 '기본 모델'에서 혼합하지 않고 미세 조정 가중치를 완전히 사용합니다. 기본값은 훈련 데이터가 포괄적이고 대상 태스크를 가장 근접하게 표시할 때 잘 작동합니다.
하이퍼파라미터에서 model_importance_score를 설정하여 최종 모델이 전문화와 일반 지식의 균형을 조정하는 방법을 제어할 수 있습니다. 예제:
training_config: # ... model_importance_score: fine_tuned_model: 0.75 # set value between 0.0 to 1.0 inclusive
model_importance_score.fine_tuned_model 값이 1.0에 가까우면 모델이 미세 조정된 데이터에 의존하는 반면, 값이 0.0에 가까우면 기본 모델의 일반 기능을 더 많이 유지합니다. 위 예제에서 최종 훈련된 모델은 특정 데이터세트에서 미세 조정 모델의 75%를 '기본 모델'의 25%와 병합하여 생성됩니다.
미세 조정 모델이 일반 기능을 상실하는 경우(예: 훈련 데이터 외부의 태스크에서 성능 저하)가 나타나면
model_importance_score.fine_tuned_model을 줄여 더 많은 '기본 모델'의 지식을 혼합합니다.
참고
모델 병합 프로세스의 가중치를 구성할 수 있지만 사용자는 병합할 모델을 선택할 수 없습니다. 즉, 항상 '기본 모델'과 현재 훈련 실행의 미세 조정 모델 사이에 있습니다. '기본 모델'은 원래 파운데이션 모델(예: Nova Lite 2.0)이거나 이전 반복 훈련 실행의 출력일 수 있습니다.
모델 병합 가중치 선택
model_importance_score.fine_tuned_model 파라미터는 미세 조정 모델과 기본 모델 사이의 균형을 제어합니다. 처음에 다음 지침을 고려합니다.
| 시나리오 | 권장되는 시작 가중치 | 이론적 근거 |
|---|---|---|
| 포괄적인 훈련 데이터를 사용하는 단일 라운드 SFT | 1.0(기본값, 병합 없음) | 훈련 데이터는 대상 태스크를 잘 포괄하며, 병합할 경우 아무런 이점 없이 학습된 동작이 약화됩니다. |
| 일반 기능 성능이 저하되는 단일 라운드 SFT | 0.7~0.9 | 대부분의 미세 조정 성능을 유지하면서 일반 기술(수학, 추론, 코딩)을 복구할 수 있는 충분한 기본 모델 지식을 혼합합니다. |
| 반복/지속적 SFT(이전 체크포인트에서 빌드) | 0.3~0.7 | 가중치가 낮을수록 이전 훈련 라운드에서 더 많은 지식을 유지할 수 있습니다. 병합하지 않으면 이후 라운드에서 이전 라운드로부터 학습한 기술을 덮어쓸 수 있습니다. |
| 탐색/불확실 | 0.7 | 합리적인 중간 지점으로, 평가 결과에 따라 조정합니다. |
일반 원칙: 가중치가 높을수록(1.0에 가까움) 대상 태스크 성능이 극대화되지만 일반 기능이 손실될 위험이 있습니다. 가중치가 낮을수록(0.0에 가까움) 기본 모델의 광범위한 기술은 유지되지만 전문화 성능은 줄어듭니다. 보편적인 최적의 값은 없습니다. 올바른 가중치는 데이터세트 크기, 기본 모델과의 도메인 중복, 유지해야 하는 기능에 따라 달라집니다.
작은 정보
훈련 데이터에 추론 트레이스(생각의 사슬)가 포함된 경우 일반적으로 더 높은 병합 가중치를 사용하거나 1.0에서 완전히 병합을 건너뛸 수 있습니다. 추론 증강 데이터는 일반 기능을 유지하는 정규화기 역할을 하기 때문입니다.
병합 가중치 평가
훈련이 완료된 후 병합된 모델을 평가하여 병합 가중치가 적절한지 확인합니다. 훈련 실행이 여러 번 필요하지는 않습니다. 평가 패스 한 번으로 조정 여부를 판별할 수 있습니다.
-
대상 태스크 성능 - 홀드아웃된 테스트 세트에서 도메인별 평가(정확성, F1, 추출 점수 등)를 실행합니다. 기본 모델(미세 조정 전)과 비교하여 미세 조정으로 성능이 향상되었는지 확인합니다. 기본 모델과 비교했을 때 이점이 예상보다 작은 경우 병합 가중치가 너무 낮을 수 있습니다. 즉, 기본 모델의 가중치가 훈련 중에 학습한 내용을 약화합니다.
-
일반 기능 스팟 검사 - 훈련 도메인 외부의 몇 가지 태스크(예: 수학 용어 문제, 요약 요청 또는 코딩 질문)를 사용하여 병합된 모델에 프롬프트를 표시합니다. 응답을 기본 모델과 정성적으로 비교합니다. 병합된 모델의 응답이 기본 모델보다 현저히 나쁜 경우(즉, 비동기식이거나 응답을 거부하거나 기본 모델에서 잘 처리하던 태스크에서 의미 없는 결과를 생성하는 경우) 병합 가중치가 너무 높아 모델이 일반 기능을 상실한 것입니다.
병합 작동 방식: 전체 순위 미세 조정
전체 순위 훈련은 모델 가중치의 전체 세트를 생성합니다. 병합 중에 각 파라미터는 가중치 기반 혼합 방식으로 계산됩니다.
# Weighted interpolation Merged Model = (1 - model_importance_score.fine_tuned_model) * Base Model + model_importance_score.fine_tuned_model * Fine-Tuned Model
예를 들어 model_importance_score.fine_tuned_model = 0.3인 경우 병합된 모델은 70%의 '기본 모델' 지식과 30%의 미세 조정된 지식입니다.
병합 작동 방식: LoRA 미세 조정
저순위 적응(LoRA)은 적응을 저순위 업데이트로 표시하는 저순위 매트릭스의 압축 페어(A 및 B)를 학습합니다. 모델 병합 프로세스 중에 각 A 및 B LoRA 매트릭스는 아래와 같이
model_importance_score.fine_tuned_model에 따라 조정됩니다. 이 공식에서
alpha는 LoRA 조정 인자(훈련 레시피의 peft.lora_tuning.alpha)이고 rank는 LoRA 순위입니다. 사용 가능한
alpha 값은 LoRA SFT 훈련 레시피
이 시점에서 A 및 B 매트릭스는 최신 미세 조정 실행의 지식만 포함합니다. 이전 훈련 실행에 대한 지식이 없습니다. 이전 훈련 실행의 지식은 아래에서 설명하는 '기본 모델'과의 모델 병합 또는 이전 단계 LoRA 어댑터 병합에서 생성됩니다.
Scaled_A = sqrt(model_importance_score.fine_tuned_model) * sqrt(alpha/rank) * A Scaled_B = sqrt(model_importance_score.fine_tuned_model) * sqrt(alpha/rank) * B
LoRA 훈련은 완전히 병합된 모델과 병합된 LoRA 어댑터 세트라는 두 가지 모델 아티팩트를 생성합니다. 각 항목을 개별적으로 살펴봅니다.
완전히 병합된 모델
LoRA 업데이트가 조정되고 '기본 모델'에 추가됩니다.
Merged Model = Base Model + (Scaled_B @ Scaled_A)
이제 Merged Model은 현재 훈련 실행에서 얻은 지식을 포함하고 이외에도 사용자가 구성한 model_importance_score.fine_tuned_model에 따라 Base Model에서 일부 지식을 상속합니다.
병합된 LoRA 어댑터
LoRA 어댑터가 병합되는 방법은 단일 단계 훈련을 수행하는지 아니면 반복 훈련을 수행하는지에 따라 달라집니다.
-
단일 단계 LoRA 훈련(반복 훈련 없음)의 경우 병합할 LoRA 어댑터의 이전 세트가 없기 때문에 미세 조정된 LoRA 어댑터가 병합 없이 직접 저장됩니다.
-
모든 반복 LoRA 워크플로에서는 각 단계의 어댑터가 단일 세트로 병합됩니다.
Merged = Stage1_Scaled_B @ Stage1_Scaled_A + Stage2_Scaled_B @ Stage2_Scaled_AMergedLoRA 어댑터는 사용자 정의model_importance_score.fine_tuned_model에 따라 이전 훈련 반복의 지식과 최신 미세 조정 지식을 포함합니다.또한 LoRA 및 전체 순위 훈련 혼합에 대한 반복 훈련 제한 사항에 주의하세요.
이러한 병합된 어댑터 Merged_B 및 Merged_A는 전체 훈련 기록을 반영하며 온디맨드 추론에 대해 사용됩니다.