跳转至

TeleFuser 与 AIPerf

TeleFuser 只暴露目标侧原始事实;AIPerf 负责 workload 执行、聚合、资源采集、产物、GreptimeDB 历史服务和 展示。仓库内集成覆盖 OpenAI 兼容 /v1/videos API 的 batch 视频生成,以及通过 LiveKit 执行的 LingBot streaming benchmark。

AIPerf stream runner 与结果 schema 不感知具体传输。LiveKit adapter 由 TeleFuser 维护,在进程启动时从源码 注册,并生成 AIPerf 标准 session result。Contract 将 WebRTC 记录为媒体 transport,将 LiveKit 记录为 provider;这既保留 SFU 拓扑信息,也无需在 AIPerf 中加入 LiveKit 代码。

安装方法、workload 配置、运行命令、历史服务和专项测试统一维护在 benchmarks/telefuser_aiperf/README.md。AIPerf 通过 pip 安装固定的 Git commit,不保留 AIPerf checkout 或 adapter pyproject.toml

快速开始

以下命令都在 TeleFuser 仓库根目录执行。先把支持 streaming 的 AIPerf Git commit 安装到独立环境:

bash scripts/setup_aiperf.sh

在终端 1 启动本地 LiveKit 开发服务器:

livekit-server --dev --bind 127.0.0.1

在终端 2 启动四卡 LingBot-World v2 target,并替换实际模型目录:

env -u http_proxy -u https_proxy -u HTTP_PROXY -u HTTPS_PROXY -u all_proxy -u ALL_PROXY \
  TF_MODEL_ZOO_PATH=/path/to/model_zoo \
  CUDA_VISIBLE_DEVICES=0,1,2,3 \
  telefuser stream-serve examples/lingbot/lingbot_world_v2_image_to_video_h100.py \
    --livekit-url ws://127.0.0.1:7880 \
    --livekit-api-key devkey \
    --livekit-api-secret secret \
    --num-workers 1 \
    --worker-gpu-map 0,1,2,3 \
    --port 8088 \
    --skip-validation

模型加载和 pipeline warmup 可能需要几分钟。等待健康接口同时出现 "ready":true"workers_idle":1"workers_failed":0

curl --noproxy '*' --fail --silent --show-error \
  http://127.0.0.1:8088/v1/service/health

空闲时 "livekit_connected":false 是正常状态。在终端 3 启动测试:

bash benchmarks/telefuser_aiperf/scripts/run_stream_bench.sh

请求媒体时长为 59.75 秒,但 AIPerf active window 配置为 240 秒,因此命令通常约 4 分钟完成,不要在模型 停止生成后提前中断。成功输出为 Stream profile sessions: 1/1 succeeded,报告写入 artifacts/telefuser_aiperf/stream_lingbot_v2_1min/。模型文件布局、手动选择 Python 环境、历史服务和故障 排查见上面的 canonical README。

职责与指标语义

组件 归属 职责
TeleFuser runtime TeleFuser 输出同步的 phase、chunk、runtime、cache 和环境原始事实
Batch target adapter AIPerf /v1/videos HTTP 事件转为标准 request 时间线
LiveKit 源码 adapter TeleFuser 将 room、track、status、metrics 和 control 事件转为 session result
聚合与历史 AIPerf 负责 warmup、percentile、throughput、artifact、GreptimeDB 和展示
Contract 与 workload TeleFuser 固定 target 能力、输入、设置和可复现启动命令

Target 原始事实遵守以下规则:

  • Duration 使用单调时钟;跨进程样本同时保留源端 UTC 时间戳。
  • CUDA phase 在开始和结束边界同步目标设备。
  • 数值必须有限且非负;不可用值省略或使用 null,不能伪造为零。
  • Memory 在原始协议中使用 bytes,只在展示层转换单位。
  • Target 不排除 warmup、不计算 percentile,也不生成跨 run 结论。
Scope 示例 聚合规则
Event frame 或 response arrival 保留事件时间线
Request/session first output、session latency 对每个 request 或 session 独立计算
Run success rate、throughput、percentile AIPerf 排除 warmup 后聚合

客户端交付、target pipeline residence、target phase time 和资源利用率保持为不同维度。无法等价的字段保留为 private 或 unavailable,不强行映射为同一指标。

LingBot-World v2 一分钟回放实测

2026-07-28 使用 4 张 H100 80 GB 验证了 stream_lingbot_world_v2_1min.json:DiT 为 BF16,VAE 为 FP32, 启用 SageAttention SM90 和 torch.compile,禁用 FSDP,chunk_size=4,输出 16 FPS。60 秒请求按完整 latent chunk 截断为 60 个 chunk、957 帧,对应 59.75 秒媒体时长。LingBot-World v2 使用固定 local_attn_size=18sink_size=6 窗口,因此 240 latent frame 的请求仍只分配 27,144 token KV 容量, 不会改为时长规模的全局 KV cache。

指标 结果
成功 session 1 / 1
Target chunk / 生成帧 60 / 957
客户端收到帧数 947
Target 稳态 chunk / 帧 59 / 944
配置的 session runtime 242.255 s
首帧延迟 6,252.773 ms
客户端交付速率(stream_fps 9.397 FPS
稳态 chunk 加权计算速率 4.708 FPS
Chunk pipeline residence mean / p99 3.399 / 3.901 s

Target 实际生成了全部 957 帧,LiveKit 客户端收到 947 帧。AIPerf 在 target 稳态计算聚合中排除了首个 chunk,剩余 59 个 chunk 共生成 944 帧。242 秒 session runtime 是 240 秒 active window 上限加连接开销, 不是 59.75 秒媒体内容的模型生成耗时。

Chunk pipeline residence 从 actor 准入计到输出,包含相互重叠的 encode、DiT、decode 工作,所以可以大于相邻 交付间隔;报告中的 4.708 稳态 chunk 加权计算 FPS 不能当作客户端推流吞吐。本次 Git 安装的 AIPerf 运行退出码为 0。回放报告位于 artifacts/telefuser_aiperf/stream_lingbot_v2_1min/20260728_083948_fc4344ba/stream_report.html

复现要求

每个结果都应保留 TeleFuser commit、AIPerf 包版本、模型 revision、加速器型号/数量、driver、CUDA、 PyTorch、dtype、完整 workload、warmup 规则、成功/失败数量,以及 offload/cache/attention 设置。上面的日期化 实测只代表单次验证,不是通用性能保证;持续对比结果应保存在 GreptimeDB 和可重放产物中。 OOM 是被测配置的结果,不能用 mock 或改变 offload 策略后的结果替代。