Compare commits
1 Commits
feat/qemu-
...
3c92d93366
| Author | SHA1 | Date | |
|---|---|---|---|
| 3c92d93366 |
@@ -1,68 +0,0 @@
|
|||||||
FROM ghcr.io/astral-sh/uv:0.11.6-python3.13-trixie@sha256:b3c543b6c4f23a5f2df22866bd7857e5d304b67a564f4feab6ac22044dde719b AS uv_source
|
|
||||||
FROM tianon/gosu:1.19-trixie@sha256:3b176695959c71e123eb390d427efc665eeb561b1540e82679c15e992006b8b9 AS gosu_source
|
|
||||||
FROM debian:13.4
|
|
||||||
|
|
||||||
# Disable Python stdout buffering to ensure logs are printed immediately
|
|
||||||
ENV PYTHONUNBUFFERED=1
|
|
||||||
|
|
||||||
# Store Playwright browsers outside the volume mount so the build-time
|
|
||||||
# install survives the /opt/data volume overlay at runtime.
|
|
||||||
ENV PLAYWRIGHT_BROWSERS_PATH=/opt/hermes/.playwright
|
|
||||||
|
|
||||||
# Install system dependencies in one layer, clear APT cache
|
|
||||||
# tini reaps orphaned zombie processes (MCP stdio subprocesses, git, bun, etc.)
|
|
||||||
# that would otherwise accumulate when hermes runs as PID 1. See #15012.
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
build-essential nodejs npm python3 ripgrep ffmpeg gcc python3-dev libffi-dev procps git openssh-client docker-cli tini \
|
|
||||||
curl poppler-utils imagemagick emacs-nox qemu-user-static binfmt-support qemu-user-binfmt && \
|
|
||||||
texlive-latex-base texlive-latex-extra texlive-fonts-recommended texlive-xetex texlive-science \
|
|
||||||
chromium xvfb \
|
|
||||||
fonts-noto-color-emoji fonts-unifont fonts-liberation fonts-ipafont-gothic fonts-wqy-zenhei fonts-tlwg-loma-otf fonts-freefont-ttf \
|
|
||||||
libasound2t64 libatk-bridge2.0-0t64 libatk1.0-0t64 libatspi2.0-0t64 libcairo2 libcups2t64 libdbus-1-3 libdrm2 libgbm1 libglib2.0-0t64 libnspr4 libnss3 libpango-1.0-0 libx11-6 libxcb1 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxkbcommon0 libxrandr2 && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Non-root user for runtime; UID can be overridden via HERMES_UID at runtime
|
|
||||||
RUN useradd -u 10000 -m -d /opt/data hermes
|
|
||||||
|
|
||||||
COPY --chmod=0755 --from=gosu_source /gosu /usr/local/bin/
|
|
||||||
COPY --chmod=0755 --from=uv_source /usr/local/bin/uv /usr/local/bin/uvx /usr/local/bin/
|
|
||||||
|
|
||||||
WORKDIR /opt/hermes
|
|
||||||
|
|
||||||
# ---------- Layer-cached dependency install ----------
|
|
||||||
# Copy only package manifests first so npm install + Playwright are cached
|
|
||||||
# unless the lockfiles themselves change.
|
|
||||||
COPY package.json package-lock.json ./
|
|
||||||
COPY web/package.json web/package-lock.json web/
|
|
||||||
|
|
||||||
RUN npm install --prefer-offline --no-audit && \
|
|
||||||
npx playwright install --with-deps chromium --only-shell && \
|
|
||||||
(cd web && npm install --prefer-offline --no-audit) && \
|
|
||||||
npm cache clean --force
|
|
||||||
|
|
||||||
# ---------- Source code ----------
|
|
||||||
# .dockerignore excludes node_modules, so the installs above survive.
|
|
||||||
COPY --chown=hermes:hermes . .
|
|
||||||
|
|
||||||
# Build web dashboard (Vite outputs to hermes_cli/web_dist/)
|
|
||||||
RUN cd web && npm run build
|
|
||||||
|
|
||||||
# ---------- Permissions ----------
|
|
||||||
# Make install dir world-readable so any HERMES_UID can read it at runtime.
|
|
||||||
# The venv needs to be traversable too.
|
|
||||||
USER root
|
|
||||||
RUN chmod -R a+rX /opt/hermes
|
|
||||||
# Start as root so the entrypoint can usermod/groupmod + gosu.
|
|
||||||
# If HERMES_UID is unset, the entrypoint drops to the default hermes user (10000).
|
|
||||||
|
|
||||||
# ---------- Python virtualenv ----------
|
|
||||||
RUN uv venv && \
|
|
||||||
uv pip install --no-cache-dir -e ".[all]"
|
|
||||||
|
|
||||||
# ---------- Runtime ----------
|
|
||||||
ENV HERMES_WEB_DIST=/opt/hermes/hermes_cli/web_dist
|
|
||||||
ENV HERMES_HOME=/opt/data
|
|
||||||
ENV PATH="/opt/data/.local/bin:${PATH}"
|
|
||||||
VOLUME [ "/opt/data" ]
|
|
||||||
ENTRYPOINT [ "/usr/bin/tini", "-g", "--", "/opt/hermes/docker/entrypoint.sh" ]
|
|
||||||
@@ -112,22 +112,7 @@ services:
|
|||||||
- /mnt/HoardingCow_docker_data/Ollama/ollama:/root/.ollama
|
- /mnt/HoardingCow_docker_data/Ollama/ollama:/root/.ollama
|
||||||
environment:
|
environment:
|
||||||
- OLLAMA_VULKAN=0
|
- OLLAMA_VULKAN=0
|
||||||
- HSA_OVERRIDE_GFX_VERSION=9.0.6
|
|
||||||
- HCC_AMDGPU_TARGET=gfx906
|
|
||||||
- HIP_VISIBLE_DEVICES=0,1
|
|
||||||
- ROCR_VISIBLE_DEVICES=0,1
|
|
||||||
- HSA_ENABLE_SDMA=0
|
|
||||||
- OLLAMA_HOST=0.0.0.0
|
- OLLAMA_HOST=0.0.0.0
|
||||||
- OLLAMA_DEBUG=1
|
|
||||||
- OLLAMA_FLASH_ATTENTION=1
|
|
||||||
- OLLAMA_NUM_PARALLEL=2
|
|
||||||
devices:
|
|
||||||
# Map the render nodes and KFD for ROCm to work inside the container
|
|
||||||
- /dev/kfd:/dev/kfd
|
|
||||||
- /dev/dri:/dev/dri
|
|
||||||
group_add:
|
|
||||||
- "303"
|
|
||||||
- "26"
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
ai_net:
|
ai_net:
|
||||||
@@ -137,47 +122,40 @@ networks:
|
|||||||
driver: bridge
|
driver: bridge
|
||||||
name: ai_backend
|
name: ai_backend
|
||||||
|
|
||||||
# llama_cpp_devstral:
|
llama-cpp-hermes:
|
||||||
# image: ghcr.io/ggml-org/llama.cpp:server-rocm
|
image: llama-cpp:rocm-gfx906
|
||||||
# container_name: llama_cpp_devstral
|
container_name: llama-cpp-hermes
|
||||||
# restart: unless-stopped
|
restart: unless-stopped
|
||||||
# networks:
|
networks:
|
||||||
# - ai_backend
|
- ai_backend
|
||||||
# ports:
|
ports:
|
||||||
# - "8300:8080"
|
- "127.0.0.1:8300:8080"
|
||||||
# ipc: host
|
ipc: host
|
||||||
# devices:
|
devices:
|
||||||
# - "/dev/kfd:/dev/kfd"
|
- /dev/kfd:/dev/kfd
|
||||||
# - "/dev/dri:/dev/dri"
|
- /dev/dri:/dev/dri
|
||||||
# group_add:
|
group_add:
|
||||||
# - "303" # video
|
- "303"
|
||||||
# - "26" # render
|
- "26"
|
||||||
# environment:
|
environment:
|
||||||
# HSA_OVERRIDE_GFX_VERSION: 9.0.6
|
- HSA_OVERRIDE_GFX_VERSION=9.0.6
|
||||||
# HIP_VISIBLE_DEVICES: 0,1
|
- HSA_ENABLE_SDMA=0
|
||||||
# LLAMA_CACHE: /models
|
- HIP_VISIBLE_DEVICES=0,1
|
||||||
# volumes:
|
- LLAMA_CACHE=/models
|
||||||
# - /mnt/HoardingCow_docker_data/Llama_cpp/models:/models
|
volumes:
|
||||||
# - /mnt/HoardingCow_docker_data/Llama_cpp/devstral-agent.jinja:/template.jinja
|
- /mnt/HoardingCow_docker_data/Llama_cpp/models:/models
|
||||||
# command: >
|
- /mnt/HoardingCow_docker_data/Ollama/ollama/models/blobs/sha256-17823599694fa3503ef54bf748d5078c6ce881f4d01616cafa255dc05d215a08:/model.gguf:ro
|
||||||
# -hf unsloth/Devstral-Small-2-24B-Instruct-2512-GGUF:Devstral-Small-2-24B-Instruct-2512-Q8_0.gguf
|
command: >
|
||||||
# -a devstral-2-small-llama_cpp
|
-m /model.gguf
|
||||||
# --chat-template-file /template.jinja
|
--host 0.0.0.0
|
||||||
# --host 0.0.0.0
|
--port 8080
|
||||||
# --port 8080
|
--gpu-layers 99
|
||||||
# --n-gpu-layers 99
|
--ctx-size 163840
|
||||||
# --ctx-size 163840
|
-ctk f16 -ctv f16
|
||||||
# --batch-size 4096
|
--flash-attn on
|
||||||
# --ubatch-size 4096
|
--split-mode layer
|
||||||
# --cache-type-k f16
|
--no-mmap
|
||||||
# --cache-type-v f16
|
--n-predict -1
|
||||||
# --cache-reuse 256
|
|
||||||
# --flash-attn on
|
|
||||||
# --context-shift
|
|
||||||
# --split-mode layer
|
|
||||||
# --no-mmap
|
|
||||||
# --n-predict -1
|
|
||||||
# --parallel 2
|
|
||||||
|
|
||||||
# vllm:
|
# vllm:
|
||||||
# image: nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3
|
# image: nalanzeyu/vllm-gfx906:v0.9.0-rocm6.3
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Hermes Agent entrypoint script
|
|
||||||
# Installs custom tools and runtime dependencies,
|
|
||||||
# then delegates to the passed command (usually "gateway run").
|
|
||||||
|
|
||||||
# Install custom tools from persistent volume if available
|
|
||||||
if [ -f /opt/data/hermes-tools/install.sh ]; then
|
|
||||||
bash /opt/data/hermes-tools/install.sh
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install additional runtime deps (idempotent)
|
|
||||||
if command -v uv &>/dev/null; then
|
|
||||||
uv pip install --system --no-cache-dir --quiet \
|
|
||||||
openai mautrix[encryption] 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Execute the passed command with tini for proper signal handling
|
|
||||||
exec tini -g -- "$@"
|
|
||||||
30
ai/llama-cpp/Dockerfile
Normal file
30
ai/llama-cpp/Dockerfile
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# llama-cpp-rocm6/Dockerfile
|
||||||
|
# Custom llama.cpp server with ROCm 6.1 + gfx906 (MI50) support.
|
||||||
|
# Build: docker build -t llama-cpp:rocm-gfx906 .
|
||||||
|
|
||||||
|
FROM rocm/dev-ubuntu-22.04:6.1.2-complete AS builder
|
||||||
|
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl git build-essential pkg-config cmake make && rm -rf /var/lib/apt/lists/*
|
||||||
|
ARG LLAMACPP_VERSION=b9596
|
||||||
|
RUN git clone --depth 1 --branch ${LLAMACPP_VERSION} https://github.com/ggml-org/llama.cpp.git /build
|
||||||
|
WORKDIR /build
|
||||||
|
ENV HIP_PATH=/opt/rocm ROCM_PATH=/opt/rocm PATH=/opt/rocm/bin:/opt/rocm/llvm/bin:${PATH} CMAKE_PREFIX_PATH=/opt/rocm
|
||||||
|
RUN mkdir build && cd build && \
|
||||||
|
cmake .. -DGGML_HIP=ON -DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DAMDGPU_TARGETS="gfx906:xnack-" \
|
||||||
|
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
|
||||||
|
-DGGML_CUDA=OFF -DGGML_VULKAN=OFF -DGGML_METAL=OFF \
|
||||||
|
-DBUILD_SHARED_LIBS=OFF && \
|
||||||
|
cmake --build . --target llama-server -- -j $(nproc)
|
||||||
|
|
||||||
|
FROM ubuntu:24.04
|
||||||
|
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||||
|
ca-certificates curl libstdc++6 libgomp1 libopenblas0 \
|
||||||
|
libnuma1 libelf1 libdrm2 libdrm-amdgpu1 \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
COPY --from=builder /opt/rocm/lib/ /opt/rocm/lib/
|
||||||
|
COPY --from=builder /opt/rocm/share/ /opt/rocm/share/
|
||||||
|
COPY --from=builder /build/build/bin/llama-server /usr/local/bin/llama-server
|
||||||
|
RUN echo /opt/rocm/lib > /etc/ld.so.conf.d/rocm.conf && ldconfig
|
||||||
|
ENV HSA_OVERRIDE_GFX_VERSION=9.0.6 HCC_AMDGPU_TARGET=gfx906 HSA_ENABLE_SDMA=0
|
||||||
|
EXPOSE 8080
|
||||||
|
ENTRYPOINT ["/usr/local/bin/llama-server"]
|
||||||
Reference in New Issue
Block a user