Hugging Face 文本生成推理現在支援 AWS Inferentia2
TL;DR
Hugging Face 已在 AWS Inferentia2 上透過 Amazon SageMaker 正式推出 Text Generation Inference(TGI),提供一條無需 GPU、具備生產等級的路徑,以低延遲與高併發度服務大型語言模型(LLM)。
什麼是 Text Generation Inference(TGI)?
TGI 是為 LLM 專門打造的推理伺服器,提供以下功能:
- 張量平行化與持續批次處理,以實現高吞吐量。
- 最佳化支援流行的開源模型,如 Llama、Mistral 等。
- 具備生產級部署,已被 Grammarly、Uber 與 Deutsche Telekom 等公司使用。
為何 Inferentia2 重要
AWS Inferentia2 晶片提供比 GPU 更低成本的高效能推理。透過將 TGI 與 Inferentia2 及 SageMaker 整合,Hugging Face 提供以下優勢:
- 無縫、受管的部署體驗。
- 相容於支援 HuggingChat、OpenAssistant 與 Hugging Face 無伺服器端點的相同後端技術。
- 為偏好 AWS 專屬硬體的客戶提供替代的運算堆疊。
在 Inferentia2 上部署 Zephyr 7B – 步驟指南
此部落格文章說明如何在 ml.inf2.8xlarge 執行個體上部署 Zephyr 7B 模型(Mistral‑7B‑v0.1 的 DPO 微調版本)。步驟完整且任何 SageMaker 使用者皆可重現。
1. 設定開發環境
pip install transformers "sagemaker>=2.206.0" --upgrade --quiet
此腳本會取得 IAM 執行角色、建立 SageMaker 工作階段,並印出角色 ARN 與區域。
2. 取得 TGI NeuronX 容器映像
from sagemaker.huggingface import get_huggingface_llm_image_uri
llm_image = get_huggingface_llm_image_uri(
"huggingface-neuronx",
version="0.0.20"
)
print(f"llm image uri: {llm_image}")
撰寫本文時,最新的 DLC 版本尚未透過輔助函式公開,故使用原始的 ECR URI。
3. 編譯或取得 Inferentia2 的快取模型
Inferentia2 不支援動態形狀,因此序列長度與批次大小必須在編譯時固定。Hugging Face 提供 neuron model cache,內含預先編譯的設定(例如 Mistral‑7B、Zephyr‑7B)。若缺少所需的設定,使用者可透過 Optimum CLI 進行編譯:
optimum-cli export neuron -m HuggingFaceH4/zephyr-7b-beta \
--batch_size 4 --sequence_length 2048 \
--num_cores 2 --auto_cast_type bf16 ./zephyr-7b-beta-neuron
編譯完成的產物會推送至 Hub,路徑為 aws-neuron/zephyr-7b-seqlen-2048-bs-4-cores-2。
4. 定義端點設定並部署
TGI NeuronX 容器的關鍵環境變數包括:
HF_MODEL_ID,HF_NUM_CORES,HF_BATCH_SIZE,HF_SEQUENCE_LENGTH,HF_AUTO_CAST_TYPEMAX_BATCH_SIZE,MAX_INPUT_LENGTH,MAX_TOTAL_TOKENS
from sagemaker.huggingface import HuggingFaceModel
config = {
"HF_MODEL_ID": "HuggingFaceH4/zephyr-7b-beta",
"HF_NUM_CORES": "2",
"HF_BATCH_SIZE": "4",
"HF_SEQUENCE_LENGTH": "2048",
"HF_AUTO_CAST_TYPE": "bf16",
"MAX_BATCH_SIZE": "4",
"MAX_INPUT_LENGTH": "1512",
"MAX_TOTAL_TOKENS": "2048",
}
llm_model = HuggingFaceModel(role=role, image_uri=llm_image, env=config)
llm = llm_model.deploy(initial_instance_count=1, instance_type="ml.inf2.8xlarge", container_startup_health_check_timeout=1800)
部署通常需要 10–15 分鐘。
5. 執行推理並與 Zephyr 7B 對話
模型使用聊天模板。Tokenizer 的 apply_chat_template 方法會將 OpenAI 風格的訊息字典轉換為所需的提示格式。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("aws-neuron/zephyr-7b-seqlen-2048-bs-4-cores-2")
messages = [
{"role": "system", "content": "You are the AWS expert"},
{"role": "user", "content": "Can you tell me an interesting fact about AWS?"},
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
payload = {
"do_sample": True,
"top_p": 0.6,
"temperature": 0.9,
"top_k": 50,
"max_new_tokens": 256,
"repetition_penalty": 1.03,
"return_full_text": False,
"stop": ["</s>"]
}
chat = llm.predict({"inputs": prompt, "parameters": payload})
print(chat[0]["generated_text"][len(prompt):])
回應證實模型已在 Inferentia2 上正常運作。
6. 清理資源
llm.delete_model()
llm.delete_endpoint()
影響與未來工作
- 具成本效益的擴展:相較於 GPU 叢集,Inferentia2 提供更廉價的運算選項,以支援高吞吐量的 LLM 服務。
- 模型覆蓋:目前的快取包含 Llama、Mistral 與 Zephyr;Hugging Face 計畫擴充支援的架構。
- 編譯工作流程:使用者可依賴預先快取的建置,或使用 Optimum 編譯自訂設定(約需 45 分鐘)。
- 路線圖:持續的工作旨在支援更多模型、改進快取系統,並簡化編譯流程。
如有問題,請於 Twitter 或 LinkedIn 聯絡 Philipp Schmid。