隨著DeepSeek、 GPT和Llama等大型語言模型(LLMs)不斷推動人工智慧(AI)的邊界,它們在高效部署方面也帶來了重大挑戰。這些模型在生成類似人類的文字方面具有革命性,但每生成一個token都需要耗費巨大的運算資源。這不僅導致成本上升、能耗增加,還使回應速度變慢。在即時應用場景,如聊天機器人、虛擬助手和創意內容生成工具等場景中,這些挑戰尤為突出。
本文將探討如何利用OpenVINO GenAI的推測式解碼技術使這一變革性創新成為現實。借助簡化開發和最佳化硬體利用率的工具,OpenVINO使開發者能夠在各種即時和資源受限的場景中部署高性能的LLM。無論您是在構建回應迅速的聊天機器人、高效的虛擬助手,還是具備可擴展性的創意應用,OpenVINO正在重新定義AI推論的可能性。
性能瓶頸
想像這樣一個場景:聊天機器人回應緩慢,或者創意寫作助手難以跟上使用者的思維節奏。這些並非假設性問題,而是今日AI開發者和使用者面臨的現實挑戰。傳統的LLM推論方法按序處理token,導致運算瓶頸,進而影響使用者體驗。當在運算資源受限的硬體上部署大語言模型,同時又要保持高性能時,這一問題變得更加嚴峻。
推測式解碼:一項顛覆性的解決方案
推測式解碼(Speculative Decoding)作為一種突破性技術,從根本上改變了LLM的推論方式。透過導入一個較小的草稿模型(draft model)與完整的大模型(main model)協同工作,推測式解碼大幅加速了token生成。該方法最早在論文 《Fast Inference from Transformers via Speculative Decoding (arXiv:2211.17192)》中提出,其核心機制是讓草稿模型提前預測多個token,並由主模型定期驗證這些預測是否符合預期,必要時進行修正。這種迭代式方法減少了生成token所需的完整運算次數,從而在即時應用中實現顯著的加速效果。
可以把它比喻成一個協同寫作的過程:草稿模型快速提出建議,而主模型則進行仔細審核並最佳化。主模型會評估這些建議的相關性和品質,並在必要時進行調整。這種協作方式確保了生成內容的高品質,同時大幅減少主模型從零生成每個token的運算負擔。透過利用草稿模型的高速度和主模型的高準確性,整體推論過程變得更快且更加高效。
這種迭代式的方法透過將大部分token生成任務交給草稿模型處理,從而顯著減輕主模型的運算負擔。在 LLM 處理中,token指的是文字的基本單位,如單詞或子詞。推測式解碼透過同時使用兩個模型來加速 token 生成:
- 輔助模型(草稿模型):快速生成token候選項。
- 主模型:驗證並最佳化這些候選項,以確保生成的文字品質。
此方法不僅提高了推論速度,還最佳化了運算資源的利用,使 LLM 部署在運算受限環境中更加可行。
推測式解碼能夠快速生成高準確度的回應,使其成為對延遲敏感場景的顛覆性技術,尤其適合以下應用:
- 即時聊天機器人:提供流暢的客戶互動體驗。
- 端側AI助手:適用運算資源受限的環境。
- 大規模應用的動態內容生成:支援高效且可擴展的內容創作。
OpenVINO GenAI:從創新到落地
儘管推測式解碼的概念極具潛力,但要高效實現此技術並不簡單,需要協調預測token生成、驗證以及模型最佳化,並確保在不同硬體平台上高效運作。這對開發者提出了較高的要求,而這正是 OpenVINO GenAI API可發揮作用的地方。
OpenVINO GenAI簡化AI開發,提供以下關鍵優勢:
- 預先最佳化的生成式AI模型,簡化部署、降低開發複雜度。
- 針對Intel CPU、NPU和GPU的硬體加速,提升推論性能。
- Optimum CLI工具,支援模型的便捷匯出與最佳化。
透過無縫整合推測式解碼,OpenVINO讓開發者能夠專注於構建高效、優質的AI體驗,同時最大程度降低運算負擔。在理想情況下,草稿模型的預測完全符合主模型的預期,使得驗證過程可以在單次請求內完成。這種協作方式不僅提升了性能,還有效減少了資源消耗,為AI推論帶來全新最佳化方案。
AI正以前所未有的速度發展,Intel的OpenVINO將助力開發者更輕鬆、高效率部署生成式AI應用。2025年首場OpenVINO DevCon線上講座即將於5月8日開講,由Intel專家帶領聽眾探索最新版本OpenVINO如何解放AI功能、加速多模態生成式AI推論,有興趣的朋友千萬別錯過!點此報名~
步驟1: 複製OpenVINO GenAI資源庫
要使用OpenVINO GenAI API 實現推測式解碼,首先需要複製openvino.genai GitHub資源庫;該資源庫包含推測式解碼的實作範例,支援Python和C++,可幫助開發者快速上手並部署高效的LLM推論方案。
複製資源庫的步驟:
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 cpp/speculative_decoding_lm/
步驟2:安裝依賴項(Python)
要執行OpenVINO GenAI的推測式解碼範例,需要配置環境並安裝必要的工具、程式庫和相關依賴項。請按照以下步驟正確安裝所需元件。
1.創建Python虛擬環境
虛擬環境可以隔離專案依賴,確保一個乾淨、無衝突的開發環境。使用以下指令創建並啟動虛擬環境:
python3 -m venv openvino_env
source openvino_env/bin/activate # For Windows: openvino_env\Scripts\activate
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 作為主模型,負責驗證並最佳化草稿模型生成的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硬體進行最佳化,以提升推論效率和運算性能。
步驟4: 在Python中執行推測式解碼流程
在成功匯出草稿模型和主模型後,下一步是在Python中執行推測式解碼流程,以展示OpenVINO如何利用兩個模型協同加速token生成。
1. 安裝部署依賴套件
在執行推測式解碼流水線之前,需要安裝必要的Runtime依賴。請執行以下指令:
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:主模型的路徑,用於驗證和最佳化token結果。
- dolly-v2-3b:草稿模型的路徑,用於快速生成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++版本的推測式解碼實現,以提高推論性能。
環境準備:
要設置和構建該專案,可以參考「以C++語言構建OpenVINO GenAI應用程式就是這麼簡單!」這篇文章關於構建OpenVINO GenAI C++應用的通用步驟;其中的說明涵蓋了常見的設置流程,例如安裝必需的工具(CMake、Visual Studio、Python),執行setupvars.bat檔,導航到適當的目錄。
以下我們將重點介紹執行C++版推測式解碼範例的具體步驟。
構建C++項目
環境設置完成後,導航到 samples/cpp/ 目錄,並執行以下腳本以構建項目:
build_samples_msvc.bat
該腳本會編譯執行推測式解碼所需的C++檔。
構建完成後,可將執行檔 speculative_decoding.exe 存放在構建過程中指定的輸出路徑中。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏