英特尔优化的机器学习库
Scikit-学习
Scikit-learn 是一个流行的 Python 编程语言开源机器学习 (ML) 库。它具有各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度提升、k-means 和 DBSCAN,旨在与 Python 数值和科学库 NumPy 和 SciPy 互操作。
通过 英特尔® oneAPI AI 分析工具包提供的英特尔® Scikit-learn 扩展可提高机器学习性能,并让数据科学家有时间重新专注于他们的模型。英特尔已通过英特尔® Python 分发版投资优化 Python 本身的性能,并优化了与 scikit-learn 一起使用的关键数据科学库,例如 XGBoost、NumPy 和 SciPy。本文 提供了有关安装和使用这些扩展的更多信息。
TensorFlow
TensorFlow 是另一个流行的开源框架,用于开发端到端 ML 和深度学习 (DL) 应用程序。它拥有一个全面、灵活的工具、库和社区资源生态系统,让研究人员能够轻松构建和部署应用程序。
为了充分利用英特尔® 处理器的可用性能,TensorFlow 已使用英特尔® oneAPI 深度神经网络库 (oneDNN) 原语进行了优化。有关优化和性能数据的更多信息,请参阅 现代英特尔® 架构上的 TensorFlow 优化。
用于机器学习的 Databricks 运行时
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 上的英特尔优化 ML 库
Databricks Runtime for ML 包括 scikit-learn 和 TensorFlow 的库存版本。但是,为了提高性能,我们将用英特尔优化的版本替换它们。Databricks 提供 初始化脚本以方便定制。它们在每个集群节点启动期间运行。我们开发了两个初始化脚本来整合英特尔优化的 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下载到本地文件夹。
- 单击左侧边栏中的 数据 图标。
- 单击 DBFS 按钮,然后 单击 顶部的上传按钮。
- 在 Upload Data to DBFS 对话框中选择一个目标目录,例如 FileStore 。
- 浏览到本地文件夹中先前下载的本地文件以在 文件 框中上传。

接下来,使用上传的初始化脚本启动 Databricks 集群:
- 单击 集群配置页面上的高级选项切换。
- 单击 右下角的Init Scripts选项卡。
- 在目标 下拉菜单中选择 DBFS 目标类型 。
- 指定之前上传的初始化脚本dbfs:/FileStore/init_intel_optimized_ml.sh或dbfs:/FileStore/init_intel_optimized_ml_ex.sh的路径。
- 单击 添加。

有关更多详细信息,请参阅面向 Databricks 的英特尔优化 ML 。
性能测量
Scikit-learn 训练和预测性能
我们使用 Databricks Runtime 版本 7.6 ML 进行以下基准测试。我们使用 scikit-learn_bench来比较常见 scikit-learn 算法在有和没有英特尔优化的情况下的性能。为方便起见,提供了 benchmark_sklearn.ipynb笔记本以在 Databricks Cloud 上运行 scikit-learn_bench。
我们通过使用 stock 库创建一个单节点 Databricks 集群以及使用 Intel 优化版本创建另一个集群来比较训练和预测性能。两个集群都使用 Standard_F16s_v2 实例类型。
基准笔记本在两个集群上运行。对于每种算法,我们设置了多种 配置以获得准确的训练和预测性能数据,下面(表1)显示了每种算法的一种配置的性能数据。
算法 | 输入配置 | 训练时间(秒) | 预测时间(秒) | ||
---|---|---|---|---|---|
股票 scikit-learn(基线) | 英特尔 Scikit-learn 扩展 | 股票 scikit-learn(基线) | 英特尔 Scikit-learn 扩展 | ||
平均数 | 配置1 | 517.13 | 24.41 | 6.54 | 0.42 |
岭回归 | 配置1 | 1.22 | 0.11 | 0.05 | 0.04 |
线性回归 | 配置1 | 3.1 | 0.11 | 0.05 | 0.04 |
逻辑回归 | 配置3 | 87.5 | 5.94 | 0.5 | 0.08 |
支持向量机 | 配置2 | 271.58 | 12.24 | 86.76 | 0.55 |
kd_tree_knn_classification | 配置4 | 0.84 | 0.11 | 1584.3 | 25.67 |
表 1 比较训练和预测性能(所有时间以秒为单位)
对于每种算法,英特尔优化的 scikit-learn 版本都大大提高了训练和预测性能。对于某些算法,例如 svm 和 brute_knn,它实现了数量级的加速(图 1)。

图 1 英特尔优化的 scikit-learn 相对于库存版本的训练和推理加速
TensorFlow 训练和预测性能
BERT或 Transformers 的双向编码器表示,是一种预训练语言表示的新方法,可在广泛的自然语言处理任务中获得最先进的结果。 Model Zoo包含预训练模型、示例脚本、最佳实践和分步教程的链接,这些模型由英特尔优化以在英特尔® 至强® 可扩展处理器上运行的许多流行的开源机器学习模型。
我们使用 Model Zoo在 SQuADv1.1 数据集上运行 BERT-Large模型,以比较使用和不使用我们优化的 TensorFlow 的性能。我们再次提供了一个笔记本 ( benchmark_tensorflow_bertlarge.ipynb ) 来在 Databricks Cloud 上运行基准测试。有关更多详细信息,请参阅 运行性能 比较基准。
我们使用具有 Standard_F32s_v2、Standard_F64s_v2 和 Standard_F72s_v2 实例类型的 Databricks Cloud Single Node 进行 TensorFlow 性能评估。对于每种实例类型,我们比较了库存 TensorFlow 和英特尔优化的 TensorFlow 之间的推理和训练性能。后者分别在具有 Standard_F32s_v2、Standard_F64s_v2 和 Standard_F72s_v2 实例的 Databricks Runtime 上提供 2.09x、1.95x 和 2.18x 的推理性能(图 2)。对于训练,英特尔优化的 TensorFlow 在 Standard_F32s_v2、Standard_F64s_v2 和 Standard_F72s_v2 实例上分别提供 1.76x、1.70x 和 1.77x 的训练性能(图 3)。

图 2 英特尔优化的 TensorFlow 相对于库存版本的推理加速

结束语
英特尔优化的 scikit-learn 和 TensorFlow 版本显着提高了英特尔 XPU 的训练和推理性能。我们证明,将 Databricks Runtime for Machine Learning 中包含的库存 scikit-learn 和 TensorFlow 替换为优化版本可以提高性能,从而降低客户的成本。本文最初发布于https://www.intel.com/content/www/us/en/developer/articles/technical/speeding-up-the-databricks-runtime-for-machine-learning.html#gs。 69f8rw