Compare commits

..

3 Commits

Author SHA1 Message Date
1e290410de Merge branch 'master' into feat/hermes43-llamacpp
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
Conflicts resolved:
- hermes env: keep OLLAMA_HOST=ollama-cpu + master's new vars
- ollama→ollama-cpu rename: keep our rename over master's ollama
2026-07-07 14:50:59 -04:00
80c9906757 fix: rename ollama→ollama-cpu, fix llama-cpp-hermes YAML indentation
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
- Rename ollama service to ollama-cpu (CPU-only for bge-m3 embeddings)
- Fix llama-cpp-hermes indented under networks instead of as top-level service
- Update hermes OLLAMA_HOST to point to ollama-cpu

Part of PR #54 GPU/ROCm refactor
2026-07-07 14:29:23 -04:00
3c92d93366 feat: add llama-cpp-hermes service with ROCm 6.1 + gfx906 support
Some checks failed
Build Hermes agent / build (pull_request) Has been cancelled
Build ollama (gfx906) / build (pull_request) Has been cancelled
- Add custom llama.cpp Dockerfile with ROCm 6.1 + gfx906 (MI50) build
- Add llama-cpp-hermes service serving Hermes 4.3 on dual MI50 GPUs
- Strip GPU devices/ROCm env from ollama service (CPU-only for embeddings)

Hermes 4.3 runs at ~19 t/s on dual MI50s with 160K context.
2026-06-11 11:41:42 -04:00
3 changed files with 105 additions and 52 deletions

View File

@@ -30,7 +30,6 @@ services:
ssh: ssh:
- default - default
container_name: hermes container_name: hermes
user: "10000:10000"
entrypoint: ["/bin/bash", "-c", entrypoint: ["/bin/bash", "-c",
"bash /opt/data/hermes-tools/install.sh && bash /usr/local/bin/run-multi-gateways.sh && exec /usr/bin/tini -g -- /opt/hermes/docker/entrypoint.sh \"$@\"", "bash /opt/data/hermes-tools/install.sh && bash /usr/local/bin/run-multi-gateways.sh && exec /usr/bin/tini -g -- /opt/hermes/docker/entrypoint.sh \"$@\"",
"hermes-entrypoint"] "hermes-entrypoint"]
@@ -38,7 +37,7 @@ services:
# Gateway run enables the internal API server on port 8642 # Gateway run enables the internal API server on port 8642
command: gateway run command: gateway run
environment: environment:
- OLLAMA_HOST=http://ollama:11434 - OLLAMA_HOST=http://ollama-cpu:11434
- HERMES_DASHBOARD=1 - HERMES_DASHBOARD=1
# Multi-profile: comma-separated list of profiles to run as gateways. # Multi-profile: comma-separated list of profiles to run as gateways.
# The entrypoint reads this and starts one gateway per profile. # The entrypoint reads this and starts one gateway per profile.
@@ -128,13 +127,12 @@ services:
- "traefik.http.routers.syncthing-https.tls.certresolver=njalla" - "traefik.http.routers.syncthing-https.tls.certresolver=njalla"
- "traefik.http.services.syncthing.loadbalancer.server.port=8384" - "traefik.http.services.syncthing.loadbalancer.server.port=8384"
ollama-cpu:
ollama:
build: build:
context: ./ollama context: ./ollama
dockerfile: Dockerfile dockerfile: Dockerfile
image: ollama/ollama:rocm-gfx906 image: ollama/ollama:rocm-gfx906
container_name: ollama container_name: ollama-cpu
tty: true tty: true
restart: always restart: always
ports: ports:
@@ -147,6 +145,41 @@ services:
- OLLAMA_VULKAN=0 - OLLAMA_VULKAN=0
- OLLAMA_HOST=0.0.0.0 - OLLAMA_HOST=0.0.0.0
llama-cpp-hermes:
image: llama-cpp:rocm-gfx906
container_name: llama-cpp-hermes
restart: unless-stopped
networks:
- ai_backend
ports:
- "127.0.0.1:8300:8080"
ipc: host
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
group_add:
- "303"
- "26"
environment:
- HSA_OVERRIDE_GFX_VERSION=9.0.6
- HSA_ENABLE_SDMA=0
- HIP_VISIBLE_DEVICES=0,1
- LLAMA_CACHE=/models
volumes:
- /mnt/HoardingCow_docker_data/Llama_cpp/models:/models
- /mnt/HoardingCow_docker_data/Ollama/ollama/models/blobs/sha256-17823599694fa3503ef54bf748d5078c6ce881f4d01616cafa255dc05d215a08:/model.gguf:ro
command: >
-m /model.gguf
--host 0.0.0.0
--port 8080
--gpu-layers 99
--ctx-size 163840
-ctk f16 -ctv f16
--flash-attn on
--split-mode layer
--no-mmap
--n-predict -1
# --- Honcho + OpenConcho combiné: API + Web UI nginx/FastAPI --- # --- Honcho + OpenConcho combiné: API + Web UI nginx/FastAPI ---
honcho: honcho:
build: build:
@@ -246,41 +279,6 @@ volumes:
external: true external: true
name: honcho_data name: honcho_data
llama-cpp-hermes:
image: llama-cpp:rocm-gfx906
container_name: llama-cpp-hermes
restart: unless-stopped
networks:
- ai_backend
ports:
- "127.0.0.1:8300:8080"
ipc: host
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
group_add:
- "303"
- "26"
environment:
- HSA_OVERRIDE_GFX_VERSION=9.0.6
- HSA_ENABLE_SDMA=0
- HIP_VISIBLE_DEVICES=0,1
- LLAMA_CACHE=/models
volumes:
- /mnt/HoardingCow_docker_data/Llama_cpp/models:/models
- /mnt/HoardingCow_docker_data/Ollama/ollama/models/blobs/sha256-17823599694fa3503ef54bf748d5078c6ce881f4d01616cafa255dc05d215a08:/model.gguf:ro
command: >
-m /model.gguf
--host 0.0.0.0
--port 8080
--gpu-layers 99
--ctx-size 163840
-ctk f16 -ctv f16
--flash-attn on
--split-mode layer
--no-mmap
--n-predict -1
# vllm: # vllm:
# image: nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3 # image: nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3
# container_name: vllm # container_name: vllm

View File

@@ -1 +0,0 @@
RESTIC_PASSWORD=CVvxpEKWSydmsZ5bW9lb_UZ2NR3KAKibv00tYbyZ9-E

View File

@@ -1,42 +1,98 @@
version: "3.8"
services: services:
# kopia:
# image: kopia/kopia:latest
# container_name: kopia
# restart: unless-stopped
# # We explicitly run as root (0:0) to solve the CHDIR issue,
# # OR we make sure the host folders match UID 1000.
# user: "0:0"
# command:
# - server
# - start
# - --address=0.0.0.0:51515
# - --server-username=${KOPIA_SERVER_USER}
# - --server-password=${KOPIA_SERVER_PASSWORD}
# - --config-file=/app/config/repository.config
# - --disable-csrf-token-checks
# - --insecure
# environment:
# - TZ=America/Montreal
# - KOPIA_PASSWORD=${KOPIA_PASSWORD}
# - USER=${KOPIA_USER}
# volumes:
# - /mnt/HoardingCow_docker_data/Kopia/config:/app/config
# - /mnt/HoardingCow_docker_data/Kopia/cache:/app/cache
# - /mnt/HoardingCow_docker_data/Kopia/repository:/repository
# # Required if you want to use the 'Mount' feature later
# - /tmp:/tmp:shared
# # Required for mounting backups as drives
# cap_add:
# - SYS_ADMIN
# devices:
# - /dev/fuse:/dev/fuse
# networks:
# - traefik-net
# labels:
# - "traefik.enable=true"
# # 1. HTTP to HTTPS Redirect
# - "traefik.http.routers.kopia-http.rule=Host(`backup.lazyworkhorse.net`)"
# - "traefik.http.routers.kopia-http.entrypoints=web"
# - "traefik.http.routers.kopia-http.middlewares=redirect-to-https@docker"
#
# # 2. HTTPS Configuration
# - "traefik.http.routers.kopia.rule=Host(`backup.lazyworkhorse.net`)"
# - "traefik.http.routers.kopia.entrypoints=websecure"
# - "traefik.http.routers.kopia.tls=true"
# - "traefik.http.routers.kopia.tls.certresolver=njalla"
#
# # 3. Backend Service Config
# - "traefik.http.services.kopia.loadbalancer.server.port=51515"
restic-server: restic-server:
image: restic/rest-server:latest image: restic/restic:latest
container_name: restic-server container_name: restic-server
restart: always restart: always
user: "0:0" user: "0:0"
command: ["rest-server", "--listen", ":8080", "--path", "/data", "--no-auth"] command: ["server", "--listen", ":8080", "--repo", "/data", "--tls-cert", "", "--tls-key", ""]
environment: environment:
- TZ=America/Montreal - TZ=America/Montreal
- RESTIC_PASSWORD=${RESTIC_PASSWORD}
volumes: volumes:
- /mnt/HoardingCow_docker_data/Restic/data:/data - /mnt/HoardingCow_docker_data/Restic/data:/data
# Mount paths to backup (adjust as needed)
- /mnt/HoardingCow_docker_data:/source:ro
networks: networks:
- backup_net - backup_net
labels: labels:
- "traefik.enable=false" - "traefik.enable=false" # Internal only, accessed by restic-browser
restic-browser: restic-browser:
image: floibach/restic-browser:latest image: embergarage/restic-browser:latest
container_name: restic-browser container_name: restic-browser
restart: always restart: always
ports:
- "8081:8080"
environment: environment:
- TZ=America/Montreal - TZ=America/Montreal
volumes: - RESTIC_REPOSITORY=http://restic-server:8080
- /mnt/HoardingCow_docker_data/Restic:/repo:ro - RESTIC_PASSWORD=${RESTIC_PASSWORD}
- /mnt/HoardingCow_docker_data/Restic/browser-data:/data
networks: networks:
- backup_net - backup_net
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
# 1. HTTP to HTTPS Redirect
- "traefik.http.routers.restic-browser-http.rule=Host(`backup.lazyworkhorse.net`)" - "traefik.http.routers.restic-browser-http.rule=Host(`backup.lazyworkhorse.net`)"
- "traefik.http.routers.restic-browser-http.entrypoints=web" - "traefik.http.routers.restic-browser-http.entrypoints=web"
- "traefik.http.routers.restic-browser-http.middlewares=redirect-to-https@docker" - "traefik.http.routers.restic-browser-http.middlewares=redirect-to-https@docker"
# 2. HTTPS Configuration
- "traefik.http.routers.restic-browser.rule=Host(`backup.lazyworkhorse.net`)" - "traefik.http.routers.restic-browser.rule=Host(`backup.lazyworkhorse.net`)"
- "traefik.http.routers.restic-browser.entrypoints=websecure" - "traefik.http.routers.restic-browser.entrypoints=websecure"
- "traefik.http.routers.restic-browser.tls=true" - "traefik.http.routers.restic-browser.tls=true"
- "traefik.http.routers.restic-browser.tls.certresolver=njalla" - "traefik.http.routers.restic-browser.tls.certresolver=njalla"
- "traefik.http.services.restic-browser.loadbalancer.server.port=8080"
# 3. Backend Service Config
- "traefik.http.services.restic-browser.loadbalancer.server.port=8000"
networks: networks:
backup_net: backup_net: