Skip to content

bd4sur/Mio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mio

多模态交互智能代理 Intelligent Agent with Multi-modal Interaction.

B站演示视频:Jetson AGX Orin 部署大模型语音对话

安装部署

安装依赖

Mio是多个LLM、VLM和TTS模型的缝合怪,各自的依赖相互冲突,因此需要做一点小小的魔改。本人主要在 Jetson AGX Orin 上开发并部署Mio,因此此处记载的信息可能并不通用。

  • PyTorch:仅可使用nvidia官方提供的torch、torchvision、torchaudio三件套
  • Transformers:Mio仅支持Qwen2-VL这一个VLM,而Qwen2-VL要求transformers>=4.45.0。然而,截至2024年8月31日,transformers==4.45.0.dev0已不能完美支持torch<=2.3.0。因此,需要找到<site-packages>/transformers/pytorch_utils.pyALL_LAYERNORM_LAYERS变量,删掉列表中的nn.RMSNorm
  • Flash-Attention-2:这个东西在 Jetson AGX Orin 上编译起来非常困难,可以不用。如果一定要编译,需要注意的是:①将setup.py中所有涉及sm_xx的部分改成sm_87(因为Orin的 Ampere GPU 的 Compute Capability == 8.7);②并行任务数不能高于MAX_JOBS=6,否则会耗尽记忆体。
sudo apt install ffmpeg libavformat-dev libavcodec-dev libavutil-dev libavdevice-dev libavfilter-dev

conda create -n mio python==3.11 pysocks -y
conda activate mio
cd Mio
CMAKE_ARGS="-DLLAMA_CUDA=on" python -m pip install -r requirements.txt

或者单独编译llama.cpp,然后复用已有的libllama.so安装llama-cpp-python

cd /home/bd4sur/ai
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

mkdir build
cd build
cmake .. -DBUILD_SHARED_LIBS=ON -DGGML_CUDA=ON
cmake --build . --config Release

export LLAMA_CPP_LIB=/home/bd4sur/ai/llama.cpp/build/src/libllama.so
CMAKE_ARGS="-DLLAMA_BUILD=OFF" python -m pip install llama-cpp-python

生成自签名SSL证书

警告:本节涉及网络安全,仅供本人技术备忘之用。读者切勿参考,否则后果自负。

由于现代浏览器的安全策略限制,必须使用HTTPS,才能在浏览器上使用语音交互。因此,在内网服务器上部署时,需要正确配置SSL证书。

1、首先生成私钥。过程中需要输入口令,必须牢记并保密该口令。

openssl genrsa -des3 -out key.pem 1024

2、在信任的环境中,将其解密为明文密钥,这样每次启动服务器或者建立SSL连接时,无需输入口令。

openssl rsa -in key.pem -out key_unencrypted.pem

3、生成CSR(证书签名请求)文件。注意:Common Name 必须与域名保持一致,否则浏览器会提示安全风险。

openssl req -new -key key_unencrypted.pem -out bd4sur.csr

4、生成自签名证书。首先在当前工作目录创建扩展配置文件extconfig.txt参考),其内容如下,以添加“证书使用者可选名称”字段。如果不添加这一字段,则浏览器会提示安全风险。

basicConstraints = CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = ai.bd4sur.intra

然后执行以下命令,生成自签名证书bd4sur.crt,其有效期为365天。

openssl x509 -req -days 365 -in bd4sur.csr -signkey key_unencrypted.pem -out bd4sur.crt -extfile extconfig.txt

5、将私钥文件key_unencrypted.pem和证书文件bd4sur.crt置于以下目录:

  • ~
  • ~/ai/funasr/models 用于FunASR容器通过挂载的目录访问。

6、将证书设置为客户端的信任证书。对于安卓(小米)手机,通过“设置→密码与安全→系统安全→加密与凭据→从存储设备安装”,选取上面生成的bd4sur.crt,验证身份后,“凭据用途”选择“VPN和应用”即可。

7、在手机上设置域名解析。在内网搭建DNS服务器之前,以下是一个权宜手段:手机安装Virtual-Hosts,设置hosts文件并启动。

创建并进入虚拟环境,安装相关依赖

conda create -n mio python=3.10.15 pysocks -y

conda activate mio
pip install -r requirements.txt

启动FunASR容器

bash start_funasr.sh

NOTE 设置无需sudo执行docker run

# 添加docker用户组
sudo groupadd docker

# 将添加当前用户到docker用户组
sudo gpasswd -a ${USER} docker

# 重启docker服务
sudo service docker restart

# 给docker.sock增加读写权限
sudo chmod a+rw /var/run/docker.sock

启动LLM服务器

python server.py

访问

在浏览器中输入https://ai.bd4sur.intra:8443,进入对话窗口。

注意事项

  • 默认关闭自动TTS功能。可以点击输入框旁边的喇叭图标,开启自动TTS功能。由于ChatTTS对硬件性能要求很高,在Jetson上还不能实现实时TTS,因此需要等待比较长的时间才能听到转换后的语音。
  • 视觉问答目前只支持针对一幅图片的连续问答。
  • 选用纯语言模型时,不要上传图片,否则可能会出错。

权利声明

版权所有 © 2024 BD4SUR,保留所有权利。

本系统“按原样”提供,采用MIT协议授权。本系统为作者个人以学习和自用目的所创作的作品。作者不对本系统的质量作任何承诺。作者不保证提供有关本系统的任何形式的解释、维护或支持。作者不为任何人使用此系统所造成的任何正面的或负面的后果负责。

以部分或全部代码形式集成的开源软件