Accelerate documentation

Quy trình thực thi

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

Quy trình thực thi

Khi làm việc với các hệ thống huấn luyện phân tán, việc quản lý cách và thời điểm các tiến trình được thực thi trên các GPU là rất quan trọng. Một số tiến trình hoàn thành nhanh hơn những tiến trình khác, và một số tiến trình không nên bắt đầu nếu các tiến trình khác chưa hoàn tất. Accelerate cung cấp các công cụ để điều phối thời điểm thực thi các tiến trình nhằm đảm bảo mọi thứ vẫn được đồng bộ hóa trên tất cả các thiết bị.

Tutorial này sẽ hướng dẫn bạn cách thực thi một tiến trình trên chỉ một máy và cách trì hoãn việc thực thi cho đến khi tất cả các tiến trình đã đạt đến một điểm nhất định.

Chạy trên một tiến trình

Một số đoạn mã chỉ cần được thực thi một lần trên một máy cụ thể, chẳng hạn như in một câu lệnh nhật ký hoặc chỉ hiển thị một thanh tiến trình trên tiến trình chính cục bộ.

câu lệnh
function

Bạn nên sử dụng accelerator.is_local_main_process để chỉ định các đoạn mã chỉ cần được thực thi một lần.

from tqdm.auto import tqdm

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

Bạn cũng có thể bọc một câu lệnh bằng accelerator.is_local_main_process.

Đối với các câu lệnh print độc lập không được bọc trong accelerator.is_local_main_process, hãy thay thế print bằng phương thức print() của Accelerate để chỉ in ra một lần cho mỗi tiến trình.

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

Bạn cũng có thể chỉ định cho Accelerate thực thi mã một lần trên tất cả các tiến trình bất kể số lượng máy. Điều này hữu ích nếu bạn đang tải lên Hub một mô hình cuối cùng.

statement
function

Bạn nên sử dụng accelerator.is_main_process để chỉ định các đoạn mã chỉ nên được thực thi một lần trên tất cả các tiến trình.

if accelerator.is_main_process:
    repo.push_to_hub()

Thực thi trên một tiến trình cụ thể

Accelerate cũng có thể giúp bạn thực thi các hàm chỉ nên được thực thi trên một tiến trình cụ thể hoặc một chỉ mục tiến trình cục bộ.

quá trình cụ thể
quá trình cục bộ

Sử dụng phương thức on_process() và chỉ định chỉ số tiến trình để thực thi một hàm trên đó.

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

Hoãn thực thi

Khi bạn chạy script trên nhiều GPU cùng lúc, một số đoạn mã có thể được thực thi nhanh hơn những đoạn khác. Bạn có thể cần chờ tất cả các tiến trình đạt đến một điểm nhất định trước khi thực thi bộ lệnh tiếp theo. Ví dụ, bạn không nên lưu mô hình trước khi đảm bảo rằng mọi tiến trình đã hoàn tất việc huấn luyện.

Để thực hiện điều này, hãy thêm wait_for_everyone() vào mã của bạn. Điều này sẽ chặn tất cả các tiến trình đã hoàn thành trước đó tiếp tục cho đến khi tất cả các tiến trình còn lại đạt đến cùng một điểm (điều này không có tác dụng nếu bạn đang chạy trên một GPU hoặc CPU duy nhất).

accelerator.wait_for_everyone()
Update on GitHub