tf.distribute.experimental.TerminationConfig
Настройка PreemptionCheckpointHandler для различных платформ.
tf.distribute.experimental.TerminationConfig(
termination_watcher_fn=None, exit_fn=None, grace_period=None, save_fn=None
)
Объект TerminationConfig можно создать и передать в tf.distribute.experimental.PreemptionCheckpointHandler, чтобы настроить поведение для конкретной платформы. Он может предоставлять три вида информации:
- Как определить, произойдёт ли вскоре событие завершения
Формат уведомления о завершении и способ его получения различаются в зависимости от платформы. Поэтому PreemptionCheckpointHandler может принимать пользовательскую функцию termination_watcher_fn и многократно выполнять её для проверки уведомления о завершении. termination_watcher_fn должна возвращать True, если уведомление о завершении доступно, и False в противном случае. Функция должна быть нетяжёлой и неблокирующей, чтобы ресурсы можно было корректно очистить, если сигнал завершения так и не будет получен до окончания обучения.
- Как завершить программу
Пользователь может настроить это с помощью exit_fn, который PreemptionCheckpointHandler выполняет после сохранения контрольной точки, чтобы корректно завершить программу обучения. Для tf.distribute.MultiWorkerMirroredStrategy требуется перезапуск, чтобы сбросить состояние программы. Однако пользовательский вариант exit_fn может упростить перезапуск и сделать процесс обучения более плавным. Каким образом? Возможно, платформа распознаёт RESTART_CODE как сигнал автоматического перезапуска программы; или, возможно, у пользователя есть управляющий скрипт, запускающий обучение, в котором можно настроить автоматический перезапуск программы, если она завершится с этим RESTART_CODE. В обоих случаях настройка exit_fn в значение sys.exit(RESTART_CODE) обеспечивает непрерывность обучения.
- Сколько времени есть у
PreemptionCheckpointHandlerс момента получения уведомления о событии завершения до фактического завершения
На некоторых платформах этот промежуток может составлять около часа. В таких случаях можно использовать это время для максимально продолжительного обучения перед сохранением контрольной точки и завершением работы. Для этого аргументу grace_period следует передать ненулевое значение. Обратите внимание: если льготный период пользователя не превышает время записи контрольной точки в несколько раз (например, в три раза или больше), мы рекомендуем не настраивать этот аргумент; в таком случае PreemptionCheckpointHandler сразу сохранит контрольную точку и завершит работу.
Поведение по умолчанию:
-
Для платформы Google Borg:
- Автоматическое обнаружение сигнала вытеснения
- Завершение работы с кодом перезапуска, распознаваемым платформой
- Немедленное сохранение контрольной точки и завершение работы
-
Для Google Cloud Platform:
- Автоматическое обнаружение сигнала технического обслуживания.
- Завершение работы с кодом (пользователь может настроить его)
- Автоматическое использование дополнительного периода обучения перед сохранением данных и завершением работы
-
Для других платформ:
- Если
termination_watcher_fn— этоNone, мы будем считатьsignal.SIGTERMсигналом завершения. - Если
exit_fnне настроен, программа завершится с произвольным кодом. - Если
grace_periodне настроен, после получения сигнала завершения мы закончим текущий шаг обучения, сохраним контрольную точку и завершим программу.
- Если
| Аргументы | |
|---|---|
termination_watcher_fn | функция, которую следует многократно выполнять; она возвращает True, если доступен сигнал вытеснения, и False в противном случае. Функция не должна блокироваться в ожидании сигнала вытеснения, поскольку это помешает корректной очистке программы. Пользователям Google Borg или Google Cloud Platform НЕ рекомендуется изменять это значение. |
exit_fn | функция, выполняемая после сохранения контрольной точки и до вытеснения. Обычно она должна иметь вид lambda: sys.exit(RESTART_CODE), где RESTART_CODE зависит от платформы. Пользователям Google Borg НЕ рекомендуется изменять это значение. Пользователи Google Cloud Platform могут настроить его, указав пользовательский вариант RESTART_CODE. |
grace_period | промежуток времени между получением сигнала вытеснения и фактическим вытеснением. Пользователям Google Borg, Google Cloud Platform, а также пользователям с коротким льготным периодом НЕ рекомендуется изменять это значение. |
save_fn | необязательная функция, позволяющая настроить сохранение контрольной точки. Она полезна, если вы хотите передать дополнительные аргументы в tf.train.CheckpointManager.save или tf.train.Checkpoint.save. По умолчанию, если настройка не задана, API сохранит контрольную точку без дополнительных аргументов. |
© 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/distribute/experimental/TerminationConfig