随着大模子技术不断迭代,AI大模子的应用与推理训练已从云端部署迅速向本地化、场景化发展,成为推动产业升级的重要力量。LLaMA 7B作为一款轻量化的大规模语言模子,以其卓越的语言理解与天生能力,逐步成为智能化应用的抱负选择,广泛实用于智能客服、内容考核、文本天生、翻译等多个场景,为企业提供了经济高效的办理方案,推动行业智能化转型。
本期样例使用英码科技EA500I Mini部署meta-llama/Llama-2-7b-hf和TinyLlama/TinyLlama-1.1B-Chat-v1.0大语言模子,在本地实现多模态处理和自然语言处理功能 ,助力企业将大模子技术落地到垂直行业应用中,加快智能化升级。
Llama 7B大语言模子本地部署全攻略!一步步教你轻松上手
情况搭建
- 参考链接: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芯片产品的技术干货,欢迎大家留言告诉我们您希望了解哪些内容,我们会根据需求整理并分享!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|