使用 Intel oneDAL 加速 ML.NET 训练
ML.NET 是一个面向 .NET 开发人员的开源跨平台机器学习框架,可将自定义机器学习模型集成到 .NET 应用中。
ML.NET 3.0 的第一个预览版带来了多项硬件加速改进,使你可以在训练期间充分利用计算资源。安装最新的 ML.NET 3.0 和Intel oneDAL 预览包,试用由 Intel oneDAL 提供支持的最新改进。
什么是 oneAPI Data Analytics Library(oneDAL)
Intel oneAPI Data Analytics Library 是一个通过为数据分析和机器学习过程的所有阶段提供高度优化的算法构建模块,帮助加快数据分析速度的库。oneDAL 利用 64 位架构中的 SIMD 扩展,这些扩展在 Intel 和 AMD CPU 中都有。
ML.NET 中的 oneDAL 组件
oneDAL 通过在训练期间加速现有训练器来集成到 ML.NET 中。目前以下 ML.NET 训练器提供 oneDAL 支持。
训练器 | 机器学习任务 |
---|---|
Ordinary Least Squares | Regression |
L-BGFS | Classification |
FastTree | Regression & Classification |
FastForest | Regression & Classification |
开始使用 oneDAL ML.NET
-
安装最新的Microsoft.ML 3.0 预览版。
dotnet add package Microsoft.ML –prerelease
如果您使用的是 OLS 或 FastTree,则必须安装其他软件包。
# Ordinary Least Squares (OLS) dotnet add package Microsoft.ML.Mkl.Components –prerelease
# FastTree dotnet add package Microsoft.ML.FastTree –prerelease
-
安装 Microsoft.ML.OneDal NuGet 包。
dotnet add package Microsoft.ML.OneDal –prerelease
-
将环境变量 MLNET_BACKEND 设置为 ONEDAL。如果您使用的是 oneDAL 支持的训练器之一,则无需更改代码。
-
使用 oneDAL 支持的 ML.NET 训练器之一创建管道。在此示例中,它用于 LbfgsLogisticRegression 训练二元分类模型来预测 oneDAL 支持。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
// Initialize MLContext var ctx = new MLContext(); // Define data var trainingData = new [] { new {Arch="ARM", Trainer="LightGBM", oneDALSupport=false}, new {Arch="x86", Trainer="FastTree", oneDALSupport=true}, new {Arch="x86", Trainer="LbfgsLogisticRegression", oneDALSupport=true}, new {Arch="ARM", Trainer="FastTree", oneDALSupport=false} }; // Load data into IDataView var trainingDv = ctx.Data.LoadFromEnumerable(trainingData); // Define data processing pipeline & trainer var pipeline = ctx.Transforms.Categorical.OneHotEncoding(new [] { new InputOutputColumnPair("ArchEncoded", "Arch"), new InputOutputColumnPair("TrainerEncoded", "Trainer")}) .Append(ctx.Transforms.Concatenate("Features", "ArchEncoded", "TrainerEncoded")) .Append(ctx.BinaryClassification.Trainers.LbfgsLogisticRegression(labelColumnName:"oneDALSupport")); // Train model var model = pipeline.Fit(trainingDv)
-
训练模型。
有关更完整的示例,请参阅此示例。
已知问题
在 Windows 上,您可能会看到库加载错误。若要取消阻断错误,请将应用程序 bin 目录中的“runtimes\win-x64\native”目录添加到 PATH 环境变量中。
入门和资源
在 Microsoft Docs 中了解有关 ML.NET、Model Builder 和 ML.NET CLI 的更多信息。
如果遇到任何问题、功能请求或反馈,请在 ML.NET 和 Model Builder 存储库中提交问题。
加入 .NET 开发 Discord 上的 ML.NET 社区 Discord 或#machine-learning 频道。
- 原文作者:BeanHsiang
- 原文链接:https://beanhsiang.github.io/post/2022-12-23-accelerate-ml-net-training-with-intel-onedal/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。