• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 數據科學

    使用 NVIDIA NIM 和 Outerbounds 構建 LLM 驅動的生產系統

    在過去 18 個月中,隨著語言模型的快速擴展,如今有數百種變體可供選擇。這些變體包括 大語言模型(LLMs)、小語言模型(SLMs)和特定領域的模型,其中許多模型可以免費用于商業用途。特別是對于 LLMs,使用自定義數據集進行微調的過程也變得越來越經濟實惠和簡單。

    隨著 AI 模型的成本降低且更易于訪問,越來越多的現實世界流程和產品成為潛在應用。考慮任何涉及非結構化數據的流程,包括支持工單、醫療記錄、事故報告、劇本等。

    所涉及的數據通常很敏感,而結果對業務至關重要。雖然 LLMs 讓黑客快速演示變得輕而易舉,但為開發和部署 LLM 驅動的應用建立適當的流程和基礎設施并非易事。所有常見的企業問題仍然適用,包括如何:

    1. 安全可靠地訪問數據、部署和操作系統。
    2. 在整個組織內建立快速、高效的開發流程。
    3. 隨著該領域快速發展,衡量和促進持續改進。

    在企業環境中部署大型語言模型(LLMs)需要一種安全且結構良好的 機器學習(ML) 基礎架構、開發和部署方法。

    本文介紹了 NVIDIA NIM 微服務和 Outerbounds 平臺如何共同高效、安全地管理大型語言模型和圍繞它們構建的系統。特別是,我們專注于將大型語言模型集成到企業環境中,同時遵循既定的持續集成和持續部署 (CI/CD) 最佳實踐。

    NVIDIA NIM 為自行托管的 GPU 加速微服務提供容器,用于在云、數據中心和工作站上部署預訓練和定制的 AI 模型。Outerbounds 是 Netflix 開發的領先 MLOps 和 AI 平臺,由熱門開源框架 Metaflow 提供支持。

    使用 NVIDIA NIM 構建大型語言模型驅動的企業應用

    無需向第三方服務發送數據,即可輕松緩解大量安全和數據治理問題。這是 NVIDIA NIM 的關鍵價值主張。NVIDIA NIM 是一種微服務,可提供大量由社區創建的預包裝和優化的 LLM,可部署在公司的私有環境中。

    自 NIM 首次發布以來,Outerbounds 一直在幫助公司開發基于 LLM 的企業應用和 公開示例 NIM 現已集成到 Outerbounds 平臺中 ,使開發人員能夠 跨云和本地資源 安全部署。在此過程中,Outerbounds 開始識別新興模式和最佳實踐,尤其是圍繞基礎設施設置和開發工作流程的模式和最佳實踐。

    大語言模型運算(LLMOps)的概念已經被提出,以涵蓋這些實踐。但是,不要被名稱所誤導。LLMOps 集中在管理大語言模型依賴項和操作的挑戰上,而 MLOps 則覆蓋了更廣泛的任務,包括跨不同領域和應用程序監督機器學習模型的各種任務。

    討論的許多主題都是借鑒軟件工程的既定最佳實踐。事實上, 使用與任何穩健軟件相同的原則開發大型語言模型驅動的系統 是有好處的,同時特別注意大型語言模型的隨機性和自然語言提示所帶來的額外挑戰,以及它們的獨特計算需求。

    以下各節重點介紹了任何嚴肅認真的系統都需要解決的三個主要方面的學習:

    • 生產開發實踐
    • 協作和持續改進
    • 穩健的生產部署

    這三個領域是使用 NVIDIA NIM 構建由 LLM 驅動的企業應用的關鍵組成部分。生產開發實踐利用 NIM 的微服務在私有環境中安全地試驗、微調和測試 LLM。協作和持續改進可確保團隊能夠高效地迭代模型、監控性能并適應變化。借助 NIM 的生產部署,企業可以安全地擴展由 LLM 驅動的應用,無論是在云端還是本地,從而確保這些系統從開發階段轉向實際使用時的穩定性和性能。

    此討論側重于文檔理解等批量用例,但所討論的許多元素也適用于實時用例。

    第 1 階段:開發由 LLM 支持的系統?

    構建由大型語言模型(LLM)提供支持的系統的第一階段側重于建立高效的開發環境,以實現快速迭代和實驗。NVIDIA NIM 微服務通過提供可部署在安全、私有環境中的優化 LLM 發揮著關鍵作用。這一階段涉及微調模型、構建工作流以及使用真實數據進行測試,同時確保數據控制并最大限度地提高 LLM 性能。我們的目標是建立堅實的開發流程,支持隔離環境和無縫 LLM 集成。

    A diagram showing a development environment that includes workstations, local GPU resources, and a shared compute pool hosting NVIDIA NIM containers and additional GPU resources.
    圖 1. 使用 NVIDIA NIM 微服務的開發環境。

    Outerbounds 首先關注開發階段,發現以下要素有助于開發由 LLM 驅動的應用,尤其是在處理敏感數據時:

    • 在云環境中運行
    • 在隔離的開發環境中使用本地計算資源
    • 更大限度地提高 LLM 吞吐量以降低成本
    • 支持特定領域的評估
    • 通過微調自定義模型

    在云環境中運行

    Outerbounds 可幫助您在自己的云帳戶中部署圖 1 所示的開發環境,以便您可以根據現有的數據治理規則和邊界開發由 NIM 提供支持的 AI 應用。此外,您可以使用現有的計算資源托管模型,而無需為 LLM 推理 支付額外的利潤。

    具有本地計算資源的靈活隔離開發環

    圖 1 中的兩個示例提供了個人開發環境,您可以在此環境中自由運行,而不會產生干擾其他應用程序的風險。這有助于更大限度地提高開發速度。NIM 提供了 OpenAI 兼容的 API,可讓用戶使用現成的框架來達到私有端點,并為每個作業選擇合適的工具。除了在個人 Jupyter Notebook 中探索和開發之外,您還可以使用 開源 Metaflow 構建端到端工作流。Metaflow 是一個 Python 庫,用于開發、部署和運行各種數據密集型應用,尤其是涉及數據科學、機器學習和人工智能的應用。Outerbounds 通過 @nim 裝飾器擴展了 Metaflow,從而可以直接將 LLM NIM 微服務嵌入到更大的工作流中:

    MODEL = "meta/llama3-70b-instruct"
     
    PROMPT = "answer with one word HAPPY if the sentiment of the following sentence is positive, otherwise answer with one word SAD"
     
    @nim(models=[MODEL])
    class NIMExample(FlowSpec):
      ...
      @step
      def prompt(self):
        llm = current.nim.models[MODEL]
        prompt = {"role": "user", "content": f"{PROMPT}---{doc}"}
        chat_completion = llm(messages=[prompt], max_tokens=1)
        print('response', chat_completion['choices'][0]['message']['content'])

    作為開發者,您可以在工作站上本地執行類似的流,訪問測試數據并使用開發環境中可用的任何 NIM 微服務,快速迭代提示和模型。有關涉及 @nim 的端到端示例,請參閱 350M Tokens Don’t Lie 其隨附的源代碼

    更大限度地提高 LLM 吞吐量以降低成本

    與許多第三方 API 不同,您可以在自己的環境中調用 NIM 端點,而無需擔心速率限制。得益于諸如 動態批處理 等各種 NIM 優化,您可以通過并行化提示來提高總吞吐量。有關更多詳細信息,請參閱 使用 NVIDIA NIM 微服務大規模優化 LLM 的推理效率

    對于 350M Tokens Don’t Lie 示例,Outerbounds 使用 LLama 3 70B 模型在 NIM 容器中執行 5 個并發工作任務,在大約 9 小時內處理了 230 million 個輸入令牌(圖 2)。該模型在 4 個 NVIDIA H100 Tensor Core GPU 上運行。

    由于 NIM 微服務在環境中托管的 NVIDIA GPU 上運行和自動擴展,因此吞吐量越高,成本越低。

    Figure shows a timeline of multiple batches of five tasks prompting NIM microservices.
    圖 2. 在 Outerbounds 上運行的具有五個并發工作進程的 NIM 微服務

    支持特定領域的評估

    雖然衡量和基準測試原始性能可能很容易,但在評估 LLM 響應的質量時,很難作出具體規定。一般來說,您需要在數據和應用的背景下評估響應,而不是依賴現成的基準測試或數據集。

    Outerbounds 發現,構建特定于案例的評估集(有時由自定義 UI 支持)非常有用。這使您能夠快速評估結果并迭代提示。有關示例,請參閱 擴展 LLM 驅動的文檔理解

    通過微調支持模型自定義

    借助現已推出的功能強大的大型語言模型,您通常可以通過及時的工程設計獲得出色的結果。然而,如果有需要,能夠使用自定義數據集微調模型,將會非常有用。

    雖然可以通過繼續訓練 LLM 進行微調,但這需要大量的計算資源。作為對所有模型參數進行微調的替代方案,通常會利用 參數高效微調(Parameter-Efficient Fine Tuning,PEFT) 技術,該技術只會更改模型參數的子集。這可以用更少的計算資源完成。

    幸運的是, NIM 支持開箱即用的 PEFT 微調 ,因此您可以將 NIM 與自定義模型結合使用,而無需手動設置推理堆棧。

    如果您對技術細節感興趣,請查看 Outerbounds 提供的用于微調的新功能 ,包括 使用 Metaflow 和 Hugging Face 創建適配器并通過 NIM 提供服務 的端到端示例。該工作流和說明展示了如何借助幾個命令和幾百行 Python 代碼來完全控制自定義工作流,從而定制最強大的開源 LLM。

    例如,考慮圖 1 中描述的開發環境。為了支持快速迭代,工作站配備了中等規模的本地 GPU,從而實現快速代碼開發。對于更大規模的微調,開發者可以利用公司計算池中的更大 GPU 集群。在這兩種情況下,在部署到生產環境之前,可以在開發環境中快速評估微調模型。

    第 2 階段:持續改進 LLM 系統?

    由高性能 LLM 提供支持的可提高工作效率的開發環境可實現快速開發迭代。但是,速度并不是一切。Outerbounds 希望確保開發者可以在不破壞工作的情況下快速發展,并力求在長期內實現一致、持續的改進。GitOps 是一種使用 Git 維護版本控制和持續改進的框架,是確保實現這一點的好方法。

    在開發環境中引入適當的版本控制、跟蹤和監控有助于實現這一目標(圖 2)。

    A diagram showing a development environment that supports iterative development through versioning, tracking and monitoring, building on Figure 1.
    圖 3. 向開發環境中添加版本控制、跟蹤和監控。

    版本控制代碼、數據、模型和提示

    在使用 Git 或類似工具進行版本控制時,跟蹤提示、提示響應和所用模型的最佳方式是什么?

    這正是 Metaflow 內置構件 派上用場的地方。Metaflow 會自動保持整個工作流狀態,因此通過將提示和響應視為構件,所有內容都會在默認情況下進行版本控制, 并可輕松用于后期分析 。值得注意的是, 構件會自動按命名空間組織和命名 ,因此開發者團隊可以并發地合作。

    此外,您可以使用 Metaflow 標簽 來幫助協作,為特別成功的提示和運行添加注釋,以便其他人輕松重復使用。

    將 LLM 納入軟件供應鏈

    在由大型語言模型(LLM)提供支持的現代系統中,一個關鍵但常常被忽略的部分是,與任何其他軟件庫類似,LLM 需要被視為系統的核心依賴項。換言之,LLM(確切地說,LLM 的特定版本)成為軟件供應鏈的一部分。如需了解詳情,請參閱 具有安全軟件依賴項的安全機器學習

    想象一下,在開發期間運行良好并通過初始評估的系統可能會隨著 輔助 LLM 的失控變化 而突然中斷或緩慢腐蝕。當使用第三方 API 時,必須相信供應商不會更改模型。由于模型快速發展,這一點很困難。

    在您的環境中部署 NIM 微服務可讓您控制整個模型生命周期。特別是,您可以將模型視為系統的適當依賴項,將特定提示和評估與精確的模型版本相關聯,直至生成結果的容器鏡像的哈希值。

    監控 NIM 微服務

    除了跟蹤和存儲偽影和指標外,您還可以在整個流程中分析關鍵點,使所有內容都易于觀察。其中一種方法是使用 Metaflow 卡 ,該卡支持您將自定義的版本化可視化附加到工作流程中。

    在 Outerbounds 上運行時, @nim 自動收集有關 NIM 性能的指標,如圖 4 所示。

    A visualization showing NIM response successes and latencies.
    圖 4. 可視化 NIM 響應成功率和延遲的 Metaflow 卡。

    除低級指標外,您還可以 自定義 Metaflow 卡 ,以顯示與用例相關的指標。例如,監控數據漂移,并在響應準確性降低到特定閾值以下時發出警報。

    第 3 階段:CI/CD 和生產部署?

    在最后一個階段,重點轉向集成持續集成和持續交付實踐,以確保大型語言模型(LLM)驅動的系統順利、可靠地進行生產部署。通過實施自動化流程,組織可以在保持穩定性的同時不斷改進和更新其 LLM 模型。這一階段強調了逐步部署、監控和版本控制的重要性,以管理實時環境中 LLM 系統的復雜性。

    將 LLM 移動到生產環境中通常被視為一個二元里程碑,跨越這一點標志著項目的成功完成。然而,在按下部署按鈕之后,現代的業務關鍵型系統仍然是不完整的。

    A figure showing development and production environments side by side, connected through a CI/CD system, building on Figure 3.
    圖 5. 添加生產環境,通過 CI/CD 系統連接到開發環境

    通過 CI/CD 系統持續交付

    根據 DevOps 最佳實踐,LLM 驅動的系統應通過 CI/CD 流水線(如 GitHub Actions)進行部署。此設置支持持續部署系統改進,這對于正在進行快速迭代的系統(LLM 的常見場景)至關重要。隨著時間的推移,優化提示、微調模型和升級底層 LLM,尤其是在新模型每隔幾個月發布一次的情況下。

    與其將“部署”視為一次性操作,不如將其視為逐步推出。由于 LLM 具有隨機性,因此很難判斷新版本是否優于舊版本,而無需將其暴露于實時數據中。換言之,首先將其部署為 A/B 實驗,或者作為與生產并行運行的影子部署。

    這種方法會在生產環境中同時生成多個版本的 LLM:現有的生產版本以及許多挑戰性模型。由于您可以控制 NIM 模型,因此可以在自己的環境中更可靠地管理類似這樣的部署。 有關更多詳細信息,請參閱如何組織 ML/AI 系統的持續交付:10 階段成熟度模型。

    隔離業務邏輯和模型,統一計算。

    為了實現穩定、高可用的生產部署,它們必須與開發環境安全隔離。在任何情況下,開發都不應干擾生產(反之亦然)

    在 LLMs 的情況下,您可能希望嘗試使用最新和最好的模型,同時在生產環境中使用更保守的模型。此外,在跟蹤和監控生產系統時,您可能需要控制誰有權訪問生產模型響應,尤其是在涉及敏感數據時。例如,您可以通過為生產和實驗設置單獨的云帳戶來實現這一點。您還可以使用具有基于角色的訪問控制的 Outerbounds 邊界來設置所需的權限邊界

    盡管通常嚴格要求隔離邏輯和數據,但在整個開發和生產過程中使用共享計算池通常有助于提高利用率,從而降低寶貴的 GPU 資源的成本。例如,您可以擁有一個統一的 GPU(云)硬件集群,但在兩個環境中部署一組單獨的 NIM 模型,以保證生產環境有足夠的容量和隔離。如需了解詳情, 請參閱成本優化的 ML/AI/數據工作負載的 6 個步驟

    將大型語言模型(LLM)驅動的系統集成到周圍環境

    Outerbounds 上由 LLM 提供支持的系統并不是孤立的孤島。它們連接到上游數據源,例如數據倉庫,并且下游系統會使用它們的結果。這給部署帶來了額外的挑戰,因為它們必須與其他系統很好地協同工作。

    您可以使用 Metaflow 事件觸發器, 讓系統實時響應上游數據源的變化 。當與下游系統集成時,強版本控制和隔離部署是必須的,以避免無意中破壞結果的消費者兼容性。

    開始使用 NVIDIA NIM 和 Outerbounds 構建大型語言模型驅動的生產系

    在許多方面,使用大型語言模型(LLM)驅動的系統時,應與使用隨機輸入和輸出的任何其他大型軟件系統類似。LLM 的存在類似于內置的 Chaos Monkey,在正確使用時,必須從設計上構建更為強大的系統。

    LLMs 是一種新型軟件依賴項,發展速度極快,因此必須進行相應的管理。NVIDIA NIM 可將 LLM 作為標準容器鏡像提供,從而在不犧牲創新速度的情況下,利用經過戰斗強化的最佳實踐構建穩定和安全的生產系統。

    開始使用 NVIDIA NIM 和 Outerbounds

    ?

    0

    標簽

    人人超碰97caoporen国产