Bangun Caffe di Google Colaboratory: Kartu Grafis Gratis di Awan

Google Colaboratory adalah layanan cloud yang baru diluncurkan yang bertujuan menyederhanakan penelitian dalam pembelajaran mesin dan pembelajaran mendalam. Menggunakan Colaboratory, Anda bisa mendapatkan akses jarak jauh ke mesin dengan kartu video yang terhubung, dan sepenuhnya gratis, yang sangat menyederhanakan kehidupan ketika Anda harus melatih jaringan saraf yang dalam. Kita dapat mengatakan bahwa ini adalah analog dari dokumen Google untuk Notebook Jupyter.

Colaboratory memiliki Tensorflow yang sudah diinstal sebelumnya dan hampir semua pustaka Python diperlukan untuk bekerja. Jika suatu paket tidak ada, ia dengan mudah dipasang saat bepergian melalui pip atau apt-get . Tetapi bagaimana jika Anda perlu membangun proyek dari sumber dan terhubung ke GPU? Ternyata ini mungkin tidak sesederhana yang saya temukan selama pembuatan SSD-Caffe . Dalam publikasi ini saya akan memberikan deskripsi singkat tentang Kolaboratori, menjelaskan kesulitan yang dihadapi dan bagaimana menyelesaikannya, serta memberikan beberapa trik yang bermanfaat.

Semua kode tersedia di Notebook Kolaboratif saya.


Secara singkat tentang Kolaborasi


Secara kasar, Colaboratory memungkinkan Anda menjalankan Jupyter Notebook pada mesin jarak jauh. File kolaborasi adalah .ipynb "laptop" biasa dan disimpan di disk Google. Ada juga serangkaian fungsi yang memungkinkan Anda untuk mengunggah file dari mesin jarak jauh ke Google disk dan sebaliknya. Anda juga dapat berbagi file ini dengan orang lain, Anda dapat menulis komentar pada mereka, seperti pada dokumen Google.

Di Kolaborator, Anda dapat menggunakan GPU, yaitu Tesla K80. Untuk melakukan ini, hubungkan di pengaturan: Runtime  rightarrowUbah jenis runtime  rightarrowAkselerator perangkat keras. Perlu dicatat bahwa GPU tidak selalu tersedia, dan kemudian Colaboratory akan menawarkan untuk memulai mesin tanpa itu.

Tampaknya tidak ada yang bisa dimulai kecuali Jupyter Notebook itu sendiri, tetapi ada akses tidak langsung ke terminal: untuk ini Anda perlu menambahkan tanda seru di depan perintah terminal, misalnya !mkdir images . Secara umum, kita dapat berasumsi bahwa kita berhadapan dengan mesin biasa yang sempurna di mana Ubuntu 17.10 diinstal (pada saat penulisan), tetapi terhubung dari jarak jauh. Oleh karena itu segala sesuatu yang dapat dilakukan melalui terminal (tidak secara interaktif) dapat dilakukan di atasnya, termasuk:

  • repositori clone menggunakan git clone ,
  • memuat data menggunakan wget (omong-omong, bahkan file besar dimuat hampir secara instan dari disk Google),
  • gunakan make (dan kemungkinan besar cmake )
  • instal alat dan pustaka menggunakan apt-get dan pip

Beberapa komentar lagi tentang Kolaborasi:

  • Tampaknya pengguna memiliki akses tanpa batas ke semua file dalam sistem (perintah apa pun perlu ditulis tanpa sudo );
  • Status terminal tidak ditransfer antar tim, bahkan jika mereka berada di sel yang sama (misalnya, cd dir jika perlu, Anda harus menulis di awal setiap perintah);
  • Jika Anda memutuskan sambungan dari Kolaborator untuk waktu yang lama, semua perubahan dalam mesin virtual akan dihapus, termasuk semua paket yang diinstal dan file yang diunduh, oleh karena itu, disarankan agar instalasi paket disertakan dalam Jupyter Notebook;
  • Setelah 12 jam penggunaan terus menerus, mesin mati secara otomatis, tetapi kemudian dapat dinyalakan kembali (secara teori, dalam praktiknya, GPU mungkin tidak tersedia).

SSD-Caffe Build


Saya ingin mencoba Single Shot Detector (SSD) , yaitu penerapan Caffe -nya di Google Colaboratory, tetapi untuk ini, proyek perlu dirakit dari sumber.

Ngomong-ngomong, jika ada versi Caffe yang cocok untuk Anda, ada cara yang jauh lebih mudah (bahkan berfungsi, meskipun saya belum mencoba menjalankan apa pun):

 !apt install caffe-cuda 

Merakit SSD-Caffe dari sumber adalah pencarian yang cukup panjang dari beberapa langkah, yang hanya bisa dilakukan dengan tongkat penyangga.

Langkah 1: menginstal dependensi

Di sini kita harus mengunduh semua dependensi untuk Caffe menggunakan apt . Namun, sebelum melakukan ini, Anda harus mengizinkan apt untuk mengunduh kode sumber ketergantungan. Panduan instalasi Caffe mengatakan bahwa ini memerlukan "baris deb-src di file sources.list". Sayangnya, tidak ada detail di sana, jadi saya hanya membatalkan komentar semua baris deb-src di file /etc/apt/sources.list :

 with open('/etc/apt/sources.list') as f: txt = f.read() with open('/etc/apt/sources.list', 'w') as f: f.write(txt.replace('# deb-src','deb-src')) 

Dan itu berhasil. Tetap hanya mengunduh dependensi:

 !apt update !apt build-dep caffe-cuda 

Langkah 2: perlu kompiler lain

Di sini masalahnya adalah ini: g++-7 , yang merupakan default secara default, untuk beberapa alasan tidak kompatibel dengan kompiler CUDA nvcc , jadi Anda harus menggunakan sesuatu yang lain. Saya mengunduh g++-5 dan menjadikannya kompiler default:

 !apt install g++-5 !update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 20 !update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 20 

Langkah 3: harus membangun dorongan

Jika Anda mencoba membuat Caffe pada tahap ini, masalah akan muncul ketika Anda mencoba menghubungkan boost, karena itu dibangun oleh kompiler lain, jadi Anda harus mengunduh sumbernya dan juga membangun menggunakan g++-5 ( lebih lanjut di situs boost ):

 !wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2 !tar --bzip2 -xf boost_1_67_0.tar.bz2 !cd boost_1_67_0 && ./bootstrap.sh --exec-prefix=/usr/local --with-libraries=system,filesystem,regex,thread,python --with-python-version=2.7 --with-python-root=/usr !cd boost_1_67_0 && ./b2 install 

Langkah 4: Konfigurasikan Makefile

Clone Caffe dengan GitHub:

 !git clone https://github.com/weiliu89/caffe.git && cd caffe && git checkout ssd 

Dan kami mengubah bidang yang diperlukan di Makefile.config - Saya mengubah jalur ke CUDA, mengubah opsi BLAS, mengubah versi OpenCV ke yang ketiga, menambahkan lapisan Python, dan juga menambahkan semua jalur ke perpustakaan yang diinstal, tetapi untuk beberapa alasan tidak ditemukan (semua ini nyaman) selesai menggunakan Python):

 with open('caffe/Makefile.config.example') as f: config = f.read() comment = ['CUDA_DIR := /usr/local/cuda', 'BLAS := open'] uncomment = ['# CUDA_DIR := /usr', '# BLAS := atlas', '# OPENCV_VERSION := 3', '# WITH_PYTHON_LAYER := 1'] # replace = [('INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include', 'INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial /usr/local/lib/python2.7/dist-packages/numpy/core/include/'), ('LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib', 'LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial')] for c in uncomment: config = config.replace(c, c[2:]) for c in comment: config = config.replace(c, '# '+c) for c1,c2 in replace: config = config.replace(c1, c2) with open('caffe/Makefile.config', 'w') as f: f.write(config) 

Juga, di Makefile sendiri, saya harus mengganti semua tag -isystem dengan -I : keduanya bertanggung jawab untuk menemukan header, tetapi mereka diproses sedikit berbeda, dan tanpa masalah penggantian ini sudah terjadi ketika stdlib terhubung ( lebih detail di sini ):

 with open('caffe/Makefile') as f: mfile = f.read() with open('caffe/Makefile', 'w') as f: f.write(mfile.replace('-isystem','-I')) 

Langkah 5: Bangun

Ada satu kruk terakhir yang tersisa - untuk memperbaiki file c++config.h , jika tidak ada masalah dengan tipe nan ( selengkapnya ):

 with open('/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h') as f: txt = f.read() with open('/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h', 'w') as f: f.write(txt.replace('/* #undef _GLIBCXX_USE_C99_MATH */', '/* #undef _GLIBCXX_USE_C99_MATH */\n#define _GLIBCXX_USE_C99_MATH 1')) 

Sekarang, sebenarnya, Anda dapat membuat Caffe:

 !cd caffe && make -j8 && make pycaffe && make test -j8 && make distribute !echo /usr/local/lib >> /etc/ld.so.conf && ldconfig !echo /content/caffe/distribute/lib >> /etc/ld.so.conf && ldconfig 

Dua baris terakhir menambahkan jalur perpustakaan, yaitu boost dan Caffe.

Sekarang Caffe dapat digunakan (Anda hanya perlu menentukan jalurnya di PYTHONPATH):

 import sys caffe_path = !cd caffe/python && pwd sys.path.insert(0, caffe_path[0]) import caffe 

Untuk mengujinya, saya menguji proyek Mobilenet-SSD : kodenya juga ada di Colaboratory Notebook saya.

Secara khusus, saya mengukur waktu prediksi untuk satu gambar, dan akselerasi pada GPU sekitar 3,8.

Bonus: beberapa trik yang bermanfaat


Ada tutorial hebat tentang Medium di Google Colaboratory. Juga di Kolaborasi itu sendiri ada file dengan contoh hampir semua yang mungkin dibutuhkan.

Pasang disk Google di sistem file mesin virtual:

 !apt-get install -y -qq software-properties-common python-software-properties module-init-tools !add-apt-repository -y ppa:alessandro-strada/ppa 2>&1 > /dev/null !apt-get update -qq 2>&1 > /dev/null !apt-get -y install -qq google-drive-ocamlfuse fuse from google.colab import auth auth.authenticate_user() from oauth2client.client import GoogleCredentials creds = GoogleCredentials.get_application_default() import getpass !google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} < /dev/null 2>&1 | grep URL vcode = getpass.getpass() !echo {vcode} | google-drive-ocamlfuse -headless -id={creds.client_id} -secret={creds.client_secret} 

Kode ini akan mengembalikan tautan dan memberikan jendela input. Anda harus mengikuti tautan, menyalin kode dan memasukkannya ke jendela. Untuk beberapa alasan saya harus melakukan ini dua kali. Selanjutnya:

 !mkdir -p drive !google-drive-ocamlfuse drive 

Setelah itu, Anda dapat menggunakan disk Google sebagai direktori biasa. Selain itu, semua perubahan dalam direktori ini secara otomatis disinkronkan dengan Google-drive.

Instalasi Keras :

 !pip install -q keras import keras 

Pasang PyTorch :

 from os import path from wheel.pep425tags import get_abbr_impl, get_impl_ver, get_abi_tag platform = '{}{}-{}'.format(get_abbr_impl(), get_impl_ver(), get_abi_tag()) accelerator = 'cu80' if path.exists('/opt/bin/nvidia-smi') else 'cpu' !pip install -q http://download.pytorch.org/whl/{accelerator}/torch-0.3.0.post4-{platform}-linux_x86_64.whl torchvision import torch 

Ubah direktori kerja:

 import os os.chdir("/path/to/wdir") 

Hapus semua perubahan dan mulai ulang mesin:

 !kill -9 -1 

Unggah file ke mesin lokal:

 from google.colab import files files.download('file.ext') 

Dapatkan kamus dari file yang diunggah ke disk Google:

 from google.colab import files uploaded = files.upload() 

Bisukan output perintah terminal (redirect ke variabel):

 lines_list = !pwd 

Secara umum, Google Colaboratory memberikan peluang yang baik untuk melakukan pelatihan jaringan saraf di cloud. Benar, ini mungkin tidak cukup untuk grid yang sangat besar. Kelebihan lainnya adalah kemampuan untuk menjalankan kode secara independen dari sistem operasi lokal (yang baik untuk reproduksibilitas), dan juga bekerja sama pada proyek yang sama. Sebagai gantinya, GPU mungkin tidak tersedia, termasuk untuk waktu yang lama.

Source: https://habr.com/ru/post/id413229/


All Articles