XGBoost如何用GPU进行训练?
结合了pipeline、FunctionTransformer、GridSearchCV、XGBoost做训练,能在XGBoost做训练中设置 device='cuda'开启训练,但是训练数据却无法送到 GPU,请问如何解决呢?
cat_columns = X.select_dtypes(include=['object']).columns.values # 注意:这里不要用train_df,否则会出现 KeyErr: Premium Amount
num_columns = X.select_dtypes(include=np.number).columns.values
print(cat_columns)
print(num_columns)
preprocess = ColumnTransformer([
('categorical', make_pipeline(transform_datatime, transform_drop_columns, SimpleImputer(strategy='most_frequent'), OneHotEncoder()), cat_columns),
('numerical', make_pipeline(transform_drop_columns, SimpleImputer(strategy='mean'), StandardScaler()), num_columns)
])
# 定义完整的pipeline
pipeline = Pipeline(steps=[
('preprocess', preprocess),
('regressor', xgbRegressor(tree_method='hist', objective='reg:squarederror', n_jobs=-1))
])
# 定义超参数网格
param_grid = {
'regressor__n_estimators': [200, 300],
'regressor__max_depth': [5, 7],
'regressor__learning_rate': [0.05, 0.1],
'regressor__subsample': [0.8, 1.0]
}
# 设置GridSearchCV
grid_search = GridSearchCV(pipeline, param_grid, cv=2, scoring='neg_mean_squared_error', verbose=2)
grid_search.fit(X, y)
参考了官方文档,但是依然无法将训练数据设置到 GPU 上。
params = dict()
params["device"] = "cuda"
params["tree_method"] = "hist"
Xy = xgboost.QuantileDMatrix(X, y)
xgboost.train(params, Xy)
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline, make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.model_selection import GridSearchCV
from xgboost import XGBRegressor
import numpy as np
# 选择分类和数值列
cat_columns = X.select_dtypes(include=['object']).columns.values
num_columns = X.select_dtypes(include=np.number).columns.values
print(cat_columns)
print(num_columns)
# 定义预处理步骤
preprocess = ColumnTransformer([
('categorical', make_pipeline(transform_datetime, transform_drop_columns, SimpleImputer(strategy='most_frequent'), OneHotEncoder()), cat_columns),
('numerical', make_pipeline(transform_drop_columns, SimpleImputer(strategy='mean'), StandardScaler()), num_columns)
])
# 定义完整的管道
pipeline = Pipeline(steps=[
('preprocess', preprocess),
('regressor', XGBRegressor(tree_method='hist', objective='reg:squarederror', n_jobs=-1))
])
# 定义超参数网格
param_grid = {
'regressor__n_estimators': [200, 300],
'regressor__max_depth': [5, 7],
'regressor__learning_rate': [0.05, 0.1],
'regressor__subsample': [0.8, 1.0]
}
# 设置 GridSearchCV
grid_search = GridSearchCV(pipeline, param_grid, cv=2, scoring='neg_mean_squared_error', verbose=2)
# 拟合模型
grid_search.fit(X, y)
在您的Pipeline中使用XGBoost进行GPU训练时,确保数据能够正确传递到GPU上,您需要确保几个关键点被正确设置。以下是如何在您的Pipeline中配置XGBoost以使用GPU进行训练的步骤和解释:
首先,确保您安装了支持GPU的XGBoost版本。这通常意味着您需要安装xgboost-cuda
或者通过特定的安装命令来确保CUDA支持。
pip install xgboost --install-option=--enable-cuda
在您的Pipeline中,xgbRegressor
需要被配置为使用GPU。虽然您已经在params
中设置了device='cuda'
,但这种方式在Pipeline中并不直接适用,因为Pipeline中的xgbRegressor
需要直接接受这些参数。您可以通过在初始化xgbRegressor
时直接传递这些参数来实现。
import xgboost as xgb
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import SimpleImputer, OneHotEncoder, StandardScaler
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
import numpy as np
cat_columns = X.select_dtypes(include=['object']).columns.values
num_columns = X.select_dtypes(include=np.number).columns.values
print(cat_columns)
print(num_columns)
preprocess = ColumnTransformer([
('categorical', make_pipeline(SimpleImputer(strategy='most_frequent'), OneHotEncoder()), cat_columns),
('numerical', make_pipeline(SimpleImputer(strategy='mean'), StandardScaler()), num_columns)
])
xgb_regressor = xgb.XGBRegressor(
tree_method='hist',
objective='reg:squarederror',
use_label_encoder=False, # 注意:对于XGBoost 1.3.0及以上版本,需要设置
gpu_id=0, # 指定GPU设备ID
predictor='gpu_predictor' # 明确指定使用GPU预测器
)
pipeline = Pipeline(steps=[
('preprocess', preprocess),
('regressor', xgb_regressor)
])
param_grid = {
'regressor__n_estimators': [200, 300],
'regressor__max_depth': [5, 7],
'regressor__learning_rate': [0.05, 0.1],
'regressor__subsample': [0.8, 1.0]
}
grid_search = GridSearchCV(pipeline, param_grid, cv=2, scoring='neg_mean_squared_error', verbose=2)
grid_search.fit(X, y)
### 解释
1. **GPU支持**:确保安装了支持CUDA的XGBoost。
2. **XGBoostRegressor参数**:
- `gpu_id`:指定使用的GPU设备ID。
- `predictor`:设置为`'gpu_predictor'`以在预测时使用GPU。
- 注意`use_label_encoder`参数,这是为了避免在新版本XGBoost中可能遇到的标签编码问题。
3. **Pipeline配置**:直接在`xgbRegressor`的初始化中设置GPU相关参数,这样Pipeline中的每一步都能正确地处理和传递数据。
Banzai Pipeline, or simply Pipeline is a tabletop reef break located in Hawaii, Oahu's North Shore. The most famous and infamous reef in the universe is the benchmark by which all other waves are meas
我有一个groovy文件,我想从Jenkinsfile运行。 即加载脚本。groovy 但是,我不确定如何引用这个文件,如果它存储在与Jenkinsfile相同的目录中。我正在从git加载Jenkinsfile。我注意到它创建了一个名为的文件夹。它没有将其放在工作区目录中。我可以对文件夹进行硬编码,但我不确定这方面的规则,再次签出代码似乎有点多余。 默认情况下,它从工作区加载,而不是 我正在尝试将
问题内容: 我们正在尝试迭代,但没有成功。我们将问题简化为以下最小示例: 如果我们尝试迭代: 仅输出第一个条目: 我们所知道的替代方法甚至无法进入循环: 要么 都失败了,都只显示异常。(这可能与在引发“真实”异常时发生的异常有关,使我们无法知道发生了什么)。 我们正在使用最新稳定的jenkins(2.19.1),并将所有插件更新为今天(2016/10/20)。 是否有解决方案来迭代Jenkins管
问题内容: 我正在研究Jenkins Pipeline:Multibranch的功能。据说最近采取的步骤可能有用,但是我无法了解它的工作原理和目的。 它的提示消息似乎不太清楚: 更新运行此步骤的作业的属性。多分支工作流主要有用,因此Jenkinsfile本身可以编码静态作业配置。 因此,我以此为脚本创建了一个新管道(直接粘贴到Jenkins中而不是SCM中): 我运行了它,但没有任何反应,作业没有
问题内容: 我需要在链接到Azure Key Vault机密的Azure管道中使用Variable组。该机密将用于连接到sql数据库。 在Azure管道中以生成方式运行它时,是否可以通过此方法将变量组传递给Jmeter.jmx ? 这是我运行Jmeter.jmx负载测试文件时使用的模板。 https://docs.microsoft.com/zh-cn/azure/devops/pipelines
问题内容: 我在声明性jenkins管道中执行以下步骤:我使用libraryResource 创建来自文件夹的脚本。该脚本包含我的用户和某些用户的凭据。 这很好。我可以使用我的用户。现在,我正在寻找最好的方式来包括用户的凭据。我是否需要“嵌套”第二部分,还是可以再次添加“数组”? 问题答案: 当然,您可以使用一个块将多个凭证分配给不同的变量。
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,一些组件会按照一定的顺序执行对Item的处理。 每个item pipeline组件(有时称之为“Item Pipeline”)是实现了简单方法的Python类。他们接收到Item并通过它执行一些行为,同时也决定此Item是否继续通过pipeline,或是被丢弃而不再进行处理。 以下是item pipeline的一些典型
Asset Pipeline 本文介绍 Asset Pipeline。 读完本文,你将学到: Asset Pipeline 是什么以及其作用; 如何合理组织程序的静态资源; Asset Pipeline 的优势; 如何向 Asset Pipeline 中添加预处理器; 如何在 gem 中打包静态资源; 1 Asset Pipeline 是什么? Asset Pipeline 提供了一个框架,用于连