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 Pratinjau Umum.
Data dan aset model sangat penting untuk pembelajaran mendalam dan beban kerja pasca-pelatihan untuk model bahasa besar (LLM) dan model bahasa visi (VLM). Dengan AI Runtime, semua data dan aset model diakses melalui Unity Catalog:
- Volume Unity Catalog: digunakan terutama untuk dataset besar dan file tidak terstruktur, termasuk gambar, audio, dan teks.
- Tabel Unity Catalog: digunakan untuk data terstruktur dan tabel, diakses melalui Spark Connect.
Volume dan tabel Anda harus terdaftar di Unity Catalog dan dapat diakses oleh pengguna atau prinsipal layanan Anda.
Volume Unity Catalog untuk data tidak terstruktur
Volume Unity Catalog menyediakan akses terkontrol ke data non-tabel dalam format apa pun, termasuk data terstruktur, semi-terstruktur, dan tidak terstruktur. Dalam AI Runtime, volume adalah mekanisme utama untuk mengakses dataset besar, teks, aset model, dan titik pemeriksaan model.
Pengguna dapat mendaftarkan, membaca, dan menulis file dalam volume Unity Catalog menggunakan operasi sistem file yang sudah dikenal, mirip dengan bekerja dengan file di disk lokal:
import os
dir_path = "/Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir"
file_path = os.path.join(dir_path, "test_file")
os.makedirs(dir_path, exist_ok=True)
# Write to the file
with open(file_path, "w") as file:
file.write("Hello, World!")
Begitu pula, operasi shell berfungsi dengan cara yang sama:
%sh ls -l /Volumes/<catalog-name>/<schema-name>/<volume-name>
%sh mkdir -p /Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir
%sh touch /Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/test_file
Beberapa karakteristik volume Unity Catalog membuatnya sangat cocok untuk beban kerja machine learning:
- Penyimpanan terdistribusi: Unity Catalog didukung oleh penyimpanan terdistribusi, memungkinkan beban kerja AI Runtime membaca dan menulis data serta memodelkan aset di seluruh platform, baik dari notebook maupun beban kerja berbasis CLI.
- Dioptimalkan untuk pola akses ML: Jalur penyimpanan dan akses yang mendasarinya dioptimalkan untuk beban kerja ML umum, terutama file besar dengan pembacaan dan penulisan berurutan. Hal ini membuat Unity Catalog sangat cocok untuk pelatihan pemuatan data, pemuatan aset model, dan penulisan checkpoint model.
- Akses mirip sistem file: Pengguna dapat mendaftarkan, membaca, dan menulis file dalam volume Unity Catalog menggunakan operasi sistem file yang sudah dikenal, mirip dengan bekerja dengan file di disk lokal.
Karena adanya commit latar belakang otomatis, pengguna dapat mengharapkan akses yang konsisten ke data volume Unity Catalog:
- Menulis: AI Runtime secara otomatis mengkomitkan penulisan, sehingga perubahan terlihat oleh aplikasi dan beban kerja lain yang mengakses volume Unity Catalog yang sama.
- Baca: AI Runtime secara otomatis menangkap perubahan volume tanpa memerlukan operasi penyegaran atau sinkronisasi eksplisit dari pengguna.
Optimalkan kinerja volume
Seperti yang disebutkan, volume Unity Catalog didukung oleh penyimpanan terdistribusi dan dioptimalkan untuk file besar dengan bacaan dan penulisan berurutan.
Beberapa tips dapat membantu Anda mendapatkan performa terbaik dari AI Runtime:
Gabungkan data ke dalam file yang lebih besar: Jika memungkinkan, konsolidasikan data menjadi file yang lebih sedikit dan lebih besar, sekitar 1 GiB hingga 10 GiB per file. Hal ini memungkinkan AI Runtime untuk mengambil data secara agresif dan secara otomatis mencapai kinerja membaca berurutan yang hampir optimal.
Untuk beban kerja file kecil, gunakan disk lokal: Jika beban kerja Anda melibatkan banyak file kecil, pertimbangkan untuk menyalin file ke disk lokal menggunakan salinan paralel sebelum memprosesnya. Ini dapat mengurangi overhead akibat akses berulang ke banyak file kecil melalui volume tersebut.
# Recommended using parallel copy (256 concurrency in this example, you can tune) # # This takes only 22 seconds to copy 15,375 150KiB small image files. %sh cd /Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/ && find . -type f -print0 | xargs -0 -P 256 -I {} cp --parents "{}" /tmp/ # !!! Avoid doing this !!! # # Because the files are copied in serial, this copies the same 15,375 150KiB small image files much more slowly. # %sh cp -r /Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/* /tmpAnda dapat menggunakan
UCVolumeDatasetuntuk beban kerja pembelajaran mesin Anda. Aplikasi ini menggabungkan optimasi yang dijelaskan di atas untuk memberikan akses dan pemuatan data yang efisien dari volume Unity Catalog. Lihat bagian berikut untuk detail selengkapnya.
Muat data tidak terstruktur dengan UCVolumeDataset
Untuk data tidak terstruktur seperti gambar, audio, dan file teks yang disimpan dalam volume Unity Catalog, gunakan UCVolumeDataset dari databricks.air.data modul.
UCVolumeDataset adalah PyTorch IterableDataset yang menyalin setiap file dari volume ke cache lokal yang cepat pada akses pertama dan menghasilkan jalur file lokal yang di-cache. Ini mengatasi persoalan kinerja dan distribusi yang jika tidak demikian harus Anda implementasikan secara manual:
- Cache lokal. File-file disalin dari mount FUSE ke direktori cache lokal saat pertama kali diakses, lalu selanjutnya diambil dari cache, sehingga pelatihan multi-epoch tidak perlu membaca ulang volume.
- Pemartisian otomatis. Ketika
torch.distributeddiinisialisasi, berkas dipartisi di antara rank lalu dibagi lagi ke dalam pekerjaDataLoader, sehingga setiap pasangan(rank, worker)menerima bagian yang tidak saling tumpang tindih tanpa konfigurasi tambahan.
Nota
UCVolumeDataset dan databricks.air.data.DataLoader berasal dari paket databricks-sdk-air. Pasang dengan fitur data tambahan, yang juga menginstal torch yang kompatibel:
%pip install "databricks-sdk-air[data]"
UCVolumeDataset menghasilkan jalur file lokal mentah. Untuk mendekode file-file tersebut menjadi tensor, bungkus dengan IterableDataset kedua yang menerima aliran jalur dan menerapkan logika parsing Anda. Ini menjaga I/O dan penguraian tetap terpisah.
from databricks.air.data import UCVolumeDataset
from torch.utils.data import IterableDataset
from PIL import Image
import torchvision.transforms.functional as TF
class ImageDataset(IterableDataset):
"""Decodes each cached file path from UCVolumeDataset into a tensor."""
def __init__(self, path_dataset: UCVolumeDataset):
self._path_dataset = path_dataset
def __iter__(self):
for local_path in self._path_dataset:
image = Image.open(local_path).convert("RGB")
yield TF.to_tensor(image)
path_dataset = UCVolumeDataset("/Volumes/catalog/schema/my_volume/images")
dataset = ImageDataset(path_dataset)
Wrapper menerima path lokal yang sudah tersimpan di cache, sehingga tahap parsing tidak pernah mengakses volume. Anda dapat menautkan pembungkus tambahan untuk augmentasi, tokenisasi, atau pemfilteran.
Untuk kinerja optimal, gunakan UCVolumeDataset bersama databricks.air.data.DataLoader alih-alih DataLoader bawaan PyTorch. Perangkat ini disetel untuk AI Runtime I/O dan mengambil serta menyimpan file secara bersamaan saat GPU menghitung.
Model checkpoint pada volume
Untuk memeriksa model Anda agar dapat melanjutkan pelatihan dari snapshot terbaru atau memulihkan dari crash, Anda dapat menggunakan volume Unity Catalog seperti sistem file lokal.
Databricks merekomendasikan penggunaan checkpoint terdistribusi (DCP) untuk kinerja yang lebih baik pada beban kerja GPU tunggal maupun multi-GPU. Lihat pelatihan PyTorch yang cepat dan tahan kesalahan tentang AI Runtime dari blog teknik Databricks.
import torch.distributed.checkpoint as dcp
from torch.distributed.checkpoint.state_dict import get_state_dict, set_state_dict
import databricks.air.data
checkpoint_path = "/Volumes/my-catalog/my-schema/my-volume/checkpoints/step_1000"
# Save
model_sd, optim_sd = get_state_dict(model, optimizer)
state_dict = {"model": model_sd, "optim": optim_sd, "step": 1000}
dcp.async_save(
state_dict,
storage_writer=databricks.air.data.UCVolumeWriter(checkpoint_path))
# Load
model_sd, optim_sd = get_state_dict(model, optimizer)
state_dict = {"model": model_sd, "optim": optim_sd}
dcp.load(
state_dict,
storage_reader=databricks.air.data.UCVolumeReader(checkpoint_path))
set_state_dict(
model,
optimizer,
model_state_dict=state_dict["model"],
optim_state_dict=state_dict["optim"],
)
Pendekatan monolitik `torch.save` juga dapat digunakan.
Untuk checkpoint model GPU tunggal,
# The monolithic torch.save approach for single GPU chip # Save torch.save({"model": model.state_dict(), "opt": optimizer.state_dict()}, "/Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/ckpt.pt") # Load ckpt = torch.load( "/Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/ckpt.pt", weights_only=True) model.load_state_dict(ckpt["model"]) optimizer.load_state_dict(ckpt["opt"])Untuk pelatihan terdistribusi yang diluncurkan melalui torchrun,
# The monolithic torch.save approach for multi-GPU distributed training. # This snippet assumes your launcher has already called # dist.init_process_group(...). import os import torch.distributed as dist # Save only on rank 0. if dist.get_rank() == 0: torch.save({"model": model.state_dict(), "opt": optimizer.state_dict()}, "/Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/ckpt.pt") # Wait for rank 0 to finish writing before any rank reads. dist.barrier() # Load on ALL ranks (map to current rank's local GPU). local_rank = int(os.environ["LOCAL_RANK"]) ckpt = torch.load( "/Volumes/<catalog-name>/<schema-name>/<volume-name>/sub-dir/ckpt.pt", map_location=f"cuda:{local_rank}", weights_only=True) model.load_state_dict(ckpt["model"]) optimizer.load_state_dict(ckpt["opt"])
Memuat data tabular
Gunakan Spark Connect untuk memuat data pembelajaran mesin tabular dari tabel Delta.
Untuk pelatihan node tunggal, Anda dapat mengonversi Apache Spark DataFrames menjadi pandas DataFrames menggunakan metode toPandas(), lalu secara opsional mengonversi ke format NumPy menggunakan metode to_numpy().
Nota
Spark Connect menunda analisis dan resolusi nama ke waktu eksekusi, yang dapat mengubah perilaku kode Anda. Lihat Membandingkan Spark Connect dengan Spark Classic.
Spark Connect mendukung sebagian besar API PySpark, termasuk Spark SQL, Pandas API di Spark, Structured Streaming, dan MLlib (berbasis DataFrame). Lihat dokumentasi referensi API PySpark untuk API terbaru yang didukung.
Untuk batasan lain, lihat Batasan komputasi tanpa server.
Muat tabel Delta besar menggunakan volume Unity Catalog
Untuk tabel Delta besar yang terlalu besar untuk dikonversi dengan toPandas(), ekspor data ke volume Unity Catalog dan muat langsung menggunakan PyTorch atau Hugging Face:
# Step 1: Export the Delta table to Parquet files in a UC volume
output_path = "/Volumes/catalog/schema/my_volume/training_data"
spark.table("catalog.schema.my_table").write.mode("overwrite").parquet(output_path)
# Step 2: Load the exported data directly using Hugging Face datasets
from datasets import load_dataset
dataset = load_dataset("parquet", data_files="/Volumes/catalog/schema/my_volume/training_data/*.parquet")
Pendekatan ini menghindari overhead Spark selama pelatihan dan bekerja dengan baik untuk GPU tunggal dan alur kerja pelatihan terdistribusi.