Skip to content

docs(minionerec): 迁入 MiniOneRec 单卡 Quick Start 与看护 - #271

Open
yzeyu71 wants to merge 1 commit into
Ascend:mainfrom
yzeyu71:feat/minionerec-quick-start
Open

yzeyu71 wants to merge 1 commit into
Ascend:mainfrom
yzeyu71:feat/minionerec-quick-start

Conversation

@yzeyu71

@yzeyu71 yzeyu71 commented Nov 6, 2026 •

Copy link
Copy Markdown
Contributor

从 cosdt-ci-test/workflows 的 minionerec 看护迁入本站:单卡 910B 上跑 SFT、约束解码评估与推荐导向 RL 三个阶段,含文档、守卫测试、薄触发器与站点登记。

文档

新增 sources/minionerec/quick_start.md,## 1–## 10 按操作顺序编号,前置条件按「硬件 / 软件 / 本文验证环境」三张表,结尾 ## 相关链接。

## 3 克隆 AkaliKong/MiniOneRec 的 main。## 4 用与 CANN 9.1.0 配套的 torch 栈(torch 2.9.0 + torch_npu 2.9.0.post2)单独安装依赖:上游 requirements.txt 面向 CUDA(torchrec、fbgemm_gpu 是 +cu118 安装包,另带整套 nvidia-*-cu12 运行库),NPU 上不适用。## 7 的基座模型与预处理数据都从 HuggingFace 拉取(Qwen/Qwen2.5-0.5B、kkknight/MiniOneRec),没有 ModelScope 与 hf-mirror 依赖。

两个入口的设备差异

sft.py 与 evaluate.py 对 torch.cuda 的依赖不同。前者把设备选择交给 TrainingArguments,transformers 的设备链里 NPU 分支排在 CUDA 之前,不做任何注入也能拿到 npu:0;后者在模块级就写成 device = "cuda" if torch.cuda.is_available() else "cpu",不注入必然落到 CPU。

## 5 用一段命令同时打印这两个结果,## 6 把 sitecustomize.py 放进 /tmp,只通过 PYTHONPATH 挂到评估与 RL 两条命令上——不写 site-packages,仓库源码保持字节级不变,由 ## 6 的 git status --porcelain 断言。

RL 的三处改动

rl.py 有三个写死值与单卡运行冲突,用一条 sed 就地替换:optim="paged_adamw_32bit" 走 bitsandbytes,而 bitsandbytes 只提供 CPU、CUDA 等后端,没有 NPU 实现;sample = -1 会把整个商品目录展开,训练拉长到上万步;RLSeqTitle2SidDataset(..., sample=10000) 的采样上限写在调用处,训练集切到 40 行后 DataFrame.sample 会抛 Cannot take a larger sample than population。

已知限制:这个规模下日志里的 reward、loss、grad_norm 会一直是 0。rule_reward 是精确匹配,1 epoch 的 SFT 命中率接近 0,ndcg_rule_reward 在整组无命中时补 0,GRPO 的组内优势因此无从计算。所以 RL 段只断言流程贯通(退出码为 0,且 rl_out/final_checkpoint 下有权重、config、tokenizer),不比对指标。另外 save_steps=0.1 在按步触发下永不满足,训练过程不写 checkpoint,断言也据此避开 trainer_state.json。

守卫

tests/minionerec/test_quick_start_ascend.py 继承 doc_test.base.MarkdownDocTestBase,prepare_environment 只做 CANN 环境、git 与工作目录(/root/minionerec-test),其余步骤全部由文档执行。

.github/workflows/minionerec-quick-start.yml 只声明项目变量:fixed_ref: main(上游没有 release tag)、linux-aarch64-a2-1、cann:9.1.0-910b-ubuntu22.04-py3.12、timeout_minutes: 120,cron 取 50 11,23 * * *,与现有槽位错开。

克隆不做重试循环,只保留 --depth 1。该仓库单快照约 96 MiB 且集中在 4 个 17–20 MiB 的 CSV/npy,跨境链路上偶发 early EOF;若后续频繁翻红再单独调整 clone 写法。

站点

index.rst 在「训练与微调」分组增加卡片(图标 _static/images/minionerec.svg),toctree 增加 sources/minionerec/index.rst。conf.py 的 exclude_patterns 补上 sources/minionerec/quick_start.md,由 index.rst include,不单独成页。

验证

PR 上的守卫已经把整份文档在 NPU 上真跑了一遍(run 42148748699,19 个步骤全部通过):克隆 9.9 s 一次成功(无重试)、依赖安装 147.6 s、HuggingFace 拉取 Qwen2.5-0.5B 与预处理数据正常、SFT 约 11 分钟、约束解码评估 CC=0、RL 13.7 分钟并落盘 rl_out/final_checkpoint。站点构建(Github Pages build)也通过。doc_url 在 PR 运行取 PR head SHA,GitHub 的 raw 服务可以在主仓命名空间下取到 PR head 提交,所以 fork 分支也能取到文档。

从 cosdt-ci-test/workflows 迁入 MiniOneRec 的单卡 quick start:文档、
守卫测试、薄触发器与站点登记。

- sources/minionerec/quick_start.md:单卡 910B 上跑 SFT、约束解码评估与
  推荐导向 RL 三个阶段。sft.py / evaluate.py 不改源码,评估与 RL 用
  PYTHONPATH 挂一个 /tmp 下的 sitecustomize.py 注入 transfer_to_npu;
  RL 用一条 sed 改 rl.py 三处写死值(optim 无 NPU 后端、sample=-1 与
  sample=10000 会展开整个商品目录)。模型与预处理数据统一从 HuggingFace
  拉取,原先的 ModelScope 与 hf-mirror 依赖去掉;克隆不再做重试循环。
- tests/minionerec/:继承 doc_test.base.MarkdownDocTestBase,
  prepare_environment 只做 CANN 环境、git 与工作目录,其余步骤全部由文档
  执行;RL 段只断言流程贯通与落盘产物(此规模下 reward 恒为 0)。
- .github/workflows/minionerec-quick-start.yml:只声明项目变量,回路复用
  quick-start-template.yml;fixed_ref=main(上游无 release tag),cron 槽位
  取 11:50/23:50 UTC,与现有守卫错开。
- index.rst 增加「训练与微调」卡片与 toctree 条目,conf.py 的
  exclude_patterns 补上 quick_start.md(由 index.rst include,不单独成页)。
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

📖 文档预览:https://ascend.github.io/docs/pr-preview/pr-271/sources/minionerec/

也可打开整站首页。

构建自 0cc57db043d5148de77a90142dbb9d219eb4b116。
每次推送后自动更新,PR 关闭时自动清理。

github-actions Bot pushed a commit that referenced this pull request Nov 6, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant