chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

一個(gè)簡(jiǎn)單模型就讓ChatGLM性能大幅提升 | 最“in”大模型

英特爾中國(guó) ? 來(lái)源:未知 ? 2023-08-19 11:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

自大語(yǔ)言模型 (LLM) 成為熱點(diǎn)話題以來(lái),涌現(xiàn)了一大批中文大語(yǔ)言模型并在優(yōu)化平臺(tái)中得到了積極部署。ChatGLM 正是廣受好評(píng)的主流中文 LLM 之一。然而,由于 ChatGLM 模型尚未成為 Transformer 生態(tài)的原生模型,因此,官方 optimum 擴(kuò)展庫(kù)對(duì)其仍缺乏支持。本文提供了一種使用 OpenVINO opset 重構(gòu)該模型架構(gòu)的便捷方法。該方案包含專(zhuān)為 ChatGLM 定制的優(yōu)化節(jié)點(diǎn),且這些節(jié)點(diǎn)都利用英特爾 高級(jí)矩陣擴(kuò)展(Intel Advanced Matrix Extensions,英特爾 AMX)內(nèi)聯(lián)和 MHA(Multi-Head Attention,多頭注意力)融合實(shí)現(xiàn)了高度優(yōu)化。

*請(qǐng)注意,本文僅介紹了通過(guò)為 ChatGLM 創(chuàng)建 OpenVINO stateful 模型實(shí)現(xiàn)優(yōu)化的解決方案。本方案受平臺(tái)限制,必須使用內(nèi)置了英特爾 AMX 的第四代英特爾 至強(qiáng) 可擴(kuò)展處理器1(代號(hào) Sapphire Rapids)。筆者不承諾對(duì)該解決方案進(jìn)行任何維護(hù)。

ChatGLM 模型簡(jiǎn)介

筆者在查看 ChatGLM 原始模型的源碼時(shí),發(fā)現(xiàn) ChatGLM 與 Optimum ModelForCasualML 并不兼容,而是定義了新的類(lèi) ChatGLMForConditionalGeneration。該模型的流水線回路包含 3 個(gè)主要模塊(Embedding、GLMBlock 層和 lm_logits),結(jié)構(gòu)如下:

e384e8ca-3e3d-11ee-ac96-dac502259ad0.png

圖 1. ChatGLM 的模型結(jié)構(gòu)

如上圖所示,整個(gè)流水線實(shí)際要求模型有兩個(gè)不同的執(zhí)行圖,使用輸入提示符進(jìn)行首次推理時(shí)不需要 KV 緩存作為 GLMBlock 層的輸入。從第二次迭代開(kāi)始,QKV 注意力機(jī)制的上一次結(jié)果將成為當(dāng)前一輪模型推理的輸入。隨著生成符的長(zhǎng)度不斷增加,在流水線推理過(guò)程中,模型輸入和輸出之間將存留大量的大型內(nèi)存副本。以ChatGLM6b 默認(rèn)模型配置2為示例,輸入和輸出陣列之間的內(nèi)存副本類(lèi)似于以下偽代碼,其內(nèi)存拷貝的開(kāi)銷(xiāo)由模型的參數(shù) hidden_size 以及迭代的次數(shù)決定:

e3a966f0-3e3d-11ee-ac96-dac502259ad0.png

因此,本文要解決的兩大關(guān)鍵問(wèn)題是:

  • 如何優(yōu)化模型推理流水線來(lái)消除模型輸入和輸出之間的內(nèi)存副本

  • 如何通過(guò)重新設(shè)計(jì)執(zhí)行圖來(lái)優(yōu)化 GLMBlock 模塊

構(gòu)建 OpenVINO stateful 模型
實(shí)現(xiàn)顯著優(yōu)化

首先,需要分析 GLMBlock 層的結(jié)構(gòu),嘗試封裝一個(gè)類(lèi)并按以下工作流來(lái)調(diào)用 OpenVINO opset。接著,將圖形數(shù)據(jù)序列化為 IR 模型 (.xml, .bin)。

e3e5ba4c-3e3d-11ee-ac96-dac502259ad0.png

圖 2. 為 ChatGLM 構(gòu)建 OpenVINO stateful 模型

關(guān)于如何構(gòu)建 OpenVINO stateful模型,可參閱以下文檔:

https://docs.openvino.ai/2022.3/openvino_docs_OV_UG_network_state_intro.html

OpenVINO 還提供了模型創(chuàng)建樣本,以展示如何通過(guò) opset 構(gòu)建模型。

https://github.com/openvinotoolkit/openvino/blob/master/samples/cpp/model_creation_sample/main.cpp

ChatGLM 的自定義注意力機(jī)制是本文所關(guān)注和優(yōu)化的部分。主要思路是:構(gòu)建全局上下文結(jié)構(gòu)體,用于在模型內(nèi)部追加并保存每一輪迭代后的 pastKV 的結(jié)果,這樣減少了 pastKV 作為模型輸入輸出的拷貝開(kāi)銷(xiāo),同時(shí)使用內(nèi)聯(lián)優(yōu)化以實(shí)現(xiàn) Rotary Embedding 和多頭注意力機(jī)制 (Multi-Head Attentions)。 英特爾 AMX 是內(nèi)置在第四代英特爾至強(qiáng) 可擴(kuò)展處理器中的矩陣乘法加速器,能夠更快速地處理 bf16 或 int8 數(shù)據(jù)類(lèi)型的矩陣乘加運(yùn)算,通過(guò)加速?gòu)埩刻幚?,顯著提高推理和訓(xùn)練性能。借助英特爾 AMX 內(nèi)聯(lián)指令(用于加速計(jì)算的單指令多操作),實(shí)現(xiàn)了對(duì) ChatGLM 模型中 Attention,Rotary Embedding 等算子的高度優(yōu)化,并且使用 bf16 指令進(jìn)行乘加操作,在保證浮點(diǎn)指數(shù)位精度的同時(shí)提高運(yùn)算效率。 與此同時(shí),本方案還使用 int8 精度來(lái)壓縮全連接層的權(quán)重,在實(shí)時(shí)計(jì)算中將使用bf16進(jìn)行計(jì)算。因此,無(wú)需通過(guò)訓(xùn)練后量化 (PTQ) 或量化感知訓(xùn)練 (QAT) 對(duì)模型進(jìn)行低精度處理。模型壓縮方法可以降低模型存儲(chǔ)空間,減少內(nèi)存帶寬的負(fù)載,因?yàn)橛?jì)算仍然使用浮點(diǎn),不會(huì)造成溢出,不會(huì)對(duì)模型精度造成損失。

為 ChatGLM 創(chuàng)建
OpenVINO stateful 模型

請(qǐng)依照下方示例配置軟硬件環(huán)境,并按照以下步驟優(yōu)化 ChatGLM:

硬件要求

第四代英特爾 至強(qiáng) 可擴(kuò)展處理器(代號(hào) Sapphire Rapids)及后代產(chǎn)品

軟件驗(yàn)證環(huán)境

Ubuntu 22.04.1 LTS 面向 OpenVINO Runtime Python API 的 Python 3.10.11 用于構(gòu)建 OpenVINO Runtime 的 GCC 11.3.0 cmake 3.26.4

構(gòu)建 OpenVINO 源碼

  • 安裝系統(tǒng)依賴(lài)并設(shè)置環(huán)境

  • 創(chuàng)建并啟用 Python 虛擬環(huán)境

e470899c-3e3d-11ee-ac96-dac502259ad0.png
  • 安裝 Python 依賴(lài)

e4832f20-3e3d-11ee-ac96-dac502259ad0.png

  • 使用 GCC 11.3.0 編譯 OpenVINO

  • 克隆 OpenVINO 并升級(jí)子模塊

e4918f48-3e3d-11ee-ac96-dac502259ad0.png

  • 安裝 Python 環(huán)境依賴(lài),以構(gòu)建 Python Wheel

e4a4d328-3e3d-11ee-ac96-dac502259ad0.png

  • 創(chuàng)建編譯目錄

e4bfed52-3e3d-11ee-ac96-dac502259ad0.png

  • 使用 CMake 編譯 OpenVINO

e4d4f1b6-3e3d-11ee-ac96-dac502259ad0.png

  • 安裝針對(duì) OpenVINO Runtime 和 openvino-dev 工具構(gòu)建好的 Python Wheel

e4ee7000-3e3d-11ee-ac96-dac502259ad0.png

  • 檢查系統(tǒng) GCC 版本和 Conda Runtime GCC 版本。如下所示,如果系統(tǒng) GCC 版本高于 Conda GCC 版本,請(qǐng)升級(jí) Conda GCC 至相同版本,以滿(mǎn)足 OpenVINO Runtime 的需求。(可選)

e4fbbce2-3e3d-11ee-ac96-dac502259ad0.png

e5131b6c-3e3d-11ee-ac96-dac502259ad0.png

e5284ab4-3e3d-11ee-ac96-dac502259ad0.png

  • 將 PyTorch 模型轉(zhuǎn)為 OpenVINO IR

e54a0df2-3e3d-11ee-ac96-dac502259ad0.png

使用 OpenVINO Runtime API
為 ChatGLM 構(gòu)建推理流水線

本文提供了使用 Transformer 和 OpenVINO Runtime API 構(gòu)建推理流水線的樣本。首先,在test_chatglm.py中,創(chuàng)建一個(gè)由transformers.PreTrainedModel衍生的新類(lèi)。然后,通過(guò)使用 OpenVINO Runtime Python API 構(gòu)建模型推理流水線來(lái)更新轉(zhuǎn)發(fā)函數(shù)。其他成員函數(shù)則遷移自modeling_chatglm.py的 ChatGLMForConditionalGeneration。如此一來(lái),即可確保輸入準(zhǔn)備工作、set_random_seed、分詞器/連接器 (tokenizer/detokenizer) 以及余下的流水線操作能夠與原始模型的源碼保持一致。 如需啟用 int8 權(quán)重壓縮,只需設(shè)置簡(jiǎn)單的環(huán)境變量 USE_INT8_WEIGHT=1。這是因?yàn)樵谀P蜕呻A段,已使用 int8 對(duì)全連接層的權(quán)重進(jìn)行了壓縮,因此模型可在之后的運(yùn)行過(guò)程中直接使用 int8 權(quán)重進(jìn)行推理,從而免除了通過(guò)框架或量化工具壓縮模型的步驟。 請(qǐng)按照以下步驟使用 OpenVINO Runtime 流水線測(cè)試 ChatGLM:

  • 運(yùn)行 bf16 模型

e57506d8-3e3d-11ee-ac96-dac502259ad0.png

  • 運(yùn)行 int8 模型

e5872b92-3e3d-11ee-ac96-dac502259ad0.png

權(quán)重壓縮:降低內(nèi)存帶寬使用率
提升推理速度

本文采用了 Vtune 對(duì)模型權(quán)重?cái)?shù)值精度分別為 bf16 和 int8 的內(nèi)存帶寬使用率(圖 3 和圖 4)以及 CPI 率進(jìn)行了性能對(duì)比分析(表 1)。結(jié)果發(fā)現(xiàn):當(dāng)模型權(quán)重?cái)?shù)值精度壓縮至 int8 時(shí),可同時(shí)降低內(nèi)存帶寬使用率和 CPI 率。 e5b9a284-3e3d-11ee-ac96-dac502259ad0.png

圖 3. 模型權(quán)重?cái)?shù)值精度為 bf16 時(shí)的內(nèi)存帶寬使用率

e5e1afd6-3e3d-11ee-ac96-dac502259ad0.png

圖 4. 模型權(quán)重?cái)?shù)值精度為 int8 時(shí)的內(nèi)存帶寬使用率

模型權(quán)重?cái)?shù)值精度

bf16

int8

CPI 率

10.766

1.175

表 1. 采用不同模型權(quán)重?cái)?shù)值精度時(shí)的 CPI 率

每條指令消耗的時(shí)鐘周期 (Clockticks per Instruction Retired, CPI) 事件率,也稱(chēng)為“平均指令周期數(shù) (Cycles per Instruction)”,是基于硬件事件抽樣收集的基礎(chǔ)性能指標(biāo)之一,在抽樣模式下也稱(chēng)為“性能監(jiān)控計(jì)數(shù)器 (PMC) 分析”。該比率計(jì)算方式為:用處于非停機(jī)狀態(tài)的處理器時(shí)鐘周期數(shù) (Clockticks) 除以已消耗指令數(shù)。每個(gè)處理器用于計(jì)算時(shí)鐘周期數(shù)和已消耗指令數(shù)的確切事件可能并不相同,但 VTune Profiler 可辨別和使用正確的數(shù)量。 CPI < 1 時(shí),通常為采用指令密集型代碼的應(yīng)用,而 CPI > 1 則可能是停滯時(shí)鐘周期密集型應(yīng)用,也可能是內(nèi)存密集型應(yīng)用。由此,我們可以得出結(jié)論,類(lèi)似 chatGLM 等語(yǔ)言模型對(duì)內(nèi)存帶寬的要求非常高,性能往往受到內(nèi)存操作或帶寬的限制。很多場(chǎng)景下,消除內(nèi)存操作的負(fù)載,性能會(huì)因此獲得大幅收益。在優(yōu)化此類(lèi)模型時(shí),如何在不影響精度的同時(shí)對(duì)模型進(jìn)行壓縮或輕量化處理是一項(xiàng)不可或缺的技巧。除此之外,在異構(gòu)平臺(tái)和框架上進(jìn)行部署,還涉及到減少內(nèi)存/設(shè)備存儲(chǔ)之間的數(shù)據(jù)搬運(yùn)等優(yōu)化思路。因此,在壓縮模型的同時(shí),還需要考慮對(duì)原始 pytorch 模型推理 forward/generates 等函數(shù)流水線的優(yōu)化,而 OpenVINO 在優(yōu)化模型自身的同時(shí),還將流水線的優(yōu)化思路體現(xiàn)在修改模型結(jié)構(gòu)中(將 KV cache保存在模型內(nèi)部),通過(guò)優(yōu)化 Optimum-intel 等框架的流水線,減少內(nèi)存拷貝和數(shù)據(jù)搬運(yùn)。

結(jié) 論

筆者根據(jù)上述方法重新設(shè)計(jì)執(zhí)行圖并優(yōu)化了 GLMBlock,消除了 ChatGLM 模型輸入和輸出之間的內(nèi)存副本,且模型運(yùn)行高效。隨著 OpenVINO 的不斷升級(jí),本方案的優(yōu)化工作也將得到推廣并集成至正式發(fā)布的版本中。這將有助于擴(kuò)展更多的大語(yǔ)言模型用例。敬請(qǐng)參考 OpenVINO 官方版本3 和 Optimum-intel OpenVINO 后端4,獲取有關(guān)大語(yǔ)言模型的官方高效支持。

作者簡(jiǎn)介:

英特爾OpenVINO 開(kāi)發(fā)工具客戶(hù)支持工程師趙楨和鄒文藝,英特 OpenVINO 開(kāi)發(fā)工具 AI 框架工程師羅成和李亭騫,都在從事 AI 軟件工具開(kāi)發(fā)與優(yōu)化工作。


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

    關(guān)注

    61

    文章

    10196

    瀏覽量

    174705
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11080

    瀏覽量

    217116

原文標(biāo)題:一個(gè)簡(jiǎn)單模型就讓ChatGLM性能大幅提升 | 最“in”大模型

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    數(shù)據(jù)標(biāo)注與大模型的雙向賦能:效率與性能的躍升

    ??在人工智能蓬勃發(fā)展的時(shí)代,大模型憑借其強(qiáng)大的學(xué)習(xí)與泛化能力,已成為眾多領(lǐng)域創(chuàng)新變革的核心驅(qū)動(dòng)力。而數(shù)據(jù)標(biāo)注作為大模型訓(xùn)練的基石,為大模型性能提升
    的頭像 發(fā)表于 06-04 17:15 ?701次閱讀
    數(shù)據(jù)標(biāo)注與大<b class='flag-5'>模型</b>的雙向賦能:效率與<b class='flag-5'>性能</b>的躍升

    如何將個(gè)FA模型開(kāi)發(fā)的聲明式范式應(yīng)用切換到Stage模型

    模型切換概述 本文介紹如何將個(gè)FA模型開(kāi)發(fā)的聲明式范式應(yīng)用切換到Stage模型,您需要完成如下動(dòng)作: 工程切換:新建
    發(fā)表于 06-04 06:22

    首創(chuàng)開(kāi)源架構(gòu),天璣AI開(kāi)發(fā)套件讓端側(cè)AI模型接入得心應(yīng)手

    的端側(cè)部署,Token產(chǎn)生速度提升了40%,讓端側(cè)大模型擁有更高的計(jì)算效率和推理性能,使端側(cè)AI交互響應(yīng)更及時(shí),用戶(hù)體驗(yàn)更貼心。 聯(lián)發(fā)科還與vivo和全民K歌攜手,借助天璣AI人聲萃取技術(shù),
    發(fā)表于 04-13 19:52

    添越智創(chuàng)基于 RK3588 開(kāi)發(fā)板部署測(cè)試 DeepSeek 模型全攻略

    為定點(diǎn)模型,這過(guò)程不僅能有效減少模型存儲(chǔ)空間,還能大幅降低計(jì)算量,顯著提升模型在硬件上的運(yùn)行效
    發(fā)表于 02-14 17:42

    【「基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化」閱讀體驗(yàn)】+第章初體驗(yàn)

    機(jī)制。 《基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化》第章以清晰的邏輯框架,幫助讀者建立對(duì)大模型與RAG的全局認(rèn)知。通過(guò)剖析技術(shù)原理、優(yōu)勢(shì)與挑戰(zhàn),作者為后續(xù)章節(jié)的實(shí)踐內(nèi)容奠定了基礎(chǔ)。對(duì)于開(kāi)發(fā)者而言,掌握RAG技術(shù)不僅是
    發(fā)表于 02-07 10:42

    【「基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化」閱讀體驗(yàn)】+大模型微調(diào)技術(shù)解讀

    集對(duì)模型進(jìn)行進(jìn)步訓(xùn)練的過(guò)程。 大模型微調(diào)是利用預(yù)訓(xùn)練模型的權(quán)重和特征,通過(guò)在新任務(wù)數(shù)據(jù)集上的訓(xùn)練,對(duì)模型進(jìn)行適應(yīng)性和優(yōu)化調(diào)整。使
    發(fā)表于 01-14 16:51

    AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測(cè)模型

    的 one-shot 搜索的工作。目標(biāo)檢測(cè)模型搭配在分類(lèi)上高性能的主干網(wǎng)絡(luò),可能會(huì)因?yàn)椴煌蝿?wù)間的差異而性能下降。Picodet 沒(méi)有去搜索個(gè)
    發(fā)表于 12-19 14:33

    【「大模型啟示錄」閱讀體驗(yàn)】如何在客服領(lǐng)域應(yīng)用大模型

    內(nèi)為企業(yè)帶來(lái)效益。在選擇模型時(shí),需要評(píng)估其性能表現(xiàn)。這包括模型的準(zhǔn)確性、響應(yīng)速度、對(duì)話流暢性、情感理解能力等方面。可以通過(guò)對(duì)比不同模型的測(cè)試結(jié)果、查看用戶(hù)反饋和評(píng)分等方式來(lái)評(píng)估
    發(fā)表于 12-17 16:53

    什么是大模型、大模型是怎么訓(xùn)練出來(lái)的及大模型作用

    ,基礎(chǔ)模型。 ? 大模型個(gè)簡(jiǎn)稱(chēng),完整的叫法,應(yīng)該是“人工智能預(yù)訓(xùn)練大模型”。預(yù)訓(xùn)練,是項(xiàng)技
    的頭像 發(fā)表于 11-25 09:29 ?1.3w次閱讀
    什么是大<b class='flag-5'>模型</b>、大<b class='flag-5'>模型</b>是怎么訓(xùn)練出來(lái)的及大<b class='flag-5'>模型</b>作用

    如何通過(guò)OSI七層模型優(yōu)化網(wǎng)絡(luò)性能

    七層模型的各個(gè)層次,可以顯著提升網(wǎng)絡(luò)性能。以下是通過(guò)OSI七層模型優(yōu)化網(wǎng)絡(luò)性能的具體方法:
    的頭像 發(fā)表于 11-24 11:14 ?1018次閱讀

    使用vLLM+OpenVINO加速大語(yǔ)言模型推理

    隨著大語(yǔ)言模型的廣泛應(yīng)用,模型的計(jì)算需求大幅提升,帶來(lái)推理時(shí)延高、資源消耗大等挑戰(zhàn)。
    的頭像 發(fā)表于 11-15 14:20 ?1428次閱讀
    使用vLLM+OpenVINO加速大語(yǔ)言<b class='flag-5'>模型</b>推理

    為T(mén)HS3001構(gòu)建個(gè)簡(jiǎn)單的SPICE模型

    電子發(fā)燒友網(wǎng)站提供《為T(mén)HS3001構(gòu)建個(gè)簡(jiǎn)單的SPICE模型.pdf》資料免費(fèi)下載
    發(fā)表于 10-29 10:11 ?1次下載
    為T(mén)HS3001構(gòu)建<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>簡(jiǎn)單</b>的SPICE<b class='flag-5'>模型</b>

    AI大模型性能優(yōu)化方法

    AI大模型性能優(yōu)化是個(gè)復(fù)雜而關(guān)鍵的任務(wù),涉及多個(gè)方面和策略。以下是些主要的性能優(yōu)化方法:
    的頭像 發(fā)表于 10-23 15:01 ?2425次閱讀

    模型時(shí)代的算力需求

    現(xiàn)在AI已進(jìn)入大模型時(shí)代,各企業(yè)都爭(zhēng)相部署大模型,但如何保證大模型的算力,以及相關(guān)的穩(wěn)定性和性能,是個(gè)
    發(fā)表于 08-20 09:04

    chatglm2-6b在P40上做LORA微調(diào)

    2-6B chatglm2-6b相比于chatglm有幾方面的提升: 1. 性能提升: 相比初代模型
    的頭像 發(fā)表于 08-13 17:12 ?847次閱讀
    <b class='flag-5'>chatglm</b>2-6b在P40上做LORA微調(diào)