.NET 9 的新亮點:AI就緒 ,擁抱她

张善友發表於2024-09-09

.NET 9 即將釋出 RC1, 今年初.NET 團隊在釋出.NET 9 Preview 1版本時寫了一篇文章《我們對 .NET 9 的願景》,其中特別提到了對AI的展望 .NET 9,我們致力於讓 .NET 開發人員更輕鬆地將人工智慧整合到他們現有的和新的應用程式中。 開發人員將找到用於使用 OpenAI 和 OSS 模型(託管和本地)的優秀庫和文件,我們將繼續在Semantic Kernel,、OpenAI 和 Azure SDK 方面進行合作,以確保 .NET 開發人員擁有構建智慧應用程式的一流體驗 。

在 .NET 9 中,.NET 社群正在大力推動 AI -- 這非常令人震驚......就像 AI 現在很重要。 在過去大資料、移動網際網路時代。由於微軟的封閉和不夠開放,錯過了兩個時代,不過在雲原生和人工智慧時代,.NET已經完成脫胎換骨,變得開放又強大,特別是即將到來的.NET 9,幫助開發人員構建更智慧的應用程式方面有非常大的改進。下面是我彙總的.NET 社群裡這一年在AI 方面的新進展。

1、TensorFlow.NET升級

TensorFlow.NET 正在透過高效能 C# 繫結和自動微分支援進行升級。完整的 Keras API 現在也採用 C# 語言:

  • 使用 cppSharp 生成的新的高效能 C# 繫結
  • 自定義 C# 運算的自動微分支援
  • Keras API 完全用 C# 實現,允許無縫的模型定義和訓練

2、OpenAI SDK 整合

OpenAI SDK 使開發人員能夠直接訪問 OpenAI 最新的公共 AI 模型,包括 GPT-4 及其結構化輸出功能。這意味著您將擁有完整的 API 支援,包括同步和非同步 API 以滿足您的需求 - 甚至是用於實時處理的流式完成。SDK 是可擴充套件的,因此您可以進一步自定義它。此外,它還與 Azure OpenAI 進行了整合,用於企業級部署,也方便對接各種相容OpenAI API的各大模型。這為使用對話式 AI、動態內容生成和 AI 驅動功能(如音訊轉錄和文字轉語音生成)構建更智慧的 .NET 應用程式提供了大量可能性。

3、ONNX 執行時原生支援

無需再費力地進行單獨的軟體包安裝。 我們獲得了一個專用名稱空間 (Microsoft.ML.OnnxRuntime),其中包含一個 API 來直接載入和執行 ONNX 模型:

  • 直接模型載入: var session = new InferenceSession(“model.onnx”);
  • 使用 Span<T> 和 Memory<T> 對輸入/輸出張量進行高效的記憶體管理
  • 透過統一 API 支援硬體加速(CPU、GPU、DirectML)

4、開發人員友好的ML.NET 4.0

AutoML 透過多指標最佳化和時間序列預測支援變得更加智慧:

  • AutoML 增強功能:
    • 用於平衡模型選擇的多指標最佳化
    • 支援 AutoML 中的時間序列預測
  • 用於簡化模型部署的新 Infer<T> API
  • 將 TensorFlow 和 ONNX 模型轉換為 ML.NET 格式以提高效能
  • 新的Microsoft.ML.GenAI :GenAI包提供一系列流行GenAI模型的torchsharp實現,目標是從相應的Python常規模型載入相同的權重。首先將新增的模型包括Microsoft.ML.GenAI.CoreMicrosoft.ML.GenAI.PhiMicrosoft.ML.GenAI.LLaMAMicrosoft.ML.GenAI.Mistral以及Microsoft.ML.GenAI.StableDiffusion。

5、.NET 9 中的 AI 輔助程式碼生成

AI 輔助程式碼生成(程式碼片段、重構、單元測試)透過 dotnet ai 命令整合到 .NET 9 SDK 中,非常棒:

  • 生成程式碼片段: dotnet ai snippet “mplement a binary search algorithm”
  • 重構現有程式碼: dotnet ai refactor --file Program.cs --description “Convert to LINQ query”
  • 生成單元測試:dotnet ai test --file MyClass.cs

6、NLP 工具

.NET 9 提供了一組豐富的 NLP 工具,用於標記化、NER*、情感分析和文字分類:

  • 分詞和句子分句:

var tokenizer = new Tokenizer(); var tokens = tokenizer.Tokenize("Hello, world!");

  • 命名實體識別 (NER):

var ner = new NamedEntityRecognizer(); var entities = ner.RecognizeEntities("Microsoft was founded by Bill Gates.");

  • 使用預訓練模型進行感知分析和文字分類

7、.NET 9 中的 GPU 加速

.NET 9 中的 GPU 加速比以往任何時候都更容易獲得:

  • 用於高效多維陣列運算的新 Tensor<T> 型別 :張量是許多數學模型的基本組成部分,包括深度學習演算法。它們是用於儲存神經網路中的權重、偏差和中間計算的多維陣列。這樣可以有效的處理資料和資訊流,以用於學習和預測目的。 無論是影像識別、語言理解還是趨勢預測,張量在AI的各個方面都發揮著至關重要的作用。 此外,它們還可以更輕鬆地在 ONNX Runtime、TorchSharp 或 ML.NET 等庫之間共享資料、建立自己的數學庫或使用 AI 模型開發應用程式。
  • CUDA 互操作改進:
  • 與 Nvidia 的 cuDNN 庫整合,用於深度學習基元

8、簡化的 AI 模型部署

.NET 9 透過新的 ASP.NET Core 整合簡化了 AI 模型部署:

  • 新專案模板:dotnet new webapi --ai -model
  • 模型終端節點的自動 OpenAPI/Swagger 文件
  • 內建模型版本控制和 A/B 測試支援
  • 使用 gRPC 整合提供可擴充套件的模型服務

9、新的數值 API

.NET 9 引入了新的數值 API,以實現高效的張量和矩陣運算:

  • System.Numerics.Tensor<T> 用於高效的張量運算
  • System.Numerics.Matrix<T> 用於矩陣代數
  • SIMD 加速線性代數例程

10、監控和觀察您的 LLM 應用程式

大型語言模型 (LLM) 應用程式需要可靠、高效能和高質量的結果。 開發人員需要在開發和生產環境中測量和跟蹤LLM 應用程式的結果和行為,並識別和解決任何問題。

  • 效能監控:我們想知道我們的模型執行速度有多快,它們使用了多少記憶體,以及它們處理負載的情況。這有助於我們發現瓶頸並最佳化事情。
  • 模型偏差檢測:隨著世界的變化,模型會隨著時間的推移而過時。我們需要工具來捕捉模型的效能何時開始下滑,這樣我們就知道是時候進行重新訓練了。
  • 可解釋性和透明度:AI 不應該是一個黑匣子。我們必須有辦法窺探內部並瞭解模型如何做出決策。這建立了信任並幫助我們捕捉任何無意的偏見。
  • 道德和偏見監控:AI應該是公平和公正的。我們需要工具來積極檢查和解決模型中的任何潛在偏差。

11、.NET 的Semantic kernel

Semantic kernel是一種開源 SDK,可在 .NET 應用中啟用 AI 整合和業務流程功能。 對於將一個或多個 AI 服務與其他 API 或 Web 服務、資料儲存和自定義程式碼結合使用的 .NET 應用程式,此 SDK 通常是推薦的 AI 編排工具。 語義核心以以下方式使企業開發人員受益:

  • 簡化將 AI 功能整合到現有應用程式中的過程,從而為企業產品提供統一的解決方案。
  • 透過可降低複雜性的抽象,最大限度地縮短使用不同 AI 模型或服務的學習曲線。
  • 透過減少 AI 模型提示和響應的不可預測行為來提高可靠性。 可以微調提示並計劃任務,以建立可控且可預測的使用者體驗。

12、比以往任何時候都更強大.NET 社群

.NET 是開源的,包括 GitHub 上提供的所有庫、工具和框架,因此一直在進行大量協作。C# 已經在人工智慧領域發展並站穩腳跟,.NET社群也在努力建設中。下面我們列出社群中一些資源供大家參考:

  • Semantic kernel :https://github.com/geffzhang/awesome-semantickernel/
  • Autogen:https://github.com/microsoft/autogen/tree/main/dotnet
  • Botsharp:https://botsharp.readthedocs.io/en/latest/
  • AIDotNet:https://github.com/AIDotNet

  • Senaprc.AI: https://github.com/Senparc/Senparc.AI

13、.NET 9 + 人工智慧

Microsoft 正在 AI 方面進行重大投資,並且他們正在推動 .NET 和開發社群的發展。.NET 生態系統提供了許多強大的工具、庫和服務來開發 AI 應用程式。 .NET 支援雲和本地 AI 模型連線、適用於各種 AI 和向量資料庫服務的許多不同的 SDK 以及其他工具,有助於構建範圍和複雜性不同的智慧應用。

相關文章