혼합 정밀도 학습

PyTorch로 AI 모델 효율적으로 학습시키기

Dennis Lee

Data Engineer, Amazon

혼합 정밀도 학습으로 연산 가속화

 

 

메모리 효율성, 통신 효율성, 연산 효율성을 나타내는 아이콘.

PyTorch로 AI 모델 효율적으로 학습시키기

낮은 정밀도로 빠른 연산

FP32와 FP16에서 부동소수점 수의 표현 방식을 보여주는 다이어그램.

PyTorch로 AI 모델 효율적으로 학습시키기

낮은 정밀도로 빠른 연산

FP32와 FP16에서 부동소수점 수의 표현 방식을 보여주는 다이어그램.

PyTorch로 AI 모델 효율적으로 학습시키기

낮은 정밀도로 빠른 연산

FP32와 FP16에서 부동소수점 수의 표현 방식을 보여주는 다이어그램.

PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
  • 언더플로우: 수치가 정밀도 범위 이하로 내려가 0이 되는 현상
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
  • 언더플로우: 수치가 정밀도 범위 이하로 내려가 0이 되는 현상
  • 언더플로우 방지를 위한 손실 스케일링
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
  • 언더플로우: 수치가 정밀도 범위 이하로 내려가 0이 되는 현상
  • 언더플로우 방지를 위한 손실 스케일링
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
  • 언더플로우: 수치가 정밀도 범위 이하로 내려가 0이 되는 현상
  • 언더플로우 방지를 위한 손실 스케일링
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
  • 언더플로우: 수치가 정밀도 범위 이하로 내려가 0이 되는 현상
  • 언더플로우 방지를 위한 손실 스케일링
PyTorch로 AI 모델 효율적으로 학습시키기

혼합 정밀도 학습이란?

혼합 정밀도 학습 단계를 나타내는 다이어그램.

  • 혼합 정밀도 학습: FP16, FP32 연산을 결합하여 학습 속도 향상
  • 언더플로우: 수치가 정밀도 범위 이하로 내려가 0이 되는 현상
  • 언더플로우 방지를 위한 손실 스케일링
PyTorch로 AI 모델 효율적으로 학습시키기

PyTorch 구현

PyTorch, Accelerator, Trainer의 사용 편의성과 커스터마이징 가능성을 비교하는 차트.

PyTorch로 AI 모델 효율적으로 학습시키기

PyTorch를 이용한 혼합 정밀도 학습

scaler = torch.amp.GradScaler()


for batch in train_dataloader: inputs, targets = batch["input_ids"], batch["labels"]
with torch.autocast(device_type="cpu", dtype=torch.float16):
outputs = model(inputs, labels=targets) loss = outputs.loss
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()
PyTorch로 AI 모델 효율적으로 학습시키기

PyTorch에서 Accelerator로

PyTorch, Accelerator, Trainer의 사용 편의성과 커스터마이징 가능성을 비교하는 차트.

PyTorch로 AI 모델 효율적으로 학습시키기

PyTorch에서 Accelerator로

PyTorch, Accelerator, Trainer의 사용 편의성과 커스터마이징 가능성을 비교하는 차트.

PyTorch로 AI 모델 효율적으로 학습시키기

Accelerator를 이용한 혼합 정밀도 학습

accelerator = Accelerator(mixed_precision="fp16")


model, optimizer, train_dataloader, lr_scheduler = \ accelerator.prepare(model, optimizer, train_dataloader, lr_scheduler)
for batch in train_dataloader: inputs, targets = batch["input_ids"], batch["labels"] outputs = model(inputs, labels=targets) loss = outputs.loss accelerator.backward(loss) optimizer.step() optimizer.zero_grad()
PyTorch로 AI 모델 효율적으로 학습시키기

Accelerator에서 Trainer로

PyTorch, Accelerator, Trainer의 사용 편의성과 커스터마이징 가능성을 비교하는 차트.

PyTorch로 AI 모델 효율적으로 학습시키기

Accelerator에서 Trainer로

PyTorch, Accelerator, Trainer의 사용 편의성과 커스터마이징 가능성을 비교하는 차트.

PyTorch로 AI 모델 효율적으로 학습시키기

Trainer를 이용한 혼합 정밀도 학습

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    fp16=True
)

trainer = Trainer( model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["validation"], compute_metrics=compute_metrics, )
trainer.train()
PyTorch로 AI 모델 효율적으로 학습시키기

연습해 봅시다!

PyTorch로 AI 모델 효율적으로 학습시키기

Preparing Video For Download...