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 LitServe: Framework Serving Model AI yang Cepat dan Mudah

Tutorial LitServe: Framework Serving Model AI yang Cepat dan Mudah Pendahuluan LitServe adalah framework open-source dar...

Tutorial ClearML: Platform MLOps Open-Source untuk Experiment Tracking dan Pipeline Automation

Tutorial ClearML: Platform MLOps Open-Source untuk Experiment Tracking dan Pipeline Automation ClearML adalah platform M...

Tutorial Metaflow: Framework MLOps dari Netflix untuk Data Science

Tutorial Metaflow: Framework MLOps dari Netflix untuk Data Science Metaflow adalah framework open-source yang dikembangk...

Tutorial Hydra: Manajemen Konfigurasi yang Elegan untuk ML

Hydra: Manajemen Konfigurasi yang Rapi untuk Aplikasi ML dan Python Kebanyakan proyek machine learning dimulai dari satu...