聊城做网站的公司信息,wordpress评论后显示,哈尔滨网站开发需要多少钱,临淄网站制作首选公司阿里声音项目Qwen2-Audio的部署安装#xff0c;在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有… 阿里声音项目Qwen2-Audio的部署安装在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有驱动2.3 安装驱动2.4 安装CUDA2.5 环境变量配置 二、安装miniconda环境1. 下载miniconda32. 安装miniconda33. 切换到bin文件夹4. 输入pwd获取路径5. 打开用户环境编辑页面6. 重新加载用户环境变量7. 初始化conda8.验证是否安装成功9.conda配置 三、安装Qwen2-Audio1.克隆仓库1.1 github克隆1.2 国内github镜像克隆1.3. 进入目录 2.创建虚拟环境2.1 进入虚拟环境 3. 安装依赖3.1设置清华源、更新pip3.2安装torch 12.4cuda版本3.3安装依赖文件3.4安装webui界面及其他未安装依赖3.5安装魔搭库准备下载模型文件3.6下载相关模型3.7执行代码启动webui界面3.8加入声音驱动实现真正的语音聊天 四、成功实现语音交互4.1 找不到录音机问题 一、ubuntu22.04基本环境配置
1.1 更换清华Ubuntu镜像源
删除原来的文件
rm /etc/apt/sources.list开始编辑新文件
vim /etc/apt/sources.list先按i键粘贴以下内容
# 默认注释了源码镜像以提高 apt update 速度如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse# 以下安全更新软件源包含了官方源与镜像站配置如有需要可自行修改注释切换
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse确保内容跟上述图片一致 按esc键再输入冒号wq保存 1.2 更新包列表
打开终端输入以下命令
sudo apt-get updatesudo apt upgrade更新时间较长请耐心等待 2. 安装英伟达显卡驱动
2.1 使用wget在命令行下载驱动包
wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/550.100/NVIDIA-Linux-x86_64-550.100.run2.2 更新软件列表和安装必要软件、依赖
sudo apt-get install g点击回车enter即可
sudo apt-get install gccsudo apt-get install make点击回车enter即可
成功安装 2.2 卸载原有驱动
sudo apt-get remove --purge nvidia* 1.使用vim修改配置文件
sudo vim /etc/modprobe.d/blacklist.conf2.按i键进入编辑模式,在文件尾增加两行
blacklist nouveau
options nouveau modeset03.按esc键退出编辑模式,输入:wq保存并退出 4.更新文件
sudo update-initramfs -u这里等待时间较久 5.重启电脑
sudo reboot这里需要等一会才能连上
2.3 安装驱动
1.授予执行权限
sudo chmod 777 NVIDIA-Linux-x86_64-550.100.run2.执行安装命令
sudo ./NVIDIA-Linux-x86_64-550.100.run这里一直按回车就行默认选择 一直按回车enter键直到安装成功 3.检测显卡驱动是否安装成功
nvidia-smi2.4 安装CUDA
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run执行安装命令
sudo sh ./cuda_12.4.0_550.54.14_linux.run1.输出accept开始安装 2.然后注意这里要按enter取消勾选第一个选项,因为之前已经安装了驱动 3.接着选择Install开始安装 4.安装完成 2.5 环境变量配置
1.以vim方式打开配置文件
sudo vim ~/.bashrc2.按i键进入编辑模式,在文件尾增加下面内容
export PATH/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH按esc键退出编辑模式,输入:wq保存并退出 3.更新环境变量
source ~/.bashrc4.检测CUDA是否安装成功
nvcc -V二、安装miniconda环境
1. 下载miniconda3
wget https://mirrors.cqupt.edu.cn/anaconda/miniconda/Miniconda3-py310_23.10.0-1-Linux-x86_64.sh2. 安装miniconda3
bash Miniconda3-py310_23.10.0-1-Linux-x86_64.sh -u直接一直enter键到输入路径和yes
这边建议路径为miniconda3 直接回车enter即可再次输入yes 成功安装 3. 切换到bin文件夹
cd miniconda3/bin/4. 输入pwd获取路径
pwd复制这里的路径
5. 打开用户环境编辑页面
vim ~/.bashrc 点击键盘I键进入编辑模式在最下方输入以下代码
export PATH/root/miniconda3/bin:$PATH按esc键退出编辑模式,输入:wq保存并退出
6. 重新加载用户环境变量
source ~/.bashrc7. 初始化conda
conda init bash8.验证是否安装成功
conda -V9.conda配置 1.配置清华镜像源 代码如下
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/2.设置搜索时显示通道地址
conda config --set show_channel_urls yes3.配置pip 镜像源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple三、安装Qwen2-Audio
1.克隆仓库
1.1 github克隆
git clone https://github.com/QwenLM/Qwen2-Audio.git1.2 国内github镜像克隆
git clone https://mirror.ghproxy.com/https://github.com/QwenLM/Qwen2-Audio.git1.3. 进入目录
cd Qwen2-Audio/2.创建虚拟环境
conda create -n qwen2 python3.10输入y回车即可
2.1 进入虚拟环境
conda activate qwen23. 安装依赖
3.1设置清华源、更新pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simplepython -m pip install --upgrade pip3.2安装torch 12.4cuda版本
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu1243.3安装依赖文件
cd demopip install -r requirements_web_demo.txt3.4安装webui界面及其他未安装依赖
pip install librosapip install --upgrade accelerate0.21.0pip install djangopip install githttps://mirror.ghproxy.com/https://github.com/huggingface/transformers3.5安装魔搭库准备下载模型文件
pip install modelscope3.6下载相关模型
cd ..modelscope download --model qwen/qwen2-audio-7b-instruct --local_dir ./Qwen/Qwen2-Audio-7B-Instruct3.7执行代码启动webui界面
改端口
vim demo/web_demo_audio.py按i进行编辑完成后再按esc冒号wq退出 成功进入 3.8加入声音驱动实现真正的语音聊天
cd demo创建一个新的webui界面的文件
touch test_audio.pyvim test_audio.py输入以下内容
import gradio as gr
import modelscope_studio as mgr
import librosa
from transformers import AutoProcessor, Qwen2AudioForConditionalGeneration
from argparse import ArgumentParser
import requests
import os
from django.http import HttpResponse# 默认的模型检查点路径
DEFAULT_CKPT_PATH Qwen/Qwen2-Audio-7B-Instructdef text_to_speech(text2):data {text: text2,text_language: zh,}# 注意 URL 中的单引号应该是 URL 的一部分需要正确转义response requests.post(http://服务器IP:端口, jsondata)if response.status_code 200:audio_file_path /root/project/Qwen2-Audio/demo/output.mp3with open(audio_file_path, wb) as f:f.write(response.content)return audio_file_pathelse:print(f错误请求失败状态码为 {response.status_code})return Nonedef _get_args():解析命令行参数获取运行配置。返回:argparse.Namespace: 包含命令行参数的命名空间对象。parser ArgumentParser()parser.add_argument(-c, --checkpoint-path, typestr, defaultDEFAULT_CKPT_PATH,helpCheckpoint name or path, default to %(default)r) # 模型检查点路径parser.add_argument(--cpu-only, actionstore_true, helpRun demo with CPU only) # 是否仅使用CPUparser.add_argument(--inbrowser, actionstore_true, defaultFalse,helpAutomatically launch the interface in a new tab on the default browser.) # 是否在浏览器中自动打开界面parser.add_argument(--server-port, typeint, default15110,helpDemo server port.) # 指定服务器端口parser.add_argument(--server-name, typestr, default0.0.0.0,helpDemo server name.) # 指定服务器名称args parser.parse_args()return argsdef add_text(chatbot, task_history, input):将用户输入的文本内容添加到聊天记录中并更新聊天机器人界面。参数:chatbot (gr.components.Chatbot): 聊天机器人组件。task_history (list): 任务历史记录。input (gr.inputs): 用户输入内容。返回:tuple: 更新后的聊天机器人界面和任务历史记录以及重置后的用户输入框。text_content input.text # 获取文本输入内容content []if len(input.files) 0: # 如果用户上传了音频文件for i in input.files:content.append({type: audio, audio_url: i.path}) # 将音频文件添加到内容列表中if text_content: # 如果用户输入了文本content.append({type: text, text: text_content}) # 将文本内容添加到内容列表中task_history.append({role: user, content: content}) # 更新任务历史记录# 更新聊天机器人界面添加用户输入chatbot.append([{text: input.text,files: input.files,}, None])return chatbot, task_history, Nonedef add_file(chatbot, task_history, audio_file_path):将音频文件添加到聊天记录中。参数:chatbot (gr.components.Chatbot): 聊天机器人组件。task_history (list): 任务历史记录。audio_file_path (str): 音频文件的路径。返回:tuple: 更新后的聊天机器人界面和任务历史记录。# 确保任务历史记录中的音频条目是正确的格式task_history.append({role: user, content: [{type: audio, audio_url: audio_file_path}]})# 更新聊天记录直接使用 audio_file_path 而不是 gr.Audio 组件chatbot.append((None, {type: audio, audio_url: audio_file_path}))return chatbot, task_historyimport osdef add_file(chatbot, task_history, audio_path):if not os.path.isfile(audio_path):print(fError: The file {audio_path} does not exist.)return chatbot, task_history# 将音频文件信息添加到任务历史task_history.append({role: user,content: [{type: audio, audio_url: audio_path}]})# 假设 chatbot 组件可以接受字典格式的输入chatbot_state [{text: f[Audio file: {os.path.basename(audio_path)}],files: [audio_path] # 直接使用文件路径而不是 gr.File}, None]chatbot.append(chatbot_state) # 更新 chatbot 状态return chatbot, task_historydef reset_user_input():重置用户输入字段。返回:gr.update: 将文本框的值重置为空。return gr.Textbox.update(value)def reset_state(task_history):重置聊天记录和任务历史。参数:task_history (list): 当前的任务历史记录。返回:tuple: 清空的聊天记录和任务历史。return [], []def regenerate(chatbot, task_history):重新生成最后的机器人响应。参数:chatbot (gr.components.Chatbot): 聊天机器人组件。task_history (list): 任务历史记录。返回:tuple: 更新后的聊天机器人界面和任务历史记录。# 如果最后一条消息是助手生成的则移除它if task_history and task_history[-1][role] assistant:task_history.pop()chatbot.pop()# 如果任务历史记录不为空重新生成响应if task_history:chatbot, task_history predict(chatbot, task_history)return chatbot, task_historydef predict(chatbot, task_history):根据当前任务历史记录生成模型响应并将响应转换为音频文件添加到聊天记录中。参数:chatbot (gr.components.Chatbot): 聊天机器人组件。task_history (list): 任务历史记录。返回:tuple: 更新后的聊天机器人界面和任务历史记录。print(f{task_history})print(f{chatbot})# 使用处理器将任务历史记录格式化为模型输入text processor.apply_chat_template(task_history, add_generation_promptTrue, tokenizeFalse)audios []# 遍历任务历史查找音频内容并加载for message in task_history:if isinstance(message[content], list):for ele in message[content]:if ele[type] audio:audios.append(librosa.load(ele[audio_url], srprocessor.feature_extractor.sampling_rate)[0])if len(audios) 0: # 如果没有音频则设置为 Noneaudios Noneprint(f{text})print(f{audios})# 使用处理器生成模型输入inputs processor(texttext, audiosaudios, return_tensorspt, paddingTrue)if not _get_args().cpu_only: # 如果支持 GPU则将输入数据移动到 CUDA 设备inputs[input_ids] inputs.input_ids.to(cuda)# 生成响应generate_ids model.generate(**inputs, max_length256)generate_ids generate_ids[:, inputs.input_ids.size(1):]# 解码生成的文本响应# 假设其他参数已经正确设置response processor.batch_decode(generate_ids, skip_special_tokensTrue)[0]task_history.append({role: assistant, content: response})chatbot.append((None, response)) # 添加文本响应# 将文本响应转换为语音audio_file_path text_to_speech(response)if audio_file_path:chatbot, task_history add_file(chatbot, task_history, audio_file_path)return chatbot, task_historydef _launch_demo(args):启动Gradio的Web用户界面展示Qwen2-Audio-Instruct模型的聊天功能。参数:args (argparse.Namespace): 从命令行解析的参数。with gr.Blocks() as demo:# 添加页面标题和描述gr.Markdown(p aligncenterimg srchttps://qianwen-res.oss-cn-beijing.aliyuncs.com/assets/blog/qwenaudio/qwen2audio_logo.png styleheight: 80px/p)gr.Markdown(centerfont size8Qwen2-Audio-Instruct Bot/center)gr.Markdown(\centerfont size3This WebUI is based on Qwen2-Audio-Instruct, developed by Alibaba Cloud. \(本WebUI基于Qwen2-Audio-Instruct打造实现聊天机器人功能。)/center)gr.Markdown(\centerfont size4Qwen2-Audio a hrefhttps://modelscope.cn/models/qwen/Qwen2-Audio-7B /a | a hrefhttps://huggingface.co/Qwen/Qwen2-Audio-7B/anbsp Qwen2-Audio-Instruct a hrefhttps://modelscope.cn/models/qwen/Qwen2-Audio-7B-Instruct /a | a hrefhttps://huggingface.co/Qwen/Qwen2-Audio-7B-Instruct/anbsp nbspa hrefhttps://github.com/QwenLM/Qwen2-AudioGithub/a/center)# 创建聊天机器人组件chatbot mgr.Chatbot(labelQwen2-Audio-7B-Instruct, elem_classescontrol-height, height750)# 创建用户输入组件支持文本、麦克风和文件上传user_input mgr.MultimodalInput(interactiveTrue,sources[microphone, upload],submit_button_propsdict(value Submit (发送)),upload_button_propsdict(value Upload (上传文件), show_progressTrue),)task_history gr.State([]) # 初始化任务历史状态with gr.Row(): # 创建清除历史和重试按钮empty_bin gr.Button( Clear History (清除历史))regen_btn gr.Button(️ Regenerate (重试))# 当用户提交输入时调用add_text函数然后调用predict函数生成响应user_input.submit(fnadd_text,inputs[chatbot, task_history, user_input],outputs[chatbot, task_history, user_input]).then(predict, [chatbot, task_history], [chatbot, task_history], show_progressTrue)# 清除历史按钮的点击事件处理重置聊天记录和任务历史empty_bin.click(reset_state, outputs[chatbot, task_history], show_progressTrue)# 重试按钮的点击事件处理重新生成最后的响应regen_btn.click(regenerate, [chatbot, task_history], [chatbot, task_history], show_progressTrue)# 启动Gradio界面demo.queue().launch(shareFalse, # 不共享URLinbrowserargs.inbrowser, # 是否自动在浏览器中打开server_portargs.server_port, # 指定服务器端口server_nameargs.server_name, # 指定服务器名称ssl_certfile/root/project/cert.pem, ssl_keyfile/root/project/key.pem, ssl_verifyFalse)if __name__ __main__:args _get_args() # 获取命令行参数if args.cpu_only:device_map cpu # 如果指定了仅使用CPU设置设备映射为CPUelse:device_map auto # 否则自动选择设备# 加载模型model Qwen2AudioForConditionalGeneration.from_pretrained(args.checkpoint_path,torch_dtypeauto, # 自动选择数据类型device_mapdevice_map, # 设置设备映射resume_downloadTrue, # 断点续传).eval()model.generation_config.max_new_tokens 2048 # 设置最大生成token数用于长对话print(generation_config, model.generation_config)processor AutoProcessor.from_pretrained(args.checkpoint_path, resume_downloadTrue) # 加载处理器_launch_demo(args) # 启动演示界面
运行上面代码之前先到4.1配置ssl
四、成功实现语音交互 4.1 找不到录音机问题
创建ssl
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes一直按enter键默认选择即可
修改launch
vim demo/web_demo_audio.py加入ssl参数注意替换路径
demo.queue().launch(shareFalse, # 不共享URLinbrowserargs.inbrowser, # 是否自动在浏览器中打开server_portargs.server_port, # 指定服务器端口server_nameargs.server_name, # 指定服务器名称ssl_certfile/root/project/cert.pem, ssl_keyfile/root/project/key.pem, ssl_verifyFalse)注意用https访问
https://服务器ip:端口