HTSR-VL GRPO Training
Hierarchical Time-Series Reasoning with Vision-Language Model — 使用 GRPO (Group Relative Policy Optimization) 强化学习训练 Qwen3-VL-8B 进行工业时序异常分析。
Quick Start
1. 环境准备
# 安装 uv(如未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装 Git LFS(图片以 LFS 存储,必须安装)
# Ubuntu/Debian:
apt install git-lfs && git lfs install
# 或 macOS:
brew install git-lfs && git lfs install
2. 克隆项目
git lfs install
git clone https://huggingface.co/ANTICH/htsr-grpo-train
cd htsr-grpo-train
克隆包含训练图片(3060张,2.8GB)和 benchmark 图片(1716张,1.5GB),总计约 4.3GB,需要等待下载完成。
3. 安装 Python 依赖
uv sync
4. 下载基座模型
bash setup_data.sh
此脚本会:
- 从 HuggingFace 下载
Qwen/Qwen3-VL-8B-Instruct到models/qwen3vl-8b-base/ - 自动 patch
preprocessor_config.json限制图片分辨率为 512x512
5. 开始 GRPO 训练
# 8x H100/H800(默认)
bash run_grpo.sh
# 2x A800(指定配置文件)
bash run_grpo.sh configs/grpo_config_2gpu.yaml
Benchmark 评测
训练完成后,合并 LoRA 并运行 benchmark 评测:
合并 LoRA
# 使用 LLamaFactory 合并(需安装 llamafactory-cli)
llamafactory-cli export configs/grpo_merge.yaml
启动模型推理服务
# 用 vLLM 启动推理(替换为你合并后的模型路径)
vllm serve models/qwen3vl-8b-htsr-grpo \
--served-model-name htsr-grpo \
--tensor-parallel-size 2 \
--max-model-len 4096 \
--port 8000
运行评测
# 设置环境变量
export VLM_BASE_URL="http://localhost:8000/v1"
export VLM_API_KEY="EMPTY"
export JUDGE_API_KEY="your-dashscope-api-key" # 用于 qwen-plus 评分
# 运行评测
python run_benchmark_eval.py --models htsr-grpo
评测指标包括:
- HES (Hierarchical Evaluation Score): 综合得分
- DA (Direction Alignment): 趋势方向对齐
- SS (Semantic Similarity): 语义相似度
- AQ (Answer Quality): 答案质量
Project Structure
htsr-grpo-train/
├── pyproject.toml # Python 依赖(uv sync 入口)
├── uv.lock # 锁定依赖版本
├── run_grpo.sh # 训练启动脚本
├── setup_data.sh # 模型下载脚本
├── run_benchmark_eval.py # Benchmark 评测入口
├── benchmark_eval.py # 评测核心逻辑
├── EasyR1/ # Patched EasyR1/verl 框架
├── configs/
│ ├── grpo_config_8gpu.yaml # 8x H100/H800 配置
│ ├── grpo_config_2gpu.yaml # 2x A800 配置
│ └── grpo_merge.yaml # LoRA 合并配置
├── MultiAgentTS/
│ ├── training_data/
│ │ ├── reward_function/htsr.py # 自定义奖励函数
│ │ └── format_prompt/htsr.jinja # Prompt 模板
│ └── Data/benchmark_tb/ # Benchmark 图片(1716张,含在 repo 中)
│ ├── LongTS_Industrial/test.jsonl
│ ├── coal_mill/
│ ├── pump/
│ ├── transformer/
│ └── wind_turbine/
├── Data/
│ ├── training/grpo_parquet/ # 训练数据(parquet,含在 repo 中)
│ └── training_series/ # 训练图片(3060张,含在 repo 中)
├── models/ # 基座模型(通过 setup_data.sh 下载)
└── checkpoints/ # 训练 checkpoint(自动创建)
GPU Configurations
| 配置 | GPU | global_batch_size | rollout_batch_size | 预计时间 (3 epochs) |
|---|---|---|---|---|
| 8gpu | 8x H100/H800 80GB | 128 | 256 | ~15-18 小时 |
| 2gpu | 2x A800 80GB | 32 | 64 | ~57 小时 |
EasyR1 Patches
包含的 EasyR1 针对 vLLM 0.16.0 做了兼容性修改:
verl/utils/vllm_utils.py: LoRAModel import 路径 +from_lora_tensorsAPI 适配verl/workers/sharding_manager/fsdp_vllm.py:get_tensor_model_parallel_group->get_tp_groupverl/workers/rollout/vllm_rollout_spmd.py:disable_mm_preprocessor_cache->mm_processor_cache_gb
Requirements
- Python >= 3.10
- CUDA 12.x
- GPU: 80GB VRAM per card (A800/A100/H100/H800)
- Git LFS (图片存储)