text-generation-inference 文档
Gaudi 后端,用于文本生成推断
并获得增强的文档体验
开始使用
Gaudi 后端,用于文本生成推断
概述
文本生成推断 (TGI) 已经过优化,可通过 TGI 的 Gaudi 后端在 Gaudi 硬件上运行。
支持的硬件
- Gaudi1:在 AWS EC2 DL1 实例上可用
- Gaudi2:在 Intel Cloud 上可用
- Gaudi3:在 Intel Cloud 上可用
教程: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.2.2-gaudi \
--model-id $model
一旦看到 connected
日志,服务器就可以接受请求了
2024-05-22T19:31:48.302239Z INFO text_generation_router: router/src/main.rs:378: 已连接
您可以在 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.2.2-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 支持使用 Intel Neural Compressor (INC) 进行 FP8 精度推理。
要运行 FP8 推理
- 使用 Optimum Habana 测量脚本 测量统计信息
- 在 TGI 中使用 QUANT_CONFIG 设置运行模型 - 例如
-e QUANT_CONFIG=./quantization_config/maxabs_quant.json
。
以下 FP8 推理的命令示例基于通过上述第一步完成测量的假设。
Llama3.1-70B 在 8 卡上使用 FP8 精度的示例
model=meta-llama/Meta-Llama-3.1-70B-Instruct
hf_token=YOUR_ACCESS_TOKEN
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 \
-v $PWD/quantization_config:/usr/src/quantization_config \
-v $PWD/hqt_output:/usr/src/hqt_output \
-e QUANT_CONFIG=./quantization_config/maxabs_quant.json \
-e HF_TOKEN=$hf_token \
-e MAX_TOTAL_TOKENS=2048 \
-e BATCH_BUCKET_SIZE=256 \
-e PREFILL_BATCH_BUCKET_SIZE=4 \
-e PAD_SEQUENCE_TO_MULTIPLE_OF=64 \
ghcr.io/huggingface/text-generation-inference:3.2.2-gaudi \
--model-id $model \
--sharded true --num-shard 8 \
--max-input-tokens 1024 --max-total-tokens 2048 \
--max-batch-prefill-tokens 4096 --max-batch-size 256 \
--max-waiting-tokens 7 --waiting-served-ratio 1.2 --max-concurrent-requests 512
如何运行视觉语言模型 (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 \
-e PREFILL_BATCH_BUCKET_SIZE=1 \
-e BATCH_BUCKET_SIZE=1 \
ghcr.io/huggingface/text-generation-inference:3.2.2-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":"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
必须大于与图像关联的令牌数。否则,图像可能会被截断。我们将BASE_IMAGE_TOKENS=2048
设置为默认图像令牌值。这是max-input-tokens
的最小值。您可以覆盖环境变量BASE_IMAGE_TOKENS
以更改此值。预热将生成输入长度从BASE_IMAGE_TOKENS
到max-input-tokens
的图。对于 Llava-v1.6-Mistral-7B,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 http://localhost:8080 \
--profile chat
有关更多详细信息,请参阅 inference-benchmarker README。
如何进行性能分析
要收集性能分析,您需要设置以下环境变量
名称 | 值 | 默认值 | 描述 |
---|---|---|---|
PROF_WAITSTEP | 整数 | 0 | 控制分析等待步骤 |
PROF_WARMUPSTEP | 整数 | 0 | 控制分析预热步骤 |
PROF_STEP | 整数 | 0 | 启用/禁用分析,控制分析活动步骤 |
PROF_PATH | 字符串 | /tmp/hpu_profile | 定义分析文件夹 |
PROF_RANKS | 字符串 | 0 | 要分析的排名逗号分隔列表 |
PROF_RECORD_SHAPES | True/False | False | 控制分析器中的 record_shapes 选项 |
要使用这些环境变量,请使用 -e 标志将它们添加到您的 docker run 命令中。例如
docker run --runtime=habana --ipc=host --cap-add=sys_nice \
-p 8080:80 -v $volume:/data -e HF_TOKEN=$hf_token \
-e PROF_WAITSTEP=10 \
-e PROF_WARMUPSTEP=10 \
-e PROF_STEP=1 \
-e PROF_PATH=/tmp/hpu_profile \
-e PROF_RANKS=0 \
-e PROF_RECORD_SHAPES=True \
ghcr.io/huggingface/text-generation-inference:3.2.2-gaudi \
--model-id $model
解释:了解 Gaudi 上的 TGI
预热过程
为了确保最佳性能,预热在每次服务器运行时开始执行。此过程根据提供的参数创建具有各种输入形状的查询,并运行基本的 TGI 操作(预填充、解码、连接)。
注意:模型预热可能需要几分钟,特别是对于 FP8 推理。为了后续运行更快,请参考 Disk Caching Eviction Policy。
理解参数调优
序列长度参数
--max-input-tokens
是最大可能的输入提示长度。默认值为4095
。--max-total-tokens
是序列(输入和输出)的最大可能总长度。默认值为4096
。
批大小参数
- 对于预填充操作,请将
--max-batch-prefill-tokens
设置为bs * max-input-tokens
,其中bs
是您预期的最大预填充批大小。 - 对于解码操作,请将
--max-batch-size
设置为bs
,其中bs
是您预期的最大解码批大小。 - 请注意,批大小将始终填充为
BATCH_BUCKET_SIZE
和PREFILL_BATCH_BUCKET_SIZE
最接近的倍数。
性能和内存参数
PAD_SEQUENCE_TO_MULTIPLE_OF
决定了输入长度桶的大小。由于预热为每个桶创建多个图,因此按输入序列长度比例调整该值非常重要。否则,可能会观察到一些内存不足的问题。ENABLE_HPU_GRAPH
启用 HPU 图的使用,这对性能结果至关重要。建议保留的值为true
。
序列长度参数
--max-input-tokens
:最大可能的输入提示长度(默认值:4095)--max-total-tokens
:最大可能的总序列长度(输入 + 输出)(默认值:4096)
批大小参数
--max-batch-prefill-tokens
:设置为bs * max-input-tokens
,其中bs
是您预期的最大预填充批大小--max-batch-size
:设置为bs
,其中bs
是您预期的最大解码批大小- 注意:批大小会填充为
BATCH_BUCKET_SIZE
和PREFILL_BATCH_BUCKET_SIZE
最接近的倍数
参考
本节包含有关 Gaudi 后端的参考信息。
支持的模型
Text Generation Inference 允许在 Gaudi 硬件上服务优化的模型。以下部分列出了 Gaudi 支持哪些模型(VLMs 和 LLMs)。
大型语言模型 (LLMs)
- Llama2-7B
- Llama2-70B
- Llama3-8B
- Llama3-70B
- LLama3.1-8B
- LLama3.1-70B
- CodeLlama-13B
- Opt-125m
- OpenAI-gpt2
- Mixtral-8x7B
- Mistral-7B
- Qwen2-72B
- Qwen2-7B
- Phi-1.5
- Gemma-7b
- Starcoder2-3b
- Starcoder2-15b
- Starcoder
- falcon-7b-instruct
- Falcon-180B
- GPT-2
- gpt-j-6b
视觉-语言模型 (VLMs)
- LLaVA-v1.6-Mistral-7B
- Mllama (Multimodal Llama from Meta)
- Idefics
- Idefics 2
- Idefics 2.5
- Qwen2-VL-2B-Instruct
- Qwen/Qwen2.5-VL-7B-Instruct
我们还在尽力支持参数数量不同但使用相同模型架构的模型,但这些模型未经测试。例如,gaudi 后端支持 meta-llama/Llama-3.2-1B
,因为该架构是标准的 llama3 架构。如果您在使用模型时遇到问题,请在 Gaudi 后端存储库上提交问题。
环境变量
下表包含可用于配置 Gaudi 后端的环境变量
名称 | 值 | 默认值 | 描述 | 用法 |
---|---|---|---|---|
ENABLE_HPU_GRAPH | True/False | True | 启用 hpu 图,或不启用 | 在 docker run 命令中添加 -e |
LIMIT_HPU_GRAPH | True/False | True | 跳过预填充的 HPU 图使用以节省内存,对于长序列/解码长度(例如 300/212)设置为 True | 在 docker run 命令中添加 -e |
BATCH_BUCKET_SIZE | 整数 | 8 | 解码操作的批大小将四舍五入到最接近此数字的倍数。这限制了缓存图的数量 | 在 docker run 命令中添加 -e |
PREFILL_BATCH_BUCKET_SIZE | 整数 | 4 | 预填充操作的批大小将四舍五入到最接近此数字的倍数。这限制了缓存图的数量 | 在 docker run 命令中添加 -e |
PAD_SEQUENCE_TO_MULTIPLE_OF | 整数 | 128 | 对于预填充操作,序列将填充为所提供值的倍数。 | 在 docker run 命令中添加 -e |
SKIP_TOKENIZER_IN_TGI | True/False | False | 跳过输入/输出处理的 tokenizer | 在 docker run 命令中添加 -e |
WARMUP_ENABLED | True/False | True | 在服务器初始化期间启用预热以重新编译所有图。这可能会增加 TGI 设置时间。 | 在 docker run 命令中添加 -e |
QUEUE_THRESHOLD_MS | 整数 | 120 | 控制请求被视为过期并优先处理的阈值。否则,较短的请求将被优先处理。 | 在 docker run 命令中添加 -e |
USE_FLASH_ATTENTION | True/False | True | 是否启用 Habana Flash Attention,前提是模型支持它。请参考 https://docs.habana.ai/en/latest/PyTorch/Model_Optimization_PyTorch/Optimization_in_PyTorch_Models.html?highlight=fusedsdpa#using-fused-scaled-dot-product-attention-fusedsdpa | 在 docker run 命令中添加 -e |
FLASH_ATTENTION_RECOMPUTE | True/False | True | 是否在首次生成 token 时在重新计算模式下启用 Habana Flash Attention。 | 在 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 后端的 README 和 Gaudi 后端的 Makefile。
< > 更新 on GitHub