🤖

difyをすべてローカルで動かす手順の話2

2024/11/25に公開

difyとは

なんかAIアプリがRAGでフロー形式でなんやからのツールっぽいです。
(まだいろいろ触っている最中)

difyで検索しても、抽象的に「どんなことに使える」っぽい記事が多くて操作感に慣れるのにいっぱいいっぱいです。
自分のように頭の良くない人間には理解するのが大変なんです。
AI関連のこと。

「2」のわけ

タイトルに「2」とついているように、前回もdifyをローカルで動かす関連を書きました。
その後いろいろ調べていくうちに、分かったことがあります。

  • docker composeファイルは自動引き継ぎ設定上書きファイルが作れる
  • ローカルLLMツールollamaは複数のモデルが読み込める
  • ollamaは複数GPUをサポートしている
  • ollamaで読み込める日本語モデルがある

…知ってる方からしたら当然の話だったりするわけですが。

docker composeファイルの上書き

ファイル名と拡張子の間に .override と入ったファイルを作って記述をすると、設定の上書きができるようです。
前回は知らなかったので、元ファイルの差分を記載したわけですが…。

ollamaは複数のモデルが読み込める

環境変数 OLLAMA_MAX_LOADED_MODELS という設定を行うと、複数のモデルが読み込めるようです。
読み込める個数を設定します。

ollamaは複数GPUをサポートしている

環境変数 OLLAMA_CUDA_VISIBLE_DEVICES の設定を行うと、複数のGPUが使えるようです。
nvidia-smi で表示されるIDをコンマで区切って複数記述したものを設定します。

ollamaで読み込める日本語モデル

以下のモデルが日本語で読み込めるようです。

設定のしかた

docker composeファイル

実際のファイル内容は以下になります。
dify/dockerディレクトリに下記の内容・ファイル名でファイルを作成します。

docker-compose.override.yaml
services:
  api:
    depends_on:
      - ollama

  worker:
    depends_on:
      - ollama

  ollama:
    image: ollama/ollama
    container_name: ollama
    restart: always
    environment:
      CUDA_VISIBLE_DEVICES: ${OLLAMA_CUDA_VISIBLE_DEVICES:-0}
      OLLAMA_MAX_LOADED_MODELS: ${OLLAMA_MAX_LOADED_MODELS:-1}
      OLLAMA_NUM_PARALLEL: ${OLLAMA_NUM_PARALLEL:-1}
      OLLAMA_KEEP_ALIVE: ${OLLAMA_KEEP_ALIVE:-5m}
    ports:
      - ${OLLAMA_PORT:-11434}:11434
    volumes:
      - ./volumes/ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]
              device_ids: [all]
    networks:
      - ssrf_proxy_network
      - default

環境変数

環境変数は、同ディレクトリ内にある .env.sample ファイルを複製して、 .env というファイルを作ります。
そして、下記をファイルの末尾に追記します。

.env
OLLAMA_CUDA_VISIBLE_DEVICES=0,1
OLLAMA_MAX_LOADED_MODELS=4
OLLAMA_NUM_PARALLEL=2
OLLAMA_KEEP_ALIVE=-1

以上です

ちょっと設定が前回よりスマートになりましたか。
あー、 yaml内の device_idsOLLAMA_CUDA_VISIBLE_DEVICES にしたらもっとスマートになりますかねー…。

Discussion