如何采用最少的代碼啟動LLM API服務器
譯文譯者 | 李睿
審校 | 重樓
近幾個月來,開源的大型語言模型一直在迅速發展。Meta公司發布了LLaMA,隨后又發布了一系列其他模型,這導致很多企業運行自己的LLM的興趣激增。
擁有自己的LLM(例如LLaMA2)提供了一些優勢:企業可以更好地控制大型語言模型的使用,確保數據的隱私,允許定制以適應特定需求,并促進與現有系統的無縫集成。然而,企業運行自己的LLM也有許多挑戰,其中包括設置必要的IT基礎設施,選擇適當的LLM,使用自己的數據運行并可能微調模型,擴展模型以滿足需求,以及解決許可問題。
幸運的是,有許多可用的解決方案可以簡化開始使用開源LLM的過程。本文將介紹兩種無需編寫代碼即可設置開源LLM API服務器的解決方案。
為什么選擇Web API服務器?
web應用程序和LLM服務器如何交互
機器學習項目的固有挑戰之一是開發周期長。當企業希望將LLM功能添加到現有產品中時,將開發和部署模型所需的時間最小化是至關重要的。
開源LLM尤其具有挑戰性,因為這些大型語言模型是用各種編程語言和框架編寫的。當嘗試將這些模型合并到現有應用程序中時,這種多樣性可能會帶來集成挑戰。
最小化開發和集成時間的一個解決方案是建立一個Web API。如果企業已經在使用像GPT-4或Cohere這樣的商業LLM API,那么為企業的開源LLM設置一個API可以讓企業在對現有代碼進行最小更改的情況下測試和比較模型。這種方法提供了在開源API和商業API之間輕松切換的靈活性。
除了集成之外,Web API還可以解決其他挑戰。例如,企業的Web應用程序可能運行在無服務器或虛擬機上,而沒有用于運行LLM的專用硬件。
在這種情況下,LLM API允許企業解耦應用程序的不同部分并分別運行它們。例如,可以將LLM部署在配備A100 GPU的單獨虛擬機上,并使Web服務器可以通過API端點訪問它。這種解耦意味著隨著模型的開發,可以修改底層服務器并對其進行擴展,而無需對Web服務器進行任何更改。
需要注意的是,API部署可能不是應用程序的最終解決方案。隨著企業在開發過程中的試驗和進展,可能會發現將LLM集成到應用程序中的更有效的方法。當企業從原型轉移到生產,保持靈活和開發的方法,因為可以深入了解其選擇的LLM的能力和潛力。
應該使用哪種語言模型?
開源LLM領域的多樣性也使得為其應用程序選擇正確的模型變得困難。LLaMA是一個很好的起點。其受歡迎程度使其成為一個引人注目的選擇,因為許多庫和項目都支持它。此外,已經在LLaMA和LLaMA2之上構建了許多模型,這意味著如果企業構建的產品可以與其中一個模型一起工作,那么使其項目適應其他模型的可能性很大。
尤其是LLaMA2,其令人印象深刻的基準在開源模型中脫穎而出。如果企業的目標是盡可能接近最先進的API LLM,那么LLaMA2可能是其最好的選擇。它也有不同的大小,從70億個到700億個參數不等。這種可擴展性允許企業調整模型的復雜性,而無需對應用程序進行重大更改(盡管需要檢查硬件設置以適應模型的大小)。
LLaMA2的另一個優點是其允許商業使用的許可。這實際上意味著可以將其用于幾乎任何應用程序。許可證中有一些關于用戶數量的警告,但這些限制只適用于很少的產品。
然而,一旦企業使用選擇的模型進行了測試,可能想要探索其他系列LLM。MPT和Cerebras GPT系列模型也具有很高的性能,并且可以為企業的特定用例提供獨特的優勢。
在選擇了LLM之后,下一步是找到一個框架,該框架可以將LLM作為API端點服務,只需很少的編碼或不需要編碼。以下將探討兩個框架,它們可以幫助企業快速有效地啟動并運行LLM API服務器。
使用vLLM啟動API服務器
vLLM是一個功能強大的Python庫,可以快速方便地訪問各種模型。vLLM由加州大學伯克利分校的研究人員開發,不僅支持LLaMA和LLaMA2,還支持其他先進的開源語言模型,例如MPT、OPT、Falcon、Dolly和BLOOM。
vLLM最引人注目的特性之一是它運行的速度。在一些實驗中,它吞吐量已經證明比Hugging Face的LLM要高14~24倍。這種速度加上其現成的API端點功能,使vLLM成為啟動語言模型Web API服務器的高效工具。
要運行vLLM,需要一臺配備Python3.8或更高版本、CUDA 11.0-11.8和合適GPU的Linux服務器。或者,可以使用NVIDIA PyTorch Docker鏡像,該鏡像附帶了所有必要的預安裝包和庫。(如果選擇Docker鏡像,必須在使用vLLM之前卸載Pytorch)。
使用一個簡單的命令就可以輕松安裝vLLM:
pip install vllm
其安裝過程可能需要幾分鐘,具體取決于網絡連接。在安裝之后,啟動LLaMA2 API端點就像運行以下命令一樣簡單:
python -m vllm.entrypoints.api_server --env MODEL_NAME=openlm-research/open_llama_13b
該命令在http://localhost:8000上啟動服務器。企業可以使用-host和-port參數指定地址和端口,并且可以用自己的模型的名稱替換MODEL_NAME參數。
要檢查服務器,可以運行curl命令:
curl http://localhost:8000/generate \
-d '{
"prompt": "The most famous book of J.R.R. Tolkien is",
"temperature": 0,
"max_tokens": 50
}'
如果一切正常,應該從服務器接收模型的輸出。
vLLM的主要優點之一是它與OpenAI API的兼容性。如果其應用程序已經與OpenAI模型一起工作,可以運行一個模仿OpenAI API的vLLM服務器:
python -m vllm.entrypoints.openai.api_server --model meta-llama/Llama-2-13b-hf
之后,只需要改變其代碼指向API調用到服務器,而不是OpenAI API:
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"
如果使用-host和-port參數更改默認設置,可以相應地更改api_base變量。
vLLM還支持跨多個服務器的并行GPU推理和分發。如果服務器有多個GPU,可以通過使用tensor-parallel-size參數輕松調整vLLM來利用它們:
python -m vllm.entrypoints.api_server \
--env MODEL_NAME=openlm-research/open_llama_13b \
--tensor-parallel-size 4
這個特性對于需要高計算能力的應用程序特別有用。
vLLM的另一個顯著特性是令牌流。這意味著模型可以在生成輸出標記時返回它們,而不是等待整個序列完成。如果企業的應用程序生成較長的響應,并且不想讓用戶等待很長時間,則這一特性特別有用。
但是vLLM并非沒有其局限性。它不支持LoRA和QLoRA適配器,這是在不修改原始模型權重的情況下對開源LLM進行微調的常用技術。vLLM也不支持量化,量化是一種使LLM足夠緊湊以適應較小GPU的技術。盡管存在這些限制,vLLM仍然是快速測試LLM的非常方便的工具。
創建OpenLLM服務器
OpenLLM是另一個廣泛使用的為語言模型創建Web服務器的平臺。它以其簡單性和多功能性而聞名,使其成為開發人員和研究人員的熱門選擇。
要安裝OpenLLM,需要確保其服務器滿足必要的先決條件。一旦確認,安裝過程就很簡單了。執行如下命令:
pip install openllm
在成功安裝后,可以直接從命令行啟動服務器。下面是如何做到這一點的一個例子:
openllm start llama --model-id openlm-research/open_llama_7b_v2 \
--max-new-tokens 200 \
--temperature 0.95 \
OpenLLM的一個突出特性是它對適配器(如LoRA)的支持。該特性允許企業將完整的LLM和幾個輕量級適配器組合在一起,從而使企業能夠在單個模型上運行多個應用程序。
OpenLLM還與LangChain等流行庫無縫集成。這種集成簡化了編寫應用程序或將代碼移植到新的LLM的過程,節省了開發人員寶貴的時間和精力。
然而,OpenLLM也不是沒有缺點。與vLLM不同,它不支持批處理推理,這可能成為高使用率應用程序的瓶頸。此外,OpenLLM缺乏對跨多個GPU的分布式推理的內置支持。盡管存在這些限制,OpenLLM仍然是部署語言模型服務器的健壯且用戶友好的平臺。它對于構建LLM應用程序的原型特別有用,特別是如果想要進行LLM微調的話。
原文標題:How to launch an LLM API server with minimal coding,作者:Ben Dickson
鏈接:https://bdtechtalks.com/2023/08/14/llm-api-server-nocode/。