用 OpenVINO? GenAI解鎖 LLM 極速推理:推測式解碼讓 AI 爆發(fā)潛能
隨著(zhù) DeepSeek、 GPT 和 Llama 等大語(yǔ)言模型(LLMs)不斷推動(dòng)人工智能的邊界,它們在高效部署方面也帶來(lái)了重大挑戰。這些模型在生成類(lèi)似人類(lèi)的文本方面具有革命性,但每生成一個(gè) token 都需要耗費巨大的計算資源。這不僅導致成本上升、能耗增加,還使響應速度變慢。在實(shí)時(shí)應用場(chǎng)景,如聊天機器人、虛擬助手和創(chuàng )意內容生成工具等場(chǎng)景中,這些挑戰尤為突出。
本文引用地址:http://dyxdggzs.com/article/202503/468645.htm本文將探討如何利用 OpenVINO? GenAI 的推測式解碼技術(shù)使這一變革性創(chuàng )新成為現實(shí)。借助于簡(jiǎn)化開(kāi)發(fā)和優(yōu)化硬件利用率的工具,OpenVINO? 使開(kāi)發(fā)者能夠在各種實(shí)時(shí)和資源受限的場(chǎng)景中部署高性能的 LLMs。無(wú)論您是在構建響應迅速的聊天機器人、高效的虛擬助手,還是具備可擴展性的創(chuàng )意應用,OpenVINO? 正在重新定義 AI 推理的可能性。
1. 性能瓶頸
想象這樣一個(gè)場(chǎng)景:聊天機器人響應緩慢,或者創(chuàng )意寫(xiě)作助手難以跟上用戶(hù)的思維節奏。這些并非假設的問(wèn)題,而是當今 AI 開(kāi)發(fā)者和用戶(hù)面臨的現實(shí)挑戰。傳統的大語(yǔ)言模型 (LLMs) 推理方法按序處理 token,導致計算瓶頸,進(jìn)而影響用戶(hù)體驗。當在計算資源受限的硬件上部署大語(yǔ)言模型,同時(shí)又要保持高性能時(shí),這一問(wèn)題變得更加嚴峻。
2. 推測式解碼:一項顛覆性的解決方案
推測式解碼(Speculative Decoding)作為一種突破性技術(shù),從根本上改變了大語(yǔ)言模型(LLM)的推理方式。通過(guò)引入一個(gè)較小的草稿模型(draft model)與完整的大模型(main model)協(xié)同工作,推測式解碼大幅加速了 token 生成。該方法最早在論文 “Fast Inference from Transformers via Speculative Decoding”(arXiv:2211.17192)中提出,其核心機制是讓草稿模型提前預測多個(gè) token,并由主模型定期驗證這些預測是否符合預期,必要時(shí)進(jìn)行修正。這種迭代式方法減少了生成 token 所需的完整計算次數,從而在實(shí)時(shí)應用中實(shí)現顯著(zhù)的加速效果。
● Fast Inference from Transformers via Speculative Decoding https://arxiv.org/abs/2211.17192
可以把它類(lèi)比成一個(gè)協(xié)同寫(xiě)作的過(guò)程:草稿模型快速提出建議,而主模型則進(jìn)行仔細審核并優(yōu)化。主模型會(huì )評估這些建議的相關(guān)性和質(zhì)量,并在必要時(shí)進(jìn)行調整。這種協(xié)作方式確保了生成內容的高質(zhì)量,同時(shí)大幅減少主模型從零生成每個(gè) token 的計算負擔。通過(guò)利用草稿模型的高速度和主模型的高準確性,整體推理過(guò)程變得更快且更加高效。
這種迭代式的方法通過(guò)將大部分 token 生成任務(wù)交給草稿模型處理,從而顯著(zhù)減輕主模型的計算負擔。在 LLM 處理中,token 指的是文本的基本單位,如單詞或子詞。推測式解碼通過(guò)同時(shí)使用兩個(gè)模型來(lái)加速 token 生成:
● 輔助模型(草稿模型):快速生成 token 候選項。
● 主模型:驗證并優(yōu)化這些候選項,以確保生成的文本質(zhì)量。
這一方法不僅提高了推理速度,還優(yōu)化了計算資源的利用,使 LLM 部署在計算受限環(huán)境中更加可行。
推測式解碼能夠快速生成高準確度的響應,使其成為對時(shí)延敏感場(chǎng)景的顛覆性技術(shù),尤其適用于以下應用:
● 實(shí)時(shí)聊天機器人:提供流暢的客戶(hù)交互體驗。
● 端側 AI 助手:適用于計算資源受限的環(huán)境。
● 大規模應用的動(dòng)態(tài)內容生成:支持高效且可擴展的內容創(chuàng )作。
3. OpenVINO? GenAI:從創(chuàng )新到落地
盡管推測式解碼的概念極具潛力,但要高效實(shí)現這一技術(shù)并不簡(jiǎn)單。需要協(xié)調預測 token 生成、驗證以及模型優(yōu)化,并確保在不同硬件平臺上高效運行,這對開(kāi)發(fā)者提出了較高的要求。這正是 OpenVINO? GenAI API 發(fā)揮作用的地方。
OpenVINO? GenAI 簡(jiǎn)化 AI 開(kāi)發(fā),提供以下關(guān)鍵優(yōu)勢:
● 預優(yōu)化的生成式 AI 模型,簡(jiǎn)化部署,降低開(kāi)發(fā)復雜度。
● 針對 Intel? CPU、NPU 和 GPU 的硬件加速,提升推理性能。
● Optimum CLI 工具,支持模型的便捷導出與優(yōu)化。
通過(guò)無(wú)縫集成推測式解碼,OpenVINO? 讓開(kāi)發(fā)者能夠專(zhuān)注于構建高效、優(yōu)質(zhì)的 AI 體驗,同時(shí)最大程度降低計算負擔。在理想情況下,草稿模型的預測完全符合主模型的預期,使得驗證過(guò)程可以在單次請求內完成。這種協(xié)作方式不僅提升了性能,還有效減少了資源消耗,為 AI 推理帶來(lái)全新優(yōu)化方案。
步驟1: 克隆 OpenVINO? GenAI 倉庫
要使用 OpenVINO? GenAI API 實(shí)現推測式解碼,首先需要克隆 openvino.genai GitHub 倉庫。該倉庫包含推測式解碼的示例實(shí)現,支持 Python 和 C++,可幫助開(kāi)發(fā)者快速上手并部署高效的 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: 安裝依賴(lài)項(Python)
要運行 OpenVINO? GenAI的推測式解碼示例,需要配置環(huán)境并安裝必要的工具、庫和相關(guān)依賴(lài)項。請按照以下步驟正確安裝所需組件。
1.創(chuàng )建 Python 虛擬環(huán)境
虛擬環(huán)境可以隔離項目依賴(lài),確保一個(gè)干凈、無(wú)沖突的開(kāi)發(fā)環(huán)境。使用以下命令創(chuàng )建并激活虛擬環(huán)境:
python3 -m venv openvino_env source openvino_env/bin/activate # For Windows: openvino_envScriptsactivate
2.安裝必要的庫
為了將模型導出為 OpenVINO? 兼容格式,需要安裝相關(guān)依賴(lài)項。運行以下命令安裝必要的庫:
pip install --upgrade-strategy eager -r ../../export-requirements.txt
此命令確保所有必需的庫都已安裝并可正常使用,包括 OpenVINO? GenAI、Hugging Face 工具 和 Optimum CLI。這些組件將支持推測式解碼 的實(shí)現,使開(kāi)發(fā)者能夠高效導出和優(yōu)化模型,從而加速 LLM 推理過(guò)程。
步驟3: 使用 Optimum CLI 導出模型
為了啟用推測式解碼,需要準備草稿模型(Draft Model)和主模型(Main Model),并將它們導出為OpenVINO 兼容格式。這樣可以確保模型經(jīng)過(guò)優(yōu)化,以便在Intel?硬件上高效運行。
1. 導出 Dolly v2–3B(草稿模型)
Dolly v2–3B 將用作推測式解碼過(guò)程中的草稿模型。請使用以下命令將其導出為 OpenVINO? 兼容格式:
optimum-cli export openvino --trust-remote-code --weight-format fp16 --model databricks/dolly-v2-3b dolly-v2-3b
在導出過(guò)程中,將執行以下關(guān)鍵步驟:
● 從 Hugging Face 下載模型和分詞器:自動(dòng)獲取 Dolly v2–3B 及其對應的 tokenizer。
● 轉換為 OpenVINO? 的中間表示(IR)格式:模型被優(yōu)化為 OpenVINO? 兼容的推理格式,以提高執行效率。
● 降精度至 FP16:模型的精度會(huì )被降低為 FP16,以?xún)?yōu)化計算性能,減少內存占用,并在 Intel 硬件(CPU、GPU、NPU)上獲得更快的推理速度。
2. 導出 Dolly v2–7B(主模型)
Dolly v2–7B 作為主模型(Main Model),負責驗證并優(yōu)化草稿模型生成的token,確保最終輸出的質(zhì)量和準確性。請使用以下命令將其導出為OpenVINO? 兼容格式:
optimum-cli export openvino --trust-remote-code --weight-format fp16 --model databricks/dolly-v2-7b dolly-v2-7b
--trust-remote-code 標志確保在導出過(guò)程中包含模型的自定義實(shí)現,使其能夠正確適配 OpenVINO? 推理管道。只有在信任模型來(lái)源時(shí),才應啟用此標志,以避免潛在的安全風(fēng)險。導出的模型將被轉換為OpenVINO? 的中間表示(IR)格式,并針對Intel硬件進(jìn)行優(yōu)化,以提升推理效率和計算性能。
如果小伙伴不方便從 HuggingFace 的網(wǎng)站直接下載模型的,也可以利用以下命令,直接從魔搭社區OpenVINO? 模型專(zhuān)區下載由 OpenVINO? 預優(yōu)化后的模型:
modelscope download --model OpenVINO/dolly-v2-3b-fp16-ov modelscope download --model OpenVINO/dolly-v2-7b-fp16-ov
● OpenVINO? 模型專(zhuān)區https://www.modelscope.cn/organization/OpenVINO
步驟4: 在 Python 中運行推測式解碼流程
在成功導出草稿模型(Draft Model)和主模型(Main Model)后,下一步是在 Python 中運行推測式解碼流程,以演示 OpenVINO? 如何利用兩個(gè)模型協(xié)同加速 token 生成。
1. 安裝部署依賴(lài)包
在運行推測式解碼流水線(xiàn)之前,需要安裝必要的運行時(shí)依賴(lài)。請執行以下命令:
pip install -r ../../deployment-requirements.txt
2. 配置并運行推測式解碼流水線(xiàn)
OpenVINO? 提供的 speculative_decoding_lm.py 腳本可用于運行推測式解碼流程。請使用以下命令執行該腳本:
python speculative_decoding_lm.py dolly-v2-7b dolly-v2-3b "Your input prompt here"
在運行推測式解碼流水線(xiàn)時(shí),需要提供以下參數:
● dolly-v2-7b:主模型(Main Model)的路徑,用于驗證和優(yōu)化 token 結果。
● dolly-v2-3b:草稿模型(Draft Model)的路徑,用于快速生成 token 候選項。
● "Your input prompt here":輸入提示詞,模型將根據該文本生成響應。
推測式解碼流水線(xiàn)代碼片段
推測式解碼流水線(xiàn)的配置確保了最佳性能和高準確度。其中,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)
在推測式解碼過(guò)程中,以下參數對性能優(yōu)化至關(guān)重要:
● cache_size緩存大?。褐付ň彺嬷写鎯Φ膖oken 數量,以便在推測式解碼過(guò)程中復用,減少重復計算。
● num_assistant_tokens:決定草稿模型在每次迭代中生成的 token 候選項 數量。
● assistant_confidence_threshold (可選): 設置一個(gè)置信度閾值,當草稿模型的預測 token 置信度高于此值時(shí),直接接受該 token,而無(wú)需主模型進(jìn)一步驗證。
● main_device 以及draft_device:定義主模型和草稿模型運行的計算設備,可在 CPU 或 GPU 上執行推理。
步驟5: 使用 C++ 構建推測式解碼項目
對于偏好 C++的開(kāi)發(fā)者,OpenVINO? GenAI API 提供了 C++ 版本的推測式解碼實(shí)現,以提高推理性能。
環(huán)境準備:
要設置和構建該項目,可以參考該篇博客中關(guān)于構建OpenVINO GenAI C++應用的通用步驟。這些說(shuō)明涵蓋了常見(jiàn)的設置流程,例如:安裝必需的工具(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
下面,我們將重點(diǎn)介紹運行 C++ 版推測式解碼示例 的具體步驟。
構建C++項目
環(huán)境設置完成后,導航到 samples/cpp/ 目錄,并運行以下腳本以構建項目:
build_samples_msvc.bat
該腳本會(huì )編譯運行 推測式解碼所需的C++文件。
構建完成后,可執行文件 speculative_decoding.exe 將存放在構建過(guò)程中指定的輸出路徑中。
運行推測式解碼應用:
現在可以運行生成的可執行文件,使用之前準備好的草稿模型和主模型進(jìn)行推測式解碼。請確保提供正確的模型路徑:
speculative_decoding_lm dolly-v2–3b dolly-v2–7b “Why is the Sun yellow?”
該命令將使用草稿模型和主模型來(lái)加速提供的提示文本的 token 生成過(guò)程。
步驟6: 探索預優(yōu)化模型(Notebook)
通過(guò) FastDraft 和 OpenVINO? 實(shí)現推測式解碼的文本生成 Text Generation via Speculative Decoding Notebook 提供了實(shí)踐演示,展示如何使用預優(yōu)化的OpenVINO? 模型實(shí)現推測式解碼。這些模型使開(kāi)發(fā)者能夠快速評估推測式解碼的優(yōu)勢,而無(wú)需進(jìn)行復雜的手動(dòng)配置。
● Text Generation via Speculative https://github.com/openvinotoolkit/openvino_notebooks/blob/999fb8859e4abc44ad110a28e88ef0800fc23437/notebooks/speculative-sampling/speculative-sampling.ipynbDecoding Notebook
FastDraft 由 Intel Research 在論文 Fast Inference from Transformers via Speculative Decoding 中提出,該方法通過(guò)使用較小的、針對硬件優(yōu)化的草稿模型與完整規模的主模型協(xié)同工作,從而顯著(zhù)加速LLM推理。
● Fast Inference from Transformers via Speculative Decoding
https://arxiv.org/abs/2211.17192
該方法的核心在于草稿模型經(jīng)過(guò)預訓練,并與主模型對齊,確保在詞匯、結構和期望輸出 方面保持兼容性。這種對齊至關(guān)重要,因為只有專(zhuān)門(mén)設計用于配合主模型的草稿模型才能在推測式解碼過(guò)程中發(fā)揮有效作用。
要開(kāi)始使用,OpenVINO? GenAI API 提供了預優(yōu)化模型,以下步驟演示了草稿模型和主模型的設置:
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")
為了直觀(guān)展示推測式解碼的影響,以下是無(wú)推測式解碼與使用推測式解碼進(jìn)行推理的對比。該對比實(shí)驗包含在 OpenVINO? Notebook 教程中,能夠清晰體現推測式解碼對推理速度和計算效率的提升。
● OpenVINO? Notebook 教程
https://github.com/openvinotoolkit/openvino_notebooks/blob/999fb8859e4abc44ad110a28e88ef0800fc23437/notebooks/speculative-sampling/speculative-sampling.ipynb
● 無(wú)推測式解碼:模型完全在CPU上運行,按順序逐個(gè)處理 token,對于大語(yǔ)言模型來(lái)說(shuō),推理速度較慢,延遲較高。
● 使用推測式解碼:草稿模型 利用 GPU 加速 token 生成,通過(guò)預測多個(gè)token候選項,而主模型在CPU上運行,驗證并優(yōu)化這些候選項。這種任務(wù)分配方式 顯著(zhù)降低了推理延遲,同時(shí)提升了計算效率。
雖然預優(yōu)化模型簡(jiǎn)化了推測式解碼的實(shí)現,但要獲得最佳性能,仍需高效利用硬件資源。FastDraft 論文強調了合理分配硬件資源 以匹配草稿模型和主模型計算負載的重要性。
通過(guò)優(yōu)化計算任務(wù)的分配,開(kāi)發(fā)者可以進(jìn)一步降低延遲并提升吞吐量,例如:
● 小規模部署:采用 CPU+GPU 組合,使草稿模型在GPU上加速推理,而主模型 在CPU上執行驗證,提高運行效率。
● 高吞吐場(chǎng)景:使用多GPU部署,讓多個(gè)推測式解碼流程并行運行,實(shí)現實(shí)時(shí)應用的擴展優(yōu)化。
這種硬件協(xié)同優(yōu)化對于實(shí)時(shí)AI應用推測式解碼擴展至關(guān)重要。
推測式解碼通過(guò)將大部分 token 生成任務(wù)卸載至草稿模型,在確保輸出質(zhì)量的同時(shí),顯著(zhù)降低推理延遲并提高吞吐量。OpenVINO? 基于這些原理,提供專(zhuān)為推測式解碼優(yōu)化的預訓練模型,既簡(jiǎn)化了開(kāi)發(fā)流程,又提升了性能和可擴展性。
4 小結
推測式解碼由 OpenVINO? GenAI 提供支持,它不僅僅是一種技術(shù)優(yōu)化,更是智能、響應迅速的 AI 系統未來(lái)發(fā)展的前瞻性探索。隨著(zhù)我們不斷突破 AI 的可能性,像 OpenVINO? 這樣的工具將在將潛力轉化為現實(shí)的過(guò)程中發(fā)揮關(guān)鍵作用。
立即探索 OpenVINO? GenAI API,讓您的 AI 項目煥發(fā)新生,體驗高性能、可擴展性的下一代大語(yǔ)言模型推理。不論是構建實(shí)時(shí)聊天機器人還是擴展創(chuàng )意AI應用,OpenVINO? 都將助力您以前所未有的方式實(shí)現 高效、可擴展的 AI 推理。
評論