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

打印 上一主题 下一主题

主题 1960|帖子 1960|积分 5880

随着大模子技术不断迭代,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终端,下载源码 
  1. cd $HOME
  2. tar -zxvf ascend-llm.tar.gz
  3. cd $HOME/ascend-llm/inference
  4. pip install -r requirements.txt
  5. cd $HOME/ascend-llm/export_llama
  6. pip install -r requirements.txt
复制代码


算子适配

1. protoc 安装
根据昇腾文档选择合适的protoc版本,protoc版本和CANN版本强相关。CANN7.0/7.2使用的protoc 1.13.0。
  1. # 安装protoc==1.13.0, 找一空闲目录下载
  2. wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/wanzutao/tiny-llama/protobuf-all-3.13.0.tar.gz --no-check-certificate
  3. tar -zxvf protobuf-all-3.13.0.tar.gz
  4. cd protobuf-3.13.0
  5. apt-get update
  6. apt-get install autoconf automake libtool
  7. ./autogen.sh
  8. ./configure
  9. make -j4
  10. make install
  11. sudo ldconfig
  12. protoc --version # 查看版本号
复制代码
查看版本号,如下图即完成 

2. 算子编译部署
  1. # 将./custom_op/matmul_integer_plugin.cc 拷贝到指定路径
  2. cd ascend-llm
  3. export ASCEND_PATH=/usr/local/Ascend/ascend-toolkit/latest
  4. cp custom_op/matmul_integer_plugin.cc $ASCEND_PATH/tools/msopgen/template/custom_operator_sample/DSL/Onnx/framework/onnx_plugin/
  5. cd $ASCEND_PATH/tools/msopgen/template/custom_operator_sample/DSL/Onnx
复制代码
打开build.sh,找到下面四个情况变量,解开注释并修改如下:
  1. export ASCEND_TENSOR_COMPILER_INCLUDE=/usr/local/Ascend/ascend-toolkit/latest/include
  2. export TOOLCHAIN_DIR=/usr
  3. export AICPU_KERNEL_TARGET=cust_aicpu_kernels
  4. export AICPU_SOC_VERSION=Ascend310B1
复制代码

编译运行 
  1. ./build.sh
  2. cd build_out/
  3. ./custom_opp_ubuntu_aarch64.run
  4. # 生成文件到customize到默认目录 $ASCEND_PATH/opp/vendors/,删除冗余文件
  5. cd $ASCEND_PATH/opp/vendors/customize
  6. rm -rf op_impl/ op_proto/
复制代码
 完成算子的编译部署

模子量化与转换

注意事项:该步调可以直接使用资料已经量化转换好的模子 
1.导出onnx 模子
将transformer库中的modeling_llama替换为export_llama文件下的modeling_llama。
可以通过 pip show transformers 命令找到 transformers 的库路径,然后通过cp命令复制。 

通过一下命令将模子导出为onnx(相对路径均为相对export_llama.py文件) 
  1. python export_llama.py \  
  2. --model <model_name_or_path> \  
  3. --output <output_onnx_file_path> \  
  4. --act-path <act_scales_file_path>  
  5. --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.模子转换 
  1. 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
  1. 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模式如下:
  1. cd inference
  2. python main.py \  
  3. --model <path_to_onnx_or_om_model> \  
  4. --hf-dir <path_to_huggingface_model_dir>  \
  5. # 需要tokenizer和模型配置文件,权重不需要   
  6. --engine <acl/onnx> \  
  7. --sampling <greedy/top_p/top_k> --sampling_value <>  --temperature <> \
  8. #采样相关配置  
  9. --cli
  10. # 添加--cli表示在终端运行
复制代码
TinyLlama-1.1B-Chat-v1.0推理运行 
  1. 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 推理运行 
  1. 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
  1. sudo apt update
  2. sudo apt-get remove nodejs
  3. sudo apt autoremove
  4. sudo whereis node
  5. sudo rm -rf /usr/local/bin/node
  6. sudo apt-get update
  7. sudo apt install curl
  8. curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
  9. sudo apt install -y nodejs
  10. node -v
复制代码
 npm安装10.5.0 (对应nodejs==20.12.2)
  1. sudo apt install npm
  2. sudo npm install -g npm@10.5.0
  3. npm -v
复制代码
npm安装pnpm
  1. # 如遇FATAL ERROR: NewSpace::EnsureCurrentCapacity Allocation failed - JavaScript heap out of memory 报错尝试清下缓存,如下
  2. npm cache clean --forcenpm config
  3. set registry https://registry.npmjs.org/npm install -g pnpm
复制代码
打包步调
  1. clone本仓到本地,进入本地仓目录,执行以下命令```pnpm install npm run build```
  2. 进入/root/ascend-llm/inference目录
  3. 执行
  4. 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企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表