Accelerate documentation

Процесс выполнения

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Процесс выполнения

При работе с системами распределённого обучения важно управлять тем, как и когда процессы выполняются на GPU. Некоторые процессы завершаются быстрее других, а некоторые не должны начинаться, пока другие не завершены. Accelerate предоставляет инструменты для оркестрации момента выполнения процессов, чтобы обеспечить синхронизацию на всех устройствах.

В этом руководстве вы узнаете, как запускать процесс только на одном компьютере и как откладывать выполнение до тех пор, пока все процессы не достигнут определённой точки.

Выполнение в одном процессе

Определённый код нужно выполнять только один раз на конкретной машине, например, для вывода строки журнала или отображения одной полосы прогресса в локальном главном процессе.

statements
function

Для указания кода, который должен выполняться только один раз, следует использовать accelerator.is_local_main_process.

from tqdm.auto import tqdm

progress_bar = tqdm(range(args.max_train_steps), disable=not accelerator.is_local_main_process)

Вы также можете обернуть оператор в accelerator.is_local_main_process.

Для отдельных операторов print, не обёрнутых в accelerator.is_local_main_process, замените print на метод print() Accelerate, чтобы вывод выполнялся только один раз на процесс.

if accelerator.is_local_main_process:
    print("Accelerate is the best")

Вы также можете указать Accelerate выполнять код один раз на всех процессах, независимо от количества машин. Это полезно, если вы загружаете итоговую модель в Hub.

statement
function

Для указания кода, который должен выполняться только один раз во всех процессах, следует использовать accelerator.is_main_process.

if accelerator.is_main_process:
    repo.push_to_hub()

Выполнить на конкретном процессе

Accelerate также позволяет выполнять функции, которые должны запускаться только на определённом процессе или локальном индексе процесса.

конкретный процесс
локальный процесс

Используйте метод on_process() и укажите индекс процесса, на котором следует выполнить функцию.

@accelerator.on_process(process_index=0)
def do_my_thing():
    "Something done on process index 0"
    do_thing_on_index_zero()

Отложенное выполнение

При запуске скрипта на нескольких GPU одновременно часть кода может выполняться быстрее, чем другая. Возможно, потребуется дождаться, пока все процессы не достигнут определённой точки, прежде чем выполнять следующий набор инструкций. Например, не следует сохранять модель, не убедившись, что каждый процесс завершил обучение.

Для этого добавьте wait_for_everyone() в ваш код. Это блокирует все процессы, которые завершили работу раньше, от дальнейшего выполнения, пока все остальные процессы не достигнут той же точки (это не имеет эффекта, если вы работаете на одном GPU или CPU).

accelerator.wait_for_everyone()
Update on GitHub