算能开发者社区
直播中

裸奔小耗子

6年用户 67经验值
擅长:嵌入式技术 处理器/DSP 控制/MCU
私信 关注

【算能RADXA微服务器试用体验】+ GPT语音与视觉交互:1,LLM部署

心心念念等了大半年,终于拿到了这个传说中高达32Tops算力的微型服务器。先上个图来看看:

dc85b5b64fe6e3666eb19ed59c7f0a9.jpg

3826ef4923b909ac761275de514013d.jpg

机器默认不带无线网卡,但有线网卡有两张。使用串口或是将Lan口插入路由器后用SSH都可以很方便的进入系统。登录用户我选择的是默认的linaro,使用这个用户登陆后会有一些坑,我们先一一解决一下,才能后续正常使用。

首先是对于网卡的配置。默认所有的网络都走了wan口的网卡,因此需要先调整为lan口才行。相比于修改iptable,最便捷的方法是直接将wan口网卡禁用即可。如果未来有路由器,交换机等其他应用时再打开就行。

sudo ifconfig eth1 down

另一个坑是这个用户自带了一些环境配置,在~/.bashrc中,我们需要把相应的内容注释掉:

# 设置PROMPT_COMMAND,以便每次提示符返回时执行 autoenv 函数
# PROMPT_COMMAND="autoenv"


#export http_proxy="http://192.168.137.1:7890"
#export https_proxy="http://192.168.137.1:7890"
#export no_proxy="localhost,127.0.0.1,192.168.0.0/16"

#export LD_LIBRARY_PATH=/opt/sophon/libsophon-0.5.0/lib:/opt/sophon/sophon-sail/lib/:$LD_LIBRARY_PATH

#export HF_HOME=/data/project/audiocraft/models
#export LD_LIBRARY_PATH=/opt/OpenBLAS/lib:$LD_LIBRARY_PATH

#export LD_LIBRARY_PATH=/opt/sophon/sophon-sail/lib/:$LD_LIBRARY_PATH

接下来重启,系统就可以正常使用了。环境变量的配置,未来在具体项目中我们会再次提到。

下面我们正式开始项目。项目从输入到输出分别涉及了语音识别,图像识别,LLM,TTS这几个与AI相关的模块。先从最核心的LLM开始。

由于LLAMA3是最新推出的模型,因此我们就使用它来完成项目。先从github下载对应的项目:

cd /data/project
git clone https://github.com/sophgo/LLM-TPU.git

然后进入LLAMA3对应的文件夹中,创建虚拟环境并激活:

cd LLM-TPU/models/Llama3
python3 -m venv python_venv_3.8
source llama3_venv_3.8/bin/activate

安装环境依赖并下载模型:

pip3 install -r requirements.txt
mkdir bmodels
cd bmodels
wget https://github.com/radxa-edge/TPU-Edge-AI/releases/download/llama3/tar_downloader.sh
bash tar_downloader.sh
tar -xvf llama3-8b_int4_1dev_512.tar.gz
cd ..

下面,我们需要修改一下启动脚本run_demo.sh,把启动脚本中的内容替换成下面代码:

#!/bin/bash
# download bmodel
if [ ! -d "./bmodels" ]; then
  mkdir ./bmodels
fi

if [ ! -f "./bmodels/llama3-8b_int4_1dev_512/llama3-8b_int4_1dev_512.bmodel" ]; then
  pip3 install dfss
  python3 -m dfss --url=open@sophgo.com:/ext_model_information/LLM/LLM-TPU/llama3-8b_int4_1dev_512_addr_mode.bmodel
  mv llama3-8b_int4_1dev_512_addr_mode.bmodel ./bmodels/llama3-8b_int4_1dev_512/llama3-8b_int4_1dev_512.bmodel
else
  echo "Bmodel Exists!"
fi

if [ ! -f "./python_demo/chat.cpython-38-aarch64-linux-gnu.so" ]; then
#  cd python_demo && rm -rf build && mkdir build && cd build
#  cmake .. && make -j
#  cp *chat* ..
#  cd ../..
  cp ./bmodels/llama3-8b_int4_1dev_512/*chat* ./python_demo/
else
  echo "chat.so exists!"
fi

# run demo
echo $PWD
export PYTHONPATH=$PWD/python_demo:$PYTHONPATH
export LD_LIBRARY_PATH=../../support/lib_soc:$LD_LIBRARY_PATH
# python3 python_demo/pipeline.py --model ./bmodels/llama3-8b_int4_1dev_512/llama3-8b_int4_1dev_512.bmodel --tokenizer ./token_config --devid 0
python3 python_demo/web_demo.py --model ./bmodels/llama3-8b_int4_1dev_512/llama3-8b_int4_1dev_512.bmodel --tokenizer ./token_config --devid 0

接下来运行bash run_demo.sh,如果看到以下内容,说明模型已经正确运行。
image.png

接着我们在浏览器中打开服务器ip对应的8003端口,就可以看到Gradio的前端页面,输入文字,就可以对话。
image.png

我们回过头去看一下web_demo.py,从gr_user函数可以看出,用户每次输入的内容会在这个函数中被append到整个聊天的历史对话中:
image.png

而从接下来的gr_chat函数中可以看到,函数把整个history作为输入喂给模型,然后用循环的方式每次从模型中拿出token,当token可以被decode时,就对应显示出一个字来。最终输出的解码后的内容被存在answer_cur中。
image.png

知道了api的调用方法,我们就可以将它应用在后续的项目中。

更多回帖

发帖
×
20
完善资料,
赚取积分