Text Generation Inference 文件

Text Generation Inference 的 Gaudi 後端

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Text Generation Inference 的 Gaudi 後端

概覽

Text Generation Inference (TGI) 已針對 Gaudi 硬體進行優化,可透過 TGI 的 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.5-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'

操作指南

您可以在 支援的模型 (Supported Models) 章節查看完整清單。

例如,要執行 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.5-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 硬體 (更多詳情請見 這裡)。

如何啟用多卡推論 (Sharding 分片)

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 精度推論,這可以顯著降低大型模型的記憶體使用量並提高效能。我們支援如 RedHatAI/Mixtral-8x7B-Instruct-v0.1-FP8 等 W8A8 FP 壓縮張量參數的模型,以及 AutoFP8 生成的模型 RedHatAI/Meta-Llama-3-8B-Instruct-FP8。TGI-Gaudi 透過 Intel Neural Compressor (INC) 支援 FP8 精度推論。

如何執行視覺語言模型 (VLMs)

Gaudi 支援 VLM 推論。

在單卡上執行 Llava-v1.6-Mistral-7B 的範例

透過下列指令啟動 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.5-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 個輸入 token。例如,一張 512x512 大小的圖片由 2800 個 token 代表。因此,max-input-tokens 必須大於與圖片關聯的 token 數量。否則圖片可能會被截斷。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

預熱 (Warmup) 流程

Intel Gaudi 加速器在處理固定張量形狀的模型時表現最佳。Intel Gaudi 圖表編譯器 (Graph Compiler) 會生成優化的二進位代碼,在 Gaudi 上實作特定的模型拓撲。在預設配置中,生成的代碼可能高度依賴輸入與輸出張量的形狀,當在同一拓撲中遇到不同形狀的張量時,需要重新編譯圖表。雖然這些二進位檔案能有效利用 Gaudi,但編譯過程本身會為端對端執行帶來明顯的開銷。在動態推論服務場景中,最小化圖表編譯次數並降低伺服器運行時發生圖表編譯的風險至關重要。

為確保最佳效能,每次伺服器啟動之初都會進行預熱。此流程會根據提供的參數建立各種輸入形狀的查詢,並執行基本的 TGI 操作 (prefill, decode)。

注意:模型預熱可能需要數分鐘,尤其是 FP8 推論。為了讓後續執行更快,請參考 磁碟快取汰換政策

了解參數調優

序列長度參數

  • --max-input-tokens 是最大可能的輸入提示 (prompt) 長度。預設值為 4095
  • --max-total-tokens 是序列的最大可能總長度 (輸入加輸出)。預設值為 4096

批次大小 (Batch Size) 參數

  • 對於預填 (prefill) 操作,請將 --max-batch-prefill-tokens 設置為 bs * max-input-tokens,其中 bs 是您預期的最大預填批次大小。
  • 對於解碼 (decode) 操作,請將 --max-batch-size 設置為 bs,其中 bs 是您預期的最大解碼批次大小。
  • 請注意,批次大小一律會填充到最接近已預熱的形狀。這樣做是為了避免記憶體不足問題,並確保圖表能被高效地重複使用。

參考資料

本節包含關於 Gaudi 後端的參考資訊。

支援的模型

Text Generation Inference 支援在 Gaudi 硬體上提供優化的模型。下列章節列出了 Gaudi 上支援的模型 (VLMs 與 LLMs)。

大型語言模型 (LLMs)

視覺語言模型 (VLMs)

如果您對模型有任何問題,請在 Gaudi 後端儲存庫 開啟一個 issue。

環境變數

下表包含可用於設定 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 資料夾內進行。一般而言,您應該避免修改 router、launcher 或 benchmark 來配合 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

在 GitHub 上更新

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