Ошибка многопроцессорной обработки при попытке вычислить попарное сходство очень большого числа векторов - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть массив numpy, который имеет форму 424970 by 512.все значения в каждом векторе являются числами с плавающей запятой и не разрежены.

У меня есть доступ к кластеру, который имеет 3000 ГБ (3 ТБ) памяти и 92 ядра.

Когда я пыталсявычислите парное сходство, используя следующую строку кода:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
vectors = np.load("vectors.npy")
similarity_matrix = cosine_similarity(vectors)

не хватило памяти.

Затем я попробовал следующий код ( из этого ответа ), чтобысоздать фрагменты массивов и, таким образом, возможно (я не уверен) уменьшить объем занимаемой памяти

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
vectors = np.load("vectors.npy")
similarity_matrix = pairwise_kernels(vectors, metric = "cosine", n_jobs = 80)

Но теперь, после почти часа работы, я получаю странную ошибку: `` `

 File "/shared/centos7/python/3.7.0/lib/python3.7/site-packages/sklearn/metrics/pairwise.py", line 1405, in pairwise_kernels
    return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
  File "/shared/centos7/python/3.7.0/lib/python3.7/site-packages/sklearn/metrics/pairwise.py", line 1096, in _parallel_pairwise
    for s in gen_even_slices(Y.shape[0], n_jobs))
  File "/shared/centos7/python/3.7.0/lib/python3.7/site-packages/sklearn/externals/joblib/parallel.py", line 789, in __call__
    self.retrieve()
  File "/shared/centos7/python/3.7.0/lib/python3.7/site-packages/sklearn/externals/joblib/parallel.py", line 699, in retrieve
    self._output.extend(job.get(timeout=self.timeout))
  File "/shared/centos7/python/3.7.0/lib/python3.7/multiprocessing/pool.py", line 657, in get
    raise self._value
multiprocessing.pool.MaybeEncodingError: Error sending result: '[array([[ 1.        ,  0.0775377 ,  0.0775377 , ..., -0.03980096,
         0.07633844,  0.09164172],
       [ 0.0775377 ,  1.        ,  1.        , ..., -0.00941773,
         0.0775912 ,  0.00236293],
       [ 0.0775377 ,  1.        ,  1.        , ..., -0.00941773,
         0.0775912 ,  0.00236293],
       ...,
       [-0.04346758, -0.01262202, -0.01262202, ..., -0.00163259,
         0.00362771,  0.05795608],
       [ 0.02601108,  0.06613082,  0.06613082, ...,  0.03252933,
        -0.02377374,  0.0862666 ],
       [-0.0505936 ,  0.05680718,  0.05680718, ..., -0.02619641,
         0.00659445,  0.13375922]])]'. Reason: 'error("'i' format requires -2147483648 <= number <= 2147483647")'

`` `

Просто, чтобы добавить немного деталей, вот мой сценарий работы с грязью:

#!/bin/bash
#SBATCH --job-name=cosine
#SBATCH --partition=XXXX
#SBATCH --nodes=1
#SBATCH --cpus-per-task=92
#SBATCH --mem=3000GB

module load python/3.7.0

python3 05_05_cosine_similarity_n_jobs.py

У меня есть несколько вопросов,

1) Означает ли эта ошибка, что у меня все еще не хватает памяти?

2) Если ответ на вопрос 1 - да, то есть ли какой-нибудь очень простой твик, который я могу сделать, чтобы убедиться, что скрипт выполняется?

3) Если нет простой настройки, то какой может быть какой-то общий подход к разработке решения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...