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