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
Ubah jenis runtime
Akselerator 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 dependensiDi 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 lainDi 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 doronganJika 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 MakefileClone 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']
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: BangunAda 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.