新聞中心

        EEPW首頁 > 智能計算 > 設計應用 > 用 OpenVINO? GenAI解鎖 LLM 極速推理:推測式解碼讓 AI 爆發潛能

        用 OpenVINO? GenAI解鎖 LLM 極速推理:推測式解碼讓 AI 爆發潛能

        作者:武卓 時間:2025-03-26 來源:OpenVINO 中文社區 收藏

        隨著 DeepSeek、 GPT 和 Llama 等大語言模型(LLMs)不斷推動人工智能的邊界,它們在高效部署方面也帶來了重大挑戰。這些模型在生成類似人類的文本方面具有革命性,但每生成一個 token 都需要耗費巨大的計算資源。這不僅導致成本上升、能耗增加,還使響應速度變慢。在實時應用場景,如聊天機器人、虛擬助手和創意內容生成工具等場景中,這些挑戰尤為突出。

        本文引用地址:http://www.104case.com/article/202503/468645.htm

        本文將探討如何利用 ? 的推測式解碼技術使這一變革性創新成為現實。借助于簡化開發和優化硬件利用率的工具,? 使開發者能夠在各種實時和資源受限的場景中部署高性能的 LLMs。無論您是在構建響應迅速的聊天機器人、高效的虛擬助手,還是具備可擴展性的創意應用,? 正在重新定義 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 助手:適用于計算資源受限的環境。

        ● 大規模應用的動態內容生成:支持高效且可擴展的內容創作。

        3.  OpenVINO? :從創新到落地

        盡管推測式解碼的概念極具潛力,但要高效實現這一技術并不簡單。需要協調預測 token 生成、驗證以及模型優化,并確保在不同硬件平臺上高效運行,這對開發者提出了較高的要求。這正是 OpenVINO? 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.ipynbDecoding Notebook

        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 推理。



        關鍵詞: OpenVINO GenAI 推理

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 连江县| 晋城| 宕昌县| 宝清县| 北京市| 临高县| 鹿泉市| 方正县| 永丰县| 宜章县| 平武县| 勐海县| 从江县| 布拖县| 白水县| 灵山县| 万安县| 黄浦区| 白银市| 恭城| 铜川市| 义马市| 静海县| 仁怀市| 平阳县| 祁连县| 潜山县| 礼泉县| 左云县| 东兴市| 突泉县| 浏阳市| 玛沁县| 故城县| 尚志市| 南丰县| 方城县| 洞口县| 茌平县| 福安市| 林州市|