GridSearchCV中“n_jobs == 1”的含义与使用多个GPU

Posted

技术标签:

【中文标题】GridSearchCV中“n_jobs == 1”的含义与使用多个GPU【英文标题】:The meaning of "n_jobs == 1" in GridSearchCV with using multiple GPU 【发布时间】:2019-02-08 10:34:34 【问题描述】:

我一直在使用带有 4 个 NVIDIA GPU 的 Keras 框架来训练 NN 模型。 (数据行数:~160,000,列数:5)。现在我想通过使用 GridSearchCV 来优化它的参数。

但是,当我尝试将 n_jobs 更改为一个以外的其他值时,我遇到了几个不同的错误。错误,如

CUDA OUT OF MEMORY
Can not get device properties error code : 3

然后我读了这个网页, "# 如果你不使用 GPU,你可以将 n_jobs 设置为 1 以外的值" http://queirozf.com/entries/scikit-learn-pipeline-examples

所以GridSearchCV不能使用多个GPU?

[环境] Ubuntu 16.04 Python 3.6.0 Keras / Scikit-Learn

谢谢!

【问题讨论】:

Keras 使用什么后端? @MarcusV 之后。评论,您能否添加您正在使用的代码(特别是包含导入和GridSearch 部分的代码 【参考方案1】:

根据 scikit learn 中的常见问题解答 - 不支持 GPU。 Link

您可以使用n_jobs 来使用您的 CPU 内核。如果您想以最大速度运行,您可能需要几乎使用所有内核:

import multiprocessing
n_jobs = multiprocessing.cpu_count()-1

【讨论】:

他使用的是 Keras(我想是 sklearn 包装器),所以支持 GPU(如果后端支持的话)。 使用所有内核会挂起其他进程的执行吗?您能否详细说明为什么使用所有内核但一个更好? 使用所有内核会减慢计算机中的所有其他运行速度(它甚至可能没有针对您的“程序”进行优化,但我不确定这种说法)。试试看。

以上是关于GridSearchCV中“n_jobs == 1”的含义与使用多个GPU的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn GridSearchCV n_jobs != 1 冻结

GridsearchCV 负分

从命令行运行脚本时忽略 sklearn Gridsearch 中 n_jobs = -1 的警告不使用 warnings.simplefilter('ignore')

sklearn Logistic Regression with n_jobs=-1 实际上并没有并行化

线程 QueueManagerThread 中的异常 - scikit-learn

我正在使用 GridSearchCV 训练一个 Ann 机器学习模型,但在 gridSearchCV 中遇到了 IndexError