PyTorch adalah kerangka kerja pembelajaran mendalam berbasis perangkat lunak sumber terbuka yang digunakan untuk membangun neural networks, yang menggabungkan pustaka machine learning (ML) Torch dengan API tingkat tinggi berbasis Python. Fleksibilitas dan kemudahan penggunaannya, di antara manfaat lainnya, telah menjadikannya sebagai kerangka kerja ML terdepan bagi komunitas akademis dan penelitian.
PyTorch mendukung berbagai macam arsitektur jaringan neural, mulai dari algoritme regresi linier sederhana hingga convolutional neural networks yang kompleks dan model transformator generatif yang digunakan untuk tugas-tugas seperti visi komputer dan pemrosesan bahasa alami (NLP). Dibangun di atas bahasa pemrograman Python yang dipahami secara luas dan menawarkan pustaka ekstensif model yang sudah dikonfigurasi sebelumnya (dan bahkan sudah dilatih), PyTorch memungkinkan ilmuwan data untuk membangun dan menjalankan jaringan pembelajaran mendalam yang canggih sambil meminimalkan waktu dan tenaga kerja yang dihabiskan untuk kode dan struktur matematika.
PyTorch juga memungkinkan ilmuwan data untuk menjalankan dan menguji sebagian kode secara real-time, daripada menunggu seluruh kode diimplementasikan, yang, untuk model pembelajaran mendalam yang besar, bisa memakan waktu sangat lama. Hal ini menjadikan PyTorch platform luar biasa untuk pembuatan prototipe cepat, dan juga sangat mempercepat proses debugging.
Awalnya dikembangkan oleh Facebook AI Research (sekarang Meta), Python dijadikan sebagai sumber terbuka pada tahun 2017 dan telah berada di bawah pengawasan PyTorch Foundation (yang merupakan bagian dari Linux Foundation yang lebih besar) sejak tahun 2022. Yayasan ini menyediakan ruang netral bagi komunitas pembelajaran mendalam untuk berkolaborasi dalam pengembangan lebih lanjut ekosistem PyTorch.
Pada tahun 2023, IBM menjadi anggota utama PyTorch Foundation, setelah berkolaborasi dalam dua proyek besar: memungkinkan pelatihan yang lebih efisien untuk model dasar AI yang fleksibel dengan miliaran parameter dan membuat pemeriksaan untuk pelatihan AI yang jauh lebih hemat biata. Portofolio IBM watsonx menggunakan PyTorch untuk menyediakan tumpukan perangkat lunak tingkat perusahaan untuk model dasar kecerdasan buatan, mulai dari pelatihan menyeluruh hingga fine tuning model.
Struktur matematika dan pemrograman PyTorch menyederhanakan dan merampingkan alur kerja machine learning, tanpa membatasi kompleksitas atau kinerja jaringan neural mendalam.
Python adalah bahasa pemrograman tingkat tinggi dengan tujuan umum yang banyak digunakan dalam ilmu data, menjadikannya pilihan intuitif bagi ilmuwan data yang memperluas pekerjaan mereka ke dalam pemodelan jaringan pembelajaran mendalam secara aktif. Sintaks Python yang sederhana mudah dibaca, hanya membutuhkan sedikit waktu untuk mempelajarinya, dan dapat berjalan di sistem operasi apa pun, termasuk Windows, macOS, Linux, atau Unix. Python telah menjadi bahasa pemrograman kedua yang paling banyak digunakan di GitHub selama lebih dari tiga tahun, setelah mengambil alih Java pada tahun 2019. Popularitasnya kian melejit, dengan peningkatan 22,5 persen pada tahun 2022.1
Fleksibilitas dan kesederhanaan ini telah membantu menumbuhkan komunitas online yang kuat dari para pengembang Python, yang berkolaborasi dalam beragam pustaka Python dan API seperti Numerical Python (NumPy) untuk operasi matematis, Panda untuk manipulasi data, atau matplotlib untuk visualisasi data, serta sumber daya pendidikan. Komunitas ini juga telah menghasilkan sejumlah besar pustaka Pytorch yang mengurangi kebosanan dan tebakan dalam pengodean untuk machine learning, sehingga membebaskan para pengembang dan ilmuwan data untuk fokus pada inovasi daripada menulis tugas hafalan.
Dalam algoritma machine learning apa pun, bahkan yang diterapkan pada informasi yang seolah-olah non-numerik seperti suara atau gambar, data harus direpresentasikan secara numerik. Di PyTorch, ini dicapai melalui tensor, yang berfungsi sebagai unit dasar data yang digunakan untuk komputasi pada platform.
Dalam konteks machine learning, tensor adalah susunan angka multidimensi yang berfungsi seperti perangkat pembukuan matematika. Secara linguistik, "tensor" berfungsi sebagai istilah umum yang mencakup beberapa entitas matematika yang lebih umum:
Tensor PyTorch berfungsi mirip dengan ndarrays yang digunakan di NumPy—tetapi tidak seperti ndarrays, yang hanya bisa berjalan di central processing unit (CPU), tensor juga bisa berjalan di graphics processing unit (GPU). GPU memungkinkan komputasi yang jauh lebih cepat daripada CPU, yang merupakan keuntungan besar mengingat volume data yang sangat besar dan pemrosesan paralel yang khas untuk pembelajaran mendalam.
Selain mengkodekan input dan output model, tensor PyTorch juga mengkodekan parameter model: bobot, bias, dan gradien yang "dipelajari" dalam machine learning. Properti tensor ini memungkinkan diferensiasi otomatis, yang merupakan salah satu fitur terpenting PyTorch.
PyTorch menggunakan modul sebagai blok bangunan model pembelajaran mendalam, yang memungkinkan konstruksi jaringan neural yang cepat dan mudah tanpa pekerjaan yang membosankan untuk pengkodean setiap algoritme secara manual.
Modul dapat, dan sering kali, mengandung modul bersarang lainnya. Selain memungkinkan pembuatan neural network multilapis yang lebih rumit, hal ini juga memungkinkan model pembelajaran mendalam yang kompleks ini dapat dengan mudah disimpan sebagai satu modul bernama dan ditransfer di antara mesin, CPU, atau GPU yang berbeda. Model PyTorch dapat dijalankan di lingkungan non-Python, seperti C++, menggunakan Torchscript, yang membantu menghubungkan kesenjangan antara prototipe penelitian dan penerapan produksi.
Secara garis besar, ada tiga kelas modul utama yang digunakan untuk membangun dan mengoptimalkan model pembelajaran mendalam di PyTorch:
Modul nn digunakan sebagai lapisan neural networks. Paket torch.nn berisi pustaka besar modul yang melakukan operasi umum seperti konvolusi, penggabungan, dan regresi. Sebagai contoh, torch.nn.Linear(n,m) memanggil algoritme regresi linier dengan n input dan m output (yang input dan parameter awalnya kemudian ditetapkan dalam baris kode berikutnya).
Modul autograd menyediakan cara sederhana untuk menghitung gradien secara otomatis, yang digunakan untuk mengoptimalkan parameter model melalui penurunan gradien, untuk fungsi apa pun yang dioperasikan dalam neural networks. Menambahkan tensor apa pun dengan sinyal requires_grad=True ke autograd bahwa setiap operasi pada tensor tersebut harus dilacak, yang memungkinkan diferensiasi otomatis.
Modul Optim menerapkan algoritme pengoptimalan pada gradien tersebut. Torch.optim menyediakan modul untuk berbagai metode pengoptimalan, seperti stochastic gradient descent (SGD) atau root mean square propagation (RMSprop), yang sesuai dengan kebutuhan pengoptimalan tertentu.
Grafik komputasi dinamis (DCG) adalah bagaimana model pembelajaran mendalam direpresentasikan dalam PyTorch. Secara abstrak, grafik komputasi memetakan aliran data antara berbagai operasi dalam sistem matematika: dalam konteks pembelajaran mendalam, grafik ini pada dasarnya menerjemahkan kode jaringan neural ke dalam diagram alir yang mengindikasikan operasi yang dilakukan di setiap node dan ketergantungan antara berbagai lapisan di dalam jaringan, susunan langkah dan urutan yang mengubah data input menjadi data output.
Yang membedakan grafik komputasi dinamis (seperti yang digunakan di PyTorch) dengan grafik komputasi statis (seperti yang digunakan di TensorFlow) adalah bahwa DCG menunda spesifikasi komputasi dan hubungan yang tepat di antara keduanya hingga waktu berjalan. Dengan kata lain, sedangkan grafik komputasi statis membutuhkan arsitektur seluruh jaringan neural yang sepenuhnya ditentukan dan disusun agar dapat berjalan, DCG dapat diulang dan dimodifikasi dengan cepat.
Hal ini membuat DCG sangat berguna untuk debugging dan prototyping, karena bagian tertentu dari kode model dapat diubah atau dijalankan secara terpisah tanpa harus mengatur ulang seluruh model. Karena untuk model pembelajaran mendalam yang sangat besar yang digunakan untuk visi komputer canggih dan tugas NLP, dapat membuang-buang waktu dan sumber daya komputasi. Manfaat dari fleksibilitas ini meluas ke pelatihan model, karena grafik komputasi dinamis mudah dihasilkan secara terbalik selama propagasi balik.
Meskipun strukturnya yang tetap dapat memberdayakan efisiensi komputasi yang lebih besar, grafik komputasi statis memiliki fleksibilitas yang terbatas: misalnya, membangun model yang menggunakan jumlah lapisan yang bervariasi tergantung pada data input, seperti convolutional neural networks (CNN) yang dapat memproses gambar dengan ukuran berbeda-beda, sangat sulit dilakukan dengan grafik statis.
Salah satu metode yang banyak digunakan untuk melatih neural networks, terutama dalam pembelajaran terawasi, adalah propagasi balik. Pertama, dalam forward pass, sebuah model diberikan beberapa input (x) dan memprediksi beberapa output (y); bekerja mundur dari output tersebut, sebuah fungsi kerugian digunakan untuk mengukur kesalahan prediksi model pada nilai x yang berbeda. Dengan melakukan diferensiasi fungsi kerugian tersebut untuk menemukan turunannya, penurunan gradien dapat digunakan untuk menyesuaikan bobot dalam neural network, satu lapisan pada satu waktu.
Modul autograd PyTorch mendukung teknik diferensiasi otomatisnya dengan menggunakan rumus kalkulus yang disebut aturan rantai, menghitung turunan kompleks dengan membaginya menjadi turunan yang lebih sederhana dan menggabungkannya nanti. Autograd secara otomatis menghitung dan mencatat gradien untuk semua operasi yang dijalankan dalam grafik komputasi, sehingga sangat mengurangi kerja keras propagasi balik.
Ketika menjalankan model yang telah dilatih, autograd menjadi penggunaan sumber daya komputasi yang tidak perlu. Menambahkan operasi tensor apapun dengan requires_grad=False akan memberi sinyal pada PyTorch untuk berhenti melacak gradien.
Bekerja dengan kumpulan data besar yang diperlukan untuk melatih model pembelajaran mendalam bisa jadi sangat kompleks dan menuntut komputasi. PyTorch menyediakan dua primitif data, kumpulan data dan pemuat data, untuk memfasilitasi pemuatan data dan membuat kode lebih mudah dibaca.
Fitur inti PyTorch dilengkapi dengan ekosistem alat, pustaka, dan ekstensi yang kuat yang dikembangkan oleh anggota komunitas PyTorch. Banyak pustaka sumber terbuka tambahan, yang berisi modul bertujuan khusus, neural network terkonfigurasi, dan bahkan model terlatih, tersedia untuk melengkapi pustaka torch yang terinstal sebelumnya.
Torchvision adalah sebuah toolkit yang berisi modul, arsitektur jaringan, dan kumpulan data untuk berbagai tugas klasifikasi gambar, deteksi objek, dan segmentasi gambar.
TorchText menyediakan sumber daya seperti kumpulan data, transformasi pemrosesan teks dasar dan model yang telah dilatih untuk digunakan dalam NLP.
Open Neural Network Exchange (ONNX) memastikan interoperabilitas antara kerangka kerja AI, memungkinkan pengguna untuk dengan mudah mengalihkan model PyTorch mereka ke platform lain.
Banyak tutorial bermanfaat tersedia di PyTorch.org. Misalnya, tutorial perantara mengajarkan dasar-dasar pembelajaran penguatan mendalam dengan melatih AI untuk memainkan video game.
PyTorch dapat diinstal dan dijalankan dalam berbagai konfigurasi pada sistem lokal dan platform cloud.
Menjalankan PyTorch secara lokal membutuhkan instalasi Python, baik menggunakan manajer paket Anaconda, Homebrew atau situs web Python.
PyTorch dapat diinstal secara lokal melalui Anaconda menggunakan perintah conda install pytorch torchvision -c pytorch, atau melalui pip menggunakan perintah pip3 install torch torchvision. Anaconda direkomendasikan, karena menyediakan semua dependensi PyTorch (termasuk Python) dalam satu instalasi sandbox2.
PyTorch juga dapat dijalankan pada platform cloud, termasuk Amazon Web Services, Google Cloud dan Microsoft Azure.
Disarankan (tetapi tidak wajib) untuk menggunakan GPU NVIDIA agar dapat memanfaatkan dukungan PyTorch untuk CUDA (Compute Unified Device Architecture), yang menawarkan pelatihan dan kinerja yang jauh lebih cepat daripada CPU.
1 Octoverse 2022: The top programming languages, Github, 17 November 2022
2 PyTorch: Get Started – Start Locally