{"record":{"id":"38f22e7e581fc5b2","repo":"Lightning-AI/pytorch-lightning","slug":"you-have-set-trainer-gradient-clip-val-self-trai","errorCode":null,"errorMessage":"You have set `Trainer(gradient_clip_val={self.trainer.gradient_clip_val!r})` and have passed `clip_gradients(gradient_clip_val={gradient_clip_val!r})`. Please use only one of them.","messagePattern":"You have set `Trainer\\(gradient_clip_val=(.+?)\\)` and have passed `clip_gradients\\(gradient_clip_val=(.+?)\\)`\\. Please use only one of them\\.","errorType":"exception","errorClass":"MisconfigurationException","httpStatus":null,"severity":"error","filePath":"src/lightning/pytorch/core/module.py","lineNumber":1263,"sourceCode":"            gradient_clip_val: The value at which to clip gradients.\n            gradient_clip_algorithm: The gradient clipping algorithm to use. Pass ``gradient_clip_algorithm=\"value\"``\n                to clip by value, and ``gradient_clip_algorithm=\"norm\"`` to clip by norm.\n\n        \"\"\"\n\n        if self.fabric is not None:\n            self.fabric.clip_gradients(\n                self,\n                optimizer,\n                clip_val=gradient_clip_val if gradient_clip_algorithm == GradClipAlgorithmType.VALUE else None,\n                max_norm=None if gradient_clip_algorithm == GradClipAlgorithmType.VALUE else gradient_clip_val,\n            )\n            return\n\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                )","sourceCodeStart":1245,"sourceCodeEnd":1281,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/core/module.py#L1245-L1281","documentation":"LightningModule.clip_gradients rejects specifying gradient clipping twice: once via Trainer(gradient_clip_val=...) and again via self.clip_gradients(gradient_clip_val=...) with a different value. Only one source of the clipping value is allowed.","triggerScenarios":"Trainer instantiated with gradient_clip_val=1.0 and later calling self.clip_gradients(optimizer, gradient_clip_val=0.5) inside training_step (typically when overriding configure_gradient_clipping).","commonSituations":"User copied manual clipping code into a Trainer that already sets gradient_clip_val; changed clipping schedule per step without removing the Trainer arg.","solutions":["Remove gradient_clip_val from the Trainer and control clipping solely via self.clip_gradients","Or keep the Trainer value and call self.clip_gradients(optimizer) without gradient_clip_val so the Trainer's value is used","Make the values identical if both paths must remain (then no error is raised)"],"exampleFix":"# before\ntrainer = L.Trainer(gradient_clip_val=1.0)\n# in module:\ndef configure_gradient_clipping(self, optimizer, gradient_clip_val=None):\n    self.clip_gradients(optimizer, gradient_clip_val=0.5)  # conflict\n\n# after\ntrainer = L.Trainer()  # no gradient_clip_val\ndef configure_gradient_clipping(self, optimizer, gradient_clip_val=None):\n    self.clip_gradients(optimizer, gradient_clip_val=0.5)","handlingStrategy":"validation","validationCode":"if trainer.gradient_clip_val is not None:\n    self.clip_gradients(optimizer)  # inherit Trainer's value\nelse:\n    self.clip_gradients(optimizer, gradient_clip_val=clip_val)","typeGuard":"def clip_val_conflict(trainer, clip_val) -> bool:\n    return trainer.gradient_clip_val is not None and clip_val is not None and trainer.gradient_clip_val != clip_val","tryCatchPattern":"from lightning.pytorch.utilities.exceptions import MisconfigurationException\ntry:\n    self.clip_gradients(optimizer, gradient_clip_val=v)\nexcept MisconfigurationException:\n    self.clip_gradients(optimizer)  # fall back to Trainer-configured value","preventionTips":["Configure clipping in exactly one place: Trainer args OR module code","Add a startup assert that Trainer clipping args and module clipping args don't both exist"],"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"}