Зная, какой каталог код Python использует в кластере
Я работаю над кластером с версией MPICH (MPI). По сути, код выполняется с 1 MPI-процессом на каждом узле, и у каждого процесса есть все доступные ему ядра. Таким образом, существует один процесс MPI на узел, который имеет дело с получением данных, а затем нативная многопроцессорная обработка для Python делает некоторую работу.
С каждого узла данные сохраняются в каталог, это так же, как /myfolder
и все они сохраняются в файловой системе блеска в одном месте.
Теперь при локальной разработке многопроцессорная обработка, которую я выполняю, использует чтение / запись в память, а в Linux она в основном использует каталог tmp.
fd = os.open(filename, os.O_CREAT | os.O_TRUNC | os.O_RDWR)
#Make sure the memory is allocated
assert os.write(fd, '\x00' * memsize) == memsize
#Map the file to memory
buf = mmap.mmap(fd, memsize, mmap.MAP_SHARED,access=mmap.ACCESS_WRITE)
#Put the data
buf.seek(0)
buf.write(data)
buf.seek(0)
buf.close()
os.close(fd)
Как я могу узнать, где хранится TMP? Например, я хочу убедиться, что он находится локально в памяти, а не в корневом узле или в системе блеска.
Мотивация вопроса заключается в том, что код работает для 10 узлов, но при увеличении до 50 он зависнет, и некоторые из узлов начнут вычисление, а другие не запустятся. Я задаюсь вопросом, заполнили ли те, кто начинал, память какой-то обычной машины, вызвав сбой.
1 ответ
mmap в параллельной файловой системе возможен, но почти всегда плохая идея. mmap() выполнит ввод / вывод в 4k блоках (размер страницы linux), которые могут подходить или не подходить вашей файловой системе.
Возможно, вы захотите взглянуть на mpi4py и его неплохую поддержку MPI-IO. Вы сможете полностью избежать mmap, и когда вы (все вместе, если это соответствует потребностям вашего приложения) будете писать параллельно с вашей файловой системой блеска, есть большая вероятность, что библиотека MPI оптимизирует запрос для вас.