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 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.