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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Llama 7B大語言模型本地部署全攻略!一步步教你輕松上手

英碼科技 ? 來源:英碼科技 ? 作者:英碼科技 ? 2025-01-24 17:05 ? 次閱讀

隨著大模型技術(shù)不斷迭代,AI大模型的應(yīng)用與推理訓(xùn)練已從云端部署迅速向本地化、場景化發(fā)展,成為推動產(chǎn)業(yè)升級的重要力量。LLaMA 7B作為一款輕量化的大規(guī)模語言模型,以其卓越的語言理解與生成能力,逐步成為智能化應(yīng)用的理想選擇,廣泛適用于智能客服、內(nèi)容審核、文本生成、翻譯等多個場景,為企業(yè)提供了經(jīng)濟高效的解決方案,推動行業(yè)智能化轉(zhuǎn)型。

本期樣例使用英碼科技EA500I Mini部署meta-llama/Llama-2-7b-hf和TinyLlama/TinyLlama-1.1B-Chat-v1.0大語言模型,在本地實現(xiàn)多模態(tài)處理和自然語言處理功能,助力企業(yè)將大模型技術(shù)落地到垂直行業(yè)應(yīng)用中,加快智能化升級。

wKgZPGeTV2mACq9JAAiuq7j9E5I579.png

環(huán)境搭建 視頻演示版:https://www.bilibili.com/video/BV1MofEY9E69/?spm_id_from=333.1387.homepage.video_card.click)

參考鏈接:ascend-llm: 基于昇騰310芯片的大語言模型部署

硬件環(huán)境:英碼科技EA500I Mini

軟件環(huán)境:CANN-7.0.1.1

進(jìn)入EA500I Mini終端,下載源碼

cd $HOME 
tar -zxvf ascend-llm.tar.gz
cd $HOME/ascend-llm/inference
pip install -r requirements.txt
cd $HOME/ascend-llm/export_llama
pip install -r requirements.txt

算子適配

1. protoc 安裝

根據(jù)昇騰文檔選擇合適的protoc版本,protoc版本和CANN版本強相關(guān)。CANN7.0/7.2使用的protoc 1.13.0。

# 安裝protoc==1.13.0, 找一空閑目錄下載
wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/tiny-llama/protobuf-all-3.13.0.tar.gz --no-check-certificate
tar -zxvf protobuf-all-3.13.0.tar.gz
cd protobuf-3.13.0
apt-get update
apt-get install autoconf automake libtool
./autogen.sh 
./configure
make -j4
make install
sudo ldconfig
protoc --version # 查看版本號

查看版本號,如下圖即完成

wKgZPGeTU7eAFt12AAPFeraMUfg991.png

2. 算子編譯部署

# 將./custom_op/matmul_integer_plugin.cc 拷貝到指定路徑
cd ascend-llm
export ASCEND_PATH=/usr/local/Ascend/ascend-toolkit/latest
cp custom_op/matmul_integer_plugin.cc $ASCEND_PATH/tools/msopgen/template/custom_operator_sample/DSL/Onnx/framework/onnx_plugin/
cd $ASCEND_PATH/tools/msopgen/template/custom_operator_sample/DSL/Onnx

打開build.sh,找到下面四個環(huán)境變量,解開注釋并修改如下:

export ASCEND_TENSOR_COMPILER_INCLUDE=/usr/local/Ascend/ascend-toolkit/latest/include
export TOOLCHAIN_DIR=/usr
export AICPU_KERNEL_TARGET=cust_aicpu_kernels
export AICPU_SOC_VERSION=Ascend310B1

wKgZO2eTU_-ASbLIAAOoknvofro058.png

編譯運行

./build.sh 
cd build_out/
./custom_opp_ubuntu_aarch64.run
# 生成文件到customize到默認(rèn)目錄 $ASCEND_PATH/opp/vendors/,刪除冗余文件
cd $ASCEND_PATH/opp/vendors/customize
rm -rf op_impl/ op_proto/

wKgZO2eTVB6AS61vAAUVg6aKJgM191.png

完成算子的編譯部署

模型量化與轉(zhuǎn)換

注意事項:該步驟可以直接使用資料已經(jīng)量化轉(zhuǎn)換好的模型

1.導(dǎo)出onnx 模型

將transformer庫中的modeling_llama替換為export_llama文件下的modeling_llama。

可以通過 pip show transformers 命令找到 transformers 的庫路徑,然后通過cp命令復(fù)制。

wKgZO2eTVDuAdGAcAAXZNVdQlZw320.png

通過一下命令將模型導(dǎo)出為onnx(相對路徑均為相對export_llama.py文件)

python export_llama.py   
--model    
--output    
--act-path   
--quant   

2.模型量化

量化需要引入quantize.py和config文件下的配置文件,詳情查看 export_llama 的readme文件。本樣例將直接使用已經(jīng)量化好的模型文件,對于TinyLlama-1.1B采用per-token的absmax量化(即w8x8.py);對于Llama-2-7b-hf,采用靜態(tài)混合精度分解(即sd.py)。

3.模型轉(zhuǎn)換

atc --framework=5 --model="xxx.onnx"  --output="xxx" --input_format=ND --input_shape="input_ids:batch,seq_len;attention_mask:batch,seq_len+kv_len;position_ids:batch,seq_len;past_key_values:n_layer,2,batch,n_head,kv_len,head_dim" --log=debug --soc_version=Ascend310B1 --precision_mode=must_keep_origin_dtype

上述的n_layer, n_head, head_dim變量由模型決定。對于Llama-2-7b,n_layer=32, n_head=32, head_dim=128;對于TinyLlama-1.1B,n_layer=22, n_head=4, head_dim=64

對于batch, seq_len, kv_len, 請根據(jù)需要填入,建議設(shè)置batch=1, seq_len=1, kv_len=1024。如對于TinyLlama-1.1B

atc --framework=5 --model="./tiny-llama.onnx"  --output="tiny-llama" --input_format=ND --input_shape="input_ids:1,1;attention_mask:1,1025;position_ids:1,1;past_key_values:22,2,1,4,1024,64" --log=debug --soc_version=Ascend310B1 --precision_mode=must_keep_origin_dtype

模型推理

從資料鏈接里已經(jīng)量化導(dǎo)出的模型

項目提供了兩種運行方式:

1. cli模式:在終端運行,每一次輸入一行,一次性返回所有的推理結(jié)果。

2. web模式:前端代碼在github或者gitee,打包出dist文件夾,放在inference文件夾下即可。

采取cli模式如下:

cd inference
python main.py   
--model    
--hf-dir   
 # 需要tokenizer和模型配置文件,權(quán)重不需要   
--engine    
--sampling  --sampling_value   --temperature   
#采樣相關(guān)配置  
--cli 
# 添加--cli表示在終端運行

TinyLlama-1.1B-Chat-v1.0推理運行

python main.py --model /root/ascend-llm/TinyLlama-1.1B-Chat-v1.0/tiny-llama-seq-1-key-256-int8.om --hf-dir /root/ascend-llm/TinyLlama-1.1B-Chat-v1.0 --engine acl --sampling top_k --cli

效果展示

wKgZPGeTVMGAVMApAAXgmPd3YYc879.png

Llama-2-7B推理運行

 python main.py --model /root/ascend-llm/Llama-2-7B/llama-seq-1-key-256-int8.om --hf-dir /root/ascend-llm/Llama-2-7B --engine acl --sampling top_k --cli

效果展示

wKgZO2eTVWGAIncrAATKenS7Jyc027.png

安裝LLM_WEB

nodejs安裝 20.12.2

sudo apt update
sudo apt-get remove nodejs
sudo apt autoremove
sudo whereis node
sudo rm -rf /usr/local/bin/node
sudo apt-get update
sudo apt install curl
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

npm安裝10.5.0 (對應(yīng)nodejs==20.12.2)

sudo apt install npm
sudo npm install -g npm@10.5.0
npm -v 
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

npm安裝pnpm

# 如遇FATAL ERROR: NewSpace::EnsureCurrentCapacity Allocation failed - JavaScript heap out of memory 報錯嘗試清下緩存,如下
npm cache clean --forcenpm config
set registry https://registry.npmjs.org/npm install -g pnpm 
poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

打包步驟

clone本倉到本地,進(jìn)入本地倉目錄,執(zhí)行以下命令```pnpm install npm run build```
進(jìn)入/root/ascend-llm/inference目錄
執(zhí)行
python main.py --model /root/ascend-llm/TinyLlama-1.1B-Chat-v1.0/tiny-llama-seq-1-key-256-int8.om --hf-dir /root/ascend-llm/TinyLlama-1.1B-Chat-v1.0 --engine acl --sampling top_k

wKgZO2eTVyeAQ6eJAAP16_sH0Vo812.png

復(fù)制地址到瀏覽器開始與模型對話

wKgZO2eTV0uAdlF-AAGOaEiH_1k018.png

結(jié)語

以上就是英碼科技昇騰產(chǎn)品系列EA500I Mini邊緣計算盒子適配大模型Llama 7B的完整部署流程。未來,我們將持續(xù)推出更多基于昇騰AI芯片產(chǎn)品的技術(shù)干貨,歡迎大家留言告訴我們您希望了解哪些內(nèi)容,我們會根據(jù)需求整理并分享!

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

    關(guān)注

    17

    文章

    1904

    瀏覽量

    35159
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    2541

    瀏覽量

    3012
收藏 人收藏

    評論

    相關(guān)推薦

    GPS 設(shè)計全攻略

    GPS 設(shè)計全攻略
    發(fā)表于 09-25 14:11

    GPS 設(shè)計全攻略

    GPS 設(shè)計全攻略
    發(fā)表于 12-05 12:08

    外國牛人教你一步步快速打造首臺機器人(超詳細(xì))

    外國牛人教你一步步快速打造首臺機器人(超詳細(xì))
    發(fā)表于 08-15 19:30

    一步步寫嵌入式操作系統(tǒng)—ARM編程的方法與實踐ch02

    一步步寫嵌入式操作系統(tǒng)—ARM編程的方法與實踐ch02
    發(fā)表于 08-20 20:54

    郭天祥 C語言教程-開發(fā)擴展全攻略

    `郭天祥 C語言教程-入門, 提高,開發(fā)擴展全攻略經(jīng)典制作, 51單片機必看.文件太大, 上傳例程大家先看下.`
    發(fā)表于 06-08 21:24

    CC2530一步步演示程序燒寫

    CC2530一步步演示程序燒寫第一步——先安裝IAR開發(fā)環(huán)境第二歩——安裝CC2530燒寫工具第三歩——CC2530串口配置軟件使用具體完整步驟看下面文檔
    發(fā)表于 03-03 14:33

    一步步建立_STM32_UCOS_模板

    一步步建立_STM32_UCOS_模板
    發(fā)表于 09-29 11:46

    一步步進(jìn)行調(diào)試GPRS模塊

    背景:在不知道硬件是否正確情況下,一步步進(jìn)行調(diào)試,最終完成調(diào)試。以下是自己調(diào)試步驟。1、從gprs模塊TX ,RX 單獨焊接兩個線出來,通過上位機發(fā)送AT指令,是否能正常工作。
    發(fā)表于 01-25 07:33

    stm32是如何一步步實現(xiàn)設(shè)置地址匹配接收喚醒中斷功能的

    為什么要設(shè)置地址匹配接收喚醒中斷呢?stm32是如何一步步實現(xiàn)設(shè)置地址匹配接收喚醒中斷功能的?
    發(fā)表于 02-28 08:07

    MCU解密全攻略

    本內(nèi)容介紹了MCU解密的全攻略教程
    發(fā)表于 07-11 17:51 ?648次下載
    MCU解密<b class='flag-5'>全攻略</b>

    一步步寫嵌入式操作系統(tǒng)

    一步步寫嵌入式操作系統(tǒng)_ARM編程的方法與實踐
    發(fā)表于 07-14 11:32 ?0次下載

    LED調(diào)光技術(shù)全攻略

    LED調(diào)光技術(shù)全攻略
    發(fā)表于 02-08 00:50 ?42次下載

    一步步重新演繹汽車駕駛體驗

    一步步重新演繹汽車駕駛體驗
    發(fā)表于 11-04 09:52 ?0次下載
    <b class='flag-5'>一步步</b>重新演繹汽車駕駛體驗

    基于一步步蒸餾(Distilling step-by-step)機制

    為優(yōu)化LLM為“小模型/少數(shù)據(jù)/好效果”,提供了種新思路:”一步步蒸餾”(Distilling step-by-step)
    的頭像 發(fā)表于 05-16 10:24 ?1289次閱讀
    基于<b class='flag-5'>一步步</b>蒸餾(Distilling step-by-step)機制

    用Ollama輕松搞定Llama 3.2 Vision模型本地部署

    Ollama 是個開源的大語言模型服務(wù)工具,它的核心目的是簡化大語言模型(LLMs)的本地
    的頭像 發(fā)表于 11-23 17:22 ?1446次閱讀
    用Ollama<b class='flag-5'>輕松</b>搞定<b class='flag-5'>Llama</b> 3.2 Vision<b class='flag-5'>模型</b><b class='flag-5'>本地</b><b class='flag-5'>部署</b>