Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

16.3 Использование экземпляров Amazon EC2

В этом разделе показано, как установить все библиотеки на «голой» Linux-машине. Напомним, что в разделе 16.2 рассказывалось об Amazon SageMaker; создание собственного экземпляра в облаке обходится дешевле. Пример состоит из трёх шагов:

  1. Запросить у AWS EC2 экземпляр Linux с GPU.
  2. Установить CUDA (или воспользоваться образом Amazon Machine Image с предустановленной CUDA).
  3. Установить фреймворк глубокого обучения и другие библиотеки, необходимые для запуска кода книги.

Эта процедура подходит и для других экземпляров (и других облаков), хотя потребуются небольшие изменения. Прежде чем продолжить, нужно создать учётную запись AWS; подробности см. в разделе 16.2.

16.3.1 Создание и запуск экземпляра EC2

Войдя в учётную запись AWS, откройте панель EC2, выбрав сервис «EC2» в консоли AWS. На панели EC2 слева находятся разделы «Instances», «Limits» и другие, а в центре — кнопка «Launch Instance».

16.3.1.1 Выбор региона

Выберите ближайший центр обработки данных, чтобы уменьшить задержку, например «Oregon» (Орегон): регион выбирается в меню в правом верхнем углу консоли. Если вы находитесь в Китае, можно выбрать ближайший азиатско-тихоокеанский регион, например Сеул или Токио. Имейте в виду, что в некоторых центрах обработки данных экземпляров с GPU может не быть.

16.3.1.2 Увеличение лимитов

Прежде чем выбирать экземпляр, проверьте, нет ли ограничений на их количество: откройте вкладку «Limits» (лимиты) в левой панели. В нашем примере аккаунт не может запускать экземпляры p2.xlarge в данном регионе. Если нужно запустить один или несколько экземпляров, нажмите ссылку «Request limit increase» (запросить увеличение лимита) и подайте заявку на более высокую квоту. Обычно её обработка занимает один рабочий день.

16.3.1.3 Запуск экземпляра

Далее нажмите кнопку «Launch Instance» (запустить экземпляр) на панели EC2, чтобы запустить свой экземпляр.

Сначала выберем подходящий образ Amazon Machine Image (AMI). Введите в строке поиска «ubuntu» и выберите нужный образ — например, Ubuntu Server 18.04 LTS (HVM), SSD Volume Type, архитектура 64-bit (x86) — кнопкой «Select».

У EC2 множество разных конфигураций экземпляров, и новичку в них порой сложно разобраться. В таблице 16.3.1 перечислены подходящие машины.

Таблица 16.3.1. Типы экземпляров EC2

НазваниеGPUПримечания
g2Grid K520устарел
p2Kepler K80старый GPU, но spot-экземпляры обычно дёшевы
g3Maxwell M60хороший баланс
p3Volta V100высокая производительность для FP16
g4Turing T4оптимизирован для вывода в FP16/INT8

Все эти серверы выпускаются в нескольких вариантах, которые различаются числом GPU. Например, у p2.xlarge один GPU, а у p2.16xlarge — 16 GPU и больше памяти. Подробнее см. в документации Amazon EC2.

Обратите внимание: нужно использовать экземпляр с поддержкой GPU, подходящие драйверы и фреймворк глубокого обучения с поддержкой GPU. Иначе вы не получите никакой выгоды от GPU. В нашем примере выберем экземпляр p2.xlarge (в таблице экземпляров он обозначен как «GPU instances»: 4 vCPU, 61 ГБ памяти) и нажмём «Next: Configure Instance Details».

Таким образом, мы выполнили первые два из семи шагов запуска экземпляра EC2 — они показаны во вкладках вверху мастера. В этом примере для шагов «3. Configure Instance» (настройка экземпляра), «5. Add Tags» (добавление тегов) и «6. Configure Security Group» (настройка группы безопасности) оставим конфигурацию по умолчанию. Откройте «4. Add Storage» (добавление хранилища) и увеличьте размер жёсткого диска по умолчанию до 64 ГБ (поле «Size (GiB)»). Учтите, что сама CUDA уже занимает 4 ГБ.

Наконец, перейдите к шагу «7. Review» (проверка) и нажмите «Launch» (запустить), чтобы запустить настроенный экземпляр. Система предложит выбрать пару ключей для доступа к экземпляру. Если пары ключей у вас нет, выберите в первом выпадающем меню «Create a new key pair» (создать новую пару ключей), чтобы сгенерировать её. После этого в этом меню можно будет выбрать «Choose an existing key pair» (выбрать существующую пару ключей) и указать ранее созданную. Нажмите «Launch Instances» (запустить экземпляры), чтобы запустить созданный экземпляр.

Если вы сгенерировали новую пару ключей, обязательно скачайте её и сохраните в надёжном месте: это единственный способ подключиться к серверу по SSH. Щёлкните по идентификатору экземпляра (Instance ID) на странице запуска, чтобы увидеть его состояние.

16.3.1.4 Подключение к экземпляру

Когда состояние экземпляра станет зелёным (running), щёлкните по нему правой кнопкой мыши и выберите Connect (подключиться), чтобы увидеть способы доступа к экземпляру.

Если ключ новый, он не должен быть общедоступным для просмотра, иначе SSH не будет работать. Перейдите в папку, где хранится D2L_key.pem, и выполните следующую команду, чтобы закрыть ключ от просмотра другими пользователями:

chmod 400 D2L_key.pem

Теперь скопируйте команду ssh из диалога подключения (поле «Example») и вставьте её в командную строку:

ssh -i "D2L_key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com

Когда в командной строке появится вопрос «Are you sure you want to continue connecting (yes/no)» («Вы уверены, что хотите продолжить подключение? (да/нет)»), введите «yes» и нажмите Enter, чтобы войти на экземпляр.

Ваш сервер готов.

16.3.2 Установка CUDA

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

sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3

Мы скачиваем здесь CUDA 10.1. Откройте официальный репозиторий NVIDIA, чтобы найти ссылку на загрузку: выберите нужную версию CUDA Toolkit, операционную систему (Linux), архитектуру (x86_64), дистрибутив (Ubuntu), версию (18.04) и тип установщика («deb (local)»); внизу страницы будут показаны команды установки.

Скопируйте эти инструкции в терминал, чтобы установить CUDA 10.1.

# Ссылки и имена файлов могут измениться; ориентируйтесь на официальный сайт NVIDIA
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget http://developer.download.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-10-1-local-10.1.243-418.87.00_1.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-10-1-local-10.1.243-418.87.00/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

После установки программы выполните следующую команду, чтобы увидеть GPU:

nvidia-smi

Наконец, добавьте CUDA в путь поиска библиотек, чтобы другие библиотеки могли её найти.

echo "export LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/usr/local/cuda/lib64" >> ~/.bashrc

16.3.3 Установка библиотек для запуска кода

Чтобы запустить код этой книги, достаточно выполнить на экземпляре EC2 шаги из раздела «Установка» для пользователей Linux и воспользоваться следующими советами по работе на удалённом Linux-сервере.

  • Чтобы скачать bash-скрипт со страницы установки Miniconda, щёлкните по ссылке для скачивания правой кнопкой мыши, выберите «Copy Link Address» (копировать адрес ссылки) и выполните wget [скопированный адрес ссылки].
  • Выполните ~/miniconda3/bin/conda init; чтобы не закрывать и не открывать заново текущую оболочку, возможно, придётся выполнить source ~/.bashrc.

16.3.4 Удалённый запуск блокнотов Jupyter

Чтобы запускать блокноты Jupyter удалённо, нужно использовать перенаправление портов SSH. Ведь у облачного сервера нет ни монитора, ни клавиатуры. Для этого войдите на сервер со своего настольного компьютера (или ноутбука) следующим образом:

# Эту команду нужно выполнять в локальной командной строке
ssh -i "/path/to/key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com -L 8889:localhost:8888

Затем перейдите на экземпляре EC2 в каталог, куда скачан код книги, и выполните:

conda activate d2l
jupyter notebook

В выводе запущенного Jupyter Notebook последняя строка — URL порта 8888, вида http://localhost:8888/?token=....

Поскольку мы используем перенаправление на порт 8889, скопируйте эту последнюю строку, замените в URL «8888» на «8889» и откройте её в локальном браузере.

16.3.5 Закрытие неиспользуемых экземпляров

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

  • «Stopping» (остановка) экземпляра означает, что его можно запустить снова. Это похоже на выключение обычного сервера. Однако за остановленный экземпляр всё равно взимается небольшая плата за зарезервированное место на диске;
  • «Terminating» (завершение) экземпляра удаляет все связанные с ним данные, включая диск, поэтому запустить его снова нельзя. Делайте это, только если точно знаете, что он вам больше не понадобится.

Если вы хотите использовать экземпляр как шаблон для создания других, щёлкните по нему правой кнопкой мыши в списке экземпляров и выберите «Image» «Create», чтобы создать образ экземпляра. После этого выберите «Instance State» «Terminate», чтобы завершить экземпляр. В следующий раз, когда понадобится этот экземпляр, можно создать его на основе сохранённого образа по шагам из этого раздела. Единственное отличие: на шаге «1. Choose AMI» нужно слева выбрать «My AMIs» (мои AMI) и указать сохранённый образ. Созданный экземпляр сохранит информацию, записанную на диске образа. Например, вам не придётся заново устанавливать CUDA и другие среды выполнения.

Резюме

  • Экземпляры можно запускать и останавливать по требованию, не покупая и не собирая собственный компьютер.
  • Прежде чем использовать фреймворк глубокого обучения с поддержкой GPU, нужно установить CUDA.
  • Для запуска блокнотов Jupyter на удалённом сервере можно использовать перенаправление портов.

Упражнения

  1. Облако удобно, но недёшево. Узнайте, как запускать spot-экземпляры, чтобы снизить затраты.
  2. Попробуйте разные серверы с GPU. Насколько они быстры?
  3. Попробуйте серверы с несколькими GPU. Насколько хорошо масштабируются вычисления?

Обсуждение