#parallel-processing #jupyter-notebook #cython #joblib
#параллельная обработка #jupyter-записная книжка #cython #joblib
Вопрос:
Я ищу способы уменьшить время вычисления определенных задач. После проверки различных вариантов я обнаружил, что joblib и cython лучше всего работают для меня в среде jupyter. Однако, несмотря на то, что мне удалось реализовать эти подходы по отдельности, мне не удалось их объединить.
Ниже приведен пример примера кода, который выдает то же сообщение об ошибке (выполняется в ноутбуках jupyter).:
%load_ext Cython
%%cython
cpdef test(int item):
cdef int y = 0
cdef int i
for i in range(10):
y = item
return y
from joblib import Parallel, delayed
res = Parallel(n_jobs=-1)(delayed(test)(i) for i in range(20))
Сообщение об ошибке: BrokenProcessPool: не удалось отменить сериализацию задачи. Пожалуйста, убедитесь, что все аргументы функции можно выбирать.
Согласно этой документации, используемые переменные должны быть выбираемыми, поэтому я не уверен в причине такого поведения.
Комментарии:
1. Я подозреваю, что это
test
связано с тем, что она не может отменить сериализацию. Работает ли это, если вы используетеdef
функцию, а неcpdef
функцию?2. @DavidW Я попробовал, но сообщение об ошибке сохраняется.
3. Ориентировочно я думаю, это потому, что функции Cython в Jupyter создаются во временном модуле. Затем удаление завершается неудачей, поскольку он не может найти модуль (функции Cython отображаются только как модуль и имя). Я сомневаюсь, что есть хорошее решение, но оно, вероятно, сработало бы, если бы вы использовали функцию Cython, определенную вне Jupyter. (Также, вероятно, больше сообщений об ошибках, чем вы показываете: github.com/joblib/joblib/blob /… )
4. @DavidW Я попытался вызвать функцию cython в joblib с помощью редактора Atom, и код работает довольно гладко. Так что, вероятно, вы правы в отношении причины ошибки в Jupyter Спасибо!
5. Я хотел бы добавить, что выполнение кода с использованием как cython, так и joblib, по-видимому, требует большего вычислительного времени, чем в случае использования только joblib.