python python-3.x gpu multi-gpu tesla

Python: ¿cómo paralelizamos un programa python para aprovechar un servidor GPU?



python-3.x multi-gpu (0)

En nuestro laboratorio, tenemos NVIDIA Tesla K80 acelerador de GPU de computación con las siguientes características: Intel(R) Xeon(R) CPU E5-2670 v3 @2.30GHz, 48 CPU processors, 128GB RAM, 12 CPU cores ejecutan en Linux de 64 bits .

Estoy ejecutando el siguiente código que hace GridSearchCV después de GridSearchCV verticalmente diferentes conjuntos de marcos de datos en una sola serie de un modelo RandomForestRegressor . Los dos conjuntos de datos de muestra que estoy considerando se encuentran en este enlace

import sys import imp import glob import os import pandas as pd import math from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression import matplotlib from sklearn.model_selection import cross_val_score import matplotlib.pyplot as plt import numpy as np from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import GridSearchCV from sklearn.naive_bayes import MultinomialNB from sklearn.linear_model import LassoCV from sklearn.metrics import r2_score, mean_squared_error, make_scorer from sklearn.model_selection import train_test_split from math import sqrt from sklearn.cross_validation import train_test_split df = pd.concat(map(pd.read_csv, glob.glob(os.path.join('''', "cubic*.csv"))), ignore_index=True) #df = pd.read_csv(''cubic31.csv'') for i in range(1,3): df[''X_t''+str(i)] = df[''X''].shift(i) print(df) df.dropna(inplace=True) X = (pd.DataFrame({ ''X_%d''%i : df[''X''].shift(i) for i in range(3)}).apply(np.nan_to_num, axis=0).values) X = df.drop(''Y'', axis=1) y = df[''Y''] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40) X_train = X_train.drop(''time'', axis=1) X_test = X_test.drop(''time'', axis=1) #Fit models with some grid search CV=5 (not to low), use the best model parameters = {''n_estimators'': [10,30,100,500,1000]} clf_rf = RandomForestRegressor(random_state=1) clf = GridSearchCV(clf_rf, parameters, cv=5, scoring=''neg_mean_squared_error'') model = clf.fit(X_train, y_train) model.cv_results_[''params''][model.best_index_] math.sqrt(model.best_score_*-1) model.grid_scores_ ##### print() print(model.grid_scores_) print(math.sqrt(model.best_score_*-1)) #reg = RandomForestRegressor(criterion=''mse'') clf_rf.fit(X_train,y_train) modelPrediction = clf_rf.predict(X_test) print(modelPrediction) print("Number of predictions:",len(modelPrediction)) meanSquaredError=mean_squared_error(y_test, modelPrediction) print("Mean Square Error (MSE):", meanSquaredError) rootMeanSquaredError = sqrt(meanSquaredError) print("Root-Mean-Square Error (RMSE):", rootMeanSquaredError) ####### to add the trendline fig, ax = plt.subplots() #df.plot(x=''time'', y=''Y'', ax=ax) ax.plot(df[''time''].values, df[''Y''].values) fig, ax = plt.subplots() index_values=range(0,len(y_test)) y_test.sort_index(inplace=True) X_test.sort_index(inplace=True) modelPred_test = clf_rf.predict(X_test) ax.plot(pd.Series(index_values), y_test.values) PlotInOne=pd.DataFrame(pd.concat([pd.Series(modelPred_test), pd.Series(y_test.values)], axis=1)) plt.figure(); PlotInOne.plot(); plt.legend(loc=''best'')

Cuando ejecuto este programa para un gran conjunto de datos (alrededor de 2 millones de filas), lleva más de 3 días hacer GridSearchCV . Por lo tanto, me preguntaba si los subprocesos de Python pueden utilizar más de una CPU. ¿Cómo podemos hacer que este (u otros programas de Python ) utilicen más de una CPU para que haga la tarea más rápido en un corto período de tiempo? Gracias por cualquier consejo!