PyTorch로 AI 모델 효율적으로 학습시키기
Dennis Lee
Data Engineer, Amazon



for batch in dataloader:optimizer.zero_grad()inputs, targets = batch inputs = inputs.to(device) targets = targets.to(device)outputs = model(inputs)loss = outputs.lossloss.backward()optimizer.step() scheduler.step()
.to(device)Accelerator는 분산 훈련 인터페이스를 제공합니다from accelerate import Accelerator
accelerator = Accelerator(
device_placement=True
)
device_placement (bool, 기본값 True): 기본적으로 디바이스 배치를 처리from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained(
"distilbert-base-cased", return_dict=True)
Adam으로 모델 파라미터 최적화from torch.optim import Adam
optimizer = Adam(params=model.parameters(), lr=2e-5)
from transformers import get_linear_schedule_with_warmup lr_scheduler = get_linear_schedule_with_warmup( optimizer=optimizer,num_warmup_steps=num_warmup_steps,num_training_steps=num_training_steps)
optimizer (obj): Adam 등 PyTorch 옵티마이저num_warmup_steps (int): lr을 선형 증가시킬 스텝 수, int(num_training_steps * 0.1)로 설정num_training_steps (int): 총 훈련 스텝 수, len(train_dataloader) * num_epochs로 설정prepare 메서드가 디바이스 배치를 처리합니다model, optimizer, dataloader, lr_scheduler = \ accelerator.prepare(model,optimizer,dataloader,lr_scheduler)
for batch in dataloader:optimizer.zero_grad()inputs, targets = batch inputs = inputs.to(device) targets = targets.to(device)
for batch in dataloader:optimizer.zero_grad()inputs, targets = batch
for batch in dataloader:optimizer.zero_grad()inputs, targets = batchoutputs = model(inputs)loss = outputs.loss loss.backward()
for batch in dataloader:optimizer.zero_grad()inputs, targets = batchoutputs = model(inputs) loss = outputs.lossaccelerator.backward(loss)optimizer.step() scheduler.step()
loss.backward를 accelerator로 대체Accelerator 적용 전
inputs.to(device)targets.to(device)loss.backward()로 그래디언트 계산Accelerator 적용 후
accelerator.prepare(model)accelerator.prepare(dataloader)accelerator.backward(loss)로 그래디언트 동기화 처리PyTorch로 AI 모델 효율적으로 학습시키기