以前紹介した GPUSOROBAN ですが、コンテナを払い出すサービスとして紹介をしました。
それ故に通常のVMではできることができないポイントなんかあったりします。例えば systemctl が使えません。これを使うためにホスト側でいじる内容は記述がなされているのですが、ホスト側の設定をいじることはGPUSOROBANの環境では無理なため、これに代わる代物を用意する必要があります。
で、登場するのがsupervisorというサービスです。
supervisorというプログラムのインストール
supervisorはUbuntuのリポジトリに収録されており、systemctl的な利用を考えるならこっちを使ったほうがよいでしょう。
$ sudo apt-get install -y supervisorsupervisor 4.2.5-1ubuntu0.1 がインストールされます。
supervisorの設定
/etc/supervisor/conf.d 配下にサービスファイルを services.conf として作ってみました。
[supervisord]
nodaemon=true
[program:gemma-4-E4B]
command=/opt/llama/bin/llama-server --model /opt/llama/models/gemma-4-E4B-it-UD-Q4_K_XL.gguf --mmproj /opt/llama/models/mmproj-BF16.gguf --temp 1.0 --top-p 0.95 --top-k 64 --port 8001 --chaat-template-kwargs '{"enable_thinking":true}'
autostart=true
autorestart=true
stderr_logfile=/var/log/stderr_gemma-4-E4B.log
stdout_logfile=/var/log/stdout_gemma-4-E4B.log
上記は、Gemma-4-E4BのUnsloth版4.5bit量子化モデルをllama.cppで起動する場合の設定になります。
systemctlと同様にログファイルを別途設定し、そこにエラー出力・標準出力を吐き出すことが可能です。
supervisordの起動
この状態から以下コマンドを実行することで、supervisordが動くようになります。 nodaemon パラメータをTrueに設定しているため、フォアグラウンドとして動作します。当然これを止めるとsupervisordは停止してしまうので、このコンソールセッションはそのままとどめおくことが必要になります。
/usr/bin/supervisord -n登録したサービスの起動
例えば、以下のようにすると、私の環境の場合Gemma-4のllama.cppエンジンが動くことになります。
supervisorctl start gemma-4-E4B同様にstop,statusなども使えるようになります。AutoStartも可能なので、以下のようなショートカットを置けば接続即サービス起動といったようなことも可能になります。
なお、親元のsupervisordが落ちた場合はどうなるか?というと、そのままこれが動かしたデーモンはそのまま動作を継続していました。
C:\Windows\System32\OpenSSH\ssh.exe -L 20022:localhost:22 user@10.xxx.yyy.zzz -p nn -i .ssh/mykey.txt -o ProxyCommand="ssh -W %h:%p asusernnnn@g2.as-highreso.com -p nnnnn -i .ssh/ackey.txt" sudo /usr/bin/supervisord -nで、その後Teratermでlocalhost:20022 へ接続すればTeratermでもアクセスできるという感じになります。
というわけで
このあたりがうまく連携取れれば、もう少しホストっぽく触れるようになる・・・・・かも?というところですが、やっぱり起動停止の制御が難しいと何ともかんとも・・という感じではありますね(;´・ω・)
とは言え、コンテナ払い出しタイプのサービスでもこのようにそれっぽく扱えるということで参考になれば幸いです。
ただ、現実面で考えてみるに、これをそのまま使って複合サービスを実行させるのは少し無理があるかもしれません。その場合は、やはり別のVMサービスと連携させて動かすなり、工夫が必要になってくるかなーという気がします。


コメント