EC2 P2 экземпляр: хранить данные в памяти GPU для обработки в реальном времени? - PullRequest
0 голосов
/ 05 октября 2018

У меня есть приложение для графического процессора (веб-сервис C ++).Во время инициализации веб-службы я загружаю около 20 000 изображений из S3, выполняю некоторые задачи обработки изображений и сохраняю результаты в памяти графического процессора (~ 4 ГБ данных).

Затем веб-служба продолжает работатьEC2 ожидает пользовательских запросов.

Следующие пользовательские запросы используют эти данные для выполнения некоторых задач, близких к реальному времени (с использованием CUDA), и возвращают результат обратно пользователю.

Мой вопрос заключается в том,я могу сохранить этот объем данных в памяти GPU?Возможно ли перезапуск / обновление памяти графического процессора (или экземпляра EC2)?

Обновление Я буду использовать экземпляр P2 (~ 2000 ядер CUDA) под управлением Ubuntu 18. Общая память графического процессора составляет16G, так что у него достаточно свободной памяти.Я протестировал свой код на своем рабочем столе со старой картой GTX с 340 ядрами CUDA и 4 ГБ памяти, и я получил результат примерно за 4 секунды.Я предполагаю, что на P2 результат будет близок к реальному времени (~ 1сек).И одно из моих требований заключается в том, что этот веб-сервис будет вызываться примерно 30 раз в минуту.Надеюсь, это не вызовет высокой нагрузки на графический процессор.

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Я предполагаю, что это экземпляр Linux.

Ваше требование не сложно выполнить.4 ГБ памяти сегодня мало для систем корпоративного класса.

1) Отключите своп.

2) Убедитесь, что у вас есть дополнительная свободная память после выделения 4 ГБ.

3) Разработайте ваше приложение для использования разделяемой памяти и блокировки страниц, которые гарантируют, что ваши объекты останутся в памяти.

4) Разработайте ваше приложение для обработки перезагрузок системы.Редко, но это случается, AWS будет выполнять обслуживание кластера, и ваш экземпляр будет перемещен / перезагружен.

0 голосов
/ 15 октября 2018

Возможно ли, что память графического процессора (или экземпляр EC2) будет перезапущена / обновлена?

Да , потому что AWS постоянно обновляет экземпляры и серверы для поддержания их работоспособностиНа сегодняшний день и помогая обеспечить безопасность, вы можете поспорить, что ваш экземпляр будет перезапущен.Они не ежедневные, но сказать, что они «не обычны», неправда.Прогнозируйте частоты один или два раза в год.

Вы можете защититься от этого, разработав в режиме обслуживания для своей веб-службы ответ «Временно выключен для обслуживания» или что-то подобное во время перезагрузок.Вы даже можете выполнить перезагрузку экземпляра с упреждением, если хотите минимизировать влияние.

Полную информацию о перезагрузках экземпляра и сервера можно получить на странице обслуживания EC2

В конечном итоге, если вы останетесь на AWS, вы захотите изменить дизайн своего приложения, чтобы использовать преимущества не только S3 и EC2.Существуют функции AWS для обеспечения высокой доступности во время планового (или незапланированного) обслуживания.Все это разработано, чтобы устранить риски из вашей деятельности и максимизировать время работы в Интернете.Перечислить их всех в одном ответе было бы невозможно.Это длинный список, который постоянно растет.

Чтобы дать вам идею: взгляните на некоторые из примеров эталонных архитектур в нижней части этой страницы , чтобы дать вам представление о том, что возможно и рекомендуется.Кроме того, некоторые из Белых документов AWS или сообщений в блоге могут помочь вам улучшить ваше размещенное веб-приложение.

Не надейтесь просто перенести свою службу на AWSи не вносить в него изменения.Чтобы максимизировать ценность AWS (или любого облачного провайдера) и снизить риск, вам необходимо изучить предлагаемые услуги и изменить дизайн своего сервиса, чтобы наилучшим образом использовать их.Они меняются каждый год.

0 голосов
/ 09 октября 2018

Комментарий Роберта точный.Вы можете (и должны) хранить свои 4 ГБ данных в графическом процессоре во время некоторой функции инициализации.Когда и где вызывается эта функция, зависит от архитектуры вашего веб-сервиса и от того, насколько она постоянна.Я не знаком с AWS, но могу предположить, что если экземпляр выйдет из строя или перезапустится, ваше приложение C ++ больше не будет работать, что означает, что все указатели на память устройства исчезли.Тем не менее, я полагаю, что перезапуски - не очень распространенные события, поэтому вы должны быть в порядке, просто загрузив память GPU один раз, когда экземпляр (и ваше приложение) будут запущены.

Вы не упоминаете, какой измногие API-интерфейсы памяти CUDA, которые вы используете, но я бы порекомендовал сделать руководство cudaMemcpy(), чтобы переместить данные в известное место на устройстве.Тогда вам нужно просто указывать многократно используемый указатель устройства на данные каждый раз, когда вам нужно будет выполнить вычисления.

...