ソフトウェア/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 マシンにインストールした。

ダウンロード&インストール

https://ollama.com/download

環境変数

Ollama は起動時に環境変数を参照して動作する。

https://qiita.com/kiyotaman/items/1aeb098b5ff0d6d5e641

環境変数名デフォルト値説明
OLLAMA_FLASH_ATTENTION0intフラッシュアテンション有効化により高速化
OLLAMA_HOST127.0.0.1:11434stringOllamaサーバーのIPアドレス
OLLAMA_KEEP_ALIVE"5m"stringモデルがメモリに保持される期間 (-1は永続)
OLLAMA_LLM_LIBRARYなしstring自動検出しないで、指定した特定のLLMライブラリを使用する場合にその名前を設定
OLLAMA_MAX_LOADED_MODELS1intロードされるモデルの最大数
OLLAMA_NUM_PARALLEL1int並行リクエストの最大数
OLLAMA_ORIGINSlocalhost,
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://(サーバーFQDN)/ollama/(秘密の文字列)/

において Ollama サービスを公開可能となる。

ProxyPass や ProxyPassReverse のパス名の最後に '/' がついていないとうまく行かないので注意。

パスワードなどは設定されていないため "(秘密の文字列)" がばれると誰からでもつなぎ放題になってしまうのだけれど、ここに十分長いランダム文字列を持って来ることでそれが実質的なパスワードとして働くことになる。

VPN で繋ぐ

VPN で接続すればサービスをインターネットへ公開する必要がなくなる。

WireGuard について調べよう。

コメント&質問





Counter: 476 (from 2010/06/03), today: 6, yesterday: 6