GPU ドロップレット上のオープン WebUI を使用した OpenAI API でのリアルタイム音声翻訳
紹介
多言語コミュニケーションの需要が高まる中、リアルタイム音声翻訳が急速に注目を集めています。このチュートリアルでは、OpenAI APIを使用してOpen WebUI上にリアルタイム音声翻訳アプリケーションを展開する方法を学びます。すべてはDigitalOceanの強力なGPUドロップレットにホストされています。
NVIDIA H100 GPUによって駆動されるDigitalOceanのGPU Dropletsは、AIワークロードに対して大きなパフォーマンスを提供し、迅速かつ効率的なリアルタイム音声翻訳に最適です。始めましょう。
前提条件
- DigitalOceanクラウドアカウント。
- GPUドロップレットが展開され、稼働しています。
- OpenAIのモデルにアクセスするためのAPIキーが設定されています。
- SSHと基本的なDockerコマンドに慣れていること。
- GPUドロップレットにログインするためのSSHキー。
ステップ 1 - DigitalOcean GPU ドロップレットの設定
1.新しいプロジェクトを作成する - クラウドコントロールパネルから新しいプロジェクトを作成し、GPUドロップレットに紐付ける必要があります。
2.GPUドロップレットを作成する - DigitalOceanアカウントにログインし、新しいGPUドロップレットを作成し、OSとしてAI/ML Readyを選択します。このOSイメージは、必要なNVIDIA GPUドライバーをすべてインストールします。GPUドロップレットの作成方法については、公式ドキュメントを参照できます。
3.認証のためにSSHキーを追加する - SSHキーはGPUドロップレットとの認証に必要であり、SSHキーを追加することによって、ターミナルからGPUドロップレットにログインできます。
4.GPUドロップレットの最終化と作成 - 上記のすべての手順が完了したら、新しいGPUドロップレットを最終化して作成します。
ステップ2 - Open WebUIのインストールと設定
Open WebUIは、ユーザーが言語モデル(LLM)と対話するためのウェブインターフェースです。ユーザーフレンドリーで、拡張性があり、自己ホスティングが可能で、オフラインでも動作します。Open WebUIは、ChatGPTのインターフェースに似ており、OllamaやOpenAI互換のAPIを含むさまざまなLLMランナーとともに使用できます。
Open WebUIを展開する方法は3つあります:
- Docker: 公式にサポートされており、ほとんどのユーザーに推奨されています。
- Python: リソースが限られた環境や手動セットアップを希望する人に適しています。
- Kubernetes: スケーリングとオーケストレーションが必要な企業展開に最適です。
このチュートリアルでは、Nvidia GPUサポートを使用して、GPUドロップレットでDockerを使用してOpen WebUIをデプロイします。他の技術を使用してOpen WebUIをデプロイする方法については、このOpen WebUIクイックスタートガイドでチェックして学ぶことができます。
Dockerセットアップ
GPUドロップレットが準備されてデプロイされたら、ターミナルからGPUドロップレットにSSH接続してください。
ssh root@<your-droplet-ip>
このUbuntu AI/ML準備済みの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 |
+---------------------------------------------------------------------------------------+
GPUサポートを使用してDockerで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:
- これは、Dockerボリューム名
open-webuiをコンテナ内の/app/backend/dataディレクトリにマウントします。
- これは、Dockerボリューム名
- ボリュームは、コンテナによって生成または使用されるデータを保持するために使用され、コンテナが停止または削除されてもデータが利用可能な状態を維持します。
-
–名前オープンウェブUI:
- コンテナに特定の名前
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にアクセスしてください。
ステップ3 - Open WebUIでGPT-4oを使用するためにOpenAI APIキーを追加します
このステップでは、OpenAI APIキーをOpen WebUIに追加します。
Open WebUIダッシュボードにログインすると、以下の画像のように実行中のモデルがないことに気づくはずです:
Open WebUIをOpenAIに接続し、利用可能なすべてのOpenAIモデルを使用するには、以下の手順に従ってください:
設定を開く:
- Open WebUIで、左下のユーザーアイコンをクリックし、次に設定をクリックします。
管理者に行く:
- 管理タブに移動し、次に接続を選択してください。
OpenAI APIキーを追加します:
- 「OpenAI API」タブの右側のテキストボックスにあなたのOpenAI APIキーを追加してください。
接続を確認:
- 接続を確認をクリックします。緑のランプが成功した接続を確認します。
次に、Open WebUI は利用可能なすべての OpenAI モデルを自動的に検出します。リストから GPT-4o を選択してください。
次に、OpenAIのwhisperモデルを使用するために、テキスト読み上げおよび音声認識モデルとオーディオ設定を設定します:
もう一度、設定 -> オーディオをクリックして、上記のスクリーンショットに示されているように、音声のSTTおよびTTS設定を構成し、保存します。
OpenAIのテキスト音声変換と音声テキスト変換についてはこちらで詳しく読むことができます。
ステップ4 - オーディオトンネリングの設定
ローカルマシンからDropletにオーディオをストリーミングしている場合は、オーディオ入力をSSHトンネル経由でルーティングしてください。
GPUドロップレットにはOpen WebUIコンテナがhttp://localhost:3000で実行されているため、このSSHトンネルを設定した後、ローカルマシンでhttp://localhost:3000に移動することでアクセスできます。
これは、オープンWebUIがあなたのローカルマシン上のマイクにアクセスし、リアルタイムの音声翻訳やリアルタイムの言語処理を行うために必要です。これがないと、ヘッドフォンまたはマイクのアイコンをクリックして自然言語処理タスクにGPT-4oを使用しようとすると、以下のエラーが表示されます。
以下のコマンドを使用して、ローカルマシンからGPUドロップレットへのローカルSSHトンネルを設定するために、ローカルマシンで新しいターミナルを開いてください:
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=5 root@<gpu_droplet_ip> -L 3000:localhost:3000
このコマンドは、ルートユーザーとしてあなたのGPU DropletにSSH接続を確立し、ローカルポートフォワーディングトンネルを確立します。また、SSHセッションを維持するオプションも含まれています。以下に詳細を説明します:
-o ServerAliveInterval=60:
- このオプションは
ServerAliveIntervalを60秒に設定します。つまり、60秒ごとにSSHのキープアライブメッセージがリモートサーバーに送信されます。
- このオプションは
- これにより、SSH接続が無活動のためにタイムアウトするのを防ぐことができます。
-o ServerAliveCountMax=5:
- このオプションは
ServerAliveCountMaxを5に設定し、SSH接続が切断される前に最大5つのキープアライブメッセージを見逃すことを許可します。
- このオプションは
ServerAliveInterval=60と一緒に、この設定はサーバーからの応答がない場合、SSHセッションが5分間(5 × 60秒)オープンのままで、その後閉じることを意味します。-L 3000:localhost:3000:
- この部分はローカルポートフォワーディングを設定します。
3000(コロンの前)は、あなたのマシン上のローカルポートで、転送された接続にアクセスする場所です。localhost:3000(コロンの後)はGPU Droplet上の宛先を指します。- この場合、ローカルマシンのポート3000からGPUドロップレットのポート3000にトラフィックを転送します。
さて、このコマンドを使用すると、ローカルマシンでhttp://localhost:3000にアクセスしてOpen WebUIを利用することができ、さらにリアルタイム音声翻訳のためにマイクを使用することもできます。
ステップ5 - GPT-4oを使ったリアルタイム翻訳の実装
ヘッドフォンまたはマイクのアイコンをクリックして、自然言語処理タスクにwhisperやGPT-4oモデルを使用してください。
ヘッドフォン/通話ボタンをクリックすると、OpenAIのGPT-4oおよびwhisperモデルを使用して、リアルタイムの音声処理と翻訳のために音声アシスタントが開きます。
GPT-4o音声アシスタントと話すことで、音声をリアルタイムで翻訳し、文字起こしするために使用できます。
結論
OpenAI APIを使用してOpen WebUI上でリアルタイムオーディオ翻訳を展開することは、開発者が高性能翻訳システムを作成することを可能にします。簡単なセットアップと監視により、DigitalOceanのプラットフォームはスケーラブルで効率的なAIアプリケーションのためのリソースを提供します。











