女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

利用Arm i8mm指令優化llama.cpp

Arm社區 ? 來源:Arm社區 ? 2025-07-24 09:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文將為你介紹如何利用 Arm i8mm 指令,具體來說,是通過帶符號 8 位整數矩陣乘加指令 smmla,來優化 llama.cpp 中 Q6_K 和 Q4_K 量化模型推理。

llama.cpp 量化

llama.cpp 是一個開源的 C++ 庫,用于運行大語言模型 (LLM),針對加速 CPU 推理進行了優化。通過量化等技術(例如 8 位或 4 位整數格式)來減少內存占用并加快計算速度,從而實現在消費級和服務器級硬件上高效部署模型。

llama.cpp 支持多種量化方式。量化可在模型精度和性能之間取得平衡。數據量越小,推理速度越快,但可能會因困惑度升高而致使精度降低。例如,Q8_0 采用 8 位整數表示一個數據點,而 Q6_K 則將數據量縮減至 6 位。

量化以塊為單位進行,同一個塊中的數據點共享一個縮放因子。例如,Q8_0 的處理以 32 個數據點為一個塊,具體過程如下:

從原始數據中提取 32 個浮點值,記為 f[0:32]

計算絕對值的最大值,即 mf = max(abs(f[0:32]))

計算縮放因子:scale_factor = mf / (max(int8)) = mf / 127

量化:q[i] = round(f[i] / scale_factor)

反量化:v[i] = q[i] * scale_factor

Q6_K 則更為復雜。如下圖所示,數據點分為兩個層級:

一個超級塊包含 256 個數據點,并對應一個浮點格式的超級塊縮放因子

每個超級塊由 16 個子塊組成。每個子塊包含 16 個數據點,這些數據點共享一個整數格式的子塊級縮放因子。

ad783d60-63c3-11f0-a6aa-92fbcf53809c.png

圖 1:Llama.cpp Q6_K 量化

利用 Arm i8mm 指令

優化 llama.cpp

與大多數人工智能 (AI) 工作負載相同,在 LLM 推理過程中,大部分 CPU 周期都耗費在矩陣乘法運算上。Arm i8mm(具體是指 smmla 指令)能夠有效加速 8 位整數矩陣乘法運算。

為了說明 smmla 指令的作用及其高效性,假設我們要對下圖中的兩個矩陣進行乘法運算。

ad863258-63c3-11f0-a6aa-92fbcf53809c.png

圖 2:矩陣乘法

按照教科書上的方法,我們可以逐一計算輸出矩陣中的四個標量,即第一個輸出標量是矩陣 x 的第一行與矩陣 y 的第一列的內積。依此類推,需要進行四次內積運算。

還有一種更高效的方法,即外積法。如下圖所示,我們可以用矩陣 x 的第一列乘以矩陣 y 的第一行,一次性得出四個部分輸出標量。將這兩個部分輸出相加就能得到結果,這樣只需要兩次外積運算即可。

ad9ad348-63c3-11f0-a6aa-92fbcf53809c.png

圖 3:外積

smmla 指令實現了向量級別的外積運算,如下圖所示。請注意,vmmlaq_s32 是實現 smmla 指令的編譯器內建函數。

每個輸入向量 (int8x16) 被拆分為兩個 int8x8 向量

計算四對 int8x8 向量的內積

將結果存儲到輸出向量 (int32x4) 的四個通道中

ada77fd0-63c3-11f0-a6aa-92fbcf53809c.png

圖 4:smmla 指令

借助 smmla 指令,我們可以通過同時處理兩行和兩列來加速矩陣乘法。如下圖所示,計算步驟如下:

從矩陣 x 中加載兩行數據 (int8x16) 到 vx0 和 vx1,從矩陣 y 中加載兩列數據到 vy0 和 vy1

對 vx0 和 vx1 進行“壓縮”操作,將這兩個向量的下半部分合并為一個向量,上半部分合并為另一個向量。這是確保 smmla 指令正確工作的必要步驟。對 vy0 和 vy1 執行相同操作

使用兩條 smmla 指令計算四個臨時標量結果

處理下一個數據塊并累積臨時結果,直到處理完所有數據

adb43112-63c3-11f0-a6aa-92fbcf53809c.png

圖 5:使用 smmla 指令進行矩陣乘法

我們利用 smmla 指令對 llama.cpp 的 Q6_K 和 Q4_K 矩陣乘法內核進行了優化,并在 Arm Neoverse N2 平臺上進行了測試,觀察到性能有顯著提升。下圖展示了 Q6_K 優化前后 llama.cpp 的性能對比,其中:

S_TG 代表詞元生成速度,數值越高代表性能越好

S_PP 代表提示詞預填充速度,數值越高代表性能越好

adc4ffa6-63c3-11f0-a6aa-92fbcf53809c.png

圖 6:Arm i8mm 提升 llama.cpp Q6_K 模型性能

上游補丁

[1]利用 Arm i8mm 優化 llama.cpp Q6_K 內核:

https://github.com/ggml-org/llama.cpp/pull/13519

[2]利用 Arm i8mm 優化 llama.cpp Q4_K 內核:

https://github.com/ggml-org/llama.cpp/pull/13886

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

    關注

    134

    文章

    9360

    瀏覽量

    378024
  • 指令
    +關注

    關注

    1

    文章

    617

    瀏覽量

    36561
  • 開源
    +關注

    關注

    3

    文章

    3711

    瀏覽量

    43888
  • 模型
    +關注

    關注

    1

    文章

    3526

    瀏覽量

    50494

原文標題:一文詳解如何利用 Arm i8mm 指令優化 llama.cpp

文章出處:【微信號:Arm社區,微信公眾號:Arm社區】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    llama.cpp代碼結構&調用流程分析

    llama.cpp 的代碼結構比較直觀,如下所示,為整體代碼結構中的比較核心的部分的代碼結構
    的頭像 發表于 11-07 09:23 ?3607次閱讀
    <b class='flag-5'>llama.cpp</b>代碼結構&amp;調用流程分析

    大模型筆記之gem5運行模型框架LLama介紹

    LLama.cpp 支持x86,arm,gpu的編譯。
    的頭像 發表于 01-22 09:10 ?2358次閱讀
    大模型筆記之gem5運行模型框架<b class='flag-5'>LLama</b>介紹

    【飛騰派4G版免費試用】仙女姐姐的嵌入式實驗室之五~LLaMA.cpp及3B“小模型”OpenBuddy-StableLM-3B

    和語法規則,將這些詞匯串聯起來,形成一個完整的回答 關于LLaMALLaMA.cpp LLaMA全稱是Large Language Model Meta AI,是由Meta AI研究人員發布的一個
    發表于 12-22 10:18

    [技術] 【飛凌嵌入式OK3576-C開發板體驗】llama2.c部署

    llama2.c 是一個用純 C 語言實現的輕量級推理引擎,無需依賴任何第三方庫即可高效地進行推理任務。與 llama.cpp 相比,其代碼更加直觀易懂,并且可以在 PC、嵌入式 Linux 乃至
    發表于 09-18 23:58

    將Deepseek移植到i.MX 8MP|93 EVK的步驟

    此共享介紹了如何將 deepseek 移植到i.MX93EVK使用 llama.cpp 的 Yocto BSP 本文檔使用的主要測試模型是在 deepseek 模型的基礎上進行提煉和量化的 Qwen
    發表于 03-26 06:08

    使用 NPU 插件對量化的 Llama 3.1 8b 模型進行推理時出現“從 __Int64 轉換為無符號 int 的錯誤”,怎么解決?

    安裝了 OpenVINO? GenAI 2024.4。 使用以下命令量化 Llama 3.1 8B 模型: optimum-cli export openvino -m meta-llama
    發表于 06-25 07:20

    ARM程序設計優化策略與技術

    位來完成。實際上乘以任何一個整數都可以用移位和加法來代替乘法。ARM 7 中加法和移位可以通過一條指令來完成,且執行時間少于乘法指令。例如: i =
    發表于 07-07 11:06

    基于ARM的除法運算優化策略

    指令流水線的優化、針對寄存器分配進行的優化等。   ARM在硬件上不支持除法指令,編譯器是通過調用C庫函數來實現除法運算的,有許多不同類型的
    發表于 07-14 14:48

    介紹一些ARM NEON編程中常見的優化技巧

    NEON 優化技術在利用NEON優化程序時,有下述幾項比較通用的優化技巧。2.1 降低數據依賴性在ARM v7-A NEON
    發表于 03-30 09:21

    請問arm必須要對生成的匯編指令進行優化

    請問在用ARM neon指令優化程序時,在一個for循環下,分別用int32x2_t和int32x4_t類型的指令,后者的速度并沒有按照理論上的速度更快,反而比前者慢是怎么回事呢?必須
    發表于 10-18 11:23

    ARM指令集詳解

    ARM指令集詳解 內容提要 ARM指令ARM指令集分類與
    發表于 03-09 09:39 ?263次下載
    <b class='flag-5'>ARM</b><b class='flag-5'>指令</b>集詳解

    ARM指令系統

    ARM指令操作,ARM基礎常用指令,使用新手學習
    發表于 12-20 22:27 ?0次下載

    如何優化 Llama 3 的輸入提示

    優化輸入提示(prompt engineering)是提高人工智能模型輸出質量的關鍵步驟。對于Llama 3這樣的模型,優化輸入提示可以幫助模型更準確地理解用戶的意圖,從而生成更相關和高質量的內容
    的頭像 發表于 10-27 14:39 ?838次閱讀

    K1 AI CPU基于llama.cpp與Ollama的大模型部署實踐

    AICPU芯片,已于今年4月份發布。下面我們以K1為例,結合llama.cpp來展示AICPU在大模型領域的優勢。
    的頭像 發表于 02-18 14:23 ?989次閱讀
    K1 AI CPU基于<b class='flag-5'>llama.cpp</b>與Ollama的大模型部署實踐

    Arm Neoverse N2平臺實現DeepSeek-R1滿血版部署

    頗具優勢。Arm 攜手合作伙伴,在 Arm Neoverse N2 平臺上使用開源推理框架 llama.cpp 實現 DeepSeek-R1 滿血版的部署,目前已可提供線上服務。
    的頭像 發表于 07-03 14:37 ?406次閱讀
    <b class='flag-5'>Arm</b> Neoverse N2平臺實現DeepSeek-R1滿血版部署