亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2025-04-20 00:00:00陳偉
        物聯(lián)網(wǎng)技術 2025年8期

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

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

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

        0 引 言

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

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

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

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

        1 LLMs及模型壓縮簡介

        1.1 LLMs簡介

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

        1.2 模型壓縮概覽

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

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

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

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

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

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

        2 申威平臺模型推理

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

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

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

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

        llama.cpp是基于Meta發(fā)布的LLaMA模型的C++推理實現(xiàn),不依賴任何外部庫,旨在以最少的設置在各種硬件上實現(xiàn)高效的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位寬的模型量化功能,用于壓縮模型以加快推理速度并減少內(nèi)存占用。因此,本文選擇llama.cpp在申威平臺上利用純CPU進行LLMs的部署和推理。

        2.1 llama.cpp項目構建

        llama.cpp項目的構建在申威平臺上進行,操作系統(tǒng)為統(tǒng)信(UOS),構建環(huán)境包括: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的源碼并進入項目目錄,執(zhí)行以下命令:

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

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

        (2)開啟對OpenBLAS的支持

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

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

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

        根據(jù)申威UOS系統(tǒng)中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社區(qū)獲取。本文選用Baichuan2模型。Baichuan2是由百川智能推出的一系列大型語言模型,其開源版本提供了7 B和13 B兩個模型。這些模型基于2.6萬

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

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

        (1)生成gguf格式(FP16)模型,根據(jù)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工具轉(zhuǎn)換Baichuan2-7B-Chat模型文件為gguf FP16格式,生成FP16格式的模型文件baichuan2-7b-chat.gguf,執(zhí)行命令為:

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

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

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

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

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

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

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

        ......lt;/sgt;

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

        3 模型量化部署

        3.1 模型量化

        計算密集型Python庫的優(yōu)化手段之一是使用C/C++重新實現(xiàn),這種方法可以顯著提升性能,這也是llama.cpp能夠?qū)崿F(xiàn)快速、高效推理的主要原因之一。另一個重要的優(yōu)化手段是模型量化,即通過降低模型參數(shù)的精度來換取推理速度的提升。llama.cpp提供了LLMs量化工具quantize,可以將模型參數(shù)從32位浮點數(shù)轉(zhuǎn)換為16位浮點數(shù),甚至是8位或4位整數(shù)。量化參數(shù)的命名遵循“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量化。比如,可以使用參數(shù)Q8_0,將baichuan2-7b-chat.gguf量化生成baichuan2-7b-chat.Q8_0.gguf,模型精度從16位浮點數(shù)降低到8位整數(shù),命

        令為:

        $ 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量化參數(shù)分別對baichuan2-7b-chat.gguf進行量化壓縮,Q4_0參數(shù)量化后的模型大小相比FP16格式減少了近3/4,如圖1所示。

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

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

        3.2 多線程推理提速

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

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

        3.3 llama.cpp的Python調(diào)用

        llama.cpp提供了一個第三方庫llama-cpp-python以實現(xiàn)llama.cpp的Python調(diào)用,方便用戶將llama.cpp整合到實際的業(yè)務中。

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

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

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

        (3)llama-cpp-python提供了一個High-level API,該API通過Llama類提供了簡單的接口來調(diào)用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++的方式實現(xiàn)了在本地環(huán)境下高性能的大型語言模型推理能力。與ChatGPT系列通過API調(diào)用的大模型相比,本地化部署更加注重數(shù)據(jù)的隱私和安全性,能夠以更可控、更靈活的方式部署應用。本文介紹了當前主流的模型壓縮方法,并展示了llama.cpp推理框架在申威CPU上實現(xiàn)大型語言模型部署的應用案例。同時,文章總結歸納了編譯、量化以及推理提速的相關策略和技巧,為大型語言模型在申威平臺上的實際落地應用提供了實用指導。

        參考文獻

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

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

        [3]張乾君. AI大模型發(fā)展綜述[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īng)網(wǎng)絡模型量化方法綜述[J].工程科學學報,2023,45(10):1613-1629.

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

        [7]李江昀,趙義凱,薛卓爾,等.深度神經(jīng)網(wǎng)絡模型壓縮綜述[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]黃春,姜浩,全哲,等.面向深度學習的批處理矩陣乘法設計與實現(xiàn)[J].計算機學報,2022,45(2):225-239.

        [10]閆昊,劉芳芳,馬文靜,等.申威1621處理器上矩陣乘法優(yōu)化研究[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.

        精品国产福利久久久| 无码人妻一区二区三区在线| 免费a级毛片无码av| 国内精品久久久久久无码不卡| 无码免费午夜福利片在线| 国产亚洲精品综合在线网站| 亚洲综合av一区二区三区蜜桃| 亚洲日韩av无码| 丝袜AV在线一区二区三区| 少妇高潮惨叫久久久久电影 | 99热视热频这里只有精品 | 超碰青青草手机在线免费观看 | 澳门精品一区二区三区| 亚洲色图视频在线免费看| 国产精品乱码一区二区三区| 女同啪啪免费网站www| 亚洲中文字幕高清视频| 精品国产日韩一区2区3区 | 国产亚洲av成人噜噜噜他| 亚洲精品国偷拍自产在线观看 | 少妇又色又爽又刺激的视频| 精品无码av无码专区| 国产国语熟妇视频在线观看| 亚洲av不卡电影在线网址最新| 日韩精品自拍一区二区| 亚洲精品成人无限看| 69久久夜色精品国产69| 亚洲AV永久无码精品表情包| 在线观看一区二区中文字幕| 狠狠色噜噜狠狠狠777米奇小说| 国产一品道av在线一二三区| 99久久无色码中文字幕鲁信| 久久精品国产av麻豆五月丁| 国产尤物av尤物在线观看| 亚洲AⅤ无码日韩AV中文AV伦| 在线观看国产av一区二区| 中国免费看的片| 久久久久国产一区二区三区| 欧美丝袜激情办公室在线观看| 国产一区二区三区的区| 国产又色又爽又高潮免费视频麻豆|