在Jetson上玩转大模型Day5:Ollama指令模式的智能助手
在Jetson上玩转大模型Day6:Ollama的Webui智能助手
在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot
在Jetson上玩转大模型Day8:多模態搜圖的NanoDB
在Jetson上玩转大模型Day9:建立EffectiveViT测试环境
上一篇文章里,我们使用NanoLLM所提供的nano_llm.agents.web_chat智能体,调用Llama-3-8B-Instruct模型,并修改ASR与TTS调用的档来支持中文的输入与输出,非常轻松地搭建Llamaspeak语音助手。
本文将进一步以前面的基础,将Llama-3-8B-Instruct模型换成支持VLM的大语言模型,就能立即将原本纯语音的Llamaspeak变身成为多模态的语音助手。目前NanoLLM所支持的VLM非常多,如下图所列的内容:
现在我们试试把前面llamaspeak的执行指令中的 --model 所指定的模型,改成Efficient-Large-Model/VILA-7b试试看,完整指令如下:
$ python3 -m nano_llm.agents.web_chat --api=mlc \
--model Efficient-Large-Model/VILA-7b --asr=riva --tts=piper
由于系统里没有Efficient-Large-Model/VILA-7b模型,因此会直接调用下载程序,从HuggingFace去下载。
还有将模型转换成支持CUDA GPU的格式:
甚至还要再将格式转换成适合本设备的TensorRT格式:
要知道,以前这些过程,都需要我们一步一步地按照要求规范去给与特定参数然后执行,过程十分繁琐并且出错率很高。如今NanoLLM系统都已经为我们将大部分复杂的任务进行简化,可以为我们减轻至少80%以上工作量与时间。
当一切就绪之后,同样在浏览器中输入“https://127.0.0.1:8050”,就能启动Llamaspeak的语音交互界面。现在我们要尝试的已经不单单是对话的部分了,我们可以从其他地方“拉入”图片,然后问语音助手“图片里面有什么?”
下面的回答是“这张照片描绘了一个年轻的男人和一条犬在一个山峦上的旅行。男人拥有一把相机,而犬则拥有一条链,这条链连接着一个蓝色的背包。这个犬的背包带着一个黑色的插筛杯。”
现在我们换一张如下图的水果照片来提出问题,不过这里记得得先清除前面的聊天,否则会产生幻觉现象。我们提出问题“照片里有哪些水果?”
回应的答复就有点混乱了,毕竟照片里面的水果还挺多的。
后面我们继续询问“图片里的水蜜桃多少钱?橘子是多少钱?”
助手回答“在这张照片中,我们可以看到一些水蜜桃和橘子。它们的价格是1.50 欧元和2.50 欧元”
又问“照片里有多少个苹果?多少个葡萄?”
回答“这张照片中的苹果和葡萄很多。我无法确定具体数量,但它们的整个摄影中都有很多。”
大致的效果是这样的,就一个大语言模型来说,这已经算是相当厉害了,而且回答过程几乎没有任何延迟。
这里可能会出现一个问题,当我们离开容器之后,先前修改的内容并不会保存下来,因此重新进入容器之后,前面调整过的中文ASR与TTS配置,就得重新再来一次,这是一个比较麻烦的事情。
解决这个问题的办法有两种:
将修改过的容器,使用docker commit 存成另一个镜像文件名,例如llamaspeak_cn:r36.2.0等等,然后启动时将指令修改成下面的方式:
$ jetson-containers run --env HUGGINGFACE_TOKEN=<自己的HUGGINGFACE_TOKEN> \
--workdir /opt/NanoLLM llamaspeak_cn:r36.2.0
但这种方式如果还需要修改其他代码的时候,就得不断储存镜像档,对空间会有不小的影响,并且在版本的管理上也是一大考验。
另一种方式,就是在本机上复制一份NanoLLM源代码,并映射到容器内的/opt/NanoLLM,这样不仅可以确保使用的NanoLLM版本是最新的,并且我们在这里的任何修改,都有容器内无关。执行的步骤如下:
$ git clone https://github.com/dusty-nv/NanoLLM
$ jetson-containers run -v ~/NanoLLM:/opt/NanoLLM --workdir /opt/NanoLLM \
--env HUGGINGFACE_TOKEN=<自己的HUGGINGFACE_TOKEN> $(autotag nano_llm)
进入容器之后,重新执行一次下面指令,更新容器内配套库的版本
pip install -r requirements.txt
现在对/opt/NanoLLM/nano_llm/nano_llm/plugins/speech面的riva_asr.py与piper_tts.py配置档,按照上一篇文章的方式去修改成支持中文的能力,这个方式的实用性就高很多。
大家可以从支持大模型列表中,尝试更多其他的模型来看看效果,因为NanoLLM已经让我们不需要写代码,就能跑出这么厉害的应用,多试几种模型所消耗的也就是下载模型的时间与带宽而已。