2021年11月 微軟開源一款簡單的、多語言的、大規模并行的機器學習庫 SynapseML(以前稱為 MMLSpark),以幫助開發人員簡化機器學習管道的創建。具體參見[1]微軟深度學習庫 SynapseML:可直接在系統中嵌入 45 種不同機器學習服務、支持 100 多種語言文本翻譯。
2022年8月12日 微軟在.NET 博客上發布了[2]?用于 .NET 的 SynapseML,建立在其去年 11 月首次亮相的大規模機器學習開源項目SynapseML 的基礎上。作為新 SynapseML v0.10 版本的一部分,微軟宣布了一組新的 .NET API,用于大規模可擴展的機器學習。博客文章中說:“這允許我們通過 .NET for Apache Spark 語言綁定來創作、訓練和使用來自 C#、F# 或 .NET 系列中的其他語言的任何 SynapseML 模型。”
SynapseML 在 Apache Spark 上運行并且需要安裝 Java,因為 Spark 使用 JVM 來運行 Scala。但是,它具有針對 Python 或 R 等其他語言的綁定。當前的 0.10.0 版本添加了針對 .NET 語言的綁定。該工具可以幫助開發人員在各種 Microsoft 領域構建可擴展的智能系統,包括:
深度學習
模型可解釋性
計算機視覺
強化學習和個性化
異常檢測
搜索和檢索
形式和人臉識別
語音處理
梯度提升
文本分析
微服務編排
翻譯
微軟去年首次開源這個項目時是這么說的 ”統一的 API 標準化了當今的許多工具、框架和算法,簡化了分布式 ML 體驗, 這使開發人員能夠為需要多個框架的用例快速構建不同的 ML 框架,例如 Web 監督學習、搜索引擎創建等。它還可以在單節點、多節點上訓練和評估模型,以及可彈性調整大小的計算機集群,因此開發人員可以在不浪費資源的情況下擴展他們的工作。”。這段話對于熟悉微軟的另一個捐獻給CNCF的 開源項目[3]Dapr 的同學來說是不是很熟悉?
SynapseML for .NET包含在一組 SynapseML NuGet 包中。這些包尚未發布到主要的 NuGet 源,必須手動添加它們的源。安裝后,即可從 .NET 應用程序調用 SynapseML API。
以下代碼片段說明了如何從 C# 應用程序調用 SynapseML API。
// Create LightGBMClassifier
var lightGBMClassifier = new LightGBMClassifier()
???? .SetFeaturesCol("features")
???? .SetRawPredictionCol("rawPrediction")
???? .SetObjective("binary")
???? .SetNumLeaves(30)
???? .SetNumIterations(200)
???? .SetLabelCol("label")
???? .SetLeafPredictionCol("leafPrediction")
???? .SetFeaturesShapCol("featuresShap");
// Fit the model
var lightGBMClassificationModel = lightGBMClassifier.Fit(trainDf);
// Apply transformation and displayresults
lightGBMClassificationModel.Transform(testDf).Show(50);
SynapseML 允許開發人員調用其管道中的其他服務。該庫支持 Microsoft 自己的[4]認知服務,這是一組由 Microsoft 訓練的模型提供支持的通用 AI 服務。此外,當前版本的 SynapseML 允許開發人員在其解決方案中利用預訓練的[5]OpenAI模型,例如用于自然語言理解和生成的[6]GPT-3以及用于代碼生成的 Codex。目前使用 OpenAI 模型需要訪問 Azure OpenAI 服務。
最后,當前版本增加了對[7]MLflow的支持,這是一個管理 ML 生命周期的平臺。開發人員可以使用它來加載和保存模型,并在模型執行期間記錄消息。
現在.NET 機器學習社區加入了一新的成員SynapseML:
[8]ML.NET 是一個 .NET 庫,用于使用 .NET 語言運行單機工作負載:
[9]TensorFlow.NET :TensorFlow 綁定
[10]Keras.NET
[11]TorchSharp:PyTorch 綁定
[12]ONNX RT:ONNX 模型支持
[13]Apache Spark for .NET:為 Apache Spark 分布式計算框架提供 .NET 支持
[14]Microsoft Cognitive Toolkit (CNTK)是? Microsoft ML 庫。它還有一個.NET API ,他已經停止開發。
[15]Accord.NET是一個面向視覺和音頻處理的 .NET 機器學習庫,已經停止開發。
在 .NET 社區中,開發人員對所有這些庫如何相互比較或它們是否相互替換存在混淆。SynapseML 項目成員在[16]Reddit上積極回答這些問題。
SynapseML 構建在Apache Spark for .NET項目之上,該項目為 Apache Spark 分布式計算框架提供 .NET 支持。Apache Spark 是用 Scala(JVM 上的一種語言)編寫的,但具有 Python、R、.NET 和其他語言的語言綁定。此版本為 SynapseML 庫中的所有模型和學習器添加了完整的 .NET 語言支持,因此您可以在 .NET 中創作分布式機器學習管道,以便在 Apache Spark 集群上執行。
相關鏈接:
[1]微軟深度學習庫 SynapseML:可直接在系統中嵌入 45 種不同機器學習服務、支持 100 多種語言文本翻譯:?https://mp.weixin.qq.com/s/UBoF3wYsf5fqBsbRpHk4pg
[2]用于 .NET 的 SynapseML:?https://devblogs.microsoft.com/dotnet/announcing-synapseml-for-dotnet/
[3]Dapr:?http://dapr.io/
[4]認知服務 :?https://azure.microsoft.com/zh-cn/services/cognitive-services/
[5]OpenAI:?https://openai.com/api/
[6]GPT-3:?https://en.wikipedia.org/wiki/GPT-3
[7]MLflow:?https://mlflow.org/
[8]ML.NET :https://dotnet.microsoft.com/zh-cn/apps/machinelearning-ai/ml-dotnet
[9]TensorFlow.NET:https://github.com/SciSharp/TensorFlow.NET
[10]Keras.NET:?https://github.com/SciSharp/Keras.NET
[11]TorchSharp:?https://github.com/dotnet/TorchSharp
[12]ONNX RT:https://github.com/microsoft/onnxruntime
[13]Apache Spark for .NET:https://dotnet.microsoft.com/en-us/apps/data/spark
[14]Microsoft Cognitive Toolkit (CNTK):https://docs.microsoft.com/en-us/cognitive-toolkit/using-cntk-with-csharp
[15]Accord.NET:?http://accord-framework.net/
[16]Reddit:?https://www.reddit.com/r/dotnet/comments/wk7zkq/microsoft_announces_new_scalable_machine_learning/