PyTorch

PyTorch adalah paket Python yang menyediakan komputasi tensor yang dipercepat-GPU dan fungsionalitas tingkat tinggi untuk membangun jaringan pembelajaran mendalam. Untuk detail lisensi, lihat dokumen lisensi PyTorch di GitHub.

Untuk memantau dan men-debug model PyTorch Anda, pertimbangkan untuk menggunakan TensorBoard.

PyTorch disertakan dalam Databricks Runtime untuk Pembelajaran Mesin. Jika Anda menggunakan Runtime Databricks, lihat Menginstal PyTorch untuk petunjuk tentang menginstal PyTorch.

Catatan

Ini bukan panduan komprehensif untuk PyTorch. Untuk informasi selengkapnya, lihat situs web PyTorch .

Node tunggal dan pelatihan terdistribusi

Untuk menguji dan memigrasikan alur kerja mesin tunggal, gunakan Kluster Node Tunggal.

Untuk opsi pelatihan terdistribusi untuk pembelajaran mendalam, lihat Pelatihan terdistribusi.

Contoh buku catatan

Notebook pelatihan model end-to-end MLflow PyTorch

Dapatkan buku catatan

Notebook PyTorch

Dapatkan buku catatan

Buku catatan pelatihan model MLflow PyTorch dengan TensorFlow

Dapatkan buku catatan

Pasang PyTorch

Databricks Runtime untuk Pembelajaran Mesin

Databricks Runtime untuk Pembelajaran Mesin menyertakan PyTorch sehingga Anda dapat membuat kluster dan mulai menggunakan PyTorch. Untuk versi PyTorch yang dipasang dalam versi Databricks Runtime ML yang Anda gunakan, lihat catatan rilis.

Databricks Runtime

Databricks merekomendasikan agar Anda menggunakan PyTorch yang disertakan dalam Databricks Runtime untuk Pembelajaran Mesin. Namun, jika Anda harus menggunakan Databricks Runtime standar, PyTorch dapat diinstal sebagai pustaka Databricks PyPI. Contoh berikut menunjukkan cara menginstal PyTorch 1.5.0:

  • Pada kluster GPU, instal pytorch dan torchvision dengan menentukan yang berikut:

    • torch==1.5.0
    • torchvision==0.6.0
  • Pada kluster CPU, instal pytorch dan torchvision dengan menggunakan file roda Python berikut:

    https://download.pytorch.org/whl/cpu/torch-1.5.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
    
    https://download.pytorch.org/whl/cpu/torchvision-0.6.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
    

Kesalahan dan pemecahan masalah untuk PyTorch terdistribusi

Bagian berikut menjelaskan pesan kesalahan umum dan panduan pemecahan masalah untuk kelas: PyTorch DataParallel atau PyTorch DistributedDataParallel. Sebagian besar kesalahan ini kemungkinan dapat diatasi dengan TorchDistributor, yang tersedia di Databricks Runtime ML 13.0 ke atas. Namun, jika TorchDistributor bukan solusi yang layak, solusi yang direkomendasikan juga disediakan dalam setiap bagian.

Berikut ini adalah contoh cara menggunakan TorchDistributor:


from pyspark.ml.torch.distributor import TorchDistributor

def train_fn(learning_rate):
        # ...

num_processes=2
distributor = TorchDistributor(num_processes=num_processes, local_mode=True)

distributor.run(train_fn, 1e-3)

proses 0 dihentikan dengan kode keluar 1

Kesalahan berikut dapat terjadi saat menggunakan buku catatan di Databricks atau secara lokal:

process 0 terminated with exit code 1

Untuk menghindari kesalahan ini, gunakan torch.multiprocessing.start_processes dengan start_method=fork alih-alih torch.multiprocessing.spawn.

Contohnya:

import torch

def train_fn(rank, learning_rate):
    # required setup, e.g. setup(rank)
        # ...

num_processes = 2
torch.multiprocessing.start_processes(train_fn, args=(1e-3,), nprocs=num_processes, start_method="fork")

Soket server gagal mengikat ke port

Kesalahan berikut muncul saat Anda memulai ulang pelatihan terdistribusi setelah mengganggu sel selama pelatihan:

The server socket has failed to bind to [::]:{PORT NUMBER} (errno: 98 - Address already in use).

Untuk memperbaiki masalah, mulai ulang kluster. Jika memulai ulang tidak menyelesaikan masalah, mungkin ada kesalahan dalam kode fungsi pelatihan.

Anda dapat mengalami masalah tambahan dengan CUDA karena start_method=”fork”tidak kompatibel dengan CUDA. Menggunakan perintah apa pun .cuda di sel apa pun dapat menyebabkan kegagalan. Untuk menghindari kesalahan ini, tambahkan pemeriksaan berikut sebelum Anda memanggil torch.multiprocessing.start_method:

if torch.cuda.is_initialized():
    raise Exception("CUDA was initialized; distributed training will fail.") # or something similar