皆さんはGPUSOROBANというサービスをご存じだろうか。
3年ぐらい前に、格安のGPUサービスってないものか・・・と探してみた当時から、格安GPUサービスとして提供が行われていたが、確かに格安だったのは覚えている。ただ、当時の用途が3Dツールのレンダリング先であったため、そのころのツールを連携させるには金額的にも合わず、やっぱ高嶺の花なんだなとあきらめたサービスでありました。
が、今見てみるとびっくりするほどGPUインスタンスが安く見える、それは当時からGPUの利用用途が変化してきたからなのでしょう、きっとそうでしょう。

これを運営しているハイレゾという会社は、現在いろんな使われなくなった建築物を使ってデータセンタ化するということを行っており、最近のトレンドは廃校らしい。現在4つ目のデータセンタを建造したところで、3つ目から4つ目のデータセンタ化させたのは何と体育館。そしてその中で見ることができるスローガンが超面白い。

私自身、前職で研究職についてやっていこうと心に決めたとき、これがあったことを思い出した。そうなんだよ、面白いからやるんだよ。一線退いてもAIに関わろうとする理由ってただ一つ、これなんだよね。
というわけでこのサービスを登録してみることにした。サービス登録手順は以下のURLに記述があり、それに従えばおおむね加入できるので本記事での説明は割愛する。
会員登録~インスタンス接続手順 | GPUSOROBAN | 業界最安級GPUクラウド | GPUSOROBAN
高速インスタンスとは
高速インスタンスとは、GPUを接続した状態のコンテナを払い出すサービスで、ちょっとしたIaaS-VMに似てる。違いがあるとすれば、この手のサービスはVMで払い出すことが多いのだが、このサービスではコンテナが払い出される点である。それゆえに、コンテナを使用するようなセルフホストサービスを構成することはできない。

ただ、ぶっちゃけllama.cppの動作は確認できたし、Pythonは仮想環境単位での構成は組めるし、これといって通常ホストとの違いと言えば、Docker/Podman環境が組めない以外は特に問題とするところもない。
通常、コンテナ構成の場合、どこが揮発エリアなのか、どこが不揮発エリアなのかというところが気になるんだけど、/以下全域をPersistentVolumeとして組んでるようで、差分はOSミニマムインストールした後の状態すべてになるようで、揮発領域がどこかを気にする必要はほぼないようだ。
SSHの接続だけが少々ややこしい
セキュリティ保持のためだろうけど、面倒なポイントは一つだけある。「SSH接続」だ。
接続方法は、以下の図に示すようなポートフォワードによる接続である。

まず、最初にアクセスサーバという踏み台サーバにつなぎ、そこの経路をプロキシとして、最終接続先であるコンテナインスタンスに接続するという構図をとっている。接続プロトコルにはSSHを使用し、それ自体は特別な接続ではない。ただ、以下のポイントが重なったがゆえに、接続が少々めんどくさい。
- アクセスサーバと接続先インスタンスとで異なる鍵を使用する
- アクセスサーバはデフォルト名 ackey.txt を使用する
- 接続先インスタンスはデフォルト名 mykey.txt を使用する
- アクセスサーバにはログインシェルが恐らく /bin/nologin になっている
実は現在出回ってるTeraterm5.xには、上記の対応ができてない。そのため、少々めんどくさい道をたどることになるので気を付けたほうが良い。実はこういう風な接続が必要だったりする。純粋なsshコマンドであればWindowsの場合、以下の通り指定することで接続できる。
ssh user@10.xxx.yyy.93 -p ddd -i .ssh/mykey.txt \
-o ProxyCommand="ssh -W %h:%p asuseraaaa@bb.as-highreso.com -p ccccc -i .ssh/ackey.txt"Windowsコンソールを開き、上記のコマンドを実行すると、ログインしてプロンプト表示を確認することができる。そのコマンドの対応関係は下図の通りである。

ポートフォワードしたい場合、例えば、コンテナの8001番ポートをローカルの8001番ポートにしたい場合は
ssh -L 8001:localhost:8001 user@10.xxx.yyy.93 -p dd -i .ssh/mykey.txt \
-o ProxyCommand="ssh -W %h:%p asuseraaaa@bb.as-highreso.com -p ccccc -i .ssh/ackey.txt"私はTeratermを使いたいので、これと別に以下のようなショートカットを作成して実行させるようにしている。Teratermマクロを使おうともしてみたのだが、どうにも私はあれとは仲良くなれそうな気がしない。
C:\Windows\System32\OpenSSH\ssh.exe -L 20022:localhost:22 user@10.xxx.yyy.93 -p zz -i .ssh/mykey.txt \
-o ProxyCommand="ssh -W %h:%p asuseraaaa@bb.as-highreso.com -p cccc -i .ssh/ackey.txt"ワークディレクトリは私のプロファイルディレクトリを指定し、その条件下で実行すると、まずSSH接続が成立し、ローカルホストの20022番ポートにインスタンスのSSHポートがバインドされた状態になる。
その後でTeraterm上で localhost:20022 を指定することにより、シェルアクセスが可能になるので、あとは必要に応じてポートフォワードなどを仕掛けるなりしてアクセスが可能な状態に持っていく流れである。上記コマンドをショートカットにすることで、そのセッション接続をダブルクリックで済ませてしまえばあとはローカル接続で接続可能になるわけで。
マニュアルだとどうにもわかりづらかったので本記事に備忘録として書いた、そんな感じで。
このあたりのポート設定を変えることで、例えばllama.cppを裏口的に通したりしながら、difyでローカルモデルを動かしたりすることも可能になる。通信路もセキュアな暗号化状態となり、安全性が担保される。
異なる鍵を使っての接続や、ログインシェルをあえて外してるそのやり方は今できることで最大限のセキュア環境を実現しようとした結果なんだと思う。いろいろしっかり作りこまれてるんだなぁというのが印象として残った。


コメント