2016-08-25 3 views
1

я создал кластер 48-узел, состоящий из host0 в host47 (все узлы g2.2xlarge Amazon EC2 экземпляры с не NFS). Согласно https://ipyparallel.readthedocs.io/en/latest/process.html, я создал контроллер на host0 и 47 двигателях на host1 до host47. Я скопировал большую часть конфигурации для кластера sshipyparallel из проекта StarCluster (но, как я уже сказал, без NFS). Кластер работает и, кажется, дает правильные результаты, но загрузка модулей иногда занимает очень много времени. Например,Ipyparallel модуль нагрузки на кластере очень медленный

import ipyparallel as ipp 
client = ipp.Client('/path/to/ipcontroller-client.json',sshkey='mykey') 
view = client[:] 
view.block=True 

with view.sync_imports(): 
    import time 
    import numpy 
    from keras.models import Sequential 
    from keras.layers import Dense, Dropout 
    from keras.regularizers import l1 
    from keras.optimizers import SGD 
    from subprocess import check_output 

занимает более 30 минут, пока она не будет закончена. Это не изменяется, если я перехожу на block=False и view.wait(). Также использование view.execute("import time; import numpy; import keras.models ...") не помогает. Я знаю, что загрузка модулей keras происходит несколько медленно, но на моей локальной машине это обычно делается менее чем за 1 минуту. Я попробовал как pickle, так и json (un). Следует отметить, что загрузка модулей работает нормально, когда я использую такой же кластер для другого расчета. Я предполагаю, что загруженные модули где-то кэшированы. Но когда я заканчиваю экземпляры, создаю новые и настраиваю новый кластер ipyparallel, у меня такие же проблемы с загрузкой модуля.

Глядя в журнал ipcontroller, я могу найти, что большинство запросов, соответствующего sync_imports

2016-08-25 12:12:02.310 [IPControllerApp] queue::client '\x00"_\x0b\x0b' 
submitted request '46244cf0-ad0a-4748-a84c-8d3d69d8252c' to 0 

закончат в течение нескольких минут. Тем не менее, некоторые из них занимают около 30 минут. См. Следующую гистограмму complete_time - submit_time, полученную из журнала ipcontroller.

enter image description here

Я только недавно начал использовать Python, и я понятия не имею, что эта проблема может быть здесь. Похоже, что максимальная разница во времени между временем завершения и отправки увеличивается с размером кластера. Любые указания на возможные проблемы приветствуются.

BTW: Я использую Python 2.7.6 и Ipyparallel 5.1.1

ответ

0

Моя лучшая догадка сейчас является то, что проблема была вызвана инициализации тома EBS - который может быть немного медленным иногда. Экземпляры кластера всегда начинались с изображений и заканчивались сразу после выполнения вычислений. Точки EBS, созданные из снимков, должны извлекать данные из S3. Посмотреть AWS EBS documentation

объемы нового EBS получают максимальную производительность в тот момент, что они доступны и не требуют инициализации (ранее известный как предварительного подогрева). Однако блоки хранения на томах, которые были восстановлены из моментальных снимков, должны быть инициализированы (сняты с Amazon S3 и , записанные на том), прежде чем вы сможете получить доступ к блоку. Это предварительное действие требует времени и может привести к значительному увеличению задержки операции ввода-вывода при первом доступе к каждому блоку. Для большинства применений допустима амортизация этой стоимости за время жизни тома .Производительность восстанавливается после получения данных .