Skip to content

[Pi0.5][Jetson Thor] Unable to Reproduce the Documented 27.17 ms 2-View NVFP4 + FA4 Baseline #170

Description

@JuShuai-gif

Issue

I ran the Pi0.5 2-view NVFP4 + FA4 end-to-end benchmark on an NVIDIA Jetson AGX Thor.

The README reports the following 2-view performance:

  • FP8 P50: 38.70 ms
  • NVFP4 + FA4 P50: 27.17 ms
  • Throughput: 37 Hz
  • Speedup: 1.424×

The results measured in my current environment are:

  • FP8 P50: 41.603 ms
  • NVFP4 + FA4 P50: 29.135 ms
  • NVFP4 + FA4 P95: 29.252 ms
  • Throughput: approximately 34.3 Hz
  • Speedup: 1.428×

The absolute FP4 latency is approximately 1.97 ms, or 7.2%, slower than the README result. The FP8 baseline is also approximately 2.90 ms, or 7.5%, slower. However, the relative FP4-over-FP8 speedup is nearly identical to the documented result.

One important limitation is that the official pi05_libero checkpoint and original libero_obs_2v_n8.npz fixture used for the documented baseline are not available on this system.

For this preliminary performance test, I used the existing pi05base weights, LIBERO demo normalization statistics, and a temporary fixture constructed from the locally cached LIBERO dataset. Therefore, this is a preliminary performance reproduction rather than a formal numerical-fidelity reproduction.

Environment

  • Hardware: NVIDIA Jetson AGX Thor Developer Kit, SM110
  • Power mode: MAXN
  • CPU: 14 cores locked at 2601 MHz
  • GPU GPC: Min/Max/Current all at 1575 MHz
  • GPU NVD: Min/Max/Current all at 1692 MHz
  • EMC: Min/Max/Current all at 4266 MHz
  • Container: nvcr.io/nvidia/pytorch:26.05-py3
  • PyTorch: 2.12.0a0+5aff3928d8.nv26.05
  • Container CUDA: 13.2
  • Host driver: 580.00
  • FlashRT commit: 7fd75d20c0528f4c3ba70e23b9fbf579dbc68211
  • Worktree: dirty
  • Construction path: flash_rt.load_model()
  • Attention backend: FA4 active
  • Camera views: 2
  • Denoising steps: 10
  • Autotune level: 3
  • Warmup: 20 iterations per precision mode
  • Timed iterations: 100 per precision mode
  • FP8 and FP4 were executed in separate child processes

FA4 runtime environment:

  • nvidia-cutlass-dsl==4.4.2
  • quack-kernels==0.4.1
  • CUTE_DSL_ARCH=sm_110a
  • FLASH_ATTENTION_ARCH=sm_100a

Latest Results

FP8 and FP4 were each warmed up for 20 iterations, followed by 100 timed full pipe.infer() calls.

Mode Min P50 P95 Max
FP8 + FA4 41.387 ms 41.603 ms 41.723 ms 41.866 ms
NVFP4 + FA4 28.981 ms 29.135 ms 29.252 ms 29.304 ms

Comparison with the main README result:

Metric README Current result Difference
FP8 P50 38.70 ms 41.603 ms +2.903 ms
FP4 P50 27.17 ms 29.135 ms +1.965 ms
FP4 throughput 37 Hz 34.3 Hz -2.7 Hz
FP4 speedup 1.424× 1.428× Nearly identical

Comparison with the documented public API confirmation run:

Metric Public API confirmation Current result Difference
FP8 P50 38.62 ms 41.603 ms +2.983 ms
FP4 P50 27.29 ms 29.135 ms +1.845 ms
FP4 P95 27.34 ms 29.252 ms +1.912 ms

Relative FP4 improvement over FP8 in the current run:

  • P50 latency reduction: 12.468 ms
  • Speedup: 1.428×
  • Relative latency reduction: approximately 30.0%

The relative FP4 speedup is consistent with the README, but the absolute latency of both FP8 and FP4 is approximately 7% slower.

Numerical Fidelity

All performance gates passed:

  • fp4_p50_faster_than_fp8=true
  • fp4_fa4_p50_beats_published_by_2ms=true
  • fp4_fa4_2v_p95_at_most_40_ms=true

However, the numerical-fidelity gates did not pass:

Metric Current result Required gate
Raw cosine 0.992483 ≥ 0.995
Worst raw sample cosine 0.968467 ≥ 0.995
Final action cosine 0.997008 ≥ 0.999
Worst action sample cosine 0.979684 ≥ 0.995

These fidelity failures are likely related to the temporary checkpoint composition, normalization statistics, and constructed fixture. They should not be interpreted as a fidelity failure of the official pi05_libero checkpoint.

Investigation

  1. No other GPU compute processes were running before the benchmark.

  2. nvpmodel was set to MAXN, and jetson_clocks --show reported:

    gpu-gpc-0 MinFreq=1575000000 MaxFreq=1575000000 CurrentFreq=1575000000
    gpu-nvd-0 MinFreq=1692000000 MaxFreq=1692000000 CurrentFreq=1692000000
    EMC MinFreq=4266000000 MaxFreq=4266000000 CurrentFreq=4266000000
    NV Power Mode: MAXN
    
  3. Both FP8 and FP4 are approximately 7% slower than the README results, while the relative speedup is 1.428× compared with the documented 1.424×.

    This does not appear to be a regression isolated to the FP4 path. It looks more like the entire run is operating in a slower system-performance regime.

  4. The documentation mentions that Thor may drift between fast and slow sustained-load regimes, differing by approximately 3 ms even when the GPC and NVD clocks are locked. It also notes that the EMC cap acts as a ceiling rather than a guaranteed lock of the internal memory-performance state.

    The current FP8 result is approximately 3 ms slower than the documented FP8 baseline, which appears consistent with this behavior.

  5. The benchmark script currently uses an older published latency target:

    published_sota_p50_ms = 36.3 ms
    required_margin_ms = 2.0 ms
    target_p50_ms = 34.3 ms
    

    Therefore, the measured 29.135 ms result passes the existing performance gate, but it does not reach the latest 27.17 ms result reported in the README.

Questions

  1. Could you provide the complete benchmark command, commit, and container version used for the documented 27.17 ms 2-view baseline?

  2. Could you provide, or explain how to obtain, the exact pi05_libero safetensors checkpoint, normalization statistics, and libero_obs_2v_n8.npz fixture used for the baseline?

  3. The main README reports 27.17 ms using direct frontend construction, while the public API confirmation run reports 27.29 ms. Should 27.29 ms be considered the expected target for the load_model() path?

  4. Can the documented flash_rt_fp4 and flash_rt_kernels binaries be reproduced directly from a specific commit? Are there specific CUTLASS DSL, CUDA, PyTorch, or container versions that must also be fixed?

  5. Is there a recommended way to determine whether Thor is operating in the documented fast or slow sustained-load regime? In addition to MAXN, jetson_clocks, and checking the sysfs min_freq, max_freq, and cur_freq values, are there additional EMC, power, or thermal settings that should be fixed?

  6. Since both FP8 and FP4 are approximately 7% slower while the relative speedup remains consistent, which stages or kernels would you recommend profiling first?

Thank you very much for your help!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions