{"record":{"id":"a76dcbff04f0086d","repo":"Lightning-AI/pytorch-lightning","slug":"the-type-self-name-does-not-support-setti","errorCode":null,"errorMessage":"The `{type(self).__name__}` does not support setting up the module and optimizer(s) independently. Please call `setup_module_and_optimizers(model, [optimizer, ...])` to jointly set them up.","messagePattern":"The `(.+?)` does not support setting up the module and optimizer\\(s\\) independently\\. Please call `setup_module_and_optimizers\\(model, \\[optimizer, \\.\\.\\.\\]\\)` to jointly set them up\\.","errorType":"validation","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"src/lightning/fabric/strategies/deepspeed.py","lineNumber":376,"sourceCode":"\n    @override\n    def setup_module(self, module: Module) -> \"DeepSpeedEngine\":\n        \"\"\"Set up a module for inference (no optimizers).\n\n        For training, see :meth:`setup_module_and_optimizers`.\n\n        \"\"\"\n        self._deepspeed_engine, _, _ = self._initialize_engine(module)\n        return self._deepspeed_engine\n\n    @override\n    def setup_optimizer(self, optimizer: Optimizer) -> Optimizer:\n        \"\"\"Optimizers can only be set up jointly with the model in this strategy.\n\n        Please use :meth:`setup_module_and_optimizers` to set up both module and optimizer together.\n\n        \"\"\"\n        raise NotImplementedError(self._err_msg_joint_setup_required())\n\n    @override\n    def module_init_context(self, empty_init: Optional[bool] = None) -> AbstractContextManager:\n        if self.zero_stage_3 and empty_init is False:\n            raise NotImplementedError(\n                f\"`{empty_init=}` is not a valid choice with `DeepSpeedStrategy` when ZeRO stage 3 is enabled.\"\n            )\n        module_sharded_ctx = self.module_sharded_context()\n        stack = ExitStack()\n        if not self.zero_stage_3:\n            stack.enter_context(super().module_init_context(empty_init=empty_init))\n        stack.enter_context(module_sharded_ctx)\n        return stack\n\n    @override\n    def module_sharded_context(self) -> AbstractContextManager:\n        # Current limitation in Fabric: The config needs to be fully determined at the time of calling the context\n        # manager. Later modifications through e.g. `Fabric.setup()` won't have an effect here.","sourceCodeStart":358,"sourceCodeEnd":394,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/fabric/strategies/deepspeed.py#L358-L394","documentation":"DeepSpeed must initialize the model and optimizer together inside deepspeed.initialize (the engine creation allocates optimizer states per ZeRO stage). Therefore setup_optimizer alone cannot work and always raises NotImplementedError with a pointer to setup_module_and_optimizers.","triggerScenarios":"Calling fabric.setup_optimizer(optimizer) or strategy.setup_optimizer(optimizer) while using DeepSpeedStrategy; e.g. code that sets up the model first and then calls setup for each optimizer separately.","commonSituations":"Porting strategy-agnostic Fabric code that assumes setup() and setup_optimizer() can be called independently; looping over optimizers calling setup_optimizer.","solutions":["Replace separate calls with fabric.setup(module, optimizer) / strategy.setup_module_and_optimizers(module, [optimizer])","If you have multiple optimizers, see error 110 — DeepSpeed supports only one","Guard strategy-agnostic code with a check for strategy.requires_joint_setup semantics (isinstance(strategy, DeepSpeedStrategy))"],"exampleFix":"# before\nmodule = fabric.setup_module(module)\nopt = fabric.setup_optimizer(opt)  # raises under deepspeed\n# after\nmodule, opt = fabric.setup(module, opt)","handlingStrategy":"validation","validationCode":"from lightning.fabric.strategies.deepspeed import DeepSpeedStrategy\nif isinstance(fabric.strategy, DeepSpeedStrategy):\n    module, optimizer = fabric.setup(module, optimizer)  # joint setup\nelse:\n    module = fabric.setup_module(module)\n    optimizer = fabric.setup_optimizer(optimizer)","typeGuard":"from lightning.fabric.strategies.deepspeed import DeepSpeedStrategy\n\ndef needs_joint_setup(strategy) -> bool:\n    return isinstance(strategy, DeepSpeedStrategy)","tryCatchPattern":"try:\n    optimizer = fabric.setup_optimizer(optimizer)\nexcept NotImplementedError:\n    raise RuntimeError(\"use fabric.setup(module, optimizer) for deepspeed\")","preventionTips":["Prefer the joint fabric.setup(module, optimizer) API universally","Write strategy-agnostic code against setup_module_and_optimizers"],"tags":["deepspeed","api-misuse","optimizer-setup","pytorch-lightning"],"backgroundTag":"api-misuse","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}