在本系列的上一篇博客文章中,我们介绍了在Cloudera Machine Learning(CML)项目中利用深度学习的步骤。今年,我们扩大了与NVIDIA的合作伙伴关系,使您的数据团队能够使用RAPIDS AI无需更改任何代码即可大大加快数据工程和数据科学工作负载的计算流程。Cloudera Data Platform上的RAPIDS预先配置了所有必需的库和依赖项,以将RAPIDS的功能带到您的项目中。
RAPIDS将GPU计算的功能带到标准的数据科学操作中,无论是探索性数据分析、特征工程还是模型构建。有关更多信息,请参见:< https://rapids.ai/ > RAPIDS库旨在替代常见的Python数据科学库,例如Pandas(cuDF),numpy(cuPy),sklearn(cuML)和dask(dask_cuda)。通过利用GPU的并行计算能力,可以大大减少用于复杂数据工程和数据科学任务的时间,从而加快了数据科学家将想法从概念转化为生产的时间范围。
在本教程中,我们将说明如何使用RAPIDS来应对Kaggle的房屋信用违约风险。房屋信贷违约风险问题是关于预测客户拖欠贷款的机会,这是常见的金融服务行业问题集。为了尝试对此进行预测,包括了一个广泛的数据集,其中包括有关单个借方及其历史信用记录的匿名详细信息。有关更多详细信息,请参见< https://www.kaggle.com/c/home-credit-default-risk/overview >。
作为机器学习问题,这是具有表格式数据的分类任务,非常适合RAPIDS。
本教程的重点是利用RAPIDS库的机制,而不是为排行榜构建性能最佳的模型。要查看有关获奖作品的更多信息,请参见:https : //www.kaggle.com/c/home-credit-default-risk/discussion/6482
要继续进行,请将位于以下位置的存储库克隆:https : //github.com/Data-drone/cml_rapids.git到一个新的CML项目中
在此示例中,我们将使用Jupyter Notebook会话来运行我们的代码。创建具有8核、16GB内存和1个GPU的会话
使用以下命令从终端会话中安装需求:
code
pip install -r requirements.txt
为了使代码正常工作,应将CSV格式的数据放入数据子文件夹中。数据集可以从以下网址下载:https://www.kaggle.com/c/home-credit-default-risk/data.
为了验证我们的映像是否正常工作以及是否正确配置了RAPIDS,请在jupyterlab的终端会话中运行“ testing.py”。
该脚本将先加载RAPID库,然后再利用它们加载和处理数据文件。
此阶段的常见问题可能与GPU版本有关。仅Pascal或更新的NVIDIA GPU支持RAPIDS。对于AWS,这意味着至少有P3实例。不支持P2 GPU实例。
原始数据位于一系列CSV文件中。我们首先将其转换为Parquet格式,因为大多数数据湖都存在于存储有Parquet文件的对象存储中。Parquet还存储类型元数据,这使得稍后回读和处理文件稍微容易些。
运行`convert_data.py`脚本。这将以正确的数据类型打开CSV,然后将它们另存为Parquet,保存在“ raw_data”文件夹中。
浏览数据集,有数字列、分类列和布尔列。“ application_test”和“ application_train”文件包含我们将基于其构建模型的主要功能,而其他表则提供了一些补充数据。随意浏览:“ First_Exploration.ipynb”,以查看数据集的一些基本知识。
在“ First_Exploration.ipynb”中,我们还利用了“ cuXfilter”,它是RAPIDS加速的交叉过滤可视化库,用于某些图表。
与所有机器学习问题一样,让我们从一个简单的模型开始。这使我们有机会建立基准以进行改进,并检查机器学习是否可以立即从数据中学到东西。
打开`A_First_Model.ipynb`
在本笔记本的开头,您可以选择要加载的库集。
RAPIDS集或Pandas集。只需运行这些单元格之一。
该笔记本仅加载训练和测试数据集。
从包含大量缺失值的列中进行一些简单的筛选
值得注意的是,尽管RAPIDS`cudf`在很大程度上替代了“ pandas”,但我们确实需要更改某些部分以使其无缝运行。
code block
if type(df_app_train_miss_values) == cudf.core.dataframe.DataFrame:
drop_columns = df_app_train_miss_values[df_app_train_miss_values['missing percent'] \
>= 40]['columns'].to_arrow().to_pylist()
else:
drop_columns = df_app_train_miss_values[df_app_train_miss_values['missing percent'] \
>= 40]['columns'].tolist()
模型的训练。
并分析结果。
现在我们对它的工作原理有了一个了解,让我们看一个更高级的功能工程管道。
对于我们的简单要素工程流水线,我们仅使用主训练表,而未查看数据集中的其他表。
对于我们的高级功能工程流水线,我们将包括辅助数据并设计一些其他功能。
打开Comparing_Frameworks.ipynb文件以查看cuDF和熊猫的比较。
NOTE: The function for engineering the features have been written to be compatible with Pandas and cuDF and can be found in `feature_engineering_2.py`
笔记本分为两部分:RAPIDS cuDF和Pandas。
从我们的测试中,我们可以看到以下方面的性能:
Process | RAPIDS (wall time) | Pandas (wall time) |
---|---|---|
Ingest Data | 1.17 secs | 9.83 secs |
Generate Features | 8.12 secs | 68.1 secs |
Write Data | 4.34 secs | 9.8 secs |
*请注意,您的运行时可能会因群集硬件设置和会话资源而异。这是基于具有8核和16GB RAM的P3 Worker
我们可以看到,在过程的所有部分中,RAPIDS都比原始Pandas提供更高的性能。在此阶段值得注意的是,RAPIDS cuDF只能利用一个GPU。如果我们希望扩展到单个GPU之外,则需要利用`dask_cudf`。
对于高级建模部分,我们将再次利用xgboost作为主要方法。为了启用GPU加速,我们将`tree_method`设置为`gpu_hist`。这实际上是我们利用GPU计算所需要做的一切!
有了房屋信贷违约风险挑战,过度拟合非常容易。因此,我们在此处包括了一个交叉验证步骤。为了对RAPIDS cuDF数据帧使用`train_test_split`,我们改用`cuml`版本。cuML但是没有“ StratifiedKFold”采样,因此我们将使用“ sklearn”版本。
但是,`StratifiedKFold`在计算上并不是很昂贵,因此我们不在GPU上运行也没关系。生成的索引也可以按照常规通过iloc直接与cuDF数据帧一起使用。
通过训练我们的模型,我们可以查看模型中的混淆矩阵和auc得分。同样,我们使用cuML版本,因此我们不必将数据传输回CPU。
XGBoost还具有GPU加速的特征重要性计算和SHAP计算,以提高解释性。有关shap值的完整说明,请参见:https://www.kaggle.com/dansbecker/shap-values
以下文章是该系列的第3部分,即CML上的GPU。如果您想了解更多有关如何利用RAPIDS加速Cloudera Machine Learning中的机器学习项目的信息,请务必查看博客系列的第1部分和第2部分。
6月3日,加入NVIDIA和Cloudera团队参加我们即将举行的网络研讨会,即使用NVIDIA GPU实现更快的大数据科学。 现在注册。
原文作者:Brian Law
原文链接:https://blog.cloudera.com/nvidia-rapids-in-cloudera-machine-learning/