0Pricing
Learn AI with Python · 강의

AMP를 활용한 혼합 정밀도 학습

torch.cuda.amp.autocast(), GradScaler, FP16과 BF16의 차이, 메모리 절약, 속도 향상을 다룹니다.

AMP를 활용한 혼합 정밀도 학습은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

혼합 정밀도란 무엇인가

혼합 정밀도 학습은 대부분의 연산을 32비트 부동소수점(FP32) 대신 16비트 부동소수점(FP16)으로 실행합니다. FP16은 메모리를 절반만 사용하고 최신 GPU 텐서 코어에서 더 빠르게 실행되지만, 안정성을 위해 민감한 일부 연산은 FP32로 유지됩니다.

이점

혼합 정밀도를 사용하면 다음과 같은 이점이 있습니다:

  • 메모리를 약 2배 절약하여 더 큰 배치나 모델을 사용할 수 있습니다
  • 텐서 코어에서 행렬 곱셈이 더 빠릅니다
  • 올바르게 사용하면 최종 모델 정확도가 거의 또는 전혀 떨어지지 않습니다

FP16 언더플로 문제

FP16은 표현 범위가 좁습니다. 작은 그래디언트 값이 0으로 언더플로되어 학습이 조용히 중단될 수 있습니다. 이것이 혼합 정밀도가 해결해야 하는 핵심 과제이며, 모든 값을 FP16으로 단순 변환할 수 없는 이유입니다.

torch.cuda.amp

PyTorch의 Automatic Mixed Precision (AMP)은 두 가지 도구로 세부 사항을 처리합니다. autocast는 연산마다 정밀도를 선택하고, GradScaler는 그래디언트 언더플로를 방지합니다.

import torch
from torch.cuda.amp import autocast, GradScaler

autocast 컨텍스트

순전파를 autocast()로 감싸십시오. 이 안에서 PyTorch는 각 연산을 가장 안전한 정밀도로 자동 실행합니다. 예를 들어 행렬 곱셈은 FP16으로, 소프트맥스와 손실 같은 감소 연산은 FP32로 실행합니다.

with autocast():
    output = model(x)
    loss = criterion(output, y)

GradScaler 소개

GradScaler는 역전파 전에 손실에 큰 스케일 계수를 곱해 언더플로에 대응합니다. 이렇게 하면 작은 그래디언트가 FP16에서 표현 가능한 범위로 이동하며, 최적화기 step 전에 스케일이 제거됩니다.

scaler = GradScaler()

손실 스케일링

scaler.scale(loss).backward()는 손실을 크게 조정한 다음 역전파를 실행합니다. 그 결과 그래디언트도 조정되어 작은 값이 사라지지 않게 됩니다.

scaler.scale(loss).backward()

scaler.step

scaler.step(optimizer)은 먼저 그래디언트를 실제 크기로 되돌린 다음, inf나 NaNs가 나타나지 않은 경우에만 optimizer.step()을 호출합니다. 그래디언트가 오버플로되면 해당 step을 건너뜁니다.

scaler.step(optimizer)

scaler.update

scaler.update()는 다음 반복을 위해 스케일 계수를 조정합니다. step이 성공하면 스케일을 높이고 오버플로가 발생하면 낮춥니다. 이러한 적응형 스케일링은 학습을 자동으로 안정적으로 유지합니다.

scaler.update()

전체 AMP 학습 반복문

이 요소들을 결합하면 완전한 혼합 정밀도 학습 step이 됩니다.

scaler = GradScaler()
for x, y in loader:
    x, y = x.cuda(), y.cuda()
    optimizer.zero_grad()
    with autocast():
        out = model(x)
        loss = criterion(out, y)
    scaler.scale(loss).backward()
    scaler.step(optimizer)
    scaler.update()

실용적인 팁

다음 사항을 기억하십시오:

  • 스케일 조정된 손실에 대해서만 backward()를 호출하십시오
  • autocast는 순전파만 감싸며, 역전파나 최적화기 step은 감싸지 않습니다
  • AMP는 텐서 코어 GPU에서 특히 효과적이며, 오래된 하드웨어에서는 이점이 더 작습니다

빠른 확인

AMP에 대해 배운 내용을 확인해 보십시오.

복습

AMP를 사용한 혼합 정밀도 학습을 배웠습니다:

  • autocast()는 순전파에서 연산마다 FP16 또는 FP32를 선택합니다
  • GradScaler는 그래디언트 언더플로를 방지하도록 손실을 스케일 조정합니다
  • 주기는 scaler.scale(loss).backward(), scaler.step(optimizer), scaler.update()입니다
  • 결과: 메모리를 약 2배 절약하고 학습 속도를 높입니다

자주 묻는 질문

“AMP를 활용한 혼합 정밀도 학습” 강의는 무료인가요?

네 — “AMP를 활용한 혼합 정밀도 학습” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.

“AMP를 활용한 혼합 정밀도 학습”에서 뭘 배우나요?

torch.cuda.amp.autocast(), GradScaler, FP16과 BF16의 차이, 메모리 절약, 속도 향상을 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“AMP를 활용한 혼합 정밀도 학습” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. DataParallel을 활용한 다중 GPU 학습
  2. DistributedDataParallel(DDP)
  3. AMP를 활용한 혼합 정밀도 학습
  4. Hugging Face Accelerate를 활용한 효율적인 학습
← Learn AI with Python(으)로 돌아가기