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
-
No other GPU compute processes were running before the benchmark.
-
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
-
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.
-
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.
-
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
-
Could you provide the complete benchmark command, commit, and container version used for the documented 27.17 ms 2-view baseline?
-
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?
-
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?
-
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?
-
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?
-
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!
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:
The results measured in my current environment are:
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_liberocheckpoint and originallibero_obs_2v_n8.npzfixture used for the documented baseline are not available on this system.For this preliminary performance test, I used the existing
pi05baseweights, 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
nvcr.io/nvidia/pytorch:26.05-py32.12.0a0+5aff3928d8.nv26.057fd75d20c0528f4c3ba70e23b9fbf579dbc68211flash_rt.load_model()FA4 runtime environment:
nvidia-cutlass-dsl==4.4.2quack-kernels==0.4.1CUTE_DSL_ARCH=sm_110aFLASH_ATTENTION_ARCH=sm_100aLatest Results
FP8 and FP4 were each warmed up for 20 iterations, followed by 100 timed full
pipe.infer()calls.Comparison with the main README result:
Comparison with the documented public API confirmation run:
Relative FP4 improvement over FP8 in the current run:
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=truefp4_fa4_p50_beats_published_by_2ms=truefp4_fa4_2v_p95_at_most_40_ms=trueHowever, the numerical-fidelity gates did not pass:
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_liberocheckpoint.Investigation
No other GPU compute processes were running before the benchmark.
nvpmodelwas set to MAXN, andjetson_clocks --showreported: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.
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.
The benchmark script currently uses an older published latency target:
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
Could you provide the complete benchmark command, commit, and container version used for the documented 27.17 ms 2-view baseline?
Could you provide, or explain how to obtain, the exact
pi05_liberosafetensors checkpoint, normalization statistics, andlibero_obs_2v_n8.npzfixture used for the baseline?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?Can the documented
flash_rt_fp4andflash_rt_kernelsbinaries be reproduced directly from a specific commit? Are there specific CUTLASS DSL, CUDA, PyTorch, or container versions that must also be fixed?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 sysfsmin_freq,max_freq, andcur_freqvalues, are there additional EMC, power, or thermal settings that should be fixed?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!