對我們來說,這是非常忙碌的幾周,因為我們正在努力根據(jù)您的反饋改進(jìn)我們的產(chǎn)品特性,并擴(kuò)展生態(tài)系統(tǒng)以涵蓋其它場景和用例。
讓我們看看我們所做的最重要的更改。有關(guān)更詳細(xì)的列表,您可以隨時參考我們的完整 [新版本說明]。
隆重推出 OpenVINO.GenAI 軟件包和 LLM特定 API
生成式 AI 正在被應(yīng)用程序設(shè)計人員快速地使用著。這不僅體現(xiàn)在使用來自商業(yè)云服務(wù)模型的傳統(tǒng)REST API形式上,而且還發(fā)生在客戶端和邊緣。越來越多的數(shù)據(jù)正在客戶端處理,通過AIPC,我們?yōu)榇碎_始看到更多的機(jī)會。其中一種場景是人工智能助手,它能夠生成文本(郵件草稿、文檔摘要、文檔內(nèi)容的答案等等)。這一切都由 LLM(大型語言模型)和不斷增長的 SLM(小型語言模型)系列提供支持。
我們引入了新的軟件包 openvino-genai,它使用OpenVINO 以及其中的openvino_tokenizers,因此如果您打算運行 LLM,安裝此軟件包就足夠了。經(jīng)典的 OpenVINO API 也支持其它類型的模型,因此現(xiàn)在流水線構(gòu)建變得更加容易。我們的安裝選項也進(jìn)行了更新,以便反映并指導(dǎo)使用新軟件包,因此請在那里查看您最合適的選項。經(jīng)典的 OpenVINO 軟件包仍然存在,如果您暫時不打算使用生成式 API,請繼續(xù)使用 openvino 軟件包。
為了通過 LLM 生成結(jié)果,應(yīng)用程序需要執(zhí)行整個操作流水線:執(zhí)行輸入文本的分詞,處理輸入上下文,迭代生成模型答案的后續(xù)輸出分詞,最后將答案從分詞解碼為純文本。每個分詞的生成都是推理調(diào)用,然后是后續(xù)邏輯來選擇分詞本身。邏輯可以是貪婪搜索的形式,也就是選擇最可能的分詞,也可以是波束搜索的形式,即保持很少的序列并選擇其中最好的。
雖然OpenVINO在推理方面大放異彩,但正如我們剛才所討論的,這還不足以涵蓋整個文本生成的流水線。在 2024.2 版本之前,我們提供了幫助程序(分詞器和示例)來實現(xiàn)這一點,但應(yīng)用程序必須使用這些組件實現(xiàn)整個生成邏輯。現(xiàn)在這種情況正在發(fā)生改變。
在 24.2 版本中,我們引入了特定于 LLM 的 API,這些 API 隱藏了內(nèi)部生成循環(huán)的復(fù)雜性,并顯著減少了需要在應(yīng)用程序中編寫的代碼量。通過使用特定于 LLM 的 API,您可以加載模型,向其傳遞上下文,并通過幾行代碼返回響應(yīng)。在內(nèi)部,OpenVINO將對輸入文本進(jìn)行分詞化,在您選擇的設(shè)備上執(zhí)行生成循環(huán),并為您提供答案。讓我們一步一步地看看這是如何使用Python和C++完成的。
第一步
通過Hugging Face Optimum-Intel導(dǎo)出
LLM 模型(我們使用了針對聊天微調(diào)的 Tiny Llama)
以下是將OpenVINO IR格式的LLM模型導(dǎo)出為FP16或INT4精度的兩種方式。為了使LLM推理性能更高,我們建議對模型權(quán)重使用較低的精度,即INT4,并在模型導(dǎo)出過程中直接使用神經(jīng)網(wǎng)絡(luò)壓縮框架(NNCF)壓縮權(quán)重,如下所示。
FP16:
optimum-cli export openvino --model "TinyLlama/TinyLlama-1.1B-Chat-v1.0" --weight-format fp16 --trust-remote-code
INT4:
optimum-cli export openvino --model "TinyLlama/TinyLlama-1.1B-Chat-v1.0" --weight-format int4 --trust-remote-code
第二步
使用C++或Python進(jìn)行生成
通過新的C++ API進(jìn)行LLM生成
#include "openvino/genai/llm_pipeline.hpp" #includeint main(int argc, char* argv[]) { std::string model_path = argv[1]; ov::LLMPipeline pipe(model_path, "CPU");//target device is CPU std::cout << pipe.generate("The Sun is yellow bacause"); //input context }
通過新的 Python API 進(jìn)行生成
import openvino_genai as ov_genai pipe = ov_genai.LLMPipeline(model_path, "CPU") print(pipe.generate("TheSunisyellowbacause"))
如您所見,只需要幾行代碼就能建立一個LLM生成的流水線。這是因為,從 Hugging Face Optimum-Intel 導(dǎo)出模型后,它已經(jīng)存儲了執(zhí)行所需的所有信息,包括分詞器/反分詞器和生成配置,從而能夠獲得與 Hugging Face 生成匹配的結(jié)果。我們提供 C++ 和 Python API 來運行 LLM、最少的依賴項列表和對應(yīng)用程序的添加。
為了實現(xiàn)生成式模型更具交互性的UI界面,我們添加了對模型輸出分詞流式處理的支持。在下面的示例中,我們使用簡單的 lambda 函數(shù)在模型生成單詞后立即將單詞輸出到控制臺:
#include "openvino/genai/llm_pipeline.hpp" #includeint main(int argc, char* argv[]) { std::string model_path = argv[1]; ov::LLMPipeline pipe(model_path, "CPU"); auto streamer = [](std::string word) { std::cout << word << std::flush; }; std::cout << pipe.generate("The Sun is yellow bacause", streamer); }
您也可以創(chuàng)建自定義流處理器進(jìn)行更復(fù)雜的處理,這在我們的 [文檔] 中進(jìn)行了描述。
最后,我們還研究了聊天場景,其中輸入和輸出代表對話,并且有機(jī)會以在輸入之間保留 KV緩存 的形式進(jìn)行優(yōu)化。為此,我們引入了聊天特定方法 start_chat 和 finish_chat,它們用于標(biāo)記會話的開始和結(jié)束。下面是一個非常簡單的 C++ 示例:
int main(int argc, char* argv[]) { std::string prompt; std::string model_path = argv[1]; ov::LLMPipeline pipe(model_path, "CPU"); pipe.start_chat(); for (;;) { std::cout << "question: "; std::getline(std::cin, prompt); if (prompt == "Stop!") break; std::cout << "answer: "; auto answer = pipe(prompt); std::cout << answer << std::endl; } pipe.finish_chat(); }
在上面的所有示例中,我們都使用 CPU 作為目標(biāo)設(shè)備,但 GPU 也同樣是支持的。請記住,GPU 將為 LLM 本身運行推理,分詞選擇邏輯和分詞化/去分詞化將保留在 CPU 上,因為這更有效率。內(nèi)置的分詞器以單獨的模型形式表示,并通過我們的推理功能在 CPU 上運行。
這個 API 使我們能夠更靈活、更優(yōu)化地實現(xiàn)生成邏輯,并不斷擴(kuò)展。請繼續(xù)關(guān)注后續(xù)發(fā)布版本中的更多功能!
同時,請務(wù)必查看我們的 [文檔] 和 [示例] 以獲取新的 API,嘗試后告訴我們你的想法。
通過OpenVINO擴(kuò)展模型服務(wù)
通過服務(wù)化部署模型是一個非常成熟的方法論,并且隨著基于微服務(wù)的部署不僅在傳統(tǒng)的云環(huán)境中擴(kuò)展,同時也在向邊緣計算領(lǐng)域擴(kuò)展,這一需求日益增長。更多的應(yīng)用被開發(fā)為微服務(wù),并部署在智能邊緣和云中。在2024.2 版本中,我們引入了對服務(wù)場景的額外支持。讓我們來看看最重要的變化。
OpenVINO模型服務(wù)器是我們長期開發(fā)的模型服務(wù)解決方案,它被應(yīng)用程序廣泛采用,以最有效的方式為模型提供服務(wù)。在此版本中,我們引入了通過稱為連續(xù)批處理的機(jī)制為LLM提供高效服務(wù)的能力。
從本質(zhì)上講,連續(xù)批處理允許我們通過將多個請求合并到批處理中來以最有效的方式實現(xiàn)推理服務(wù)。由于生成過程中上下文大小的差異,傳統(tǒng)批處理文本生成方案的方式非常有限。實際上,不可能找到兩個相同長度的不同請求并生成相同長度的輸出來執(zhí)行傳統(tǒng)的請求批處理。為了解決這個問題,我們采用了分頁注意力方法,就像在 vLLM 實現(xiàn)中的那樣。這使我們能夠?qū)⒍鄠€請求合并到同一模型中,并提高硬件利用率。不過,調(diào)度請求的內(nèi)部邏輯是不同的,我們考慮了 CPU 在設(shè)計時使其更高效的細(xì)節(jié),結(jié)合了高吞吐量和低延遲,使其更高效。
為了以最適應(yīng)應(yīng)用程序的方式部署 LLM,我們在文本生成的使用場景實現(xiàn)了 OpenAI 兼容的API。我們的實現(xiàn)包括 連續(xù)批處理和分頁注意力算法,因此文本生成可以在高并發(fā)負(fù)載下快速高效。這使得您可以允許在云中或本地(如果需要的話)創(chuàng)建自己的類似 OpenAI 的 LLM 服務(wù)端點。
盡管 LLM 備受矚目,但傳統(tǒng)的深度學(xué)習(xí)模型作為獨立解決方案或大型流程的一部分仍有著高度需求。OVMS 可以長時間高效地部署這些模型,但對其它部署解決方案的需求非常高,因此我們?yōu)榉?wù)場景引入了一些額外的 OpenVINO 集成:通過 TorchServe 和 Nvidia Triton 提供服務(wù)。
OpenVINO 長期以來一直為 Triton Serving 提供后端,我們最近與 Nvidia 工程師合作,重新設(shè)計了它的附加功能,例如支持動態(tài)輸入。您可以在我們的博客文章中查看有關(guān)如何在 Triton 中使用 OpenVINO 的更多詳細(xì)信息。
服務(wù)功能的另一個重要補(bǔ)充是通過使用 torch.compile 的 OpenVINO 后端,使用 TorchServe 為模型提供服務(wù)。在引入 torch.compile 之后,TorchServe 引入了通過不同后端加速服務(wù)的功能。這正是OpenVINO現(xiàn)在發(fā)生的事情,我們提供了在TorchServe中指定OpenVINO作為后端的功能。有關(guān)更多詳細(xì)信息,您可以查看示例,這些示例非常簡單且不言自明。
性能提升
我們?nèi)匀粚W⒂?AI 模型的性能表現(xiàn)。盡管 AIPC 的出現(xiàn),LLM 在客戶端的采用仍然對底層硬件產(chǎn)生壓力。我們的優(yōu)化工作覆蓋了不同的支持目標(biāo),包括 CPU、GPU 和 NPU。
AIPC與傳統(tǒng)PC的不同在于它集成了專門的硬件加速器,隨著AI應(yīng)用場景從云端轉(zhuǎn)向個人計算領(lǐng)域,其重要性日益增加。英特爾酷睿Ultra處理器提供了更強(qiáng)大的GPU以及NPU。從性能和效率的角度來看,這些都讓加速解決方案更具吸引力。
如果平臺性能不足,我們始終能夠通過添加我們的ARC系列獨立顯卡進(jìn)行加速,來實現(xiàn)進(jìn)一步的性能提升。為了幫助實現(xiàn)LLM部署特性,我們一直專注于加速GPU的LLM的推理性能,覆蓋了集成顯卡和獨立顯卡。將負(fù)載卸載到 GPU 不僅是因為它的特性適宜處理這類工作負(fù)載,還因為需要保持 CPU 可用。因此,推理期間的 CPU 負(fù)載對于此類情況至關(guān)重要。我們一直在努力優(yōu)化 CPU 端負(fù)載并減少主機(jī)代碼延遲至少一半。這也使我們能夠?qū)崿F(xiàn)更好的 GPU 特性,因為內(nèi)核調(diào)度現(xiàn)在更加高效。
此外,我們還致力于少數(shù)GPU基本操作的更高效實現(xiàn),包括 Scaled Dot Product Attention 和 Positional Embeddings 的融合版本。這不僅改善了延遲,還減少了推理期間的主機(jī)開銷和整體內(nèi)存消耗,這對于在筆記本電腦上運行 LLM 等場景至關(guān)重要。
獨立顯卡上一些LLM的延遲已經(jīng)降低,我們正與oneDNN團(tuán)隊的合作伙伴一起,繼續(xù)我們的優(yōu)化之旅。
雖然我們經(jīng)常談?wù)?GPU,但 CPU 等其他目標(biāo)設(shè)備的性能也有所改進(jìn)。在CPU上,第二個分詞延遲的性能得到了明顯改善,以及在基于AVX2(13代英特爾酷睿處理器)和AVX512(第三代至強(qiáng)可擴(kuò)展處理器)的CPU平臺上,F(xiàn)P16權(quán)重的LLM的內(nèi)存占用情況也得到了明顯改善,尤其是在小批量的情況下。更不用說,我們還在 Optimum-Intel 集成中持續(xù)增加了對新模型的覆蓋。
新模型和notebooks示例
在每次發(fā)布的新版本中,我們都會繼續(xù)擴(kuò)大對新模型的支持,以及增加新的Notebook代碼示例,展示如何在這些使用用例中利用OpenVINO。對于新模型,我們增加了對TensorFlow*Hub的mil-nce和openimages-v4-sd-mobilent-v2的支持,以及Phi-3-mini:這是一個AI模型家族,利用小語言模型的力量實現(xiàn)更快、更準(zhǔn)確和更具成本效益的文本處理。
Notebooks代碼示例可以成為用戶學(xué)習(xí)和體驗的寶貴內(nèi)容。在這個版本中,我們添加了幾個新的Notebooks。最值得注意的是用于動畫圖像的DynamiCrafter notebook,用于轉(zhuǎn)換和優(yōu)化YOLOv10為OpenVINO的notebook,以及在現(xiàn)有LLMChatbot notebook中添加Phi-3-mini模型,以便用戶可以嘗試更多的LLM模型。
總結(jié)
在此,我們興奮地宣布OpenVINO 2024.2最新版本現(xiàn)已開放下載!
我們的團(tuán)隊一直致力于各項新特性和性能提升的研發(fā)。一如既往,我們努力不斷優(yōu)化用戶體驗,拓寬OpenVINO的功能邊界。我們的開發(fā)路線圖上已經(jīng)規(guī)劃了下一版本的諸多特性,迫不及待在未來與您分享。感謝大家的支持與厚愛!
-
英特爾
+關(guān)注
關(guān)注
61文章
9964瀏覽量
171773 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84689 -
LLM
+關(guān)注
關(guān)注
0文章
288瀏覽量
335 -
OpenVINO
+關(guān)注
關(guān)注
0文章
93瀏覽量
202
原文標(biāo)題:OpenVINO? 2024.2 發(fā)布--推出LLM專屬API !服務(wù)持續(xù)增強(qiáng),提升AI生成新境界
文章出處:【微信號:英特爾中國,微信公眾號:英特爾中國】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論