---
title: Tuner
description: Tuner class to tune your model.
canonical: >-
  https://lightning.ai/docs/pytorch/stable/optional-api/api/lightning.pytorch.tuner.tuning.Tuner
---
# Tuner {#tuner}

### `class lightning.pytorch.tuner.tuning.Tuner(trainer)` {#lightning.pytorch.tuner.tuning.Tuner}

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

Tuner class to tune your model.

#### `lr_find(model, train_dataloaders=None, val_dataloaders=None, dataloaders=None, datamodule=None, method='fit', min_lr=1e-08, max_lr=1, num_training=100, mode='exponential', early_stop_threshold=4.0, update_attr=True, attr_name='')` {#lightning.pytorch.tuner.tuning.Tuner.lr_find}

Enables the user to do a range test of good initial learning rates, to reduce the amount of guesswork in picking a good starting learning rate.

Parameters:

*   **model** ([`LightningModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.module.LightningModule")) – Model to tune.
    
*   **train\_dataloaders** (`Union`\[[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)"), [`LightningDataModule`](/docs/pytorch/2.6.6/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)")\]) – A collection of [`torch.utils.data.DataLoader`](https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader "(in PyTorch v2.15)") or a [`LightningDataModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule") specifying training samples. In the case of multiple dataloaders, please see this [section](/docs/pytorch/2.6.6/reference/data/iterables.md#multiple-dataloaders).
    
*   **val\_dataloaders** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]) – A [`torch.utils.data.DataLoader`](https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader "(in PyTorch v2.15)") or a sequence of them specifying validation samples.
    
*   **dataloaders** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]) – A [`torch.utils.data.DataLoader`](https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader "(in PyTorch v2.15)") or a sequence of them specifying val/test/predict samples used for running tuner on validation/testing/prediction.
    
*   **datamodule** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`LightningDataModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule")\]) – An instance of [`LightningDataModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule").
    
*   **method** ([`Literal`](https://docs.python.org/3/library/typing.html#typing.Literal "(in Python v3.15)")\[`'fit'`, `'validate'`, `'test'`, `'predict'`\]) – Method to run tuner on. It can be any of `("fit", "validate", "test", "predict")`.
    
*   **min\_lr** ([`float`](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")) – minimum learning rate to investigate
    
*   **max\_lr** ([`float`](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")) – maximum learning rate to investigate
    
*   **num\_training** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – number of learning rates to test
    
*   **mode** ([`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")) –
    
    Search strategy to update learning rate after each batch:
    
    *   `'exponential'`: Increases the learning rate exponentially.
        
    *   `'linear'`: Increases the learning rate linearly.
        
    
*   **early\_stop\_threshold** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`float`](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")\]) – Threshold for stopping the search. If the loss at any point is larger than early\_stop\_threshold\*best\_loss then the search is stopped. To disable, set to None.
    
*   **update\_attr** ([`bool`](https://docs.python.org/3/builtins/functions.html#bool "(in Python v3.15)")) – Whether to update the learning rate attribute or not.
    
*   **attr\_name** ([`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")) – Name of the attribute which stores the learning rate. The names ‘learning\_rate’ or ‘lr’ get automatically detected. Otherwise, set the name here.
    

Raises:

**MisconfigurationException** – If learning rate/lr in `model` or `model.hparams` isn’t overridden, or if you are using more than one optimizer.

Return type:

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

#### `scale_batch_size(model, train_dataloaders=None, val_dataloaders=None, dataloaders=None, datamodule=None, method='fit', mode='power', steps_per_trial=3, init_val=2, max_trials=25, batch_arg_name='batch_size', margin=0.05, max_val=8192)` {#lightning.pytorch.tuner.tuning.Tuner.scale_batch_size}

Iteratively try to find the largest batch size for a given model that does not give an out of memory (OOM) error.

Parameters:

*   **model** ([`LightningModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningModule.md#lightning.pytorch.core.LightningModule "lightning.pytorch.core.module.LightningModule")) – Model to tune.
    
*   **train\_dataloaders** (`Union`\[[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)"), [`LightningDataModule`](/docs/pytorch/2.6.6/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)")\]) – A collection of [`torch.utils.data.DataLoader`](https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader "(in PyTorch v2.15)") or a [`LightningDataModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule") specifying training samples. In the case of multiple dataloaders, please see this [section](/docs/pytorch/2.6.6/reference/data/iterables.md#multiple-dataloaders).
    
*   **val\_dataloaders** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]) – A [`torch.utils.data.DataLoader`](https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader "(in PyTorch v2.15)") or a sequence of them specifying validation samples.
    
*   **dataloaders** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`Any`](https://docs.python.org/3/library/typing.html#typing.Any "(in Python v3.15)")\]) – A [`torch.utils.data.DataLoader`](https://docs.pytorch.org/docs/stable/data.html#torch.utils.data.DataLoader "(in PyTorch v2.15)") or a sequence of them specifying val/test/predict samples used for running tuner on validation/testing/prediction.
    
*   **datamodule** ([`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`LightningDataModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule")\]) – An instance of [`LightningDataModule`](/docs/pytorch/2.6.6/optional-api/api/lightning.pytorch.core.LightningDataModule.md#lightning.pytorch.core.LightningDataModule "lightning.pytorch.core.datamodule.LightningDataModule").
    
*   **method** ([`Literal`](https://docs.python.org/3/library/typing.html#typing.Literal "(in Python v3.15)")\[`'fit'`, `'validate'`, `'test'`, `'predict'`\]) – Method to run tuner on. It can be any of `("fit", "validate", "test", "predict")`.
    
*   **mode** ([`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")) –
    
    Search strategy to update the batch size:
    
    *   `'power'`: Keep multiplying the batch size by 2, until we get an OOM error.
        
    *   `'binsearch'`: Initially keep multiplying by 2 and after encountering an OOM error
        
        do a binary search between the last successful batch size and the batch size that failed.
        
    
*   **steps\_per\_trial** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – number of steps to run with a given batch size. Ideally 1 should be enough to test if an OOM error occurs, however in practise a few are needed
    
*   **init\_val** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – initial batch size to start the search with
    
*   **max\_trials** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – max number of increases in batch size done before algorithm is terminated
    
*   **batch\_arg\_name** ([`str`](https://docs.python.org/3/builtins/stdtypes.html#str "(in Python v3.15)")) –
    
    name of the attribute that stores the batch size. It is expected that the user has provided a model or datamodule that has a hyperparameter with that name. We will look for this attribute name in the following places
    
    *   `model`
        
    *   `model.hparams`
        
    *   `trainer.datamodule` (the datamodule passed to the tune method)
        
    
*   **margin** ([`float`](https://docs.python.org/3/builtins/functions.html#float "(in Python v3.15)")) – Margin to reduce the found batch size by to provide a safety buffer. Only applied when using ‘binsearch’ mode. Should be a float between 0 and 1. Defaults to 0.05 (5% reduction).
    
*   **max\_val** ([`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")) – Maximum batch size limit, defaults to 8192. Helps prevent testing unrealistically large or inefficient batch sizes (e.g., 2\*\*25) when running on CPU or when automatic OOM detection is not available.
    

Return type:

[`Optional`](https://docs.python.org/3/library/typing.html#typing.Optional "(in Python v3.15)")\[[`int`](https://docs.python.org/3/builtins/functions.html#int "(in Python v3.15)")\]

---

**Navigation**

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