---
title: "端到端推理与训练入口（原 run_pipeline.py）"
description: "run_pipeline.py 已删除；现在的端到端入口是：train_synth.py 训练，launch_inference.py 启动服务，retrieve_then_rank.py 发送“召回再排序”请求"
---

> Documentation Index
> Fetch the complete documentation index at: https://x-algorithm.vergego.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 端到端推理与训练入口（原 run_pipeline.py）

## 旧入口的去向

`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 引擎负责哈希，见 [哈希嵌入](https://x-algorithm.vergego.ai/concepts/hash-based-embeddings/) |

本页保留原路径，内容改为介绍现在的端到端入口。

## 现在的入口

| 用途 | 入口 | 说明 |
|------|------|------|
| 安装自检 | `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 训练](https://x-algorithm.vergego.ai/concepts/phoenix-training/) 的“本地概念验证训练”一节。

## 执行流程

```mermaid
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 中完成，见 [打分与排序](https://x-algorithm.vergego.ai/concepts/scoring-and-ranking/)。

### 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` —— 上游验证过的完整命令

## 相关页面

- [Phoenix 训练](https://x-algorithm.vergego.ai/concepts/phoenix-training/) —— 训练、服务加载与本地概念验证步骤
- [Phoenix 召回：双塔检索架构](https://x-algorithm.vergego.ai/concepts/phoenix-retrieval/) —— 召回服务背后的模型
- [Phoenix 排序模型](https://x-algorithm.vergego.ai/concepts/phoenix-ranking/) —— 排序服务背后的模型
- [RecsysAggregatedModel（排序模型）](https://x-algorithm.vergego.ai/entities/recsys-model/) / [RecsysTwoTowerModel（召回模型）](https://x-algorithm.vergego.ai/entities/recsys-retrieval-model/) —— 服务加载的两个模型构件
- [开源版 vs 线上真实算法：已知差异清单](https://x-algorithm.vergego.ai/guide/open-source-vs-production/) —— 开源版与线上的差异
- [系统架构总览](https://x-algorithm.vergego.ai/concepts/system-architecture/) —— 召回与排序在整体系统中的位置

Source: https://x-algorithm.vergego.ai/entities/run-pipeline/index.mdx
