Pelatihan Presisi Campuran dengan AMP
torch.cuda.amp.autocast(), GradScaler, FP16 vs BF16, penghematan memori, peningkatan kecepatan.
Pelatihan Presisi Campuran dengan AMP adalah pelajaran Learn AI with Python gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Learn AI with Python, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa Itu Presisi Campuran
Pelatihan dengan presisi campuran menjalankan sebagian besar operasi menggunakan bilangan titik mengambang 16-bit (FP16), bukan 32-bit (FP32). FP16 menggunakan separuh memori dan berjalan lebih cepat pada inti tensor GPU modern, sementara beberapa operasi yang sensitif tetap menggunakan FP32 demi kestabilan.
Manfaatnya
Presisi campuran memberi Anda:
- penghematan memori sekitar 2x, sehingga memungkinkan kumpulan data atau model yang lebih besar
- Perkalian matriks yang lebih cepat pada inti tensor
- Hanya sedikit atau tidak ada penurunan akurasi model akhir jika dilakukan dengan benar
Masalah Nilai Terlalu Kecil pada FP16
FP16 memiliki rentang yang sempit. Nilai gradien yang kecil dapat menjadi nol karena terlalu kecil, sehingga pembelajaran berhenti tanpa disadari. Inilah tantangan utama yang harus diatasi presisi campuran dan alasan kita tidak dapat begitu saja mengubah semuanya menjadi FP16.
torch.cuda.amp
Automatic Mixed Precision (AMP) dari PyTorch menangani detailnya dengan dua alat: autocast memilih presisi untuk setiap operasi, sedangkan GradScaler mencegah gradien menjadi terlalu kecil.
import torch
from torch.cuda.amp import autocast, GradScalerKonteks autocast
Bungkus lintasan maju dengan autocast(). Di dalamnya, PyTorch secara otomatis menjalankan setiap operasi dengan presisi yang paling aman: perkalian matriks dalam FP16, sedangkan reduksi seperti softmax dan kerugian dalam FP32.
with autocast():
output = model(x)
loss = criterion(output, y)Memperkenalkan GradScaler
GradScaler mengatasi gradien yang terlalu kecil dengan mengalikan kerugian menggunakan faktor skala besar sebelum propagasi mundur. Hal ini menggeser gradien kecil ke rentang yang dapat direpresentasikan oleh FP16; skala tersebut dihapus sebelum langkah pengoptimal.
scaler = GradScaler()Menskalakan Kerugian
scaler.scale(loss).backward() memperbesar skala kerugian, lalu menjalankan propagasi mundur. Gradien yang dihasilkan juga diskalakan, sehingga nilai kecil tidak menghilang.
scaler.scale(loss).backward()scaler.step
scaler.step(optimizer) terlebih dahulu mengembalikan skala gradien ke besarannya yang sebenarnya, lalu memanggil optimizer.step(), tetapi hanya jika tidak ada nilai tak hingga atau NaNs. Jika gradien meluap, langkah tersebut dilewati.
scaler.step(optimizer)scaler.update
scaler.update() menyesuaikan faktor skala untuk iterasi berikutnya: faktor tersebut diperbesar ketika langkah berhasil dan diperkecil setelah terjadi luapan. Penskalaan adaptif ini menjaga kestabilan pelatihan secara otomatis.
scaler.update()Perulangan AMP Lengkap
Dengan menggabungkan semua bagian, Anda mendapatkan satu langkah pelatihan dengan presisi campuran yang lengkap.
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()Tips Praktis
Ingat hal-hal berikut:
- Hanya panggil
backward()pada kerugian yang telah diskalakan - autocast hanya membungkus lintasan maju, bukan propagasi mundur atau langkah pengoptimal
- AMP sangat bermanfaat pada GPU dengan inti tensor; peningkatannya lebih kecil pada perangkat keras lama
Pemeriksaan Singkat
Uji pengetahuan Anda tentang AMP.
Ringkasan
Anda telah mempelajari pelatihan dengan presisi campuran menggunakan AMP:
autocast()memilih FP16 atau FP32 untuk setiap operasi dalam lintasan maju- GradScaler menskalakan kerugian untuk mencegah gradien menjadi terlalu kecil
- Siklusnya adalah
scaler.scale(loss).backward(),scaler.step(optimizer),scaler.update() - Hasilnya: penghematan memori sekitar 2x dan pelatihan yang lebih cepat
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pelatihan Presisi Campuran dengan AMP” gratis?
Ya — teks lengkap “Pelatihan Presisi Campuran dengan AMP” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Learn AI with Python, upgrade ke CoddyKit PRO. Kursus Learn AI with Python mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pelatihan Presisi Campuran dengan AMP”?
torch.cuda.amp.autocast(), GradScaler, FP16 vs BF16, penghematan memori, peningkatan kecepatan. Kamu berlatih Learn AI with Python dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Learn AI with Python?
Tidak diperlukan pengalaman sebelumnya. Learn AI with Python di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pelatihan Presisi Campuran dengan AMP” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Learn AI with Python ini?
Ya. Setiap pelajaran Learn AI with Python menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pelatihan Multi-GPU dengan DataParallel
- DistributedDataParallel (DDP)
- Pelatihan Presisi Campuran dengan AMP
- Pelatihan Efisien dengan Hugging Face Accelerate