加速 Databricks Runtime 以进行机器学习
Intel 通过 Intel® Distribution for Python 优化了 Python 本身的性能,并针对 scikit-learn 使用的关键数据科学库(如 XGBoost、NumPy 和 SciPy)进行了优化。本文将详细介绍如何安装和使用这些扩展。
Intel 优化的机器学习库
Scikit-learn
Scikit-learn 是 Python 编程语言中一个流行的开源机器学习 (ML) 库。它提供了各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度提升、k-means 和 DBSCAN,并设计为与 Python 数值和科学库 NumPy 和 SciPy 互操作。
通过 Intel® oneAPI AI Analytics Toolkit 提供的 Intel® Extension for Scikit-learn,可提高 ML 性能,让数据科学家有更多时间专注于模型。Intel 通过 Intel® Distribution for Python 优化了 Python 本身的性能,并针对 scikit-learn 使用的关键数据科学库(如 XGBoost、NumPy 和 SciPy)进行了优化。本文 文章 提供了关于安装和使用这些扩展的更多信息。
TensorFlow
TensorFlow 是另一个流行的开源框架,用于开发端到端的 ML 和深度学习 (DL) 应用。它拥有一个全面的、灵活的工具、库和社区资源生态系统,使研究人员能够轻松构建和部署应用程序。
为了充分利用 Intel® 处理器提供的性能,TensorFlow 已使用 Intel® oneAPI Deep Neural Network Library (oneDNN) 进行了优化。有关优化和性能数据的更多信息,请参阅 TensorFlow Optimizations on Modern Intel® Architecture。
Databricks Runtime for Machine Learning
Databricks 是一个统一的数据分析平台,用于数据工程、ML 和协作数据科学。它为开发数据密集型应用程序提供了全面的环境。 Databricks Runtime for Machine Learning 是一个集成的端到端环境,其中包含用于实验跟踪、模型训练、特征开发和管理以及特征和模型服务的托管服务。它包括最受欢迎的 ML/DL 库,如 TensorFlow、PyTorch、Keras 和 XGBoost,还包括分布式训练所需的库,如 Horovod。
Databricks 已与 Amazon Web Services、Microsoft Azure 和 Google Cloud Platform 服务集成。这些云服务提供商为管理生产基础设施和运行生产工作负载带来了极大的便利。虽然云服务不是免费的,但通过利用优化库,有机会降低拥有成本。在本文中,我们将使用 Azure 上的 Databricks 来演示解决方案和我们实现的性能结果。
Azure Databricks 上的 Intel 优化 ML 库
Databricks Runtime for ML 包含 scikit-learn 和 TensorFlow 的标准版本。然而,为了提高性能,我们将用 Intel 优化的版本替换它们。Databricks 提供 初始化脚本 以方便进行自定义。它们在每个集群节点的启动过程中运行。我们开发了两个初始化脚本来整合 Intel 优化的 scikit-learn 和 TensorFlow 版本,具体取决于您是否要安装静态修补版本。
- init_intel_optimized_ml.sh 在运行时环境中安装静态修补的 scikit-learn 和 TensorFlow
- init_intel_optimized_ml_ex.sh 在运行时环境中安装 Intel Extension for Scikit-learn 和 TensorFlow。
以下说明演示了如何创建集群。首先,将初始化脚本复制到 DBFS
- 将 init_intel_optimized_ml.sh 或 init_intel_optimized_ml_ex.sh 下载到本地文件夹。
- 单击左侧边栏中的 Data 图标。
- 单击 DBFS 按钮,然后在顶部单击 Upload 按钮。
- 在 Upload Data to DBFS 对话框中,选择一个目标目录,例如 FileStore。
- 在 Files 框中,浏览到之前在本地文件夹中下载并要上传的文件。
接下来,使用上传的初始化脚本启动 Databricks 集群
- 在集群配置页面上,单击 Advanced Options 切换按钮。
- 单击右下角的 Init Scripts 选项卡。
- 在 Destination 下拉菜单中,选择 DBFS 目标类型。
- 指定先前上传的初始化脚本 dbfs:/FileStore/init_intel_optimized_ml.sh 或 dbfs:/FileStore/init_intel_optimized_ml_ex.sh 的路径。
- 单击 Add。
有关更多详细信息,请参阅 Intel Optimized ML for Databricks。
性能测量
Scikit-learn 训练和预测性能
我们在以下基准测试中使用了 Databricks Runtime Version 7.6 ML。我们使用 scikit-learn_bench 来比较常见 scikit-learn 算法在有无 Intel 优化时的性能。为方便起见,我们提供了 benchmark_sklearn.ipynb 笔记本,以便在 Databricks Cloud 上运行 scikit-learn_bench。
我们通过创建一个具有标准库的单节点 Databricks 集群和一个具有 Intel 优化版本的集群来比较训练和预测性能。两个集群都使用了 Standard_F16s_v2 实例类型。
基准测试笔记本在两个集群上都运行了。对于每种算法,我们设置了多个 配置 以获取准确的训练和预测性能数据,下面(表 1)显示了每种算法一种配置的性能数据。
算法 | 输入配置 | 训练时间(秒) | 预测时间(秒) | ||
---|---|---|---|---|---|
标准 scikit-learn(基线) | Intel Extension for Scikit-learn | 标准 scikit-learn(基线) | Intel Extension for Scikit-learn | ||
kmeans | config1 | 517.13 | 24.41 | 6.54 | 0.42 |
ridge_regression | config1 | 1.22 | 0.11 | 0.05 | 0.04 |
linear_regression | config1 | 3.1 | 0.11 | 0.05 | 0.04 |
logistic_regression | config3 | 87.5 | 5.94 | 0.5 | 0.08 |
svm | config2 | 271.58 | 12.24 | 86.76 | 0.55 |
kd_tree_knn_classification | config4 | 0.84 | 0.11 | 1584.3 | 25.67 |
表 1 比较训练和预测性能(所有时间以秒为单位)
对于每种算法,Intel 优化的 scikit-learn 版本在训练和预测性能方面都得到了极大的提升。对于某些算法,例如 svm 和 brute_knn,其速度提升了几个数量级(图 1)。
TensorFlow 训练和预测性能
BERT,或称 Bidirectional Encoder Representations from Transformers,是一种新的预训练语言表示方法,在各种自然语言处理任务上取得了最先进的成果。 Model Zoo 包含链接到预训练模型、示例脚本、最佳实践和分步教程,适用于许多由 Intel 针对 Intel® Xeon® Scalable 处理器优化的流行开源机器学习模型。
我们使用 Model Zoo 在 SQuADv1.1 数据集上运行 BERT-Large 模型,以比较有无我们优化时的 TensorFlow 性能。同样,我们提供了一个笔记本(benchmark_tensorflow_bertlarge.ipynb),以便在 Databricks Cloud 上运行基准测试。有关更多详细信息,请参阅 Run Performance Comparison Benchmarks。
我们在 Databricks Cloud 单节点上使用 Standard_F32s_v2、Standard_F64s_v2 和 Standard_F72s_v2 实例类型进行 TensorFlow 性能评估。对于每种实例类型,我们比较了标准 TensorFlow 和 Intel 优化 TensorFlow 之间的推理和训练性能。对于推理,Intel 优化 TensorFlow 在 Databricks Runtime for ML 上使用 Standard_F32s_v2、Standard_F64s_v2 和 Standard_F72s_v2 实例分别提供了 2.09x、1.95x 和 2.18x 的性能(图 2)。对于训练,Intel 优化 TensorFlow 在 Standard_F32s_v2、Standard_F64s_v2 和 Standard_F72s_v2 实例上分别提供了 1.76x、1.70x 和 1.77x 的训练性能(图 3)。
结论
Intel 优化的 scikit-learn 和 TensorFlow 版本在 Intel XPUs 上提供了显著的训练和推理性能改进。我们证明了用 Databricks Runtime for Machine Learning 中包含的优化版本替换标准 scikit-learn 和 TensorFlow 可以提高性能,从而为客户降低成本。