この文書の目的
想定する読者
この文書は次のような人向けのメモです。
- 手持ちのパソコンにLinuxをインストールして、生成AIを試してみようと思っている人。
- 生成AIサービスはどけだけ課金されるかわからないので、手持ちのLinuxマシンにollamaを入れてみた人。
- Linuxはインストールして使ってみているぐらいで、初心者。
私はネットワークにはあまり興味が無く誤り・誤解があるかも知りません。間違いがあれば教えて頂けると幸いです。
何を解決するか
Linuxマシンにollamaとdiffyを入れてみたけど、difyにollamaを登録できない問題を解決するヒントです。
ollamaの動作環境など
OSなどの概略
今回は次のようなマシンです。
- Dell Precision 3420らしいワークステーション(Xeonに主記憶40ギガバイト、Quadro P400)
- OSはkubutnu 22.04LTS(最新パッチまで適用)
要するにサブマシンで生成AI実験機を組み立てたわけですね。
このマシンは自宅内LANに接続され、インターネットとは隔離されています。
ollamaのどのようにインストールしたか
公式サイトの手順どおりにインストールしています。
次のコマンドでインストールですね。
curl -fsSL https://ollama.com/install.sh | sh
インストールしたらコマンドプロンプトで動作確認します。
最初はphi4など準備されているLLMを動かして動作することを確認したほうがよいです。
私はphi4を動かした後、chromiumでhttp://localhost:11434
にアクセスしOllama is running
と表示されネットワーク経由で通信できることを確認しました(これが落とし穴)。
difyのインストール
こちらは事前にdockerとdosker-composeをパッケージからインストールしてから、公式サイトの手順どおりにインストールしています。
git clone https://github.com/langgenius/dify.git --branch 0.15.3
次にマニュアルに従いローカルマシンにWebブラウザでアクセスし、インストールプログラムを実行すると難なくdifyが動きます。
ollamaが登録できない
さて、ここまで来たらdifyでチャットポットを作ろうか、と設定からモデルプロバイダーをクリックし、マニュアルを参考にモデルプロバイダーのアドレス(次の図の赤枠にdockerから見えるネットワークなど)を指定したのですが、どうしてもサービスが見つからず登録ボタンが有効にならないのでした。
チェックポイントと対策
IPアドレスとポート番号を指定してアクセスできているので、最初、ファイアーウォールを疑いました。
kubuntuはufwがインストールされていますが、状態を確認すると、そもそもファイアーウォールが有効になっていない。
何か他のセキュリティソフトで通信が遮断されている可能性も疑い、30分ほどネットワーク関係の設定を確認したのですが・・。
ふと、ollama自体が外部からの接続を待っているのか、と思い調べたところlocalhostからの通信のみ待っている状態でした。
ollamaの設定変更
設定ファイルは/etc/systemd/system/ollama.service
です。
こちらの記事(ollamaセットアップのメモランダム)
を参考に次のように通信を行うネットワークを指定します。
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=192.168.*,172.*"
サービスを再起動するか、システムを再起動すると無事にollamaのサービスが見えるようになり追加できるようになります。
ollamaのFAQでは以下の部分に記述されています。
Ollama binds 127.0.0.1 port 11434 by default.
Change the bind address with the OLLAMA_HOST environment variable.
Refer to the section above for how to set environment variables on your platform.
意味としてはOLLAMA_HOSTで「全てのネットワークインターフェースからのアクセスを受け付ける」、OLLAMA_ORIGINSでアクセスするネットワークを制限するという意味のようです。ちなみに自宅LNAは192.168.*はクラスCのネットワークとして構成しているため、172.*はdockerのために指定しています。
原因
同じマシン上にあっても、直接インストールしたプログラムとdocker環境にあるdifyは環境が分けられるため、異なるマシンのようになります。
このためLinuxマシンの環境からlocalhostでアクセスできても、docker環境からは別のマシンとして指定する必要があるのでした。
まとめ
これでdocker環境上のdifyからollamaにアクセスできるようになりました。
さらに同じネットワーク上のマシンからもアクセスできます。
サーバー構築のためのネットワーク構成の知識が必要だと思い知りました。