как использовать два экземпляра aws ec2 (1 gpu и 1 cpu instance) с одним хранилищем для (запуска кода, хранения / обмена файлами) и снижения затрат

Моя команда использует экземпляр графического процессора для запуска приложений машинного обучения, основанных на тензорном потоке, yolo, компьютерного зрения, а также использует его для обучения моделей машинного обучения. Он стоит 7 долларов в час и имеет 8 графических процессоров. Пытался сократить расходы на это. Нам нужно 8 графических процессоров для более быстрого обучения, и иногда многие люди могут использовать разные графические процессоры одновременно.

В нашем случае мы иногда вообще не используем графические процессоры (8 графических процессоров) как минимум 1-2 недели в месяц. Но использование графического процессора может произойти в течение этого времени, а может и не быть. Поэтому я хотел знать, есть ли способ редактировать код и выполнять все операции с интенсивным процессором, когда графический процессор не нужен, через недорогой экземпляр процессора. И включайте экземпляр gpu только при необходимости, используйте его, а затем остановите, когда работа будет выполнена.

Я думал об использовании efs для размещения кода в общей файловой системе, а затем запуска оттуда, но я прочитал статью (https://www.jeffgeerling.com/blog/2018/getting-best-performance-out-amazon-efs), где написано, что я никогда не должен запускать код с сетевых дисков, потому что скорость может стать очень низкой. Поэтому я не знаю, хорошо ли запускать приложение машинного обучения из файловой системы efs. Я думал о создании виртуальных сред в папках в efs, но не думаю, что это хорошая идея.

Может ли кто-нибудь предложить хорошие способы достижения этого и снижения затрат. И если вы предлагаете использовать экземпляр с меньшим количеством графических процессоров, которые я рассмотрел, но нам иногда требуется 8 графических процессоров для более быстрого обучения, но мы вообще не используем графические процессоры в течение 1-2 недель, но расходы все равно возникают.

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


person user rk    schedule 26.12.2018    source источник


Ответы (2)


Несколько мыслей:

  • Экземпляры GPU теперь допускают спящий режим, поэтому при запуске графического процессора выберите новое поведение Stop Instance 'hibernate', которое позволит вам выключить его на 2 недели, но при необходимости быстро развернуть.
  • Если у вас только один экземпляр, рассмотрите возможность использования EBS для хранения данных с большим объемом подготовленных операций ввода-вывода в секунду, чтобы быстро перемещать данные в / из вашего экземпляра.
  • В качестве альтернативы переместите свою модель в Sagemaker, чтобы гарантировать, что с вас взимается плата только за использование графического процессора, когда вы активно тренируете свою модель.
  • Если вы применяете свою модель (логический вывод), переместите эту рабочую нагрузку в более дешевый экземпляр. Обученная модель yolo может выполнять логический вывод на очень маленьких экземплярах ЦП, при этом графический процессор для этой части рабочей нагрузки не требуется.
person Matthew Arthur    schedule 26.12.2018
comment
Я думаю, что использую том ebs только для хранения данных, но его общая цель ssd). Поэтому я хотел спросить, отключу ли я свои экземпляры графического процессора на 2 недели, как люди работают над кодом и получают доступ к данным для этого экземпляра. Как будто мне придется монтировать, размонтировать, перемонтировать в разные экземпляры, мой том ebs, что очень утомительно. Я сказал, что 2 недели означают как набор дней, когда они не используются в течение месяца. Таким образом, он работает так, как будто иногда в течение 2 дней подряд графический процессор не используется, но затем он используется. Или иногда он нужен нам каждый день, тогда что нам делать. - person user rk; 26.12.2018
comment
Привет, @matthewarthur. Не могли бы вы случайно узнать ответ на комментарий выше? - person user rk; 26.12.2018
comment
Вы должны создать автономный том EBS, который вы подключите к своему графическому процессору для обучения и т. Д., А затем отключите и подключите к дешевому экземпляру (T2 / M4) при изменении кода. Оставьте корневой том экземпляра GPU в покое и работайте с этого отдельного тома EBS. - person Matthew Arthur; 26.12.2018
comment
о, спасибо @matthewarthur ...... еще один вопрос - могу ли я смонтировать, размонтировать автономные машины, не выключая их, и с помощью aws cli? А также могу ли я смонтировать автономный том ebs к экземпляру t2, когда p2 (экземпляр gpu) находится в выключенном состоянии, или мне нужно сначала отключить его от экземпляра gpu с помощью aws cli? И все это можно правильно делать с помощью aws cli? - person user rk; 26.12.2018
comment
@userrk Да, это все через cli. Начните с этой документации: docs.aws.amazon.com / AWSEC2 / latest / UserGuide / - person Matthew Arthur; 26.12.2018
comment
привет, @matthewarthur, но как несколько человек будут использовать этот метод. Если кто-то редактирует в t2 на отдельном ssd и один человек хочет использовать gpu. тогда один человек должен остановиться, сохранить свою работу, а затем начать с другого экземпляра. Так нужно ли мне создавать несколько автономных SSD для разных пользователей? - person user rk; 26.12.2018
comment
Да, вы правильно думаете. Таким образом, вы можете использовать Git для развертывания кода и просто git pull с графического процессора, когда это необходимо, и вы можете использовать S3 для хранения данных. - person Matthew Arthur; 27.12.2018
comment
хорошо, спасибо ... еще одна вещь @ matthewarthur, я пытался установить требования по установке с virtualenv на virtualenv в новом томе, который я прикрепил, но это дает мне такие ошибки, как (- Не удалось найти версию, удовлетворяющую требованиям anaconda- client == 1.6.9 (из -r requirementsalpha.txt (строка 5)) (из версий: 1.1.1, 1.2.2) Соответствующий дистрибутив для anaconda-client == 1.6.9 не найден) -). Мой вопрос - это происходит из-за того, что я смонтировал свой диск в другом месте. Я смонтировал в / newvolume, но virtualenv, из которого я копирую требования, находится в / home / ubuntu / somefolder. - person user rk; 28.12.2018
comment
и @matthewarthur, если я смонтирую свой диск в таком положении, как / home / ubuntu / newfolder, я не столкнусь с этими проблемами. А также безопасно монтировать в папке / home / ubuntu /, или я должен монтировать только / newvolume. И могу ли я отключиться от / newvolume и смонтировать в / home / ubuntu / newfolder, чтобы мгновенно удалить эту ошибку. А еще захотелось узнать, почему какой метод лучше ..... Но спасибо за ответы - person user rk; 28.12.2018
comment
и я также получаю ошибки при размонтировании, например, когда цель занята, когда я пытаюсь размонтировать с помощью sudo umount -d / dev / xvdf, и я не знаю, как решить эту проблему. Вы знаете, как решить эту проблему. ------ umount: / newvolume: target занят (в некоторых случаях полезную информацию о процессах, использующих устройство, можно найти с помощью lsof (8) или fuser (1).) ------- - person user rk; 28.12.2018
comment
Попробуйте остановить экземпляр перед размонтированием. Вы не потеряете эфемерные данные, но можете отключить. - person Matthew Arthur; 28.12.2018
comment
я хотел не иметь возможности останавливать инстанс для размонтирования, чтобы я не тратил столько времени каждый раз ... остановите t2, затем подключитесь к p2 ... затем остановите p2, затем подключитесь к t2, потому что другие члены команды будут работаю на экземпляре t2. Но если я выключу экземпляр, мне нужно будет только отсоединить его, а не отключать, потому что он не будет подключен к экземпляру после выключения. Знаете ли вы, как остановить любые процессы, использующие том, чтобы легко отключить его ..... а также знаете ли вы, могу ли я смонтировать в / home / ubuntu / somefolder, или я могу смонтировать только в / somefolder, которым я сейчас являюсь делает? ...Благодарность - person user rk; 28.12.2018
comment
привет, @matthewarthur, не могли бы вы случайно узнать ответы на вышеупомянутый вопрос в моем последнем комментарии - person user rk; 28.12.2018
comment
@userrk Навскидку, к сожалению, не знаю. Извините и удачи! - person Matthew Arthur; 29.12.2018
comment
Я нашел все ответы ... я могу смонтировать в каталоге / home / ubuntu. Проблема virtualenv возникла, потому что я монтировался в / newvolume, а не после / home / ubuntu, поэтому, возможно, проблема с некоторыми базовыми пакетами. устройство занято, потому что я получал к нему доступ через sftp, который не отображался с lsof / fuser и закрывая мой ssh-браузер mobaxterm и только ssh с ним помогли размонтировать (размонтировать диск) ... спасибо за всю помощь - person user rk; 30.12.2018

Чтобы снизить затраты на логический вывод, вы можете использовать Elastic Inference, который поддерживает функциональность с оплатой по факту использования:

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-inference.html

person Bhavin Thaker    schedule 28.12.2018
comment
Я читал об эластичном выводе .... так же легко выполнить вывод на gpu, как уже упоминалось, скажем так, в любом репозитории github проекта, основанном на тензорном потоке (например, следуйте инструкциям на ubuntu с определенными настройками для эластичного вывода) .. .Или мне нужно выполнить определенные шаги, чтобы заставить его работать с эластичным выводом (например, использовать docker или sagemaker и т. д.). И это только для вывода, а не для обучения, верно? - person user rk; 30.12.2018
comment
Правильно: эластичный вывод предназначен для вывода. Ознакомьтесь с этим руководством для примера использования: docs.aws .amazon.com / dlami / latest / devguide / - person Bhavin Thaker; 07.01.2019