.. _sec_aws:
Использование экземпляров AWS EC2
=================================
В этом разделе мы покажем, как установить все библиотеки на
необработанную машину с Linux. Напомним, что в :numref:`sec_sagemaker`
мы обсуждали использование Amazon SageMaker, тогда как самостоятельное
создание объекта обходится дешевле в AWS. Пошаговое руководство включает
три шага:
1. Запрос на создание GPU-объекта Linux в AWS EC2.
2. Установите CUDA (или используйте образ Amazon Machine Image с
предварительно установленной CUDA).
3. Установите фреймворк для глубокого обучения и другие библиотеки для
запуска кода из книги.
Этот процесс применим и к другим инстансам (и другим облачным
платформам), хотя и требует некоторых незначительных изменений. Прежде
чем продолжить, вам необходимо создать учётную запись AWS, подробности
см. в :numref:`sec_sagemaker`.
Создание и запуск объекта EC2
-----------------------------
После входа в аккаунт AWS нажмите «EC2» (:numref:`fig_aws`), чтобы
перейти на панель управления EC2.
.. _fig_aws:
.. figure:: ../img/aws.png
:width: 400px
Откройте консоль EC2.
:numref:`fig_ec2` показывает панель EC2.
.. _fig_ec2:
.. figure:: ../img/ec2.png
:width: 700px
Панель EC2.
Предварительная установка местоположения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Выберите ближайший центр обработки данных, чтобы уменьшить задержку,
например, «Oregon» (выделен красным прямоугольником в правом верхнем
углу :numref:`fig_ec2`). Если вы находитесь в Китае, можно выбрать
ближайший регион в зоне Asia Pacific, например, Сеул или Токио. Обратите
внимание, что не во всех центрах обработки данных доступны инстансы с
GPU.
Увеличение пределов
~~~~~~~~~~~~~~~~~~~
Перед выбором объекта проверьте наличие ограничений по количеству, нажав
на метку «Limits» на левой панели, как показано на :numref:`fig_ec2`.
:numref:`fig_limits` показывает пример такого ограничения. В текущем
регионе нельзя запустить объекты типа «p2.xlarge». Если вам нужно
запустить один или несколько объектов, нажмите на ссылку «Request limit
increase», чтобы подать заявку на увеличение квоты. Обычно обработка
заявки занимает один рабочий день.
.. _fig_limits:
.. figure:: ../img/limits.png
:width: 700px
Ограничения на количество объектов.
Запуск объекта
~~~~~~~~~~~~~~
Далее нажмите кнопку «Запустить объект», выделенную красной рамкой на
:numref:`fig_ec2`, чтобы запустить ваш объект.
Сначала мы выбираем подходящий образ Amazon Machine Image (AMI).
Выберите объект Ubuntu (:numref:`fig_ubuntu`).
.. _fig_ubuntu:
.. figure:: ../img/ubuntu-new.png
:width: 700px
Выберите AMI.
EC2 предлагает множество различных конфигураций объектов на выбор. Это
иногда может показаться сложным для новичка. :numref:`tab_ec2`
перечисляет различные подходящие экземпляры.
:Различные типы объектов EC2
.. table:: label:``tab_ec2``
+-------+-----------------+-------------------------------------------+
| Имя | GPU | Примечания |
+=======+=================+===========================================+
| g2 | Сетка K520 | древний |
+-------+-----------------+-------------------------------------------+
| p2 | Kepler K80 | старые, но часто недорогие как |
| | | spot-инстансы |
+-------+-----------------+-------------------------------------------+
| g3 | Maxwell M60 | хороший компромисс |
+-------+-----------------+-------------------------------------------+
| p3 | Volta V100 | высокая производительность для FP16 |
+-------+-----------------+-------------------------------------------+
| p4 | Ampere A100 | высокая производительность для |
| | | крупномасштабного обучения |
+-------+-----------------+-------------------------------------------+
| g4 | Turing T4 | оптимизированный для вывода FP16/INT8 |
+-------+-----------------+-------------------------------------------+
Все эти серверы доступны в нескольких вариантах, определяющих количество
используемых GPU. Например, объект p2.xlarge имеет 1 GPU, а p2.16xlarge
— 16 GPU и больше памяти. Более подробную информацию см. в `документации
AWS EC2 `__ или на `сводной
странице `__. Для целей иллюстрации нам
будет достаточно объекта p2.xlarge (выделен красным на рис.
:numref:`fig_p2x`).
.. _fig_p2x:
.. figure:: ../img/p2x.png
:width: 700px
Выберите объект.
Обратите внимание, что следует использовать объект с поддержкой GPU,
оснащённый соответствующими драйверами и фреймворком для глубокого
обучения с поддержкой GPU. В противном случае вы не получите никаких
преимуществ от использования GPU.
Далее выбираем пару ключей, используемую для доступа к объекту. Если у
вас нет пары ключей, нажмите «Создать новую пару ключей» в
:numref:`fig_keypair`, чтобы сгенерировать новую пару. После этого вы
сможете выбрать ранее созданную пару ключей. Убедитесь, что вы скачали
пару ключей и сохранили её в надёжном месте, если создали новую. Это
единственный способ подключиться к серверу по SSH.
.. _fig_keypair:
.. figure:: ../img/keypair.png
:width: 500px
Выберите пару ключей.
В этом примере мы оставим конфигурации по умолчанию для раздела
«Настройки сети» (нажмите кнопку «Изменить», чтобы настроить такие
параметры, как подсеть и группы безопасности). Мы просто увеличим размер
жёсткого диска по умолчанию до 64 ГБ (:numref:`fig_disk`). Обратите
внимание, что сама CUDA уже занимает 4 ГБ.
.. _fig_disk:
.. figure:: ../img/disk.png
:width: 700px
Измените размер жёсткого диска.
Нажмите «Запустить объект», чтобы запустить созданный объект. Нажмите на
идентификатор объекта, показанный в :numref:`fig_launching`, чтобы
просмотреть статус этого объекта.
.. _fig_launching:
.. figure:: ../img/launching.png
:width: 700px
Нажмите на идентификатор объекта.
Подключение к объекту
~~~~~~~~~~~~~~~~~~~~~
Как показано на рисунке :numref:`fig_connect`, после того как статус
объекта станет зеленым, щелкните правой кнопкой мыши по объекту и
выберите ``Connect``, чтобы просмотреть метод доступа к объекту.
.. _fig_connect:
.. figure:: ../img/connect.png
:width: 700px
Просмотрите метод доступа к объекту.
Если это новый ключ, он не должен быть доступен для публичного
просмотра, чтобы SSH работал. Перейдите в папку, где вы храните
``D2L_key.pem``, и выполните следующую команду, чтобы запретить
публичный доступ к ключу:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
chmod 400 D2L_key.pem
.. _fig_chmod:
.. figure:: ../img/chmod.png
:width: 400px
Просмотр способа доступа к объекту и метода его запуска.
Теперь скопируйте команду SSH из нижней красной рамки на
:numref:`fig_chmod` и вставьте её в командную строку:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
ssh -i "D2L_key.pem" ubuntu@ec2-xx-xxx-xxx-xxx.y.compute.amazonaws.com
When the command line prompts “Are you sure you want to continue
connecting (yes/no)”, enter “yes” and press Enter to log into the
instance.
Ваш сервер готов.
Установка CUDA
--------------
Перед установкой CUDA обязательно обновите объект с последними
драйверами.
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3
Здесь мы скачиваем CUDA 12.1. Перейдите в `официальный репозиторий
NVIDIA `__, чтобы
найти ссылку для загрузки, как показано на рисунке :numref:`fig_cuda`.
.. _fig_cuda:
.. figure:: ../img/cuda121.png
:width: 500px
Найдите адрес загрузки CUDA 12.1.
Скопируйте инструкции и вставьте их в терминал для установки CUDA 12.1.
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# The link and file name are subject to changes
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda-repo-ubuntu2204-12-1-local_12.1.0-530.30.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-1-local_12.1.0-530.30.02-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
После установки программы выполните следующую команду для просмотра
видеокарт:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
nvidia-smi
Наконец, добавьте CUDA в путь к библиотекам, чтобы другие библиотеки
могли её найти, например, добавив следующие строки в конец файла
``~/.bashrc``.
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
export PATH="/usr/local/cuda-12.1/bin:$PATH"
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-12.1/lib64
Установка библиотек для запуска кода
------------------------------------
Чтобы запустить код из этой книги, просто следуйте инструкциям из
:ref:`chap_installation` для пользователей Linux на объекте EC2 и
используйте следующие рекомендации для работы на удалённом сервере
Linux:
- Чтобы скачать bash-скрипт со страницы установки Miniconda, щёлкните
правой кнопкой мыши по ссылке для скачивания и выберите «Копировать
адрес ссылки», затем выполните ``wget [copied link address]``.
- После выполнения ``~/miniconda3/bin/conda init`` вы можете запустить
``source ~/.bashrc``, не закрывая и не перезапуская текущую оболочку.
Запуск Jupyter Notebook на удалённом компьютере
-----------------------------------------------
Чтобы запустить Jupyter Notebook удалённо, необходимо использовать
перенаправление портов SSH. В конце концов, сервер в облаке не имеет
монитора или клавиатуры. Для этого выполните вход на сервер с рабочего
компьютера (или ноутбука) следующим образом:
::
# This command must be run in the local command line
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
:numref:`fig_jupyter` показывает возможный вывод после запуска Jupyter
Notebook. Последняя строка содержит URL для порта 8888.
.. _fig_jupyter:
.. figure:: ../img/jupyter.png
:width: 700px
Результат выполнения Jupyter Notebook. Последняя строка — это URL для
порта 8888.
Поскольку вы настроили проброс портов на 8889, скопируйте последнюю
строку в красном поле на рисунке :numref:`fig_jupyter`, замените в URL
«8888» на «8889» и откройте его в локальном браузере.
Закрытие неиспользуемых экземпляров
-----------------------------------
Поскольку облачные сервисы оплачиваются по времени использования, вы
должны закрывать неиспользуемые экземпляры. Обратите внимание, что
существуют альтернативы:
- Остановка объекта означает, что вы сможете запустить его снова. Это
аналогично отключению питания обычного сервера. Однако за
остановленные объекты всё ещё взимается небольшая плата за занимаемое
ими дисковое пространство.
- ⟦Terminating⟧ объекта приведет к удалению всех связанных с ним данных.
Это включает диск, поэтому вы не сможете запустить его снова.
Выполняйте это действие только в том случае, если вы уверены, что
объект вам больше не понадобится.
Если вы хотите использовать объект в качестве шаблона для создания
множества других объектов, щелкните правой кнопкой мыши на примере в
:numref:`fig_connect` и выберите «Образ» :math:`\rightarrow`
«Создать», чтобы создать образ объекта. После этого выберите «Состояние
объекта» :math:`\rightarrow` «Завершить работу», чтобы остановить
объект. В следующий раз, когда вам понадобится использовать этот объект,
вы можете выполнить шаги из этого раздела, чтобы создать объект на
основе сохраненного образа. Единственное отличие заключается в том, что
на шаге «1. Выберите AMI», показанном на рисунке :numref:`fig_ubuntu`,
вам нужно использовать опцию «Мои AMI» слева, чтобы выбрать ваш
сохраненный образ. Созданный объект сохранит информацию, хранящуюся на
жёстком диске образа. Например, вам не придется заново устанавливать
CUDA и другие среды выполнения.
Итог
----
- Мы можем запускать и останавливать экземпляры по требованию, не
покупая и не создавая собственное вычислительное оборудование.
- Перед использованием фреймворка глубокого обучения с поддержкой GPU
необходимо установить CUDA.
- Мы можем использовать проброс портов для запуска Jupyter Notebook на
удаленном сервере.
Упражнения
----------
1. Облачные вычисления удобны, но они обходятся недешево. Узнайте, как
запускать `спотовые экземпляры `__,
чтобы снизить затраты.
2. Экспериментируйте с различными серверами GPU. Насколько они быстры?
3. Экспериментируйте с серверами, оснащенными несколькими GPU. Насколько
хорошо вам удается масштабировать вычисления?
`Обсуждения `__