Cấu hình huấn luyện liên tục (CPT) cho llama-factory với mô hình Qwen3

Trong quá trình nâng cấp hệ thống mô hình Qwen3, tôi đã thực hiện điều chỉnh cấu hình huấn luyện trên tài nguyên GPU mới của công ty. Dưới đây là quá trình phân tích và tối ưu hóa bộ nhớ.

  1. Vấn đề về phụ thuộc cấu hình ========= Ban đầu sử dụng mô hình Qwen2.5-Coder-3B với cấu hình mặc định:
bf16: true
max_seq_length: 2048
train_dataset: afsim_train_data
data_path: data
ddp_timeout: 180000000
enable_training: true
training_mode: full
flash_attention: auto
accumulation_steps: 8
learning_rate: 5.0e-05
log_interval: 5
scheduler_type: cosine
grad_norm: 1.0
sample_limit: 100000
base_model_path: /data/wzr/LLM-MODELS/Qwen/Qwen2___5-Coder-3B-Instruct/
epochs: 3.0
optimizer: adamw_torch
output_path: saves/Qwen2.5-Coder-3B-Instruct/full/train_2025-01-07-21-03-26
packing: true
batch_size_per_gpu: 2
loss_plot: true
workers: 16
reporting: none
save_interval: 100
stage: pretrain
model_template: qwen
trust_code: true
warmup_steps: 0

Khi sử dụng 2 GPU A100 80G, tôi nhầm tưởng rằng cấu hình đã áp dụng song song tham số. Tuy nhiên khi nâng cấp lên hệ thống A800 80G * 8, việc huấn luyện mô hình Qwen3-14B gặp lỗi OOM (Out Of Memory).

Theo công thức tính toán bộ nhớ:

VRAM_total = Tham_số_mô_hình + Trạng_thái_optimizer + Kích_thước_kích_động

Phương pháp 8B 14B 30B
Full (bf16) 60GB 120GB 300GB

(Ghi chú: Giá trị ước tính, giai đoạn pre-train thực tế cần nhiều hơn)

  1. Cấu hình DeepSpeed tối ưu ========= Sau khi kiểm tra tài liệu chính thức, tôi phát hiện cần thiết lập ZeRO-3:
  • ZeRO-1: Chia optimizer nhưng giữ nguyên mô hình
  • ZeRO-2: Chia optimizer và gradient
  • ZeRO-3: Chia cả tham số mô hình, optimizer và gradient

Cấu hình cuối cùng được áp dụng:

llamafactory-cli train \
    --stage pretrain \
    --enable_training True \
    --base_model_path /root/private_data/SothisAI/model/Aihub/Qwen3-30B-A3B/main/Qwen3-30B-A3B \
    --workers 16 \
    --training_mode full \
    --model_template qwen3 \
    --flash_attention auto \
    --train_dataset_dir data \
    --train_dataset afsim_train_data \
    --max_seq_length 2048 \
    --learning_rate 5e-05 \
    --epochs 5.0 \
    --sample_limit 100000 \
    --batch_size_per_gpu 2 \
    --accumulation_steps 8 \
    --scheduler_type cosine \
    --grad_norm 1.0 \
    --log_interval 5 \
    --save_interval 100 \
    --warmup_steps 0 \
    --packing True \
    --enable_thinking True \
    --reporting none \
    --freeze_vision_tower True \
    --freeze_multi_modal_projector True \
    --image_max_pixels 589824 \
    --image_min_pixels 1024 \
    --video_max_pixels 65536 \
    --video_min_pixels 256 \
    --output_path saves/Qwen3-30B-A3B/full/train_deepspeed_z3_2025-05-25-17-02-33 \
    --bf16 True \
    --loss_plot True \
    --trust_code True \
    --ddp_timeout 180000000 \
    --include_token_count True \
    --optimizer adamw_torch \
    --deepspeed cache/ds_z3_config.json

Kết quả đạt được 70GB VRAM mỗi GPU cho mô hình 30B mà không gặp lỗi.

Thẻ: llamafactory ZeRO-3 DeepSpeed

Đăng vào ngày 28 tháng 7 lúc 04:00