Skip to content

[release/2.10] Add torch.backends.cuda.math_sdp.fp32_precision#2941

Open
anatoliylitv wants to merge 1 commit intorelease/2.10from
anatoliylitv/math_sdp_ieee_upstream_manual_merge_2.10
Open

[release/2.10] Add torch.backends.cuda.math_sdp.fp32_precision#2941
anatoliylitv wants to merge 1 commit intorelease/2.10from
anatoliylitv/math_sdp_ieee_upstream_manual_merge_2.10

Conversation

@anatoliylitv
Copy link
Copy Markdown

Overview
This PR adds a new float32 precision API
torch.backends.cuda.math_sdp.fp32_precision to configure fp32 precision
behavior of SDPBackend.MATH

Rationale
The test/test_transformers.py testing suite calculates the numerical
tolerance by comparing output tensors from the same precision ("reference")
and higher precision ("golden"), both calculated by SDPBackend.MATH.
However, the golden output is calculated with TF32 rather than FP32, which in
fact is less accurate than the FA/ME backend if they used IEEE rather than
TF32 for their accumulation.

The loss of precison causes false negatives in SDPA tests like
TestSDPACudaOnlyCUDA.test_flash_attention_vs_math_ref_grads_batch_size_8_seq_len_q_143_seq_len_k_4_head_dim_203_is_causal_False_dropout_p_0_22_float16_scale_l1_enable_gqa_True_n_heads1_cuda_float16
, at least on ROCM platform. The false negative disappears after forcing
higher_precision_dtype = torch.float64

Major Changes
To restore the precision of golden output, a new API
torch.backends.cuda.math_sdp.fp32_precision is introduced, which allows
configuration of "matmul" precision during SDPBackend.MATH, and a new
decorator @math_sdp_precision("ieee") is added to all tests that use
check_out_and_grad. At last, an assert is added to the inner most function
_check_equal as a sanity check to ensure math_sdp has the right precison
configured for torch.float32 golden tensors.

Known Issues
The backward phase honors the configuration when calling backward(), regardless
the configuration when creating the graph.

This is copy of PR pytorch#167157 which owner on vacation.

torch.backends.cuda.math_sdp.fp32_precision to configure fp32 precision
behavior of SDPBackend.MATH
@rocm-repo-management-api
Copy link
Copy Markdown

rocm-repo-management-api Bot commented Jan 26, 2026

Jenkins build for 9cc2bd01cb88d4c927b4aeaafceb3412cdd5dcd5 commit finished as FAILURE
Links: Pipeline Overview / Build artifacts / Test Results

@anatoliylitv anatoliylitv changed the title Add torch.backends.cuda.math_sdp.fp32_precision [release/2.10] Add torch.backends.cuda.math_sdp.fp32_precision Jan 26, 2026
@pruthvistony
Copy link
Copy Markdown
Collaborator

The PR - pytorch#169694 is still open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants