У меня есть массив 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) Если нет простой настройки, то какой может быть какой-то общий подход к разработке решения?