Rumah > Artikel > Peranti teknologi > TensorFlow, PyTorch dan JAX: Rangka kerja pembelajaran mendalam manakah yang lebih baik untuk anda?
Penterjemah|Zhu Xianzhong
Penemak
Pembelajaran mendalam mempengaruhi kehidupan kita dalam pelbagai bentuk setiap hari. Sama ada Siri, Alexa, aplikasi terjemahan masa nyata pada telefon anda berdasarkan arahan suara pengguna, atau teknologi penglihatan komputer yang menggerakkan traktor pintar, robot gudang dan kereta pandu sendiri, setiap bulan nampaknya membawa kemajuan baharu. Hampir semua aplikasi pembelajaran mendalam ini ditulis dalam tiga rangka kerja ini: TensorFlow, PyTorch atau JAX.
Jadi, rangka kerja pembelajaran mendalam manakah yang patut anda gunakan? Dalam artikel ini, kami akan melakukan perbandingan peringkat tinggi bagi TensorFlow, PyTorch dan JAX. Matlamat kami adalah untuk memberi anda idea tentang jenis apl yang bermain mengikut kekuatannya, sambil sudah tentu mengambil kira faktor seperti sokongan komuniti dan kemudahan penggunaan.
"Tiada sesiapa pernah dipecat kerana membeli IBM" adalah slogan dalam dunia komputer pada tahun 1970-an dan 1980-an. Pada awal abad ini, perkara yang sama berlaku untuk pembelajaran mendalam menggunakan TensorFlow. Tetapi seperti yang kita semua tahu, pada masa 1990-an masuk, IBM telah "diletakkan pada penunu belakang." Jadi, adakah TensorFlow masih berdaya saing hari ini, 7 tahun selepas ia pertama kali dikeluarkan pada 2015, dan ke dekad baharu yang akan datang?
Sudah tentu. TensorFlow tidak selalu berdiam diri. Pertama, TensorFlow 1.x membina graf statik dalam cara bukan Pythonik, tetapi dalam TensorFlow 2.x, anda juga boleh membina model menggunakan mod bersemangat untuk menilai operasi dengan segera, yang menjadikannya lebih seperti PyTorch. Pada tahap tinggi, TensorFlow menyediakan Keras untuk memudahkan pembangunan; di peringkat bawah, ia menyediakan penyusun pengoptimuman XLA (Algebra Linear Dipercepatkan, algebra linear dipercepatkan) untuk meningkatkan kelajuan. XLA memainkan peranan ajaib dalam meningkatkan prestasi GPU Ia merupakan kaedah utama untuk memanfaatkan kuasa TPU (Unit Pemprosesan Tensor) Google, memberikan prestasi yang tiada tandingan untuk latihan model berskala besar.
Kedua, selama bertahun-tahun TensorFlow telah berusaha untuk menjadi sebaik mungkin dalam segala hal. Sebagai contoh, adakah anda ingin menyampaikan model dengan cara yang jelas dan boleh diulang pada platform yang matang? TensorFlow sedia untuk dihidangkan. Adakah anda ingin memindahkan penempatan model ke web, pengkomputeran kuasa rendah seperti telefon pintar atau peranti yang dikekang sumber seperti Internet Perkara? Pada ketika ini, kedua-dua TensorFlow.js dan TensorFlow Lite adalah sangat matang.
Jelas sekali, memandangkan Google masih 100% menggunakan TensorFlow untuk menjalankan penggunaan pengeluarannya, anda boleh yakin bahawa TensorFlow akan dapat memenuhi keperluan skala pengguna.
Walau bagaimanapun, memang terdapat beberapa faktor dalam projek baru-baru ini yang tidak boleh diabaikan. Pendek kata, menaik taraf projek daripada TensorFlow 1.x kepada TensorFlow 2.x sebenarnya sangat kejam. Sesetengah syarikat hanya memutuskan untuk memindahkan kod ke rangka kerja PyTorch, dengan mengambil kira usaha yang diperlukan untuk mengemas kini kod untuk berfungsi dengan betul pada versi baharu. Selain itu, TensorFlow juga telah kehilangan momentum dalam bidang penyelidikan saintifik, yang mula mengutamakan fleksibiliti yang disediakan oleh PyTorch beberapa tahun lalu, yang telah menyebabkan penurunan berterusan penggunaan TensorFlow dalam kertas penyelidikan.
Selain itu, "Insiden Keras" tidak memainkan sebarang peranan. Keras menjadi bahagian bersepadu pengedaran TensorFlow dua tahun lalu, tetapi baru-baru ini telah ditarik balik ke perpustakaan berasingan dengan rancangan keluarannya sendiri. Sudah tentu, mengecualikan Keras tidak akan menjejaskan kehidupan harian pembangun, tetapi perubahan dramatik sedemikian dalam versi kecil rangka kerja yang dikemas kini tidak menimbulkan keyakinan di kalangan pengaturcara untuk menggunakan rangka kerja TensorFlow.
Setelah berkata demikian, TensorFlow sememangnya rangka kerja yang boleh dipercayai Ia mempunyai ekosistem pembelajaran mendalam yang luas, dan pengguna boleh membina aplikasi dan model semua skala pada TensorFlow. Jika kita melakukan ini, akan ada banyak syarikat yang baik untuk bekerjasama. Tetapi hari ini, TensorFlow mungkin bukan pilihan pertama.
PyTorch bukan lagi "pemula" berikutan TensorFlow, tetapi kini menjadi kuasa utama dalam bidang pembelajaran mendalam, mungkin digunakan terutamanya untuk penyelidikan, tetapi semakin digunakan untuk aplikasi pengeluaran. Dengan mod bersemangat menjadi pendekatan lalai untuk pembangunan dalam TensorFlow dan PyTorch, lebih banyak pendekatan Pythonic yang disediakan oleh autograd PyTorch nampaknya memenangi perang melawan graf statik.
Tidak seperti TensorFlow, kod teras PyTorch tidak mengalami sebarang gangguan besar sejak API pembolehubah telah ditamatkan dalam versi 0.4. Sebelum ini, pembolehubah memerlukan tensor yang dijana secara automatik, tetapi kini, semuanya adalah tensor. Tetapi itu tidak bermakna tidak ada kesilapan di mana-mana. Contohnya, jika anda telah menggunakan PyTorch untuk berlatih merentas berbilang GPU, anda mungkin mengalami perbezaan antara DataParallel dan DistributedDataParaller yang lebih baharu. Anda harus sentiasa menggunakan DistributedDataParallel, tetapi tidak ada yang menentang penggunaan DataParaller.
Walaupun PyTorch sentiasa ketinggalan di belakang TensorFlow dan JAX dari segi sokongan XLA/TPU, sehingga 2022, keadaan telah bertambah baik. PyTorch kini menyokong akses kepada mesin maya TPU, sokongan untuk nod TPU warisan dan sokongan untuk penggunaan baris perintah mudah bagi kod yang dijalankan pada CPU, GPU atau TPU tanpa memerlukan perubahan kod. Jika anda tidak mahu berurusan dengan beberapa kod boilerplate yang PyTorch sering membuat anda menulis, maka anda boleh beralih kepada sambungan peringkat lebih tinggi seperti Pytorche Lightning, yang membolehkan anda menumpukan pada kerja sebenar dan bukannya menulis semula gelung latihan. Sebaliknya, walaupun kerja pada PyTorch Mobile diteruskan, ia jauh kurang matang daripada TensorFlow Lite.
Di bahagian pengeluaran, PyTorch kini boleh disepadukan dengan platform rangka kerja-agnostik seperti Kubeflow, dan projek TorchServe boleh mengendalikan butiran penggunaan seperti penskalaan, metrik dan inferens kelompok — semuanya diselenggara oleh Pembangun PyTorch sendiri Semua faedah MLOps tersedia dalam pakej kecil. Sebaliknya, adakah PyTorch menyokong penskalaan? Tiada masalah! Meta telah menjalankan PyTorch dalam pengeluaran selama bertahun-tahun jadi sesiapa yang memberitahu anda bahawa PyTorch tidak boleh mengendalikan beban kerja berskala besar adalah berbohong. Walau bagaimanapun, terdapat situasi di mana PyTorch mungkin tidak mesra pengguna seperti JAX, terutamanya apabila ia melibatkan latihan yang sangat berat yang memerlukan sejumlah besar GPU atau TPU.
Akhirnya, masih ada isu perit yang orang ramai tidak mahu sebutkan - Populariti PyTorch dalam beberapa tahun kebelakangan ini hampir tidak dapat dipisahkan daripada kejayaan perpustakaan Transformers Hugging Face. Ya, Transformers kini turut menyokong TensorFlow dan JAX, tetapi ia pada asalnya adalah projek PyTorch dan masih disepadukan rapat dengan rangka kerja. Dengan kebangkitan seni bina Transformer, fleksibiliti PyTorch untuk penyelidikan, dan keupayaan untuk memperkenalkan begitu banyak model baharu dalam beberapa hari atau beberapa jam selepas dikeluarkan melalui Pusat Model Hugging Face, mudah untuk melihat sebab PyTorch berada di kawasan ini.
Jika anda tidak berminat dengan TensorFlow, maka Google mungkin mempunyai perkhidmatan lain untuk anda. JAX ialah rangka kerja pembelajaran mendalam yang dibina, diselenggara dan digunakan oleh Google, tetapi ia bukan produk Google rasmi. Walau bagaimanapun, jika anda memberi perhatian kepada kertas kerja Google/DeepMind dan keluaran produk sepanjang tahun lalu atau lebih, anda akan dapati bahawa banyak penyelidikan Google telah berpindah ke JAX. Jadi walaupun JAX bukan produk Google "rasmi", ia adalah sesuatu yang digunakan oleh penyelidik Google untuk menolak sempadan.
Apakah sebenarnya JAX itu? Cara mudah untuk berfikir tentang JAX ialah: bayangkan versi GPU/TPU dipercepatkan NumPy yang boleh menvektorkan fungsi Python secara ajaib dengan "tongkat ajaib" dan mengendalikan pengiraan terbitan semua fungsi ini. Akhir sekali, ia menyediakan komponen just-in-time (JIT: Just-In-Time) untuk mengambil kod dan mengoptimumkannya untuk pengkompil XLA (Accelerated Linear Algebra), dengan itu meningkatkan prestasi TensorFlow dan PyTorch dengan ketara. Sesetengah kod pada masa ini melaksanakan empat hingga lima kali lebih pantas hanya dengan melaksanakannya semula dalam JAX tanpa sebarang kerja pengoptimuman sebenar.
Memandangkan JAX berfungsi pada peringkat NumPy, kod JAX ditulis pada tahap yang jauh lebih rendah daripada TensorFlow/Keras (atau pun PyTorch). Untungnya, terdapat ekosistem kecil tetapi berkembang mengelilingi JAX dengan sedikit pengembangan. Adakah anda mahu menggunakan perpustakaan rangkaian saraf? pasti. Antaranya ialah Flax dari Google, dan Haiku dari DeepMind (juga Google). Selain itu, Optax tersedia untuk semua keperluan pengoptimum anda, PIX tersedia untuk pemprosesan imej dan banyak lagi. Sebaik sahaja anda menggunakan sesuatu seperti Flax, membina rangkaian saraf menjadi agak mudah untuk dikuasai. Ambil perhatian bahawa masih terdapat beberapa isu yang membimbangkan. Sebagai contoh, orang yang berpengalaman sering bercakap tentang cara JAX mengendalikan nombor rawak secara berbeza daripada banyak rangka kerja lain.
Jadi, patutkah anda menukar semuanya kepada JAX dan memanfaatkan teknologi canggih ini? Soalan ini berbeza dari seorang ke seorang. Pendekatan ini disyorkan jika anda mendalami model berskala besar yang memerlukan banyak sumber untuk dilatih. Selain itu, jika anda berminat dengan JAX untuk latihan deterministik, dan projek lain yang memerlukan beribu-ribu TPU Pod, ia patut dicuba.
Jadi, apakah kesimpulannya? Rangka kerja pembelajaran mendalam manakah yang patut anda gunakan? Malangnya, tiada jawapan tunggal untuk soalan ini, semuanya bergantung pada jenis masalah yang anda sedang usahakan, skala yang anda merancang untuk menggunakan model untuk dikendalikan, dan juga platform pengkomputeran yang anda hadapi.
Walau bagaimanapun, jika anda bekerja dalam bidang teks dan imej dan melakukan penyelidikan kecil hingga sederhana dengan tujuan untuk menggunakan model ini dalam pengeluaran, maka PyTorch mungkin yang terbaik pilihan pada masa ini. Berdasarkan versi terkini, ia menyentuh titik manis ruang aplikasi jenis ini.
Jika anda perlu mendapatkan semua prestasi daripada peranti pengkomputeran rendah, maka anda disyorkan untuk menggunakan TensorFlow dan pakej TensorFlow Lite yang sangat mantap. Akhir sekali, jika anda melihat model latihan dengan puluhan, ratusan bilion atau lebih parameter, dan anda melatihnya terutamanya untuk tujuan penyelidikan, mungkin sudah tiba masanya untuk mencuba JAX.
Pautan asal: https://www.infoworld.com/article/3670114/tensorflow-pytorch-and-jax-choosing -a-deep-learning-framework.html
Zhu Xianzhong, editor komuniti 51CTO, blogger pakar 51CTO, pensyarah, universiti di Weifang Guru komputer dan veteran dalam bidang pengaturcaraan bebas.
Atas ialah kandungan terperinci TensorFlow, PyTorch dan JAX: Rangka kerja pembelajaran mendalam manakah yang lebih baik untuk anda?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!