Skip to content

파인튜닝을 상징하는 이미지

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.8BLoRA / 전체ZeRO-2 (offload 없음)1장 (24GB+)
Hy-MT2-7BLoRAZeRO-2 (offload 없음)1장 (80GB+)
Hy-MT2-7B전체ZeRO-3 (offload 없음)2장 (각 80GB+)
Hy-MT2-30B-A3BLoRAZeRO-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.shbash 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 통신 설정이 선행되어야 합니다.

  1. SSH 키 생성 및 배포: ssh-keygen으로 생성한 공개키(id_rsa.pub)를 모든 참여 머신의 ~/.ssh/authorized_keys에 동일하게 등록합니다.
  2. SSH 서비스 설정: 모든 노드에서 동일한 포트(예: 36005)로 SSH 리스닝을 시작하고, .ssh/config에 해당 포트를 지정합니다.
  3. 환경 일치: 데이터셋, 스크립트, 코드가 모든 머신의 동일한 경로에 위치해야 합니다. 공유 네트워크 드라이브(NFS 등)를 사용하는 것이 가장 간편합니다.
  4. 실행: 스크립트 상단의 IP_LIST에 참여 노드의 IP 목록을 쉼표로 구분해 입력한 뒤, 마스터 노드에서 학습 스크립트를 실행합니다.

학습 과정에서 발생하는 Loss의 미세한 차이는 비결정적 알고리즘에 의한 정상적인 현상이므로 안심하셔도 됩니다.

오픈소스를 한국어로 읽고 배웁니다.