簡介
文字生成已成為一項革命性能力,改變了機器解讀和生成人類文字的方式。這股熱潮促使許多工具誕生,旨在簡化並強化與大型語言模型(LLM)協作的流程。
大型語言模型快速擴張,幾乎每週都有新版本出現,連帶推動了支援此技術的代管選項增加。在眾多工具中,Hugging Face 的 Text Generation Inference(TGI)脫穎而出,讓我們能在本機上將 LLM 當作服務來執行。
本指南將深入探討為何 Hugging Face TGI 是一項重大創新,以及如何利用它開發能生成越來越接近人類文字的先進 AI 模型。
什麼是 Hugging Face Text Generation Inference?
Hugging Face Text Generation Inference(TGI)是一個以 Rust 和 Python 撰寫的框架,用於部署和提供大型語言模型服務。這是一個專為此目的設計的生產就緒工具包。
Hugging Face 開發並在 HFOILv1.0 授權下發布 TGI,只要 TGI 作為產品或服務中的輔助工具(而非主要功能),即可用於商業用途。它主要解決的挑戰包括:
Hugging Face Text Generation Inference(TGI)的主要特色
-
高效能文字生成
— TGI 採用張量並行(Tensor Parallelism,將大型模型分散到多個 GPU)與動態批次處理(在伺服器中即時將提示分組)等技術,最佳化流行的開源 LLM(包括 StarCoder、BLOOM、GPT-NeoX、Llama 和 T5)的效能。 -
高效率資源使用
— TGI 使用連續批次處理、最佳化程式碼和張量並行,能同時處理多個請求,同時將資源使用量降至最低。 -
靈活性與安全性
— TGI 支援多種安全與防護功能,例如浮水印、logit 扭曲(透過注入偏差值修改特定 token 的 logits)以及停止序列,以確保 LLM 的使用負責任且受控。
Hugging Face 已針對部分 LLM 的架構進行最佳化,使其能透過 TGI 更快執行,包括 LLaMA、Falcon7B 和 Mistral 等熱門模型。完整的支援模型列表可在其文件中找到。
為什麼要使用 Hugging Face TGI?
Hugging Face 已成為開發具備自然語言能力之 AI 的首選平台。它託管了眾多領先的開源模型,是自然語言處理(NLP)創新的重鎮。過去,這些模型過於龐大無法在本機執行,必須依賴雲端服務。
然而,近來量化技術(如 QLoRa 和 GPTQ)的進展,已讓某些 LLM 能夠在一般裝置(包括本機電腦)上執行。
Hugging Face TGI 正是為了讓 LLM 能以服務形式在本機上執行而設計。這種做法解決了啟動 LLM 的挑戰:讓模型在背景保持就緒,以便快速回應,避免每次提示都需長時間等待。想像一下,你有一個端點,內含一系列頂尖語言模型,可以隨時按需求生成文字。
TGI 最令人印象深刻的是其實作方式直接明瞭。它支援多種精簡的模型架構,讓部署快速又簡單。
此外,TGI 已為多個實際專案提供支援。例如:

- Hugging Chat:一個開放存取的模型開源介面。
- OpenAssistant:一個訓練 LLM 的開源社群倡議。
- nat.dev:一個探索和比較 LLM 的平台。
不過,有一個顯著的限制:TGI 尚不支援基於 ARM 的 GPU Mac(包括 M1 系列及後續型號)。
設定 Hugging Face TGI
首先,設定 Hugging Face TGI 端點。

若要在本機安裝並執行 Hugging Face TGI,首先安裝 Rust。接著,使用 Python 3.9 或更高版本設定 Python 虛擬環境,例如使用 conda:
#安裝 Rust
curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh
#建立 Python 虛擬環境
conda create -n text-generation-inference python=3.9
conda activate text-generation-inference
此外,也必須安裝 Protoc。Hugging Face 建議使用 21.12 版本以獲得最佳相容性。請注意,你需要 sudo 權限才能執行此安裝。
PROTOC_ZIP=protoc-21.12-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC\_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local ‘include/*’
rm -f $PROTOC_ZIP
首先,我將概述從頭安裝的流程,這可能不是那麼直觀。若在此過程中遇到任何問題,你可以跳過前面步驟,直接使用 Docker 映像,這會更簡單。兩種情況都會涵蓋。
一旦滿足所有先決條件,我們就可以開始設定 TGI。首先複製 GitHub 儲存庫:
git clone https://github.com/huggingface/text-generation-inference.git
接著,在本機上切換到 TGI 目錄,並使用以下指令安裝:
cd text-generation-inference/
BUILD_EXTENSIONS=False make install
現在,讓我們探討如何在使用或不使用 Docker 的情況下使用 TGI。為了示範,我將採用 Falcon-7B 模型,該模型採用 Apache 2.0 授權。
不使用 Docker 啟動模型
安裝過程已產生一個新指令「text-generation-launcher」,它會啟動 TGI 伺服器。若要使用 Falcon-7B 模型啟動端點,只需執行以下指令:
text-generation-launcher --model-id tiiuae/falcon-7b-instruct --num-shard 1 --port 8080 --quantize bitsandbytes
以下是每個輸入參數的說明:
- model-id:這是模型在 Hugging Face Hub 上列出的具體名稱。以 Falcon-7B 為例,就是「tiiuae/falcon-7b-instruct」。
- num-shard:將此參數調整為可供使用的 GPU 數量。預設值為 1。
- port:指定伺服器監聽請求的通訊埠。預設通訊埠為 8080。
- quantize:對於 VRAM 小於 24 GB 的 GPU 使用者,需要進行模型量化以避免記憶體超載。在上述指令中,選用「bitsandbytes」進行即時量化。另一個選項「GPTQ」(「gptq」)也可用,但其運作方式可能較不為人熟悉。
TGI 應用
有多種方式可將 Text Generation Inference(TGI)伺服器整合到你的應用程式中。一旦伺服器運作,你可以透過傳送 POST 請求到 /generate 端點來與它互動,以取得結果。

如果你選擇使用 TGI 進行連續 token 串流,請改用端點,如下一小節所示。這些請求可以使用你偏好的工具,例如 curl、Python 或 TypeScript。若要透過 Python 腳本查詢由 TGI 提供的模型,你需要安裝以下 text-generation 函式庫。你可以透過執行以下 pip 指令輕鬆安裝:
pip install text-generation
啟動 TGI 伺服器後,建立一個 InferenceClient() 實例,並將 URL 指向模型服務端點。然後,你可以呼叫 text_generation() 以透過 Python 傳送請求至端點。
from text_generation import Client
client = Client(“http://127.0.0.1:8080”)
client.text_generation(prompt=“Your prompt here!”)
若要啟用 InferenceClient 的串流功能,只需設定 stream=True。這將使你能夠即時接收伺服器生成的 token。以下是如何使用串流:
for token in client.text_generation(“Your prompt here!”, max_new_tokens=12, stream=True):
print(token)
透過 TGI 提示模型
請記住,你將與部署在端點上的模型互動,此處是 Falcon-7B。透過 TGI,我們建立一個即時端點,以便從所選的 LLM 取得回應。
因此,使用 Python 時,可以透過本機裝置上可存取的通訊埠 8080 的客戶端,直接將提示傳送給 LLM。因此,對應的 Python 腳本會類似這樣:
from text_generation import Client
client = Client(“http://127.0.0.1:8080”)
print(client.generate(“Translate the following sentence into spanish: ‘What does Large Language Model mean?’”, max_new_tokens=500).generated_text)
我們將從模型收到回應,而無需在環境中安裝它。除了使用 Python,我們也可以使用 CURL 查詢 LLM,如下例所示:
curl 127.0.0.1:8080/generate \
-X POST \
-d ‘{“inputs”:“Code in Javascript a function to remove all spaces in a string and then print the string twice.”,“parameters”:{“max_new_tokens”:500}}’ \
-H ‘Content-Type: application/json’
嘗試使用 TGI 後,它展現出驚人的速度。以 Falcon-7B(token 上限為 500)來說,只需幾秒鐘。相比之下,使用 transformers 函式庫的典型推論方法則需要大約 30 秒。
使用 novita.ai 的 LLM 進行整合

從 1.4.0 版開始,TGI 引入了與 novita.ai 的 LLM API 相容的 API。這個新的 Messages API 讓客戶和使用者能夠無縫地從 novita.ai 模型轉換到開源 LLM。此 API 設計用於直接與 novita.ai 的客戶端函式庫整合,或與 LangChain 或 LlamaIndex 等第三方工具整合。

TGI 對 Messages 的支援確保其 Inference Endpoints 與 novita.ai LLM API 完全相容。這項相容性讓使用者可以輕鬆地將任何使用 novita.ai 模型的現有腳本,替換為託管在 TGI 端點上的開放 LLM,完全沒有麻煩。
這項升級讓切換毫不費力,使用者能立即獲得開放原始碼模型的廣泛優勢,包括:
- 對模型和資料的完全控制與透明性。
- 消除對速率限制的顧慮。
- 靈活調整系統以滿足獨特需求。
以下是在 novita.ai 聊天完成協定中整合 TGI 的範例:
from openai import OpenAI
client = OpenAI(
base_url=“https://api.novita.ai/v3/openai”,
# 取得 NovitaAI API 金鑰,請參考:https://novita.ai/get-started/Quick\_Start.html#\_3-create-an-api-key
api_key=“
)
model = “meta-llama/llama-3-8b-instruct”
stream = True # or False
max_tokens = 512
chat_completion_res = client.chat.completions.create(
model=model,
messages=[
{
“role”: “system”,
“content”: “Act like you are a helpful assistant.”,
},
{
“role”: “user”,
“content”: “Hi there!”,
}
],
stream=stream,
max_tokens=max_tokens,
)
if stream:
for chunk in chat_completion_res:
print(chunk.choices[0].delta.content or “”, end=“”)
else:
print(chat_completion_res.choices[0].message.content)
如上所示,我們可以使用 novita.ai 函式庫來指定我們的 ENDPOINT 和 Hugging Face 密碼。關於此整合的更多深入資訊,請參閱 Hugging Face TGI 文件。
使用 TGI 時的實用技巧
LLM 的核心概念
在深入 HuggingFace TGI 之前,對大型語言模型有良好的理解很重要。熟悉關鍵概念,例如 tokenization、注意力機制和 Transformer 架構。這些基礎對於客製化模型和增強文字生成結果至關重要。
模型準備與最佳化 — 了解 Hugging Face
學習如何針對你的特定需求準備和最佳化模型。這包括選擇適當的模型、客製化 tokenizer,以及應用技術在不犧牲品質的前提下提升效能。
熟悉 HuggingFace 的運作方式以及如何使用其 HuggingFace Hub 進行 NLP 開發。一個好的起點是教學「An Introduction to Using Transformers and Hugging Face」。
了解微調(fine-tuning)的概念也很重要,因為模型通常需要針對特定目標進行最佳化。你可以透過指南「An Introductory Guide to Fine-Tuning LLMs」學習如何微調模型。
生成策略
探討不同的文字生成方法,包括貪婪搜尋(greedy search)、波束搜尋(beam search)和 top-k 取樣。每種方法都有其優缺點,會影響生成文字的連貫性、創造性和相關性。
結論
Hugging Face 的 TGI 工具包讓使用者能夠深入探索 AI 文字生成領域。它提供了一個親和的工具包,用於部署和代管 LLM,以實現需要人類化文字的進階 NLP 應用。
雖然自託管大型語言模型提供了資料隱私和成本控制,但它需要強大的硬體。儘管如此,近期該領域的進展已經讓較小的模型可以直接在本機上使用。
novita.ai 是您一站式無限創意平台,提供 100 多種 API。從影像生成、語言處理到音訊增強和影片編輯,價格低廉按量計費,讓您在建立自己的產品時無需煩惱 GPU 維護。立即免費試用。
推薦閱讀
Novita AI LLM Inference Engine: the largest throughput and cheapest inference available
