πŸ€— Accelerate: ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ PyTorch-скрипт Π½Π° любом ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π΅Π· Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ

πŸ€— Accelerate: ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ PyTorch-скрипт Π½Π° любом ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ Π±Π΅Π· Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Accelerate ΠΎΡ‚ Hugging Face позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ PyTorch-скрипты Π½Π° CPU, GPU ΠΈ TPU с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ измСнСниями. Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ всСго ΠΏΡΡ‚ΡŒ строк для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ распрСдСлСнного обучСния ΠΈ mixed precision.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ πŸ€— Accelerate ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½

πŸ€— Accelerate - это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ Hugging Face, которая Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ: ваш PyTorch-скрипт Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Π΅, Π½ΠΎ ломаСтся ΠΈΠ»ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ пСрСписывания ΠΏΡ€ΠΈ запускС Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… GPU ΠΈΠ»ΠΈ TPU. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° выступаСт ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ ΠΌΠ΅ΠΆΠ΄Ρƒ вашим ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. Π’Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ скрипт ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Accelerate сам разбираСтся, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ вычислСния - Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ CPU, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ GPU ΠΈΠ»ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ TPU-кластСр.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΠ»ΡŒΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ управляСт Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΠ½Π΄ΠΈΡ†ΠΈΠΎΠ½Π΅Ρ€ΠΎΠΌ ΠΈ ΠΌΡƒΠ·Ρ‹ΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΌ Π±Π΅Π· пСрСнастройки. Accelerate Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС с вашим ΠΊΠΎΠ΄ΠΎΠΌ: ΠΎΠ΄Π½Π° кодовая Π±Π°Π·Π° для всСх ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΆΠ΅Π»Π΅Π·Π°. Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запуска ΠΈ ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ скрипт ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π½ΠΎΠ²ΡƒΡŽ срСду.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° появилась ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Ρ€Π°ΡΡ‚ΡƒΡ‰ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ инфраструктуры для обучСния нСйросСтСй. Hugging Face ΡƒΠΆΠ΅ Π΄ΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ слоТныС Π²Π΅Ρ‰ΠΈ доступными, ΠΈ Accelerate ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ эту линию - Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² области распрСдСлённого обучСния.

Главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΠΎΡ‡Π΅ΠΌΡƒ распрСдСлСнноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ - это боль

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ распрСдСлённого обучСния Π² PyTorch Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выходят Π΄Π°Π»Π΅ΠΊΠΎ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ машинного обучСния. НуТно Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ process group Ρ‡Π΅Ρ€Π΅Π· torch.distributed.init_process_group, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ backend (NCCL для GPU, Gloo для CPU), ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния MASTER_ADDR, MASTER_PORT, RANK ΠΈ WORLD_SIZE. Ошибка Π² любой ΠΈΠ· этих ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… - ΠΈ скрипт ΠΏΠ°Π΄Π°Π΅Ρ‚ с нСвнятной диагностикой.

МодСль Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² DistributedDataParallel, Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π΄Π°Π½Π½Ρ‹Ρ… - Π² DistributedSampler, Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ часто Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… манипуляций с Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ GPU Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π΅ просто ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ числа Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС, Π° пСрСписываниС Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части ΠΊΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° TPU - это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ всСлСнная с torch_xla ΠΈ своСй спСцификой.

Mixed precision добавляСт Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ слой слоТности: Π½ΡƒΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ GradScaler, ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ точности, ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ вСса. Всё это - ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Π·Π°Π΄Π°Ρ‡Π΅ обучСния ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅Ρ‚ часы ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Accelerate Π·Π°Π±ΠΈΡ€Π°Π΅Ρ‚ эту Ρ€ΡƒΡ‚ΠΈΠ½Ρƒ Π½Π° сСбя.

Как Accelerate ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Тизнь: Ρ‚Π΅ самыС ΠΏΡΡ‚ΡŒ строк

Accelerate Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Π’Ρ‹ добавляСтС Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ скрипт Ρ€ΠΎΠ²Π½ΠΎ ΠΏΡΡ‚ΡŒ логичСских шагов, ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сама Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ ΠΏΠΎΠ΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. Π¦ΠΈΠΊΠ» обучСния остаётся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄ вашим ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ - Accelerate Π½Π΅ прячСт Π΅Π³ΠΎ Π·Π° абстракциями ΠΈ Π½Π΅ навязываСт свой ΡΡ‚ΠΈΠ»ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°: Π±Ρ‹Π»ΠΎ - стало

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ PyTorch-скрипт для обучСния Π½Π° ΠΎΠ΄Π½ΠΎΠΌ GPU выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

model = MyModel()
optimizer = torch.optim.Adam(model.parameters())
dataloader = DataLoader(dataset, batch_size=32)

for batch in dataloader:
    outputs = model(batch)
    loss = loss_fn(outputs, targets)
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

Π’ΠΎΡ‚ ΠΆΠ΅ скрипт с Accelerate ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

from accelerate import Accelerator

accelerator = Accelerator()
model, optimizer, dataloader = accelerator.prepare(
    model, optimizer, dataloader
)

for batch in dataloader:
    outputs = model(batch)
    loss = loss_fn(outputs, targets)
    accelerator.backward(loss)
    optimizer.step()
    optimizer.zero_grad()

Π Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Π˜ΠΌΠΏΠΎΡ€Ρ‚ Accelerator - это Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ экзСмпляра accelerator автоматичСски опрСдСляСт доступноС ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ распрСдСлённоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Ссли Π½ΡƒΠΆΠ½ΠΎ. Π’Ρ‹Π·ΠΎΠ² accelerator.prepare() ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ модСль, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ - DistributedDataParallel для multi-GPU, XLA для TPU ΠΈΠ»ΠΈ оставляСт ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ для CPU. Π—Π°ΠΌΠ΅Π½Π° loss.backward() Π½Π° accelerator.backward(loss) ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈ mixed precision. Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Настройка окруТСния Π±Π΅Π· Π±ΠΎΠ»ΠΈ: CLI-Π»Π°ΡƒΠ½Ρ‡Π΅Ρ€ ΠΈ конфигурация

Accelerate поставляСтся с ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, которая снимаСт Π³ΠΎΠ»ΠΎΠ²Π½ΡƒΡŽ боль настройки окруТСния. Команда accelerate config запускаСт ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ опрос: ΠΎΠ½Π° ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅, сколько GPU доступно, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ mixed precision ΠΈ ΠΊΠ°ΠΊΠΎΠΉ точности (fp16 ΠΈΠ»ΠΈ bf16), Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠžΡ‚Π²Π΅Ρ‚Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

ПослС настройки скрипт запускаСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ: accelerate launch my_script.py. Никаких torch.distributed.launch с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌΠΈ списками Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€ΡƒΡ‡Π½Ρ‹Ρ… --nproc_per_node. Accelerate сам ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈ пСрСдаст Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ всСм процСссам. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ с локальной ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° кластСр? ΠŸΠΎΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» - ΠΊΠΎΠ΄ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Mixed precision: ускорСниС обучСния Π² ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΠΈΠΊΠΎΠ²

Mixed precision - это Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒ вычислСний выполняСтся Π² 16-Π±ΠΈΡ‚Π½ΠΎΠΉ точности (float16 ΠΈΠ»ΠΈ bfloat16), Π° Ρ‡Π°ΡΡ‚ΡŒ - Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΉ. Π­Ρ‚ΠΎ ускоряСт ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π² 1,5-3 Ρ€Π°Π·Π° ΠΈ сниТаСт ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ Π±Π΅Π· Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства ΠΌΠΎΠ΄Π΅Π»ΠΈ. РаньшС для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ mixed precision Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ torch.cuda.amp.GradScaler ΠΈ autocast.

Π‘ Accelerate Π²Ρ‹ просто Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ fp16 ΠΈΠ»ΠΈ bf16 ΠΏΡ€ΠΈ настройкС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° сама Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ autocast Π² Π½ΡƒΠΆΠ½Ρ‹Π΅ мСста ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹. Код ΠΌΠΎΠ΄Π΅Π»ΠΈ остаётся Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ - Π²Ρ‹ Π½Π΅ добавляСтС Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ контСкстного ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π°.

Accelerate ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ распрСдСлСнного обучСния: сравнСниС

ΠŸΡ€ΠΈ Ρ€ΡƒΡ‡Π½ΠΎΠΉ настройкС torch.distributed Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΡˆΠ΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ: rank процСсса, world size, backend ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ², распрСдСлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ сэмплСрам ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚Π°ΠΌΠΈ. ΠžΠ±ΡŠΡ‘ΠΌ шаблонного ΠΊΠΎΠ΄Π° Π»Π΅Π³ΠΊΠΎ достигаСт 50-100 строк, ΠΈ каТдая строка - ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник ошибки.

Accelerate сокращаСт этот ΠΎΠ±ΡŠΡ‘ΠΌ Π΄ΠΎ пяти строк ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DistributedDataParallel ΠΈΠ»ΠΈ XLA. ΠŸΡ€ΠΈ этом Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ прячСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹: Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ accelerator.device, accelerator.print() (которая ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ процСссС) ΠΈΠ»ΠΈ accelerator.save_state() для сохранСния Ρ‡Π΅ΠΊΠΏΠΎΠΈΠ½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΈ простотС автоматичСского.

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с большими модСлями, Accelerate интСгрируСтся с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ экономии памяти, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ блоковая Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ совмСстно с DeepSpeed для Π΅Ρ‰Ρ‘ Π±ΠΎΠ»Π΅Π΅ эффСктивного распрСдСлСния рСсурсов.

Π‘ Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ: установка ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги

Установка Accelerate выполняСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

pip install accelerate

ПослС установки настройтС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ своё ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅:

accelerate config

ΠžΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ Π½Π° вопросы ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ - ΠΎΠ½Π° спросит ΠΏΡ€ΠΎ Ρ‚ΠΈΠΏ устройства, количСство GPU, mixed precision ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ сохранится Π² Ρ„Π°ΠΉΠ» default_config.yaml Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ~/.cache/huggingface/accelerate/.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π° тСстовом скриптС:

accelerate test

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° запустит встроСнный тСст, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ настройки распрСдСлённого окруТСния. Если тСст ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, ваш скрипт Π³ΠΎΡ‚ΠΎΠ² ΠΊ запуску:

accelerate launch your_script.py

Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΎΠΉ настройки - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π³ΠΈΠΏΠ΅Ρ€ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с Ray Tune - Accelerate Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ интСгрируСтся с внСшними инструмСнтами, Π½Π΅ трСбуя ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½.

ΠšΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Accelerate: сцСнарии использования

Accelerate Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… ситуациях. Π’Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ GPU, Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° нСсколько ΠΊΠ°Ρ€Ρ‚ ΠΈΠ»ΠΈ кластСр - Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° избавляСт ΠΎΡ‚ нСобходимости ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅. Π’Ρ‹ часто ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚Π΅ΡΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ локальной машиной для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌ кластСром для ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ обучСния - достаточно ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ TPU, интСграция PyTorch/XLA с Hugging Face ΡƒΠΆΠ΅ доступна, Π½ΠΎ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ спСцифику torch_xla - Accelerate скрываСт эти Π΄Π΅Ρ‚Π°Π»ΠΈ Π·Π° Π΅Π΄ΠΈΠ½Ρ‹ΠΌ интСрфСйсом. Π’Ρ‹ Ρ†Π΅Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ обучСния ΠΈ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π΄ΠΈΠΊΡ‚ΠΎΠ²Π°Π», ΠΊΠ°ΠΊ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ - Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π΅Ρ‚ Π²Π°ΡˆΡƒ Π»ΠΎΠ³ΠΈΠΊΡƒ.

Accelerate Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ вас Π±Ρ‹Ρ‚ΡŒ экспСртом Π² распрСдСлённых систСмах. Он Π±Π΅Ρ€Ρ‘Ρ‚ Π½Π° сСбя ΠΈΠ½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ Ρ€ΡƒΡ‚ΠΈΠ½Ρƒ ΠΈ оставляСт Π²Π°ΠΌ Π³Π»Π°Π²Π½ΠΎΠ΅ - ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π­Ρ‚ΠΎ инструмСнт для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° сути Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Π½Π΅ Π½Π° Π±ΠΎΡ€ΡŒΠ±Π΅ с конфигурациями ΠΆΠ΅Π»Π΅Π·Π°.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, ΠΊΠΎΠΌΡƒ пригодится

Бсылка сохранит вСсь ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±Π΅Π· сокращСний.

По ΠΏΠΎΡ‡Ρ‚Π΅

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π½Π΅Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ? Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ