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. |
| Возвращает | |
|---|---|
Менеджер контекста, который возвращает 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