精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于ChatGLM2和OpenVINO?打造中文聊天助手

英特爾物聯網 ? 來源:OpenVINO 中文社區 ? 2023-08-24 17:13 ? 次閱讀

基于ChatGLM2和OpenVINO?打造中文聊天助手

ChatGLM 是由清華大學團隊開發的是一個開源的、支持中英雙語的類 ChatGPT 大語言模型,它能生成相當符合人類偏好的回答, ChatGLM2 是開源中英雙語對話模型 ChatGLM 的第二代版本,在保留了初代模型對話流暢、部署門檻較低等眾多優秀特性的基礎之上,通過全面升級的基座模型,帶來了更強大的性能,更長的上下文,并且該模型對學術研究完全開放,登記后亦允許免費商業使用。接下來我們分享一下如何基于 ChatGLM2-6B 和 OpenVINO? 工具套件來打造一款聊天機器人

注1:由于 ChatGLM2-6B 對在模型轉換和運行過程中對內存的占用較高,推薦使用支持 128Gb 以上內存的的服務器終端作為測試平臺。

注2:本文僅分享部署 ChatGLM2-6B 原始預訓練模型的方法,如需獲得自定義知識的能力,需要對原始模型進行 Fine-tune;如需獲得更好的推理性能,可以使用量化后的模型版本。

OpenVINO?

模型導出

**第一步,**我們需要下載 ChatGLM2-6B 模型,并將其導出為 OpenVINO? 所支持的IR格式模型進行部署,由于 ChatGLM 團隊已經將 6B 版本的預訓練模型發布在 Hugging Face 平臺上,支持通過 Transformer 庫進行推理,但不支持基于Optimum 的部署方式(可以參考Llama2的文章),因此這里我們需要提取 Transformer 中的 ChatGLM2 的 PyTorch 模型對象,并實現模型文件的序列化。主要步驟可以分為:

1.獲取 PyTorch 模型對象

通過Transformer庫獲取PyTorch對象,由于目前Transformer中原生的ModelForCausalLM類并不支持ChatGLM2模型架構,因此需要添加trust_remote_code=True參數,從遠程模型倉庫中獲取模型結構信息,并下載權重。

wKgaomTnH8OAS6lXAAAfeSSbI8Q182.jpg

2.模擬并獲取模型的輸入輸出參數

在調用 torch.onnx.export 接口將模型對象導出為 ONNX 文件之前,我們首先需要獲取模型的輸入和輸出信息。由于 ChatGLM2 存在 KV cache 機制,因此這個步驟中會模擬第一次文本生成時不帶 cache 的輸入,并將其輸出作為第二次迭代時的 cache 輸入,再通過第二次迭代來驗證輸入數據是否完整。以下分別第一次和第二次迭代的 PyTorch 代碼:

wKgZomTnH9iAUW0JAAA_qB591AI245.jpg

3.導出為ONNX格式

在獲取完整的模型輸入輸出信息后,我們可以利用 torch.onnx.export 接口將模型導出為 ONNX 文件,如果通過模型結構可視化工具查看該文件的話,不難發現原始模型對象中 attention_mask 這個 input layer 消失了,個人理解是因為 attention_mask 對模型的輸出結果沒有影響,并且其實際功能已經被 position_ids 代替了,所以 ONNX 在轉化模型的過程中自動將其優化掉了。

4.利用 OpenVINO? Model Optimizer 進行格式轉換

最后一步可以利用 OpenVINO? 的 Model Optimizer 工具將模型文件轉化為 IR 格式,并壓縮為 FP16 精度,將較原始 FP32 模式,FP16 模型可以在保證模型輸出準確性的同時,減少磁盤占用,并優化運行時的內存開銷。

**模型部署 **

當完成 IR 模型導出后,我們首先需要構建一個簡單的問答系統 pipeline,測試效果。如下圖所示, Prompt 提示會送入 Tokenizer 進行分詞和詞向量編碼,然后有 OpenVINO? 推理獲得結果(藍色部分),來到后處理部分,我們會把推理結果進行進一步的采樣和解碼,最后生成常規的文本信息。這里 Top-K 以及 Top-P作 為答案的篩選方法,最終從篩選后的答案中進行隨機采樣輸出結果。

wKgaomTnH5WAbE56AABw8VnsJ7E536.jpg

圖:ChatGLM2 問答任務流程

整個 pipeline 的大部分代碼都可以套用文本生成任務的常規流程,其中比較復雜一些的是 OpenVINO? 推理部分的工作,由于 ChatGLM2-6B 文本生成任務需要完成多次遞歸迭代,并且每次迭代會存在 cache 緩存,因此我們需要為不同的迭代輪次分別準備合適的輸入數據。接下來我們詳細解構一下模型的運行邏輯:

wKgZomTnH5WAJKPTAAC_OMCBsFc955.jpg

圖:ChatGLM2-6B模型輸入輸出原理

ChatGLM2 的 IR 模型的輸入主要由三部分組成:

**· input_ids **是向量化后的提示輸入

**· position_ids **用來描述輸入的位置信息,例如原始的 prompt 數據為 “How are you”, 那這是 position_ids 就是[[1,2,3]], 如果輸入為原始 prompt 的后的第一個被預測詞:”I”, 那 position_ids 則為[[4]], 以此類推。

**· past_key_values.x **是由一連串數據構成的集合,用來保存每次迭代過程中可以被共享的 cache.

ChatGLM2 的 IR 模型的輸出則由兩部分組成:

**· Logits **為模型對于下一個詞的預測,或者叫 next token

· present_key_values.x則可以被看作 cache,直接作為下一次迭代的 past_key_values.x 值

整個 pipeline 在運行時會對 ChatGLM2 模型進行多次迭代,每次迭代會遞歸生成對答案中下一個詞的預測,直到最終答案長度超過預設值 max_sequence_length,或者預測的下一個詞為終止符 eos_token_id。

· 第一次迭代

如圖所示在一次迭代時(N=1)input_ids 為提示語句,此時我們還需要利用 Tokenizer 分詞器將原始文本轉化為輸入向量,而由于此時無法利用 cache 進行加速,past_key_values.x 系列向量均為空值,這里我們會初始化一個維度為[0,1,2,128]的空值矩陣

· 第N次迭代

當第一次迭代完成后,會輸出對于答案中第一個詞的預測 Logits,以及 cache 數據,我們可以將這個 Logits 作為下一次迭代的 input_ids 再輸入到模型中進行下一次推理(N=2), 此時我們可以利用到上次迭代中的 cache 數據也就是 present_key_values.x,而無需每次將完整的“提示+預測詞”一并送入模型,從而減少一些部分重復的計算量。這樣周而復始,將當前的預測詞所謂一次迭代的輸入,就可以逐步生成所有的答案。

詳細代碼如下,這里可以看到如果 past_key_values 等于 None 就是第一次迭代,此時需要構建一個值均為空的 past_key_values 系列,如果不為 None 則會將真實的 cache 數據加入到輸入中。

wKgZomTnH_mAM3u_AACRPt3WdJ8926.jpg

測試輸出如下:

命令:python3 generate_ov.py -m "THUDM/chatglm2-6b" -p "請介紹一下上海?"

ChatGLM2-6B 回答:

“上海是中國的一個城市,位于東部沿海地區,是中國重要的經濟、文化和科技中心之一。

上海是中國的一個重要港口城市,是中國重要的進出口中心之一,也是全球著名的金融中心之一。上海是亞洲和全球經濟的中心之一,擁有許多國際知名金融機構和跨國公司總部。

上海是一個擁有悠久歷史和豐富文化的城市。上海是中國重要的文化城市之一,擁有許多歷史文化名勝和現代文化地標。上海是中國的一個重要旅游城市,吸引了大量國內外游客前來觀光旅游。“

上海是一個擁有重要經濟功能的現代城市。“

OpenVINO?

聊天助手

官方示例中 ChatGLM2 的主要用途為對話聊天,相較于問答模型模式中一問一答的形式,對話模式則需要構建更為完整的對話,此時模型在生成答案的過程中還需要考慮到之前對話中的信息,并將其作為 cache 數據往返于每次迭代過程中,因此這里我們需要額外設計一個模板,用于構建每一次的輸入數據,讓模型能夠給更充分理解哪些是歷史對話,哪些是新的對話問題。

wKgaomTnH5WAXDqYAACHDs-LlHE208.jpg

圖:ChatGLM2對話任務流程

這里的 text 模板是由“引導詞+歷史記錄+當前問題(提示)”三部分構成:

· 引導詞:描述當前的任務,引導模型做出合適的反饋

· 歷史記錄:記錄聊天的歷史數據,包含每一組問題和答案

· 當前問題:類似問答模式中的問題

我們采用 streamlit 框架構建構建聊天機器人的 web UI 和后臺處理邏輯,同時希望該聊天機器人可以做到實時交互,實時交互意味著我們不希望聊天機器人在生成完整的文本后再將其輸出在可視化界面中,因為這個需要用戶等待比較長的時間來獲取結果,我們希望在用戶在使用過程中可以逐步看到模型所預測的每一個詞,并依次呈現。因此我們需要創建一個可以被迭代的方法 generate_iterate,可以依次獲取模型迭代過程中每一次的預測結果,并將其依次添加到最終答案中,并逐步呈現。

當完成任務構建后,我們可以通過 streamlit run chat_robot.py 命令啟動聊天機器,并訪問本地地址進行測試。這里選擇了幾個常用配置參數,方便開發者根據機器人的回答準確性進行調整:

· 系統提示詞:用于引導模型的任務方向

**· max_tokens: **生成句子的最大長度。

· top-k:從置信度對最高的k個答案中隨機進行挑選,值越高生成答案的隨機性也越高。

**· top-p: **從概率加起來為 p 的答案中隨機進行挑選, 值越高生成答案的隨機性也越高,一般情況下,top-p 會在 top-k 之后使用。

· Temperature:從生成模型中抽樣包含隨機性, 高溫意味著更多的隨機性,這可以幫助模型給出更有創意的輸出。如果模型開始偏離主題或給出無意義的輸出,則表明溫度過高。

注3:由于 ChatGLM2-6B 模型比較大,首次硬件加載和編譯的時間會相對比較久

OpenVINO?

總結

作為當前最熱門的雙語大語言模型之一,ChatGLM2 憑借在各大基準測試中出色的成績,以及支持微調等特性被越來越多開發者所認可和使用。利用 OpenVINO? 構建 ChatGLM2 系列任務可以進一步提升其模型在英特爾平臺上的性能,并降低部署門檻。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3601

    瀏覽量

    134201
  • 向量機
    +關注

    關注

    0

    文章

    166

    瀏覽量

    20856
  • cache技術
    +關注

    關注

    0

    文章

    41

    瀏覽量

    1048
  • pytorch
    +關注

    關注

    2

    文章

    803

    瀏覽量

    13152
  • ChatGPT
    +關注

    關注

    29

    文章

    1549

    瀏覽量

    7507

原文標題:基于 ChatGLM2 和 OpenVINO? 打造中文聊天助手 | 開發者實戰

文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    bus hound中文使用說明u***調試助手

    bus hound中文使用說明u***調試助手
    發表于 03-23 19:27

    CoolPi CM5運行ChatGLM-MNN大語言模型

    ChatGLM-MNN project git clone https://github.com/wangzhaode/ChatGLM-MNN.git Compile MNN library
    發表于 04-29 09:39

    Coolpi CM5運行ChatGLM-MNN大語言模型

    Download ChatGLM-MNN project git clone https://github.com/wangzhaode/ChatGLM-MNN.git Compile MNN
    發表于 05-03 11:30

    使用OpenVINO trade 2021版運行Face_recognition_demo時報錯怎么解決?

    importing ie_api 推斷 face_recognition_demo 與 OpenVINO? 2021 版本和 英特爾? 神經電腦棒 2 (英特爾? NCS2) 插件丟點錯
    發表于 08-15 06:20

    微信聊天記錄導出恢復助手應用程序免費下載

    本文檔的主要內容詳細介紹的是微信聊天記錄導出恢復助手應用程序免費下載。
    發表于 02-11 09:14 ?13次下載
    微信<b class='flag-5'>聊天</b>記錄導出恢復<b class='flag-5'>助手</b>應用程序免費下載

    云百件客服聊天助手-Windows版特性-云百件

    云百件客服聊天助手是一款協助于網絡客服接待人員快速回復、微信多開等的工具軟件 話術可快速搜索,實現一鍵快捷回復客戶信息,話術云端存儲和同步,可快捷高質量統一回復 預先存儲話術,云端同步。不管是新老
    發表于 09-16 18:04 ?447次閱讀
    云百件客服<b class='flag-5'>聊天</b><b class='flag-5'>助手</b>-Windows版特性-云百件

    清華系千億基座對話模型ChatGLM開啟內測

    ChatGLM-6B 使用了和 ChatGLM 相同的技術,針對中文問答和對話進行了優化。經過約 1T 標識符的中英雙語訓練,輔以監督微調、反饋自助、人類反饋強化學習等技術的加持,62 億參數的
    的頭像 發表于 03-17 13:47 ?2065次閱讀

    ChatGLM2-6B:性能大幅提升,8-32k上下文,推理提速42%,在中文榜單位列榜首

    在主要評估LLM模型中文能力的 C-Eval 榜單中,截至6月25日 ChatGLM2 模型以 71.1 的分數位居 Rank 0 ,ChatGLM2-6B 模型以 51.7 的分數位居 Rank 6,是榜單上排名最高的開源模型
    的頭像 發表于 06-26 14:30 ?961次閱讀
    <b class='flag-5'>ChatGLM2</b>-6B:性能大幅提升,8-32k上下文,推理提速42%,在<b class='flag-5'>中文</b>榜單位列榜首

    ASMAv2OpenVINO的開源項目

    電子發燒友網站提供《ASMAv2OpenVINO的開源項目.zip》資料免費下載
    發表于 06-29 11:43 ?0次下載
    ASMAv<b class='flag-5'>2</b>與<b class='flag-5'>OpenVINO</b>的開源項目

    單樣本微調給ChatGLM2注入知識

    LoRA微調是一種高效的融入學習算法。類似人類把新知識融入現有知識體系的學習過程。學習時無需新知識特別多的樣本,學習后原有的龐大知識和能力可以基本不受影響。
    的頭像 發表于 07-18 14:44 ?3011次閱讀
    單樣本微調給<b class='flag-5'>ChatGLM2</b>注入知識

    ChatGLM2-6B解析與TPU部署

    ChatGLM2-6B解析與TPU部署
    的頭像 發表于 08-18 11:28 ?771次閱讀
    <b class='flag-5'>ChatGLM2</b>-6B解析與TPU部署

    一個簡單模型就讓ChatGLM性能大幅提升 | 最“in”大模型

    引言 自大語言模型 (LLM) 成為熱點話題以來,涌現了一大批中文大語言模型并在優化平臺中得到了積極部署。 ChatGLM 正是廣受好評的主流中文 LLM 之一。 然而,由于 ChatGLM
    的頭像 發表于 08-19 11:15 ?820次閱讀
    一個簡單模型就讓<b class='flag-5'>ChatGLM</b>性能大幅提升 | 最“in”大模型

    探索ChatGLM2在算能BM1684X上INT8量化部署,加速大模型商業落地

    1.背景介紹在2023年7月時我們已通過靜態設計方案完成了ChatGLM2-6B在單顆BM1684X上的部署工作,量化模式F16,模型大小12GB,平均速度約為3token/s,詳見《算豐技術揭秘
    的頭像 發表于 10-10 10:18 ?3609次閱讀
    探索<b class='flag-5'>ChatGLM2</b>在算能BM1684X上INT8量化部署,加速大模型商業落地

    “行空板+大模型”——基于ChatGLM的多角色交互式聊天機器人

    模型,結合了深度學習技術和大量中文語料的訓練成果。它在自然語言理解和生成方面展現了出色性能,為國內的自然語言處理研究與應用提供了有力支持。 通過使用行空板和UGB喇叭,你可以制作一個有趣好玩的聊天機器人應用。只需修改角色描述,你就能打造
    的頭像 發表于 12-08 14:11 ?592次閱讀

    chatglm2-6b在P40上做LORA微調

    背景: 目前,大模型的技術應用已經遍地開花。最快的應用方式無非是利用自有垂直領域的數據進行模型微調。chatglm2-6b在國內開源的大模型上,效果比較突出。本文章分享的內容是用
    的頭像 發表于 08-13 17:12 ?441次閱讀
    <b class='flag-5'>chatglm2</b>-6b在P40上做LORA微調