{"record":{"id":"b0ecf02685aaa2d7","repo":"huggingface/transformers","slug":"unsupported-backward-dtype-config-backward-dtype","errorCode":null,"errorMessage":"Unsupported backward dtype: {config.backward_dtype}","messagePattern":"Unsupported backward dtype: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/transformers/integrations/fp_quant.py","lineNumber":134,"sourceCode":"            }\n\n\ndef adapt_fp_quant_config(config: FPQuantConfig):\n    if config.forward_dtype == \"mxfp4\":\n        forward_dtype = FPQuantDtype.MXFP4\n    elif config.forward_dtype == \"nvfp4\":\n        forward_dtype = FPQuantDtype.NVFP4\n    else:\n        raise ValueError(f\"Unsupported forward dtype: {config.forward_dtype}\")\n\n    if config.backward_dtype == \"bf16\":\n        backward_dtype = FPQuantDtype.BF16\n    elif config.backward_dtype == \"mxfp8\":\n        backward_dtype = FPQuantDtype.MXFP8\n    elif config.backward_dtype == \"mxfp4\":\n        backward_dtype = FPQuantDtype.MXFP4\n    else:\n        raise ValueError(f\"Unsupported backward dtype: {config.backward_dtype}\")\n\n    return FPQuantLinearConfig(\n        forward_dtype=forward_dtype,\n        forward_method=config.forward_method,\n        backward_dtype=backward_dtype,\n        store_master_weights=config.store_master_weights,\n        hadamard_group_size=config.hadamard_group_size,\n        pseudoquantization=config.pseudoquantization,\n        transform_init=config.transform_init,\n        modules_to_not_convert=config.modules_to_not_convert,\n    )\n","sourceCodeStart":116,"sourceCodeEnd":146,"githubUrl":"https://github.com/huggingface/transformers/blob/a597f974857b3d92939971296bc0deb93d33d780/src/transformers/integrations/fp_quant.py#L116-L146","documentation":"Companion guard to the forward-dtype check in adapt_fp_quant_config: the backward (master-weight/gradient) dtype must be one of \"bf16\", \"mxfp8\", or \"mxfp4\" to map onto FPQuantDtype.BF16/MXFP8/MXFP4. Any other string (typos, unsupported formats like \"fp16\" or \"nvfp4\") raises ValueError with the offending value.","triggerScenarios":"Creating FPQuantConfig(backward_dtype=...) with an unmapped string, or loading a checkpoint whose quantization_config JSON stores a backward_dtype this transformers version does not recognize.","commonSituations":"Assuming fp16 is allowed for backward compute; copying a config between ecosystems; older checkpoints written before the supported set changed; case-sensitive typos (\"BF16\").","solutions":["Use one of \"bf16\", \"mxfp8\", or \"mxfp4\" (exact lowercase) for backward_dtype","Inspect and fix the quantization_config block in the checkpoint's config.json","Upgrade transformers if the checkpoint uses a newly added backward dtype"],"exampleFix":"# before\nquant = FPQuantConfig(forward_dtype=\"nvfp4\", backward_dtype=\"fp16\")\n\n# after\nquant = FPQuantConfig(forward_dtype=\"nvfp4\", backward_dtype=\"bf16\")","handlingStrategy":"validation","validationCode":"VALID_BACKWARD = {\"bf16\", \"mxfp8\", \"mxfp4\"}\nassert qc.backward_dtype in VALID_BACKWARD, f\"backward_dtype must be one of {VALID_BACKWARD}, got {qc.backward_dtype!r}\"","typeGuard":"def is_valid_backward_dtype(v: str) -> bool:\n    return isinstance(v, str) and v in {\"bf16\", \"mxfp8\", \"mxfp4\"}","tryCatchPattern":null,"preventionTips":["Remember fp16/fp32 are not valid FPQuant backward dtypes — only bf16, mxfp8, mxfp4","Centralize dtype literals in constants to avoid typos in config construction"],"tags":["fp-quant","quantization","config","dtype","validation"],"backgroundTag":null,"analyzedSha":"a597f974857b3d92939971296bc0deb93d33d780","analyzedAt":"2026-08-14T18:24:08.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}