Introduction to NVIDIA NIM™ Microservices ![image](https://hackmd.io/_uploads/SJ6c2Jf9Je.png) 歡迎來到 NVIDIA Deep Learning Institute,本課程將探討 NVIDIA Nim 推論微服務。課程內容具啟發性,藉由瞭解 Nim 各項功能,學員將能掌握人工智慧轉型應用之關鍵技術。課程流程首先介紹現代 AI 之基本概念,接著說明 Nim 的定義與其解決 AI 推論挑戰之方式,並隨後說明 Nim 使用者操作流程。本課程另包含實作實驗室,利用 Nim 微服務建立以檢索增強生成(RAG)為基礎之 AI 聊天機器人;實驗室結束後,提供後續進階資料以凸顯 Nim 之應用優勢。 生成式 AI 為各行各業帶來顛覆性變革,愈來愈多機構正尋求推出新型應用程式,以提升經營效率、生產力及創造經濟效益。這類新應用不同於傳統應用,其不受限於明確的程式設計指令,而是依賴一個或多個 AI 模型處理各種問題,能執行自然語言處理、影像辨識及自主決策等較為複雜、開放式任務。當這些應用程式進入生產環境時,機構必須考慮安全性、延遲與效率、彈性,以及如何管理基礎建設、成本與規模。 ![image](https://hackmd.io/_uploads/HJWrMeG5yg.png) NVIDIA Nim 提供易於擴展生成式 AI 模型部署所需之關鍵功能,本文將說明使 Nim 成為整合生成式 AI 至應用程式中最快、最便捷方式之主要概念。首先,以簡要介紹 AI 模型為起點,以瞭解採用 AI 所面臨之挑戰,並建立 Nim 應用之背景。每個 Nim 推論微服務核心皆搭載經大量資料訓練之強大模型。模型訓練屬於機器學習概念,指利用統計演算法從資料中學習,並藉以推廣至未知資料,藉此在無明確指令下完成任務。現代 AI 採用模仿人腦結構之人工神經網路,該網路由神經元與層組成。進行機器學習時需考量歷史資料或先驗知識、定義運算之演算法,以及進行運算所需之硬體與軟體。訓練資料通常以輸入與輸出配對呈現,模型則可視為將輸入資料轉換為期望輸出之運算集合。在訓練過程中,輸入資料不斷進入演算法,並將計算結果與正確輸出比較,初期誤差較大,但隨著參數調整而漸漸降低,此即為模型與資料之擬合過程。經過無數次迭代後,誤差最小化,函數得以學習。此種以資料訓練通用函數近似器,進而形成能近似各種自然或人為流程(包含推理過程)的演算法,已成為軟體開發的新途徑。只要有足夠之訓練資料,機器學習便可應用於幾乎所有領域。本課程將以語言模型為例,輔以實作實驗室說明。 ![image](https://hackmd.io/_uploads/B1Mvfxzqyl.png) 雖然目前針對模型能否執行多任務仍有研究進行,但普遍認為單一模型在一任務上表現最佳。隨著神經網路規模日益擴大,可訓練處理更複雜任務之模型,而大型語言模型已證明其在理解人類語言方面具備高度能力。基本概念在於,較大型模型能捕捉更精細之資料模式與關係,故有「深度學習」之稱。模型大小通常以參數數量衡量,參數數量受神經元數量與層數影響;此外,參數之精度(例如浮點數 .32、浮點數 .16 或整數 8)也影響所需記憶體與運算資源。直觀而言,較大模型產生輸出所需時間較長,因此在特定硬體(如 GPU)上設計能同時處理多筆資料之演算法,對於提升產出量(Throughput)與降低延遲均有幫助。產出量指模型在特定時間內可產生之輸出數量,而延遲則為生成單筆輸出所需之時間。生產環境中,除了準確性之外,模型亦須追求高產出量與低延遲,然而往往難以兼得。舉例而言,為提升產出量並降低延遲,可使用較小模型以犧牲部分準確性,但可能無法達到精確需求。一般建議於特定應用延遲預算下最大化產出量。較大模型對資料需求亦較高,否則可能出現欠擬合現象;大量資料亦意味著更高之運算需求。資料量與所使用之神經網路架構,均將影響模型能否在合理時間內訓練完成,這對於創新與研究至關重要。由零開始訓練強大 AI 模型過程複雜,需龐大資料量、高效運算資源與深厚資料科學專業知識。具備相應資源之機構可利用廣泛資料集訓練大型基礎模型,進而打造突破性之前沿模型,推動現代 AI 能力上限。 ![image](https://hackmd.io/_uploads/SyOdGlfc1l.png) 雖然訓練大型模型所需資源眾多,然仍有多種方式可利用 AI,而無需從零開始訓練模型。模型由兩部分組成:模型網路架構之描述與一組數字(係數、模型權重或參數),意即模型可儲存後再現。依模型大小不同,儲存模型之檔案可能非常龐大;例如,對於一具有 700 億參數之大型語言模型(採半精度或浮點數 .16),其檔案可能高達 130 GB。模型製作者可將模型開放原始碼並透過線上目錄提供,通常依據執行之任務、所屬組織、模型架構或表現進行搜尋。事實上,大部分開發者在建立 AI 應用時均採用開放原始碼模型。開發者應詳閱模型卡說明,瞭解模型使用方式、訓練資料、輸入與預期輸出,再將模型應用於自身資料集評估其表現(包括準確性、延遲與產出量),或根據需要進行客製化或微調。透過微調,可針對特定資料集進行增量訓練;轉移學習則透過重用並調整預訓練模型以應對新但相關任務,可縮短開發時間並在資料需求較少情形下提升表現。此外,參數高效微調技術著重於只調整預訓練模型部分參數,藉此大幅降低運算成本與資源需求。 ![image](https://hackmd.io/_uploads/B1eszgf9yl.png) ![image](https://hackmd.io/_uploads/H1N3Ggz5kx.png) ![image](https://hackmd.io/_uploads/rJxJQgfq1x.png) ![image](https://hackmd.io/_uploads/ryAkQxzcyx.png) ![image](https://hackmd.io/_uploads/rkB-QefqJg.png) ![image](https://hackmd.io/_uploads/SkZM7gf91e.png) ![image](https://hackmd.io/_uploads/Skl77eGq1l.png) ![image](https://hackmd.io/_uploads/rklE7gf5yg.png) ![image](https://hackmd.io/_uploads/H1frXeMqkx.png) ![image](https://hackmd.io/_uploads/HyQLXeG5Jg.png) 以 Low Rank Adaptation(Lora)為例,此技術僅需以少量資料訓練少數參數,已證明有助於使基礎模型更快速適應新任務。大型語言模型經由全球資料庫預訓練,使其能理解人類語言與推理,但某些應用場合需針對特定任務進行客製化,如程式碼生成機器人與客服機器人、法律助理與醫療助理等,Lora 技術正因其僅需少量任務專用資料、保有基礎模型之通用語言知識及較低運算需求而被廣泛採用。藉由訓練多組 Lora 適配器,可使單一基礎模型應對多種任務,對於運算密集型之大型語言模型而言,使用 Lora 適配器可最大化 AI 基礎設施之效益。另一種使模型執行特定任務之方式為提示工程,藉由程式化操控模型輸入(例如加入更多上下文以提供指令)來達到目的。 ![image](https://hackmd.io/_uploads/SJzP7gG5Je.png) ![image](https://hackmd.io/_uploads/Bk7_7gfcke.png) ![image](https://hackmd.io/_uploads/H1oFQlGqkl.png) 提示工程在生成式 AI 應用中相當普遍,近年更有不少突破性應用僅透過提示工程實現。訓練完成之模型即可部署進行推論,即將輸入資料傳入模型以產生輸出。當前許多應用開發者並不涉及模型訓練,批次推論技術可將多筆推論請求合併處理,以最大化產出量與最小化整體延遲。相較於即時推論(針對每個請求即時處理),批次推論等待多筆請求一併運算,其優點包括透過更有效記憶體打包請求提升產出量、縮短處理多筆查詢所需之運算週期以及藉由並行處理多筆請求提高資源利用率。 利用 NVIDIA GPU 與 Tensor RT,可加速神經網路模型推論。Tensor RT 工具將神經網路模型轉換為具前沿最佳化之 Tensor RT 引擎,以高效進行推論。其最佳化方式包含層融合(將多層合併為單一運算以降低運算負擔)與精度校正(支援如 N8 或浮點數 .16 之低精度格式,在維持可接受準確度下提升推論速度)。針對大型語言模型推論,需考量其數十億參數所需之記憶體與運算資源,且自迴歸特性使得模型依序產生單一令牌,隨著輸入序列增加,處理時間亦逐漸延長,故 Tensor RT 提供之最佳化對使用者體驗至關重要。完整推論流程包括前處理與後處理,以確保輸出結果具備實用性;由於各模型間前後處理細節可能不同,轉換模型時可能需額外程式設計。主流開發者通常使用封裝常用程序之程式庫,藉以簡化整合過程。 ![image](https://hackmd.io/_uploads/S1a9XgzqJe.png) ![image](https://hackmd.io/_uploads/SJM3Xxzqyx.png) ![image](https://hackmd.io/_uploads/SJq07efc1l.png) ![image](https://hackmd.io/_uploads/SJD6QgM5ye.png) ![image](https://hackmd.io/_uploads/S1Jl4eMqke.png) ![image](https://hackmd.io/_uploads/Hy1bNlfcyl.png) 接下來,說明典型之 AI 整合架構。一般應用架構包含使用者介面、端端處理、伺服器端處理與資料庫管理。使用者端主要負責呈現層,業務或應用層則接收使用者請求、處理並決定如何存取資料;持久層則由資料庫伺服器負責儲存應用程式所需資料,與業務層緊密相連以提供相應邏輯。跨域程式碼則處理安全、通訊及作業管理等應用關注事項,並影響系統各部分。透過第三方服務之 API(應用程式介面),開發者可無需自建所有程式碼,即可擴充應用功能。API 定義軟體間之溝通規則與資料格式,使應用程式能夠請求與交換資訊。舉例而言,第三方服務所設計之 API 可供應用程式透過網路協定(例如 HTTP 或 GRPC)進行溝通,並藉由 API 將 AI 推論整合至業務邏輯中,但此方式存在需撰寫大量自訂程式碼以優化資料處理之挑戰,且元件間耦合緊密使得系統更新或錯誤復原較為困難;此外,若僅某部分需擴展資源,整個系統仍須整體調整。相對之下,採用基於微服務之 AI 推論架構,每個微服務皆為小型、獨立可部署之服務,各自執行特定功能(如僅負責輸入處理與產生輸出),並包含管理推論請求之排程機制與批次推論功能;同時,透過監控工具提供效能指標與系統狀態,以利管理與最佳化。應用程式透過 API 與微服務溝通,雖因服務間通訊增加延遲,但該方式可使各團隊專注於各自領域,且若單一推論微服務發生異常,不會影響整體系統運作。事實上,多數使用尖端模型之開發者目前皆透過雲端部署 API 存取模型,此舉主要因模型對硬體需求高,需專用之硬體以達到最佳推論效能;然而,雲端模型亦可能因請求中含有使用者資料、敏感資訊或智慧財產而面臨安全風險。Nim 推論微服務可部署於雲端資料中心或本機工作站,若部署於自有基礎建設中,可完全掌控系統,對於開發與生產環境皆具吸引力。多個應用程式可共用同一推論微服務,且該微服務可獨立於其他服務擴展;當推論需求增加時,可僅擴展該服務而不影響整體應用,並可透過快速部署新實例來分散負載。![image](https://hackmd.io/_uploads/SkwfNxGcyg.png) ![image](https://hackmd.io/_uploads/SJc7Eez5yx.png) ![image](https://hackmd.io/_uploads/ryK4Nezcye.png) ![image](https://hackmd.io/_uploads/Sy9SNgGc1g.png) ![image](https://hackmd.io/_uploads/B1hwNlf5kx.png) ![image](https://hackmd.io/_uploads/ryJYExf51l.png) ![image](https://hackmd.io/_uploads/ryaFVxG9yl.png) ![image](https://hackmd.io/_uploads/B1zsEgzqyx.png) ![image](https://hackmd.io/_uploads/H1fpEeMqke.png) ![image](https://hackmd.io/_uploads/ry-A4eMqyx.png) Nim 推論微服務部署流程相對簡易。首先需決定推論微服務部署策略與位置,接著執行簡單之 Docker 指令,並指定來自 NVIDIA 容器目錄之模型名稱。每個 Nim 推論微服務均為針對特定模型所設容器,Docker 指令會下載容器映像檔、建置並執行該容器。容器映像檔即為微服務之建置配方,當容器啟動後,系統會偵測運行之硬體環境、載入客製化所需之 Lora 適配器、載入最佳化推論引擎並開始提供服務。Nim 亦重視客製化需求,提供支援針對特定應用開發之自訂模型,確保開發者能依照自身獨特需求採用相關技術。Nim 推論微服務應用範疇廣泛,包括語言、視覺與語音等領域,藉由這些 AI 模型可從資料中發掘價值,促進創新、提升生產力並創造新機會。與模型製作者密切合作,使得 Nim 能持續掌握最新創新技術及應用模式。利用 Nim 推論微服務,使用者可輕易建立並部署包括數位人客戶服務、聊天機器人、資料檢索、增強生成以及藥物發現等強大應用。 綜觀 AI 推論之關鍵概念後,再回顧 Nim 所提供之全部功能:Nim 推論微服務將模型及運行所需軟體元件整合於容器中,提供卓越之效能與易用性,簡化生成式 AI 模型於生產環境中之開發與部署。面對企業級 AI 應用之多項挑戰(如資料隱私與安全、模型回應延遲、準確度、API 成本及擴展性問題),透過避免雲端 API 相關限制與模型部署複雜性,開發者可專注於應用程式開發,加速生成式 AI 應用之生產就緒化,進而實現資料中心與雲端自動化效能及最佳化擴展,邁向企業級應用之建置。 Nim 推論微服務之第一步,始於瀏覽可用之 AI 模型目錄。搜尋特定模型時,可依產業、領域、使用案例或發佈者篩選;雖然數個模型可能執行相同或類似任務,但其產出結果可能有所差異。與模型製作者密切合作,確保模型於上架時即以 Nim 推論微服務形式提供,每個模型皆附有模型卡說明,包括背景、預定用途、訓練資料及高階效能指標;此外,還有包裝於模型周圍之範例應用程式與相關原始程式碼,這些應用程式會向安全部署於 NVIDIA 基礎設施之 Nim 推論微服務發送推論請求,使用者可於瀏覽器中試用。部分複雜範例應用程式則可整合多個 Nim 推論微服務。接著,使用者便可根據自身資料建立應用程式,提供原始程式碼範例以協助快速原型製作,藉由先行指向 NVIDIA 基礎設施之推論服務或部署自有 Nim 推論微服務,驗證模型在成本、延遲或準確度等方面之可行性;若有自訂權重(如低適配器),則需部署 Nim 推論微服務以載入相關模型運算元件。隨著應用程式進入成熟階段,部署 Nim 推論微服務有助於強化生產環境之安全性與控管,當使用者數量增加時,確保系統能有效擴展變得更為重要,避免因使用者同時存取導致伺服器過載、回應時間延長、準確度下降或系統崩溃;可透過 Kubernetes 等編排工具管理運行實例以應對高負載。 ![image](https://hackmd.io/_uploads/HJRA4xf5yg.png) https://developer.nvidia.com/blog/spotlight-xpander-ai-equips-nvidia-nim-applications-with-agentic-tools/ ![image](https://hackmd.io/_uploads/BJCgBgGcJl.png) ![image](https://hackmd.io/_uploads/ByJzBlfqJe.png) ![image](https://hackmd.io/_uploads/SkiGrgG91e.png) ![image](https://hackmd.io/_uploads/SJDXBlz5yl.png) ![image](https://hackmd.io/_uploads/rkXVBgG5Jl.png) 以下為實作實驗室簡介:本專案以 Nim 推論微服務構建一個具備網頁資料存取功能之 RAG 聊天機器人。建議使用者點選下方「開始」按鈕,系統將指派雲端運算實例,約 10 分鐘後完成系統安裝與設定,屆時即可啟動實作實驗室。使用者可先造訪 buildnvidia.com 試用各式 AI 模型,並取得 API 金鑰,此金鑰於實作實驗室中為必須之憑證。舉例而言,簡易之聊天介面利用大型語言模型運作,但目錄中尚有其他創新 AI 模型可供選用。使用者互動流程為:提供查詢輸入,該輸入加入提示模板後一併傳送至大型語言模型,模型逐筆獨立處理輸入,若要建立對話連續性,可將對話歷史加入輸入,此即為針對聊天應用之提示工程。雖然大型語言模型具備強大知識庫,但仍存在兩大缺點:一方面,模型可能缺乏企業專屬知識,無法存取或產生企業特定資料;另一方面,訓練資料並非即時更新,可能導致模型產生部分正確或完全虛構之資訊(所謂 AI 幻覺現象),因此若輸入中加入包含正確答案之資訊(即提供額外上下文),模型便能提供正確回應。為提升生成式 AI 模型之準確性與可靠性,實作中採用檢索增強生成(RAG)技術,藉由連接大型語言模型與企業私有資料,於不進行額外訓練情況下產生即時、領域專屬之答案,同時藉由限制知識庫存取維護資料隱私。RAG 技術關鍵在於根據使用者查詢,自資料庫中檢索正確資訊,而非僅以簡單字詞或句子比對,這裡採用嵌入向量技術,即將文字轉換為一組浮點數數值,代表詞彙間之語意關係。舉例而言,若使用大小為 8 之嵌入向量,每個詞皆對應一組 8 維浮點數,其間數值可反映出如「男性」與「女性」、「國王」與「王后」間之語意相似性。透過向量空間之運算,可計算詞彙間相似度與關係,並應用於 RAG 工作流程中。該流程包括兩步驟:首先,將來自網頁 HTML 之可靠資訊經由嵌入模型轉換為向量並儲存於資料庫;其次,利用相同嵌入模型處理使用者查詢,藉以檢索相關文件,檢索結果連同查詢與提示共同作為大型語言模型之輸入產生回應。使用者點選「啟動」後,系統將另開瀏覽器分頁,進入程式編輯環境,使用者可於雲端運算實例中撰寫程式碼建立 RAG 聊天機器人,所有運算均在遠端實例執行。