Ulasan: Pembelajaran mendalam MXNet bersinar dengan Gluon

Ketika saya meninjau MXNet v0.7 pada tahun 2016, saya merasa bahwa ini adalah kerangka kerja pembelajaran mendalam yang menjanjikan dengan skalabilitas yang sangat baik (hampir linier pada kluster GPU), diferensiasi otomatis yang baik, dan dukungan canggih untuk CUDA GPU. Saya juga merasa perlu mengerjakan dokumentasi dan tutorialnya, dan membutuhkan lebih banyak contoh di kebun binatang modelnya. Selain itu, saya ingin melihat antarmuka tingkat tinggi untuk MXNet, yang saya bayangkan adalah Keras.

Sejak itu, ada sedikit kemajuan. MXNet bergerak di bawah payung Apache Software Foundation pada awal tahun 2017, dan meskipun masih "inkubasi" pada versi 1.3, rasanya cukup disempurnakan.

Meskipun sudah ada pekerjaan di Keras dengan back end MXNet, antarmuka tingkat tinggi yang berbeda menjadi jauh lebih penting: Gluon. Sebelum penggabungan Gluon, Anda dapat menulis kode imperatif yang mudah atau kode simbolik cepat di MXNet, tetapi tidak keduanya sekaligus. Dengan Gluon, Anda dapat menggabungkan yang terbaik dari kedua dunia, dengan cara yang bersaing dengan Keras dan PyTorch.

Apa Gluon untuk MXNet?

Keuntungan yang diklaim untuk Gluon termasuk kode sederhana, pemodelan fleksibel, grafik dinamis, dan kinerja tinggi:

  1. Kode sederhana dan mudah dipahami : Gluon menawarkan rangkaian lengkap blok penyusun jaringan neural plug-and-play, termasuk lapisan, pengoptimal, dan penginisialisasi yang telah ditentukan sebelumnya.
  2. Fleksibel, struktur imperatif : Gluon tidak memerlukan model jaringan neural untuk didefinisikan secara kaku, tetapi lebih mendekatkan algoritme dan model pelatihan untuk memberikan fleksibilitas dalam proses pengembangan.
  3. Grafik dinamis : Gluon memungkinkan pengembang untuk menentukan model jaringan saraf yang dinamis, yang berarti mereka dapat dibangun dengan cepat, dengan struktur apa pun, dan menggunakan aliran kontrol asli Python apa pun.
  4. Kinerja tinggi : Gluon memberikan semua manfaat di atas tanpa memengaruhi kecepatan pelatihan yang disediakan mesin yang mendasarinya.

Keempat item ini, bersama dengan koleksi contoh model yang sangat luas, membawa Gluon / MXNet ke keseimbangan kasar dengan Keras / TensorFlow dan PyTorch untuk kemudahan pengembangan dan kecepatan pelatihan. Anda dapat melihat contoh kode Gluon yang mengilustrasikan setiap karakteristik ini di halaman utama Gluon dan diulangi di halaman ringkasan untuk Gluon API.

Gluon API mencakup fungsionalitas untuk lapisan jaringan saraf, jaringan saraf berulang, fungsi kerugian, metode kumpulan data dan kumpulan data visi, kebun binatang model, dan kumpulan metode jaringan saraf eksperimental kontribusi. Anda dapat dengan bebas menggabungkan gluon dengan standar MXNet dan NumPy modul-misalnya, module, autograd, dan ndarray-serta dengan mengalir kontrol Python.

Gluon memiliki pilihan lapisan yang baik untuk model bangunan, termasuk lapisan dasar (Padat, Putus, dll.), Lapisan konvolusional, lapisan penyatuan, dan lapisan aktivasi. Masing-masing panggilan satu baris. Ini dapat digunakan, di antara tempat lain, di dalam wadah jaringan seperti gluon.nn.Sequential().

Sebuah HybridSequentialjaringan dapat cache (berubah menjadi grafik simbolik) untuk kinerja tinggi menggunakan hybridize()metode:

net = nn.HybridSequential ()

dengan net.name_scope ():

    net.add (nn.Dense (256, activation = "relu"))

    net.add (nn.Dense (128, activation = "relu"))

    net.add (nn.Dense (2))

net.hybridize ()

Perhatikan cara Densemetode lapisan dapat menggunakan nama lapisan aktivasi sebagai parameter. Itulah salah satu dari banyak kesamaan antara Gluon dan Keras.

Baik wadah Sequentialmaupun HybridSequentialtidak didokumentasikan sebagai bagian dari Gluon API. Seperti yang saya temukan dengan mencari pohon kode sumber, kode tersebut diimplementasikan di incubator-mxnet / python / mxnet / gluon / nn / basic_layers.py.

Apa yang baru di MXNet 1.3?

MXNet v1.3 menyertakan daftar panjang fitur baru, peningkatan, dan perbaikan bug. Sorotan meliputi kemampuan untuk menghibridisasi lapisan RNN (jaringan neural berulang) untuk performa, model visi terlatih yang baru dan diperbarui, ekspor model ke format ONNX (Open Neural Network Exchange), dan integrasi waktu proses Nvidia TensorRT ke MXNet untuk mempercepat inferensi . Lebih lanjut, integrasi Intel MKL (Math Kernel Library) ke MXNet memberikan peningkatan kinerja hingga 4x pada CPU Intel untuk operasi intensif, termasuk node konvolusi.

Komunitas MXNet juga telah memberikan perhatian lebih pada QA dan integrasi berkelanjutan. Di antara langkah-langkah yang diambil adalah dengan mengintegrasikan notebook sampel dari tutorial Deep Learning: The Straight Dope ke dalam pengujian CI setiap malam.

Pemasangan MXNet tanpa air mata

Jika Anda sudah memiliki instalasi notebook Python, MXNet dan Jupyter yang berfungsi dan saat ini dengan Notedown, Anda dapat melompat ke bagian berikutnya. Jika tidak, silakan ikuti.

Saya tidak dapat memberi tahu Anda berapa banyak masalah yang saya hadapi dengan versi lama dari berbagai komponen perangkat lunak yang menimbulkan kesalahan yang tidak jelas, bersama dengan gangguan dari instalasi paket lain, sebelum mencari tahu urutan yang dapat direproduksi ini. Dengan cara ini, Anda tidak akan menemukan bug, kecuali dalam kode Anda sendiri, dan Anda tidak boleh merusak kerangka pembelajaran mendalam lainnya yang mungkin telah Anda instal.

Apakah ini satu-satunya opsi penginstalan yang mungkin? Tidak, tentu saja tidak. Lebih mudah lagi menjalankan MXNet di Amazon SageMaker, atau menjalankan AMI Deep Learning di AWS, yang memiliki semua yang Anda perlukan sudah diinstal.

Mulailah dengan menginstal versi terbaru Python 3 untuk platform Anda. (Saya mengalami masalah saat menjalankan MXNet dengan Python 2 atau versi sebelumnya dari Python 3.) Saya sarankan menginstal Python 3 dari Python.org. Jika Anda lebih suka lingkungan Anaconda atau MiniConda, Anda dapat menginstal Python 3 dengan salah satunya, dan mungkin melewati langkah penginstalan Jupyter.

Pastikan Anda dapat menjalankan python3dari baris perintah dan melaporkan versi terbaru. Di penginstalan akhir Oktober 2018 saya, python3 -Vmengembalikan Python 3.7.1; versi Anda mungkin lebih baru.

Kemudian instal Jupyter. Saya menggunakan pip. Langkah ini tidak diperlukan jika Anda menginstal Anaconda, yang menginstal Jupyter secara default.

python3 -m pip install --upgrade pip

python3 -m pip install jupyter

Jika Anda menjalankan jupyter notebookdari baris perintah, Anda akan melihat jendela browser terbuka, dan dapat membuat buku catatan baru dengan kernel Python 3. Tutup kedua jendela tersebut dan hentikan server buku catatan, biasanya dengan menekan Ctrl-c dua kali pada baris perintah.

Sekarang instal Notedown menggunakan tarball seperti yang dijelaskan di kursus kilat Gluon Readme. Plugin Notedown memungkinkan Jupyter membaca buku catatan yang disimpan dalam format penurunan harga, yang berguna untuk kursus kilat dan untuk Pembelajaran Mendalam: The Straight Dope.

pip install //github.com/mli/notedown/tarball/master

Uji asap ini dengan menjalankan Jupyter dengan Notedown:

jupyter notebook --NotebookApp.contents_manager_class = 'notesown.NotedownContentsManager'

Sekali lagi tutup halaman web dan hentikan server buku catatan.

Sekarang kami siap membuat lingkungan virtual untuk MXNet. Jika Anda adalah pengguna Anaconda, Anda dapat membuat lingkungan virtual dengan conda. Saya menggunakan fasilitas venv Python3 asli, mulai dari direktori home saya:

python3 -m venv envs / mxnet

Sekarang aktifkan lingkungan virtual dan instal MXNet untuk platform Anda. Saya memilih MXNet build dengan MKL (pustaka kinerja tinggi Intel untuk CPU-nya), karena saya menggunakan Mac (yang tidak memiliki biner MXNet untuk CUDA GPU), tetapi jika Anda memiliki GPU Nvidia terbaru dengan CUDA diinstal di Linux atau Windows, Anda dapat menginstal versi MXNet dengan dukungan CUDA dan MKL. Pada shell Bash, penginstalan MXNet di lingkungan virtual adalah sebagai berikut:

sumber envs / mxnet / bin / aktifkan

pip instal mxnet-mkl

Aktivasi sedikit berbeda di C shell dan Fish shell, karena Anda dapat menjalankan skrip pengaktifan secara langsung daripada menggunakan source. Bagaimanapun, Anda harus mengaktifkan lingkungan kapan pun Anda ingin kembali ke penginstalan MXNet ini setelah menutup shell. Jika Anda tidak berada di direktori home Anda, perintah aktivasi Bash adalah:

sumber ~ / envs / mxnet / bin / aktifkan

Uji penginstalan MXNet di baris perintah dengan menjalankan Python 3 dan impor pustaka MXNet yang baru saja kami instal. Perhatikan bahwa (mxnet)awalan pada baris perintah berarti kita berada di lingkungan virtual.

(mxnet) Martins-Retina-MacBook: ~ martinheller $ python3

Python 3.7.1 (v3.7.1: 260ec2c36a, 20 Okt 2018, 03:13:28)

[Dentang 6.0 (dentang-600.0.57)] di darwin

Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut.

>>> impor mxnet sebagai mx

>>> dari mxnet import nd

>>> nd.array (((1,2,3), (5,6,7)))

[[1. 2. 3.]

 [5. 6. 7.]]

>>> ^ D

(mxnet) Martins-Retina-MacBook: ~ martinheller $

Sekarang, kami siap untuk menguji MXNet dalam notebook Jupyter dengan Notedown, di lingkungan virtual tempat kami menginstal MXNet:

Sekarang setelah Anda menguji penginstalan MXNet di notebook Jupyter, Anda dapat mengambil langkah berikutnya dan menguji Gluon lebih lengkap. Jelajahi repo gluon-api / gluon-api di GitHub, dan unduh buku catatan Jupyter dari kode contoh. Ubah ke direktori tempat Anda mendownload notebook, aktifkan lingkungan virtual MXNet Anda jika perlu, jalankan notebook Jupyter, buka sampel, dan jalankan. Mungkin perlu beberapa saat untuk menyelesaikan pelatihan. Jika semuanya baik-baik saja, Anda akan melihat sesuatu seperti berikut:

Tutorial Modul Gluon dan MXNet

MXNet sekarang memiliki sejumlah tutorial untuk Gluon dan Module API. Saya telah menyebutkan kursus panjang tentang deep learning dengan Gluon, Deep Learning: The Straight Dope, dan versi singkatnya, Kursus Singkat 60 Menit Gluon.

Selain itu, ada sekitar 30 tutorial Gluon untuk Python. Di sisi Module API, ada sekitar 24 tutorial untuk Python, lima untuk Scala, dua untuk C ++, sembilan untuk R, dan empat untuk Perl.

Saat saya meninjau Keras pada bulan September tahun ini, saya mengatakan bahwa "Jika saya memulai proyek pembelajaran mendalam baru hari ini, kemungkinan besar saya akan melakukan penelitian dengan Keras." Saya tidak lagi yakin tentang itu. Gluon / MXNet adalah pilihan yang hampir sama bagusnya dengan Keras / TensorFlow untuk penelitian pembelajaran mendalam tentang CPU dan GPU.

Sisi negatifnya, MXNet saat ini tidak memiliki dukungan untuk TPU atau FPGA, tidak seperti TensorFlow, dan tidak memiliki padanan TensorBoard TensorFlow untuk visualisasi grafik. Lebih lanjut, Keras / TensorFlow memiliki ekosistem yang lebih besar dari Gluon / MXNet.

Keras dapat diterapkan di lebih banyak lingkungan daripada Gluon, tetapi Anda dapat menerapkan model Gluon untuk prediksi ke perangkat Android, iOS, Raspberry Pi, dan Nvidia Jetson, selain komputer yang dapat melatih model dan TensorRT. Gluon dan Keras keduanya saat ini lebih matang daripada PyTorch, yang masih dalam status beta. PyTorch dan Gluon dapat membuat model secara dinamis; Keras saat ini tidak bisa.

Pada akhirnya, pilihan kerangka pembelajaran mendalam mana yang akan digunakan mungkin berkisar pada kebutuhan spesifik Anda — atau apa yang Anda ketahui dan sukai. Namun berkat Gluon dan peningkatan dramatis lainnya (dalam dokumentasi, tutorial, model, dll.), MXNet sedang dibentuk untuk menjadi pilihan yang sebaik TensorFlow atau PyTorch untuk pembelajaran mendalam.