用于文本生成推理的 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