本项目基于 MiniOneRec 开源框架,实现了一套端到端的生成式推荐系统,在 单张 RTX 3090 24GB 上完成从 SFT 到 GRPO 强化学习的完整训练-评估流程。
原始项目: MiniOneRec (GitHub) | 论文 (arXiv:2510.24431) | 官方权重 (HuggingFace)
原始项目使用 Qwen2.5-1.5B-Instruct + 8×A100 训练。本项目在 Qwen2.5-0.5B + 单卡 RTX 3090 24GB 上完成全流程,并在多个指标上达到甚至超越论文报告的 1.5B 结果。
- 层次化语义 ID:RQ-VAE 三层残差量化,将商品编码为 3 级离散 token 序列(如
<a_236><b_231><c_226>) - GRPO 强化学习:组内归一化优势函数替代 Value 网络,节省约 50% 显存
- 双奖励机制:二进制正确性奖励 + NDCG 排序奖励
- 约束解码:ConstrainedLogitsProcessor 保证 100% 生成合法 SID 序列
| 配置 | HR@1 | HR@3 | HR@5 | HR@10 | NDCG@1 | NDCG@5 | NDCG@10 |
|---|---|---|---|---|---|---|---|
| 0.5B SFT | 0.036 | 0.057 | 0.068 | 0.093 | 0.036 | 0.052 | 0.060 |
| 0.5B RL-epoch1 | 0.045 | 0.066 | 0.079 | 0.103 | 0.045 | 0.062 | 0.070 |
| 0.5B RL-epoch2 | 0.047 | 0.070 | 0.083 | 0.109 | 0.047 | 0.066 | 0.074 |
| 官方 1.5B 官方权重 | 0.085 | 0.113 | 0.133 | 0.154 | 0.085 | 0.109 | 0.116 |
官方 1.5B 权重评估结果,约束解码 (beam=10) 下 HR@10=15.4%, NDCG@10=11.6%。GRPO 强化学习对 0.5B 模型提升显著 (SFT→RL HR@10 +17%, NDCG@10 +23%)。
| 项目 | 要求 |
|---|---|
| GPU | RTX 3090 24GB |
| Python | 3.10+ |
| CUDA | 11.8+ |
git clone https://github.com/TangPeng7477/MiniOneRec_oneGPU_preject.git
cd MiniOneRec_oneGPU_preject
# 云服务器(已有 CUDA/Python)
pip install -r requirements.txt
pip install trl flash-attn --no-build-isolation
# 或使用 conda
conda create -n minionerec python=3.11 -y
conda activate minionerec
pip install -r requirements.txtbash scripts/download_models.sh # 全部下载
bash scripts/download_models.sh --base-only # 仅 0.5B 基础模型
bash scripts/download_models.sh --mirror # 国内镜像加速# 1. SFT (~1-2h)
bash sft_3090.sh
# 2. SFT 评估
MODEL_PATH=./outputs/sft_Industrial_and_Scientific_3090/final_checkpoint bash evaluate_3090.sh
# 3. RL (~3-5h)
MODEL_PATH=./outputs/sft_Industrial_and_Scientific_3090/final_checkpoint bash rl_3090.sh
# 4. RL 评估
MODEL_PATH=./outputs/rl_Industrial_and_Scientific_3090/final_checkpoint bash evaluate_3090.sh
# 5. 断点续训(如需)
RESUME=./outputs/rl_Industrial_and_Scientific_3090/checkpoint-5280 bash rl_3090.sh#!/bin/bash
set -euo pipefail
bash scripts/download_models.sh
bash sft_3090.sh
MODEL_PATH=./outputs/sft_Industrial_and_Scientific_3090/final_checkpoint bash evaluate_3090.sh
MODEL_PATH=./outputs/sft_Industrial_and_Scientific_3090/final_checkpoint bash rl_3090.sh
MODEL_PATH=./outputs/rl_Industrial_and_Scientific_3090/final_checkpoint bash evaluate_3090.sh├── sft_3090.sh # SFT 训练
├── rl_3090.sh # RL 训练 (支持断点续训)
├── evaluate_3090.sh # 评估 (日志含 checkpoint 名)
├── scripts/download_models.sh # 模型下载
├── sft.py / sft_gpr.py # SFT 核心代码
├── rl.py / rl_gpr.py # RL 核心代码
├── evaluate.py / calc.py # 评估 & 指标计算
├── minionerec_trainer.py # GRPO 训练器
├── data.py # 数据集
├── LogitProcessor.py # 约束解码器
└── rq/ # RQ-VAE 模块
# SFT
BASE_MODEL # 模型路径 (默认: Qwen/Qwen2.5-0.5B-Instruct)
BATCH_SIZE # 全局 batch (默认: 64)
NUM_EPOCHS # 训练轮数 (默认: 3)
LEARNING_RATE # 学习率 (默认: 5e-4)
# RL
MODEL_PATH # 模型路径
TRAIN_BATCH_SIZE # 训练 batch (默认: 4)
NUM_GENERATIONS # GRPO 生成数 (默认: 4)
BETA # KL 惩罚系数 (默认: 1e-3)
# Evaluate
MODEL_PATH # 模型路径
NUM_BEAMS # beam search 宽度 (默认: 10)# OOM → 减小 batch
MICRO_BATCH_SIZE=2 BATCH_SIZE=32 bash sft_3090.sh
TRAIN_BATCH_SIZE=2 NUM_GENERATIONS=2 bash rl_3090.sh
# 下载失败 → 使用镜像
export HF_ENDPOINT=https://hf-mirror.com
bash scripts/download_models.sh@misc{MiniOneRec,
title={MiniOneRec: An Open-Source Framework for Scaling Generative Recommendation},
author={Xiaoyu Kong and Leheng Sheng and Junfei Tan and Yuxin Chen and Jiancan Wu and An Zhang and Xiang Wang and Xiangnan He},
year={2025},
eprint={2510.24431},
archivePrefix={arXiv},
primaryClass={cs.IR},
}