1. 사용 모델과 학습 환경
1-1. 사용 모델: KETI-AIR ke-T5-ko2en(T5 - large)
이번 프로젝트에서 사용하는 모델은 허깅페이스의
KETI-AIR/ke-t5-large-ko2en
계열 한국어 → 영어 번역 모델이다.
- 기본 구조: Transformer 기반 Encoder–Decoder(Seq2Seq) 구조
- Text-to-Text: 입력과 출력이 모두 텍스트인 Text-to-Text 패러다임
- 활용 목적
- 일반 문장 + 과학·기술 도메인 텍스트를
한국어에서 영어로 자연스럽게 번역 - 향후 RAG 파이프라인에서 Generator 역할을 하는 기반 모델
- 일반 문장 + 과학·기술 도메인 텍스트를
정리하자면,
“Transformer 구조를 쓰되, 번역/요약/질문응답 등을 전부 ‘텍스트 → 텍스트’로 통일한 T5 계열 모델을, 한국어↔영어에 맞게 특화한 버전”을 파인튜닝하고 있다고 보면 된다.
1-2. 학습 환경
GPU 구성
- NVIDIA TITAN RTX 24GB × 2
- NVIDIA GeForce GTX 1060 6GB × 1
- 학습 시에는
CUDA_VISIBLE_DEVICES="0,1"
로 설정하여 0, 1번 TITAN RTX만 사용하고, 1060은 제외한다.
시스템/소프트웨어 환경
- CPU: Xeon E5-2697v2
- RAM: 1.5TB 대용량 메모리
- 가상환경: Conda KDT_Academy
- 주요 라이브러리
- PyTorch
- Hugging Face Transformers / Datasets / Tokenizers

2. 사용 데이터셋과 분할 작업
2-1. 데이터셋 개요
데이터는 한국어–영어 기술과학 분야 병렬 말뭉치(Parallel Corpus) 다.
형태는 아주 단순하다.
- src : 한국어 문장
- tgt : 영어 문장
전체 규모는 대략 132만 문장쌍이며, DatasetDict 기준으로 다음과 같이 나뉜다.
- Train : 1,080,129 문장쌍
- Validation : 120,015 문장쌍
- Test : 150,018 문장쌍
도메인은 일반 문장을 기반으로 한 과학·기술 분야 문장이 담겨져 있다.
2-2. 전처리 & 분할 전략
전처리(예시)
- 공백/제어문자/이상 문자 정리
- 너무 긴 문장 또는 너무 짧은 문장 필터링
- 필요 시 중복 샘플 제거
분할 전략
- Train / Validation / Test를 명확히 분리하여 데이터 누수 방지
- 역할은 다음과 같다.
| 세트 | 용도 |
| Train | 모델 파라미터 학습 |
| Validation | 학습 중 성능 모니터링, 튜닝 기준 |
| Test | 최종 번역 성능 평가(BLEU 등) |
- 데이터 셋이 train과 validation으로 구성되어 있어, train 셋을 9:1의 비율로 train:valid로 나눠 구성하였으며, validation 셋을 test로 전환하여 세팅하였다.

3. 현재 학습 진행 과정과 시행착오
이번 파인튜닝에서 가장 크게 겪은 문제는 학습률과 디버깅 코드였다.

3-1. 초기 세팅에서 터졌던 문제
- 너무 큰 learning rate : 5e-05
초기에는 비교적 큰 learning_rate 로 시작했는데,
로그에서 이런 패턴이 반복적으로 나타났다.
- loss: 0.0
- grad_norm: nan
학습률을 키울수록 같은 패턴이 심해졌고,
이건 전형적인 수치 폭주 / NaN 문제였다.
→ 잘못된 분석 : LR은 grad_norm과 직접적인 관련이 없다.
- 학습 시간(ETA)이 비정상적으로 길어짐
- max_grad_norm = 0.5 를 사용하면서
- 학습 루프 안에 디버깅용 로그 출력/검증 코드가 과하게 들어가 있었다.
- 그 결과:
- 원래는 30시간 안쪽 정도로 끝날 것으로 예상되던 학습이
- 중간에 ETA가 400시간 이상으로 튀는 상황까지 나타났다.
나중에 확인해 보니,
속도 저하의 직접적인 원인은 gradient clipping 자체가 아니라
매 스텝마다 과도하게 찍던 디버깅 코드였다.
3-2. 문제 해결을 위해 조정한 점
- 학습률 안정화
- learning_rate 를 4e-6 수준으로 내렸고,
- 그 이후에는 loss, grad_norm이 NaN으로 튀는 현상이 눈에 띄게 줄었다.
- 디버깅 코드 정리
- 꼭 필요한 로깅만 남기고,
학습 루프 안에서 과하게 호출하던 출력/검증 코드를 제거(또는 주석 처리). - 그 결과 ETA가 다시 정상적인 수십 시간 수준으로 돌아왔다.
- 현재 세팅 목표
- max_grad_norm = 0.5 는 유지
- 두 장의 TITAN RTX를 활용해서 실효 배치 크기를 확보
- 전체 학습을 2일 안에 완주하는 것을 목표로
- batch_size
- gradient_accumulation_steps
- num_train_epochs
조합을 조정 중이다.
3-3. 앞으로의 단기 계획
- 현재 안정화된 세팅(LR=4e-6 등)으로 1차 full train 완주 목표.
- Validation 기준 성능(BLEU, chrF 등)을 로그로 남기기

'HRDI_AI > 머신러닝_딥러닝 핵심 기술과 실무 중심 생성형 AI 프로젝트' 카테고리의 다른 글
| AdamW란 무엇인가, 왜 쓰는가, 수식/직관/실전 세팅까지 (0) | 2025.11.27 |
|---|---|
| 1. Trainer 하이퍼파라미터 정리 (0) | 2025.11.27 |
| 3. grad_norm이란 무엇인가? 그리고 LR과 어떤 관계인가? (0) | 2025.11.27 |
| 2. fp32 vs fp16 – 왜 fp32에서 grad_norm이 더 안정적으로 보였을까? (0) | 2025.11.27 |
| Transformer vs T5(Text-to-Text Transfer Transformer) 어떻게 다른가? (0) | 2025.11.26 |