Если вам не очень повезло и на работе нет n-ядерного монстра, которого можно загрузить своими скриптами, то эта статья для вас.
Также, если вы привыкли всю ночь прогонять скрипты (а утром прочитать, что где-то забыли скобку, и 6 часов расчетов потерялись) — у вас есть шанс наконец познакомиться с Amazon Web Services.
В этой статье я расскажу вам, как начать работу с сервисом EC2. По сути, это пошаговая инструкция по полуавтоматической аренде спотового инстанса AWS для работы с блокнотами Jupyter и создания библиотек Anaconda. Будет полезно, например, тем, кто до сих пор использует свой игрушечный мак в соревнованиях Kaggle.
Наверное, реакцией каждого, кто впервые посетил сайт Amazon Web Services, является растерянность от обилия предлагаемых сервисов и виртуальных машин (которые там называются инстансами).
В этом руководстве я покажу вам, как недорого арендовать вычислительный экземпляр AWS и быстро настроить на нем сервер Jupyter, чтобы использовать ваши любимые ноутбуки.
Мы сосредоточимся на построении Анаконды и задачах машинного обучения, но понятно, что сервер можно использовать для различных целей, в том числе для майнинга биткойнов :) Мотивация : мы хотим быстро (в течение 5-7 минут) получить доступ с Jupyter-ноутбуков к более серьёзным вычислительным ресурсам, чем у домашнего компьютера.
В общем, есть хороший вариант для этой цели руководство .
Статья, которую вы читаете, представляет собой вольный перевод с дополнениями.
Мы также напишем скрипт, который будет запускаться каждый раз, когда мы арендуем машину.
И вот оно результат для тех, кто спешит. Мы возьмем в аренду спотовый инстанс c3.4xlarge с 16 ядрами и 30 ГБ оперативной памяти.
«Спот» означает, что мы по сути будем участвовать в аукционе и, установив цену за час использования машины, будем иметь к ней доступ до тех пор, пока спрос не увеличится.
Если спрос увеличится и рыночная цена превысит ту, которую мы установили, машина «убежит» от нас, причем внезапно.
Именно по этой причине (нестабильность) многие боятся использовать спотовые инстансы, хотя на них можно существенно сэкономить по сравнению с инстансами по требованию.
Та же машина, но в более «стабильном» режиме, это будет стоить примерно $0,85/час, мы потратим в четыре раза меньше.
Теперь о типах автомобилей.
Они не плохие описал в документации AWS, поэтому мы выбираем Тип C — Компьютеры, оптимизированные для вычислений.
Прокат автомобилей
Для начала давайте зарегистрируемся Веб-сайт Веб-сервисы Amazon. Инструкцию писать здесь не буду — все как обычно, просто нужно подтвердить это и по телефону, и по электронной почте.Вам нужно будет привязать кредитную карту к своей учетной записи, но если вы боитесь тратить деньги, вы можете получить экземпляр m4large (2 процессора, 8 ГБ ОЗУ) за 0,05 доллара США в час.
Перейдите в консоль AWS и найдите сервис EC2 (Elastic Compute Cloud) в разделе «Сервисы».
В разделе «Спотовые запросы» нажмите «Запросить спотовый инстанс».
Выберите тип ОС, которая будет установлена на виртуальной машине.
В общих чертах: Windows дороже, среди *Nix не столь важно, какой выбрать, пусть это будет Ubuntu.
На следующей вкладке нас просят выбрать сам экземпляр.
Давайте посидим здесь и сравним( здесь все описано подробнее) и листаем до c3.4xlarge.
Далее самое главное — установить цену за час использования виртуальной машины.
Мы видим текущие цены в выбранных регионах.
Если вы видите, что ваши цены намного выше, чем на скриншоте, это означает, что в текущем регионе сейчас всплеск - смените регион (в правом верхнем углу рядом с вашим именем).
Пока что я успешно использую регион Франкфурт, но вы также можете изучить статистику и посмотреть, какие регионы дешевле и имеют стабильные цены.
Лучше установить цену в 1,5 раза выше текущей рыночной стоимости экземпляра в данном регионе.
В этой ситуации цена будет немного колебаться, но редко превышает заявленную вами.
Соответственно, машина не будет часто «падать».
Теперь подключим хранилище.
Amazon предлагает тридцать ГБ, так почему бы не взять все 30…
Вы можете пропустить маркировку экземпляров.
А затем настройте порты.
Здесь главное открыть порт, который мы будем использовать для сервера Jupyter. Пусть это будет традиционно 8888. Нажимаем «Добавить правило», оставляем опцию «Пользовательское правило TCP» и указываем порт 8888. Также добавляем протоколы HTTP и HTTPS и говорим, кто может слушать порты.
Просто установите флажок «Мой IP» справа.
На следующем этапе мы создаем ключ (pem-файл), который будет идентифицировать нас при удаленном подключении к машине по протоколу SSH. Вы можете называть его как хотите - главное после скачивания знать где он находится и ни в коем случае (!!!) не публикуйте на GitHub или где-либо еще в Интернете.
Относитесь к этому файлу почти как к паролю для банковской карты.
Amazon рекомендует периодически обновлять pem-файлы (их можно иметь по 2 в каждом регионе, второй раз скачать один и тот же ключ нельзя).
Наконец все подтверждаем, ждем пару минут запуска инстанса и в EC2 на вкладке «Инстансы» замечаем, что что-то появилось.
Выберите появившийся экземпляр и нажмите «Подключиться».
Amazon предоставляет инструкции, что делать дальше.
Если вы используете Windows, то чтение статьи для вас не заканчивается (обычно на этом месте в туториалах можно прочитать «Windows? Удачи!»).
Вам просто нужно прочитать инструкции Amazon о том, как подключиться с помощью Putty. Если вы используете *NIX, выполните следующие 2 команды:
Первый следит за тем, чтобы не все проходящие мимо имели доступ к вашему pem-файлу.chmod 400 <PEM-file name>.
pem ssh -i <PEM-file name>.
pem ubuntu@<HOST>
Второй — это фактическое подключение к виртуальной машине со своим уникальным хостом.
Настройка машины
Если все прошло гладко, вы, как пользователь Ubuntu, попадете на терминал удаленной машины.Мы можем делать что угодно, запускать любые скрипты, но мы сосредоточимся на настройке экземпляра для задач машинного обучения с помощью Jupyter. Все команды описаны ниже, чтобы их было легче понять (и чтобы все было сделано без шуток в стиле РМ -РФ / ), но вообще второй раз и далее будем запускать его bash-скриптом.
Загрузите и установите Миниконду.
Он все равно гораздо легче Анаконды, и необходимые библиотеки мы установим (правда, я не люблю seaborn, но с Анакондой все в порядке).
С машиной мы пробудем недолго, вряд ли больше нескольких часов, поэтому не будучи перфекционистами, устанавливаем все в домашнюю директорию.
wget -c http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh
bash Miniconda-latest-Linux-x86_64.sh -b -p ~/miniconda
export PATH=~/miniconda/bin:$PATH
Теперь давайте установим все необходимые библиотеки.
conda install -y numpy scipy pandas scikit-learn jupyter
Можно, например, Вовпал Ваббит доставить (быстрые линейные модели, которые иногда считаются более быстрыми, чем реализации MapReduce на больших выборках).
sudo apt-get -qq install vowpal-wabbit
Git тоже не помешает — так вы сразу сможете скачать нужный репозиторий (использование Amazon S3 в этом уроке я не рассматриваю).
sudo apt-get -qq install git
Давайте создадим сертификат, чтобы можно было заходить в Jupyter по паролю — это гораздо безопаснее.
Теперь мы сделаем это вручную; во второй раз этот созданный сертификат будет использоваться сценарием.
openssl req -x509 -nodes -days 365 rsa:2048 -keyout jupyter.pem -out jupyter.pem
Вам будет предложено ввести информацию о пользователе.
В принципе, это не обязательно заполнять.
Теперь давайте создадим пароль для входа на сервер Jupyter.
Вы можете использовать функцию passwd из Ipython python
>>> from IPython.lib import passwd
>>> passwd('Sample password')
Появится хэш вашего пароля.
Давайте скопируем его.
'sha1:d0c0b7eb515e:f0e59fcd04aec7bb50886084ae8e1fa9a273f88e'
Наконец, мы создаем профиль IPython и запускаем сервер, предварительно указав в файле настроек, какой порт мы хотим использовать и с каких адресов разрешен доступ.
Укажите хешированный пароль.
Пароль у вас будет другой — нужно вставить свой.
ipython profile create nbserver
printf "\n# Configuration file for ipython-notebook.\n
c = get_config()\n
# Notebook config\n
c.NotebookApp.ip = '*'\n
c.NotebookApp.password = u''sha1:d0c0b7eb515e:f0e59fcd04aec7bb50886084ae8e1fa9a273f88e''\n
c.NotebookApp.open_browser = False\n
c.NotebookApp.port = 8888\n" >> ~/.
ipython/profile_nbserver/ipython_notebook_config.py
Последнее, что мы делаем только на удаленной машине — запускаем сервер IPython.
(Почему IPython, а не Jupyter?.
Почему файл сертификата указан явно? Ответ прост: костыли.
Jupyter не хотел видеть файл конфигурации, а потом не хотел видеть в нем настройки файла сертификата.
Проверьте, возможно, у вас оно запустится командой jupyter, причем без явного указания файла конфигурации и сертификата).
ipython notebook --config="~/.
ipython/profile_nbserver/ipython_notebook_config.py" --certfile=jupyter.pem
Если все прошло хорошо, в конце вы увидите что-то подобное.
[I 10:09:08.774 NotebookApp] Serving notebooks from local directory: /home/ubuntu
[I 10:09:08.775 NotebookApp] 0 active kernels
[I 10:09:08.775 NotebookApp] The Jupyter Notebook is running at: https://[all ip addresses on your system]:8888/
[I 10:09:08.775 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
Выгода
Теперь заходим в браузер ХОЗЯИН :8888, где HOST — это адрес вашего экземпляра.Внимание! Протокол должен быть HTTPS; Также может потребоваться подтверждение сертификата.
(Например, в Chrome нужно нажать «Дополнительно» и подтвердить переход на сайт).
Вводим наш пароль (здесь он, конечно, не хешированный, а «обычный») и видим красивую картинку — файловую систему от Jupyter.
Создаем новый блокнот и радуемся обилию ядер под капотом.
Теперь давайте вернемся к терминалу (нашего компьютера, а не удаленной машины) и загрузим некоторый набор данных в наш экземпляр.
Скажем, с конкурса Kaggle" Прогноз типа лесного покрова ".
scp -i <PEM-file name>.
pem <LOCAL_PATH_TO_DATA> ubuntu@<HOST>:/~
Конечно, интересно поговорить о машинном обучении, но здесь мы просто прогоним случайный лес Sklearn на необработанных данных.
Обратите внимание на параметр n_jobs — здесь мы используем все 16 ядер.
1000 деревьев с максимальной глубиной 15 были обучены за ~5 секунд — в 3 раза быстрее, чем на моем MacBook Air с 4 ядрами и 4 ГБ памяти.
В более крупных выборках разница, конечно, будет более существенной.
То же самое со сценарием
Процесс можно автоматизировать.Использование Python Amazon SDK по имени бото Вы также можете зарезервировать спотовый инстанс с помощью скрипта.
А пока мы рассмотрим скрипты, которые подготавливают машину к работе с Jupyter после его запуска.
Все это есть в репозитории Гитхаб.
Всего вам понадобится 3 файла:
- В config.txt вы записываете путь к вашему pem-файлу, хост вновь выданного экземпляра, а также хешированный пароль для доступа к серверу Jupyter, который мы создали чуть ранее.
pemfile='<PEM-file>.
pem' host='<HOST>' jupyter_password='<JUPYTER_PASSWORD>'
- В файле Remote_setup.sh вы добавляете все, что хотите выполнить на удаленном компьютере.
# Installing Miniconda wget -c http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh bash Miniconda-latest-Linux-x86_64.sh -b -p /home/ubuntu/miniconda export PATH=/home/ubuntu/miniconda/bin:$PATH #Installing neccesary libraries conda install -y numpy scipy pandas scikit-learn jupyter #Can add whatever you want to install #sudo apt-get -qq install vowpal-wabbit #sudo apt-get -qq install git ipython profile create nbserver printf "\n# Configuration file for ipython-notebook.\n c = get_config()\n # Notebook config\n c.NotebookApp.password = u'"$1"'\n c.NotebookApp.ip = '*'\n c.NotebookApp.open_browser = False\n c.NotebookApp.port = 8888\n" > ~/.
ipython/profile_nbserver/ipython_notebook_config.py ipython notebook --config="~/.
ipython/profile_nbserver/ipython_notebook_config.py" --certfile=jupyter.pem
- Скрипт launch_remote_setup.sh просто запускает файл Remote_setup.sh с нужными параметрами на удаленном компьютере.
source 'config.txt' scp -i $pemfile .
/ipython.pem ubuntu@$remote_host:~ ssh -i $pemfile ubuntu@$remote_host 'bash -s' < remote_setup.sh $jupyter_password
sh launch_remote_setup.sh
5-7 минут и все! Вы можете работать с сервером Jupyter. Я собирался налить чаю.
Но! Очень важный момент! По завершении остановите свой экземпляр.
EC2 -> Экземпляры -> Действия -> Состояние экземпляра -> Завершить.
Именно терминировать, а не останавливать (хотя это доступно только для спотовых).
Но в случае запуска инстансов по требованию остановка не приводит к полному отключению машины, и за обмен данными могут понести деньги.
Наконец, мы можем немного обсудить финансы.
Вы проверяете свой текущий счет в Amazon, нажимая на свое имя, а затем на «Управление счетами и расходами».
0,25 доллара в час — это около 25 долларов в месяц, если вы используете его по 4 часа каждый будний день.
Дальше каждый решает сам, готов ли он к таким тратам.
Вы можете разместить здесь рекламу Пакет студенческого разработчика GitHub — Я лично получил с их помощью сертификат Amazon на $110 и пользуюсь им до сих пор.
Кроме того, для серьезных научных проектов можно получить грант Amazon.
Заключение
Это все на данный момент. Я думаю, что для некоторых это стало толчком к Amazon Web Services EC2. Давайте дадим нашим машинам отдых ночью! ПС.Комментарии/советы/обмен опытом/запросы на включение приветствуются.
Теги: #Amazon EC2 #блокнот Jupyter #блокнот Jupyter #scikit-learn #python #Интеллектуальный анализ данных #Amazon Web Services
-
Сент-Китс И Невис
19 Oct, 24 -
Ловиц, Товий Егорович (Иоанн Тобиас)
19 Oct, 24 -
Свифт Книги
19 Oct, 24 -
Алгоритм Проведения It-Интервью
19 Oct, 24 -
Единый Вход - Теперь Для Всех
19 Oct, 24