π€ 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 Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ Π²Π°Ρ Π±ΡΡΡ ΡΠΊΡΠΏΠ΅ΡΡΠΎΠΌ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΠ½ Π±Π΅ΡΡΡ Π½Π° ΡΠ΅Π±Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΡΡΡΠΈΠ½Ρ ΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π°ΠΌ Π³Π»Π°Π²Π½ΠΎΠ΅ - ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ, Π° Π½Π΅ Π½Π° Π±ΠΎΡΡΠ±Π΅ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ ΠΆΠ΅Π»Π΅Π·Π°.