用於文本生成推理的 Rust、Python 和 gRPC 伺服器。在 Hugging Face 的生產中用於為 Hugging Chat、推理 API 和推理端點提供支援。
文本生成推理 (TGI) 是一個用於部署和服務大型語言模型 (LLM) 的工具包。 TGI 為最受歡迎的開源 LLM 提供高效能文字生成,包括 Llama、Falcon、StarCoder、BLOOM、GPT-NeoX 等。 TGI 實現了許多功能,例如:
有關詳細的入門指南,請參閱快速瀏覽。最簡單的入門方法是使用官方 Docker 容器:
model=HuggingFaceH4/zephyr-7b-beta
# share a volume with the Docker container to avoid downloading weights every run
volume= $PWD /data
docker run --gpus all --shm-size 1g -p 8080:80 -v $volume :/data
ghcr.io/huggingface/text-generation-inference:2.4.1 --model-id $model
然後你可以提出這樣的請求
curl 127.0.0.1:8080/generate_stream
-X POST
-d ' {"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":20}} '
-H ' Content-Type: application/json '
您也可以使用 TGI 的訊息 API 來取得 Open AI Chat Completion API 相容的回應。
curl localhost:8080/v1/chat/completions
-X POST
-d ' {
"model": "tgi",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is deep learning?"
}
],
"stream": true,
"max_tokens": 20
} '
-H ' Content-Type: application/json '
注意:要使用 NVIDIA GPU,您需要安裝 NVIDIA Container Toolkit。我們也建議使用 CUDA 版本 12.2 或更高版本的 NVIDIA 驅動程式。對於在沒有 GPU 或 CUDA 支援的電腦上執行 Docker 容器,刪除--gpus all
標誌並新增--disable-custom-kernels
就足夠了,請注意 CPU 不是該專案的預期平台,因此效能可能會低於標準。
注意: TGI 支援 AMD Instinct MI210 和 MI250 GPU。詳細資訊可以在支援的硬體文件中找到。若要使用 AMD GPU,請使用docker run --device /dev/kfd --device /dev/dri --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:2.4.1-rocm --model-id $model
而不是上面的指令。
若要查看為模型提供服務的所有選項(在程式碼或 cli 中):
text-generation-launcher --help
您可以使用/docs
路徑查閱text-generation-inference
REST API 的 OpenAPI 文件。 Swagger UI 也可從以下位置取得:https://huggingface.github.io/text- Generation-inference。
您可以選擇使用HF_TOKEN
環境變數來設定text-generation-inference
所使用的令牌。這允許您存取受保護的資源。
例如,如果您想提供門控 Llama V2 模型變體:
HF_TOKEN=
或使用 Docker:
model=meta-llama/Meta-Llama-3.1-8B-Instruct
volume= $PWD /data # share a volume with the Docker container to avoid downloading weights every run
token= < your cli READ token >
docker run --gpus all --shm-size 1g -e HF_TOKEN= $token -p 8080:80 -v $volume :/data ghcr.io/huggingface/text-generation-inference:2.4.1 --model-id $model
NCCL
是PyTorch
用於進行分散式訓練/推理的通訊框架。 text-generation-inference
利用NCCL
來啟用張量並行性,從而顯著加快大型語言模型的推理速度。
為了在NCCL
組的不同裝置之間共享數據,如果無法使用 NVLink 或 PCI 進行點對點, NCCL
可能會轉而使用主機記憶體。
為了允許容器使用1G的共享記憶體並支援SHM共享,我們在上面的命令上添加--shm-size 1g
。
如果您在Kubernetes
內執行text-generation-inference
。您也可以透過使用以下命令建立磁碟區來將共用記憶體新增至容器:
- name : shm
emptyDir :
medium : Memory
sizeLimit : 1Gi
並將其安裝到/dev/shm
。
最後,您也可以使用NCCL_SHM_DISABLE=1
環境變數停用 SHM 共用。但請注意,這會影響效能。
text-generation-inference
使用 OpenTelemetry 進行分散式追蹤。您可以使用--otlp-endpoint
參數設定 OTLP 收集器的位址來使用此功能。可以使用--otlp-service-name
參數覆寫預設服務名稱
Adyen 關於 TGI 內部運作的詳細部落格文章:使用 TGI 進行大規模 LLM 推理(Martin Iglesias Goyanes - Adyen,2024)
您也可以選擇在本機安裝text-generation-inference
。
首先安裝 Rust 並建立一個至少包含 Python 3.9 的 Python 虛擬環境,例如使用conda
:
curl --proto ' =https ' --tlsv1.2 -sSf https://sh.rustup.rs | sh
conda create -n text-generation-inference python=3.11
conda activate text-generation-inference
您可能還需要安裝 Protoc。
在 Linux 上:
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
在 MacOS 上,使用 Homebrew:
brew install protobuf
然後運行:
BUILD_EXTENSIONS=True make install # Install repository and HF/transformer fork with CUDA kernels
text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2
注意:在某些電腦上,您可能還需要 OpenSSL 函式庫和 gcc。在 Linux 機器上,運行:
sudo apt-get install libssl-dev gcc -y
另一種選擇是使用 Nix 在本機安裝text-generation-inference
。目前,我們僅支援具有 CUDA GPU 的 x86_64 Linux 上的 Nix。使用 Nix 時,可以從二進位快取中提取所有依賴項,從而無需在本地建置它們。
首先按照說明安裝 Cachix 並啟用 TGI 快取。設定快取很重要,否則 Nix 將在本地建立許多依賴項,這可能需要幾個小時。
之後你可以使用nix run
來運行 TGI :
nix run . -- --model-id meta-llama/Llama-3.1-8B-Instruct
注意:當您在非 NixOS 系統上使用 Nix 時,您必須建立一些符號連結以使 CUDA 驅動程式庫對 Nix 套件可見。
對於 TGI 開發,您可以使用impure
dev shell:
nix develop . # impure
# Only needed the first time the devshell is started or after updating the protobuf.
(
cd server
mkdir text_generation_server/pb || true
python -m grpc_tools.protoc -I../proto/v3 --python_out=text_generation_server/pb
--grpc_python_out=text_generation_server/pb --mypy_out=text_generation_server/pb ../proto/v3/generate.proto
find text_generation_server/pb/ -type f -name " *.py " -print0 -exec sed -i -e ' s/^(import.*pb2)/from . 1/g ' {} ;
touch text_generation_server/pb/__init__.py
)
所有開發依賴項(cargo、Python、Torch)等都可以在此 dev shell 中使用。
TGI 開箱即用,為所有現代車型提供最佳化模型。它們可以在此列表中找到。
盡最大努力支援其他架構,使用:
AutoModelForCausalLM.from_pretrained(
或者
AutoModelForSeq2SeqLM.from_pretrained(
text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2
您也可以執行預量化權重(AWQ、GPTQ、Marlin)或使用 bitsandbytes、EETQ、fp8 動態量化權重,以減少 VRAM 要求:
text-generation-launcher --model-id mistralai/Mistral-7B-Instruct-v0.2 --quantize
使用bitsandbytes 中的NF4 和FP4 資料類型可以進行4 位元量化。可以透過提供--quantize bitsandbytes-nf4
或--quantize bitsandbytes-fp4
作為text-generation-launcher
的命令列參數來啟用它。
在量化文件中閱讀有關量化的更多資訊。
make server-dev
make router-dev
# python
make python-server-tests
make python-client-tests
# or both server and client tests
make python-tests
# rust cargo tests
make rust-tests
# integration tests
make integration-tests