Open13
ローカルLLM Ollama をUbuntuで動かす

とりあえず何を使ってローカルLLM環境を作るか
- 候補
- Ollama
- LM Studio
- Llama.cpp
- GPT4All
- text-generation-webui
今回はOllamaを選択
メジャー・情報多そう
Ubuntu(GUIなし)で起動したい
できればDockerで起動したい
n8nから連携しようとしたときにノードが用意されている
あたりの理由
WindowsでUIベースで使うならLM Studio
Web UIで操作するならtext-generation-webuiという選択肢もある

OllamaはDockerで起動するようなのでしてみる
CPU Onlyで起動
docker composeで起動できるようにする
version: '3.8'
services:
ollama:
image: ollama/ollama
container_name: ollama
ports:
- "11434:11434"
volumes:
- ./ollama_data:/root/.ollama
restart: always

使用可能なモデルは以下で見れる
llama3がCPUだけで動きそうで一般的、日本語も大丈夫そう
$ docker compose exec -it ollama ollama run llama3
WARN[0000] /home/kohei/Git/ollama_docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
pulling manifest
pulling 6a0746a1ec1a: 100% ▕██████████████████████▏ 4.7 GB
pulling 4fa551d4f938: 100% ▕██████████████████████▏ 12 KB
pulling 8ab4849b038c: 100% ▕██████████████████████▏ 254 B
pulling 577073ffcc6c: 100% ▕██████████████████████▏ 110 B
pulling 3f8eb4da87fa: 100% ▕██████████████████████▏ 485 B
verifying sha256 digest
writing manifest
success
>>> こんにちは
こんにちは!😊 How are you today?
実行すると4.7GBのモデルをダウンロードが始まり、終わると対話ができるようになる

とりあえずAPIなら以下で回答を受け取れる
curl http://localhost:11434/api/generate -d '{
"model": "llama3",
"prompt": "猫について教えてください。",
"stream": false
}'

Slack + n8n + OllamaでChatGPT風に動くようにしてみる
Slackのbot設定は以下を参考

とりあえずLibreChatから使えるようにしてみる

リポジトリをcloneしてもよいが、docker-compose.ymlと.env.exampleから作った.envで起動できそう

起動したらブラウザからアクセス
適当なユーザーを作ってアクセス

Ollamaを使えるように設定
を参考に
librechat.yamlとdocker-compose.ymlを修正して起動しなおし

以下のlibrechat.yaml
でOllamaが使えるようになった
version: 1.2.1
endpoints:
custom:
- name: "Ollama"
apiKey: "ollama"
baseURL: "http://<ホストIP>:11434/v1/"
models:
default: [
"llama3"
]
fetch: false # fetching list of models is not supported
titleConvo: true
titleModel: "current_model"
summarize: false
summaryModel: "current_model"
forcePrompt: false
modelDisplayLabel: "Ollama"
addParams:
"stop": [
"<|start_header_id|>",
"<|end_header_id|>",
"<|eot_id|>",
"<|reserved_special_token"
]
を参考に llama3の使用に注釈から上記addParamsの設定を入れている

LibreChatはdocker composeで起動している
# Do not edit this file directly. Use a ‘docker-compose.override.yaml’ file if you can.
# Refer to `docker-compose.override.yaml.example’ for some sample configurations.
services:
api:
container_name: LibreChat
ports:
- "${PORT}:${PORT}"
depends_on:
- mongodb
- rag_api
image: ghcr.io/danny-avila/librechat-dev:latest
restart: always
user: "${UID}:${GID}"
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
- HOST=0.0.0.0
- MONGO_URI=mongodb://mongodb:27017/LibreChat
- MEILI_HOST=http://meilisearch:7700
- RAG_PORT=${RAG_PORT:-8000}
- RAG_API_URL=http://rag_api:${RAG_PORT:-8000}
volumes:
- type: bind
source: ./librechat.yaml
target: /app/librechat.yaml
- type: bind
source: ./.env
target: /app/.env
- ./images:/app/client/public/images
- ./uploads:/app/uploads
- ./logs:/app/api/logs
mongodb:
container_name: chat-mongodb
image: mongo
restart: always
user: "${UID}:${GID}"
volumes:
- ./data-node:/data/db
command: mongod --noauth
meilisearch:
container_name: chat-meilisearch
image: getmeili/meilisearch:v1.12.3
restart: always
user: "${UID}:${GID}"
environment:
- MEILI_HOST=http://meilisearch:7700
- MEILI_NO_ANALYTICS=true
- MEILI_MASTER_KEY=${MEILI_MASTER_KEY}
volumes:
- ./meili_data_v1.12:/meili_data
vectordb:
container_name: vectordb
image: ankane/pgvector:latest
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
restart: always
volumes:
- pgdata2:/var/lib/postgresql/data
rag_api:
container_name: rag_api
image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest
environment:
- DB_HOST=vectordb
- RAG_PORT=${RAG_PORT:-8000}
restart: always
depends_on:
- vectordb
env_file:
- .env
volumes:
pgdata2:
のリポジトリのdocker-compose.ymlをベースに
volumes:
- type: bind
source: ./librechat.yaml
target: /app/librechat.yaml
の設定を追加している