Skip to content

TangPeng7477/MiniOneRec_oneGPU_preject

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

生成式推荐系统 — 基于 MiniOneRec 的单卡实现

Python License

本项目基于 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 序列

实验结果 (Industrial_and_Scientific, beam=10)

配置 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.txt

下载模型

bash 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},
}

About

minionerec_onegpu

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 95.6%
  • Shell 4.4%