---
title: LightningCLI
description: Implementation of a configurable command line tool for pytorch-lightning.
canonical: >-
  https://lightning.ai/docs/pytorch/stable/optional-api/api/lightning.pytorch.cli.LightningCLI
---
# LightningCLI {#lightningcli}

### `class lightning.pytorch.cli.LightningCLI(model_class=None, datamodule_class=None, save_config_callback=<class 'lightning.pytorch.cli.SaveConfigCallback'>, save_config_kwargs=None, trainer_class=<class 'lightning.pytorch.trainer.trainer.Trainer'>, trainer_defaults=None, seed_everything_default=True, parser_kwargs=None, parser_class=<class 'lightning.pytorch.cli.LightningArgumentParser'>, subclass_mode_model=False, subclass_mode_data=False, args=None, run=True, auto_configure_optimizers=True, load_from_checkpoint_support=True)` {#lightning.pytorch.cli.LightningCLI}

Bases: [`object`](https://docs.python.org/3/builtins/functions.html#object "(in Python v3.15)")

Implementation of a configurable command line tool for pytorch-lightning.

Receives as input pytorch-lightning classes (or callables which return pytorch-lightning classes), which are called / instantiated using a parsed configuration file and / or command line args.

Parsing of configuration from environment variables can be enabled by setting `parser_kwargs={"default_env": True}`. A full configuration yaml would be parsed from `PL_CONFIG` if set. Individual settings are so parsed from variables named for example `PL_TRAINER__MAX_EPOCHS`.

For more info, read [the CLI docs](/docs/pytorch/2.5.5/reference/cli/lightning_cli.md#lightning-cli).

Parameters:

*   **model\_class** (`Union`\[[`type`](https://docs.python.org/3/builtins/functions.html#type "(in Python v3.15)")\[[`LightningModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.module.LightningModule")\], [`Callable`](https://docs.python.org/3/library/typing.html#typing.Callable "(in Python v3.15)")\[[`...`](https://docs.python.org/3/builtins/constants.html#Ellipsis "(in Python v3.15)"), [`LightningModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.module.LightningModule")\], [`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")\]) – An optional [`LightningModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.LightningModule") class to train on or a callable which returns a [`LightningModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.LightningModule") instance when called. If `None`, you can pass a registered model with `--model=MyModel`.
    
*   **datamodule\_class** (`Union`\[[`type`](https://docs.python.org/3/builtins/functions.html#type "(in Python v3.15)")\[[`LightningDataModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule")\], [`Callable`](https://docs.python.org/3/library/typing.html#typing.Callable "(in Python v3.15)")\[[`...`](https://docs.python.org/3/builtins/constants.html#Ellipsis "(in Python v3.15)"), [`LightningDataModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule")\], [`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")\]) – An optional [`LightningDataModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule") class or a callable which returns a [`LightningDataModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule") instance when called. If `None`, you can pass a registered datamodule with `--data=MyDataModule`.
    
*   **save\_config\_callback** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`type`](https://docs.python.org/3/builtins/functions.html#type "(in Python v3.15)")\[[`SaveConfigCallback`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.cli.SaveConfigCallback.md#lightning.pytorch.cli.SaveConfigCallback "lightning.pytorch.cli.SaveConfigCallback")\]\]) – A callback class to save the config.
    
*   **save\_config\_kwargs** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]\]) – Parameters that will be used to instantiate the save\_config\_callback.
    
*   **trainer\_class** (`Union`\[[`type`](https://docs.python.org/3/builtins/functions.html#type "(in Python v3.15)")\[[`Trainer`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer")\], [`Callable`](https://docs.python.org/3/library/typing.html#typing.Callable "(in Python v3.15)")\[[`...`](https://docs.python.org/3/builtins/constants.html#Ellipsis "(in Python v3.15)"), [`Trainer`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer")\]\]) – An optional subclass of the [`Trainer`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer") class or a callable which returns a [`Trainer`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer") instance when called.
    
*   **trainer\_defaults** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]\]) – Set to override Trainer defaults or add persistent callbacks. The callbacks added through this argument will not be configurable from a configuration file and will always be present for this particular CLI. Alternatively, configurable callbacks can be added as explained in [the CLI docs](/docs/pytorch/2.5.5/reference/cli/lightning_cli.md#lightning-cli).
    
*   **seed\_everything\_default** (`Union`\[[`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)"), [`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")\]) – Number for the [`seed_everything()`](/docs/fabric/stable/api/utilities#lightning.fabric.utilities.seed.seed_everything "(in lightning v2.7.0.dev)") seed value. Set to True to automatically choose a seed value. Setting it to False will avoid calling `seed_everything`.
    
*   **parser\_kwargs** (`Union`\[[`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\], [`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]\], [`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")\]) – Additional arguments to instantiate each `LightningArgumentParser`.
    
*   **subclass\_mode\_model** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) – Whether model can be any [subclass](https://jsonargparse.readthedocs.io/en/stable/#class-type-and-sub-classes) of the given class.
    
*   **subclass\_mode\_data** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) –
    
    Whether datamodule can be any [subclass](https://jsonargparse.readthedocs.io/en/stable/#class-type-and-sub-classes) of the given class.
    
*   **args** (`Union`\[[`list`](https://docs.python.org/3/builtins/stdtypes.html#list "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")\], [`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\], [`object`](https://docs.python.org/3/builtins/functions.html#object "(in Python v3.15)"), [`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")\]) – Arguments to parse. If `None` the arguments are taken from `sys.argv`. Command line style arguments can be given in a `list`. Alternatively, structured config options can be given in a `dict` or `jsonargparse.Namespace`.
    
*   **run** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) – Whether subcommands should be added to run a [`Trainer`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer") method. If set to `False`, the trainer and model classes will be instantiated only.
    
*   **auto\_configure\_optimizers** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) – Whether to automatically add default optimizer and lr\_scheduler arguments.
    
*   **load\_from\_checkpoint\_support** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) – Whether `save_hyperparameters` should save the original parsed hyperparameters (instead of what `__init__` receives), such that it is possible for `load_from_checkpoint` to correctly instantiate classes even when using complex nesting and dependency injection.
    

#### `add_arguments_to_parser(parser)` {#lightning.pytorch.cli.LightningCLI.add_arguments_to_parser}

Implement to add extra arguments to the parser or link arguments.

Parameters:

**parser** ([`LightningArgumentParser`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.cli.LightningArgumentParser.md#lightning.pytorch.cli.LightningArgumentParser "lightning.pytorch.cli.LightningArgumentParser")) – The parser object to which arguments can be added

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `add_core_arguments_to_parser(parser)` {#lightning.pytorch.cli.LightningCLI.add_core_arguments_to_parser}

Adds arguments from the core classes to the parser.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `add_default_arguments_to_parser(parser)` {#lightning.pytorch.cli.LightningCLI.add_default_arguments_to_parser}

Adds default arguments to the parser.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `after_instantiate_classes()` {#lightning.pytorch.cli.LightningCLI.after_instantiate_classes}

Implement to run some code after instantiating the classes.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `before_instantiate_classes()` {#lightning.pytorch.cli.LightningCLI.before_instantiate_classes}

Implement to run some code before instantiating the classes.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `static configure_optimizers(lightning_module, optimizer, lr_scheduler=None)` {#lightning.pytorch.cli.LightningCLI.configure_optimizers}

Override to customize the [`configure_optimizers()`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule.configure_optimizers "lightning.pytorch.core.LightningModule.configure_optimizers") method.

Parameters:

*   **lightning\_module** ([`LightningModule`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.module.LightningModule")) – A reference to the model.
    
*   **optimizer** ([`Optimizer`](https://docs.pytorch.org/docs/stable/optim.html#torch.optim.Optimizer "(in PyTorch v2.15)")) – The optimizer.
    
*   **lr\_scheduler** (`Union`\[[`LRScheduler`](https://docs.pytorch.org/docs/stable/generated/torch.optim.lr_scheduler.LRScheduler.html#torch.optim.lr_scheduler.LRScheduler "(in PyTorch v2.15)"), `ReduceLROnPlateau`, [`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")\]) – The learning rate scheduler (if used).
    

Return type:

[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")

#### `init_parser(**kwargs)` {#lightning.pytorch.cli.LightningCLI.init_parser}

Method that instantiates the argument parser.

Return type:

[`LightningArgumentParser`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.cli.LightningArgumentParser.md#lightning.pytorch.cli.LightningArgumentParser "lightning.pytorch.cli.LightningArgumentParser")

#### `instantiate_classes()` {#lightning.pytorch.cli.LightningCLI.instantiate_classes}

Instantiates the classes and sets their attributes.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `instantiate_trainer(**kwargs)` {#lightning.pytorch.cli.LightningCLI.instantiate_trainer}

Instantiates the trainer.

Parameters:

**kwargs** ([`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")) – Any custom trainer arguments.

Return type:

[`Trainer`](/docs/pytorch/2.5.5/optional-api/api/lightning.pytorch.trainer.trainer.Trainer.md#lightning.pytorch.trainer.trainer.Trainer "lightning.pytorch.trainer.trainer.Trainer")

#### `static link_optimizers_and_lr_schedulers(parser)` {#lightning.pytorch.cli.LightningCLI.link_optimizers_and_lr_schedulers}

Creates argument links for optimizers and learning rate schedulers that specified a `link_to`.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `parse_arguments(parser, args)` {#lightning.pytorch.cli.LightningCLI.parse_arguments}

Parses command line arguments and stores it in `self.config`.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `setup_parser(add_subcommands, main_kwargs, subparser_kwargs)` {#lightning.pytorch.cli.LightningCLI.setup_parser}

Initialize and setup the parser, subcommands, and arguments.

Return type:

[`None`](https://docs.python.org/3/builtins/constants.html#None "(in Python v3.15)")

#### `static subcommands()` {#lightning.pytorch.cli.LightningCLI.subcommands}

Defines the list of available subcommands and the arguments to skip.

Return type:

[`dict`](https://docs.python.org/3/builtins/stdtypes.html#dict "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)"), [`set`](https://docs.python.org/3/builtins/stdtypes.html#set "(in Python v3.15)")\[[`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")\]\]

---

**Navigation**

- Parent: [Api](/docs/pytorch/2.5.5/optional-api/api.md)
