成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 OpenLLM 構建和部署大模型應用

人工智能
OpenLLM 是一個開源的大語言模型(LLM)開發框架。它支持多種開源的 LLM 模型,并且具有內建的兩個關鍵的 LLM 優化,能夠優化內存使用。此外,它與 LangChain 和 BentoML 都有很好的集成。

本次分享主題為:使用 OpenLLM 快速構建和部署大語言模型的應用。OpenLLM 是一個開源的大語言模型(LLM)開發框架。它支持多種開源的 LLM 模型,并且具有內建的兩個關鍵的 LLM 優化,能夠優化內存使用。此外,它與 LangChain 和 BentoML 都有很好的集成,可以快速地構建和部署大語言模型的應用。

一、BentoML 公司簡介

圖片

BentoML專注于提供機器學習基礎設施。核心產品是與公司同名的開源框架BentoML。公司總部位于舊金山灣區,在國內也有眾多遠程工作的同事。通過不斷努力,公司獲得了眾多客戶的認可。

二、OpenLLM 產品背景

首先來分享一下我們開發 OpenLLM 的背景。

1、LLM 爆發

圖片

相信即將過去的 2023 年對大家來說都是非常奇妙的一年。2022 年 11 月的時候 ChatGPT 剛剛發布,過了一年到現在,我們已經見證了各種各樣的大語言模型橫空出世:有商用的大語言模型,比如 Claude 和 GPT;也有很多開源的小模型,其參數量可能從幾個 B 到幾百個 B 不等??梢哉f這是一個大語言模型繁榮發展的時代,新型語言模型的層出不窮。

BentoML 在與一些客戶互動時發現,他們在開發過程中可能會利用 OpenAI 的能力進行開發,將數據輸入到 prompt 中,然后測試推理結果。在將模型部署到生產環境上線時,他們希望在自己的服務器或云服務器上進行部署。

2、屬于自己的 LLM

圖片

大部分客戶有以下訴求:

  • 高可控性/靈活性:如果將所有數據作為一個 prompt 輸入到 OpenAI 的模型中進行推理,這種方法可能并不太切實際。最終,他們期望能夠通過自行訓練或微調,利用多年來積累的用戶數據得到一個屬于自己的模型,實現更加靈活的推理需求。
  • 數據安全性:如果將自己的數據用于模型推理,就需要關注數據安全性的問題。因為如果使用的是公共網絡上的模型,就不可避免地需要將自己的私有數據輸入到這個公共網絡的模型中。這可能導致數據泄露的問題,在一些注重數據安全性的企業中,這是無法接受的。
  • 成本效益:正如之前提到的,如果使用通用模型并采用經過優化的 prompt,可能需要一個龐大的 prompt。舉例來說,如果要進行文檔的推理,可能需要將整個文檔或一本書輸入到 prompt 中。目前大多數商業模型是按 Token 計費的,如果提示非常龐大,成本就會相應增加。然而,如果你能夠擁有自己的大模型應用,那么成本可能只涉及硬件費用。并且,其精確度可能更高,這意味著你可能只需使用更小的模型就能達到相同的推理準確度,從而進一步降低成本。

3、生產環境中部署 LLMs 的挑戰

圖片

如果我們自己去部署大語言模型,可能會遇到以下挑戰:

  • 可操作性:主要涉及到硬件成本,即一個大型模型是否能夠有效地部署在特定硬件上。我們都知道,一些優秀的顯卡可能不太容易獲取。舉例來說,一個擁有 13B 參數的模型,其參數總量可能需要 26GB,這就使得單卡 A10G 顯卡難以應對。因此,可能需要考慮使用多卡或多機部署來解決硬件上的限制。
  • 可擴展性:包含硬件可擴展性和軟件可擴展性兩個方面。首先是硬件的可擴展性,指的是在請求量和并發數較低時,可以只需一顆顯卡或一臺機器來滿足需求,而在用戶量增大時,希望系統能夠自動啟用多顆顯卡或多臺機器進行并發推理。第二方面是軟件的可擴展性??紤]到現在有許多大型語言模型,你可能在開發或測試階段希望方便地在不同模型之間切換,以觀察它們的效果并進行比較。這就需要軟件方面的可擴展性。
  • 吞吐量:大型語言模型的應用與傳統的機器學習應用有一些區別。傳統的機器學習應用,比如圖像分類任務,通常可以進行批處理,即一次性處理多個輸入,同時返回結果。但是大型語言模型在推理時,其輸入不是同時到達,輸出也不是同時產生,這給吞吐量帶來了更大的挑戰。
  • 延遲:我們自然希望延遲越低越好,但在機器學習應用中,延遲有時與吞吐量是一對相互制衡的指標。換句話說,如果要達到較大的吞吐量,可能需要在一定程度上犧牲延遲。

三、OpenLLM 介紹、應用舉例與使用優勢

1、OpenLLM 介紹

圖片

下面介紹我們的開源產品 OpenLLM 是如何解決上述問題的。

OpenLLM 于 2023 年 6 月開源,是一個用于部署大語言模型的框架。目前,該項目在 GitHub 上已經獲得了 6800 多個星標。其最初的口號是通過一行代碼或相對輕松地在不同的大語言模型之間切換,為個人用戶提供方便。無論是想要嘗試不同模型的個人用戶,還是想要部署自己的 AI 應用的用戶,OpenLLM 都可以提供便捷的解決方案。

圖片

OpenLLM 目前支持幾乎所有常用的開源大語言模型。對于每個模型,框架都提供了多個不同的參數量和不同部署模型 ID 可供選擇。目前包括 ChatGLM、百川、Dolly-V2 等模型。

2、OpenLLM 應用舉例

圖片

接下來通過演示來介紹 OpenLLM 是如何加速大語言模型應用的開發和部署的。

首先,啟動一個 LLM 服務。

圖片

啟動 LLM 服務非常簡單,只需在安裝 LLM 工具后運行以下命令:"start dolly-v2" 即可啟動應用。如果你的計算機上之前未下載過該模型,它將自動幫你下載。這可能需要一些時間,應用啟動后,可以通過命令行直接與該服務交互,提出一個問題,比如"地球的重量是多少"。我們使用的是 Dolly-V2 模型,它給出了一個回答。由于這個模型相對較弱,因此回答可能不太準確。

圖片

我們嘗試使用另一個模型,LlaMA,來看看是否可以提升準確度。在這里,我們選擇使用 LlaMA2 模型,但由于 LlaMA2 不是 LlaMA 的默認模型,我們需要指定一下模型 ID。和之前一樣,使用方法完全相同,只是切換了模型。

因此,使用我們的框架,用戶可以輕松在不同的模型之間切換。盡管使用方法一樣,但不同模型的回答可能會有所不同。這次使用 LlaMA2 模型,可以看到給出的答案相對更準確。

圖片

我們使用命令行與服務進行交互,這在測試階段非常方便和實用。然而,在實際部署應用時,我們可能希望應用提供一個 HTTP 或 gRPC 接口,以便前端或外部系統能夠調用。

OpenLLM 框架支持內置的開箱即用的 HTTP API。在服務的首頁,顯示一個 Swagger 頁面,列出了所有服務支持的 HTTP 端點。你甚至可以在這里直接與服務進行交互和測試,輸入提示并獲取 JSON 格式的響應體,就像我們之前在命令行中演示的一樣。

由于我們暴露了 HTTP 接口,因此無論使用 Python、Node 還是 Curl 等任何能夠訪問 HTTP 的客戶端,都可以調用這個接口。這為應用的靈活性和可訪問性提供了更多的選擇。

圖片

我們還提供了一個 Python SDK,使用戶能夠在 Python 代碼中直接與服務進行交互。只需導入 Client,指定服務的地址,就可以直接向服務提出問題,它將正確地給出答案。這樣就可以在 Python 環境中更加便捷地集成和使用 OpenLLM 的服務。

3、OpenLLM 使用優勢

圖片

使用 OpenLLM 有以下優勢:

  • 模型切換。用戶能夠方便地在不同的模型之間進行切換。
  • 內置多種優化技術。首先是量化,通過減少參數精度來降低整體內存使用,特別適用于大型語言模型。OpenLLM 支持幾乎所有模型的量化。其次是 Token Streaming 技術,在典型的聊天機器人場景中表現出色,允許邊產生邊接收答案,詞匯逐個生成。還有 continuous batching(持續批跑)和 paged attention 等重要優化。
  • 多卡支持。用戶可以指定多個 GPU,并根據需要選擇運行方式,甚至可以指定特定的GPU。
  • 模型表現監測。基于公司產品 BentoML,支持 Metrics 測量和性能指標監控。
  • 支持模型微調推理。OpenLLM 支持 Fine-tune,同時也支持與 LoRA Layer 進行合作的推理。
  • 與其他 AI 工具如 BentoML、LangChain 和 Hugging Face 集成良好,提供了更全面的功能和應用場景。

圖片

下面重點討論一下 Continuous Batching(持續批跑),因為我們使用了 VLM 的后端,它為我們帶來了很好的優化。

在大型語言模型的推理中,輸入的強度并不相同,有些輸入可能更快產生結果,而有些可能需要更長時間。如果不進行優化,當其中一個輸入(比如 S2)先完成推理時,整個過程就會等待其他輸入完成才能進入下一輪。這會導致 GPU 時間的浪費,因為有一段時間沒有推理任務在進行。

Continuous Batching 的優化可以在一個推理結束時立即引入下一個推理任務。以一個例子來說明,假設 S3 先完成了推理,那么 S5 就會立即加入,接著 S1 完成了推理,S6 就會立即加入。這樣可以確保在每個時間片上都有一個模型推理任務在運行,從而最大程度地利用 GPU 資源。這是一個有效的優化策略,減少了空閑時間,提高了整體推理效率。

圖片

介紹了時間優化之后,再來看一下空間優化,尤其是關于 KVcache 的優化。首先簡要介紹一下大語言模型的工作原理。它基于 Transformer 框架,模型通過一系列輸入的 token,返回下一個 token 的最大概率。然而,由于輸入可能存在重復計算,例如在輸入"我是一只"后,模型返回"我是一只貓",在輸入"我是一只貓"時,又返回"我是一只貓,",這導致了 Transformer 框架中有許多重復的計算。為了解決這個問題,我們使用 KVcache 緩存計算結果。

KVcache 帶來了一個新問題,就是在計算機內存分配時,無法準確知道需要分配多少內存。我們只能先估算一個大致的范圍。通過圖表演示可以看到,當一個任務完成后,本來可以釋放的內存卻可能由于下一個任務的加入而無法充分利用。這樣就會產生很多內存碎片,影響內存的使用效率。

為了優化這個問題,引入了 Paged Attention。Paged Attention 的優化思想是將所有內存拆分成一個個 block,然后在內存分配時按 block 分配。如果一個任務完成后,發現內存不夠,需要再增加時,框架會在另一個地方(可能不是連續的地方)分配另一個 block。任務完成后,這個 block 可能會被釋放,供下一個任務使用。通過這種方式,可以有效減少內存碎片。需要注意的是,內存不是連續的,因此需要一個 block table 來存儲內存的物理位置和實際序號的映射關系,使得在大模型中看起來是獲得了一個邏輯上連續的內存。

四、BentoML 介紹與應用舉例

1、BentoML 介紹

圖片

完成了以上優化后,開始部署大語言模型。然而,大多數 AI 應用不僅僅是將一個模型部署上去,否則沒有哪個公司能夠與 OpenAI 競爭。因此,除了模型推理之外,我們的 AI 應用還可能包含許多其他方面的工作。例如,需要考慮如何收集數據、驗證數據、配置部署指標以及如何進行模型推理,包括服務指標的觀測。這些問題在研究階段,可能不需要考慮,但在部署和工程化之后,必須考慮這些雜項問題。

圖片

BentoML 與 OpenLLM 集成帶來了許多優勢。BentoML 是一個專注于解決部署后事項的開源 AI 部署框架,具體如下:

  • 開源 AI 部署框架:BentoML 提供了一整套的開發、部署和打包解決方案。
  • 模型與代碼的版本控制:BentoML 引入了模型和版本的控制概念,使得模型可以像 GitHub 的提交一樣進行版本控制。由此可以輕松追蹤和回退之前的指定版本,特別是在模型出錯時非常有用。
  • 通過 Metrics、Traces 和 Logs 提供開箱即用的可觀察性:BentoML 內置了開箱即用的可觀測性功能,包括測量指標、追蹤和日志功能,幫助用戶更好地監測和理解模型的性能。
  • 容器化為標準的 OCI 鏡像:BentoML 支持將整個機器學習應用打包為標準的容器鏡像。
  • 多種部署目標:可以將應用輕松部署在各種云服務器上,例如 AWS。
  • 分布式部署與擴容:BentoML 支持分布式的部署與擴容,為處理高負載提供了便利。
  • Serverless BentoCloud:這是 BentoML 最新支持的功能之一,允許以 Serverless 方式的部署。這意味著應用在沒有任何請求時不占用任何資源,只有在第一個請求到達時才進行冷啟動。

圖片

BentoML 模型是對機器學習模型的一種抽象。在機器學習領域,有許多不同的框架,每個框架都有自己的模型概念。BentoML 允許將這些不同框架的模型導入為 BentoML 模型。這種抽象化的設計有幾個優點:

  • 版本管理:BentoML 模型具有版本管理功能,這意味著可以輕松地追蹤、管理和回滾模型的不同版本。這對于模型的迭代和更新非常有用。
  • 團隊協作:在開發 AI 應用時,通常會有研究團隊負責訓練模型。一旦模型被訓練并保存為 BentoML 模型,就可以被推送到遠程平臺,供工程團隊下載和使用。這種分工和協作的方式使得團隊可以更加高效地合作,研究和工程團隊可以專注于各自的任務。通過這種方式,團隊成員不需要擔心模型的具體來源,只需通過 BentoML 平臺下載并使用相應的模型。這種團隊協作的概念有助于提高整個開發過程的效率和協同工作的流暢性。

圖片

BentoML 的 Runner 具有以下特點:

  • Remote Worker:Runner 將模型封裝成一個遠程對象,使其可以對外提供服務。這種分離的設計允許模型獨立于應用部署,提高了系統的模塊化性和可維護性。
  • 獨立擴容:由于 AI 應用的模型部分通常需要大量 GPU 資源,而其他任務如 API 接口、數據預處理和 IO 操作等則可能只需要 CPU。通過獨立部署,它們可以相互獨立地擴容。CPU 資源相對便宜,可以自由擴展,而 GPU 資源可能有限,例如只有 2 到 3 個。這種方式可以確保將 GPU 資源專注于模型推理,而將 CPU 資源用于其他任務,提高了整體的資源利用率。
  • 支持主流 ML 框架直接轉化為 Runner:BentoML 支持幾乎所有主流的機器學習框架,包括 PyTorch 和 TensorFlow。模型可以直接轉換為 Remote Runner,并在獨立的進程中進行部署。

圖片

上圖中展示了 BentoML API Server 的工作流程:應用從外部接收 HTTP 請求,可能是通過 POST 方法發送的 JSON 數據。接收到的 HTTP 請求數據可能需要進行預處理,以便轉換為模型能夠接受的格式。這個步驟通常涉及數據格式轉換、驗證等操作,確保輸入數據符合模型的要求。IO Descriptors 定義了輸入和輸出數據的結構和類型,起到了數據格式轉換橋梁的作用。經過 IO Descriptors 的轉換后,數據被傳遞給模型進行推理。模型利用輸入數據生成相應的預測或輸出。模型的輸出可能需要進行一些后置處理,以便將其轉換為 HTTP 響應的格式。這個步驟包括將 Tensor 或 Numpy 數組轉換為 JSON 格式等。處理完后的數據以 HTTP 響應的形式返回給請求方,完成了整個推理過程。這是應用與外部系統通信的出口。

圖片

BentoML 的請求處理流程經過了負載均衡層、API 服務器和 Runner 的多個層次:

  • 負載均衡層:負載均衡層接收到所有的請求,并負責將它們分發給 API 服務器。這一層可以進行請求的智能分發,確保每個 API 服務器負載均衡。
  • API 服務器:API 服務器是 BentoML 應用的入口,負責接收來自負載均衡層的請求。API 服務器可能會橫向擴展,即創建多個實例以處理大量的并發請求。一旦 API 服務器接收到請求,它會進行一些預處理,然后將請求轉發給 Runner。
  • Runner:Runner 是對模型的封裝,負責實際的模型推理。在這一層,模型推理支持批處理功能。當 Runner 接收到一個請求時,它會等待一段時間,看是否有其他請求到達。只有當等待時間達到最大值或者達到了規定的批處理容量時,Runner 才會一次性提交這批請求給模型進行推理。這個過程對用戶是無感知的,而且可以提高推理的效率。

圖片

這里介紹一下 BentoML 中 Bento 的概念,Bento 是打包好的最小的部署的單元,包括機器學習的依賴、環境的 Dockerfile、源代碼、需要的模型等各種部署的配置。

2、BentoML 應用舉例

圖片

接下來通過一個實例來演示如何使用 BentoML 開發和部署 AI 應用。我們將創建一個應用,利用 LangChain 和 OpenLLM 實現廣告詞的生成功能,并展示 LangChain 和 OpenLLM 的集成。然后,我們將使用 BentoML 啟動一個 HTTP 服務,通過一行代碼切換 LLM 模型,并最終生成一個 Bento 包,以演示如何使用 BentoML 進行后續部署。

圖片

在前面的代碼中,我們導入了一些 LangChain 的模塊。如果你對 LangChain 比較熟悉的話,應該對這些模塊有所了解,這里不做詳細講解。接下來是 BentoML 的部分。BentoML 主要導入了一些 IO Descriptor,這些描述符用于說明輸入輸出的類型。在這里,我們導入了兩個類型,一個是 JSON,另一個是 Text?,F在我們將利用這些導入的模塊和描述符,因為我們的輸入應該是 JSON 格式,而輸出則是一段文字。

圖片

接下來,我們將使用 pydantic 的 Model 定義一個結構體,該結構體用于驗證輸入的有效性。這個 Query 對象包含以下幾個參數:industry 表示所在行業,productName 表示產品名稱,keywords 表示需要的關鍵詞。這些參數是生成廣告詞所需的輸入。

圖片

第二部分是一個 helper 函數,用于快速切換模型 ID。該函數返回一個 LangChain 對象。因此,我們首先使用 opt 模型,如果注釋掉上面的一行并使用下面一行,就可以直接切換到使用百川模型。

圖片

這是 Prompt 的生成部分,利用 LangChain 的功能,指定一個 Prompt 的模板,然后將剛才輸入的參數填充到這個模板中,生成一個完整的 Prompt。

圖片

接下來的步驟是定義要公開的接口。通過指定輸入和輸出的類型,將這個函數作為服務的一個接口。在第 48 行,將 LLM 的 Runner 傳遞給了這個服務,因為在啟動服務時,需要知道有哪些 Runner 需要在分布式環境中遠程啟動。因此,這里的啟動會生成兩個獨立的服務:一個是 API 接口層(`Service`),另一個是 LLM Runner。它們是相互獨立的。

圖片

啟動之后,可以看到與之前相似的 Swagger 頁面,我們可以直接在上面進行測試。在這里,我們將行業設為"SAAS",產品名稱設為"BentoML",執行后,它可以為我們生成一段廣告詞。這個廣告詞符合我們的需求,看起來像一條推文或者微信的內容。如果我們想生成一個房地產行業的廣告,只需切換行業為"房地產",就可以得到一條看起來更符合房地產行業的廣告,其中還包含一個房子的表情圖標。

圖片

開發以及本地的測試完成后,將整個代碼和模型打包成一個 Bento。通過使用 BentoML 的 Build 命令,可以輕松制作一個 Bento 包。制作完成后,還有兩個后續的可選步驟。

圖片

第一個是將其容器化 containerize,打包成一個鏡像,為后續的部署使用。

圖片

第二種選擇是可以直接把這個 Bento push 到我們的 Cloud 平臺上,Cloud 平臺會自動幫你執行后續的部署操作。

圖片

Cloud 平臺是一個能夠部署你的 Bento 的平臺。它會將 Bento 自動轉化為一個運行在 Kubernetes 上的容器,并在其上運行。這里的例子包括一個 API 服務器以及多個不同的 runner,包括 LLM 的 runner 和 Text2Image 的 runner 等。此外,在 BentoCloud 上,可以指定擴容的方式,可以分別為 API 指定需要擴容的節點數,或者為每個 runner 指定需要的 GPU 數量或實例數。

五、OpenLLM 總結

圖片

OpenLLM 是一個開源的大語言模型(LLM)開發框架。它支持多種開源的 LLM 模型,并且具有內建的兩個關鍵的 LLM 優化,能夠優化內存使用。此外,它與 LangChain 和 BentoML 都有很好的集成。

責任編輯:姜華 來源: DataFunTalk
相關推薦

2019-01-23 11:12:42

機器學習機器模型預測工資

2014-06-26 14:08:28

Azure云服務

2010-03-29 13:35:39

ibmdwRIA

2024-07-31 08:14:17

2021-04-20 12:53:34

Polkadot部署合約

2024-07-31 08:00:00

2022-07-07 14:23:06

人工智能機器學習大數據

2024-01-10 09:00:00

OpenAILocalGPT開源大模型

2025-04-02 08:40:00

人工智能大模型AI

2024-06-18 08:21:31

2025-03-24 10:55:18

2023-09-25 10:19:01

模型App開源

2024-08-12 15:55:51

2011-03-14 13:07:18

QMLQt

2025-03-06 07:28:31

DeepSeek大模型人工智能

2021-02-03 15:10:38

GoKubernetesLinux

2025-02-13 08:30:11

2024-06-06 08:06:19

鴻蒙大語言模型LLM模型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 天天操夜夜艹 | 天天射网站| 欧美久久久电影 | 欧美日韩不卡 | 日韩精品一区二区三区在线播放 | 色吊丝在线 | 亚洲成人国产综合 | 一级日韩 | 久久久精品视 | 在线观看三级av | 久久国产婷婷国产香蕉 | 欧美激情国产日韩精品一区18 | 久久国产精品免费视频 | 一区二区在线不卡 | 亚洲视频在线观看免费 | 日日噜噜噜夜夜爽爽狠狠视频, | 99久久免费观看 | 一区二区成人 | 日本三级日产三级国产三级 | 国产精品99免费视频 | 欧美综合一区二区三区 | 老牛嫩草一区二区三区av | 九九热这里| 视频在线亚洲 | 婷婷91| 国产精品久久久久无码av | 黄色电影在线免费观看 | 毛片大全 | 中国黄色在线视频 | 色综合久久久 | 性色av香蕉一区二区 | 婷婷福利视频导航 | 羞羞在线视频 | 日韩视频在线免费观看 | 妖精视频一区二区三区 | 99精品久久| 国产精品视频导航 | 日韩网| 欧美在线视频观看 | 天天操天天射综合网 | 亚洲国产精品美女 |