테마 전환

Hy-MT2는 모델의 전체 파라미터를 조정하는 Full Fine-tuning과 효율적인 학습이 가능한 LoRA 파인튜닝을 모두 지원합니다. 저장소의 train/ 디렉터리에는 이를 위한 다양한 스크립트와 가이드가 포함되어 있으며, 본 글에서는 실무자가 가장 많이 사용하는 두 가지 학습 경로를 중심으로 정리했습니다.
- DeepSpeed 네이티브 학습: HuggingFace Transformers Trainer 기반으로, 세밀한 설정과 성능 최적화가 필요한 경우 적합합니다. (
train/deepspeed_support/) - LLaMA-Factory 학습: 이미 익숙한 LLaMA-Factory 프레임워크를 통해 더 쉽고 빠르게 학습을 진행하고 싶은 경우 추천합니다. (
train/llama_factory_support/)
학습 데이터: 어떤 형식으로 준비해야 하는가
Hy-MT2의 학습 데이터는 messages 리스트가 포함된 jsonl 형식이어야 합니다. 추론 단계와 마찬가지로 기본 system prompt는 비워 두는 것이 원칙이며, 필요한 지시사항은 user 메시지에 포함합니다.
번역 작업 학습 데이터 예시:
python
{"messages": [{"role": "user", "content": "将以下中文翻译为英文,只输出翻译结果,不要额外解释(다음 중국어를 영어로 번역하고, 번역 결과만 출력하며 추가 설명은 하지 마십시오):\n\n实验结果(실험 결과)证明了(증명했다)假设(가설)의 正确性(정확성)。"}, {"role": "assistant", "content": "The experimental results demonstrate the correctness of the hypothesis."}]}여기서 중요한 점은 학습 데이터의 프롬프트 패턴을 번역 지시 메뉴얼에서 다룬 7가지 공식 패턴과 일치시키는 것입니다. 추론 때 사용할 지시문과 동일한 형태로 학습시켜야 모델이 해당 패턴에 최적화된 결과를 내놓기 때문입니다.
하드웨어 체크: 최소 GPU 요구 사양
학습을 시작하기 전, 자신의 GPU 자원이 충분한지 확인하세요. 아래는 max_seq_length = 8192 기준의 최소 요구 사양입니다.
| 모델 | 학습 방식 | DeepSpeed 전략 | 최소 GPU 자원 |
|---|---|---|---|
| Hy-MT2-1.8B | LoRA / 전체 | ZeRO-2 (offload 없음) | 1장 (24GB+) |
| Hy-MT2-7B | LoRA | ZeRO-2 (offload 없음) | 1장 (80GB+) |
| Hy-MT2-7B | 전체 | ZeRO-3 (offload 없음) | 2장 (각 80GB+) |
| Hy-MT2-30B-A3B | LoRA | ZeRO-2 (offload 없음) | 단일 머신 8장 (각 80GB+) |
| Hy-MT2-30B-A3B | 전체 | ZeRO-3 + offload | 단일 머신 8장 (각 80GB+) |
특히 30B-A3B 모델은 MoE 구조의 특성상 LoRA 학습이라 하더라도 80GB GPU 8장 구성이 사실상의 최소 기준입니다. 리소스가 부족한 개인 환경이라면, 우선 1.8B 모델로 학습 파이프라인을 검증한 뒤 규모를 키우는 방법을 권장합니다.
정밀한 제어를 위한 DeepSpeed 네이티브 학습
train/deepspeed_support/에 제공되는 스크립트를 사용하면 세밀한 튜닝이 가능합니다.
| 대상 모델 | 전체 파인튜닝 스크립트 | LoRA 파인튜닝 스크립트 |
|---|---|---|
| 30B-A3B (MoE) | bash train.sh | bash train_lora.sh |
| 1.8B / 7B (Dense) | bash train_dense.sh {size} | bash train_dense_lora.sh {size} |
핵심 설정 파라미터 가이드:
--deepspeed: 메모리 상황에 따라ds_zero2_no_offload.json$\rightarrow$ds_zero3_no_offload.json$\rightarrow$ds_zero3_offload.json순으로 선택하세요. 뒤로 갈수록 메모리 요구량은 줄어들지만 학습 속도는 느려집니다.--use_lora: LoRA 적용 시q_proj, k_proj, v_proj, o_proj에 기본 적용됩니다. 주의할 점은 LoRA 학습 시에는 어댑터 가중치만 저장되며, 기본 모델 가중치는 변경되지 않습니다.--make_moe_param_leaf_module: ZeRO-3로 MoE 모델을 학습할 때 필수적인 옵션이지만, 메모리 사용량이 크게 증가할 수 있으므로 주의가 필요합니다.
학습을 중단했다가 다시 시작할 때는 --resume_from_checkpoint 옵션으로 체크포인트 경로를 지정하세요.
LoRA 가중치 병합과 모델 통합
ZeRO-3 전략을 사용해 학습한 경우, 모델 가중치가 여러 랭크에 분산 저장되어 있어 즉시 사용할 수 없습니다. 학습 완료 후 merge_lora_weight.sh 스크립트를 사용해 LoRA 어댑터를 기본 모델에 병합한 통합 가중치 파일을 생성해야 합니다.
- 입력: 기본 모델 경로(
--base_model_path), LoRA 가중치 경로(--adapter_model_path) - 설정: 저장할 데이터 타입(
--save_dtype:fp16,bf16,fp32중 선택)
편의성을 높인 LLaMA-Factory 학습 경로
LLaMA-Factory 프레임워크에 익숙하다면 train/llama_factory_support/ 경로의 설정을 사용하는 것이 훨씬 효율적입니다.
30B-A3B 모델의 경우 hy_v3_full_sft.yaml(전체) 또는 hy_v3_lora_sft.yaml(LoRA) 설정 파일을 사용하고, bash train_lf.sh로 실행합니다.
설정 파일 핵심 체크리스트:
trust_remote_code: 반드시true로 설정해야 합니다.template: 30B-A3B는hy_v3템플릿을 사용하며, 1.8B/7B는 각각hy_dense_1_8b,hy_dense_7b를 사용합니다.cutoff_len: LoRA 학습 시 메모리 절약을 위해8192설정을 권장합니다.learning_rate: 전체 학습은1.0e-5, LoRA는2.0e-4정도가 적당합니다.
규모 확장을 위한 멀티 머신 학습 설정
단일 머신으로 충분하다면 이 섹션은 건너뛰셔도 좋습니다.
여러 대의 서버를 연결해 학습하려면 모든 노드 간의 비밀번호 없는 SSH 통신 설정이 선행되어야 합니다.
- SSH 키 생성 및 배포:
ssh-keygen으로 생성한 공개키(id_rsa.pub)를 모든 참여 머신의~/.ssh/authorized_keys에 동일하게 등록합니다. - SSH 서비스 설정: 모든 노드에서 동일한 포트(예: 36005)로 SSH 리스닝을 시작하고,
.ssh/config에 해당 포트를 지정합니다. - 환경 일치: 데이터셋, 스크립트, 코드가 모든 머신의 동일한 경로에 위치해야 합니다. 공유 네트워크 드라이브(NFS 등)를 사용하는 것이 가장 간편합니다.
- 실행: 스크립트 상단의
IP_LIST에 참여 노드의 IP 목록을 쉼표로 구분해 입력한 뒤, 마스터 노드에서 학습 스크립트를 실행합니다.
학습 과정에서 발생하는 Loss의 미세한 차이는 비결정적 알고리즘에 의한 정상적인 현상이므로 안심하셔도 됩니다.