旧入口的去向
phoenix/run_pipeline.py 已不存在。2026-08-13 的上游发布用生产代码整体替换了演示模型,同时删除了 run_pipeline.py、run_ranker.py、run_retrieval.py、runners.py、两份测试文件,以及通过 Git LFS 分发的 artifacts/oss-phoenix-artifacts.zip(见 git diff --name-status 0bfc279 HEAD -- phoenix 中的 D 项)。
因此,旧页面描述的内容全部失效:
| 旧内容 | 现状 |
|---|---|
预训练的 mini checkpoint 与 sports_corpus.npz 语料 |
上游不再发布任何 checkpoint;用户用合成数据自行训练(phoenix/README.md:61-69、phoenix/TRAINING.md:99-100) |
--artifacts_dir 等命令行参数 |
已移除 |
| 脚本内的演示权重 fav·1.0 + reply·0.5 + rt·0.3 + dwell·0.2 | 已移除;新的客户端只按点赞概率排序(见下文) |
build_hash_functions / build_unified_emb_table |
Rust 引擎负责哈希,见 哈希嵌入 |
本页保留原路径,内容改为介绍现在的端到端入口。
现在的入口
| 用途 | 入口 | 说明 |
|---|---|---|
| 安装自检 | xrex/inference/oss_bench/bench.py --smoke |
用随机权重启动真实的服务栈,并发送一个合成请求(phoenix/README.md:431-441) |
| 生成数据 | reference/world_snapshots.py、reference/dump_gen.py |
生成合成世界快照与训练数据 |
| 训练 | reference/train_synth.py |
在单卡上训练 nano 排序或召回模型,并写入 checkpoint(phoenix/reference/train_synth.py:94-160) |
| 启动服务 | xrex/inference/launch_inference.py |
用 --service_type ranking 或 retrieval 指定类型,加载 checkpoint,打开 gRPC 端口(phoenix/xrex/inference/launch_inference.py:273-430) |
| SID 服务 | reference/sid_index_server.py |
从快照 parquet 提供 SidLookupService |
| 端到端客户端 | reference/retrieve_then_rank.py |
先召回,再对召回结果排序(phoenix/reference/retrieve_then_rank.py:104-176) |
完整命令与硬件前提见 Phoenix 训练 的“本地概念验证训练”一节。
执行流程
flowchart TB
A["train_synth.py<br/>训练 nano 排序与召回"] --> B["checkpoint 目录"]
B --> C["launch_inference.py 召回服务<br/>端口 9990"]
B --> D["launch_inference.py 排序服务<br/>端口 9988"]
S["sid_index_server.py<br/>端口 50061"] --> C
E["retrieve_then_rank.py"] -- "RetrieveTopKCandidates" --> C
C -- "top-K 帖子与召回分" --> E
E -- "PredictNextActions" --> D
D -- "每条候选 64 个 logit" --> E
E --> F["按 P(点赞) 排序并打印"]
retrieve_then_rank.py 的步骤
main(phoenix/reference/retrieve_then_rank.py:104-176)按以下步骤执行:
- 连接两个 gRPC 服务:
RecsysRetrievalPredictorStub(默认端口 9990)和RecsysPredictorStub(默认端口 9988)(:114-119,参数默认值在:16-24)。 - 从训练数据中取
--sessions个用户会话(默认 3 个),把历史转换成UserActionSequence(:37-101)。 - 发送
RetrieveTopKCandidates,取--topk条结果(默认 16 条)(:126-135)。 - 把召回结果原样组成
CandidateSet,用同一个用户序列发送PredictNextActions(:141-151)。 - 从返回的
logits中取ActionName.SERVER_TWEET_FAV对应的槽位,经 sigmoid 得到点赞概率,按点赞概率降序打印,同时打印召回分(:152-170)。 - 只要至少一个会话走完全程,脚本就打印
retrieve_then_rank: N session(s) completed the full loop.(:173-175)。
这一步说明两点。第一,排序服务返回的离散 logit 直接按 ActionName 枚举号索引。第二,脚本只按点赞概率排序;真实的多行为加权在 home-mixer 中完成,见 打分与排序。
launch_inference.py 的步骤
run(phoenix/xrex/inference/launch_inference.py:273-430)按以下步骤执行:
- 指定
--allow_random_init时,设置DEBUG_ALLOW_RANDOM_INIT=1,允许在没有 checkpoint 的情况下启动(:278-279)。 - 按
--config_name在排序与召回配置表中查找模型配置(:283-290)。 - 按
--service_type选择RankingModelRunner或RetrievalModelRunner(:333-340)。召回服务要求指定语料类型(:345-347)。 - 解析并加载
--checkpoint_path,构造 Rust gRPC 服务,然后开始服务(:374-430)。
在 QUICKSTART 中,两个服务都用 --fake_mm_embeddings true 跳过真实的多模态嵌入服务,并把历史长度缩短到 128、候选数缩短到 8 或 16(phoenix/QUICKSTART.md:128-150)。
设计决策
| 决策 | 理由 |
|---|---|
| 不再发布 checkpoint,改为发布合成数据生成器 | 上游的说法是“合成世界取代下载产物”;全流程不依赖外部数据(phoenix/README.md:61-69) |
| 端到端流程使用真实 gRPC | 客户端与 home-mixer 使用同一组服务契约,因此验证的是生产中的组合方式(phoenix/README.md:384-388) |
| 客户端只按点赞概率排序 | 脚本只验证流程;多行为加权属于 home-mixer |
源码锚点
phoenix/reference/retrieve_then_rank.py:104-176—— 端到端客户端phoenix/xrex/inference/launch_inference.py:273-430—— 服务启动phoenix/reference/train_synth.py:94-160—— 训练启动器phoenix/xrex/inference/oss_bench/bench.py—— 安装自检phoenix/QUICKSTART.md—— 上游验证过的完整命令
相关页面
- Phoenix 训练 —— 训练、服务加载与本地概念验证步骤
- Phoenix 召回:双塔检索架构 —— 召回服务背后的模型
- Phoenix 排序模型 —— 排序服务背后的模型
- RecsysAggregatedModel(排序模型) / RecsysTwoTowerModel(召回模型) —— 服务加载的两个模型构件
- 开源版 vs 线上真实算法:已知差异清单 —— 开源版与线上的差异
- 系统架构总览 —— 召回与排序在整体系统中的位置