一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

OpenVINO?協(xié)同Semantic Kernel:優(yōu)化大模型應(yīng)用性能新路徑

英特爾物聯(lián)網(wǎng) ? 來源:英特爾物聯(lián)網(wǎng) ? 2024-03-08 10:41 ? 次閱讀

作為主要面向 RAG 任務(wù)方向的框架,Semantic Kernel 可以簡化大模型應(yīng)用開發(fā)過程,而在 RAG 任務(wù)中最常用的深度學(xué)習(xí)模型就是 Embedding 和 Text completion,分別實現(xiàn)文本的語義向量化和文本生成,因此本文主要會分享如何在 Semantic Kernel 中調(diào)用 OpenVINO runtime 部署 Embedding 和 Text completion 模型。

Semantic Kernel簡介

Semantic Kernel 是微軟推出的大模型應(yīng)用框架,支持 C#, PythonJava 等開發(fā)環(huán)境,通過 Semantic Kernel 集成的API接口,開發(fā)者可以直接調(diào)用 OpenAI 或是 Hugging Face 中的大語言模型,進一步構(gòu)建上層應(yīng)用任務(wù),例如 Chat Copilot 或是 Code completion ,等。顧名思義,Semantic Kernel 的核心就在于由 Kernel 所連接的 pipeline/chain,它通過上下文,實現(xiàn)在各個函數(shù)組件間共享數(shù)據(jù),下面這張展示的就是用戶的輸入 Prompt 如何在這些組件中進行流轉(zhuǎn),最終返回響應(yīng)結(jié)果。

112675f6-dc6c-11ee-a297-92fbcf53809c.png

圖:Semantic Kernel組件示意圖

OpenVINO 簡介

OpenVINO 作為英特爾官方推出的深度學(xué)習(xí)模型部署工具,可以極大地提升本地模型任務(wù)的推理性能。同時 OpenVINO 支持了多種推理后端,使模型可以在多種不同的硬件架構(gòu)上進行部署和切換,進一步提升任務(wù)的靈活性與系統(tǒng)資源利用率,例如我們可以利用 NPU 來部署一些輕負(fù)載的 AI 模型以降低功耗,利用 GPU 來部署大模型以優(yōu)化反饋延遲??傊?strong>在大模型本地化趨勢越來越熱的今天,OpenVINO 勢必成為在 PC 端部署大模型任務(wù)的好幫手。

OpenVINO 與 Semantic Kernel

集成實現(xiàn)

Semantic Kernel 的 Connector 是一種用于連接外部數(shù)據(jù)源和服務(wù)的設(shè)計模式,包括獲取數(shù)據(jù)和保存輸出結(jié)果,而 Semantic Kernel 已經(jīng)原生集成了許多開箱即用的大模型服務(wù) Plugin,其中就包括了基于 Hugging Face Transformers 構(gòu)建的的 Embedding 和 Text completion Service,因此我們可以參考這兩個 Service 的代碼,來實現(xiàn)一組 OpenVINO 的 Service,完成和 Connectors 組件的集成,分別命名為 OpenVINOTextEmbedding 以及 OpenVINOTextCompletion。

1

Text completion service

首先是 Text completion 任務(wù),由于 OpenVINO 可以通過 Optimum-intel 直接部署 Hugging Face中的 "summarization", "text-generation", "text2text-generation" 等模型,相較原生 Transformers API 的使用方式,也僅僅需要做少量修改(如以下代碼所示)。

- from transformers import AutoModelForCausalLM

+ from optimum.intel.openvino import OVModelForCausalLM

- model = AutoModelForCausalLM.from_pretrained(model_id)

+ ov_model = OVModelForCausalLM.from_pretrained(model_id)

generate_ids = ov_model.generate(input_ids)

因此,我們也可以直接在 Hugging Face Text completion service 的基礎(chǔ)上直接將 Transformers 的模型加載對象切換為 Optimum-intel 的對象,以實現(xiàn)基于 OpenVINO runtime 的模型推理。這里可通過 OVModelForCausalLM 類來部署 "text-generation" 類型的大模型,通過 OVModelForSeq2SeqLM 類調(diào)用 "text2text-generation", "summarization" 類型模型。

if task == "text-generation":
  ov_model = OVModelForCausalLM.from_pretrained(
   ai_model_id, **_model_kwargs)
 elif task in ("text2text-generation", "summarization"):
   ov_model = OVModelForSeq2SeqLM.from_pretrained(
    ai_model_id, **_model_kwargs)

2

Embedding service

不同于 Text completion service, Semantic Kernel 中集成的 Hugging Face Embedding service 是基于 sentence_transformers 庫來實現(xiàn)的,并調(diào)用 encode 函數(shù)來進行 Embedding 文本向量化。

generator=sentence_transformers.SentenceTransformer(model_name_or_path=ai_model_id, device=resolved_device),
embeddings = self.generator.encode(texts)

而 OpenVINO 目前暫未直接對接 sentence_transformers 的模型部署接口,因此這里我們需要手動將 sentence_transformers 的 PyTorch 模型對象轉(zhuǎn)化為 OpenVINO IR 格式后,再重新構(gòu)建它的 encode 函數(shù) pipeline。

可以看到 Hugging Face 的 embedding 模型除了支持 Sentence-Transformers 對象部署方式外,還可以基于 Transformers 庫的方式,通過 AutoModel.from_pretrained 獲取 nn.module 格式的模型對象,而 OpenVINO 的 PyTorch 前端則已經(jīng)支持對該格式對象的直接轉(zhuǎn)換,所以我們首先需要手寫一個轉(zhuǎn)換腳本,來實現(xiàn) Embedding 模型從 PyTorch 對象到 OpenVINO IR 格式的轉(zhuǎn)化過程。

  tokenizer = AutoTokenizer.from_pretrained(args.model_id)
  model = AutoModel.from_pretrained(args.model_id)


  dummy_inputs = {"input_ids": torch.ones((1, 10), dtype=torch.long), "attention_mask": torch.ones(
    (1, 10), dtype=torch.long), "token_type_ids": torch.zeros((1, 10), dtype=torch.long)}


  ov_model = ov.convert_model(model, example_input=dummy_inputs)
  ov.save_model(ov_model, model_path / "openvino_model.xml")

在定義新的 encode 函數(shù)時,鑒于在 RAG 系統(tǒng)中的各個句子的向量化任務(wù)往往沒有依賴關(guān)系,因此我們可以通過 OpenVINO 的 AsyncInferQueue 接口,將這部分任務(wù)并行化,以提升整個 Embedding 任務(wù)的吞吐量。

infer_queue = ov.AsyncInferQueue(self.model, nireq)
    for i, sentence in enumerate(sentences_sorted):
      inputs = {}
      features = self.tokenizer(
        sentence, padding=True, truncation=True, return_tensors='np')
      for key in features:
        inputs[key] = features[key]
      infer_queue.start_async(inputs, i)
    infer_queue.wait_all()

此外,從 HuggingFace Transfomers 庫中導(dǎo)出的 Embedding 模型是不包含 mean_pooling 和歸一化操作的,因此我們需要在獲取模型推理結(jié)果后,再實現(xiàn)這部分后處理任務(wù)。并將其作為 callback function 與 AsyncInferQueue 進行綁定。

    def postprocess(request, userdata):
      embeddings = request.get_output_tensor(0).data
      embeddings = np.mean(embeddings, axis=1)
      if self.do_norm:
        embeddings = normalize(embeddings, 'l2')
      all_embeddings.extend(embeddings)


    infer_queue.set_callback(postprocess)

測試驗證

當(dāng)完成這兩個關(guān)鍵對象的創(chuàng)建后,我們可以來驗證一下重新構(gòu)建的 OpenVINO 任務(wù)效果。

第一步:我們需要將 Embedding 和 Text completion 這兩個模型分轉(zhuǎn)換并導(dǎo)出到本地。這里以 all-MiniLM-L6-v2 和 gpt2 為例。

Embedding 模型可以通過剛剛定義的轉(zhuǎn)換腳本導(dǎo)出模型:

python3 export_embedding.py -m sentence-transformers/all-MiniLM-L6-v2

Text completion 模型可以通過 Optimum-intel 中自帶命令行工具導(dǎo)出:

optimum-cli export openvino --model gpt2 llm_model

第二步:通過修改 Semantic Kernel 官方提供的 Hugging Face Plugins 示例

來測試 OpenVINO Plugin 的效果,該示例基于 Embedding 和 Text completion 模型構(gòu)建了一個最小化的 RAG 任務(wù) pipeline。此處只需要把原始的 Hugging Face service 對象替換為我們剛剛構(gòu)建的 OpenVINOTextEmbedding 和 OpenVINOTextCompletion 對象,其中 ai_model_id 需要修改為模型文件夾的本地路徑。

kernel.add_text_completion_service(
  service_id="gpt2",
  service=OpenVINOTextCompletion(ai_model_id="./llm_model", task="text-generation", model_kwargs={
                  "device": "CPU", "ov_config": ov_config}, pipeline_kwargs={"max_new_tokens": 64})
)


kernel.add_text_embedding_generation_service(
  service_id="sentence-transformers/all-MiniLM-L6-v2",
  service=OpenVINOTextEmbedding(ai_model_id="./embedding_model"),
)

在這個示例中 Kernel 是通過 kernel.memory.save_information 函數(shù)來實現(xiàn)知識的注入,過程中會調(diào)用 Embedding service 來完成對于文本的語義向量化操作。我們可以通過執(zhí)行以下命令來執(zhí)行完整的 notebook 測試腳本。

$ jupyter lab sample.ipynb

示例中為了簡化模型下載和轉(zhuǎn)化步驟,采用了相較主流 LLM 更輕量化的gpt2來實現(xiàn)文本內(nèi)容生成,因此在輸出內(nèi)容上會相對單一,如果需要實現(xiàn)更復(fù)雜的內(nèi)容生成能力,可以將其替換為一些參數(shù)規(guī)模更大的文本生成模型,最終輸出結(jié)果如下:

gpt2 completed prompt with: 'I know these animal facts: ["Dolphins are mammals."] ["Flies are insects."] ["Penguins are birds."] and "Horses are mammals."

對比官方原始 Hugging Face Plugins 示例的輸出結(jié)果,與注入的知識庫信息,兩者對于 animal facts 的判斷使一致的,這也證明我們的重新構(gòu)建的 OpenVINO Plugin 在模型輸出的準(zhǔn)確性上是沒有問題的。

總結(jié)

在醫(yī)療、工業(yè)等領(lǐng)域,行業(yè)知識庫的構(gòu)建已經(jīng)成為了一個普遍需求,通過 Semantic-Kernel 與 OpenVINO 的加持,我們可以讓用戶對于知識庫的查詢以及反饋變得更加精準(zhǔn)高效,降低 RAG 任務(wù)的開發(fā)門檻,帶來更加友好的交互體驗。




審核編輯:劉清

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

    關(guān)注

    20

    文章

    2983

    瀏覽量

    106499
  • OpenAI
    +關(guān)注

    關(guān)注

    9

    文章

    1196

    瀏覽量

    8296
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    2941

    瀏覽量

    3683
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    1

    文章

    316

    瀏覽量

    641

原文標(biāo)題:OpenVINO? 協(xié)同 Semantic Kernel:優(yōu)化大模型應(yīng)用性能新路徑 | 開發(fā)者實戰(zhàn)

文章出處:【微信號:英特爾物聯(lián)網(wǎng),微信公眾號:英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    在CentOS從源代碼構(gòu)建OpenVINO?時,無法找到設(shè)置腳本怎么解決?

    BuildingCode-Installing 中所提到的不同路徑。 找不到deployment_tools文件夾。因此,無法配置模型優(yōu)化器 和 演示.
    發(fā)表于 03-07 07:37

    構(gòu)建開源OpenVINO?工具套件后,模型優(yōu)化器位于何處呢?

    構(gòu)建開源OpenVINO?工具套件后,模型優(yōu)化器位于何處?
    發(fā)表于 03-06 08:18

    OpenVINO中的量化模型OpenVINO ESR模型結(jié)果不一致是怎么回事?

    將 REAL-ESRSTREAM 模型轉(zhuǎn)換成 OpenVINO IR (2021.4) 并執(zhí)行該模型。 能夠運行 IR,但結(jié)果與 REAL-ESR 就此不同的是。
    發(fā)表于 03-06 08:11

    如何使用OpenVINO?運行對象檢測模型?

    無法確定如何使用OpenVINO?運行對象檢測模型
    發(fā)表于 03-06 07:20

    OpenVINO? Toolkit中如何保持模型稀疏性?

    OpenVINO? Toolkit 中支持的優(yōu)化方法,保持模型稀疏性。
    發(fā)表于 03-06 06:47

    請問使用2022.2時是否可以讀取模型OpenVINO?層?

    使用 2020.3 時,使用 net.layers 和 layers.blob 讀取模型OpenVINO?層。 OpenVINO?自 2021.2 OpenVINO?起,使用 202
    發(fā)表于 03-06 06:37

    使用模型優(yōu)化器命令將ONNX模型轉(zhuǎn)換為OpenVINO? IR格式時出現(xiàn)“ReplacementID”錯誤怎么解決?

    使用模型優(yōu)化器命令將 ONNX 模型轉(zhuǎn)換為 OpenVINO? IR 格式: --input_model \"{onnx_path} --input_shape [1,512, 89
    發(fā)表于 03-05 09:41

    運行時OpenVINO?找不到模型優(yōu)化器,為什么?

    在運行時OpenVINO?找不到模型優(yōu)化器,運行模型下載程序命令并收到錯誤消息: omz_downloader:找不到命令
    發(fā)表于 03-05 08:16

    為什么無法通過OpenVINO?深度學(xué)習(xí) (DL) 工作臺優(yōu)化 MYRIAD 導(dǎo)入的模型

    -ASSETS_DIR /hdd-raid0/openvino_workbench 命令以啟動 DL 工作臺。 收到以下消息: 由于選定的項目具有只讀狀態(tài),因此無法使用優(yōu)化按鈕 拔下并插入神經(jīng)電腦棒 (NCS2) 并重新啟動工作臺容器。 移除了所有資產(chǎn)目錄數(shù)據(jù)并重啟容器
    發(fā)表于 03-05 06:20

    為什么無法在運行時C++推理中讀取OpenVINO?模型?

    使用模型優(yōu)化器 2021.1 版OpenVINO?轉(zhuǎn)換模型 使用 Runtime 2022.3 版本在 C++ 推理實現(xiàn) ( core.read_model()) 中讀取
    發(fā)表于 03-05 06:17

    C#集成OpenVINO?:簡化AI模型部署

    什么是OpenVINO 工具套件? OpenVINO 工具套件是一個用于優(yōu)化和部署人工智能(AI)模型,提升AI推理性能的開源工具集合,不
    的頭像 發(fā)表于 02-17 10:03 ?1566次閱讀
    C#集成<b class='flag-5'>OpenVINO</b>?:簡化AI<b class='flag-5'>模型</b>部署

    C#中使用OpenVINO?:輕松集成AI模型!

    與分析三大領(lǐng)域中,如何快速將AI模型集成到應(yīng)用程序中,實現(xiàn)AI賦能和應(yīng)用增值?最容易的方式是:在C#中,使用OpenVINO?工具套件集成AI模型。 一,什么是OpenVINO? 工具
    的頭像 發(fā)表于 02-07 14:05 ?650次閱讀
    C#中使用<b class='flag-5'>OpenVINO</b>?:輕松集成AI<b class='flag-5'>模型</b>!

    使用OpenVINO Model Server在哪吒開發(fā)板上部署模型

    OpenVINO Model Server(OVMS)是一個高性能模型部署系統(tǒng),使用C++實現(xiàn),并在Intel架構(gòu)上的部署進行了優(yōu)化,使用Open
    的頭像 發(fā)表于 11-01 14:19 ?573次閱讀
    使用<b class='flag-5'>OpenVINO</b> Model Server在哪吒開發(fā)板上部署<b class='flag-5'>模型</b>

    使用Arthas火焰圖工具的Java應(yīng)用性能分析和優(yōu)化經(jīng)驗

    分享作者在使用Arthas火焰圖工具進行Java應(yīng)用性能分析和優(yōu)化的經(jīng)驗。
    的頭像 發(fā)表于 10-28 09:27 ?921次閱讀
    使用Arthas火焰圖工具的Java<b class='flag-5'>應(yīng)用性能</b>分析和<b class='flag-5'>優(yōu)化</b>經(jīng)驗

    路由偏好,提升網(wǎng)絡(luò)性能新路徑

    路由偏好對網(wǎng)絡(luò)性能和數(shù)據(jù)傳輸效率有著重要影響。本文將從路由偏好的相關(guān)概念、影響因素和實際應(yīng)用,同時結(jié)合IP數(shù)據(jù)云的功能展示其在優(yōu)化路由選擇中的作用。 ? 路由偏好,提升網(wǎng)絡(luò)性能新路徑
    的頭像 發(fā)表于 08-21 15:53 ?458次閱讀
    路由偏好,提升網(wǎng)絡(luò)<b class='flag-5'>性能</b><b class='flag-5'>新路徑</b>