背景介绍
Qwen-Audio 是阿里云研发的大规模音频语言模型(Large Audio Language Model)。Qwen-Audio 可以以多种音频(包括说话人语音、自然音、音乐、歌声)和文本作为输入,并以文本作为输出。在 Qwen-Audio 的基础上,利用对齐机制打造出基于大语言模型的语音 AI 助手 Qwen-Audio-Chat,它支持更灵活的交互方式,包括多音频、多轮问答、创作等能力。
本文将基于阿里云 AMD 服务器和龙蜥 AI 容器服务,快速搭建出语音 AI 助手服务。
创建 ECS 实例
创建 ECS 实例时需要根据模型的大小对实例规格进行选择。由于整个模型的推理过程需要耗费大量的计算资源,运行时内存占用大量内存,为了保证模型运行的稳定,实例规格选择 ecs.g8a.4xlarge。同时,Qwen-Audio-Chat 的运行需要下载多个模型文件,会占用大量存储空间,在创建实例时,存储盘至少分配 100 GB。最后,为了保证环境安装以及模型下载的速度,实例带宽分配 100 Mbps。
实例操作系统选择 Alibaba Cloud Linux 3.2104 LTS 64 位。
创建 Docker 运行环境
安装 Docker
在 Alibaba Cloud Linux 3 上安装 Docker 可以参考 安装Docker并使用(Linux)。安装完成后请确保 Docker 守护进程已经启用。
systemctl status docker
创建并运行 PyTorch AI 容器
龙蜥社区提供了丰富的基于 Anolis OS 的容器镜像,其中就包括针对 AMD 优化的 PyTorch 镜像,可以使用该镜像直接创建一个 PyTorch 运行环境。
docker pull registry.openanolis.cn/openanolis/pytorch-amd:1.13.1-23-zendnn4.1 docker run -d -it --name pytorch-amd --net host -v $HOME:/root registry.openanolis.cn/openanolis/pytorch-amd:1.13.1-23-zendnn4.1
以上命令首先拉取容器镜像,随后使用该镜像创建一个以分离模式运行的,名为pytorch-amd
的容器,并将用户的家目录映射到容器中,以保留开发内容。
手动部署流程
进入容器环境
PyTorch 容器创建运行后,使用以下命令进入容器环境。
docker exec -it -w /root pytorch-amd /bin/bash
后续命令需在容器环境中执行,如意外退出,请使用以上命令重新进入容器环境。如需查看当前环境是否为容器,可以使用以下命令查询。
cat /proc/1/cgroup | grep docker # 有回显信息则为容器环境
软件安装配置
在部署 Qwen-Audio-Chat 之前,需要安装一些必备软件。
yum install -y git git-lfs wget xz gperftools-libs anolis-epao-release
后续下载预训练模型需要启用 Git LFS 的支持。
git lfs install
下载源码与预训练模型
下载 GitHub 项目源码,以及预训练模型。
git clone https://github.com/QwenLM/Qwen-Audio.git git clone https://www.modelscope.cn/qwen/Qwen-Audio-Chat.git qwen-audio-chat
部署运行环境
在部署 Python 环境之前,可以更换 pip 下载源,加快依赖包的下载速度。
mkdir -p ~/.config/pip && cat > ~/.config/pip/pip.conf <<EOF [global] index-url=http://mirrors.cloud.aliyuncs.com/pypi/simple/ [install] trusted-host=mirrors.cloud.aliyuncs.com EOF
安装 Python 运行依赖。
yum install -y python3-transformers python-einops pip install typing_extensions==4.5.0 tiktoken transformers_stream_generator accelerate gradio
安装 ffmpeg。
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-6.1-amd64-static.tar.xz tar -xf ffmpeg-6.1-amd64-static.tar.xz cp ffmpeg-6.1-amd64-static/{ffmpeg,ffprobe} /usr/local/bin rm -rf ffmpeg-6.1-amd64-static*
为了保证 ZenDNN 可以完全释放 CPU 算力,需要设置两个环境变量:OMP_NUM_THREADS
、GOMP_CPU_AFFINITY
。
cat > /etc/profile.d/env.sh <<EOF export OMP_NUM_THREADS=\$(nproc --all) export GOMP_CPU_AFFINITY=0-\$(( \$(nproc --all) - 1 )) EOF source /etc/profile
运行网页版 Demo
在项目源码中提供了网页版 Demo,可以用来和 Qwen-Audio-Chat 进行实时交互。
cd ~/Qwen-Audio export LD_PRELOAD=/usr/lib64/libtcmalloc.so.4 python3 web_demo_audio.py -c=${HOME}/qwen-audio-chat/ --cpu-only --server-name=0.0.0.0 --server-port=7860
部署完成后可以通过 http://<ECS 公网 IP>:7860
来访问服务。