ソフトウェア/Ollama の履歴(No.2)
更新Ollama とは†
Ollama はオープンソースの LLM マネージャ&サーバー
LLM (Large Language Models) モデルを管理し、API を通じてサービスを提供できる。
LAN 内の Ollama サービスをインターネット上から利用可能にする†
Ollama は LLM モデルのダウンロード&管理&ロード&問い合わせなどを行うための API を提供する。
これを LAN 内だけでなく任意の場所から利用できるようにしたく、 apache2 の proxy を通じてインターネット上へ公開する。
- Windows10 上に Ollama
- Debian 上に apache2
の構成になる。
Ollama サービスを LAN 内に公開する†
グラフィックカードを利用したかったので Windows マシンにインストールした。
ダウンロード&インストール†
環境変数†
Ollama は起動時に環境変数を参照して動作する。
https://qiita.com/kiyotaman/items/1aeb098b5ff0d6d5e641
環境変数名 | デフォルト値 | 型 | 説明 |
OLLAMA_FLASH_ATTENTION | 0 | int | フラッシュアテンション有効化により高速化 |
OLLAMA_HOST | 127.0.0.1:11434 | string | OllamaサーバーのIPアドレス |
OLLAMA_KEEP_ALIVE | "5m" | string | モデルがメモリに保持される期間 (-1は永続) |
OLLAMA_LLM_LIBRARY | なし | string | 自動検出しないで、指定した特定のLLMライブラリを使用する場合にその名前を設定 |
OLLAMA_MAX_LOADED_MODELS | 1 | int | ロードされるモデルの最大数 |
OLLAMA_NUM_PARALLEL | 1 | int | 並行リクエストの最大数 |
OLLAMA_ORIGINS | localhost, 127.0.0.1, 0.0.0.0, | string | 許可されるオリジンのカンマ区切りリスト |
同一マシンではない LAN 内の機器から接続できるようにするには、
- OLLAMA_HOST=192.168.0.xxx:11434
- OLLAMA_ORIGINS=localhost,192.168.0.*
のように、ホストアドレスを LAN 内での Ollama サーバーとなる Windows マシンの IP アドレス 192.168.0.xxx にし、接続元として許可する LAN アドレスに 192.168.0.* を含める。
(Ollama を動かす Windows マシンの IP アドレスは固定しておく)
ポート番号は Ollama → OllAmA → 011434 の類推で 11434 がデフォルトになっているそうで、今回はそのまま利用する。
あとはチューニングとして、例えば
- OLLAMA_FLASH_ATTENTION=1
- OLLAMA_KEEP_ALIVE=10m
などとしておくのが良さそう。
起動スクリプト†
環境変数を設定した上で Ollama を起動するため、
ollama-server.bat
set OLLAMA_HOST=192.168.0.xxx:11434 set OLLAMA_ORIGINS=localhost,192.168.0.* set OLLAMA_FLASH_ATTENTION=1 set OLLAMA_KEEP_ALIVE=10m C:\Users\(ユーザー名)\AppData\Local\Programs\Ollama\ollama app.exe
などというバッチファイルを用意して、ここからサーバーを起動する。
apache2 の proxy 設定†
LAN 外から apache2 へのアクセスを、
LAN 内の Ollama サービスへ繋ぐための proxy を設定する。
前提として、apache2 はすでに https でサービスを提供可能なよう設定されているものとする。
/etc/apache2/sites-enabled/default-ssl.conf に以下を追加する
<IfModule mod_ssl.c> NameVirtualHost *:443 <VirtualHost _default_:443> <IfModule mod_proxy.c> ProxyRequests Off <Proxy *> Require all granted </Proxy> AllowEncodedSlashes NoDecode RequestHeader set X_FORWARDED_PROTO 'https' ProxyPass /ollama/(秘密の文字列)/ http://192.168.0.xxx:11434/ nocanon ProxyPassReverse /ollama/(秘密の文字列)/ http://192.168.0.xxx:11434/ </IfModule> </VirtualHost> </IfModule>
参考:
- https://yomon.hatenablog.com/entry/2017/10/20/222331 (AllowEncodedSlashes, nocanon)
- https://e-words.jp/w/X-Forwarded-Proto.html (X_FORWARDED_PROTO)
これで、
https://(サーバーFQDN)/ollama/(秘密の文字列)/
において Ollama サービスを公開可能となる。
ProxyPass や ProxyPassReverse のパス名の最後に '/' がついていないとうまく行かないので注意。
パスワードなどは設定されていないため "(秘密の文字列)" がばれると誰からでもつなぎ放題になってしまうのだけれど、ここに十分長いランダム文字列を持って来ることでそれが実質的なパスワードとして働くことになる。
VPN で繋ぐ†
VPN で接続すればサービスをインターネットへ公開する必要がなくなる。
WireGuard について調べよう。