23.3. Использование экземпляров AWS EC2¶
В этом разделе мы покажем, как установить все библиотеки на необработанную машину с Linux. Напомним, что в Section 23.2 мы обсуждали использование Amazon SageMaker, тогда как самостоятельное создание объекта обходится дешевле в AWS. Пошаговое руководство включает три шага:
Запрос на создание GPU-объекта Linux в AWS EC2.
Установите CUDA (или используйте образ Amazon Machine Image с предварительно установленной CUDA).
Установите фреймворк для глубокого обучения и другие библиотеки для запуска кода из книги.
Этот процесс применим и к другим инстансам (и другим облачным платформам), хотя и требует некоторых незначительных изменений. Прежде чем продолжить, вам необходимо создать учётную запись AWS, подробности см. в Section 23.2.
23.3.1. Создание и запуск объекта EC2¶
После входа в аккаунт AWS нажмите «EC2» (Fig. 23.3.1), чтобы перейти на панель управления EC2.
Fig. 23.3.1 Откройте консоль EC2.¶
Fig. 23.3.2 показывает панель EC2.
Fig. 23.3.2 Панель EC2.¶
23.3.1.1. Предварительная установка местоположения¶
Выберите ближайший центр обработки данных, чтобы уменьшить задержку, например, «Oregon» (выделен красным прямоугольником в правом верхнем углу Fig. 23.3.2). Если вы находитесь в Китае, можно выбрать ближайший регион в зоне Asia Pacific, например, Сеул или Токио. Обратите внимание, что не во всех центрах обработки данных доступны инстансы с GPU.
23.3.1.2. Увеличение пределов¶
Перед выбором объекта проверьте наличие ограничений по количеству, нажав на метку «Limits» на левой панели, как показано на Fig. 23.3.2. Fig. 23.3.3 показывает пример такого ограничения. В текущем регионе нельзя запустить объекты типа «p2.xlarge». Если вам нужно запустить один или несколько объектов, нажмите на ссылку «Request limit increase», чтобы подать заявку на увеличение квоты. Обычно обработка заявки занимает один рабочий день.
Fig. 23.3.3 Ограничения на количество объектов.¶
23.3.1.3. Запуск объекта¶
Далее нажмите кнопку «Запустить объект», выделенную красной рамкой на Fig. 23.3.2, чтобы запустить ваш объект.
Сначала мы выбираем подходящий образ Amazon Machine Image (AMI). Выберите объект Ubuntu (Fig. 23.3.4).
Fig. 23.3.4 Выберите AMI.¶
EC2 предлагает множество различных конфигураций объектов на выбор. Это
иногда может показаться сложным для новичка. tab_ec2
перечисляет различные подходящие экземпляры.
:Различные типы объектов 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 (выделен красным на рис. Fig. 23.3.5).
Fig. 23.3.5 Выберите объект.¶
Обратите внимание, что следует использовать объект с поддержкой GPU, оснащённый соответствующими драйверами и фреймворком для глубокого обучения с поддержкой GPU. В противном случае вы не получите никаких преимуществ от использования GPU.
Далее выбираем пару ключей, используемую для доступа к объекту. Если у вас нет пары ключей, нажмите «Создать новую пару ключей» в Fig. 23.3.6, чтобы сгенерировать новую пару. После этого вы сможете выбрать ранее созданную пару ключей. Убедитесь, что вы скачали пару ключей и сохранили её в надёжном месте, если создали новую. Это единственный способ подключиться к серверу по SSH.
Fig. 23.3.6 Выберите пару ключей.¶
В этом примере мы оставим конфигурации по умолчанию для раздела «Настройки сети» (нажмите кнопку «Изменить», чтобы настроить такие параметры, как подсеть и группы безопасности). Мы просто увеличим размер жёсткого диска по умолчанию до 64 ГБ (Fig. 23.3.7). Обратите внимание, что сама CUDA уже занимает 4 ГБ.
Fig. 23.3.7 Измените размер жёсткого диска.¶
Нажмите «Запустить объект», чтобы запустить созданный объект. Нажмите на идентификатор объекта, показанный в Fig. 23.3.8, чтобы просмотреть статус этого объекта.
Fig. 23.3.8 Нажмите на идентификатор объекта.¶
23.3.1.4. Подключение к объекту¶
Как показано на рисунке Fig. 23.3.9, после того как статус
объекта станет зеленым, щелкните правой кнопкой мыши по объекту и
выберите Connect, чтобы просмотреть метод доступа к объекту.
Fig. 23.3.9 Просмотрите метод доступа к объекту.¶
Если это новый ключ, он не должен быть доступен для публичного
просмотра, чтобы SSH работал. Перейдите в папку, где вы храните
D2L_key.pem, и выполните следующую команду, чтобы запретить
публичный доступ к ключу:
chmod 400 D2L_key.pem
Fig. 23.3.10 Просмотр способа доступа к объекту и метода его запуска.¶
Теперь скопируйте команду SSH из нижней красной рамки на Fig. 23.3.10 и вставьте её в командную строку:
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.
Ваш сервер готов.
23.3.2. Установка CUDA¶
Перед установкой CUDA обязательно обновите объект с последними драйверами.
sudo apt-get update && sudo apt-get install -y build-essential git libgfortran3
Здесь мы скачиваем CUDA 12.1. Перейдите в официальный репозиторий NVIDIA, чтобы найти ссылку для загрузки, как показано на рисунке Fig. 23.3.11.
Fig. 23.3.11 Найдите адрес загрузки CUDA 12.1.¶
Скопируйте инструкции и вставьте их в терминал для установки CUDA 12.1.
# 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
После установки программы выполните следующую команду для просмотра видеокарт:
nvidia-smi
Наконец, добавьте CUDA в путь к библиотекам, чтобы другие библиотеки
могли её найти, например, добавив следующие строки в конец файла
~/.bashrc.
export PATH="/usr/local/cuda-12.1/bin:$PATH"
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda-12.1/lib64
23.3.3. Установка библиотек для запуска кода¶
Чтобы запустить код из этой книги, просто следуйте инструкциям из Установка для пользователей Linux на объекте EC2 и используйте следующие рекомендации для работы на удалённом сервере Linux:
Чтобы скачать bash-скрипт со страницы установки Miniconda, щёлкните правой кнопкой мыши по ссылке для скачивания и выберите «Копировать адрес ссылки», затем выполните
wget [copied link address].После выполнения
~/miniconda3/bin/conda initвы можете запуститьsource ~/.bashrc, не закрывая и не перезапуская текущую оболочку.
23.3.4. Запуск 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
Fig. 23.3.12 показывает возможный вывод после запуска Jupyter Notebook. Последняя строка содержит URL для порта 8888.
Fig. 23.3.12 Результат выполнения Jupyter Notebook. Последняя строка — это URL для порта 8888.¶
Поскольку вы настроили проброс портов на 8889, скопируйте последнюю строку в красном поле на рисунке Fig. 23.3.12, замените в URL «8888» на «8889» и откройте его в локальном браузере.
23.3.5. Закрытие неиспользуемых экземпляров¶
Поскольку облачные сервисы оплачиваются по времени использования, вы должны закрывать неиспользуемые экземпляры. Обратите внимание, что существуют альтернативы:
Остановка объекта означает, что вы сможете запустить его снова. Это аналогично отключению питания обычного сервера. Однако за остановленные объекты всё ещё взимается небольшая плата за занимаемое ими дисковое пространство.
⟦Terminating⟧ объекта приведет к удалению всех связанных с ним данных. Это включает диск, поэтому вы не сможете запустить его снова. Выполняйте это действие только в том случае, если вы уверены, что объект вам больше не понадобится.
Если вы хотите использовать объект в качестве шаблона для создания множества других объектов, щелкните правой кнопкой мыши на примере в Fig. 23.3.9 и выберите «Образ» \(\rightarrow\) «Создать», чтобы создать образ объекта. После этого выберите «Состояние объекта» \(\rightarrow\) «Завершить работу», чтобы остановить объект. В следующий раз, когда вам понадобится использовать этот объект, вы можете выполнить шаги из этого раздела, чтобы создать объект на основе сохраненного образа. Единственное отличие заключается в том, что на шаге «1. Выберите AMI», показанном на рисунке Fig. 23.3.4, вам нужно использовать опцию «Мои AMI» слева, чтобы выбрать ваш сохраненный образ. Созданный объект сохранит информацию, хранящуюся на жёстком диске образа. Например, вам не придется заново устанавливать CUDA и другие среды выполнения.
23.3.6. Итог¶
Мы можем запускать и останавливать экземпляры по требованию, не покупая и не создавая собственное вычислительное оборудование.
Перед использованием фреймворка глубокого обучения с поддержкой GPU необходимо установить CUDA.
Мы можем использовать проброс портов для запуска Jupyter Notebook на удаленном сервере.
23.3.7. Упражнения¶
Облачные вычисления удобны, но они обходятся недешево. Узнайте, как запускать спотовые экземпляры, чтобы снизить затраты.
Экспериментируйте с различными серверами GPU. Насколько они быстры?
Экспериментируйте с серверами, оснащенными несколькими GPU. Насколько хорошо вам удается масштабировать вычисления?