Запуск python функций параллельно с pathos.multiprocessing.Pool () генерирует ошибку i, формат которой требует -2147483648 <= число <= 2147483647 - PullRequest
0 голосов
/ 17 января 2020

Проблема: Я пытаюсь запустить функцию параллельно, используя pathos.multiprocessing.Pool (). Код, который я написал, работает для небольших проблем, но не работает для больших проблем с этой ошибкой:

python2 .7 / site-packages / multiprocess / pool.py, строка 572, в get get self ._value struct.error: формат i требует -2147483648 <= число <= 2147483647 </p>

На этой странице обсуждается проблема ... python struct.error: формат 'i' требует - 2147483648 <= number <= 2147483647 </a> ... и в результате вышеизложенного я ввел глобальные переменные (training_data и некоторые параметры), чтобы избежать их передачи через pool.map (), и сделал fit_gpr () функцией void ( см код ниже). Это не решило проблему.

Вопрос: Кто-нибудь знает, какая строка / массив / функция в fit_gpr () вызывает сообщение об ошибке переполнения выше? Будучи новичком, я не был уверен, может ли это быть размер массивов, объем вычислений, выполняемых функциями sklearn, сброс моделей на диск или что-то еще. Любая помощь предложений будет принята с благодарностью.

Вот сокращенная версия кода:

from pathos.multiprocessing import Pool
import time, numpy as np
def create_neural_networks():
    def fit_gpr(index):

        # Gaussian Process Regression
        # this uses the global variables training_data and options,
        # and the sklearn functions C, RBF and GaussianProcessRegressor

        scaling_bounds       = options.training.GPR_scaling_range
        RBF_length_scale     = options.training.GPR_RBF_length_scale
        RBF_length_bounds    = options.training.GPR_RBF_length_bounds
        constant_value       = options.training.GPR_constant_value 
        constant_bounds      = options.training.GPR_constant_bounds 
        n_restarts          = options.training.GPR_n_restarts_optimizer

        # get the training data
        trainX = training_data[:-1,:]
        trainY = np.atleast_2d(training_data[:,index]).T

        # set up the GPR
        kernel = C(constant_value, constant_bounds) * RBF(RBF_length_scale,RBF_length_bounds)
        gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=n_restarts) 

        # fit to the data
        gp.fit(trainX, trainY)

        # save the model 
        joblib.dump(gp, 'gpr_model_' + str(index) + '.sav')

        return  

    N = 350
    training_data = np.zeros((1705,N),dtype=np.float64) # global variable

    pool = Pool(processes=40) 
    pool.map(fit_gpr, range(N))

    return
...