Работая над проектами, которые часто называют «средними данными», я смог распараллелить мой код (в основном для моделирования и прогнозирования в Python) в одной системе в любом месте от 4 до 32 ядер. Сейчас я смотрю на масштабирование до кластеров в EC2 (возможно, с помощью StarCluster / IPython, но также и для других предложений) и был озадачен тем, как согласовать распределение работы по ядрам в экземпляре и экземплярах в кластере.
Является ли практичным даже распараллеливание между экземплярами, а также между ядрами в каждом экземпляре? Если да, может ли кто-нибудь кратко рассказать о плюсах и минусах запуска множества экземпляров с несколькими ядрами в каждом по сравнению с несколькими экземплярами со многими ядрами? Существует ли эмпирическое правило для выбора правильного соотношения между экземплярами и ядрами для каждого экземпляра?
Пропускная способность и оперативная память - нетривиальные проблемы в моих проектах, но легко заметить, когда это узкие места и перестройка. Я полагаю, гораздо сложнее сравнить правильное сочетание ядер с экземплярами без повторного тестирования, и мои проекты слишком сильно различаются, чтобы какой-либо отдельный тест можно было применять при любых обстоятельствах. Заранее спасибо, и если я только что не смог правильно его найти, не стесняйтесь указывать мне правильный ответ где-нибудь еще!