{"record":{"id":"0f81bc810ab534c7","repo":"Lightning-AI/pytorch-lightning","slug":"you-have-set-trainer-gradient-clip-algorithm-sel","errorCode":null,"errorMessage":"You have set `Trainer(gradient_clip_algorithm={self.trainer.gradient_clip_algorithm.value!r})` and have passed `clip_gradients(gradient_clip_algorithm={gradient_clip_algorithm!r}) Please use only one of them.","messagePattern":"You have set `Trainer\\(gradient_clip_algorithm=(.+?)\\)` and have passed `clip_gradients\\(gradient_clip_algorithm=(.+?)\\) Please use only one of them\\.","errorType":"exception","errorClass":"MisconfigurationException","httpStatus":null,"severity":"error","filePath":"src/lightning/pytorch/core/module.py","lineNumber":1277,"sourceCode":"\n        if gradient_clip_val is None:\n            gradient_clip_val = self.trainer.gradient_clip_val or 0.0\n        elif self.trainer.gradient_clip_val is not None and self.trainer.gradient_clip_val != gradient_clip_val:\n            raise MisconfigurationException(\n                f\"You have set `Trainer(gradient_clip_val={self.trainer.gradient_clip_val!r})`\"\n                f\" and have passed `clip_gradients(gradient_clip_val={gradient_clip_val!r})`.\"\n                \" Please use only one of them.\"\n            )\n\n        if gradient_clip_algorithm is None:\n            gradient_clip_algorithm = self.trainer.gradient_clip_algorithm or \"norm\"\n        else:\n            gradient_clip_algorithm = gradient_clip_algorithm.lower()\n            if (\n                self.trainer.gradient_clip_algorithm is not None\n                and self.trainer.gradient_clip_algorithm != gradient_clip_algorithm\n            ):\n                raise MisconfigurationException(\n                    f\"You have set `Trainer(gradient_clip_algorithm={self.trainer.gradient_clip_algorithm.value!r})`\"\n                    f\" and have passed `clip_gradients(gradient_clip_algorithm={gradient_clip_algorithm!r})\"\n                    \" Please use only one of them.\"\n                )\n\n        if not isinstance(gradient_clip_val, (int, float)):\n            raise TypeError(f\"`gradient_clip_val` should be an int or a float. Got {gradient_clip_val}.\")\n\n        if not GradClipAlgorithmType.supported_type(gradient_clip_algorithm.lower()):\n            raise MisconfigurationException(\n                f\"`gradient_clip_algorithm` {gradient_clip_algorithm} is invalid.\"\n                f\" Allowed algorithms: {GradClipAlgorithmType.supported_types()}.\"\n            )\n\n        gradient_clip_algorithm = GradClipAlgorithmType(gradient_clip_algorithm)\n        self.trainer.precision_plugin.clip_gradients(optimizer, gradient_clip_val, gradient_clip_algorithm)\n\n    def configure_gradient_clipping(","sourceCodeStart":1259,"sourceCodeEnd":1295,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/core/module.py#L1259-L1295","documentation":"clip_gradients raises when both Trainer(gradient_clip_algorithm=...) and a different gradient_clip_algorithm argument to self.clip_gradients are supplied. Lightning forbids two conflicting algorithm selections (e.g. 'norm' in Trainer vs 'value' in the call).","triggerScenarios":"Trainer(gradient_clip_algorithm='norm') plus self.clip_gradients(optimizer, gradient_clip_algorithm='value') inside configure_gradient_clipping.","commonSituations":"Template code passes the algorithm explicitly while the Trainer already configures it; migration from scripts that set clipping only in the module.","solutions":["Set the algorithm in one place only — preferably Trainer(gradient_clip_algorithm=...)","Call self.clip_gradients(optimizer) without algorithm args so the Trainer's setting applies","Align both values if you keep them in both places"],"exampleFix":"# before\ntrainer = L.Trainer(gradient_clip_algorithm='norm')\nself.clip_gradients(optimizer, gradient_clip_algorithm='value')\n\n# after\ntrainer = L.Trainer(gradient_clip_algorithm='norm')\nself.clip_gradients(optimizer, gradient_clip_val=1.0)  # algorithm inherited","handlingStrategy":"validation","validationCode":"if trainer.gradient_clip_algorithm is not None:\n    self.clip_gradients(optimizer, gradient_clip_val=v)  # algorithm from Trainer\nelse:\n    self.clip_gradients(optimizer, gradient_clip_val=v, gradient_clip_algorithm='norm')","typeGuard":"def algorithm_conflict(trainer, algo) -> bool:\n    return trainer.gradient_clip_algorithm is not None and algo is not None and trainer.gradient_clip_algorithm != algo","tryCatchPattern":null,"preventionTips":["Set gradient_clip_algorithm only on the Trainer","Document in team conventions that module-level clipping code must not re-specify Trainer-managed settings"],"tags":["pytorch-lightning","gradient-clipping","trainer-config","conflict"],"backgroundTag":"gradient-clipping-misconfigured","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}