| """ |
| VLM预训练配置 |
| 支持多个模型和多任务学习 |
| """ |
|
|
| import os |
| from dataclasses import dataclass, field |
| from typing import Optional, List |
|
|
| @dataclass |
| class ModelConfig: |
| """模型配置""" |
| model_name: str = "Qwen2.5-VL-3B-Instruct" |
| model_path: str = "PROJECT_ROOT/models/Qwen2.5-VL-3B-Instruct" |
| model_type: str = "qwen2.5-vl" |
| |
| |
| use_lora: bool = True |
| lora_r: int = 32 |
| lora_alpha: int = 32 |
| lora_dropout: float = 0.1 |
| lora_target_modules: List[str] = field(default_factory=lambda: [ |
| "q_proj", "v_proj", "k_proj", "o_proj", |
| "gate_proj", "up_proj", "down_proj" |
| ]) |
| |
| |
| load_in_4bit: bool = False |
| load_in_8bit: bool = False |
|
|
|
|
| @dataclass |
| class DataConfig: |
| """数据配置""" |
| data_file: str = "PROJECT_ROOT/data/dataset/pretrain/train/pretrain_data.pkl" |
| image_size: int = 224 |
| max_sequence_length: int = 30 |
| |
| |
| task1_weight: float = 1.0 |
| task2_weight: float = 1.0 |
| task3_weight: float = 2.0 |
|
|
|
|
| @dataclass |
| class TrainingConfig: |
| """训练配置""" |
| output_dir: str = "PROJECT_ROOT/checkpoints/pretrain" |
| |
| |
| num_epochs: int = 5 |
| batch_size: int = 4 |
| gradient_accumulation_steps: int = 4 |
| learning_rate: float = 2e-5 |
| weight_decay: float = 0.01 |
| warmup_ratio: float = 0.1 |
| max_grad_norm: float = 1.0 |
| |
| |
| optimizer_type: str = "adamw" |
| lr_scheduler_type: str = "cosine" |
| |
| |
| logging_steps: int = 10 |
| save_steps: int = 500 |
| save_total_limit: int = 3 |
| eval_steps: int = 500 |
| |
| |
| device: str = "cuda" |
| fp16: bool = True |
| bf16: bool = False |
| |
| |
| seed: int = 42 |
| |
| |
| use_wandb: bool = False |
| wandb_project: str = "lkalert-pretrain" |
| wandb_run_name: Optional[str] = None |
|
|
|
|
| @dataclass |
| class PretrainConfig: |
| """完整配置""" |
| model: ModelConfig = field(default_factory=ModelConfig) |
| data: DataConfig = field(default_factory=DataConfig) |
| training: TrainingConfig = field(default_factory=TrainingConfig) |
| |
| def __post_init__(self): |
| |
| self.training.output_dir = os.path.join( |
| self.training.output_dir, |
| self.model.model_name |
| ) |
| os.makedirs(self.training.output_dir, exist_ok=True) |
|
|
|
|
| |
| QWEN25_VL_3B_CONFIG = PretrainConfig( |
| model=ModelConfig( |
| model_name="Qwen2.5-VL-3B-Instruct", |
| model_path="PROJECT_ROOT/models/Qwen2.5-VL-3B-Instruct", |
| model_type="qwen2.5-vl", |
| lora_r=32, |
| lora_alpha=32 |
| ), |
| training=TrainingConfig( |
| |
| |
| batch_size=1, |
| gradient_accumulation_steps=8, |
| num_epochs=5 |
| ) |
| ) |
|
|
| QWEN25_VL_7B_CONFIG = PretrainConfig( |
| model=ModelConfig( |
| model_name="Qwen2.5-VL-7B-Instruct", |
| model_path="PROJECT_ROOT/models/Qwen2.5-VL-7B-Instruct", |
| model_type="qwen2.5-vl", |
| lora_r=32, |
| lora_alpha=32, |
| load_in_8bit=True |
| ), |
| training=TrainingConfig( |
| batch_size=4, |
| gradient_accumulation_steps=4, |
| num_epochs=5 |
| ) |
| ) |