Я разработал скрипт Python, который в основном читает файл excel и обучает модель с использованием sklearns GridSearchCV, используя инструкцию n_jobs
:
def create_table():
my_model = GridSearchCV(GradientBoostingRegressor(), tuned_parameters, cv=5, scoring='neg_mean_absolute_error', n_jobs=7)
my_model.fit(x_data, y_data)
return(my_model.predict(new_x_data))
Это отлично работает при его выполнении. Но теперь я пытаюсь выполнить его одним нажатием кнопки в приложении Dash
Multiprocessing backed parallel loops cannot be nested below threads, setting n_jobs=1
Приложение My Dash выглядит так:
def generate_html_table(dataframe, max_rows=50):
return html.Table(
# Header
[html.Tr([html.Th(col) for col in dataframe.columns])] +
# Body
[html.Tr( [html.Td(dataframe.index[i])] + [html.Td(dataframe.iloc[i][col]) for col in dataframe.columns]) for i in range(min(len(dataframe), max_rows))]
)
app = dash.Dash()
app.layout = html.Div([
html.H1(children='Region Forecast',
style={'textAlign': 'center'} ),
html.Button(id='submit-button', n_clicks=0, children='Submit',
style={ 'margin': 'auto',
'display': 'block' }),
html.Table(id='output-table', children = generate_html_table(pd.DataFrame()))
])
@app.callback(Output('output-table', 'children'),
[Input('submit-button', 'n_clicks')])
def reactive_compute(n_clicks):
print('inside reactive compute')
my_table = create_my_table()
return(generate_html_table(my_table))
if __name__ == '__main__':
app.run_server(debug=True)
Я видел этот вопрос, но мне это не помогает, потому что я сам не обрабатываю многопроцессорность (это функция scikitlearn): многопроцессорные параллельные циклы не могут быть вложены ниже потоков
Приложение должно работать только на локальном компьютере, я не планирую размещать его на веб-сервере.
Могу ли я установить параллельную модель из приложения Dash, и если это возможно, как мне лучше всего подойти к этому?
Вы используете Windows? У меня такая же проблема в Windows, поэтому я попытался запустить приложение в Ubuntu, и он отлично работает.
Вы можете установить оболочку Linux в Windows в настоящее время из Microsoft Store, если вы не хотите общаться с виртуальными машинами или действительно правильно ее устанавливать. Это отлично подходит для тестирования и разработки.
Edit: GridSearchCV, похоже, справляется с этим, но я все еще получаю эту ошибку, когда я запускаю регрессор сам по себе.
Edit 2: GridSearchCV использовал все потоки, но только загружал их до 10-20%. Запуск приложения с помощью gunicorn решает это.
gunicorn my_app:server
добавьте ниже также в my_app.py:
server = app.server