# tf.compat.v1.train.SessionManager

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/training/session_manager.py#L69-L533) |

Training helper that restores from checkpoint and creates session.

    tf.compat.v1.train.SessionManager(
        local_init_op=None,
        ready_op=None,
        ready_for_local_init_op=None,
        graph=None,
        recovery_wait_secs=30,
        local_init_run_options=None,
        local_init_feed_dict=None
    )

This class is a small wrapper that takes care of session creation and
checkpoint recovery. It also provides functions that to facilitate
coordination among multiple training threads or processes.

- Checkpointing trained variables as the training progresses.
- Initializing variables on startup, restoring them from the most recent checkpoint after a crash, or wait for checkpoints to become available.

### Usage:

    with tf.Graph().as_default():
       ...add operations to the graph...
      # Create a SessionManager that will checkpoint the model in '/tmp/mydir'.
      sm = SessionManager()
      sess = sm.prepare_session(master, init_op, saver, checkpoint_dir)
      # Use the session to train the graph.
      while True:
        sess.run(<my_train_op>)

`prepare_session()` initializes or restores a model. It requires `init_op`
and `saver` as an argument.

A second process could wait for the model to be ready by doing the following:

    with tf.Graph().as_default():
       ...add operations to the graph...
      # Create a SessionManager that will wait for the model to become ready.
      sm = SessionManager()
      sess = sm.wait_for_session(master)
      # Use the session to train the graph.
      while True:
        sess.run(<my_train_op>)

`wait_for_session()` waits for a model to be initialized by other processes.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `local_init_op` | An `Operation` run immediately after session creation. Usually used to initialize tables and local variables. |
| `ready_op` | An `Operation` to check if the model is initialized. |
| `ready_for_local_init_op` | An `Operation` to check if the model is ready to run local_init_op. |
| `graph` | The `Graph` that the model will use. |
| `recovery_wait_secs` | Seconds between checks for the model to be ready. |
| `local_init_run_options` | RunOptions to be passed to session.run when executing the local_init_op. |
| `local_init_feed_dict` | Optional session feed dictionary to use when running the local_init_op. |

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `ValueError` | If ready_for_local_init_op is not None but local_init_op is None |

<br />

## Methods

### `prepare_session`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/training/session_manager.py#L250-L340)

    prepare_session(
        master,
        init_op=None,
        saver=None,
        checkpoint_dir=None,
        checkpoint_filename_with_path=None,
        wait_for_checkpoint=False,
        max_wait_secs=7200,
        config=None,
        init_feed_dict=None,
        init_fn=None
    )

Creates a `Session`. Makes sure the model is ready to be used.

Creates a `Session` on 'master'. If a `saver` object is passed in, and
`checkpoint_dir` points to a directory containing valid checkpoint
files, then it will try to recover the model from checkpoint. If
no checkpoint files are available, and `wait_for_checkpoint` is
`True`, then the process would check every `recovery_wait_secs`,
up to `max_wait_secs`, for recovery to succeed.

If the model cannot be recovered successfully then it is initialized by
running the `init_op` and calling `init_fn` if they are provided.
The `local_init_op` is also run after init_op and init_fn, regardless of
whether the model was recovered successfully, but only if
`ready_for_local_init_op` passes.

If the model is recovered from a checkpoint it is assumed that all
global variables have been initialized, in particular neither `init_op`
nor `init_fn` will be executed.

It is an error if the model cannot be recovered and no `init_op`
or `init_fn` or `local_init_op` are passed.

<br />

<br />

<br />

| Args ||
|---|---|
| `master` | `String` representation of the TensorFlow master to use. |
| `init_op` | Optional `Operation` used to initialize the model. |
| `saver` | A `Saver` object used to restore a model. |
| `checkpoint_dir` | Path to the checkpoint files. The latest checkpoint in the dir will be used to restore. |
| `checkpoint_filename_with_path` | Full file name path to the checkpoint file. |
| `wait_for_checkpoint` | Whether to wait for checkpoint to become available. |
| `max_wait_secs` | Maximum time to wait for checkpoints to become available. |
| `config` | Optional `ConfigProto` proto used to configure the session. |
| `init_feed_dict` | Optional dictionary that maps `Tensor` objects to feed values. This feed dictionary is passed to the session `run()` call when running the init op. |
| `init_fn` | Optional callable used to initialize the model. Called after the optional `init_op` is called. The callable must accept one argument, the session being initialized. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A `Session` object that can be used to drive the model. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `RuntimeError` | If the model cannot be initialized or recovered. |
| `ValueError` | If both checkpoint_dir and checkpoint_filename_with_path are set. |

<br />

### `recover_session`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/training/session_manager.py#L342-L404)

    recover_session(
        master,
        saver=None,
        checkpoint_dir=None,
        checkpoint_filename_with_path=None,
        wait_for_checkpoint=False,
        max_wait_secs=7200,
        config=None
    )

Creates a `Session`, recovering if possible.

Creates a new session on 'master'. If the session is not initialized
and can be recovered from a checkpoint, recover it.

<br />

<br />

<br />

| Args ||
|---|---|
| `master` | `String` representation of the TensorFlow master to use. |
| `saver` | A `Saver` object used to restore a model. |
| `checkpoint_dir` | Path to the checkpoint files. The latest checkpoint in the dir will be used to restore. |
| `checkpoint_filename_with_path` | Full file name path to the checkpoint file. |
| `wait_for_checkpoint` | Whether to wait for checkpoint to become available. |
| `max_wait_secs` | Maximum time to wait for checkpoints to become available. |
| `config` | Optional `ConfigProto` proto used to configure the session. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A pair (sess, initialized) where 'initialized' is `True` if the session could be recovered and initialized, `False` otherwise. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `ValueError` | If both checkpoint_dir and checkpoint_filename_with_path are set. |

<br />

### `wait_for_session`

[View source](https://github.com/tensorflow/tensorflow/blob/v2.13.1/tensorflow/python/training/session_manager.py#L406-L463)

    wait_for_session(
        master, config=None, max_wait_secs=float('Inf')
    )

Creates a new `Session` and waits for model to be ready.

Creates a new `Session` on 'master'. Waits for the model to be
initialized or recovered from a checkpoint. It's expected that
another thread or process will make the model ready, and that this
is intended to be used by threads/processes that participate in a
distributed training configuration where a different thread/process
is responsible for initializing or recovering the model being trained.

> [!NOTE]
> **Note:** The amount of time this method waits for the session is bounded by max_wait_secs. By default, this function will wait indefinitely.

<br />

<br />

<br />

| Args ||
|---|---|
| `master` | `String` representation of the TensorFlow master to use. |
| `config` | Optional ConfigProto proto used to configure the session. |
| `max_wait_secs` | Maximum time to wait for the session to become available. |

<br />

<br />

<br />

<br />

| Returns ||
|---|---|
| A `Session`. May be None if the operation exceeds the timeout specified by config.operation_timeout_in_ms. ||

<br />

<br />

<br />

<br />

| Raises ||
|---|---|
| `tf.DeadlineExceededError` | if the session is not available after max_wait_secs. |

<br />