Бесплатный Графический Процессор Tesla K80 Для Ваших Экспериментов С Нейронными Сетями



Бесплатный графический процессор Tesla K80 для ваших экспериментов с нейронными сетями

Около месяца назад сервис 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 для своих учебных материалов.



Начнем обучение

Чтобы создать новый ноутбук, перейдите в связь .

После успешного входа в систему и создания ноутбука выберите в меню «Среда выполнения» -> «Изменить тип среды выполнения», в открывшемся диалоговом окне установите для графического процессора параметр «Аппаратное ускорение», затем сохраните.



Бесплатный графический процессор Tesla K80 для ваших экспериментов с нейронными сетями

После этого вы можете убедиться, что тензорный поток использует графический процессор.

Просто скопируйте этот код в первую ячейку блокнота и выполните, нажав сдвиг+Ввод :

  
  
  
  
  
  
   

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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.