Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Fitur ini ada di Beta. Admin ruang kerja dapat mengontrol akses ke fitur ini dari halaman Pratinjau . Lihat Kelola Pratinjau Azure Databricks.
Anda dapat meluncurkan beban kerja terdistribusi di beberapa GPU pada satu simpul menggunakan API Python GPU Tanpa Server. API menyediakan antarmuka terpadu sederhana yang mengabstraksi detail provisi GPU, penyiapan lingkungan, dan distribusi beban kerja. Dengan perubahan kode minimal, Anda dapat dengan mulus berpindah dari pelatihan GPU tunggal ke eksekusi terdistribusi multi-GPU dari notebook yang sama.
Kerangka kerja yang didukung
@distributed API terintegrasi dengan pustaka pelatihan terdistribusi utama:
- PyTorch Distributed Data Parallel (DDP) — Paralelisme data multi-GPU standar.
- Paralel Data Yang Dipecah Sepenuhnya (FSDP) — Pelatihan hemat memori untuk model besar.
- DeepSpeed — Pustaka pengoptimalan Microsoft untuk pelatihan model besar.
serverless_gpu API vs. TorchDistributor
Tabel berikut membandingkan serverless_gpu@distributed API dengan TorchDistributor:
| Feature |
serverless_gpu
@distributed API |
TorchDistributor |
|---|---|---|
| Infrastruktur | Sepenuhnya tanpa server, tidak ada manajemen kluster | Memerlukan kluster Spark dengan pekerja GPU |
| Siapkan | Dekorator tunggal, konfigurasi minimal | Memerlukan kluster Spark dan pengaturan TorchDistributor |
| Dukungan kerangka kerja | PyTorch DDP, FSDP, DeepSpeed | Terutama PyTorch DDP |
| Pemuatan data | Di dalam fungsi dekorator, menggunakan Unity Catalog Volumes | Melalui Spark atau sistem file |
serverless_gpu API adalah pendekatan yang direkomendasikan untuk beban kerja pembelajaran mendalam baru di Databricks. TorchDistributor tetap tersedia untuk beban kerja yang digabungkan erat dengan kluster Spark.
Cepat Mulai
API GPU tanpa server untuk pelatihan terdistribusi telah diinstal sebelumnya saat Anda terhubung ke GPU tanpa server dalam buku catatan dan pekerjaan Databricks. Kami merekomendasikan lingkungan GPU 4 ke atas. Untuk menggunakannya untuk pelatihan terdistribusi, impor dan gunakan dekorator distributed untuk mendistribusikan fungsi pelatihan Anda.
Bungkus kode pelatihan model dalam fungsi dan dekori fungsi dengan dekorator @distributed. Fungsi yang didekorasi menjadi titik masuk untuk eksekusi terdistribusi - semua logika pelatihan, pemuatan data, dan inisialisasi model harus ditentukan di dalam fungsi ini.
Peringatan
Parameter gpu_type di @distributed harus sesuai dengan jenis akselerator yang terhubung dengan laptop Anda. Misalnya, @distributed(gpus=8, gpu_type='H100') mengharuskan notebook Anda tersambung ke akselerator H100. Menggunakan jenis akselerator yang tidak cocok (seperti menyambungkan ke A10 saat menentukan H100) akan menyebabkan beban kerja gagal.
Cuplikan kode di bawah ini menunjukkan penggunaan @distributeddasar :
# Import the distributed decorator
from serverless_gpu import distributed
# Decorate your training function with @distributed and specify the number of GPUs and GPU type
@distributed(gpus=8, gpu_type='H100')
def run_train():
...
Di bawah ini adalah contoh lengkap yang melatih model multilayer perceptron (MLP) pada 8 GPU H100 dari notebook:
Siapkan model Anda dan tentukan fungsi utilitas.
# Define the model import os import torch import torch.distributed as dist import torch.nn as nn def setup(): dist.init_process_group("nccl") torch.cuda.set_device(int(os.environ["LOCAL_RANK"])) def cleanup(): dist.destroy_process_group() class SimpleMLP(nn.Module): def __init__(self, input_dim=10, hidden_dim=64, output_dim=1): super().__init__() self.net = nn.Sequential( nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Dropout(0.2), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Dropout(0.2), nn.Linear(hidden_dim, output_dim) ) def forward(self, x): return self.net(x)Impor pustaka serverless_gpu dan modul terdistribusi .
import serverless_gpu from serverless_gpu import distributedBungkus kode pelatihan model dalam fungsi dan dekori fungsi dengan dekorator
@distributed.@distributed(gpus=8, gpu_type='H100') def run_train(num_epochs: int, batch_size: int) -> None: import mlflow import torch.optim as optim from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.data import DataLoader, DistributedSampler, TensorDataset # 1. Set up multi-GPU environment setup() device = torch.device(f"cuda:{int(os.environ['LOCAL_RANK'])}") # 2. Apply the Torch distributed data parallel (DDP) library for data-parellel training. model = SimpleMLP().to(device) model = DDP(model, device_ids=[device]) # 3. Create and load dataset. x = torch.randn(5000, 10) y = torch.randn(5000, 1) dataset = TensorDataset(x, y) sampler = DistributedSampler(dataset) dataloader = DataLoader(dataset, sampler=sampler, batch_size=batch_size) # 4. Define the training loop. optimizer = optim.Adam(model.parameters(), lr=0.001) loss_fn = nn.MSELoss() for epoch in range(num_epochs): sampler.set_epoch(epoch) model.train() total_loss = 0.0 for step, (xb, yb) in enumerate(dataloader): xb, yb = xb.to(device), yb.to(device) optimizer.zero_grad() loss = loss_fn(model(xb), yb) # Log loss to MLflow metric mlflow.log_metric("loss", loss.item(), step=step) loss.backward() optimizer.step() total_loss += loss.item() * xb.size(0) mlflow.log_metric("total_loss", total_loss) print(f"Total loss for epoch {epoch}: {total_loss}") cleanup()Jalankan pelatihan terdistribusi dengan memanggil fungsi terdistribusi dengan argumen yang ditentukan pengguna.
run_train.distributed(num_epochs=3, batch_size=1)Saat dijalankan, tautan eksekusi MLflow dihasilkan dalam output sel buku catatan. Klik tautan eksekusi MLflow atau temukan di panel Eksperimen untuk melihat hasil eksekusi.
Rincian eksekusi terdistribusi
API GPU tanpa server terdiri dari beberapa komponen utama:
- Manajer komputasi: Menangani alokasi dan manajemen sumber daya
- Lingkungan runtime: Mengelola lingkungan dan dependensi Python
- Peluncur: Mengatur eksekusi dan pemantauan pekerjaan
Saat berjalan dalam mode terdistribusi:
- Fungsi ini diserialisasikan dan didistribusikan di seluruh jumlah GPU yang ditentukan
- Setiap GPU menjalankan salinan fungsi dengan parameter yang sama
- Lingkungan disinkronkan di semua GPU
- Hasil dikumpulkan dan dikembalikan dari semua GPU
API mendukung pustaka pelatihan paralel populer seperti Distributed Data Parallel (DDP), Fully Sharded Data Parallel (FSDP), DeepSpeed.
Anda dapat menemukan skenario pelatihan terdistribusi yang lebih nyata menggunakan berbagai pustaka dalam contoh buku catatan.
FAQs
Di mana kode pemuatan data harus ditempatkan?
Saat menggunakan API GPU Tanpa Server untuk pelatihan terdistribusi, pindahkan kode pemuatan data di dalam dekorator @distributed . Ukuran himpunan data dapat melebihi ukuran maksimum yang diizinkan oleh pickle, sehingga disarankan untuk membuat himpunan data di dalam dekorator, seperti yang ditunjukkan di bawah ini:
from serverless_gpu import distributed
# this may cause pickle error
dataset = get_dataset(file_path)
@distributed(gpus=8, gpu_type='H100')
def run_train():
# good practice
dataset = get_dataset(file_path)
....
Pelajari lebih lanjut
Untuk referensi API, lihat dokumentasi API Python GPU Tanpa Server .