n_jobs > 1 在 Neuraxle 中可以使用 sklearn 和 pytorch 吗?
n_jobs > 1 using sklearn and pytorch is possible inside Neuraxle?
我在 GPU (cuda) 中使用 pytorch 训练构建了自己的类似 sklearn 的估计器,当 n_jobs==1 时,它与 RandomizedSearchCV 一起工作正常。当 n_jobs > 1 时,出现以下错误:
PicklingError: Can't pickle <class 'main.LSTM'>: attribute lookup LSTM on main failed
这是给我错误的代码:
model = my_model(input_size=1, hidden_layer_size=80, n_lstm_units=3, bidirectional=False,
output_size=1, training_batch_size=60, epochs=7500, device=device)
model.to(device)
hidden_layer_size = random.uniform(40, 200, 20).astype("int")
n_lstm_units = arange(1, 4)
parametros = {'hidden_layer_size': hidden_layer_size, 'n_lstm_units': n_lstm_units}
splitter = ShuffleSplit()
regressor = model
cv_search = \
RandomizedSearchCV(estimator=regressor, cv=splitter,
search_spaces=parametros,
refit=True,
n_iter=4,
verbose=1,
n_jobs=2,
scoring=make_scorer(mean_squared_error,
greater_is_better=False,
needs_proba=False))
cv_search = MetaSKLearnWrapper(cv_search)
cv_search.fit(X, y)
使用 Neuraxle wrapper 导致完全相同的错误,没有任何改变。
我找到了最接近的解决方案 here,但仍然不知道如何在 Neuraxle 中使用 RandomizedSearchCV。这是一个全新的项目,所以我无法在他们的文档或社区示例中找到答案。如果有人能给我一个例子或一个很好的指示,它将挽救我的生命。谢谢
Ps:在没有 Neuraxle 的 gpu 上使用我的 pytorch 模型 运行 RandomizedSearchCV 的任何方式也有帮助,我只需要 n_jobs>1.
Ps2:我的模型有一个 fit() 方法,可以创建张量并将张量移动到 gpu 并且已经过测试。
此处必须遵守多个标准才能使您的代码正常工作:
- 您需要使用 Neuraxle 的 RandomSearch 而不是 sklearn 的随机搜索才能工作。尽可能使用 Neuraxle 的基础 classes。
- 确保您对 pytorch 模型使用 Neuraxle BaseStep,而不是 sklearn base classe.
- 此外,您应该仅在 setup() 方法或更高版本中创建 PyTorch 代码。您不能在包含 pytorch 代码的 BaseStep 的
__init__
中创建 PyTorch 模型。你会想要阅读 this page.
- 您可能需要创建一个
Saver
for your BaseStep that contains PyTorch code if you want to serialize and then load your trained pipeline again. You can see how we created our TensorFlow Saver for our TensorFlow BaseStep 并执行类似的操作。由于 PyTorch 更急切的特性,您的 saver 可能会比我们的简单得多。例如,您可以在 BaseStep class 的扩展中包含 self.model。 saver 的作用是保存并从 self 中剥离这个简单的变量,并能够在需要时重新加载它。
总结:您需要创建两个 classes,并且您的两个 classes 应该看起来与我们的 two TensorFlow step and saver classes here 非常相似,除了您的 PyTorch 模型在您步骤的 self.model 变量中。
我很高兴看到您实现 PyTorch 基本步骤和 PyTorch 保护程序!
然后您甚至可以使用 AutoML class (see AutoML example here) 将实验保存在超参数存储库中,如示例中所示。
我在 GPU (cuda) 中使用 pytorch 训练构建了自己的类似 sklearn 的估计器,当 n_jobs==1 时,它与 RandomizedSearchCV 一起工作正常。当 n_jobs > 1 时,出现以下错误:
PicklingError: Can't pickle <class 'main.LSTM'>: attribute lookup LSTM on main failed
这是给我错误的代码:
model = my_model(input_size=1, hidden_layer_size=80, n_lstm_units=3, bidirectional=False,
output_size=1, training_batch_size=60, epochs=7500, device=device)
model.to(device)
hidden_layer_size = random.uniform(40, 200, 20).astype("int")
n_lstm_units = arange(1, 4)
parametros = {'hidden_layer_size': hidden_layer_size, 'n_lstm_units': n_lstm_units}
splitter = ShuffleSplit()
regressor = model
cv_search = \
RandomizedSearchCV(estimator=regressor, cv=splitter,
search_spaces=parametros,
refit=True,
n_iter=4,
verbose=1,
n_jobs=2,
scoring=make_scorer(mean_squared_error,
greater_is_better=False,
needs_proba=False))
cv_search = MetaSKLearnWrapper(cv_search)
cv_search.fit(X, y)
使用 Neuraxle wrapper 导致完全相同的错误,没有任何改变。
我找到了最接近的解决方案 here,但仍然不知道如何在 Neuraxle 中使用 RandomizedSearchCV。这是一个全新的项目,所以我无法在他们的文档或社区示例中找到答案。如果有人能给我一个例子或一个很好的指示,它将挽救我的生命。谢谢
Ps:在没有 Neuraxle 的 gpu 上使用我的 pytorch 模型 运行 RandomizedSearchCV 的任何方式也有帮助,我只需要 n_jobs>1.
Ps2:我的模型有一个 fit() 方法,可以创建张量并将张量移动到 gpu 并且已经过测试。
此处必须遵守多个标准才能使您的代码正常工作:
- 您需要使用 Neuraxle 的 RandomSearch 而不是 sklearn 的随机搜索才能工作。尽可能使用 Neuraxle 的基础 classes。
- 确保您对 pytorch 模型使用 Neuraxle BaseStep,而不是 sklearn base classe.
- 此外,您应该仅在 setup() 方法或更高版本中创建 PyTorch 代码。您不能在包含 pytorch 代码的 BaseStep 的
__init__
中创建 PyTorch 模型。你会想要阅读 this page. - 您可能需要创建一个
Saver
for your BaseStep that contains PyTorch code if you want to serialize and then load your trained pipeline again. You can see how we created our TensorFlow Saver for our TensorFlow BaseStep 并执行类似的操作。由于 PyTorch 更急切的特性,您的 saver 可能会比我们的简单得多。例如,您可以在 BaseStep class 的扩展中包含 self.model。 saver 的作用是保存并从 self 中剥离这个简单的变量,并能够在需要时重新加载它。
总结:您需要创建两个 classes,并且您的两个 classes 应该看起来与我们的 two TensorFlow step and saver classes here 非常相似,除了您的 PyTorch 模型在您步骤的 self.model 变量中。
我很高兴看到您实现 PyTorch 基本步骤和 PyTorch 保护程序!
然后您甚至可以使用 AutoML class (see AutoML example here) 将实验保存在超参数存储库中,如示例中所示。