999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于申威CPU的大型語言模型推理研究與應用

2025-04-20 00:00:00陳偉
物聯網技術 2025年8期

摘 要:目前,ChatGPT、LLaMA、Gemini等大型語言模型已取得了顯著突破,對自然語言處理領域產生了深遠影響。然而,這些模型通常擁有數百億甚至數千億個參數,在部署時對計算資源和存儲需求極高,導致其在計算資源有限的平臺上難以應用。為此,介紹了當前主流的模型壓縮方法,并結合llama.cpp項目,提出了一種在申威平臺上利用純CPU進行大型語言模型部署的方案。文章還針對不同的模型量化方式及多線程推理進行了總結與歸納,為大型語言模型在申威平臺上的實際應用提供了實用指導。

關鍵詞:申威;自然語言處理;大型語言模型;模型壓縮;模型量化;推理提速

中圖分類號:TP181 文獻標識碼:A 文章編號:2095-1302(2025)08-0-04

0 引 言

語言是人類表達思想的一個復雜而精密的系統,受到語法規則的嚴格約束。研究和開發能夠理解并生成語言的強大AI算法,是一項極具挑戰性的任務。近年來,語言建模方法作為重要的研究方向之一,被廣泛應用于語言的理解和生成。從早期的統計語言模型(SLMs)和神經語言模型(NLMs),到基于Transformer的預訓練語言模型(PLMs),這些方法在解決各類自然語言處理(NLP)任務中展現了強大的能

力[1-3]。同時,研究人員發現,在預訓練語言模型的基礎上增加參數規模和數據量,可以顯著提升模型性能。當參數規模超過一定閾值時,這些更大的語言模型不僅能在效果上實現質的飛躍,還展現出小規模模型所不具備的特殊能力,例如上下文學習、指令遵循和逐步推理等。這類模型被稱為大型語言模型(LLMs)。

LLMs是指在大規模文本語料上訓練、包含數百億甚至數千億以上參數的語言模型。隨著參數規模的增加,LLMs能夠捕捉更復雜的語言結構和語義信息,從而在各種自然語言處理任務中表現更優。近年來,LLMs的參數規模呈現爆發式增長。例如,2019年谷歌發布的T5模型包含110億個參數,2020年OpenAI發布的GPT-3模型達到1 750億個參數,而2023年華為發布的PanGu-Σ模型更是突破了1.085萬億個參數[4]。然而,這些龐大的參數規模也帶來了巨大的計算資源、存儲需求和能源消耗,使得LLMs在個人計算機、嵌入式平臺或移動設備等計算資源有限的環境中難以部署和應用。因此,如何在盡可能不損失模型性能的前提下壓縮模型并加速推理,成為一個亟待解決的關鍵問題。

本文通過調研近年來模型壓縮技術的發展現狀,結合當前主流的LLMs推理工具和框架,在申威平臺上進行了LLMs的推理實驗。文章總結并歸納了不同模型壓縮方法的優缺點,驗證了利用CPU進行本地推理的可行性,為LLMs在資源受限平臺上的應用提供了參考。

1 LLMs及模型壓縮簡介

1.1 LLMs簡介

自2019年Google發布T5(Text-to-Text Transfer Transformer)以來,國內外研究機構紛紛加入大型語言模型的研發行列,涌現出一大批具有競爭力的模型。例如,OpenAI的GPT-4和Anthropic的Claude-3等國外模型在多項能力上仍處于領先地位,而谷歌的Gemini、Meta的LLaMA3等模型也在不斷更新迭代。在國內,百度的文心一言4.0、阿里云的Qwen1.5以及百川智能的Baichuan3等模型同樣表現出色。這些模型的持續涌現和改進,為自然語言處理技術的發展開辟了新的可能性,并在機器翻譯、文本生成、信息檢索、語音識別、情感分析等領域為用戶提供了更加豐富和高效的服務。總體而言,LLMs的應用場景已覆蓋社會各個層面,為各行各業帶來了深遠的影響和變革。表1展示了當前部分主流LLMs的基本信息。

1.2 模型壓縮概覽

模型壓縮旨在盡可能不損失大型語言模型性能的前提下,對模型進行精簡,從而獲得一個計算開銷和存儲開銷大幅降低但仍保持較高準確率的小模型,以便部署在計算資源有限的硬件設備上。當前主流的模型壓縮方法主要包括參數剪枝(Network Pruning)、參數量化(Quantization)、低秩分解(Network Decomposition)和知識蒸餾(Network Distillation)等[5]。

參數剪枝:通過設計一種對預訓練模型網絡參數的評價準則,依據該準則刪除不重要的參數。參數剪枝主要分為結構化剪枝、非結構化剪枝和動態剪枝[6]。結構化剪枝通過刪除整個過濾器(層)來減少參數數量,雖然能顯著降低模型大小和計算量,但可能會產生較大的精度損失。相比之下,非結構化剪枝更加精細,它在層內部刪除單個參數,因此能更好地保持模型性能,但實施復雜度較高。此外,動態剪枝是一種在模型推理期間動態刪除參數的方法,能夠根據輸入數據的特征實時調整模型結構,從而在保持性能的同時提高推理效率。然而,動態剪枝需要額外的計算資源進行實時調整,因此在計算資源受限的環境中適用性較低。

參數量化:將模型網絡參數從高精度浮點數轉換為較低精度浮點數或整數,例如將32位浮點數(FP32)轉換為16位

浮點數(FP16)或8位整型數(Int8),從而減少存儲和計算開銷。網絡參數包括權重、激活值、梯度和誤差等,可以使用統一的位寬或特定的策略組合對其進行轉換。參數量化是一種直接的模型壓縮方法,能夠顯著降低存儲需求、計算成本和推理時間。然而,網絡參數位寬的減少會損失部分信息量,可能影響模型推理的準確性。研究表明,在大多數應用中,采用8位整型量化的模型推理能夠保持較高的準確率。結合權值共享等優化技巧,權重和激活甚至可以量化到4位整數。

低秩分解:將給定的權重矩陣分解為兩個或多個維度明顯較低的矩陣,以近似原始矩陣。低秩分解的主要方法包括奇異值分解(SVD)、Tucker分解和CP分解等。低秩分解是一種有效的模型壓縮技術,但在降維過程中需要消耗額外的計算資源,同時可能會丟失一些重要特征信息,導致模型性能下降。此外,低秩分解通常需要大量模型重訓練才能達到與原模型一致的收斂效果。

知識蒸餾:通過將大型復雜模型(教師模型)的知識遷移到小型模型(學生模型)上,可以在不顯著降低模型性能的前提下大幅減少參數量。知識蒸餾的過程包括兩個部分:首先,教師模型通過對數據的預測生成軟標簽,這些軟標簽不僅包含硬標簽的類別信息,還包含數據之間的相似性信息;其次,學生模型在訓練過程中通過模擬教師模型的軟標簽以及傳統的硬標簽進行學習[7]。基于知識蒸餾的方法能夠顯著降低模型的深度和規模,但需要預先訓練一個教師模型,這增加了訓練的復雜性和成本。

2 申威平臺模型推理

申威處理器是一系列多核心、高性能的處理器,采用先進的處理架構和制造工藝。其多核心設計使其能夠在高負載應用場景下實現高效的并行計算,顯著提升計算效率;同時,強大的浮點計算能力和高速緩存系統使其在科學計算、大數據分析和人工智能等領域具有廣泛的應用前景。

在申威平臺上,主要的操作系統包括統信(UOS)、麒麟(Kylin)和歐拉(Euler)等Linux發行版。支持Linux的大型語言模型推理框架或工具套件主要有vLLM、PyTorch和llama.cpp等。

vLLM是由伯克利大學LMSYS組織開源的大型語言模型高速推理框架,其核心思想是將自注意力機制(Self-Attention)的計算過程分解為多個較小的計算任務,并將這些任務分布到多個計算節點上并行處理[8]。

PyTorch是一個基于Torch的Python開源機器學習庫,其核心優勢包括動態計算圖、自動微分機制以及高效的CUDA利用等,用戶可以方便地構建、訓練和部署深度學習模型。然而,PyTorch和vLLM都是基于Python的服務框架,且依賴GPU進行推理加速,這在計算資源有限且缺乏GPU的環境中并不適用。

llama.cpp是基于Meta發布的LLaMA模型的C++推理實現,不依賴任何外部庫,旨在以最少的設置在各種硬件上實現高效的LLMs推理。它支持Apple Silicon的Meta加速以及x86架構的AVX、AVX2和AVX512加速,能夠使用純CPU或CPU+GPU(NVIDIA CUDA或AMD HIP)混合推理。此外,llama.cpp還提供了2 bit、3 bit、4 bit、5 bit、6 bit以及8 bit位寬的模型量化功能,用于壓縮模型以加快推理速度并減少內存占用。因此,本文選擇llama.cpp在申威平臺上利用純CPU進行LLMs的部署和推理。

2.1 llama.cpp項目構建

llama.cpp項目的構建在申威平臺上進行,操作系統為統信(UOS),構建環境包括:Linux 4.19.0-sw64-desktop、GLIBC 2.28、gcc 8.3.1、CMake 3.26.4、Python 3.10。

(1)獲取llama.cpp源碼

首先,獲取llama.cpp的源碼并進入項目目錄,執行以下命令:

$ git clone https://github.com/ggerganov/llama.cpp

$ cd llama.cpp//進入llama.cpp目錄

(2)開啟對OpenBLAS的支持

llama.cpp支持多種BLAS實現以提升矩陣運算效率,包括OpenBLAS、BLIS以及涉及GPU的BLAS實現(如cuBLAS、hipBLAS和CLBlast)。OpenBLAS和BLIS是優秀的開源線性代數庫,專注于在多核處理器和向量化指令集上實現高效的矩陣運算。它們提供了高性能的基本線性代數子程序(BLAS),包括矩陣乘法、矩陣-向量乘法等,能夠滿足科學計算和工程應用中對高效數值計算的需求[9-10]。此外,它們具有跨平臺特性,可以在多種操作系統上部署和使用。

申威平臺的UOS系統支持OpenBLAS。通過以下命令安裝OpenBLAS及其相關依賴,得到OpenBLAS相關的頭文件cblas.h以及庫文件libopenblas64.so、libopenblaso64.so、libopenblasp64.so等,命令如下:

$ apt install libopenblas-base libopenblas-dev liblapack-dev

根據申威UOS系統中OpenBLAS頭文件、庫文件路徑,修改llama.cpp源碼中Makefile:

ifdef LLAMA_OPENBLAS

MK_CPPFLAGS += -DGGML_USE_OPENBLAS -I/usr/include -I/usr/include/openblas

MK_CFLAGS" "+= -I/usr/include -I/usr/include/openblas

MK_LDFLAGS" += -L /usr/lib -lopenblas64

endif # LLAMA_OPENBLAS

(3)編譯llama.cpp

llama.cpp是一個C++庫,可以通過Make或CMake(版本3.14以上)進行編譯,本文使用Make編譯。編譯完成后,在llama.cpp目錄中生成主程序main以及模型量化工具quantize,命令如下:

$ LLAMA_OPENBLAS=1 make -j8

2.2 llama.cpp部署推理

llama.cpp項目支持多種預訓練語言模型,這些模型可以方便地從HuggingFace社區獲取。本文選用Baichuan2模型。Baichuan2是由百川智能推出的一系列大型語言模型,其開源版本提供了7 B和13 B兩個模型。這些模型基于2.6萬

億tokens從零開始訓練,在公開基準測試(如MMLU、CMMLU、GSM8K和HumanEval)中表現優異,達到或超越了其他同類開源模型的性能[11]。

llama.cpp支持將PyTorch的權重文件以及HuggingFace格式的權重文件轉換為gguf的FP16格式(.gguf)。通過這種轉換,可以將完整權重模型適配到llama.cpp框架中,從而在申威平臺上進行高效的推理。

(1)生成gguf格式(FP16)模型,根據llama.cpp源碼目錄中的requirements.txt,安裝Python(版本3.10以上)依賴。主要依賴包括:numpygt;=1.24.4、sentencepiecegt;=0.1.98、ggufgt;=0.1.0、protobufgt;=4.21.0,lt;5.0.0。

使用llama.cpp源碼目錄中的convert.py工具轉換Baichuan2-7B-Chat模型文件為gguf FP16格式,生成FP16格式的模型文件baichuan2-7b-chat.gguf,執行命令為:

$ python3 llama.cpp/convert.py Baichuan2-7B-Chat --outtype f16 --outfile baichuan2-7b-chat.gguf。

outtype為指定轉換輸出格式,默認值是f16;outfile為指定轉換輸出的文件名。

(2)使用llama.cpp目錄中編譯生成主程序main加載并啟動模型,命令為:

$ llama.cpp/main -m baichuan2-7b-chat.gguf -i -c 1024 -t 16 -n 256

輸入提示詞,并得到回復:

lt;sgt;請簡要介紹一下無錫這座城市

無錫,位于中國江蘇省南部,是江蘇省的一個地級市,地處長江三角洲平原,東臨蘇州,西接常州,南瀕宜興,北依長江。無錫歷史悠久,有著豐富的文化遺產,是中國歷史文化名城之一。

......lt;/sgt;

M為指定模型文件baichuan2-7b-chat.gguf;i為以交互模式運行;c為指定上下文長度(默認512);n為控制回復生成的最大長度(默認為128);t為線程數量(默認為8),可根據CPU核心數調整。

3 模型量化部署

3.1 模型量化

計算密集型Python庫的優化手段之一是使用C/C++重新實現,這種方法可以顯著提升性能,這也是llama.cpp能夠實現快速、高效推理的主要原因之一。另一個重要的優化手段是模型量化,即通過降低模型參數的精度來換取推理速度的提升。llama.cpp提供了LLMs量化工具quantize,可以將模型參數從32位浮點數轉換為16位浮點數,甚至是8位或4位整數。量化參數的命名遵循“Q”+存儲權重精度+特定變體的約定。以下是常用的量化方法及其適用場景:

Q4_0為int4量化;Q4_1表示較Q4_0更高的準確性,推理速度較Q4_0慢;Q5_0表示高準確度,資源消耗較大,推理速度較慢;Q5_1表示較Q5_0更高的準確性,推理速度較Q5_0慢;Q4_K_S表示將Q4_K用于所有張量;Q5_K_S表示將Q5_K用于所有張量;Q6_K表示對所有張量使用Q8_K;Q8_0表示int8量化。比如,可以使用參數Q8_0,將baichuan2-7b-chat.gguf量化生成baichuan2-7b-chat.Q8_0.gguf,模型精度從16位浮點數降低到8位整數,命

令為:

$ llama.cpp/quantize baichuan2-7b-chat.gguf baichuan2-7b-chat.Q8_0.gguf q8_0

在申威3231上,通過使用Q8_0、Q5_1、Q5_0、Q4_1以及Q4_0量化參數分別對baichuan2-7b-chat.gguf進行量化壓縮,Q4_0參數量化后的模型大小相比FP16格式減少了近3/4,如圖1所示。

在使用純CPU且線程數相同(32線程)的情況下,分別對各個量化模型進行推理測試。結果顯示,Q4_0參數壓縮模型的推理速度(2.85 tokens/s)相比FP16模型

(0.93 tokens/s)提升了近3倍,如圖2所示。然而,這種速度的提升是以犧牲模型精度為代價的。通過測試驗證,在計算資源充足且對推理速度要求不高的情況下,可以使用Q8_0進行模型量化,其效果非常接近FP16模型。

3.2 多線程推理提速

llama.cpp支持多線程并行計算,可以充分利用多核CPU的計算優勢,進一步加速推理過程,例如在申威3231上,分別使用8核、16核、24核、32核以及48核進行多線程推理,如圖3所示。

測試結果表明,在單個CPU上,線程數與物理核心數一致時速度最快,超過時推理速度反而有所下降。而在雙路或者多路CPU上,由于存在CPU之間的跨路損耗,并非線程數越多推理速度越快。

3.3 llama.cpp的Python調用

llama.cpp提供了一個第三方庫llama-cpp-python以實現llama.cpp的Python調用,方便用戶將llama.cpp整合到實際的業務中。

(1)從pypi.org上下載llama-cpp-python(版本0.2.74)的源碼包。

(2)將llama-cpp-python源碼包中的llama_cpp目錄復制到Python的第三方庫site-package中,并在llama.cpp的源碼中編譯生成libllama.so,用于Python ctypes組件訪問調用llama.cpp,編譯命令如下:

$ cd llama.cpp amp;amp; make libllama.so

(3)llama-cpp-python提供了一個High-level API,該API通過Llama類提供了簡單的接口來調用llama.cpp,Python代碼如下:

import os

os.environ['LLAMA_CPP_LIB'] = '/home/uos/Documents/llama.cpp/libllama.so'

def llama_chat():

from llama_cpp import Llama

llm = Llama(model_path=\"/home/uos/Documents/llama/baichuan2-7b-chat.Q8_0.gguf\", n_threads=8, n_ctx=512)

output = llm(\"Q: 太陽系中最大的行星? A: \", max_tokens=128, stop=[\"Q:\", \"\n\"], echo=True)

print(output)

運行Python代碼,生成與OpenAI兼容的JSON格式的回復:

{'id': 'cmpl-81495aca-b334-4995-9dfa-0d7a3af5bf56', 'object': 'text_completion', 'created': 1715733917, 'model': '/home/uos/Documents/llama/baichuan2-7b-chat.Q8_0.gguf', 'choices': [{'text': 'Q: 太陽系中最大的行星? A: 木星是太陽系中最大的行星。', 'index': 0, 'logprobs': None, 'finish_reason': 'stop'}], 'usage': {'prompt_tokens': 13, 'completion_tokens': 9, 'total_tokens': 22}}

4 結 語

隨著大型語言模型的普及,人們對其私有化部署的關注逐漸增加。llama.cpp正是在這一背景下,以純C/C++的方式實現了在本地環境下高性能的大型語言模型推理能力。與ChatGPT系列通過API調用的大模型相比,本地化部署更加注重數據的隱私和安全性,能夠以更可控、更靈活的方式部署應用。本文介紹了當前主流的模型壓縮方法,并展示了llama.cpp推理框架在申威CPU上實現大型語言模型部署的應用案例。同時,文章總結歸納了編譯、量化以及推理提速的相關策略和技巧,為大型語言模型在申威平臺上的實際落地應用提供了實用指導。

參考文獻

[1]羅文,王厚峰.大語言模型評測綜述[J].中文信息學報,2024,38(1):1-23.

[2]舒文韜,李睿瀟,孫天祥,等.大型語言模型:原理、實現與發展[J].計算機研究與發展,2024,61(2):351-361.

[3]張乾君. AI大模型發展綜述[J].通信技術,2023,56(3):255-262.

[4] REN X, ZHOU P, MENG X, et al. PanGu-Σ: towards trillion parameter language model with sparse heterogeneous computing [J]. arXiv preprint arXiv: 2303.10845.

[5]楊春,張睿堯,黃瀧,等.深度神經網絡模型量化方法綜述[J].工程科學學報,2023,45(10):1613-1629.

[6]高晗,田育龍,許封元,等.深度學習模型壓縮與加速綜述[J].軟件學報,2021,32(1):68-92.

[7]李江昀,趙義凱,薛卓爾,等.深度神經網絡模型壓縮綜述[J].工程科學學報,2019,41(10):1229-1239.

[8] KWON W, LI Z H, ZHUANG S Y, et al. Efficient memory management for large language model serving with paged attention [J]. arXiv preprint arXiv: 2309.06180.

[9]黃春,姜浩,全哲,等.面向深度學習的批處理矩陣乘法設計與實現[J].計算機學報,2022,45(2):225-239.

[10]閆昊,劉芳芳,馬文靜,等.申威1621處理器上矩陣乘法優化研究[J].軟件學報,2023,34(7):3451-3463.

[11] YANG A Y, XIAO B, WANG B N, et al. Baichuan 2: open large-scale language models [J]. arXiv preprint arXiv: 2309.10305.

主站蜘蛛池模板: 亚洲欧洲日产无码AV| 欧美日韩在线亚洲国产人| 好吊妞欧美视频免费| 全裸无码专区| 亚洲一区第一页| 啊嗯不日本网站| 国产理论一区| 亚洲无码免费黄色网址| 强奷白丝美女在线观看| 国产白浆一区二区三区视频在线| 人禽伦免费交视频网页播放| 草逼视频国产| 国产传媒一区二区三区四区五区| 婷婷亚洲视频| 亚洲国产精品一区二区第一页免 | 国产精品55夜色66夜色| 777午夜精品电影免费看| 精品欧美一区二区三区久久久| 久久精品人人做人人爽电影蜜月| 日日拍夜夜嗷嗷叫国产| 国产精品理论片| 激情六月丁香婷婷四房播| 欧美人与牲动交a欧美精品| 日韩一级二级三级| 国产精品亚洲五月天高清| 日本精品αv中文字幕| 综合五月天网| 国产亚洲精品自在久久不卡 | 亚洲一区二区三区国产精品 | 国产尤物jk自慰制服喷水| 成人福利一区二区视频在线| 最新午夜男女福利片视频| 久久久久亚洲Av片无码观看| 久久美女精品国产精品亚洲| 国内精品九九久久久精品| 国产自无码视频在线观看| 三级国产在线观看| 国产精品亚欧美一区二区| 国产精品九九视频| 欧美日韩在线国产| 精品国产成人国产在线| 人妻无码中文字幕第一区| 色网站在线免费观看| 欧美怡红院视频一区二区三区| 国产成人精品三级| 男人天堂亚洲天堂| 日韩福利在线观看| 日本精品中文字幕在线不卡| 九一九色国产| 欧美精品一区在线看| 国产va在线观看| 亚洲色偷偷偷鲁综合| 亚洲无码电影| 91国语视频| 99视频精品全国免费品| 亚洲欧美一区二区三区麻豆| 国产欧美成人不卡视频| 亚洲日本www| 天天色综网| 国产成人h在线观看网站站| 91在线视频福利| 天堂成人av| 欧美亚洲第一页| 东京热高清无码精品| 色吊丝av中文字幕| 国产区在线看| 国产日韩欧美精品区性色| 九九九国产| 国产黑丝视频在线观看| 亚洲一区二区在线无码| 国产在线无码av完整版在线观看| 亚洲第一在线播放| 日韩成人在线视频| 中文字幕在线看| 一本久道久久综合多人| 国产欧美精品午夜在线播放| 亚洲精品欧美重口| 欧美日本一区二区三区免费| 亚洲三级电影在线播放| 五月天在线网站| 亚洲一区二区约美女探花| 日本不卡在线视频|