8.5 지속 사전 학습 및 도메인 적응
무작위 초기화부터 사전 학습하는 것만이 언어 모델의 표현 능력을 바꾸는 방법은 아닙니다. 지속 사전 학습(Continued Pre-training, CPT) 은 기존 체크포인트에서 자기 지도 다음 토큰 예측 목표를 재개하여 새로운 도메인, 언어, 시점 또는 데이터 혼합에 적응하는 방법입니다. 새로운 파운데이션 모델을 만드는 것보다 훨씬 저렴할 수 있지만, 여전히 학습 시스템 프로젝트입니다. 데이터 계보, 옵티마이저 궤적, 토크나이저 계약, 분산 체크포인트, 회귀 게이트가 손실 곡선만큼 중요합니다.
“CPT는 지식을, SFT는 행동을 가르친다”는 말은 유용한 휴리스틱일 뿐 절대 법칙이 아닙니다. CPT는 모델의 토큰 분포와 표현을 바꾸고, SFT도 사실 패턴을 학습시킬 수 있으며, 검색은 가중치를 변경하지 않고 변하는 사실을 공급할 수 있습니다. 실무 질문은 어떤 개입이 되돌리기 어려운 위험을 최소화하면서 필요한 행동을 만드는가입니다.
의사결정 게이트: CPT, RAG, SFT 중 무엇을 선택할까?
도입하려는 기법이 아니라 비공개 홀드아웃 세트에서 관찰된 실패로부터 시작합니다.
| 관찰된 결함 | 먼저 시험할 개입 | 이유 | CPT로 전환할 조건 |
|---|---|---|---|
| 사실이 자주 바뀌거나 출처를 제시해야 함 | 검색 증강 생성(RAG) | 업데이트를 되돌릴 수 있고 출처를 검사할 수 있음 | 검색 품질이 좋은데도 도메인 문서를 해석·순위화·종합하지 못함 |
| 출력 형식, 도구 프로토콜, 말투, 작업 정책이 잘못됨 | SFT | 원하는 입력-출력 행동을 직접 지도함 | 응답 정책이 아니라 도메인 표현의 부재가 원인임 |
| 도메인 언어에 낯선 구문, 전문 용어, 장문 구조가 많음 | CPT | 모든 토큰을 도메인 분포에 노출함 | 검색 또는 SFT 파일럿이 표현 격차를 해소하지 못함 |
| 도메인 유창성과 상호 작용 행동이 모두 부족함 | CPT 후 SFT | 분포 적응과 행동 지도를 분리함 | 더 저렴한 RAG/SFT 기준선과 유지 게이트를 먼저 측정함 |
가능한 개입마다 통제된 기준선을 실행합니다. 도메인 퍼플렉서티 감소만으로 사용자 답변이 좋아졌다고 판단할 수 없습니다. 다운스트림 작업, 검색 기반 기준선, 비용, 지연 시간, 회귀 위험을 함께 비교해야 합니다.
DAPT, TAPT, 지속 사전 학습의 구분
용어는 데이터 스트림과 운영 목적을 구분합니다.
- 도메인 적응 사전 학습(Domain-adaptive pre-training, DAPT) 은 생의학 문헌이나 소스 코드처럼 넓은 도메인 말뭉치에서 학습을 이어갑니다. 최초 DAPT 연구는 특정 RoBERTa 분류 설정에서 개선을 보였으며, 모든 생성 모델에 대한 보편적 보장은 아닙니다 [1].
- 과업 적응 사전 학습(Task-adaptive pre-training, TAPT) 은 특정 다운스트림 과업의 레이블 없는 텍스트 분포에서 학습을 이어갑니다. DAPT보다 좁으며 그 뒤에 수행할 수 있습니다.
- 연속 사전 학습(Continual pre-training) 은 이전 능력을 유지하면서 여러 도메인이나 시간 구간을 순차 처리합니다. 안정성과 가소성, 리플레이를 명시적으로 설계해야 합니다 [2].
- 지속 사전 학습(Continued pre-training) 은 이 절에서 사용하는 더 넓은 운영 용어입니다. 기존 아티팩트에서 사전 학습 목표를 재개하며, 한 번의 DAPT도 CPT의 한 형태입니다.
의도한 순서를 실행 명세에 적습니다. “베이스 체크포인트 → DAPT → SFT → 선호도 최적화”와 “인스트럭션 체크포인트 → 최신 정보 적응”은 실패 모드가 다르므로 하나의 무조건적 레시피를 공유할 수 없습니다.
시작 체크포인트 선택
목표가 넓은 분포 적응이고 이후 SFT 단계를 수행할 수 있다면 베이스 체크포인트 를 우선 검토합니다. 다음 토큰 학습 계약이 명확하고, 공개되지 않은 인스트럭션 튜닝 혼합에 의존하지 않기 때문입니다. 인스트럭션 튜닝 체크포인트 에서 시작하면 이미 유용한 인터페이스를 보존할 수 있지만, 긴 CPT는 대화 형식, 거부 행동, 도구 사용, 보정을 약화할 수 있습니다. 이 위험은 가정하지 말고 측정해야 합니다.
파일럿 전에 다음 입력 묶음을 변경 불가능한 상태로 고정합니다.
| 아티팩트 | 필요한 식별 정보 |
|---|---|
| 모델 | 공급자/저장소, 리비전, 설정, 가중치 해시, 라이선스 |
| 토크나이저 | 파일과 해시, 정규화 규칙, 어휘 크기, 특수 토큰 ID |
| 프롬프팅 계약 | 채팅 템플릿 바이트, BOS/EOS 정책, 생성 프롬프트 동작 |
| 데이터 | 매니페스트 버전, 출처/라이선스/동의, 필터, 샤드 해시, 삭제 계보 |
| 학습 시스템 | 코드 커밋, 해석된 설정, 컨테이너, CUDA/프레임워크/커널 버전 |
| 평가 | 고정된 과업·유지 세트, 프롬프트/루브릭 버전, 디코딩 설정 |
첫 업데이트 전에 체크포인트를 불러와 전체 기준 평가를 실행합니다. 기준선을 재현하지 못하면 이후 회귀를 CPT 탓으로 돌릴 수 없습니다.
데이터 혼합 설계
도메인 전용 스트림은 적응 압력과 망각 압력을 함께 최대화하기 쉽습니다. 도메인 데이터와 대표적인 일반 리플레이 데이터의 혼합을 정의합니다.
여기서 는 조정할 샘플링 가중치이며 디스크상의 물리적 바이트 비율이 아닙니다. 필터링, 토큰화, 패킹, 샘플링 이후 출처별 실제 소비 토큰을 기록합니다. 문서 수준 80/20 혼합이 토큰 수준에서도 80/20이라고 볼 수 없습니다.
변경 불가능한 데이터셋 매니페스트에는 출처 URI 또는 내부 ID, 라이선스나 동의 근거, 수집 시점, PII/비밀정보 정책, 삭제 계보, 언어·도메인 레이블, 필터 버전, 정확·근사 중복 클러스터 ID, 샤드 체크섬, 토크나이저 해시, 샘플 ID가 들어가야 합니다. 학습/개발/테스트 분할 전에 중복 제거와 의미 클러스터링을 수행합니다. 공개 벤치마크, 비공개 릴리스 프롬프트, 루브릭, 의미적으로 가까운 자료, 합성 변형을 도메인·리플레이 말뭉치 모두에서 격리합니다.
는 파일럿 스윕으로 선택합니다. 최소한 도메인 비중이 높은 혼합, 균형 혼합, 리플레이 비중이 높은 대조군을 비교합니다. 목표는 요구한 도메인 개선과 허용 가능한 기본 능력·안전 유지가 만나는 파레토 지점입니다. 리플레이가 망각 방지를 보장하지 않으며, 지나친 리플레이는 필요한 적응을 막을 수 있습니다.
문서 경계도 학습 목표의 일부입니다. 토크나이저가 의도한 EOS/문서 구분자를 넣고 패딩을 마스킹하며, 패킹한 문서가 경계를 넘어 어텐션할 수 있는지 기록합니다. 처리량을 위해 문서 간 어텐션을 의도적으로 허용할 수 있지만, 학습·평가·재개 동등성 테스트에서 같은 규칙을 사용해야 합니다.
토크나이저와 어휘집 결정
기본값은 원래 토크나이저 유지입니다. 토큰화를 바꾸면 시퀀스 길이, 문서 경계, 임베딩 식별자, 체크포인트 호환성이 함께 달라집니다. 결정 전에 다음을 측정합니다.
- 바이트 또는 문자 왕복 동작과 미등록/폴백 비율
- 언어·도메인별 바이트당 토큰과 문서당 토큰의 긴 꼬리
- 코드, 수식, 식별자, 전문 용어의 분절 정도
- 예약·특수 토큰의 충돌과 빈도
- 인코딩/디코딩 오프셋과 BOS/EOS 동작
도메인 단어가 여러 조각으로 나뉜다는 이유만으로 토큰을 추가하지 않습니다. 서브워드 조합으로 충분할 수 있고, 어휘 변경은 배포와 복구 위험을 늘립니다. 수용 테스트에서 처리량이나 표현 문제가 실질적이라고 확인되면 기존 ID를 재배정하지 않은 채 토큰을 뒤에 추가하고, 새 임베딩과 출력 행을 명시적으로 초기화하며, 프레임워크의 임베딩 크기 조정 연산을 호출하고 그 행들을 학습합니다. Hugging Face 토크나이저 계약도 토큰 추가 뒤 모델 임베딩 크기 조정을 요구합니다 [3]. 토크나이저와 모델을 분리할 수 없는 아티팩트로 버전 관리하고, 서비스가 오래된 토크나이저를 사용하면 로드 단계에서 거부해야 합니다.
확장 전 파일럿
하이퍼파라미터는 책의 상수가 아니라 실험적 결정입니다. 실제 확장에 사용할 데이터 경로와 평가 하네스를 그대로 사용해 작은 모델 또는 적은 토큰 예산으로 짧게 시작합니다. 학습률, 워밍업, 도메인/리플레이 가중치, 업데이트당 유효 토큰, 시퀀스 길이, 필요하면 전체 파라미터 학습과 어댑터 학습을 스윕합니다.
실행 전 자원 계산표에서 다음 항목을 분리합니다.
- 파라미터, 그래디언트, 옵티마이저 상태, 마스터 가중치, 어댑터
- 선택한 시퀀스 길이, 마이크로배치, 활성화 체크포인팅, 어텐션 커널에서의 활성화
- 임시 버퍼와 최대 collective/all-gather 메모리
- 체크포인트 스테이징과 평가 메모리
- 실측 FLOP/s, GPU당 토큰/s, 데이터 대기, 체크포인트 대역폭, 재시작 오버헤드, 예상 경과 시간과 비용
파일럿 예산 안에서 의미 있고 반복 가능한 도메인 개선을 만드는 가장 작은 학습률을 사용합니다. 일반적인 미세 조정 학습률이 CPT에도 자동으로 안전한 것은 아닙니다. 그래디언트 누적과 가변 길이 패킹 때문에 “스텝”은 서로 비교하기 어려우므로 워밍업과 감쇠를 토큰 단위로 정의합니다. 단일 워커, 단일 노드, 다중 노드 스모크 테스트가 손실 마스킹, 샘플 ID, 토큰 수, 체크포인트 복원에 합의한 뒤에만 확장합니다.
관측 가능한 실행 계약
대시보드에는 전역·토큰 정규화 학습/검증 손실, 도메인·리플레이 손실, 고정 다운스트림 프로브, 전역·계층별 그래디언트/가중치/활성화 노름, 비유한 값과 오버플로 수, 클리핑 비율, 학습률, 처리량, MFU, 데이터 대기, p50/p95 스텝 시간, collective 시간, 지연 랭크, 재구성 가능한 배치/샘플 ID를 포함합니다.
중단 조건은 실행 전에 정의합니다. 비유한 파라미터 발생, 정상 체크포인트에서 재현되는 반복 손실 급등, 중요한 안전 슬라이스 실패, 체크섬 불일치, 설명되지 않는 샘플 중복, 허용 범위를 넘은 기본 능력 저하와 동반된 도메인 개선 등이 예입니다. 실제 수치 임계값은 파일럿과 제품 위험 수준에서 정해야 합니다.
체크포인트와 정확한 재개 계약
복구 가능한 CPT 체크포인트는 모델 가중치보다 훨씬 많습니다. 샤딩된 모델·옵티마이저 상태, 스케줄러, 그래디언트 스케일러 또는 FP8 스케일링 상태, 전역 스텝과 소비 토큰, 관련된 모든 RNG 상태, 샘플러 상태, 정확한 데이터 커서를 저장합니다. 데이터셋, 토크나이저, 모델, 코드, 해석된 설정의 해시와 묶습니다.
데이터 커서에는 적어도 데이터셋 버전, 에포크 또는 스트림 세대, 전역 랭크·워커 분할 규칙, 결정적 순열 시드, 샤드 ID, 샘플 또는 토큰 오프셋이 있어야 합니다. 워커 로컬 카운터만으로는 부족합니다. IterableDataset 워커는 별도 프로세스이며 저장 상태를 모델 체크포인트와 함께 통합해야 합니다.
2단계로 발행합니다.
- 각 랭크가 고유한 임시 체크포인트 위치에 기록하고 체크섬을 남깁니다.
- 조정자가 필요한 샤드와 메타데이터를 확인한 뒤 완료 마커 또는 매니페스트를 원자적으로 발행합니다.
읽는 쪽은 완료된 체크포인트만 불러옵니다. 분산 체크포인트 라이브러리는 저장/로드를 병렬화하고 로드 시 재샤딩을 지원할 수 있지만, 실제 프레임워크 버전의 보장과 API를 확인해야 합니다 [4]. 원래 월드 크기에서 복원 훈련을 하고, 지원한다면 변경한 월드 크기에서도 연습합니다. 재개 동등성 테스트는 선언한 수치 허용 범위 안에서 샘플 ID, 학습률, 이후 몇 차례의 손실·업데이트를 중단 없는 대조군과 비교해야 합니다. 전체 스택이 실제로 비트 단위 재현을 보장하지 않는 대규모 환경에서는 통계적 동등성을 약속해야 합니다 [5].
평가와 릴리스 게이트
평가는 마지막에만 하지 않고 학습 중 체크포인트마다 수행합니다. 생성 시드, 디코딩 파라미터, 프롬프트 템플릿, 평가기 버전, 기준 아티팩트 해시를 고정합니다.
| 게이트 | 최소 증거 | 실패 시 조치 예시 |
|---|---|---|
| 도메인 모델링 | 출처·언어별 홀드아웃 도메인 퍼플렉서티/손실 | 혼합, 토크나이저, 오염된 분할 점검 |
| 도메인 효용 | 비공개 과업 지표와 블라인드 인간/검증기 평가 | 낮은 퍼플렉서티가 전이되지 않으면 중단 |
| 기본 능력 유지 | 일반 능력 모음과 리플레이 도메인 손실 | 리플레이 증가, 학습률/토큰 감소 또는 롤백 |
| 행동 유지 | 형식, 지시, 도구 사용, 거부 테스트 | 원인 분석 뒤에만 SFT 재실행 |
| 안전·개인정보 | 독성, 암기, PII, 탈옥, 정책 슬라이스 | 릴리스 차단과 문제 데이터 격리 |
| 운영 | 지연, 메모리, 오류/OOM 비율, 비용, 아티팩트 호환성 | 비호환 또는 비경제적 아티팩트 거부 |
가능하면 대응 표본 비교와 불확실성 구간을 사용합니다. 중요한 슬라이스에는 최소 표본 수를 정하고, 전체 평균이 개인정보나 안전 실패를 상쇄하지 못하게 합니다. 도메인 목표와 모든 유지·릴리스 게이트를 통과할 때만 CPT 아티팩트를 승격합니다. 그렇지 않으면 마지막 정상 묶음을 유지합니다.
실패 모드와 대응 절차
도메인 손실은 좋아지지만 다운스트림 품질은 그대로인 경우. 오염과 토큰화를 확인하고, 과업에 언어 모델링보다 검색 또는 레이블된 행동이 필요한지 판단합니다. 고정된 RAG·SFT 기준선과 비교합니다.
일반 능력이나 안전성이 저하된 경우. 고정 슬라이스에서 변화를 재현하고, 도메인/리플레이의 실제 토큰 혼합을 확인하며, 학습률이나 학습 기간을 줄이고 더 대표적인 리플레이를 스윕합니다. 옵티마이저 모멘트를 무작정 초기화하지 않습니다. 최적화 궤적을 바꾸어 또 다른 불안정을 만들 수 있습니다.
손실 급등이 나타난 경우. 아티팩트 ID와 의심 배치 ID를 고정하고, 모든 랭크가 같은 스텝과 비유한 상태를 보는지 확인하며, 정상 체크포인트에서 배치를 재생합니다. 건너뛰기·재생·대조 분기를 비교하고 데이터, 옵티마이저/수치, 하드웨어 원인을 이분 탐색합니다. 증거가 있을 때만 샤드를 격리하고 진단을 위해 보존합니다.
재개 후 학습이 달라지는 경우. 미완료 체크포인트 매니페스트를 거부하고 월드 크기, 코드/설정 해시, RNG·샘플러 상태, 데이터 커서, 패킹 순서, 학습률·토큰 카운터를 비교합니다. 모델만 저장한 체크포인트는 웜 스타트이지 정확한 재개가 아닙니다.
서비스 행동이 예상 밖으로 변한 경우. 베이스, CPT 가중치 또는 어댑터, 토크나이저, 채팅 템플릿, 생성 설정, 도구 스키마, 안전 설정을 포함한 전체 아티팩트 묶음을 확인합니다. 미리 정의한 기능 플래그와 마지막 정상 묶음으로 트래픽을 롤백한 뒤, 수정 경로를 리허설하고 다시 확대합니다.
CPT의 산출물은 가중치 파일 하나가 아닙니다. 의도한 분포를 학습하고 필요한 능력을 유지했으며, 운영 환경에 충분히 결정적으로 재개할 수 있고, 후속 SFT 또는 선호도 최적화 전에 안전하게 롤백할 수 있음을 증명한 버전형 아티팩트입니다.
Quizzes
Quiz 1: 모델이 최신 규정을 틀리게 답하지만 검색된 규정은 정확히 요약할 수 있습니다. CPT를 첫 개입으로 선택해야 할까요?
아닙니다. 사실이 변하고 출처가 필요하며 모델은 이미 문서를 해석할 수 있습니다. 검색 기준선이 더 되돌리기 쉽고 출처도 검사할 수 있습니다. 검색 품질이 좋은데도 도메인 자료를 처리하지 못한다는 통제 평가 결과가 있을 때 CPT를 검토합니다.
Quiz 2: 문서 기준 80/20 혼합이 반드시 학습 토큰 기준 80/20이 아닌 이유는 무엇인가요?
문서 길이가 다르고 필터링, 토큰화, 패킹, 재샘플링이 출처마다 다르게 작용할 수 있기 때문입니다. 실제 소비 토큰을 출처별로 기록해야 하며, 샘플링 가중치 와 물리적 말뭉치 비율은 같은 값이 아닙니다.
Quiz 3: 도메인 토큰을 토크나이저에 추가하는 결정은 언제 정당화되나요?
수용 테스트에서 폴백 오류, 심각한 분절, 허용하기 어려운 시퀀스 증가 같은 실질적 문제가 확인될 때만 정당화됩니다. 기존 ID 유지, 새 임베딩·출력 행 초기화, 임베딩 크기 조정, 재학습, 새 토크나이저 해시, 서비스 호환성 검사가 모두 필요합니다.
Quiz 4: 모델과 옵티마이저 가중치만 저장해서는 정확히 학습을 재개할 수 없는 이유는 무엇인가요?
다음 업데이트는 스케줄러와 정밀도 스케일러 상태, 전역 토큰 수, RNG 상태, 샘플러 분할, 패킹 순서, 정확한 데이터 커서에도 의존합니다. 이 중 하나라도 빠지면 가중치가 같아도 샘플이나 업데이트가 달라질 수 있습니다.
Quiz 5: 도메인 퍼플렉서티는 크게 낮아졌지만 비공개 과업 지표가 그대로이고 안전 슬라이스가 저하됐습니다. 체크포인트를 릴리스할 수 있나요?
아닙니다. 퍼플렉서티는 제품 목표 자체가 아니라 진단 지표이며, 중요한 안전 실패는 평균으로 상쇄할 수 없습니다. RAG나 SFT가 더 적절한 개입인지 비교하고 데이터 혼합과 회귀 원인을 조사하는 동안 릴리스 게이트 뒤에 유지해야 합니다.
References
- Gururangan, S., et al. (2020). Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks. ACL Anthology.
- Cossu, A., et al. (2022). Continual Pre-training Mitigates Forgetting in Language and Vision. arXiv:2205.09357.
- Hugging Face. Tokenizer documentation: adding tokens and resizing embeddings. Transformers documentation.
- PyTorch. Distributed Checkpoint documentation. PyTorch documentation.
- PyTorch. Reproducibility. PyTorch developer notes.