Spec-Zone.ru › TensorFlow

tf.compat.v1.train.Supervisor

Помощник обучения, который сохраняет модели и вычисляет сводки.

tf.compat.v1.train.Supervisor(
    graph=None,
    ready_op=USE_DEFAULT,
    ready_for_local_init_op=USE_DEFAULT,
    is_chief=True,
    init_op=USE_DEFAULT,
    init_feed_dict=None,
    local_init_op=USE_DEFAULT,
    logdir=None,
    summary_op=USE_DEFAULT,
    saver=USE_DEFAULT,
    global_step=USE_DEFAULT,
    save_summaries_secs=120,
    save_model_secs=600,
    recovery_wait_secs=30,
    stop_grace_secs=120,
    checkpoint_basename='model.ckpt',
    session_manager=None,
    summary_writer=USE_DEFAULT,
    init_fn=None,
    local_init_run_options=None
)

Этот класс устарел. Используйте tf.compat.v1.train.MonitoredTrainingSession вместо него.

Supervisor — это небольшой оболочка вокруг Coordinator, Saver и SessionManager, которая заботится о распространённых потребностях программ обучения TensorFlow.

Использование для одной программы

with tf.Graph().as_default():
  ...add operations to the graph...
  # Create a Supervisor that will checkpoint the model in '/tmp/mydir'.
  sv = Supervisor(logdir='/tmp/mydir')
  # Get a TensorFlow session managed by the supervisor.
  with sv.managed_session(FLAGS.master) as sess:
    # Use the session to train the graph.
    while not sv.should_stop():
      sess.run(<my_train_op>)

Внутри блока with sv.managed_session() все переменные в графе инициализированы. Кроме того, были запущены несколько служб для сохранения модели и добавления сводок в журнал событий.

Если программа завершится аварийно и будет перезапущена, управляемая сессия автоматически повторно инициализирует переменные из последнего сохранения.

Supervisor уведомляется о любых исключениях, поднятых одной из служб. После того, как исключение было поднято, should_stop() возвращает True. В этом случае цикл обучения также должен остановиться. Вот почему цикл обучения должен проверять на наличие sv.should_stop().

Исключения, указывающие на то, что входные данные обучения исчерпаны, tf.errors.OutOfRangeError, также заставляют sv.should_stop() возвращать True, но не перебрасываются из блока with: они указывают на нормальное завершение.

Использование для нескольких реплик

Для обучения с репликами необходимо развернуть одну и ту же программу в Cluster. Одна из задач должна быть определена как главная: задача, обрабатывающая инициализацию, сохранения, сводки и восстановление. Другие задачи зависят от главной для этих служб.

Единственное изменение, которое нужно внести в код программы с одной программой, — это указать, работает ли программа как главная.

# Choose a task as the chief. This could be based on server_def.task_index,
# or job_def.name, or job_def.tasks. It's entirely up to the end user.
# But there can be only one *chief*.
is_chief = (server_def.task_index == 0)
server = tf.distribute.Server(server_def)

with tf.Graph().as_default():
  ...add operations to the graph...
  # Create a Supervisor that uses log directory on a shared file system.
  # Indicate if you are the 'chief'
  sv = Supervisor(logdir='/shared_directory/...', is_chief=is_chief)
  # Get a Session in a TensorFlow server on the cluster.
  with sv.managed_session(server.target) as sess:
    # Use the session to train the graph.
    while not sv.should_stop():
      sess.run(<my_train_op>)

В задаче главной Supervisor работает точно так же, как в первом примере выше. В других задачах sv.managed_session() ожидает, пока Модель не будет инициализирована, прежде чем вернуть сессию коду обучения. Задачи, не являющиеся главными, зависят от главной задачи для инициализации модели.

Если одна из задач аварийно завершит работу и перезапустится, managed_session() проверяет, инициализирована ли Модель. Если да, он просто создаёт сессию и возвращает её коду обучения, который продолжает работать нормально. Если модель нужно инициализировать, главная задача позаботится об её повторной инициализации; другие задачи просто ждут, пока модель будет инициализирована.

Примечание: Эта изменённая программа по-прежнему работает как одна программа. Единственная программа отмечает себя как главную.

Какой использовать строку master

Независимо от того, работаете ли вы на вашей машине или в кластере, вы можете использовать следующие значения для флага --master:

  • Указание '' запрашивает сессию в процессе, которая не использует RPC.

  • Указание 'local' запрашивает сессию, которая использует RPC-базированный "интерфейс Мастера" для запуска программ TensorFlow. Подробнее см. tf.train.Server.create_local_server.

  • Указание 'grpc://hostname:port' запрашивает сессию, которая использует интерфейс RPC к конкретному хосту, а также позволяет мастеру в процессе получить доступ к удалённым рабочим узлам tensorflow. Часто уместно передавать server.target (для некоторого tf.distribute.Server с именем `server).

Расширенное использование

Запуск дополнительных служб

managed_session() запускает службы Сохранения и Сводки (потоки). Если вам нужны дополнительные службы, вы можете просто запустить их в блоке, управляемом managed_session().

Пример: запустите поток для вывода потерь. Мы хотим, чтобы этот поток выполнялся каждые 60 секунд, поэтому запускаем его с sv.loop().

...
sv = Supervisor(logdir='/tmp/mydir')
with sv.managed_session(FLAGS.master) as sess:
  sv.loop(60, print_loss, (sess, ))
  while not sv.should_stop():
    sess.run(my_train_op)
Запуск меньшего количества служб

managed_session() запускает потоки "сводки" и "сохранения", которые используют необязательные summary_op и saver, переданные в конструктор, или стандартные потоки, созданные автоматически supervisorem. Если вы хотите запустить собственную логику сводок и сохранения, отключите эти службы, передав None в параметры summary_op и saver.

Пример: вручную создавайте сводки каждые 100 шагов в главной задаче.

# Create a Supervisor with no automatic summaries.
sv = Supervisor(logdir='/tmp/mydir', is_chief=is_chief, summary_op=None)
# As summary_op was None, managed_session() does not start the
# summary thread.
with sv.managed_session(FLAGS.master) as sess:
  for step in range(1000000):
    if sv.should_stop():
      break
    if is_chief and step % 100 == 0:
      # Create the summary every 100 chief steps.
      sv.summary_computed(sess, sess.run(my_summary_op))
    else:
      # Train normally
      sess.run(my_train_op)
Настройка инициализации модели

managed_session() поддерживает только инициализацию модели путём выполнения init_op или восстановления из последнего сохранения. Если у вас есть особые потребности в инициализации, см., как указать local_init_op при создании supervisor. Вы также можете использовать SessionManager напрямую для создания сессии и проверки, может ли она быть инициализирована автоматически.

Args
graph A Graph. The graph that the model will use. Defaults to the default Graph. The supervisor may add operations to the graph before creating a session, but the graph should not be modified by the caller after passing it to the supervisor.
ready_op 1-D string Tensor. This tensor is evaluated by supervisors in prepare_or_wait_for_session() to check if the model is ready to use. The model is considered ready if it returns an empty array. Defaults to the tensor returned from tf.compat.v1.report_uninitialized_variables() If None, the model is not checked for readiness.
ready_for_local_init_op 1-D string Tensor. This tensor is evaluated by supervisors in prepare_or_wait_for_session() to check if the model is ready to run the local_init_op. The model is considered ready if it returns an empty array. Defaults to None. If None, the model is not checked for readiness before running local_init_op.
is_chief If True, create a chief supervisor in charge of initializing and restoring the model. If False, create a supervisor that relies on a chief supervisor for inits and restore.
init_op Operation. Used by chief supervisors to initialize the model when it can not be recovered. Defaults to an Operation that initializes all global variables. If None, no initialization is done automatically unless you pass a value for init_fn, see below.
init_feed_dict A dictionary that maps Tensor objects to feed values. This feed dictionary will be used when init_op is evaluated.
local_init_op Operation. Used by all supervisors to run initializations that should run for every new supervisor instance. By default these are table initializers and initializers for local variables. If None, no further per supervisor-instance initialization is done automatically.
logdir A string. Optional path to a directory where to checkpoint the model and log events for the visualizer. Used by chief supervisors. The directory will be created if it does not exist.
summary_op An Operation that returns a Summary for the event logs. Used by chief supervisors if a logdir was specified. Defaults to the operation returned from summary.merge_all(). If None, summaries are not computed automatically.
saver A Saver object. Used by chief supervisors if a logdir was specified. Defaults to the saved returned by Saver(). If None, the model is not saved automatically.
global_step An integer Tensor of size 1 that counts steps. The value from 'global_step' is used in summaries and checkpoint filenames. Default to the op named 'global_step' in the graph if it exists, is of rank 1, size 1, and of type tf.int32 or tf.int64. If None the global step is not recorded in summaries and checkpoint files. Used by chief supervisors if a logdir was specified.
save_summaries_secs Number of seconds between the computation of summaries for the event log. Defaults to 120 seconds. Pass 0 to disable summaries.
save_model_secs Number of seconds between the creation of model checkpoints. Defaults to 600 seconds. Pass 0 to disable checkpoints.
recovery_wait_secs Number of seconds between checks that the model is ready. Used by supervisors when waiting for a chief supervisor to initialize or restore the model. Defaults to 30 seconds.
stop_grace_secs Grace period, in seconds, given to running threads to stop when stop() is called. Defaults to 120 seconds.
checkpoint_basename The basename for checkpoint saving.
session_manager SessionManager, which manages Session creation and recovery. If it is None, a default SessionManager will be created with the set of arguments passed in for backwards compatibility.
summary_writer SummaryWriter to use or USE_DEFAULT. Can be None to indicate that no summaries should be written.
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.
local_init_run_options RunOptions to be passed as the SessionManager local_init_run_options parameter.
Raises
RuntimeError If called with eager execution enabled.
Attributes
coord Return the Coordinator used by the Supervisor.

The Coordinator can be useful if you want to run multiple threads during your training.

global_step Return the global_step Tensor used by the supervisor.
init_feed_dict Return the feed dictionary used when evaluating the init_op.
init_op Return the Init Op used by the supervisor.
is_chief Return True if this is a chief supervisor.
ready_for_local_init_op
ready_op Return the Ready Op used by the supervisor.
save_model_secs Return the delay between checkpoints.
save_path Return the save path used by the supervisor.
save_summaries_secs Return the delay between summary computations.
saver Return the Saver used by the supervisor.
session_manager Return the SessionManager used by the Supervisor.
summary_op Return the Summary Tensor used by the chief supervisor.
summary_writer Return the SummaryWriter used by the chief supervisor.

Методы

Loop

Просмотреть исходный код

Loop(
    timer_interval_secs, target, args=None, kwargs=None
)

Запустить поток LooperThread, который периодически вызывает функцию.

Если timer_interval_secs равно None, поток вызывает target(*args, **kwargs) повторно. В противном случае он вызывает её каждые timer_interval_secs секунды. Поток завершается при запросе остановки.

Запущенный поток добавляется в список потоков, управляемых надзирателем, поэтому его не нужно передавать методу stop().

Args
timer_interval_secs Число. Временные границы, в которые вызывается target.
target Объект вызываемого типа.
args Необязательные аргументы для передачи методу target при его вызове.
kwargs Необязательные ключевые аргументы для передачи методу target при его вызове.
Возвращает
Запущенный поток.

Подготовить сеанс

Просмотреть исходный код

PrepareSession(
    master='',
    config=None,
    wait_for_checkpoint=False,
    max_wait_secs=7200,
    start_standard_services=True
)

Убедиться, что модель готова к использованию.

Создайте сеанс на «master», восстанавливая или инициализируя модель по мере необходимости, или дождитесь готовности сеанса. Если выполняется как главный и start_standard_service установлен в True, также вызовите менеджер сеансов для запуска стандартных служб.

Args
master Имя TensorFlow master для использования. Обратитесь к конструктору tf.compat.v1.Session для получения информации о том, как это интерпретируется.
config Необязательный ConfigProto протокол, используемый для настройки сеанса, который передаётся в create_session как есть.
wait_for_checkpoint Должны ли мы ждать доступности контрольной точки перед созданием сеанса. По умолчанию False.
max_wait_secs Максимальное время ожидания готовности сеанса.
start_standard_services Нужно ли запускать стандартные службы и обработчики очереди.
Возвращает
Объект Session, который может быть использован для управления моделью.

Запросить остановку

Просмотреть исходный код

RequestStop(
    ex=None
)

Запросить остановку потоков координатором.

См. Coordinator.request_stop().

Args
ex Необязательный Exception, или кортеж Python exc_info, как возвращается sys.exc_info(). Если это первый вызов request_stop(), соответствующее исключение записывается и повторно поднимается из join().

Необходимо остановить

Просмотреть исходный код

ShouldStop()

Проверить, было ли указано координатору остановить работу.

См. Coordinator.should_stop().

Возвращает
True, если координатору было указано остановить работу, False в противном случае.

StartQueueRunners

Просмотреть исходный код

StartQueueRunners(
    sess, queue_runners=None
)

Запустить потоки для QueueRunners.

Обратите внимание, что потоки, собранные в ключе графа QUEUE_RUNNERS, уже автоматически запускаются при создании сессии с помощью надзирателя, поэтому если у вас нет потоков, которые нужно запустить, вам не нужно вызывать эту функцию явно.

Аргументы
sess Объект Session.
queue_runners Список QueueRunners. Если не указано, используется список потоков, собранных в графе под ключом GraphKeys.QUEUE_RUNNERS.
Возвращает
Список запущенных потоков для QueueRunners.
Возможные исключения
RuntimeError Если вызов выполнен с включённым жадным выполнением.

совместимость с жадным выполнением

Очереди не совместимы с жадным выполнением. Для обработки данных при включённом жадном выполнении используйте API tf.data.

StartStandardServices

Просмотреть исходный код

StartStandardServices(
    sess
)

Запустить стандартные службы для 'sess'.

Это запускает службы в фоновом режиме. Запускаемые службы зависят от параметров конструктора и могут включать:

  • Поток сводок, вычисляющий сводки каждые save_summaries_secs секунд.
  • Поток сохранения контрольных точек, сохраняющий модель каждые save_model_secs секунд.
  • Поток StepCounter, измеряющий время шага.
Аргументы
sess Сессия.
Возвращает
Список потоков, выполняющих стандартные службы. Вы можете использовать координатор Supervisor для объединения этих потоков с помощью: sv.coord.Join(<список потоков>)
Возможные исключения
RuntimeError Если вызов выполнен с неглавным надзирателем (Supervisor).
ValueError Если не был передан logdir в конструктор, так как службам требуется каталог логов.

Stop

Просмотреть исходный код

Stop(
    threads=None, close_summary_writer=True, ignore_live_threads=False
)

Остановить службы и координатор.

Это не закрывает сессию.

Аргументы
threads Необязательный список потоков, которые нужно объединить с координатором. Если None, по умолчанию используются потоки, выполняющие стандартные службы, потоки, запущенные для QueueRunners, и потоки, запущенные методом loop(). Для ожидания дополнительных потоков передайте список в этом параметре.
close_summary_writer Нужно ли закрыть summary_writer. По умолчанию True, если записыватель сводок создан надзирателем, False в противном случае.
ignore_live_threads Если True игнорирует потоки, которые остаются работающими после периода ожидания при объединении потоков через координатор, вместо того, чтобы вызывать RuntimeError.

StopOnException

Просмотреть исходный код

StopOnException()

Обработчик контекста для остановки надзирателя при возникновении исключения.

См. Coordinator.stop_on_exception().

Возвращает
Обработчик контекста.

SummaryComputed

Просмотреть исходный код

SummaryComputed(
    sess, summary, global_step=None
)

Указать, что сводка была вычислена.

Аргументы
sess Объект Session.
summary Протокол Summary или строка, содержащая сериализованный протокол Summary.
global_step Целое число. Глобальный шаг, с которым связана эта сводка. Если None, будет попытка получить текущий шаг.
Возможные исключения
TypeError если 'summary' не является протоколом Summary или строкой.
RuntimeError если надзиратель (Supervisor) был создан без logdir.

WaitForStop

Просмотреть исходный код

WaitForStop()

Ожидание остановки координатора.

loop

Просмотреть исходный код

loop(
    timer_interval_secs, target, args=None, kwargs=None
)

Запустить LooperThread, который периодически вызывает функцию.

Если timer_interval_secs равно None, поток вызывает target(*args, **kwargs) многократно. В противном случае, он вызывает его каждые timer_interval_secs секунд. Поток завершается при запросе остановки.

Запущенный поток добавляется в список потоков, управляемых надзирателем, поэтому его не нужно передавать методу stop().

Аргументы
timer_interval_secs Число. Границы времени, в которые вызывать target.
target Вызываемый объект.
args Необязательные аргументы для передачи target при вызове.
kwargs Необязательные ключевые аргументы для передачи target при вызове.
Возвращает
Запущенный поток.

managed_session

Просмотреть исходный код

@contextlib.contextmanager
managed_session(
    master='',
    config=None,
    start_standard_services=True,
    close_summary_writer=True
)

Возвращает менеджер контекста для управляемой сессии.

Этот менеджер контекста создаёт и автоматически восстанавливает сессию. Он необязательно запускает стандартные службы, которые обрабатывают контрольные точки и сводки. Он следит за исключениями, возникшими в блоке with или в службах и останавливает надзирателя по мере необходимости.

Менеджер контекста обычно используется следующим образом:

def train():
  sv = tf.compat.v1.train.Supervisor(...)
  with sv.managed_session(<master>) as sess:
    for step in range(..):
      if sv.should_stop():
        break
      sess.run(<my training op>)
      ...do other things needed at each training step...

Исключение, возникшее в блоке with или в одном из потоков службы, снова возникает при выходе из блока. Это делается после остановки всех потоков и закрытия сессии. Например, исключение AbortedError, возникающее в случае прерывания одного из рабочих элементов в распределённой модели, снова возникает при выходе из блока.

Если вы хотите повторить цикл обучения в случае прерывания, вы можете сделать это следующим образом:

def main(...):
  while True
    try:
      train()
    except tf.errors.Aborted:
      pass

В качестве специального случая исключения, используемые для управления потоком, например, OutOfRangeError, которые сообщают об истощении очередей ввода, не повторно вызываются из блока with: они указывают на чистое завершение цикла обучения и считаются нормальным завершением.

Аргументы
master Имя TensorFlow мастера, который использовать. См. конструктор tf.compat.v1.Session для способа интерпретации этого параметра.
config Необязательный протокол ConfigProto, используемый для конфигурации сессии. Передаётся как есть для создания сессии.
start_standard_services Запустить ли стандартные службы, такие как сохранение контрольных точек, сводок и счётчик шагов.
close_summary_writer Закрыть ли записыватель сводок при закрытии сессии. По умолчанию True.
END_OF_DOCUMENT_MARKER ```
Возвращает
Менеджер контекста, который возвращает Session, восстановленный из последнего контрольного пункта, или инициализированный с нуля, если контрольный пункт отсутствует. Сессия закрывается по выходе из блока with.

prepare_or_wait_for_session

Просмотреть исходный код

prepare_or_wait_for_session(
    master='',
    config=None,
    wait_for_checkpoint=False,
    max_wait_secs=7200,
    start_standard_services=True
)

Убедитесь, что модель готова к использованию.

Создайте сессию на 'master', восстанавливая или инициализируя модель по мере необходимости, или дождитесь готовности сессии. Если выполняете как главный процесс и start_standard_service установлено в True, также вызовите менеджер сессии для запуска стандартных сервисов.

Аргументы
master Имя TensorFlow-мастера для использования. См. конструктор tf.compat.v1.Session для интерпретации этого параметра.
config Необязательный протокол ConfigProto для настройки сессии, который передается как есть при создании сессии.
wait_for_checkpoint Нужно ли ждать доступности контрольного пункта перед созданием сессии. По умолчанию False.
max_wait_secs Максимальное время ожидания готовности сессии.
start_standard_services Нужно ли запускать стандартные сервисы и обработчики очередей.
Возвращает
Объект Session, который можно использовать для управления моделью.

request_stop

Просмотреть исходный код

request_stop(
    ex=None
)

Запросить остановку потоков координатором.

См. Coordinator.request_stop().

Аргументы
ex Необязательный Exception или кортеж Python exc_info, возвращаемый sys.exc_info(). Если это первый вызов request_stop(), соответствующее исключение записывается и повторно поднимается из join().

should_stop

Просмотреть исходный код

should_stop()

Проверить, запросила ли координатор остановку.

См. Coordinator.should_stop().

Возвращает
True, если координатор запросил остановку, False в противном случае.

start_queue_runners

Просмотреть исходный код

start_queue_runners(
    sess, queue_runners=None
)

Запустить потоки для QueueRunners.

Обратите внимание, что обработчики очереди, собранные в ключе графа QUEUE_RUNNERS, уже автоматически запускаются при создании сессии с помощью надсмотрщика, поэтому если у вас нет несобранных обработчиков очередей для запуска, вам не нужно вызывать это явно.

Аргументы
sess Объект Session.
queue_runners Список QueueRunners. Если не указан, используется список обработчиков очередей, собранных в графе под ключом GraphKeys.QUEUE_RUNNERS.
Возвращает
Список потоков, запущенных для QueueRunners.
Исключения
RuntimeError Если вызывается с включённым eager-выполнением.

совместимость с eager-выполнением

Очереди несовместимы с eager-выполнением. Чтобы получить данные при включенном eager-выполнении, используйте API tf.data.

start_standard_services

Просмотреть исходный код

start_standard_services(
    sess
)

Запустить стандартные сервисы для 'sess'.

Это запускает сервисы в фоновом режиме. Запускаемые сервисы зависят от параметров конструктора и могут включать:

  • Поток Summary, вычисляющий сводки каждые save_summaries_secs.
  • Поток Checkpoint, сохраняющий модель каждые save_model_secs.
  • Поток StepCounter, измеряющий время шага.
Аргументы
sess Сессия.
Возвращает
Список потоков, выполняющих стандартные сервисы. Вы можете использовать координатор Supervisor для присоединения к этим потокам: sv.coord.Join()
Исключения
RuntimeError Если вызывается с неглавным Supervisor.
ValueError Если не был передан logdir в конструктор, так как сервисам необходим каталог журнала.

stop

Просмотреть исходный код

stop(
    threads=None, close_summary_writer=True, ignore_live_threads=False
)

Остановить сервисы и координатор.

Это не закрывает сессию.

Аргументы
threads Необязательный список потоков, к которым присоединиться с помощью координатора. Если пропущен, по умолчанию используются потоки, выполняющие стандартные сервисы, потоки, запущенные для QueueRunners, и потоки, запущенные методом loop(). Чтобы дождаться дополнительных потоков, передайте список в этом параметре.
close_summary_writer Закрыть ли summary_writer. По умолчанию True, если запись сводок создана надсмотрщиком, False в противном случае.
ignore_live_threads Если True игнорирует потоки, которые остаются запущенными после периода ожидания при присоединении к потокам через координатор, вместо того, чтобы поднимать RuntimeError.

stop_on_exception

Просмотреть исходный код

stop_on_exception()

Обработчик контекста для остановки надсмотрщика при возникновении исключения.

См. Coordinator.stop_on_exception().

Возвращает
Обработчик контекста.

summary_computed

Просмотреть исходный код

summary_computed(
    sess, summary, global_step=None
)

Указать, что сводка была вычислена.

Аргументы
sess Объект Session.
summary Протокол Summary или строка, содержащая сериализованный протокол Summary.
global_step Целое число. Глобальный шаг, с которым связана эта сводка. Если None, он будет пытаться получить текущий шаг.
Исключения
TypeError если 'summary' не является протоколом Summary или строкой.
RuntimeError если Supervisor был создан без logdir.

wait_for_stop

Просмотреть исходный код

wait_for_stop()

Блокировать ожидание остановки координатора.

Переменные класса
USE_DEFAULT 0

© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/train/Supervisor

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API