随着多语言交流的需求的增加,实时语音翻译正迅速受到关注。在本教程中,你将学习如何使用 DigitalOcean 提供的H100 GPU Droplet 上的 OpenAI API 在 Open WebUI 上部署实时语音翻译应用。我们马上开始吧。
准备工作
- 注册一个DigitalOcean 账号,新注册用户可获得 200 美元使用额度。
- 在 DigitalOcean 后台部署并运行的 GPU Droplet云服务器。
- 一个用于访问 OpenAI 模型的 OpenAI API 密钥。
- 熟悉 SSH 和基础 Docker 命令。
- 用于登录 GPU Droplet 的 SSH 密钥,可参考我们往期教程。
一、设置 DigitalOcean GPU Droplet
1、创建新项目 – 你需要从后台控制面板创建一个新项目并将其关联到 GPU Droplet。
2、创建 GPU Droplet – 登录你的 DigitalOcean 账户,创建一个新的 GPU Droplet,并选择 AI/ML Ready 作为操作系统。这个操作系统镜像会安装所有必要的 NVIDIA GPU 驱动程序。
3、添加 SSH 密钥进行身份验证 – 需要 SSH 密钥来对 GPU Droplet 进行身份验证,通过添加 SSH 密钥,你可以从终端登录到 GPU Droplet。
4、完成并创建 GPU Droplet – 完成上述所有步骤后,完成并创建新的 GPU Droplet。
二、安装和配置 Open WebUI
Open WebUI 是一个允许用户与语言模型(LLM)互动的 Web 界面。它设计为用户友好、可扩展、自托管,并且可以离线运行。Open WebUI 的界面与 ChatGPT 类似,可以与多种 LLM 运行器配合使用,包括 Ollama 和与 OpenAI 兼容的 API。
有三种方法可以部署 Open WebUI:
- Docker:官方支持并推荐给大多数用户。
- Python:适合资源有限的环境或希望手动设置的用户。
- Kubernetes:适合需要扩展和编排的企业部署。
在本教程中,你将使用 Docker 作为 Docker 容器在支持 Nvidia GPU 的 GPU Droplet 上部署 Open WebUI。
Docker 设置
GPU Droplet 准备就绪并部署完成后,通过终端使用 SSH 登录到 GPU Droplet。
ssh root@<your-droplet-ip>
此 Ubuntu AI/ML Ready H100x1GPU Droplet 预装了 Docker。你可以使用以下命令验证 Docker 版本:
docker --version
它会输出类似的结果:
Docker version 24.0.7, build 24.0.7-0ubuntu2~22.04.1
接下来,运行以下命令以验证并确保 Docker 可以访问你的 GPU:
docker run --rm --gpus all nvidia/cuda:12.2.0-runtime-ubuntu22.04 nvidia-smi
此命令将拉取 nvidia/cuda:12.2.0-runtime-ubuntu22.04
镜像(如果尚未下载或更新现有镜像)并启动容器。
在容器内部,它会运行 nvidia-smi
以确认容器具有 GPU 访问权限并能与底层 GPU 硬件交互。nvidia-smi
执行完毕后,--rm
标志确保容器自动被移除,因为它不再需要。
你应该会看到以下输出:
Unable to find image 'nvidia/cuda:12.2.0-runtime-ubuntu22.04' locally
12.2.0-runtime-ubuntu22.04: Pulling from nvidia/cuda
aece8493d397: Pull complete
9fe5ccccae45: Pull complete
8054e9d6e8d6: Pull complete
bdddd5cb92f6: Pull complete
5324914b4472: Pull complete
9a9dd462fc4c: Pull complete
95eef45e00fa: Pull complete
e2554c2d377e: Pull complete
4640d022dbb8: Pull complete
Digest: sha256:739e0bde7bafdb2ed9057865f53085539f51cbf8bd6bf719f2e114bab321e70e
Status: Downloaded newer image for nvidia/cuda:12.2.0-runtime-ubuntu22.04
==========
== CUDA ==
==========
CUDA Version 12.2.0
Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
Thu Nov 7 19:32:18 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.06 Driver Version: 535.183.06 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+======================+======================|
| 0 NVIDIA H100 80GB HBM3 On | 00000000:00:09.0 Off | 0 |
| N/A 28C P0 70W / 700W | 0MiB / 81559MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| No running processes found |
+---------------------------------------------------------------------------------------+
使用 Docker 和 GPU 支持部署 Open WebUI
请使用以下 Docker 命令来运行 Open WebUI Docker 容器。
docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui --gpus all ghcr.io/open-webui/open-webui:main
上述命令使用 open-webui
镜像运行 Docker 容器,并设置特定的网络端口、卷和 GPU 访问配置。
docker run -d:
docker run
启动一个新的 Docker 容器。-d
以分离模式运行容器,即在后台运行。
-p 3000:8080:
- 将容器内的 8080 端口映射到主机上的 3000 端口。
- 这样你可以通过访问主机上的
http://localhost:3000
来访问容器中的应用程序。
-v open-webui:/app/backend/data:
- 将名为
open-webui
的 Docker 卷挂载到容器内的/app/backend/data
目录。 - 卷用于持久化容器生成或使用的数据,确保即使容器停止或删除,数据仍然可用。
–name open-webui:
- 为容器指定一个特定的名称
open-webui
,便于引用(例如,使用docker stop open-webui
停止容器)。
ghcr.io/open-webui/open-webui:main:
- 指定用于容器的 Docker 镜像。
ghcr.io/open-webui/open-webui
是镜像的名称,托管在 GitHub 的容器注册表(ghcr.io)上。main
是镜像标签,通常代表最新稳定版本或主分支。
–gpus all:
- 此选项为容器启用 GPU 支持,允许其使用主机上所有可用的 GPU。
- 对于利用 GPU 加速的应用程序(如机器学习模型)来说,这至关重要。
验证 Open WebUI Docker 容器是否启动并运行:
docker ps
机器会给出类似的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fbe72466797 ghcr.io/open-webui/open-webui:main "bash start.sh" 5 seconds ago Up 4 seconds (health: starting) 0.0.0.0:3000->8080/tcp, :::3000->8080/tcp open-webui
Open WebUI 容器启动并运行后,你可以通过浏览器访问 http://<your_gpu_droplet_ip>:3000
。
三、添加 OpenAI API 密钥以使用 GPT-4o
在本步骤中,你将添加你的 OpenAI API 密钥到 Open WebUI。
登录到 Open WebUI 仪表板后,你应该注意到没有模型正在运行,如下图所示:
添加 OpenAI API 密钥
1、打开设置:
在 Open WebUI 中,点击左下角的用户图标,然后点击“设置”。
2、前往管理:
导航到“管理”选项卡,然后选择“连接”。
3、添加 OpenAIAPI 密钥:
在 OpenAI API 选项卡下的右侧文本框中添加你的 OpenAI API 密钥。
4、验证连接:
点击“验证连接”。绿色指示灯表示连接成功。
现在,Open WebUI 将自动检测所有可用的 OpenAI 模型。从列表中选择 GPT-4o。
接下来,设置文本转语音和语音转文本模型及音频设置以使用 OpenAI whisper 模型:
再次导航并点击“设置” -> “音频”以配置和保存音频 STT 和 TTS 设置,如上图所示。
你可以在openai 官网文档中了解更多关于 OpenAI 文本转语音和语音转文本的信息。
四、设置音频隧道
如果你是从本地机器流式传输音频到 Droplet,需通过 SSH 隧道路由音频输入。
由于 GPU Droplet 上的 Open WebUI 容器运行在 http://localhost:3000
,你可以在设置此 SSH 隧道后通过导航到本地机器上的 http://localhost:3000
来访问它。
这是为了让 Open WebUI 能够访问本地机器上的麦克风以进行实时音频翻译所必需的。
使用以下命令通过在本地机器上打开新的终端来设置从本地机器到 GPU Droplet 的本地 SSH 隧道:
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5 root@<gpu_droplet_ip> -L 3000:localhost:3000
此命令以 root 用户身份建立与你的 GPU Droplet 的 SSH 连接,并建立本地端口转发隧道。它还包括保持 SSH 会话活动的选项。以下是详细的命令解释:
-o ServerAliveInterval=60:
- 将时间间隔设置为 60 秒,即每 60 秒向远程服务器发送一次 SSH 保持活动消息。
- 这有助于防止 SSH 连接因不活动而超时。
-o ServerAliveCountMax=5:
- 设置允许在 SSH 连接终止之前最多错过 5 条保持活动消息。
- 与
ServerAliveInterval=60
一起,此设置意味着 SSH 会话将在没有响应的情况下保持打开状态 5 分钟(5 × 60 秒)。
-L 3000:localhost:3000:
- 设置本地端口转发。
3000
(冒号前)是你本地机器上的端口,你将通过该端口访问转发的连接。localhost:3000
(冒号后)是指 GPU Droplet 上的目标地址。- 在这种情况下,它将流量从本地机器上的 3000 端口转发到 GPU Droplet 上的 3000 端口。
现在,你可以通过访问本地机器上的 http://localhost:3000
来访问 Open WebUI,并使用麦克风进行实时语音翻译。
小结
通过在 Open WebUI 上使用 OpenAI API 部署实时语音翻译应用,借助 DigitalOcean 的 GPU Droplets,开发者可以创建高性能的翻译系统。DigitalOcean 平台易于设置和监控,能够为可扩展、高效的 AI 应用程序提供资源。同时,DigitalOcean 的 GPU Droplet 定价优于其它GPU 云服务,不仅适合企业使用,也同样适合个人开发者。如需了解更多详情,可联系我们。