Назад | Перейти на главную страницу

На каких экземплярах AWS наиболее эффективно запускать код Python?

Я надеюсь, что это правильный стек для такого рода вопросов.

Я столкнулся с большой задачей с python, которую нужно обработать. Запуск его на моей машине займет около 60 часов. Эта задача выполняется процессором, а не графическим процессором.

В c5 экземпляры, похоже, созданы для тяжелых задач процессора, поэтому мой первый экземпляр был c5.4xlarge экземпляр Windows. После запуска скрипта python на экземпляре я был удивлен, насколько он медленный. Моему ноутбуку потребовалось примерно столько же времени на выполнение пакета задач. Я прекратил его и попробовал m5.4xlarge экземпляр с тем же результатом.

Что я делаю не так? Эти экземпляры должны работать в 10 раз быстрее, чем мой ноутбук с его i7-8550U ЦПУ.

Следует учитывать ряд аспектов:

  • Может ли ваше приложение использовать несколько ядер ЦП? Более крупные инстансы EC2 дают больше ядер ЦП, но обычно не повышают производительность одноядерных процессоров. Убедитесь, что ваше приложение умеет параллельная обработка чтобы использовать все доступные ядра ЦП.

    Если он не может запустить параллельную обработку, посмотрите, можно ли разделить данные на несколько независимые партии и запускать несколько копий приложения параллельно, каждая из которых использует одно ядро.

  • Где ты хранить ваши данные? Если они включены Объем EBS это может быть довольно медленным по сравнению с локальное хранилище экземпляра (он же эфемерное хранилище). Не все инстансы EC2 предлагают хранилище инстансов - проверьте Типы инстансов Amazon EC2 таблица для деталей. Это может окупиться скопировать данные в хранилище экземпляра перед обработкой для повышения производительности доступа к данным.

    Другой вариант - использовать Экземпляр с оптимизацией хранилища с участием Предоставленный том EBS IOPS но обычно это очень дорого.

  • Если ваше приложение много сеть во время вычислений убедитесь, что и на этом фронте вас не задросселирует. Выберите инстанс EC2 с высоким уровнем Сетевая производительность.

Для подобных экспериментов вам может быть полезно использовать Спотовые экземпляры Это может сэкономить вам до 90% эксплуатационных расходов (или за ту же цену вы можете получить гораздо больший экземпляр). Однако имейте в виду некоторые компромиссы, в основном тот факт, что экземпляр может быть завершен в любое время, если потребность в конкретном типе экземпляра возрастет.

Надеюсь, это поможет :)

Если вы читаете / записываете много файлов на диск, неудивительно, что скрипт в AWS работает медленнее, поскольку операции io обычно зависят от сетевого подключения (поиск EBS).

Вы можете попробовать тип инстанса i3, они предлагают быстрые SSD-диски. Но более правильный подход, который сэкономит вам деньги и время, - это выяснить, что является узким местом в вашем случае: cpu, ram или io, и настроить скрипт для его устранения.