作者:
隨著 DeepSeek、 GPT 和 Llama 等大語言模型(LLMs)不斷推動人工智能的邊界,它們在高效部署方面也帶來了重大挑戰。這些模型在生成類似人類的文本方面具有革命性,但每生成一個 token 都需要耗費巨大的計算資源。這不僅導致成本上升、能耗增加,還使響應速度變慢。在實時應用場景,如聊天機器人、虛擬助手和創意內容生成工具等場景中,這些挑戰尤為突出。
本文將探討如何利用 OpenVINO GenAI 的推測式解碼技術使這一變革性創新成為現實。借助于簡化開發和優化硬件利用率的工具,OpenVINO 使開發者能夠在各種實時和資源受限的場景中部署高性能的 LLMs。無論您是在構建響應迅速的聊天機器人、高效的虛擬助手,還是具備可擴展性的創意應用,OpenVINO 正在重新定義 AI 推理的可能性。
1性能瓶頸
想象這樣一個場景:聊天機器人響應緩慢,或者創意寫作助手難以跟上用戶的思維節奏。這些并非假設的問題,而是當今 AI 開發者和用戶面臨的現實挑戰。傳統的大語言模型 (LLMs) 推理方法按序處理 token,導致計算瓶頸,進而影響用戶體驗。當在計算資源受限的硬件上部署大語言模型,同時又要保持高性能時,這一問題變得更加嚴峻。
2推測式解碼:
一項顛覆性的解決方案
推測式解碼(Speculative Decoding)作為一種突破性技術,從根本上改變了大語言模型(LLM)的推理方式。通過引入一個較小的草稿模型(draft model)與完整的大模型(main model)協同工作,推測式解碼大幅加速了 token 生成。該方法最早在論文 “Fast Inference from Transformers via Speculative Decoding”(arXiv:2211.17192)中提出,其核心機制是讓草稿模型提前預測多個 token,并由主模型定期驗證這些預測是否符合預期,必要時進行修正。這種迭代式方法減少了生成 token 所需的完整計算次數,從而在實時應用中實現顯著的加速效果。
Fast Inference from Transformers via Speculative Decoding
https://arxiv.org/abs/2211.17192
可以把它類比成一個協同寫作的過程:草稿模型快速提出建議,而主模型則進行仔細審核并優化。主模型會評估這些建議的相關性和質量,并在必要時進行調整。這種協作方式確保了生成內容的高質量,同時大幅減少主模型從零生成每個 token 的計算負擔。通過利用草稿模型的高速度和主模型的高準確性,整體推理過程變得更快且更加高效。
這種迭代式的方法通過將大部分 token 生成任務交給草稿模型處理,從而顯著減輕主模型的計算負擔。在 LLM 處理中,token 指的是文本的基本單位,如單詞或子詞。推測式解碼通過同時使用兩個模型來加速 token 生成:
輔助模型(草稿模型):快速生成 token 候選項。
主模型:驗證并優化這些候選項,以確保生成的文本質量。
這一方法不僅提高了推理速度,還優化了計算資源的利用,使 LLM 部署在計算受限環境中更加可行。
推測式解碼能夠快速生成高準確度的響應,使其成為對時延敏感場景的顛覆性技術,尤其適用于以下應用:
實時聊天機器人:提供流暢的客戶交互體驗。
端側 AI 助手:適用于計算資源受限的環境。
大規模應用的動態內容生成:支持高效且可擴展的內容創作。
3OpenVINO GenAI:
從創新到落地
盡管推測式解碼的概念極具潛力,但要高效實現這一技術并不簡單。需要協調預測 token 生成、驗證以及模型優化,并確保在不同硬件平臺上高效運行,這對開發者提出了較高的要求。這正是 OpenVINO GenAI API 發揮作用的地方。
OpenVINO GenAI 簡化 AI 開發,提供以下關鍵優勢:
預優化的生成式 AI 模型,簡化部署,降低開發復雜度。
針對 Intel CPU、NPU 和 GPU 的硬件加速,提升推理性能。
Optimum CLI 工具,支持模型的便捷導出與優化。
通過無縫集成推測式解碼,OpenVINO 讓開發者能夠專注于構建高效、優質的 AI 體驗,同時最大程度降低計算負擔。在理想情況下,草稿模型的預測完全符合主模型的預期,使得驗證過程可以在單次請求內完成。這種協作方式不僅提升了性能,還有效減少了資源消耗,為 AI 推理帶來全新優化方案。
步驟1: 克隆 OpenVINO GenAI 倉庫
要使用 OpenVINO GenAI API 實現推測式解碼,首先需要克隆 openvino.genai GitHub 倉庫。該倉庫包含推測式解碼的示例實現,支持 Python 和 C++,可幫助開發者快速上手并部署高效的 LLM 推理方案。
openvino.genai GitHub 倉庫
https://github.com/openvinotoolkit/openvino.genai/blob/master/samples/python/text_generation/prompt_lookup_decoding_lm.py
克隆倉庫的步驟:
1. 使用以下命令克隆OpenVINO GenAI 倉庫:
git clone https://github.com/openvinotoolkit/openvino.genai.git cd openvino.genai/samples/
2. 查看Python或C++代碼:
Python路徑:
cd python/speculative_decoding_lm/
C++路徑:
cd python/speculative_decoding_lm/
步驟2: 安裝依賴項(Python)
要運行 OpenVINO GenAI的推測式解碼示例,需要配置環境并安裝必要的工具、庫和相關依賴項。請按照以下步驟正確安裝所需組件。
1.創建 Python 虛擬環境
虛擬環境可以隔離項目依賴,確保一個干凈、無沖突的開發環境。使用以下命令創建并激活虛擬環境:
python3 -m venv openvino_env source openvino_env/bin/activate # For Windows: openvino_envScriptsactivate
2.安裝必要的庫
為了將模型導出為 OpenVINO 兼容格式,需要安裝相關依賴項。運行以下命令安裝必要的庫:
pip install --upgrade-strategy eager -r ../../export-requirements.txt
此命令確保所有必需的庫都已安裝并可正常使用,包括 OpenVINO GenAI、Hugging Face 工具 和 Optimum CLI。這些組件將支持推測式解碼 的實現,使開發者能夠高效導出和優化模型,從而加速 LLM 推理過程。
步驟3: 使用 Optimum CLI 導出模型
為了啟用推測式解碼,需要準備草稿模型(Draft Model)和主模型(Main Model),并將它們導出為OpenVINO 兼容格式。這樣可以確保模型經過優化,以便在Intel硬件上高效運行。
1.導出 Dolly v2–3B(草稿模型)
Dolly v2–3B 將用作推測式解碼過程中的草稿模型。請使用以下命令將其導出為 OpenVINO 兼容格式:
optimum-cli export openvino --trust-remote-code --weight-format fp16 --model databricks/dolly-v2-3b dolly-v2-3b
在導出過程中,將執行以下關鍵步驟:
從 Hugging Face 下載模型和分詞器:自動獲取 Dolly v2–3B 及其對應的 tokenizer。
轉換為 OpenVINO 的中間表示(IR)格式:模型被優化為 OpenVINO 兼容的推理格式,以提高執行效率。
降精度至 FP16:模型的精度會被降低為 FP16,以優化計算性能,減少內存占用,并在 Intel 硬件(CPU、GPU、NPU)上獲得更快的推理速度。
2. 導出 Dolly v2–7B(主模型)
Dolly v2–7B 作為主模型(Main Model),負責驗證并優化草稿模型生成的token,確保最終輸出的質量和準確性。請使用以下命令將其導出為OpenVINO 兼容格式:
optimum-cli export openvino --trust-remote-code --weight-format fp16 --model databricks/dolly-v2-7b dolly-v2-7b
--trust-remote-code 標志確保在導出過程中包含模型的自定義實現,使其能夠正確適配 OpenVINO 推理管道。只有在信任模型來源時,才應啟用此標志,以避免潛在的安全風險。導出的模型將被轉換為OpenVINO 的中間表示(IR)格式,并針對Intel硬件進行優化,以提升推理效率和計算性能。
如果小伙伴不方便從 HuggingFace 的網站直接下載模型的,也可以利用以下命令,直接從魔搭社區OpenVINO 模型專區下載由 OpenVINO 預優化后的模型:
modelscope download --model OpenVINO/dolly-v2-3b-fp16-ov modelscope download --model OpenVINO/dolly-v2-7b-fp16-ov
OpenVINO 模型專區https://www.modelscope.cn/organization/OpenVINO
步驟4: 在 Python 中運行推測式解碼流程
在成功導出草稿模型(Draft Model)和主模型(Main Model)后,下一步是在 Python 中運行推測式解碼流程,以演示 OpenVINO 如何利用兩個模型協同加速 token 生成。
1.安裝部署依賴包
在運行推測式解碼流水線之前,需要安裝必要的運行時依賴。請執行以下命令:
pip install -r ../../deployment-requirements.txt
2. 配置并運行推測式解碼流水線
OpenVINO 提供的 speculative_decoding_lm.py 腳本可用于運行推測式解碼流程。請使用以下命令執行該腳本:
python speculative_decoding_lm.py dolly-v2-7b dolly-v2-3b "Your input prompt here"
在運行推測式解碼流水線時,需要提供以下參數:
dolly-v2-7b:主模型(Main Model)的路徑,用于驗證和優化 token 結果。
dolly-v2-3b:草稿模型(Draft Model)的路徑,用于快速生成 token 候選項。
"Your input prompt here":輸入提示詞,模型將根據該文本生成響應。
推測式解碼流水線代碼片段
推測式解碼流水線的配置確保了最佳性能和高準確度。其中,SchedulerConfig 負責定義token 緩存策略以及草稿模型生成的候選 token 數量。
# Specify hardware devices for each model main_device = 'CPU' # Optionally, 'GPU' can be used draft_device = 'CPU' scheduler_config = openvino_genai.SchedulerConfig() scheduler_config.cache_size = 2 scheduler_config.num_assistant_tokens = 5 draft_model = openvino_genai.draft_model(args.draft_model_dir, draft_device) pipe = openvino_genai.LLMPipeline( args.model_dir, main_device, scheduler_config=scheduler_config, draft_model=draft_model ) config = openvino_genai.GenerationConfig() config.max_new_tokens = 100 config.num_assistant_tokens = 5 pipe.generate(args.prompt, config, streamer)
在推測式解碼過程中,以下參數對性能優化至關重要:
cache_size緩存大小:指定緩存中存儲的token 數量,以便在推測式解碼過程中復用,減少重復計算。
num_assistant_tokens:決定草稿模型在每次迭代中生成的 token 候選項 數量。
assistant_confidence_threshold (可選): 設置一個置信度閾值,當草稿模型的預測 token 置信度高于此值時,直接接受該 token,而無需主模型進一步驗證。
main_device 以及draft_device:定義主模型和草稿模型運行的計算設備,可在 CPU 或 GPU 上執行推理。
步驟5: 使用 C++ 構建推測式解碼項目
對于偏好 C++的開發者,OpenVINO GenAI API 提供了 C++ 版本的推測式解碼實現,以提高推理性能。
環境準備:
要設置和構建該項目,可以參考該篇博客中關于構建OpenVINO GenAI C++應用的通用步驟。這些說明涵蓋了常見的設置流程,例如:安裝必需的工具(CMake、Visual Studio、Python),運行 setupvars.bat 文件,導航到適當的目錄。
How to Build OpenVINO GenAI APP in C++
https://medium.com/openvino-toolkit/how-to-build-openvino-genai-app-in-c-32dcbe42fa67#e2a3
下面,我們將重點介紹運行 C++ 版推測式解碼示例 的具體步驟。
構建C++項目
環境設置完成后,導航到 samples/cpp/ 目錄,并運行以下腳本以構建項目:
build_samples_msvc.bat
該腳本會編譯運行 推測式解碼所需的C++文件。
構建完成后,可執行文件 speculative_decoding.exe 將存放在構建過程中指定的輸出路徑中。
運行推測式解碼應用:
現在可以運行生成的可執行文件,使用之前準備好的草稿模型和主模型進行推測式解碼。請確保提供正確的模型路徑:
speculative_decoding_lm dolly-v2–3b dolly-v2–7b “Why is the Sun yellow?”
該命令將使用草稿模型和主模型來加速提供的提示文本的 token 生成過程。
步驟6: 探索預優化模型(Notebook)
通過 FastDraft 和 OpenVINO 實現推測式解碼的文本生成 Text Generation via Speculative Decoding Notebook 提供了實踐演示,展示如何使用預優化的OpenVINO 模型實現推測式解碼。這些模型使開發者能夠快速評估推測式解碼的優勢,而無需進行復雜的手動配置。
Text Generation via Speculative https://github.com/openvinotoolkit/openvino_notebooks/blob/999fb8859e4abc44ad110a28e88ef0800fc23437/notebooks/speculative-sampling/speculative-sampling.ipynbDecodingNotebook
FastDraft 由 Intel Research 在論文 Fast Inference from Transformers via Speculative Decoding 中提出,該方法通過使用較小的、針對硬件優化的草稿模型與完整規模的主模型協同工作,從而顯著加速LLM推理。
Fast Inference from Transformers via Speculative Decoding
https://arxiv.org/abs/2211.17192
該方法的核心在于草稿模型經過預訓練,并與主模型對齊,確保在詞匯、結構和期望輸出 方面保持兼容性。這種對齊至關重要,因為只有專門設計用于配合主模型的草稿模型才能在推測式解碼過程中發揮有效作用。
要開始使用,OpenVINO GenAI API 提供了預優化模型,以下步驟演示了草稿模型和主模型的設置:
from pathlib import Path import huggingface_hub as hf_hub draft_model_id = "OpenVINO/Phi-3-mini-FastDraft-50M-int8-ov" target_model_id = "OpenVINO/Phi-3-mini-4k-instruct-int4-ov" hf_hub.snapshot_download(draft_model_id, local_dir="draft_model") hf_hub.snapshot_download(target_model_id, local_dir="main_model")
為了直觀展示推測式解碼的影響,以下是無推測式解碼與使用推測式解碼進行推理的對比。該對比實驗包含在 OpenVINO Notebook 教程中,能夠清晰體現推測式解碼對推理速度和計算效率的提升。
OpenVINO Notebook 教程
https://github.com/openvinotoolkit/openvino_notebooks/blob/999fb8859e4abc44ad110a28e88ef0800fc23437/notebooks/speculative-sampling/speculative-sampling.ipynb
無推測式解碼:模型完全在CPU上運行,按順序逐個處理 token,對于大語言模型來說,推理速度較慢,延遲較高。
使用推測式解碼:草稿模型 利用 GPU 加速 token 生成,通過預測多個token候選項,而主模型在CPU上運行,驗證并優化這些候選項。這種任務分配方式 顯著降低了推理延遲,同時提升了計算效率。
雖然預優化模型簡化了推測式解碼的實現,但要獲得最佳性能,仍需高效利用硬件資源。FastDraft 論文強調了合理分配硬件資源 以匹配草稿模型和主模型計算負載的重要性。
通過優化計算任務的分配,開發者可以進一步降低延遲并提升吞吐量,例如:
小規模部署:采用 CPU+GPU 組合,使草稿模型在GPU上加速推理,而主模型 在CPU上執行驗證,提高運行效率。
高吞吐場景:使用多GPU部署,讓多個推測式解碼流程并行運行,實現實時應用的擴展優化。
這種硬件協同優化對于實時AI應用推測式解碼擴展至關重要。
推測式解碼通過將大部分 token 生成任務卸載至草稿模型,在確保輸出質量的同時,顯著降低推理延遲并提高吞吐量。OpenVINO 基于這些原理,提供專為推測式解碼優化的預訓練模型,既簡化了開發流程,又提升了性能和可擴展性。
4小結
推測式解碼由 OpenVINO GenAI 提供支持,它不僅僅是一種技術優化,更是智能、響應迅速的 AI 系統未來發展的前瞻性探索。隨著我們不斷突破 AI 的可能性,像 OpenVINO 這樣的工具將在將潛力轉化為現實的過程中發揮關鍵作用。
立即探索 OpenVINO GenAI API,讓您的 AI 項目煥發新生,體驗高性能、可擴展性的下一代大語言模型推理。不論是構建實時聊天機器人還是擴展創意AI應用,OpenVINO都將助力您以前所未有的方式實現 高效、可擴展的 AI 推理。
-
AI
+關注
關注
87文章
33443瀏覽量
274016 -
聊天機器人
+關注
關注
0文章
346瀏覽量
12631 -
LLM
+關注
關注
1文章
316瀏覽量
628 -
OpenVINO
+關注
關注
0文章
111瀏覽量
377
原文標題:用 OpenVINO? GenAI解鎖 LLM 極速推理:推測式解碼讓 AI 爆發潛能
文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
同步模式下OpenVINO2023 SDK的推理方式

為什么無法在運行時C++推理中讀取OpenVINO?模型?
指紋解鎖極速可達0.25s!
Hugging Face LLM部署大語言模型到亞馬遜云科技Amazon SageMaker推理示例

如何利用OpenVINO加速LangChain中LLM任務
解鎖LLM新高度—OpenVINO? 2024.1賦能生成式AI高效運行
LLM大模型推理加速的關鍵技術
OpenVINO2024 C++推理使用技巧
詳解 LLM 推理模型的現狀

評論