国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

如何在Arm Neoverse N2平臺上提升llama.cpp擴展性能

Arm社區(qū) ? 來源:Arm社區(qū) ? 2026-02-11 10:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:安謀科技 (Arm China) 主任軟件工程師 Bolt Liu

跨 NUMA 內存訪問可能會限制 llama.cpp 在 Arm Neoverse 平臺上的擴展能力。本文將為你詳細分析這一問題,并通過引入原型驗證補丁來加以解決。測試結果表明,在基于 Neoverse N2 平臺的系統(tǒng)上運行 llama3_Q4_0 模型時,該補丁可使文本生成性能提升多達 55%。

跨 NUMA 內存訪問問題

在 llama.cpp 中,當線程數超過 NUMA 節(jié)點中的核心數時,性能會下降。本示例基于每個 NUMA 節(jié)點包含 64 個核心的系統(tǒng),并使用 llama3_Q4_0 模型進行測試。

be400090-0366-11f1-90a1-92fbcf53809c.png

根本原因分析

當線程跨越多個 NUMA 節(jié)點運行時,性能下降主要源于以下兩個原因:

ggml_barrier() 函數調用中的跨 NUMA 節(jié)點原子操作非常耗時。

MulMat 算子的張量緩沖區(qū)存在大量的跨 NUMA 內存訪問。

ggml_barrier 問題

在多線程環(huán)境下運行 llama.cpp 時,每個線程負責計算張量數據的一部分。在所有線程完成計算后,會使用 barrier 來確保數據同步。隨著線程數的增加,性能會下降;當線程數超過 NUMA 節(jié)點(每個節(jié)點 64 個核心)時,性能下降現(xiàn)象愈發(fā)明顯。

bebeb85e-0366-11f1-90a1-92fbcf53809c.png

MulMat 算子問題

llama.cpp 中的 MulMat 算子是主要的性能瓶頸。理論上,增加線程數應該可以提高性能,但實際情況并非如此。原因在于張量緩沖區(qū)是通過 malloc() 分配的,而 malloc() 不具有 NUMA 感知能力,會導致大量的跨 NUMA 內存訪問。

bf29b9a6-0366-11f1-90a1-92fbcf53809c.png

優(yōu)化方法

為緩解上述的跨 NUMA 問題,本文采用了兩種優(yōu)化方法:ggml_barrier 優(yōu)化,以及 MulMat 算子優(yōu)化。

ggml_barrier 優(yōu)化

此優(yōu)化方案采用“分而治之”的思想對 ggml_barrier 進行優(yōu)化:

使用 NUMA 局部原子變量來實現(xiàn) barrier,速度很快。

僅由特定的 NUMA 節(jié)點中的最后一個完成張量計算的線程與其他 NUMA 節(jié)點的最后一個線程進行跨 NUMA 同步。

通過這種方式,執(zhí)行跨 NUMA 全局原子操作的線程數減少到與所涉及的 NUMA 節(jié)點數相當。

bf92ee76-0366-11f1-90a1-92fbcf53809c.png

ggml_barrier 經優(yōu)化后,即使存在跨 NUMA 操作,性能也不會明顯下降。

bff7fdac-0366-11f1-90a1-92fbcf53809c.png

MulMat 算子優(yōu)化

MulMat 算子在計算過程中,會使用三個張量緩沖區(qū):dst(例如 attn_out、ffn_gate、ffn_out、ffn_up、Kcur、Qcur、Vcur、FP32)、src0(權重)和 src1(例如 attn_norm、ffn_gate_par、ffn_norm、kqv_out FP32)。此優(yōu)化方案將緩沖區(qū)分割成多個片段,以便計算線程盡可能從本地 NUMA 節(jié)點訪問內存。

對于 dst 和 src0 緩沖區(qū),每個線程根據線程 ID 訪問緩沖區(qū)的一部分。通過將緩沖區(qū)分割成 N 個片段(其中 N 為 NUMA 節(jié)點數),在滿足以下條件時,每個線程可以訪問本地 NUMA 節(jié)點中的緩沖區(qū)部分:

線程 ID 與物理核心 ID 有良好的對應關系,可通過線程親和性進行設置。

緩沖區(qū)片段被移動到所需的 NUMA 節(jié)點,這可通過 move_pages() 系統(tǒng)調用來實現(xiàn)。

c0635264-0366-11f1-90a1-92fbcf53809c.png

MulMat 算子在計算期間,src1 被量化并存儲在另一個名為 wdata 的緩沖區(qū)中。MulMat 算子的計算公式如下:dst = src0 * wdata

當每個線程根據線程 ID 訪問 src0 和 dst 時,wdata 緩沖區(qū)需要被這些線程全部訪問。

鑒于量化過程并非 MulMat 算子的主要性能瓶頸,此優(yōu)化方案為每個 NUMA 節(jié)點分別創(chuàng)建一個局部的 wdata 緩沖區(qū),各 NUMA 節(jié)點中的所有線程將 src1 量化至其自有的 wdata,因而總共有 N 個 wdata 副本(N 為 NUMA 節(jié)點數)。

c0c93d40-0366-11f1-90a1-92fbcf53809c.png

優(yōu)化 MulMat 算子計算的張量數據布局后,可以看到性能有了明顯的提升。

c12f7eac-0366-11f1-90a1-92fbcf53809c.png

總體性能比較

llama.cpp 的批處理基準測試結果如下:

NUMA 經優(yōu)化后,性能有了明顯的提升。

在 S_TG t/s 指標上,基準版本的最佳值為 26.52,線程數為 32;啟用 NUMA 優(yōu)化后,最佳值為 41.15,線程數為 40,性能提升 55%。

在 S t/s 指標上,基準版本的最佳值為 48.73,線程數為 36;啟用 NUMA 優(yōu)化后,最佳值為 74.67,線程數為 54,性能提升 53.2%。

c1922020-0366-11f1-90a1-92fbcf53809c.png

本示例使用雙 NUMA 節(jié)點系統(tǒng),NUMA 優(yōu)化前后的內存帶寬數據(如下表所示)表明:優(yōu)化后,各 NUMA 節(jié)點的帶寬保持均衡;而優(yōu)化前,瓶頸會出現(xiàn)在 NUMA 節(jié)點 0 中。

c1f88ad6-0366-11f1-90a1-92fbcf53809c.png

各位開發(fā)者,歡迎獲取 GitHub 上的 NUMA 優(yōu)化補丁:

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

* 本文為 Arm 原創(chuàng)文章,轉載請留言聯(lián)系獲得授權并注明出處。

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

    關注

    9

    文章

    3205

    瀏覽量

    76311
  • 模型
    +關注

    關注

    1

    文章

    3730

    瀏覽量

    52046
  • Neoverse
    +關注

    關注

    0

    文章

    16

    瀏覽量

    4963

原文標題:破解跨 NUMA 性能問題,在 Arm Neoverse N2 上提升 llama.cpp 擴展性能

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    利用Arm i8mm指令優(yōu)化llama.cpp

    本文將為你介紹如何利用 Arm i8mm 指令,具體來說,是通過帶符號 8 位整數矩陣乘加指令 smmla,來優(yōu)化 llama.cpp 中 Q6_K 和 Q4_K 量化模型推理。
    的頭像 發(fā)表于 07-24 09:51 ?1847次閱讀
    利用<b class='flag-5'>Arm</b> i8mm指令優(yōu)化<b class='flag-5'>llama.cpp</b>

    Arm Neoverse家族新增V1和N2兩大平臺,突破高性能計算瓶頸

    帶來 50%和 40%的性能提升。此外,Arm也同時發(fā)布了CMN-700,作為構建基于Neoverse V1和 N2
    的頭像 發(fā)表于 04-30 16:20 ?1.1w次閱讀

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

    目使用了C++重寫了LLaMA模型,使其能夠在硬件較弱的設備使用CPU運行LLaMA模型,不需要較高的顯卡性能 獲取LLaMA.cpp
    發(fā)表于 12-22 10:18

    ARM Neoverse IP的AWS實例etcd分布式鍵對值存儲性能提升

    1、基于ARM Neoverse IP的AWS實例etcd性能提升etcd是一個分布式鍵值對存儲,設計用來可靠而快速的保存關鍵數據并提供給
    發(fā)表于 07-06 17:37

    ARM Neoverse N2 PMU指南

    參考ENEPERN2號更詳盡的描述。 關于NEPERVERT N2號技術參考手冊, 請參考Armé EVERTM N2 技術參考手冊。本文件不討論使用軟件開發(fā)工具或
    發(fā)表于 08-09 06:07

    Arm Neoverse? N2核心加密擴展技術參考手冊

    Neoverse?N2核心支持可選的ARM?v8.0-A和ARM?v8.2-A加密擴展ARM
    發(fā)表于 08-17 07:08

    ARM Neoverse?N2核心技術參考手冊

    Neoverse?N2內核是一款高性能、低功耗的產品,采用ARM?v9.0-A架構。 此實施支持所有以前的ARMv8-A架構實施,包括ARM
    發(fā)表于 08-29 08:12

    互聯(lián)網巨頭紛紛啟用Arm CPU架構,Arm最新Neoverse V1和N2平臺加速云服務器芯片自研

    電子發(fā)燒友網報道(文/黃晶晶)Arm在2018年10月宣布了Neoverse的路線圖,繼2019年Neoverse N1平臺發(fā)布后,今年9月
    發(fā)表于 09-30 14:46 ?1679次閱讀

    新思科技攜手Arm提升高性能計算、數據中心和AI SoC性能加快上市時間

    Arm與新思科技擴展在EDA平臺、IP和參考流程方面的戰(zhàn)略協(xié)議,旨在為Arm下一代Neoverse V1和
    發(fā)表于 05-07 10:06 ?1618次閱讀

    Arm 更新 Neoverse 產品路線圖,實現(xiàn)基于 Arm 平臺的人工智能基礎設施

    Neoverse CSS 產品;與 CSS N2 相比,其單芯片性能可提高 50% Arm Neoverse CSS
    發(fā)表于 02-22 11:41 ?919次閱讀

    Arm發(fā)布新一代Neoverse數據中心計算平臺,AI負載性能顯著提升

    據公開信息顯示,Arm去年推出的Neoverse CSS運算子系統(tǒng)提供了包含處理器設計的預驗證平臺,加快了定制SoC上市進程,首發(fā)型號為Neoverse CSS
    的頭像 發(fā)表于 02-22 14:48 ?1511次閱讀

    ArmArm Neoverse計算子系統(tǒng)(CSS):Arm Neoverse CSS V3和Arm Neoverse CSS N3

    Neoverse CSS N3代表了Arm計算子系統(tǒng)產品組合的最新進展。 Neoverse CSS V3是高性能V系列產品組合的首款產品,
    的頭像 發(fā)表于 04-24 17:53 ?2718次閱讀
    <b class='flag-5'>Arm</b>新<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b>計算子系統(tǒng)(CSS):<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> CSS V3和<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> CSS <b class='flag-5'>N</b>3

    何在基于Arm Neoverse平臺的CPU構建分布式Kubernetes集群

    在本文中,我們將以 X(原 Twitter)為例,演示如何在基于 Arm Neoverse 平臺的 CPU 構建分布式 Kubernete
    的頭像 發(fā)表于 03-25 15:58 ?819次閱讀
    如<b class='flag-5'>何在</b>基于<b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b><b class='flag-5'>平臺</b>的CPU<b class='flag-5'>上</b>構建分布式Kubernetes集群

    Arm Neoverse N2平臺實現(xiàn)DeepSeek-R1滿血版部署

    頗具優(yōu)勢。Arm 攜手合作伙伴,在 Arm Neoverse N2 平臺上使用開源推理框架 llama.
    的頭像 發(fā)表于 07-03 14:37 ?1219次閱讀
    <b class='flag-5'>Arm</b> <b class='flag-5'>Neoverse</b> <b class='flag-5'>N2</b><b class='flag-5'>平臺</b>實現(xiàn)DeepSeek-R1滿血版部署