Buckets:

hf-doc-build/doc / transformers /main /ko /accelerate.md
HuggingFaceDocBuilder's picture
|
download
raw
4.44 kB
# πŸ€— Accelerateλ₯Ό ν™œμš©ν•œ λΆ„μ‚° ν•™μŠ΅[[distributed-training-with-accelerate]]
λͺ¨λΈμ΄ μ»€μ§€λ©΄μ„œ 병렬 μ²˜λ¦¬λŠ” μ œν•œλœ ν•˜λ“œμ›¨μ–΄μ—μ„œ 더 큰 λͺ¨λΈμ„ ν›ˆλ ¨ν•˜κ³  ν›ˆλ ¨ 속도λ₯Ό λͺ‡ 배둜 κ°€μ†ν™”ν•˜κΈ° μœ„ν•œ μ „λž΅μœΌλ‘œ λ“±μž₯ν–ˆμŠ΅λ‹ˆλ‹€. Hugging Faceμ—μ„œλŠ” μ‚¬μš©μžκ°€ ν•˜λ‚˜μ˜ 머신에 μ—¬λŸ¬ 개의 GPUλ₯Ό μ‚¬μš©ν•˜λ“  μ—¬λŸ¬ 머신에 μ—¬λŸ¬ 개의 GPUλ₯Ό μ‚¬μš©ν•˜λ“  λͺ¨λ“  μœ ν˜•μ˜ λΆ„μ‚° μ„€μ •μ—μ„œ πŸ€— Transformers λͺ¨λΈμ„ μ‰½κ²Œ ν›ˆλ ¨ν•  수 μžˆλ„λ‘ 돕기 μœ„ν•΄ [πŸ€— Accelerate](https://huggingface.co/docs/accelerate) 라이브러리λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 이 νŠœν† λ¦¬μ–Όμ—μ„œλŠ” λΆ„μ‚° ν™˜κ²½μ—μ„œ ν›ˆλ ¨ν•  수 μžˆλ„λ‘ κΈ°λ³Έ PyTorch ν›ˆλ ¨ 루프λ₯Ό μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆν•˜λŠ” 방법을 μ•Œμ•„λ΄…μ‹œλ‹€.
## μ„€μ •[[setup]]
πŸ€— Accelerate μ„€μΉ˜ μ‹œμž‘ν•˜κΈ°:
```bash
pip install accelerate
```
κ·Έ λ‹€μŒ, `Accelerator` 객체λ₯Ό 뢈러였고 μƒμ„±ν•©λ‹ˆλ‹€. `Accelerator`λŠ” μžλ™μœΌλ‘œ λΆ„μ‚° μ„€μ • μœ ν˜•μ„ κ°μ§€ν•˜κ³  ν›ˆλ ¨μ— ν•„μš”ν•œ λͺ¨λ“  ꡬ성 μš”μ†Œλ₯Ό μ΄ˆκΈ°ν™”ν•©λ‹ˆλ‹€. μž₯μΉ˜μ— λͺ¨λΈμ„ λͺ…μ‹œμ μœΌλ‘œ λ°°μΉ˜ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€.
```py
>>> from accelerate import Accelerator
>>> accelerator = Accelerator()
```
## 가속화λ₯Ό μœ„ν•œ μ€€λΉ„[[prepare-to-accelerate]]
λ‹€μŒ λ‹¨κ³„λŠ” κ΄€λ ¨λœ λͺ¨λ“  ν›ˆλ ¨ 객체λ₯Ό `prepare` λ©”μ†Œλ“œμ— μ „λ‹¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ—¬κΈ°μ—λŠ” ν›ˆλ ¨ 및 평가 λ°μ΄ν„°λ‘œλ”, λͺ¨λΈ 및 μ˜΅ν‹°λ§ˆμ΄μ €κ°€ ν¬ν•¨λ©λ‹ˆλ‹€:
```py
>>> train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare(
... train_dataloader, eval_dataloader, model, optimizer
... )
```
## λ°±μ›Œλ“œ(Backward)[[backward]]
λ§ˆμ§€λ§‰μœΌλ‘œ ν›ˆλ ¨ λ£¨ν”„μ˜ 일반적인 `loss.backward()`λ₯Ό πŸ€— Accelerate의 `backward` λ©”μ†Œλ“œλ‘œ λŒ€μ²΄ν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€:
```py
>>> for epoch in range(num_epochs):
... for batch in train_dataloader:
... outputs = model(**batch)
... loss = outputs.loss
... accelerator.backward(loss)
... optimizer.step()
... lr_scheduler.step()
... optimizer.zero_grad()
... progress_bar.update(1)
```
λ‹€μŒ μ½”λ“œμ—μ„œ λ³Ό 수 μžˆλ“―μ΄, ν›ˆλ ¨ 루프에 μ½”λ“œ λ„€ μ€„λ§Œ μΆ”κ°€ν•˜λ©΄ λΆ„μ‚° ν•™μŠ΅μ„ ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€!
```diff
+ from accelerate import Accelerator
from transformers import AdamW, AutoModelForSequenceClassification, get_scheduler
+ accelerator = Accelerator()
model = AutoModelForSequenceClassification.from_pretrained(checkpoint, num_labels=2)
optimizer = AdamW(model.parameters(), lr=3e-5)
- device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
- model.to(device)
+ train_dataloader, eval_dataloader, model, optimizer = accelerator.prepare(
+ train_dataloader, eval_dataloader, model, optimizer
+ )
num_epochs = 3
num_training_steps = num_epochs * len(train_dataloader)
lr_scheduler = get_scheduler(
"linear",
optimizer=optimizer,
num_warmup_steps=0,
num_training_steps=num_training_steps
)
progress_bar = tqdm(range(num_training_steps))
model.train()
for epoch in range(num_epochs):
for batch in train_dataloader:
- batch = {k: v.to(device) for k, v in batch.items()}
outputs = model(**batch)
loss = outputs.loss
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
progress_bar.update(1)
```
## ν•™μŠ΅[[train]]
κ΄€λ ¨ μ½”λ“œλ₯Ό μΆ”κ°€ν•œ ν›„μ—λŠ” μŠ€ν¬λ¦½νŠΈλ‚˜ Colaboratory와 같은 λ…ΈνŠΈλΆμ—μ„œ ν›ˆλ ¨μ„ μ‹œμž‘ν•˜μ„Έμš”.
### 슀크립트둜 ν•™μŠ΅ν•˜κΈ°[[train-with-a-script]]
μŠ€ν¬λ¦½νŠΈμ—μ„œ ν›ˆλ ¨μ„ μ‹€ν–‰ν•˜λŠ” 경우, λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ ꡬ성 νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ €μž₯ν•©λ‹ˆλ‹€:
```bash
accelerate config
```
Then launch your training with:
```bash
accelerate launch train.py
```
### λ…ΈνŠΈλΆμœΌλ‘œ ν•™μŠ΅ν•˜κΈ°[[train-with-a-notebook]]
Collaboratory의 TPUλ₯Ό μ‚¬μš©ν•˜λ €λŠ” 경우, λ…ΈνŠΈλΆμ—μ„œλ„ πŸ€— Accelerateλ₯Ό μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν›ˆλ ¨μ„ λ‹΄λ‹Ήν•˜λŠ” λͺ¨λ“  μ½”λ“œλ₯Ό ν•¨μˆ˜λ‘œ κ°μ‹Έμ„œ `notebook_launcher`에 μ „λ‹¬ν•˜μ„Έμš”:
```py
>>> from accelerate import notebook_launcher
>>> notebook_launcher(training_function)
```
πŸ€— Accelerate 및 λ‹€μ–‘ν•œ κΈ°λŠ₯에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ [documentation](https://huggingface.co/docs/accelerate)λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

Xet Storage Details

Size:
4.44 kB
Β·
Xet hash:
0beda881f2fe524885a59f2165368dca36ade09d4abb843e4d5fd66672c4b8ef

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.