随着大模型技术不断迭代,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