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在开源模型排行榜上荣登榜首。
来自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结构的视觉大模型和语言类大模型。提供丰富的开发文档,方便用户进行二次开发。
3.2 AX630C
爱芯元智第四代智能视觉芯片AX630C,该芯片集成新一代智眸4.0AI-ISP,最高支持4K@30fps实时真黑光,同时集成新一代通元4.0高性能、高能效比 NPU引擎,使得产品在低功耗、高画质、智能处理和分析等方面行业领先。提供稳定易用的SDK软件开发包,方便用户低成本评估、二次开发和快速量产。帮助用户在智能家居应用和其他AIoT项目中发挥更大的价值。
结合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),欢迎大家现场交流。
全部0条评论
快来发表一下你的评论吧 !