基于AX650N/AX630C部署端侧大语言模型Qwen2

描述

 

Qwen2: Qwen is the large language model and large multimodal model series of the Qwen Team, Alibaba Group. Now the large language models have been upgraded to Qwen2.

背景

云端大模型,端侧小模型,端云协同进提升用户体验已成为今年大模型(LLM)产品化落地的一个热点话题。今年以来,各大手机厂家纷纷推出了端侧小模型版本,例如Google的Gemini-nano(1.8B)、VIVO的蓝星大模型(1B)、以及国内“小钢炮”MiniCPM(1B)等等均已在各自/客户手机上部署落地,进一步增加了手机智能属性和便捷性。那么在设备数量更多的IoT领域是否也能部署经济实用的LLM呢?例如实现本地人机问答、AI Agent、Function Call等等功能?

本文将分享如何将最新的端侧大语言模型部署到超高性价比SoC上,向业界对端侧大模型部署的开发者提供一种新的思路。

Qwen2介绍

Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。目前,大语言模型已升级至Qwen2版本。无论是语言模型还是多模态模型,均在大规模多语言和多模态数据上进行预训练,并通过高质量数据进行后期微调以贴近人类偏好。Qwen具备自然语言理解、文本生成、视觉理解、音频理解、工具使用、角色扮演、作为AI Agent进行互动等多种能力。

官方文档:

https://qwen.readthedocs.io/zh-cn/latest/index.html

Github项目:

https://github.com/QwenLM/Qwen2

最新版本Qwen2有以下特点:

5种模型规模,包括0.5B、1.5B、7B、57B-A14B和72B;

针对每种尺寸提供基础模型和指令微调模型,并确保指令微调模型按照人类偏好进行校准;

●基础模型和指令微调模型的多语言支持;

●所有模型均稳定支持32K长度上下文;

●支持工具调用、RAG(检索增强文本生成)、角色扮演、AI Agent等。

最近Hugging Face联合创始人兼首席执行Clem Delangue于6月26日在X平台发布推文,表示阿里云开源的通义千问(Qwen)指令微调模型Qwen2-72B在开源模型排行榜上荣登榜首。

LLM

来自HuggingFace独立、客观、第三方的认可,从侧面再次证明了Qwen2的技术先进性。同时也分享下在端侧芯片AX650N上部署效果。

芯片介绍

 

3.1 AX650N

爱芯元智第三代高能效比智能视觉芯片AX650N。集成了八核Cortex-A55 CPU,高能效比NPU,支持8K@30fps的ISP,以及H.264、H.265编解码的 VPU。接口方面,AX650N支持64bit LPDDR4x,多路MIPI输入,千兆Ethernet、USB、以及HDMI 2.0b输出,并支持32路1080p@30fps解码内置高算力和超强编解码能力,满足行业对高性能边缘智能计算的需求。通过内置多种深度学习算法,实现视觉结构化、行为分析、状态检测等应用,高效率支持基于Transformer结构的视觉大模型和语言类大模型。提供丰富的开发文档,方便用户进行二次开发。

LLM

 

3.2 AX630C

爱芯元智第四代智能视觉芯片AX630C,该芯片集成新一代智眸4.0AI-ISP,最高支持4K@30fps实时真黑光,同时集成新一代通元4.0高性能、高能效比 NPU引擎,使得产品在低功耗、高画质、智能处理和分析等方面行业领先。提供稳定易用的SDK软件开发包,方便用户低成本评估、二次开发和快速量产。帮助用户在智能家居应用和其他AIoT项目中发挥更大的价值。

LLM

结合AX630C的产品规格,我们选择最合适的Qwen2 0.5B-Instruct作为本次示例模型。

LLM编译

 

4.1 Pulsar2

Pulsar2是新一代AI工具链,包含模型转换、离线量化、模型编译、异构调度四合一超强功能,进一步强化了网络模型高效部署的需求。在针对第三代、第四代NPU架构进行了深度定制优化的同时,也扩展了算子&模型支持的能力及范围,对Transformer结构的网络也有较好的支持。

最新释放的Pulsar2 3.0-temp版本新增llm build模块。在该版本中已经可编译出能在AX650N上运行的大模型版axmodel(AX630C的llm build Release版加班开发中……当然我们在网盘中提供了预编译体验版本,感兴趣的朋友可以先试试效果)

https://pulsar2-docs.readthedocs.io/zh-cn/latest/appendix/build_llm.html

 

4.2 下载ax-llm-build项目

默认用户已经按照Pulsar2 v3.0-temp版本文档中《开发环境准备》章节完成docker镜像安装并已进入pulsar2的docker环境。

 

git clone https://github.com/AXERA-TECH/ax-llm-build.git

 

 

4.3 下载Qwen2-0.5B-Instruct

 

cd ax-llm-build
pip install -U huggingface_hub
huggingface-cli download --resume-download Qwen/Qwen2-0.5B-Instruct --local-dir Qwen/Qwen2-0.5B-Instruct

 

 

4.4 编译执行

 

pulsar2 llm_build --input_path Qwen/Qwen2-0.5B-Instruct/ --output_path Qwen/Qwen2-0.5B-w8a16/ --kv_cache_len 1023 --model_config config/qwen2-0.5B.json --hidden_state_type bf16 --weight_type s8

 

● log参考信息

 

root@gpux2:/data/ax-llm-build# pulsar2 llm_build --input_path Qwen/Qwen2-0.5B-Instruct/ --output_path Qwen/Qwen2-0.5B-w8a16/ --kv_cache_len 1023 --model_config config/qwen2-0.5B.json --hidden_state_type bf16 --weight_type s8
Config(
    model_name='Qwen/Qwen2-0.5B-Instruct',
    model_type='qwen',
    num_hidden_layers=24,
    num_attention_heads=14,
    num_key_value_heads=2,
    hidden_size=896,
    intermediate_size=4864,
    vocab_size=151936,
    rope_theta_base=1000000.0,
    max_position_embedings=32768,
    rope_partial_factor=1.0,
    norm_eps=1e-06,
    norm_type='rms_norm',
    hidden_act='silu'
)
2024-07-01 1108.009 | SUCCESS  | yamain.command.llm_build85 - prepare llm model done!
building llm decode layers   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 24/24 059
building llm post layer   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1/1 024
2024-07-01 1131.941 | SUCCESS  | yamain.command.llm_build128 - build llm model done!
2024-07-01 1156.925 | SUCCESS  | yamain.command.llm_build277 - check llm model done!

 

● embed提取和优化

 

python tools/extract_embed.py --input_path Qwen/Qwen2-0.5B-Instruct/ --output_path Qwen/Qwen2-0.5B-w8a16/
python tools/embed-process.py --input Qwen/Qwen2-0.5B-w8a16/model.embed_tokens.weight.npy --output Qwen/Qwen2-0.5B-w8a16/model.embed_tokens.weight.float32.bin
chmod +x ./tools/fp32_to_bf16
./tools/fp32_to_bf16 Qwen/Qwen2-0.5B-w8a16/model.embed_tokens.weight.float32.bin Qwen/Qwen2-0.5B-w8a16/model.embed_tokens.weight.bfloat16.bin

 

 

4.5 输出文件说明

 

root@xxx:/data/ax-llm-build# tree Qwen/Qwen2-0.5B-w8a16
Qwen/Qwen2-0.5B-w8a16
├── model.embed_tokens.weight.bfloat16.bin
├── model.embed_tokens.weight.float32.bin
├── model.embed_tokens.weight.npy
├── qwen_l0.axmodel
├── qwen_l10.axmodel
├── qwen_l11.axmodel
├── qwen_l12.axmodel
├── qwen_l13.axmodel
......
├── qwen_l7.axmodel
├── qwen_l8.axmodel
├── qwen_l9.axmodel
└── qwen_post.axmodel

 

其中,

model.embed_tokens.weight.bfloat16.bin、qwen_l0.axmodel ~ qwen_l23.axmodel、qwen_post.axmodel,

是上板运行需要的。

开发板运行

 

5.1 ax-llm项目

ax-llm项目用于探索业界常用LLM(Large Language Model)在AXERA已有芯片平台上落地的可行性和相关能力边界,方便社区开发者进行快速评估和二次开发自己的LLM应用。

https://github.com/AXERA-TECH/ax-llm

同时,我们在网盘中已经提供好了分别基于AX650N和AX630C平台预编译好的部分LLM示例。

https://pan.baidu.com/s/1_LG-sPKnLS_LTWF3Cmcr7A?pwd=ph0e

 

5.2 执行过程(基于AX650N开发板)

 

root@ax650:/mnt/qtang/llama_axera_cpp# ./run_qwen2_0.5B.sh
[I][                            Init][  71]: LLM init start
  3% | ██                                |   1 /  27 [0.28s<7.48s, 3.61 count/s] tokenizer init ok
[I][                            Init][  26]: LLaMaEmbedSelector use mmap
100% | ████████████████████████████████ |  27 /  27 [7.40s<7.40s, 3.65 count/s] init post axmodel okremain_cmm(11583 MB)
[I][                            Init][ 180]: max_token_len : 1023
[I][                            Init][ 185]: kv_cache_size : 128, kv_cache_num: 1023
[I][                            Init][ 199]: LLM init ok
Type "q" to exit, Ctrl+c to stop current running
>> who are you?
I am a large language model created by Alibaba Cloud. I am called Qwen.
[N][                             Run][ 388]: hit eos,avg 24.51 token/s

 

 

5.3 视频示例(基于AX630C开发板)

 

5.4 性能统计

AX650N、AX630C目前均采用W8A16量化方案(性能优化会持续进行)

● AX650N

模型名称 参数量 速度(token/s)
TinyLlama-1.1 1.1B 16.5
Qwen2.0 0.5B 29.0
Qwen2.0 1.5B 11.2
MiniCPM 2.4B 6.0
Phi3Qwen2.0 3.8B 5.0
Llama3 8B 2.5

 AX630C:

模型名称 参数量 速度(token/s)
TinyLlama-1.1 1.1B 5.8
Qwen2.0 0.5B 10.7

结束语

随着大语言模型小型化的快速发展,越来越多有趣的多模态AI应用将逐渐从云端服务迁移到边缘侧设备和端侧设备。我们会紧跟行业最新动态,欢迎大家持续关注。

7月4日-7日,爱芯元智@2024WAIC,上海世博展览馆2号馆C1525(H2-C1525),欢迎大家现场交流。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分