0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用OpenVINO GenAI API的輕量級生成式AI

英特爾中國 ? 來源:英特爾中國 ? 2024-07-24 15:08 ? 次閱讀

隨著 ChatGPT 等聊天機(jī)器人的風(fēng)暴席卷全球,生成式預(yù)訓(xùn)練 Transformers (GPT) 在開發(fā)者中正在成為家喻戶曉的新名字。生成式 AI(GenAI) 的發(fā)展,尤其是大語言模型和聊天機(jī)器人的進(jìn)步很快、變化不斷,很難預(yù)測接下來會有什么突破,開發(fā)者應(yīng)該關(guān)注什么。我們知道生成式AI將繼續(xù)存在,開發(fā)人員希望看到在本地開發(fā)、維護(hù)和部署 AI 應(yīng)用程序的更簡潔明了的方法。

盡管生成式AI 令人興奮,但對這些模型運行推理仍面臨重大挑戰(zhàn),尤其是在邊緣設(shè)備和 AI PC 上。

OpenVINO

英特爾硬件上當(dāng)前最先進(jìn)的生成式AI

如今,為了在 Intel 硬件上獲得 生成式AI 的最佳性能,開發(fā)人員可以使用 Optimum Intel 和 OpenVINO 后端優(yōu)化的 Hugging Face 流水線來運行 生成式AI 模型。OpenVINO 可以在 CPU、GPU或NPU 上啟用優(yōu)化,這些可以顯著減少延遲并提高運行效率。此外,我們可以利用量化和權(quán)重壓縮等模型優(yōu)化技術(shù)來最小化內(nèi)存占用(減少 2-3 倍的內(nèi)存使用量)。這通常是模型部署中的主要瓶頸,因為客戶端或邊緣設(shè)備僅配備 32GB 或更少的 內(nèi)存。

圖 1:借助新的 OpenVINO 生成式AI API (GenAI API),我們可以在代碼編寫方面做得更好!如上圖所示,推理代碼僅減少到3行代碼!這種新的工作流程為開發(fā)者提供了一個低得多的的學(xué)習(xí)曲線,從而開始生成式AI 應(yīng)用程序的開發(fā)之旅。

不僅代碼行數(shù)大大減少了,而且安裝的依賴項只有寥寥幾個,從而形成了一個簡潔緊湊的環(huán)境,運行生成式AI 推理僅需216Mb!

圖 2:使用 OpenVINO GenAI API 部署解決方案不僅可以減少磁盤使用量,還可以簡化構(gòu)建生成式 AI 應(yīng)用的依賴性要求。這通常是開發(fā)人員開始維護(hù) 生成式AI 應(yīng)用程序時面臨的最大挑戰(zhàn)之一。

OpenVINO生成式AI API Optimum-Intel
附加的依賴項 非常輕 許多依賴項,包括 PyTorch 等
推理代碼 非常輕的編碼 基于Hugging Face
API Python, C++ Python
模型支持 大語言模型(其它生成式模型即將推出) 廣泛的模型集
采樣方法 貪心、波束搜索以及多項式解碼 全部
并行生成優(yōu)化 是的* (比如 Continues-batching, Paged-attention…) 不支持
分詞 通過 OpenVINO tokenizer模型完成 通過 Hugging Face tokenizer 完成(僅針對Python)
*特性持續(xù)開發(fā)中

表 1:OpenVINO GenAI API 與 Optimum-Intel 軟件包的比較

與 Optimum-Intel 相比,GenAI API 僅集成了最常用的采樣方法,包括貪心和波束搜索。同時,開發(fā)者還可以通過多項式解碼 來自定義采樣參數(shù),例如 Top-k、Temperature等。

考慮到多用戶的場景,GenAI API 僅原生實現(xiàn)了 Continues-batching、Paged-attention。在文本生成過程中,這些技術(shù)可以幫助提高性能并優(yōu)化在進(jìn)行多批次推理時的內(nèi)存消耗。

由于 Hugging Face 的分詞器只能與 Python 配合使用,為了與 OpenVINO C++ 運行時的輸入/輸出張量格式保持一致,GenAI API 將分別通過推理 2 個 OpenVINO 模型來對輸入文本分詞并對輸出解分詞。在這種方法之前,開發(fā)人員可以使用 Optimum-Intel CLI 將 Hugging Face 的分詞器轉(zhuǎn)換為 OpenVINO IR 模型。

到目前為止,我們已經(jīng)強調(diào)了使用新的 OpenVINO GenAI API 的一些關(guān)鍵優(yōu)勢。在下一節(jié)中,我們將更深入地了解如何逐步運行演示。

OpenVINO

使用 OpenVINO GenAI API 的輕量級生成式AI

安裝

設(shè)置新的 OpenVINO GenAI API 以在生成式 AI 和 LLM 上運行推理,設(shè)計簡單明了。安裝過程可以通過 PyPI 或下載存檔來執(zhí)行,讓您可以靈活地選擇最適合您需求的方法。例如,您可以使用以下內(nèi)容進(jìn)行 PyPI 安裝,該安裝包含在我們最新的 OpenVINO 2024.2 版本中:

python-mpipinstallopenvino-genai

關(guān)于安裝的更多信息可以在 https://docs.openvino.ai/2024/get-started/install-openvino/install-openvino-genai.html 找到。

運行推理

安裝 OpenVINO 后,您可以開始在 GenAI 和 LLM 模型上運行推理。通過利用此 API,您可以加載模型,向其傳遞上下文,并僅使用幾行代碼接收響應(yīng)。

在內(nèi)部,OpenVINO 處理輸入文本的標(biāo)記化,在您選擇的設(shè)備上執(zhí)行生成循環(huán),并提供最終響應(yīng)。讓我們根據(jù) openvino.genai(https://github.com/openvinotoolkit/openvino.genai/tree/master/samples/cpp/chat_sample) 存儲庫中提供的chat_sample(https://github.com/openvinotoolkit/openvino.genai/tree/master/samples/cpp/chat_sample)范例,在 Python 和 C++ 中逐步探索這個過程。

第一步: 必須使用 Hugging Face Optimum-Intel(在本例中,我們使用聊天調(diào)優(yōu)的 Tiny Llama)下載 LLM 模型并將其導(dǎo)出為 OpenVINO IR 格式。對于此步驟,建議創(chuàng)建一個單獨的虛擬環(huán)境,以避免任何依賴項沖突。例如

python-mvenvopenvino_venv

激活它,

openvino_venvScriptactivate

并安裝依賴項,這是模型導(dǎo)出過程所必需的。這些要求可在 openvino.genai 倉庫中找到

python-mpipinstall–upgrade-strategyeager-rrequirements.txt

要下載和導(dǎo)出模型,請使用以下命令。

optimum-cliexportopenvino--trust-remote-code--
modelTinyLlama/TinyLlama-1.1B-Chat-v1.0TinyLlama-1.1B-Chat-v1.0

為了提高 LLM 推理期間的性能,我們建議對模型權(quán)重使用較低的精度,例如 INT4。在模型導(dǎo)出過程中,您可以使用神經(jīng)網(wǎng)絡(luò)壓縮框架 (NNCF) 壓縮權(quán)重,如下所示。

optimum-cliexportopenvino--trust-remote-code--
modelTinyLlama/TinyLlama-1.1B-Chat-v1.0-–weight-formatint4TinyLlama-
1.1B-Chat-v1.0

此步驟中安裝的虛擬環(huán)境和依賴項不再需要,因為模型只需導(dǎo)出一次。請隨意從磁盤中刪除此虛擬環(huán)境。

第二步:通過 Python 或 C++ API 運行LLM文本生成的推理

通過新的 Python API 設(shè)置流水線:

pipe=ov_genai.LLMPipeline(model_path,"CPU")
print(pipe.generate("TheSunisyellowbecause"))

通過新的 C++ API 設(shè)置流水線:

intmain(intargc,char*argv[]){
std::stringmodel_path=argv[1];
ov::LLMPipelinepipe(model_path,"CPU");//targetdeviceisCPU
std::cout<

如上所示,構(gòu)建 LLM 生成流水線現(xiàn)在只需要幾行代碼。這種簡單性是由于從 Hugging Face Optimum-Intel 導(dǎo)出的模型已經(jīng)包含執(zhí)行所需的所有信息,包括 tokenizer/detokenizer 和生成配置,確保結(jié)果與 Hugging Face 生成一致。我們提供 C++ 和 Python API 來運行 LLM,對應(yīng)用程序的依賴性和添加性最少。

提供的代碼在 CPU 上運行,但通過將設(shè)備名稱替換為“GPU”,可以很容易地使其在 GPU 上運行:

pipe=ov_genai.LLMPipeline(model_path,"GPU")

為了創(chuàng)建更具交互性的用戶界面,我們添加了對流式模型輸出標(biāo)記的支持,以便在模型生成輸出詞后立即提供輸出詞,也可以通過從流處理器返回 True 來隨時停止令牌生成。

此外,有狀態(tài)模型(https://docs.openvino.ai/2024/openvino-workflow/running-inference/stateful-models.html)在內(nèi)部運行,用于推理文本生成,從而加快生成速度并減少由于數(shù)據(jù)表示轉(zhuǎn)換而產(chǎn)生的開銷。因此,在輸入之間保持 KV緩存被證明可能是有益的。用針對聊天的特定方法 start_chat 和 finish_chat標(biāo)記對話會話來加以實現(xiàn),如以下示例所示。

Python:

importargparse
importopenvino_genai




defstreamer(subword):
print(subword,end='',flush=True)
#Returnflagcorrespodswhethergenerationshouldbestopped.
#Falsemeanscontinuegeneration.
returnFalse
model_path=TinyLlama-1.1B-Chat-v1.0


device='CPU'#GPUcanbeusedaswell
pipe=openvino_genai.LLMPipeline(args.model_dir,device)


config=openvino_genai.GenerationConfig()
config.max_new_tokens=100


pipe.start_chat()
whileTrue:
prompt=input('question:
')
if'Stop!'==prompt:
break
pipe.generate(prompt,config,streamer)


print('
----------')
pipe.finish_chat()

C++:

#include"openvino/genai/llm_pipeline.hpp"


intmain(intargc,char*argv[])try{
if(2!=argc){
throwstd::runtime_error(std::string{"Usage:"}+argv[0]+"");
}
std::stringprompt;
std::stringmodel_path=argv[1];


std::stringdevice="CPU";//GPUcanbeusedaswell
ov::LLMPipelinepipe(model_path,"CPU");

ov::GenerationConfigconfig;
config.max_new_tokens=100;
std::functionstreamer=[](std::stringword){
std::cout<

最后,以下是我們在 AI PC 上運行上述示例時得到的結(jié)果:

圖 3:在 AI PC 上本地運行的基于 Llama 的聊天機(jī)器人的現(xiàn)場演示

總而言之 ,GenAI API 包括以下 API,可實現(xiàn)輕量級部署和代碼編寫:

generation_config – 用于啟用生成過程自定義的配置,例如生成文本的最大長度、是否忽略句尾標(biāo)記以及解碼策略(貪心、波束搜索或多項式采樣)的細(xì)節(jié)。

llm_pipeline - 提供用于文本生成的類和實用程序,包括用于處理輸入、生成文本和使用可配置選項管理輸出的流水線。

streamer_base - 用于創(chuàng)建 Streamer 的抽象基類。

tokenizer - 用于文本編碼和解碼的 Tokenizer 類。

visibility - 控制 生成式AI 庫的可見性。

OpenVINO

總結(jié)

最新 OpenVINO 2024.2 版本中的新 OpenVINO 生成式AI API 提供了顯著的優(yōu)勢和功能,使其成為開發(fā)人員創(chuàng)建 生成式AI 和大語言模型應(yīng)用程序的強大工具。憑借其簡單的設(shè)置過程和最小的依賴性,該 API 降低了代碼復(fù)雜性,使您能夠僅使用幾行代碼快速構(gòu)建高效的 生成式 AI 推理流水線。此外,對流式模型輸出分詞的支持有助于創(chuàng)建交互式用戶界面,從而增強用戶體驗。

我們歡迎您試用新的 生成式AI API,并在你的項目中探索更多功能!我們可以一起突破生成式AI通過開源可以實現(xiàn)的界限!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 英特爾
    +關(guān)注

    關(guān)注

    60

    文章

    9814

    瀏覽量

    171110
  • ChatGPT
    +關(guān)注

    關(guān)注

    28

    文章

    1523

    瀏覽量

    7247
  • OpenVINO
    +關(guān)注

    關(guān)注

    0

    文章

    81

    瀏覽量

    155

原文標(biāo)題:如何使用 OpenVINO? 生成式AI API (GenAI API) 以更少的代碼構(gòu)建更快的生成式AI 應(yīng)用

文章出處:【微信號:英特爾中國,微信公眾號:英特爾中國】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和邊界。本文將介紹如何使用 OpenVINO C++ API 部署 FastSAM 模型,以實現(xiàn)快速高效的語義分割。在前文中我們發(fā)表了《基于 OpenVINO Python API
    的頭像 發(fā)表于 11-17 09:53 ?780次閱讀
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b>部署FastSAM模型

    創(chuàng)建51輕量級操作系統(tǒng)

    創(chuàng)建51輕量級操作系統(tǒng)
    發(fā)表于 09-29 09:58

    10個輕量級框架

    這些輕量級框架使用HTML5和CSS3標(biāo)準(zhǔn)來幫助您快速開發(fā)跨平臺的Web移動應(yīng)用和網(wǎng)站。
    發(fā)表于 07-17 08:25

    輕量級Agent平臺怎么測試?

    跨平臺的語言成功應(yīng)用于嵌入設(shè)備中,同時也方便了嵌入環(huán)境下的輕量Agent(Lightweight Agent)的實現(xiàn)。本文在ARM嵌入環(huán)境下測試輕量級Agent平臺。
    發(fā)表于 09-27 06:26

    輕量級深度學(xué)習(xí)網(wǎng)絡(luò)是什么

    輕量級深度學(xué)習(xí)網(wǎng)絡(luò)概覽
    發(fā)表于 04-23 14:53

    Dllite_micro (輕量級AI 推理框架)

    DLLite-Micro 是一個輕量級AI 推理框架,可以為 OpenHarmony OS 的輕量設(shè)備和小型設(shè)備提供深度模型的推理能力DLLite-Micro 向開發(fā)者提供清晰、易上手的北向接口
    發(fā)表于 08-05 11:40

    介紹一款輕量級ARM AI智能網(wǎng)關(guān)產(chǎn)品

    用戶需求國內(nèi)某工業(yè)網(wǎng)關(guān)設(shè)備制造商計劃推出一款輕量級AI智能網(wǎng)關(guān)產(chǎn)品,可應(yīng)用于工業(yè)設(shè)備監(jiān)控、工業(yè)現(xiàn)場動環(huán)監(jiān)控、遠(yuǎn)程巡檢等多種場景。在主控平臺選型階段,該用戶主要面臨高算力和功能接口豐富的疊加需求。其
    發(fā)表于 06-06 16:39

    谷歌開源TFGAN輕量級的工具庫 目的是讓訓(xùn)練和評估GAN變得更加簡單

    三年前,蒙特利爾大學(xué) Ian Goodfellow 等學(xué)者提出「生成對抗網(wǎng)絡(luò)」(Generative Adversarial Networks,GANs)的概念,并逐漸引起 AI 業(yè)內(nèi)人士的注意
    的頭像 發(fā)表于 01-02 15:31 ?4878次閱讀

    輕量級AI智能網(wǎng)關(guān)產(chǎn)品概述及應(yīng)用優(yōu)勢

    國內(nèi)某工業(yè)網(wǎng)關(guān)設(shè)備制造商計劃推出一款輕量級AI智能網(wǎng)關(guān)產(chǎn)品,可應(yīng)用于工業(yè)設(shè)備監(jiān)控、工業(yè)現(xiàn)場動環(huán)監(jiān)控、遠(yuǎn)程巡檢等多種場景。在主控平臺選型階段,該用戶主要面臨高算力和功能接口豐富的疊加需求。其主控不但
    的頭像 發(fā)表于 05-31 12:05 ?1963次閱讀
    <b class='flag-5'>輕量級</b><b class='flag-5'>AI</b>智能網(wǎng)關(guān)產(chǎn)品概述及應(yīng)用優(yōu)勢

    PSoC NeoPixel Easy輕量級

    電子發(fā)燒友網(wǎng)站提供《PSoC NeoPixel Easy輕量級庫.zip》資料免費下載
    發(fā)表于 11-17 09:48 ?0次下載
    PSoC NeoPixel Easy<b class='flag-5'>輕量級</b>庫

    測評分享 | 如何在先楫HPM6750上運行輕量級AI推理框架TinyMaix

    本期內(nèi)容由先楫開發(fā)者社區(qū)大咖@xusiwei1236分享基于先楫HPM6750的輕量級AI推理框架,趕緊來瞧瞧~一、TinyMaix是什么?TinyMaix是國內(nèi)sipeed團(tuán)隊開發(fā)一個輕量級
    的頭像 發(fā)表于 12-12 17:57 ?1484次閱讀
    測評分享 | 如何在先楫HPM6750上運行<b class='flag-5'>輕量級</b><b class='flag-5'>AI</b>推理框架TinyMaix

    輕量級數(shù)據(jù)庫有哪些

    數(shù)據(jù)庫系統(tǒng)由于其小巧、快速、易用等優(yōu)勢,越來越受到人們的青睞。那么,輕量級數(shù)據(jù)庫有哪些?本文將為大家介紹幾種常見的輕量級數(shù)據(jù)庫系統(tǒng)。 1. SQLite SQLite被廣泛應(yīng)用于各種移動應(yīng)用程序、Web應(yīng)用程序和嵌入系統(tǒng)中。它
    的頭像 發(fā)表于 08-28 16:41 ?5804次閱讀

    OpenVINO? C# API詳解與演示

    OpenVINO C# API 支持 NuGet 程序包安裝方式,這與 OpenVINO C++ 庫的安裝過程相比,更加簡單。如果使用 Visual Studio 開發(fā) AI 項目,則
    的頭像 發(fā)表于 10-13 16:39 ?673次閱讀
    <b class='flag-5'>OpenVINO</b>?  C# <b class='flag-5'>API</b>詳解與演示

    三行代碼完成生成AI部署

    OpenVINO2024.2版本跟之前版本最大的不同是OpenVINO2024.2分為兩個安裝包分別是基礎(chǔ)包與生成AI支持包,新發(fā)布的
    的頭像 發(fā)表于 08-30 16:49 ?322次閱讀
    三行代碼完成<b class='flag-5'>生成</b><b class='flag-5'>式</b><b class='flag-5'>AI</b>部署

    使用OpenVINO GenAI API在C++中構(gòu)建AI應(yīng)用程序

    許多桌面應(yīng)用程序是使用 C++ 開發(fā)的,而將生成AIGenAI)功能集成到這些應(yīng)用程序中可能會很具有挑戰(zhàn)性,尤其是因為使用像 Hugging Face 這樣的 Python 庫的復(fù)
    的頭像 發(fā)表于 10-12 09:36 ?192次閱讀
    使用<b class='flag-5'>OpenVINO</b> <b class='flag-5'>GenAI</b> <b class='flag-5'>API</b>在C++中構(gòu)建<b class='flag-5'>AI</b>應(yīng)用程序