AivisSpeech-engineをGPUクラウドで立ち上げてみた(1)
前回、AivisSpeech-engineをVPS(CPUサーバ)で立ち上げてみましたが、Chatbotには少し応答速度が足りず、GPUクラウドを試してみることにしました。
国内にも格安のGPUクラウドがありますが、コンテナ内で稼働しているようで、APIサーバとして使えるものは見つからず、RunPodを試してみることとしました。
他にも色々なサービスがあるかもしれませんが、現時点ではRunPod の情報が一番多かったように思います。
Runpod

RunPod公式サイト https://www.runpod.io/
利用形態としては、Podと、Serverlessとの2つがあります。既存のDocker Imageを動かすのであればServerlessが簡単かもしれません。今回は、Podを使っています。
Pod
Podデプロイ時には、まず、ネットワーク環境、GPUの性能などを選択します。今回は、格安で、かつ、グローバルIPが設定されるように選択しました。

次に、テンプレートを選択します。 今回は、後述するサイトを参考に以下を選択します。

ここで、Edit テンプレートでContainer Diskと、Volume Diskとを少し減らしておきます。少しケチくさく感じますが、Disk容量に応じてコストも変化します。
特に、Volume Diskは、永続的なDiskで、Pod停止中にも費用がかかりますので、ギリギリまで減らしておきます。ちなみにここで編集可能な項目は、Podを停止ー再起動するときに書き換え可能なので、後ほど調整することも可能です。
VS Code
AivisSpeech-engineをインストールする前に、開発環境を整えておきたいと思います。
VS-Codeを使える環境については、以下のサイトを順番に実行していきます。
https://docs.runpod.io/pods/configuration/use-ssh
https://docs.runpod.io/tutorials/pods/connect-to-vscode#configuring-vscode-for-remote-development
VS Codeに接続する方法として、これ以外にも、VS-CODEのコンテナテンプレートを使う方法やTunnelを使う方法などがブログで見つかりましたが、公式の方法が一番わかり良いかと思います。
1 Use SSH
SSH接続が利用できるように、まず、ローカル マシン上で公開/秘密 SSH キー ペアを生成します。
ssh-keygen -t ed25519 -C "your_email@example.com"
公開キーは、RunPodのダッシュボードから、「Settings」「SSH PublicKeys」に設定します。

次に、以下のコマンドをPodで実行します。
bash -c 'apt update;DEBIAN_FRONTEND=noninteractive apt-get install openssh-server -y;mkdir -p ~/.ssh;cd $_;chmod 700 ~/.ssh;echo "$PUBLIC_KEY" >> authorized_keys;chmod 700 authorized_keys;service ssh start;sleep infinity'
これは、毎回起動時に実行しますので、EditPodの Container Start Commandに設定しておくと良いとのことです。

これで、ターミナルからSSH接続ができることを確認します。接続コマンドは、以下の「SSH」から確認できます。

後のVS-Codeへの接続に使いますので、 「SSH over exposed TCP」はコピーしておきます。
2. How To Connect to a Pod Instance through VSCode
SSH接続が確認できたら、VS-Codeに接続します。
拡張機能のDev Container 拡張機能をインストールします。(私は普段使っているRemote Explolerをそのまま使いました)
コマンドパレット(CTRL+SHIFT+P
)を開き、 「Remote-SSH: Add New SSH Host」を選択して、先ほどの画面でコピーした内容をペーストします。
.ssh/config ファイルが書き換えられますので、内容を確認して保存しておきます。
拡張機能から、ホストに接続を選択して、新しいホストに接続が可能となります。
Podを再起動した時は、ポートが変わりますので、.ssh/configのポートのみ変更することが必要です。
AivisSpeech-engine
AivisSpeech-engineの基本のインストール
AivisSpeech-engineの立ち上げについては、うえぞう様の以下の記事が大変参考になります。

https://note.com/uezo/n/nfe7a8fe241f4
最初に以下のコマンドで、起動用のシェルをworkspace以下に書き込みます。workspaceは永続的なDiskなので、pod停止後も保存されています。
git clone https://gist.github.com/45dc2c524d1a3d8f238121210d615cce.git /workspace/aivisspeech
一旦、Podを修了して、Container start Commandを以下に書き換えます。
bash /workspace/aivisspeech/aivisspeech_runpod_quickstart.sh
これは、先ほどworkspaceに保存したシェルを起動しています。
このシェルでは、Aivis-Speechのインストールと起動するコマンドが書かれています。ダウンロードは、1回目の実行時にworkspaceにされて解凍されていますので、2回目以降は実行するだけになっています。
詳細は、シェルの中身を確認してください。https://gist.github.com/45dc2c524d1a3d8f238121210d615cce.git
起動シェルの書き換え
上記のシェルを動かすと、先ほどのsshdのシェルがなくなりますので、このままではssh接続できなくなっています。
そこで、Web Terminalを立ち上げ、/workspace/aivisspeech/aivisspeech_runpod_quickstart.shの先頭に、先ほどのコマンドを加えます。
Web Terminalは、Connectionの中から立ち上げます。
エディタがないので、インストールします。
atp install vim
エディタで/workspace/aivisspeech/aivisspeech_runpod_quickstart.shを開いて、先頭にコマンドを追加するのですが、その際”sleep infinity”は削除しておきます。
bash -c 'apt update;DEBIAN_FRONTEND=noninteractive apt-get install openssh-server -y;mkdir -p ~/.ssh;cd $_;chmod 700 ~/.ssh;echo "$PUBLIC_KEY" >> authorized_keys;chmod 700 authorized_keys;service ssh start;'
以上で、GPUサーバでのAivis-Speechの立ち上げと、VS-Code環境の設定は完了です。

Connection OptionsのHTTP Serviceを開くと、以下のような設定画面が表示されます。

URLの最後に ”/speakers”を追加すると、話者一覧が表示されます。
