隨著 ChatGPT 等聊天機(jī)器人的風(fēng)暴席卷全球,生成式預(yù)訓(xùn)練 Transformers (GPT) 在開發(fā)者中正在成為家喻戶曉的新名字。生成式 AI(GenAI) 的發(fā)展,尤其是大語(yǔ)言模型和聊天機(jī)器人的進(jìn)步很快、變化不斷,很難預(yù)測(cè)接下來會(huì)有什么突破,開發(fā)者應(yīng)該關(guān)注什么。我們知道生成式AI將繼續(xù)存在,開發(fā)人員希望看到在本地開發(fā)、維護(hù)和部署 AI 應(yīng)用程序的更簡(jiǎn)潔明了的方法。
盡管生成式AI 令人興奮,但對(duì)這些模型運(yùn)行推理仍面臨重大挑戰(zhàn),尤其是在邊緣設(shè)備和 AI PC 上。
OpenVINO
如今,為了在 Intel 硬件上獲得 生成式AI 的最佳性能,開發(fā)人員可以使用 Optimum Intel 和 OpenVINO 后端優(yōu)化的 Hugging Face 流水線來運(yùn)行 生成式AI 模型。OpenVINO 可以在 CPU、GPU或NPU 上啟用優(yōu)化,這些可以顯著減少延遲并提高運(yùn)行效率。此外,我們可以利用量化和權(quán)重壓縮等模型優(yōu)化技術(shù)來最小化內(nèi)存占用(減少 2-3 倍的內(nèi)存使用量)。這通常是模型部署中的主要瓶頸,因?yàn)榭蛻舳嘶蜻吘壴O(shè)備僅配備 32GB 或更少的 內(nèi)存。
圖 1:借助新的 OpenVINO 生成式AI API (GenAI API),我們可以在代碼編寫方面做得更好!如上圖所示,推理代碼僅減少到3行代碼!這種新的工作流程為開發(fā)者提供了一個(gè)低得多的的學(xué)習(xí)曲線,從而開始生成式AI 應(yīng)用程序的開發(fā)之旅。
不僅代碼行數(shù)大大減少了,而且安裝的依賴項(xiàng)只有寥寥幾個(gè),從而形成了一個(gè)簡(jiǎn)潔緊湊的環(huán)境,運(yùn)行生成式AI 推理僅需216Mb!
圖 2:使用 OpenVINO GenAI API 部署解決方案不僅可以減少磁盤使用量,還可以簡(jiǎn)化構(gòu)建生成式 AI 應(yīng)用的依賴性要求。這通常是開發(fā)人員開始維護(hù) 生成式AI 應(yīng)用程序時(shí)面臨的最大挑戰(zhàn)之一。
OpenVINO生成式AI API | Optimum-Intel | |
附加的依賴項(xiàng) | 非常輕 | 許多依賴項(xiàng),包括 PyTorch 等 |
推理代碼 | 非常輕的編碼 | 基于Hugging Face |
API | Python, C++ | Python |
模型支持 | 大語(yǔ)言模型(其它生成式模型即將推出) | 廣泛的模型集 |
采樣方法 | 貪心、波束搜索以及多項(xiàng)式解碼 | 全部 |
并行生成優(yōu)化 | 是的* (比如 Continues-batching, Paged-attention…) | 不支持 |
分詞 | 通過 OpenVINO tokenizer模型完成 | 通過 Hugging Face tokenizer 完成(僅針對(duì)Python) |
*特性持續(xù)開發(fā)中 |
表 1:OpenVINO GenAI API 與 Optimum-Intel 軟件包的比較
與 Optimum-Intel 相比,GenAI API 僅集成了最常用的采樣方法,包括貪心和波束搜索。同時(shí),開發(fā)者還可以通過多項(xiàng)式解碼 來自定義采樣參數(shù),例如 Top-k、Temperature等。
考慮到多用戶的場(chǎng)景,GenAI API 僅原生實(shí)現(xiàn)了 Continues-batching、Paged-attention。在文本生成過程中,這些技術(shù)可以幫助提高性能并優(yōu)化在進(jìn)行多批次推理時(shí)的內(nèi)存消耗。
由于 Hugging Face 的分詞器只能與 Python 配合使用,為了與 OpenVINO C++ 運(yùn)行時(shí)的輸入/輸出張量格式保持一致,GenAI API 將分別通過推理 2 個(gè) OpenVINO 模型來對(duì)輸入文本分詞并對(duì)輸出解分詞。在這種方法之前,開發(fā)人員可以使用 Optimum-Intel CLI 將 Hugging Face 的分詞器轉(zhuǎn)換為 OpenVINO IR 模型。
到目前為止,我們已經(jīng)強(qiáng)調(diào)了使用新的 OpenVINO GenAI API 的一些關(guān)鍵優(yōu)勢(shì)。在下一節(jié)中,我們將更深入地了解如何逐步運(yùn)行演示。
OpenVINO
使用 OpenVINO GenAI API 的輕量級(jí)生成式AI
安裝
設(shè)置新的 OpenVINO GenAI API 以在生成式 AI 和 LLM 上運(yùn)行推理,設(shè)計(jì)簡(jiǎn)單明了。安裝過程可以通過 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 找到。
運(yùn)行推理
安裝 OpenVINO 后,您可以開始在 GenAI 和 LLM 模型上運(yùn)行推理。通過利用此 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) 存儲(chǔ)庫(kù)中提供的chat_sample(https://github.com/openvinotoolkit/openvino.genai/tree/master/samples/cpp/chat_sample)范例,在 Python 和 C++ 中逐步探索這個(gè)過程。
第一步: 必須使用 Hugging Face Optimum-Intel(在本例中,我們使用聊天調(diào)優(yōu)的 Tiny Llama)下載 LLM 模型并將其導(dǎo)出為 OpenVINO IR 格式。對(duì)于此步驟,建議創(chuàng)建一個(gè)單獨(dú)的虛擬環(huán)境,以避免任何依賴項(xiàng)沖突。例如
python-mvenvopenvino_venv
激活它,
openvino_venvScriptactivate
并安裝依賴項(xiàng),這是模型導(dǎo)出過程所必需的。這些要求可在 openvino.genai 倉(cāng)庫(kù)中找到
python-mpipinstall–upgrade-strategyeager-rrequirements.txt
要下載和導(dǎo)出模型,請(qǐng)使用以下命令。
optimum-cliexportopenvino--trust-remote-code-- modelTinyLlama/TinyLlama-1.1B-Chat-v1.0TinyLlama-1.1B-Chat-v1.0
為了提高 LLM 推理期間的性能,我們建議對(duì)模型權(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)境和依賴項(xiàng)不再需要,因?yàn)槟P椭恍鑼?dǎo)出一次。請(qǐng)隨意從磁盤中刪除此虛擬環(huán)境。
第二步:通過 Python 或 C++ API 運(yùn)行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)在只需要幾行代碼。這種簡(jiǎn)單性是由于從 Hugging Face Optimum-Intel 導(dǎo)出的模型已經(jīng)包含執(zhí)行所需的所有信息,包括 tokenizer/detokenizer 和生成配置,確保結(jié)果與 Hugging Face 生成一致。我們提供 C++ 和 Python API 來運(yùn)行 LLM,對(duì)應(yīng)用程序的依賴性和添加性最少。
提供的代碼在 CPU 上運(yùn)行,但通過將設(shè)備名稱替換為“GPU”,可以很容易地使其在 GPU 上運(yùn)行:
pipe=ov_genai.LLMPipeline(model_path,"GPU")
為了創(chuàng)建更具交互性的用戶界面,我們添加了對(duì)流式模型輸出標(biāo)記的支持,以便在模型生成輸出詞后立即提供輸出詞,也可以通過從流處理器返回 True 來隨時(shí)停止令牌生成。
此外,有狀態(tài)模型(https://docs.openvino.ai/2024/openvino-workflow/running-inference/stateful-models.html)在內(nèi)部運(yùn)行,用于推理文本生成,從而加快生成速度并減少由于數(shù)據(jù)表示轉(zhuǎn)換而產(chǎn)生的開銷。因此,在輸入之間保持 KV緩存被證明可能是有益的。用針對(duì)聊天的特定方法 start_chat 和 finish_chat標(biāo)記對(duì)話會(huì)話來加以實(shí)現(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::function streamer=[](std::stringword){ std::cout<
最后,以下是我們?cè)?AI PC 上運(yùn)行上述示例時(shí)得到的結(jié)果:
圖 3:在 AI PC 上本地運(yùn)行的基于 Llama 的聊天機(jī)器人的現(xiàn)場(chǎng)演示
總而言之 ,GenAI API 包括以下 API,可實(shí)現(xiàn)輕量級(jí)部署和代碼編寫:
generation_config – 用于啟用生成過程自定義的配置,例如生成文本的最大長(zhǎng)度、是否忽略句尾標(biāo)記以及解碼策略(貪心、波束搜索或多項(xiàng)式采樣)的細(xì)節(jié)。
llm_pipeline - 提供用于文本生成的類和實(shí)用程序,包括用于處理輸入、生成文本和使用可配置選項(xiàng)管理輸出的流水線。
streamer_base - 用于創(chuàng)建 Streamer 的抽象基類。
tokenizer - 用于文本編碼和解碼的 Tokenizer 類。
visibility - 控制 生成式AI 庫(kù)的可見性。
OpenVINO
總結(jié)
最新 OpenVINO 2024.2 版本中的新 OpenVINO 生成式AI API 提供了顯著的優(yōu)勢(shì)和功能,使其成為開發(fā)人員創(chuàng)建 生成式AI 和大語(yǔ)言模型應(yīng)用程序的強(qiáng)大工具。憑借其簡(jiǎn)單的設(shè)置過程和最小的依賴性,該 API 降低了代碼復(fù)雜性,使您能夠僅使用幾行代碼快速構(gòu)建高效的 生成式 AI 推理流水線。此外,對(duì)流式模型輸出分詞的支持有助于創(chuàng)建交互式用戶界面,從而增強(qiáng)用戶體驗(yàn)。
我們歡迎您試用新的 生成式AI API,并在你的項(xiàng)目中探索更多功能!我們可以一起突破生成式AI通過開源可以實(shí)現(xiàn)的界限!
-
英特爾
+關(guān)注
關(guān)注
61文章
9961瀏覽量
171746 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1560瀏覽量
7641 -
OpenVINO
+關(guān)注
關(guān)注
0文章
93瀏覽量
198
原文標(biāo)題:如何使用 OpenVINO? 生成式AI API (GenAI API) 以更少的代碼構(gòu)建更快的生成式AI 應(yīng)用
文章出處:【微信號(hào):英特爾中國(guó),微信公眾號(hào):英特爾中國(guó)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論