Около месяца назад сервис Google Colaboratory, предоставляющий доступ к ноутбукам Jupyter, включил возможность бесплатного использования графического процессора Tesla K80 с 13 ГБ видеопамяти на борту.
Если до сих пор единственным препятствием для погружения в мир нейронных сетей могло быть отсутствие доступа к графическому процессору, то теперь можно смело сказать: «Держись, глубокое обучение, я иду!» Я пробовал использовать Colaboratory для работы над задачами Kaggle. Больше всего мне не хватало возможности удобно сохранять обученные модели тензорного потока и использовать тензорную доску.
В этом посте я хочу поделиться своим опытом и рассказать, как добавить эти функции в colab. И напоследок покажу, как можно получить доступ к контейнеру по ssh и использовать привычные удобные инструменты bash, screen, rsync.
Во-первых, почему это интересно?
Наличие графического ускорителя является критичным фактором для скорости обучения моделей глубокого обучения.Без графического процессора обучение нейронной сети займет много часов/дней и не позволит полноценно экспериментировать со структурой сети.
Немаловажное значение имеет и объем видеопамяти.
Больше памяти — вы можете установить больший размер пакета и использовать более сложные модели.
Сегодня 13G — это хорошая сумма; если вы хотите получить на свой стол примерно столько же, вам придется купить графический процессор уровня GTX 1080 Ti.
Что такое совместная работа
Это форк популярного фреймворка Блокнот Юпитер .Ваши ноутбуки доступны через Google Диск в формате .
ipynb, и вы можете запускать их локально.
Поддерживаются Python 2.7 и 3.6. Код выполняется на сервере в докер-контейнере.
Вы можете закрыть браузер, все процессы на сервере продолжат работать, и вы сможете позже снова подключиться к серверу.
Docker-контейнер предоставляется вам во временное пользование на 12 часов.
У вас есть root-права, и вы можете устанавливать и запускать любые программы внутри контейнера.
Colaboratory (далее — colab) также поддерживает совместную работу на ноутбуке, аналогично Google Docs. Это отличная платформа для начала изучения глубокого и машинного обучения.
Множество бесплатных курсов, например.
Открытый курс машинного обучения использовать формат блокнота Jupyter для своих учебных материалов.
Начнем обучение
Чтобы создать новый ноутбук, перейдите в связь .После успешного входа в систему и создания ноутбука выберите в меню «Среда выполнения» -> «Изменить тип среды выполнения», в открывшемся диалоговом окне установите для графического процессора параметр «Аппаратное ускорение», затем сохраните.
После этого вы можете убедиться, что тензорный поток использует графический процессор.
Просто скопируйте этот код в первую ячейку блокнота и выполните, нажав сдвиг+Ввод :
Теперь попробуем запустить простую модель тензорного потока из примеров.import tensorflow as tf tf.test.gpu_device_name()
Для этого клонируйте репозиторий github и запустите скрипт. ! git clone https://github.com/tensorflow/models.git
%run models/samples/core/get_started/premade_estimator.py
После выполнения этой команды мы увидим, как сеть обучается и делает свои первые прогнозы.
Существует достаточно много материалов описывающих возможности Jupyter, поэтому подробно останавливаться на этом не буду.
Монтируем гугл диск
Все работает нормально, но через 12 часов виртуальную машину у вас отберут и все данные внутри контейнера будут потеряны.Хорошо бы позаботиться о постоянном хранении.
У Colab есть примеры использования данных импорта из облачного хранилища и листов Google. Для этого требуется явный вызов операции копирования, а хотелось бы иметь возможность монтировать внешний диск к файловой системе внутри контейнера, тут на помощь приходят гугл диск и драйвер FUSE для него.
Вы можете подключить Google Drive, запустив код, по рецепту из статьи Код для монтирования 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}
После этого у вас появится доступ к каталогу, куда вы сможете записывать данные, не боясь потерять их после остановки контейнера.
Вы можете определить параметр model_dir в конфигурации модели, tensorflow автоматически восстановит состояние модели с последней контрольной точки.
Таким образом, вы можете продолжить обучение модели или выполнить вывод в любое время.
Тензорборд
Мне нравится использовать тензорную доску, когда я экспериментирую со структурой и параметрами нейронной сети.Если вы хотите узнать больше об этом инструменте, я рекомендую ознакомиться с ним.
Поэтому я искал возможность запустить тензорную доску в колабе.
Отвечать нашел это на SO .
Через переменную LOG_DIR вам необходимо указать путь к model_dir из конфигурации модели тензорного потока или к корневому каталогу, который содержит множество сохраненных моделей.
Код для запуска тензорной доски.
LOG_DIR = '/tmp'
get_ipython().
system_raw( 'tensorboard --logdir {} --host 0.0.0.0 --port 6006 &' .
format(LOG_DIR) ) ! wget -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip ! unzip -o ngrok-stable-linux-amd64.zip get_ipython().
system_raw('.
/ngrok http 6006 &')
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
После выполнения в последней строке отобразится URL, открыв который в браузере, мы увидим знакомую тензорную доску.
Доступ через ssh
Если у вас есть опыт использования Jupyter. Как вы, наверное, знаете, если выйти за рамки игрушечных моделей, некоторые преимущества формата блокнота Jupyter становятся его недостатками.Ноутбук превращается в трудночитаемую кашу, а результаты вычислений становится сложно воспроизвести.
Блокноты Jupyter остаются отличным инструментом для обучения, визуализации и небольших экспериментов.
Однако в проектах среднего размера я предпочитаю структурировать код Python классическим способом, используя модули и классы.
Над серьезным проектом удобнее работать в PyCharm/Vim и т.д. Постоянно синхронизировать код через репозиторий, запускать .
py файлы через jupyter не очень удобно, использовать для этого привычные инструменты гораздо комфортнее.
На основе примера работы с тензорной панелью я написал код, который открывает ssh-туннель в контейнер.
#Generate root password
import secrets, string
password = ''.
join(secrets.choice(string.ascii_letters + string.digits) for i in range(20)) #Download ngrok ! wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip ! unzip -qq -n ngrok-stable-linux-amd64.zip #Setup sshd ! apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen > /dev/null #Set root password ! echo root:$password | chpasswd ! mkdir -p /var/run/sshd ! echo "PermitRootLogin yes" >> /etc/ssh/sshd_config ! echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config ! echo "LD_LIBRARY_PATH=/usr/lib64-nvidia" >> /root/.
bashrc ! echo "export LD_LIBRARY_PATH" >> /root/.
bashrc #Run sshd get_ipython().
system_raw('/usr/sbin/sshd -D &') #Ask token print("Copy authtoken from https://dashboard.ngrok.com/auth ") import getpass authtoken = getpass.getpass() #Create tunnel get_ipython().
system_raw('.
/ngrok authtoken $authtoken && .
/ngrok tcp 22 &') #Print root password print("Root password: {}".
format(password))
#Get public address
! curl -s http://localhost:4040/api/tunnels | python3 -c \
"import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
Для создания TCP-туннеля вам потребуется создать учетную запись на сайте.
ngrok.com и скопируйте оттуда токен авторизации.
В бесплатной версии ngrok два туннеля не поддерживаются, поэтому если http-туннель на тензорной доске еще работает, его нужно отключить, сделать это можно, например, перезапустив контейнер, нажав Ctrl+M, затем ".
" .
После запуска туннеля вы увидите на своем ноутбуке примерно следующее: Root password: 3KTyBVjtD6zPZX4Helkj
tcp://0.tcp.ngrok.io:15223
Теперь со своего рабочего компьютера вы можете войти в контейнер colab с помощью любого ssh-клиента, и в этом примере хост — 0.tcp.ngrok.io, порт 15223. Пример для Linux. ssh [email protected] -p15223
Бонус для скачивателей, за импорт данных из болтать и отправлять материалы непосредственно из лаборатории, вы можете использовать официальный API клиент , устанавливается командой pip установить Kaggle .
Теги: #Машинное обучение #linux #*nix #docker #GPGPU #Google Cloud Platform #ssh #TensorFlow #kaggle #jupyter Notebook #jupyter Notebook
-
Гегель, Георг Вильгельм Фридрих
19 Oct, 24 -
Все На Своем Месте
19 Oct, 24 -
Фиаско Развития Носимой Электроники
19 Oct, 24 -
Авто@Mail.ru Обновлено
19 Oct, 24