背景介绍
随着边缘计算与实时智能需求的快速增长,如何在资源受限的嵌入式设备上同时满足实时控制与AI推理能力成为技术热点。本文以ROCK 5B开发板为开发平台(搭载4核Cortex-A76 + 4核Cortex-A55,8GB LPDDR4),通过虚拟化技术实现虚拟化Linux+RTOS混合部署,并在Linux环境中部署轻量化大语言模型DeepSeek-1.5B+语音转文字模型,实现实时语音对话大模型功能,探索实时控制与AI推理的融合方案。
vmRT-Thread
vmRT-Thread是一个基于虚拟化技术的嵌入式软件集成开发平台,使得在高性能嵌入式设备上开发同时具备高实时性、高安全性和高复杂度的应用更简单和高效。整体系统架构如下:
1、实时/安全虚拟机(RVM/SVM,Realtime/Safety Virtual Machine) – 运行要求高实时性、或符合功能安全要求的应用,可以使用RT-Thread API或POSIX(PSE51)API,底层操作系统使用标准版ASIL-D认证版的RT-Thread或RT-Thread Smart;
2、管理虚拟机(MVM,Management Virtual Machine) - 运行高级管理服务(比如:复杂的监控、升级和日志等功能)和虚拟外设服务(比如:网络、存储、图形和图像等外设的虚拟化共享),如果没有这些功能则不需此虚拟机,可使用Linux、RT-Thread或RT-Thread Smart操作系统;普通虚拟机(NVM,Normal Virtual Machine) – 运行多媒体和人工智能等复杂应用,可以使用Android API或POSIX(PSE54) API,底层操作系统可以使用Linux或Android;
3、虚拟机间通信 – 支持虚拟机间的高性能共享内存,以及易用的套接字通信;
vmRT-Thread虚拟机管理器(Hypervisor/VMM) - 利用硬件虚拟化功能运行在虚拟化层,是针对嵌入式设备设计实现的轻量级、高安全性、高性能的Type1虚拟机管理器。
通过vmRT-Thread我们可以在ROCK 5B上同时部署RT-Thread系统和Linux系统,实现在Linux上部署大模型,在RT-Thread系统中可以控制小车等硬件设备。
在本文中,我使用vmRT-Thread将ROCK 5B的8个CPU分为2部分,Linux系统占6核,RT-Thread系统占2核
以下是htop查看的Linux系统的CPU信息
部署DeepSeek-R1-Distill-Qwen-1.5B大模型
DeepSeek-R1 是由杭州深度求索公司开发的大模型,DeepSeek系列模型完全开源且deepseek 通过 DeepSeek-R1蒸馏了 6 个小模型。
rock 5B官方提供了编译好的 DeepSeek-R1-Distill-Qwen-1.5B 模型和执行文件,我们可以直接下载,下载链接:
模型文件下载:
https://docs.radxa.com/rock5/rock5b/app-development/rkllm_deepseek_r1
下载文件如下
下载好的模型文件上传到开发板上,导入必需的环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/librkllmrt.so所在文件夹路径
export RKLLM_LOG_LEVEL=1
测试模型推理, 128分别是模型输入的最大token数量和生成的最大token数量
./llm_demo DeepSeek-R1-Distill-Qwen-1.5B.rkllm 128 128
部署语音唤醒和语音识别
语音唤醒使用pyaudio和webrtcvad实现,代码参考自ASR-LLM-TTS(https://github.com/ABexit/ASR-LLM-TTS/tree/master)。语音识别为SenseVoiceSmall模型,模型下载链接
(https://huggingface.co/happyme531/SenseVoiceSmall-RKNN2)。
语音唤醒
我们主要通过pyaudio实时采集音频数据,然后将一段时间内采集的音频数据用webrtcvad进行VAD检测,将检测到的有语音活动的数据拼接保存为wav格式的音频,用于语音识别。
代码流程图如下
语音识别
语音识别使用的是SenseVoiceSmall模型,比官方提供的语音识别模型快6倍。他的部署方式与DeepSeek-R1-Distill-Qwen-1.5B一致,下载编译好的模型文件并上传到开发板中即可通过命令行或者代码部署模型。
部署语音识别模型还需要安装rknn-toolkit2-lite2和以下依赖
pip install kaldi_native_fbank onnxruntime sentencepiece soundfile pyyaml numpy
运行sensevoice_rknn.py测试识别效果
python ./sensevoice_rknn.py --audio_file output.wav
实现实时语音与大模型对话
有了上面的基础,我们已经可以实现实时语音与大模型对话了。
只要在语音唤醒和识别的基础上,与大模型沟通即可。这里rknn-llm(https://github.com/airockchip/rknn-llm/tree/29a9fb97d14c773b6efa07415dce6ec91c7d8461/examples/rkllm_server_demo)中有example代码,用Flask实现大模型服务。
在开发板上下载rknn-llm代码。修改flask_server.py中的PROMPT_TEXT_PREFIX和PROMPT_TEXT_POSTFIX为
PROMPT_TEXT_PREFIX = "<|im_start|>system\nYou are a helpful assistant.\n<|im_end|>\n<|im_start|>user\n"
PROMPT_TEXT_POSTFIX = "\n<|im_end|>\n<|im_start|>assistant\n<think>"
然后运行以下代码启动大模型服务
python flask_server.py --rkllm_model_path ../ds_r1/DeepSeek-R1-Distill-Qwen-1.5B.rkllm --target_platform rk3588
以下是实时语音对话的运行效果
总结
在传统的嵌入式方案中,往往只能选择Linux或者RT-Thread一个系统,这种方式使得系统只能用于一般的非实时交互环境。而在当前众多的生产生活环境中,往往需要满足交互的情况下,尽可能的提高控制系统的响应和实时性能。因此,本文从这一出发点,详细的介绍了基于vmRT-Thread的虚拟化方案,通过提供虚拟化层,既满足了人机交互的可能,同时,又满足了RT-Thread OS的实时性性能,该方案可以广泛的应用在当前各种工业、生产环境中,为原有嵌入式设备提供高实时性、高稳定性的智能化交互解决方案,该方案有潜力运用在智能家居、智慧制造等诸多领域。
下一期,我们将介绍基于该方案的智能小车解决方案,在该方案中,我们可以更加直观的理解基于这种基于虚拟化的嵌入式AI方案给设备智能化开发带来的便利。
👇体验了解虚拟化👇
——————End——————
👇 点击阅读原文进入官网