VLAlert / training /pretrain /config.py
AsianPlayer's picture
Add VLAlert code
1e05592 verified
Raw
History Blame Contribute Delete
3.42 kB
"""
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" # qwen2.5-vl, llava-onevision, minicpm-v, etc.
# LoRA配置
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 # 任务3最大序列长度
# 任务权重
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
# wandb
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=8,
# gradient_accumulation_steps=2,
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 # 7B模型使用8bit量化
),
training=TrainingConfig(
batch_size=4,
gradient_accumulation_steps=4,
num_epochs=5
)
)