/ ai资讯

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

发布时间:2025-01-24 20:46:01

随着大模型技术不断迭代,AI大模型的应用与推理训练已从云端部署迅速向本地化、场景化发展,成为推动产业升级的重要力量。LLaMA 7B作为一款轻量化的大规模语言模型,以其卓越的语言理解与生成能力,逐步成为智能化应用的理想选择,广泛适用于智能客服、内容审核、文本生成、翻译等多个场景,为企业提供了经济高效的解决方案,推动行业智能化转型。

本期样例使用英码科技EA500I Mini部署meta-llama/Llama-2-7b-hf和TinyLlama/TinyLlama-1.1B-Chat-v1.0大语言模型,在本地实现多模态处理和自然语言处理功能,助力企业将大模型技术落地到垂直行业应用中,加快智能化升级。

环境搭建 (视频演示版:https://www.bilibili.com/video/BV1MofEY9E69/?spm_id_from=333.1387.homepage.video_card.click)

参考链接:ascend-llm: 基于昇腾310芯片的大语言模型部署

硬件环境:英码科技EA500I Mini

软件环境:CANN-7.0.1.1

进入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 安装

根据昇腾文档选择合适的protoc版本,protoc版本和CANN版本强相关。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 # 查看版本号

查看版本号,如下图即完成

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,找到下面四个环境变量,解开注释并修改如下:

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

编译运行

./build.sh 
cd build_out/
./custom_opp_ubuntu_aarch64.run
# 生成文件到customize到默认目录 $ASCEND_PATH/opp/vendors/,删除冗余文件
cd $ASCEND_PATH/opp/vendors/customize
rm -rf op_impl/ op_proto/

完成算子的编译部署

模型量化与转换

注意事项:该步骤可以直接使用资料已经量化转换好的模型

1.导出onnx 模型

将transformer库中的modeling_llama替换为export_llama文件下的modeling_llama。

可以通过 pip show transformers 命令找到 transformers 的库路径,然后通过cp命令复制。

通过一下命令将模型导出为onnx(相对路径均为相对export_llama.py文件)

python export_llama.py   
--model < model_name_or_path >   
--output < output_onnx_file_path >   
--act-path < act_scales_file_path >  
--quant < quant_config_file_path >  

2.模型量化

量化需要引入quantize.py和config文件下的配置文件,详情查看 export_llama 的readme文件。本样例将直接使用已经量化好的模型文件,对于TinyLlama-1.1B采用per-token的absmax量化(即w8x8.py);对于Llama-2-7b-hf,采用静态混合精度分解(即sd.py)。

3.模型转换

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, 请根据需要填入,建议设置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

模型推理

从资料链接里已经量化导出的模型

项目提供了两种运行方式:

1. cli模式:在终端运行,每一次输入一行,一次性返回所有的推理结果。

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

采取cli模式如下:

cd inference
python main.py   
--model < path_to_onnx_or_om_model >   
--hf-dir < path_to_huggingface_model_dir >  
 # 需要tokenizer和模型配置文件,权重不需要   
--engine < acl/onnx >   
--sampling < greedy/top_p/top_k > --sampling_value <  >  --temperature <  >  
#采样相关配置  
--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

效果展示

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

效果展示

安装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

npm安装10.5.0 (对应nodejs==20.12.2)

sudo apt install npm
sudo npm install -g npm@10.5.0
npm -v 

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 

打包步骤

clone本仓到本地,进入本地仓目录,执行以下命令```pnpm install npm run build```
进入/root/ascend-llm/inference目录
执行
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

复制地址到浏览器开始与模型对话

结语

以上就是英码科技昇腾产品系列EA500I Mini边缘计算盒子适配大模型Llama 7B的完整部署流程。未来,我们将持续推出更多基于昇腾AI芯片产品的技术干货,欢迎大家留言告诉我们您希望了解哪些内容,我们会根据需求整理并分享!

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com