尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SenseVoice-Small模型部署详解:Ubuntu 20.04服务器环境配置全流程

SenseVoice-Small模型部署详解:Ubuntu 20.04服务器环境配置全流程 SenseVoice-Small模型部署详解Ubuntu 20.04服务器环境配置全流程最近有不少朋友在问怎么在服务器上快速部署一个开箱即用的语音识别模型。如果你手上正好有台Ubuntu 20.04的服务器想试试SenseVoice-Small这个轻量级模型那今天这篇内容就是为你准备的。我会带你走一遍从零开始的完整部署流程从系统环境准备到模型服务测试把每一步都讲清楚。整个过程不算复杂跟着做下来半小时左右就能让模型跑起来。咱们不聊复杂的原理就聚焦在“怎么装、怎么用”上确保你照着步骤就能搞定。1. 部署前准备理清思路与环境检查在开始动手之前我们先花几分钟了解一下这次部署的目标和需要准备的东西。SenseVoice-Small是一个基于ONNX格式的量化语音识别模型主打的就是轻量和高效特别适合在资源有限的服务器上运行。我们今天要做的就是把它封装成一个可以通过网络调用的服务。你需要准备的东西很简单一台运行Ubuntu 20.04的服务器物理机或云服务器都行。服务器最好配有NVIDIA GPU这样推理速度会快很多。如果没有用CPU也能跑就是慢一些。一个能通过SSH连接到服务器的终端。接下来我们登录服务器开始第一步的系统环境配置。2. 系统环境搭建基础依赖与驱动安装好的我们现在已经通过SSH连上了Ubuntu 20.04服务器。首先我们需要确保系统是最新的并且安装一些必要的工具。打开终端输入以下命令来更新系统软件包列表并升级现有软件sudo apt update sudo apt upgrade -y这个命令可能会运行几分钟取决于你的系统更新量。完成后我们安装一些后续步骤可能需要的通用工具比如用于下载文件的wget和curlsudo apt install -y wget curl2.1 安装Docker引擎因为我们打算使用封装好的镜像来运行模型这样可以避免复杂的Python环境依赖问题所以需要先安装Docker。Docker的安装步骤在Ubuntu上已经很成熟了。首先添加Docker的官方GPG密钥和软件源# 安装必要的证书工具 sudo apt install -y ca-certificates curl gnupg # 添加Docker的官方GPG密钥 sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg # 添加Docker的APT源 echo \ deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null然后再次更新软件包列表并安装Dockersudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin安装完成后启动Docker服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker为了不用每次都加sudo来运行docker命令我们可以将当前用户添加到docker用户组sudo usermod -aG docker $USER注意执行完上面这条命令后你需要完全退出当前的SSH会话然后重新登录这个组权限变更才会生效。你可以直接断开连接再重连一次。重新登录后运行下面的命令验证Docker是否安装成功并且当前用户有权限执行docker --version docker run hello-world如果看到Docker版本信息和“Hello from Docker!”的提示说明Docker已经准备就绪。2.2 配置NVIDIA容器工具包如果使用GPU如果你的服务器有NVIDIA GPU并且希望模型推理能使用GPU加速那么还需要安装NVIDIA的容器工具包。这一步能让Docker容器直接调用宿主机的GPU驱动。首先确认你的系统已经安装了合适的NVIDIA驱动。可以运行nvidia-smi命令检查。如果命令未找到或报错你需要先安装NVIDIA驱动。由于驱动安装因显卡型号和系统版本而异这里不展开你可以搜索“Ubuntu 20.04 安装 NVIDIA 驱动”找到对应教程。假设驱动已经装好nvidia-smi命令能正常显示显卡信息我们继续安装NVIDIA容器工具包。配置软件源并安装工具包# 添加NVIDIA容器工具包的源 distribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed s#deb https://#deb [signed-by/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list # 安装工具包 sudo apt update sudo apt install -y nvidia-container-toolkit安装完成后需要配置Docker使用NVIDIA作为默认的运行时sudo nvidia-ctk runtime configure --runtimedocker sudo systemctl restart docker最后运行一个测试命令验证GPU在容器内是否可用docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi这个命令会拉取一个小的CUDA镜像并运行nvidia-smi。如果能在容器内看到和宿主机一样的GPU信息恭喜你GPU环境配置成功了。3. 拉取与运行模型镜像环境准备好了现在进入核心环节——运行模型服务。我们使用一个预置好的镜像它里面已经包含了模型文件、ONNX Runtime环境以及一个简单的HTTP服务。3.1 拉取SenseVoice-Small镜像在终端中执行以下命令来拉取镜像。这个镜像可能比较大几个GB下载时间取决于你的网络速度。docker pull your-mirror-registry/sensevoice-small-onnx:latest请注意上面的your-mirror-registry是一个占位符你需要将其替换为实际的镜像仓库地址。这个地址通常由提供镜像的平台给出。如果你是从某个镜像广场获取的请使用那里提供的完整镜像名称。3.2 运行模型服务容器镜像拉取成功后我们就可以运行它了。关键是要把容器内的服务端口映射到宿主机的某个端口上这样我们才能从外部访问。运行以下命令启动容器docker run -d \ --name sensevoice-service \ -p 8000:8000 \ --restart unless-stopped \ your-mirror-registry/sensevoice-small-onnx:latest我来解释一下这个命令的几个参数-d让容器在后台运行。--name sensevoice-service给容器起个名字方便管理。-p 8000:8000这是最重要的部分。它把容器内部的8000端口映射到了宿主机的8000端口。你可以把宿主机的8000改成其他未被占用的端口比如-p 8080:8000。--restart unless-stopped设置容器自动重启策略除非手动停止否则如果容器退出Docker会重新启动它。最后是镜像名。运行后可以用docker ps命令查看容器是否在正常运行docker ps你应该能看到一个名为sensevoice-service的容器状态是Up。如果状态不对可以用docker logs sensevoice-service查看容器的日志输出排查问题。4. 网络访问与安全配置服务跑起来了但我们还得确保能从服务器外部访问到它并且做一些基本的安全设置。4.1 配置服务器防火墙如果启用很多云服务器默认开启了防火墙如UFW。如果你需要从外网访问这个服务就需要放行我们刚才映射的端口例如8000。检查UFW状态sudo ufw status如果状态是inactive说明防火墙没开可以跳过这一步。如果是active则需要添加规则sudo ufw allow 8000/tcp sudo ufw reload这样外部网络就可以通过服务器的IP地址和8000端口访问服务了。4.2 测试服务连通性首先在服务器本机上测试一下服务是否响应。运行一个简单的curl命令curl http://localhost:8000/health或者更详细一点curl -v http://localhost:8000如果服务正常你应该会收到一个HTTP响应比如200 OK或者一个简单的欢迎页面/健康检查信息。具体的响应内容取决于镜像内服务的实现。如果curl命令报错“连接拒绝”说明服务可能没启动成功。回头检查一下docker logs的输出。5. 功能测试用代码调用语音识别服务运行正常是时候试试它的核心功能了。我们准备一个音频文件通过HTTP请求发送给服务看看它能不能把语音转成文字。5.1 准备测试音频你需要一个.wav格式的音频文件用于测试。如果没有可以用命令行工具快速生成一个简单的需要先安装ffmpeg# 安装ffmpeg如果未安装 sudo apt install -y ffmpeg # 生成一段5秒钟的测试音频正弦波内容为“测试” echo 测试 | text2wave -F 16000 -o test_audio.wav # 注意上述命令需要festival语音合成工具如果不可用可以自己录制或找一个现成的wav文件。更简单的方法是直接找一个已有的中文语音wav文件确保采样率是常见的16kHz或8kHz。5.2 使用Python脚本进行测试这里提供一个简单的Python脚本使用requests库来调用服务。如果你的服务器没有Python环境可以简单安装一下sudo apt install -y python3 python3-pip pip3 install requests然后创建一个名为test_sensevoice.py的文件import requests import json # 服务地址如果在服务器本机测试就用localhost否则换成服务器IP service_url http://localhost:8000 # 假设服务接收语音的端点路径是 /recognize请根据实际镜像文档调整 recognize_endpoint f{service_url}/recognize # 你的测试音频文件路径 audio_file_path ./test_audio.wav try: # 以二进制形式打开音频文件 with open(audio_file_path, rb) as f: files {audio: f} # 发送POST请求有些服务可能需要额外的参数如language、task等 data {language: zh} # 指定中文 response requests.post(recognize_endpoint, filesfiles, datadata) # 打印响应状态和内容 print(f状态码: {response.status_code}) if response.status_code 200: result response.json() print(识别结果:) print(json.dumps(result, indent2, ensure_asciiFalse)) else: print(f请求失败: {response.text}) except FileNotFoundError: print(f错误找不到音频文件 {audio_file_path}) except requests.exceptions.ConnectionError: print(错误无法连接到服务请检查服务是否运行以及地址端口是否正确。) except Exception as e: print(f发生未知错误: {e})运行这个脚本python3 test_sensevoice.py如果一切顺利你会看到服务返回的JSON格式的识别结果里面应该包含了转换后的文字。5.3 使用cURL命令测试无Python环境如果不想装Python直接用curl也可以测试不过命令稍微复杂一点curl -X POST \ -F audio./test_audio.wav \ -F languagezh \ http://localhost:8000/recognize同样/recognize这个路径需要根据你实际使用的镜像文档来确认。6. 常见问题与解决思路部署过程中可能会遇到一些小麻烦这里列举几个常见的Docker命令权限错误现象运行docker ps或其它命令时提示Got permission denied。解决确保你已经执行了sudo usermod -aG docker $USER并且重新登录了SSH会话。如果还不行可以临时用sudo前缀或者检查/var/run/docker.sock文件的权限。端口被占用现象运行docker run时提示port is already allocated。解决换一个宿主机端口比如把-p 8000:8000改成-p 8001:8000。或者用sudo netstat -tlnp | grep :8000找出占用8000端口的进程并停止它。容器启动后立即退出现象docker ps看不到容器docker ps -a看到状态是Exited。解决用docker logs sensevoice-service查看退出日志。常见原因包括镜像内的启动命令出错、模型文件加载失败、端口冲突等。根据日志信息针对性解决。GPU在容器内不可用现象服务日志显示没有GPU或者推理速度极慢。解决首先确认宿主机nvidia-smi正常。然后检查是否安装了nvidia-container-toolkit并正确重启了Docker。最后确保运行容器时包含了--gpus all参数如果你的启动命令里没有的话需要停止现有容器并用带--gpus all的命令重新运行。HTTP请求超时或无响应现象curl或Python脚本长时间无响应或报连接错误。解决首先在服务器上执行curl http://localhost:映射端口测试是否通。如果不通检查容器状态和日志。如果服务器本地通但外部不通检查服务器安全组云平台和防火墙设置是否放行了对应端口。7. 总结与后续建议走完这一整套流程你应该已经在Ubuntu 20.04上成功部署了SenseVoice-Small模型服务。整个过程的核心其实就是利用Docker把复杂的模型和环境打包让我们能通过几条命令就拉起一个可用的服务。用下来感觉这种ONNX量化模型配合Docker部署的方式对新手确实比较友好省去了配环境、解决依赖冲突的麻烦。性能方面如果服务器有GPU识别速度会快很多实时处理音频流应该也没啥压力。如果你打算长期运行这个服务可以考虑把Docker的启动命令写进一个shell脚本或者用Docker Compose来管理这样重启服务器后也能自动恢复。另外这个服务目前是一个简单的HTTP接口在生产环境中你可能还需要在前面加一个Nginx做反向代理、配置HTTPS、或者增加一些认证和限流的功能。好了部署部分就聊这么多。你可以开始用这个服务接口尝试处理一些自己的音频文件或者把它集成到你的应用里去了。如果在使用中遇到其他问题多看看容器日志那里面通常包含了最直接的错误信息。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
返回列表