Разделение больших наборов данных графа R-MAT из двоичного файлаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разделение больших наборов данных графа R-MAT из двоичного файла

Сообщение Anonymous »

В настоящее время я использую скрипт Python, чтобы найти идеальную точку с количеством ненулевых значений (nnz) для разделения разреженного графа: (из этого ответа)

Код: Выделить всё

def myhorsplit(
matrix: sparse.sparray, n_compute_units: int = 4,
) -> list[sparse.sparray]:
nnz = matrix.getnnz(axis=1).cumsum()
total = nnz[-1]
ideal_breaks = np.arange(0, total, total/n_compute_units)
break_idx = [*nnz.searchsorted(ideal_breaks), None]
return [
matrix[i: j, :]
for i, j in zip(break_idx[:-1], break_idx[1:])
]
def main() -> None:
rand = np.random.default_rng(seed=0)
# Create an 8x8 adjacency matrix with the modified element
adjacency_matrix = [
(1, 1, 1, 1, 0, 0, 0, 0),
(1, 0, 1, 0, 0, 0, 0, 0),
(1, 1, 0, 1, 0, 0, 0, 0),
(1, 0, 1, 0, 0, 0, 0, 0),
(0, 0, 1, 0, 0, 1, 0, 1),
(0, 0, 0, 0, 1, 0, 0, 0),
(0, 0, 0, 0, 1, 1, 0, 1),
(0, 0, 1, 0, 1, 0, 1, 0),
]
# csr_matrix = sparse.csr_array(adjacency_matrix)
csr_matrix = sparse.csr_array(
rand.integers(low=0, high=2, size=(10_000, 50), dtype=np.uint8)
)

partitions = myhorsplit(csr_matrix)

for i, partition in enumerate(partitions):
print(f"Partition {i}: {partition.nnz} ones, shape {partition.shape}")
# print(partition.toarray())
Итак, пример кода разделен на 4 раздела:

Код: Выделить всё

Partition 0: 4 ones, shape (1, 8)
[[1 1 1 1 0 0 0 0]]
Partition 1: 5 ones, shape (2, 8)
[[1 0 1 0 0 0 0 0]
[1 1 0 1 0 0 0 0]]
Partition 2: 6 ones, shape (3, 8)
[[1 0 1 0 0 0 0 0]
[0 0 1 0 0 1 0 1]
[0 0 0 0 1 0 0 0]]
Partition 3: 6 ones, shape (2, 8)
[[0 0 0 0 1 1 0 1]
[0 0 1 0 1 0 1 0]]
В настоящее время я пытаюсь разделить график R-MAT с масштабом = 29 и краевым коэффициентом = 16, что составляет около 120 ГБ двоичного файла для чтения и преобразования в разреженный массив. Этот скрипт Python зависает с сообщением OOM Killed.
Мне было интересно, есть ли способ добиться такого разделения из двоичного файла (сгенерированного с помощью Graph500), прочитав файл только ?
Я подумал, что один из вариантов - найти оптимальную функцию, которая ранжирует все ребра в зависимости от их исходного узла, а затем разделяет их, что все равно сохранит правильность регионов? Как я могу подойти к этой проблеме?

Подробнее здесь: https://stackoverflow.com/questions/790 ... inary-file
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»