Tutorial Ray Train & Ray Tune: Training Terdistribusi dan Tuning Hyperparameter

# Ray Train & Ray Tune: Pelatihan Terdistribusi dan Penyetelan Hiperparameter Sebagian besar proyek machine learning dimulai pada satu mesin, dan pada titik tertentu loop pelatihan kehabisan memori,...

By Ruby Abdullah · · tutorial
RayDistributed TrainingHyperparameter TuningPyTorchMLOpsPython

Ray Train & Ray Tune: Pelatihan Terdistribusi dan Penyetelan Hiperparameter

Sebagian besar proyek machine learning dimulai pada satu mesin, dan pada titik tertentu loop pelatihan kehabisan memori, terlalu lama pada satu GPU, atau membutuhkan ratusan percobaan hiperparameter yang tidak mungkin diselesaikan satu proses dalam waktu wajar. Ray Train dan Ray Tune menjawab kedua masalah itu secara langsung: yang pertama menskalakan loop pelatihan yang sudah ada ke beberapa worker dan GPU, dan yang kedua menjalankan banyak proses pelatihan secara paralel untuk menelusuri ruang hiperparameter. Tutorial ini membahas kedua pustaka tersebut dengan satu contoh PyTorch yang konsisten, lalu menunjukkan cara menggabungkannya sehingga Anda dapat menyetel hiperparameter sebuah job pelatihan terdistribusi tanpa menulis ulang kode.

Pengantar Singkat Ray dan Pustaka AI-nya

Ray adalah framework untuk Python terdistribusi. Pada intinya, Ray menyediakan task dan actor yang berjalan di seluruh cluster, ditambah scheduler yang menempatkan pekerjaan pada CPU dan GPU yang tersedia. Di atas inti itu, Ray AI Libraries menyediakan blok bangunan tingkat lebih tinggi untuk kebutuhan machine learning yang umum:

  • Ray Data untuk pemuatan dan prapemrosesan data terdistribusi.
  • Ray Train untuk pelatihan model terdistribusi.
  • Ray Tune untuk pencarian hiperparameter dan orkestrasi eksperimen.
  • Ray Serve untuk penyajian model online (dibahas di tutorial terpisah, jadi di sini hanya disebut sebagai konteks).

Sifat penting di sini adalah kode yang sama berjalan di laptop Anda maupun di cluster multi-node. Anda mengembangkan secara lokal, lalu mengarahkan skrip yang sama ke cluster ketika membutuhkan komputasi lebih besar. Tutorial ini berfokus pada Ray Train dan Ray Tune, yang bersama-sama mencakup tahap pelatihan dan penyetelan dalam alur kerja umum.

Instalasi

Instal Ray dengan ekstra Train dan Tune, ditambah PyTorch:

pip install "ray[train,tune]" torch torchvision

Verifikasi instalasi:

python -c "import ray; from ray import train, tune; print(ray.version)"

Contoh di bawah ditulis untuk Ray 2.x. API Ray Train ditata ulang pada seri 2.x, jadi pastikan Anda tidak memakai rilis di bawah 2.7 yang impornya berbeda.

Ray Train: Dari Satu Node ke Terdistribusi

Titik awal: loop PyTorch biasa

Perhatikan loop pelatihan satu proses yang umum untuk klasifikasi gambar pada FashionMNIST. Belum ada apa pun yang terdistribusi di dalamnya.

import torch

import torch.nn as nn

from torch.utils.data import DataLoader

from torchvision import datasets, transforms

def buildmodel():

return nn.Sequential(

nn.Flatten(),

nn.Linear(28 28, 256),

nn.ReLU(),

nn.Linear(256, 128),

nn.ReLU(),

nn.Linear(128, 10),

)

def trainsinglenode(epochs=5, lr=1e-3, batchsize=64):

transform = transforms.ToTensor()

traindata = datasets.FashionMNIST(

root="./data", train=True, download=True, transform=transform

)

loader = DataLoader(traindata, batchsize=batchsize, shuffle=True)

device = "cuda" if torch.cuda.isavailable() else "cpu"

model = buildmodel().to(device)

optimizer = torch.optim.Adam(model.parameters(), lr=lr)

lossfn = nn.CrossEntropyLoss()

for epoch in range(epochs):

model.train()

for images, labels in loader:

images, labels = images.to(device), labels.to(device)

optimizer.zerograd()

loss = lossfn(model(images), labels)

loss.backward()

optimizer.step()

print(f"epoch {epoch}: last batch loss {loss.item():.4f}")

Kode ini bekerja, tetapi memakai satu proses dan satu device. Untuk melatih lintas beberapa GPU atau beberapa node dengan data-parallelism, kita menyesuaikan loop ini untuk Ray Train.

Mengonversi loop dengan TorchTrainer

Ray Train membungkus fungsi pelatihan Anda dan menjalankan satu salinannya per worker. Setiap worker menangani satu shard data dan menyinkronkan gradien secara otomatis. Perubahannya kecil dan terlokalisasi:

Artikel Terkait

Tutorial Kedro: Pipeline Data Science yang Reproducible dan Terstruktur

Kedro: Pipeline Data Science yang Reproducible dan Mudah Dirawat Sebagian besar proyek data science dimulai dari satu no...

ZenML: Framework Pipeline MLOps yang Modular dan Cloud-Agnostic

ZenML: Framework Pipeline MLOps yang Modular dan Cloud-Agnostic Pendahuluan Membangun model machine learning yang akurat...

Tutorial Apache Kafka untuk Real-Time ML: Streaming Data Pipeline

Tutorial 13: Apache Kafka untuk Pipeline ML Real-Time Daftar Isi Pendahuluan Prasyarat Memahami Apache Kafka [Menyiapkan...

Tutorial Lengkap Vertex AI: Platform ML Terpadu Google Cloud

Tutorial Lengkap Vertex AI: Platform ML Terpadu di Google Cloud Vertex AI adalah platform machine learning terpadu Googl...