Google Colaboratory هي خدمة سحابية تم إطلاقها مؤخرًا تهدف إلى تبسيط البحث في التعلم الآلي والتعلم العميق. باستخدام Colaboratory ، يمكنك الوصول عن بُعد إلى جهاز ببطاقة فيديو متصلة ، وهو مجاني تمامًا ، مما يبسط الحياة كثيرًا عندما يكون عليك تدريب الشبكات العصبية العميقة. يمكننا أن نقول أنه هو بعض التناظرية من مستندات Google للكمبيوتر المحمول Jupyter.
Colaboratory لديه Tensorflow
مثبت مسبقًا وجميع مكتبات Python اللازمة للعمل تقريبًا. إذا كانت الحزمة مفقودة ، يمكن تثبيتها بسهولة أثناء التنقل من خلال
pip
أو
apt-get
. ولكن ماذا لو كنت بحاجة إلى بناء مشروع من المصدر والاتصال بوحدة معالجة الرسومات؟ اتضح أن هذا قد لا يكون بهذه البساطة التي اكتشفتها أثناء بناء
SSD-Caffe . في هذا المنشور ، سأقدم وصفًا موجزًا للمعهد ، وأصف الصعوبات التي واجهتها وكيفية حلها ، بالإضافة إلى تقديم بعض الحيل المفيدة.
كل الكود متاح في
دفتر الملاحظات التعاوني الخاص بي.
باختصار حول تعاونية
بشكل تقريبي ، يسمح لك Colaboratory بتشغيل Jupyter Notebook على جهاز بعيد. الملفات التعاونية هي "أجهزة كمبيوتر محمولة" عادية. وتخزينها على قرص Google. هناك أيضًا مجموعة من الوظائف التي تسمح لك بتحميل الملفات من جهاز بعيد إلى قرص Google والعكس. يمكنك أيضًا مشاركة هذه الملفات مع الآخرين ، ويمكنك كتابة التعليقات عليها ، كما هو الحال في مستندات Google.
في Colaboratory ، يمكنك استخدام GPU ، وهي Tesla K80. للقيام بذلك ، قم بتوصيله في الإعدادات: Runtime
تغيير نوع وقت التشغيل
مسرع الأجهزة. من الجدير بالذكر أن وحدات معالجة الرسوميات (GPU) ليست متاحة دائمًا ، ومن ثم ستعرض الشركة التعاونية تشغيل الجهاز بدونها.
يبدو أنه لا يمكن بدء أي شيء باستثناء Jupyter Notebook نفسه ، ولكن هناك وصول غير مباشر إلى المحطة: لهذا تحتاج إلى إضافة علامة تعجب أمام الأمر الطرفي ، على سبيل المثال
!mkdir images
. بشكل عام ، يمكننا أن نفترض أننا نتعامل مع آلة عادية مثالية مثبت عليها Ubuntu 17.10 (في وقت كتابة هذا التقرير) ، ولكن يتم توصيله عن بُعد. ويترتب على ذلك أنه يمكن القيام بكل ما يمكن القيام به من خلال المحطة (وليس بشكل تفاعلي) ، بما في ذلك:
- مستودعات استنساخ باستخدام
git clone
، - تحميل البيانات باستخدام
wget
(بالمناسبة ، حتى الملفات الكبيرة يتم تحميلها على الفور تقريبًا من قرص Google) ، - استخدم
make
(وعلى الأرجح cmake
) - تثبيت الأدوات والمكتبات باستخدام
apt-get
and pip
المزيد من التعليقات حول التعاون:
- يبدو أن المستخدم لديه وصول غير محدود إلى جميع الملفات في النظام (يجب كتابة أي أوامر دون
sudo
) ؛ - لا يتم نقل الحالة النهائية بين الفرق ، حتى لو كانوا في نفس الخلية (على سبيل المثال ،
cd dir
إذا لزم الأمر ، سيكون عليك الكتابة في بداية كل أمر) ؛ - إذا قمت بقطع الاتصال من Colaboratory لفترة طويلة ، فسيتم مسح جميع التغييرات في الجهاز الظاهري ، بما في ذلك جميع الحزم المثبتة والملفات التي تم تنزيلها ، وبالتالي ، فمن المستحسن تضمين تثبيت الحزم في Jupyter Notebook ؛
- بعد 12 ساعة من الاستخدام المتواصل ، يتم إيقاف تشغيل الجهاز تلقائيًا ، ولكن بعد ذلك يمكن إعادة تشغيله (نظريًا ، من الناحية العملية ، قد لا تكون وحدة معالجة الرسومات متاحة).
بناء SSD-Caffe
كنت أرغب في تجربة
كاشف اللقطة الواحدة (SSD) ، وهو
تنفيذ Caffe الخاص به في Google Colaboratory ، ولكن لهذا السبب ، كان من الضروري تجميع المشروع من المصدر.
بالمناسبة ، إذا كان أي إصدار من
Caffe مناسبًا لك ، فهناك طريقة أسهل بكثير (حتى أنه يعمل ، على الرغم من أنني لم أحاول تشغيل أي شيء):
!apt install caffe-cuda
تجميع SSD-Caffe من المصدر هو مهمة طويلة إلى حد ما من عدة خطوات ، والتي لا يمكن القيام بها إلا بالعكازات.
الخطوة 1: تثبيت التبعياتهنا يجب أن ننزل كل تبعيات Caffe باستخدام
apt
. ومع ذلك ، قبل القيام بذلك ، يجب السماح لـ
apt
بتنزيل شفرة مصدر التبعية. يقول
دليل تثبيت Caffe أن هذا يتطلب "سطر deb-src في ملف sources.list". لسوء الحظ ، لا توجد تفاصيل هناك ، لذلك قمت فقط بإلغاء تعليق جميع أسطر
deb-src
في ملف
/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'))
وعملت. يبقى فقط لتحميل التبعيات:
!apt update !apt build-dep caffe-cuda
الخطوة 2: بحاجة إلى مترجم آخرهنا
nvcc
المشكلة في:
g++-7
، وهو الافتراضي بشكل افتراضي ، لسبب ما غير متوافق مع مترجم
nvcc
CUDA ، لذا عليك استخدام شيء آخر. لقد قمت بتنزيل
g++-5
وجعلته المترجم الافتراضي:
!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
الخطوة 3: يجب تعزيز الدعمإذا حاولت بناء Caffe في هذه المرحلة ، فستظهر المشاكل عند محاولة توصيل التعزيز ، لأنه تم إنشاؤه بواسطة مترجم آخر ، لذلك يجب عليك تنزيل مصادره والبناء باستخدام
g++-5
(
المزيد على موقع التعزيز ):
!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
الخطوة 4: تكوين Makefileاستنساخ كافيه مع GitHub:
!git clone https://github.com/weiliu89/caffe.git && cd caffe && git checkout ssd
وقمنا بتغيير الحقول الضرورية في Makefile.config - لقد غيرت المسار إلى CUDA ، وغيرت خيار BLAS ، وغيرت إصدار OpenCV إلى الثالث ، وأضفت طبقة 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']
أيضًا ، في ملف Makefile نفسه ، اضطررت إلى استبدال جميع علامات
-isystem
بـ
-I
: كلاهما مسؤولان عن العثور على الرؤوس ، ولكن تتم معالجتهما بشكل مختلف قليلاً ، وبدون حدوث مشاكل الاستبدال هذه بالفعل عند توصيل stdlib (
مزيد من التفاصيل هنا ):
with open('caffe/Makefile') as f: mfile = f.read() with open('caffe/Makefile', 'w') as f: f.write(mfile.replace('-isystem','-I'))
الخطوة 5: البناءكان هناك عكاز واحد متبقي - لتصحيح
c++config.h
، وإلا فهناك مشاكل مع أنواع nan (
المزيد ):
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'))
الآن ، في الواقع ، يمكنك بناء 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
يضيف السطران الأخيران مسارات المكتبة ، وهما التعزيز و Caffe.
الآن يمكن استخدام Caffe (تحتاج فقط إلى تحديد المسار إليه في PYTHONPATH):
import sys caffe_path = !cd caffe/python && pwd sys.path.insert(0, caffe_path[0]) import caffe
لاختباره ، اختبرت مشروع
Mobilenet-SSD : الرمز موجود أيضًا في
دفتر الملاحظات التعاوني الخاص بي.
على وجه الخصوص ، قمت بقياس وقت التنبؤ لصورة واحدة ، وكان التسارع على GPU حوالي 3.8.
المكافأة: بعض الحيل المفيدة
هناك برنامج
تعليمي رائع حول Medium على Google Colaboratory. أيضًا في Colaboratory نفسه ، توجد ملفات تحتوي على أمثلة لكل شيء تقريبًا قد يكون مطلوبًا.
قم بتحميل قرص Google في نظام ملفات الجهاز الظاهري:
!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}
سيعيد هذا الرمز الرابط ويعطي نافذة إدخال. تحتاج إلى اتباع الرابط ، ونسخ الرمز وإدخاله في النافذة. لسبب ما علي القيام بذلك مرتين. التالي:
!mkdir -p drive !google-drive-ocamlfuse drive
بعد ذلك ، يمكنك استخدام قرص Google كدليل عادي. بالإضافة إلى ذلك ، تتم مزامنة جميع التغييرات في هذا الدليل تلقائيًا مع محرك جوجل.
تركيب
Keras :
!pip install -q keras import keras
تثبيت
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
تغيير دليل العمل:
import os os.chdir("/path/to/wdir")
امسح جميع التغييرات وأعد تشغيل الجهاز:
!kill -9 -1
قم بتحميل الملف إلى الجهاز المحلي:
from google.colab import files files.download('file.ext')
احصل على القاموس من الملفات التي تم تحميلها على قرص Google:
from google.colab import files uploaded = files.upload()
إخراج أمر كتم المحطة الطرفية (إعادة التوجيه إلى المتغير):
lines_list = !pwd
بشكل عام ، يوفر Google Colaboratory فرصة جيدة لإجراء تدريب للشبكات العصبية في السحابة. صحيح ، قد لا يكون هذا كافياً للشبكات الكبيرة جدًا. ميزة أخرى هي القدرة على تشغيل التعليمات البرمجية بشكل مستقل عن نظام التشغيل المحلي (وهو أمر جيد للتكرار) ، وكذلك العمل معًا في نفس المشروع. كصيد ، قد لا تكون GPU متاحة ، بما في ذلك لفترة طويلة.