Skip to content

端到端推理与训练入口(原 run_pipeline.py)

run_pipeline.py 已删除;现在的端到端入口是:train_synth.py 训练,launch_inference.py 启动服务,retrieve_then_rank.py 发送“召回再排序”请求

Updated

旧入口的去向

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)按以下步骤执行:

  1. 连接两个 gRPC 服务:RecsysRetrievalPredictorStub(默认端口 9990)和 RecsysPredictorStub(默认端口 9988)(:114-119,参数默认值在 :16-24)。
  2. 从训练数据中取 --sessions 个用户会话(默认 3 个),把历史转换成 UserActionSequence(:37-101)。
  3. 发送 RetrieveTopKCandidates,取 --topk 条结果(默认 16 条)(:126-135)。
  4. 把召回结果原样组成 CandidateSet,用同一个用户序列发送 PredictNextActions(:141-151)。
  5. 从返回的 logits 中取 ActionName.SERVER_TWEET_FAV 对应的槽位,经 sigmoid 得到点赞概率,按点赞概率降序打印,同时打印召回分(:152-170)。
  6. 只要至少一个会话走完全程,脚本就打印 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)按以下步骤执行:

  1. 指定 --allow_random_init 时,设置 DEBUG_ALLOW_RANDOM_INIT=1,允许在没有 checkpoint 的情况下启动(:278-279)。
  2. 按 --config_name 在排序与召回配置表中查找模型配置(:283-290)。
  3. 按 --service_type 选择 RankingModelRunner 或 RetrievalModelRunner(:333-340)。召回服务要求指定语料类型(:345-347)。
  4. 解析并加载 --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 —— 上游验证过的完整命令

相关页面

Type to search…

↑↓ navigate↵ selectEsc close