text-generation-inference 文档

Gaudi 后端,用于文本生成推理

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Gaudi 后端,用于文本生成推理

概述

文本生成推理 (TGI) 已通过 TGI 的 Gaudi 后端进行了优化,可在 Gaudi 硬件上运行。

支持的硬件

教程:Gaudi 上的 TGI 入门

基本用法

在 Gaudi 上运行 TGI 最简单的方法是使用官方 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
hf_token=YOUR_HF_ACCESS_TOKEN

docker run --runtime=habana --cap-add=sys_nice --ipc=host \
    -p 8080:80 -v $volume:/data -e HF_TOKEN=$hf_token \
    ghcr.io/huggingface/text-generation-inference:3.3.4-gaudi \
    --model-id $model

当您看到 `connected` 日志时,服务器已准备好接受请求

2024-05-22T19:31:48.302239Z INFO text_generation_router: router/src/main.rs:378: Connected

您可以在 https://huggingface.co/settings/tokens 找到您的 `YOUR_HF_ACCESS_TOKEN`。这是访问 llama3.1 等受限模型所必需的。

发出您的第一个请求

您可以从单独的终端发送请求

curl 127.0.0.1:8080/generate \
    -X POST \
    -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":32}}' \
    -H 'Content-Type: application/json'

操作指南

您可以在支持的模型部分查看所有支持的模型列表。

例如,要运行 Llama3.1-8B,您可以使用以下命令

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
hf_token=YOUR_ACCESS_TOKEN

docker run --runtime=habana --cap-add=sys_nice --ipc=host \
    -p 8080:80 -v $volume:/data -e HF_TOKEN=$hf_token \
    ghcr.io/huggingface/text-generation-inference:3.3.4-gaudi \
    --model-id $model
    <text-generation-inference-launcher-arguments>

有关服务参数的完整列表,请参阅launcher-arguments 页面

已验证的 docker 命令可以在examples/docker_commands 文件夹中找到。

注意:`--runtime=habana --cap-add=sys_nice --ipc=host` 是 docker 使用 Gaudi 硬件所必需的(更多详细信息请参阅此处)。

如何启用多卡推理(分片)

TGI-Gaudi 支持多卡推理的分片,允许您将负载分配到多个 Gaudi 卡上。建议在运行大型模型和加速推理时使用此功能。

例如,在具有 8 张 Gaudi 卡的机器上,您可以运行

docker run --runtime=habana --ipc=host --cap-add=sys_nice \
    -p 8080:80 -v $volume:/data -e HF_TOKEN=$hf_token \
    tgi-gaudi \
    --model-id $model --sharded true --num-shard 8
我们建议在多卡机器上运行时始终使用分片。

如何使用不同的精度格式

BF16 精度(默认)

默认情况下,所有模型在 Gaudi 硬件上都以 BF16 精度运行。

FP8 精度

TGI-Gaudi 支持 FP8 精度推理,这可以显著减少内存使用并提高大型模型的性能。我们支持 W8A8 FP 压缩张量参数的模型,例如RedHatAI/Mixtral-8x7B-Instruct-v0.1-FP8 和 AutoFP8 生成的模型RedHatAI/Meta-Llama-3-8B-Instruct-FP8。TGI-Gaudi 支持使用 Intel Neural Compressor (INC) 进行 FP8 精度推理。

如何运行视觉语言模型 (VLM)

Gaudi 支持 VLM 推理。

Llava-v1.6-Mistral-7B 在 1 张卡上的示例

通过以下命令启动 TGI 服务器

model=llava-hf/llava-v1.6-mistral-7b-hf
volume=$PWD/data   # share a volume with the Docker container to avoid downloading weights every run

docker run -p 8080:80 \
   --runtime=habana \
   --cap-add=sys_nice \
   --ipc=host \
   -v $volume:/data \
   ghcr.io/huggingface/text-generation-inference:3.3.4-gaudi \
   --model-id $model \
   --max-input-tokens 4096 --max-batch-prefill-tokens 16384 \
   --max-total-tokens 8192 --max-batch-size 4

然后您可以通过以下命令向服务器发送请求

curl -N 127.0.0.1:8080/generate \
    -X POST \
    -d '{"inputs":"![](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/rabbit.png)What is this a picture of?\n\n","parameters":{"max_new_tokens":32}}' \
    -H 'Content-Type: application/json'

注意:在 Llava-v1.6-Mistral-7B 中,一张图像通常占用 2000 个输入令牌。例如,一张 512x512 大小的图像由 2800 个令牌表示。因此,`max-input-tokens` 必须大于与图像关联的令牌数量。否则图像可能会被截断。`max-batch-prefill-tokens` 的值为 16384,其计算方法如下:`prefill_batch_size` = `max-batch-prefill-tokens` / `max-input-tokens`。

如何测试性能

我们建议使用 inference-benchmarker 工具在 Gaudi 硬件上测试性能。

此基准测试工具模拟用户请求并测量模型在实际场景中的性能。

要在同一台机器上运行它,您可以执行以下操作

MODEL=meta-llama/Llama-3.1-8B-Instruct
HF_TOKEN=<your HF READ token>
# run a benchmark to evaluate the performance of the model for chat use case
# we mount results to the current directory
docker run \
    --rm \
    -it \
    --net host \
    -v $(pwd):/opt/inference-benchmarker/results \
    -e "HF_TOKEN=$HF_TOKEN" \
    ghcr.io/huggingface/inference-benchmarker:latest \
    inference-benchmarker \
    --tokenizer-name "$MODEL" \
    --url https://:8080 \
    --profile chat

请参阅 inference-benchmarker README 以获取更多详细信息。

解释:理解 Gaudi 上的 TGI

预热过程

Intel Gaudi 加速器在固定张量形状的模型上运行时性能最佳。Intel Gaudi 图编译器生成优化的二进制代码,用于在 Gaudi 上实现给定模型拓扑。在其默认配置中,生成的二进制代码可能高度依赖于输入和输出张量形状,当在同一拓扑中遇到不同形状的张量时,需要重新编译图。虽然这些二进制文件能高效利用 Gaudi,但编译过程本身可能会在端到端执行中引入明显的开销。在动态推理服务场景中,最大限度地减少图编译次数并降低服务器运行时发生图编译的风险非常重要。

为了确保最佳性能,在每次服务器运行开始时都会执行预热。此过程根据提供的参数创建具有各种输入形状的查询,并运行基本的 TGI 操作(预填充、解码)。

注意:模型预热可能需要几分钟,特别是对于 FP8 推理。对于更快的后续运行,请参阅磁盘缓存淘汰策略

理解参数调整

序列长度参数

  • `--max-input-tokens` 是最大可能的输入提示长度。默认值为 `4095`。
  • `--max-total-tokens` 是序列(输入和输出)的最大可能总长度。默认值为 `4096`。

批次大小参数

  • 对于预填充操作,请将 `—max-batch-prefill-tokens` 设置为 `bs * max-input-tokens`,其中 `bs` 是您预期的最大预填充批次大小。
  • 对于解码操作,请将 `—max-batch-size` 设置为 `bs`,其中 `bs` 是您预期的最大解码批次大小。
  • 请注意,批次大小将始终填充到已预热的最近形状。这样做是为了避免内存不足问题并确保图能够高效重用。

参考

本节包含有关 Gaudi 后端的参考信息。

支持的模型

文本生成推理支持在 Gaudi 硬件上运行优化模型。以下部分列出了 Gaudi 支持的模型(VLM 和 LLM)。

大型语言模型 (LLM)

视觉语言模型 (VLM)

如果您的模型遇到问题,请在Gaudi 后端仓库中提出问题。

环境变量

下表包含可用于配置 Gaudi 后端的环境变量

名称 默认 描述 用法
LIMIT_HPU_GRAPH True/False True 跳过预填充的 HPU 图形使用以节省内存,对于长序列/解码长度(例如 300/212)设置为 `True` 在 docker run 命令中添加 -e
SKIP_TOKENIZER_IN_TGI True/False 否 (False) 跳过输入/输出处理的 tokenizer 在 docker run 命令中添加 -e
VLLM_SKIP_WARMUP True/False 否 (False) 在服务器初始化期间跳过图形预热,不推荐,但可用于调试。 在 docker run 命令中添加 -e

贡献

欢迎对 TGI-Gaudi 项目做出贡献。请参阅贡献指南

对 TGI 上的 Gaudi 贡献指南:所有更改都应在 `backends/gaudi` 文件夹中进行。通常,您应避免修改路由器、启动器或基准测试以适应 Gaudi 硬件,因为所有 Gaudi 特定的逻辑都应包含在 `backends/gaudi` 文件夹中。

从源代码构建 Docker 镜像

要从源代码构建 Docker 镜像

make -C backends/gaudi image

这将构建镜像并将其保存为 `tgi-gaudi`。然后您可以使用此镜像运行 TGI-Gaudi

model=meta-llama/Meta-Llama-3.1-8B-Instruct
volume=$PWD/data
hf_token=YOUR_ACCESS_TOKEN

docker run --runtime=habana --ipc=host --cap-add=sys_nice \
    -p 8080:80 -v $volume:/data -e HF_TOKEN=$hf_token \
    tgi-gaudi \
    --model-id $model

有关更多详细信息,请参阅Gaudi 后端的 READMEGaudi 后端的 Makefile

< > 在 GitHub 上更新