File size: 2,684 Bytes
2ebb96f
df9eea0
 
 
 
 
 
 
2ebb96f
 
df9eea0
2ebb96f
 
 
df9eea0
2ebb96f
df9eea0
2ebb96f
df9eea0
 
 
 
ae37639
df9eea0
2ebb96f
df9eea0
 
 
 
2ebb96f
df9eea0
2ebb96f
 
 
 
 
df9eea0
 
 
 
 
2ebb96f
df9eea0
2ebb96f
df9eea0
 
2ebb96f
df9eea0
 
 
2ebb96f
df9eea0
2ebb96f
df9eea0
2ebb96f
 
 
 
 
df9eea0
ae37639
df9eea0
8065594
df9eea0
2ebb96f
df9eea0
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# syntax=docker/dockerfile:1

# ---------------------------------------------------------
# Stage 1: モデルダウンロード専用ステージ
# huggingface_hub / pip / venv 等のビルド専用ツールを
# 最終イメージに残さないための分離(ComfyUI側のbuilderステージに相当)
# ---------------------------------------------------------
FROM python:3.11-slim-bookworm AS downloader

RUN apt-get update && apt-get install -y --no-install-recommends \
        ca-certificates \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /models

RUN pip install --no-cache-dir -U huggingface_hub

# モデルとmmprojをダウンロード
RUN python3 -c 'from huggingface_hub import hf_hub_download; \
    model_repo="empero-ai/Qwythos-9B-Claude-Mythos-5-1M-GGUF"; \
    mmproj_repo="unsloth/Qwen3.5-9B-GGUF"; \
    hf_hub_download(repo_id=model_repo, filename="Qwythos-9B-Claude-Mythos-5-1M-Q4_K_M.gguf", local_dir="/models"); \
    hf_hub_download(repo_id=mmproj_repo, filename="mmproj-BF16.gguf", local_dir="/models")'

# ---------------------------------------------------------
# Stage 2: ランタイム
# ---------------------------------------------------------
FROM ghcr.io/ggml-org/llama.cpp:full

# メモリアロケータ:jemalloc(CPU推論時の断片化対策・ComfyUI側と同じ狙い)
RUN apt-get update && apt-get install -y --no-install-recommends \
        libjemalloc2 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 非rootユーザーで実行(ComfyUI側と同じ方針)
# 注: UID 1001 は通常ユーザー領域のため -r(システムアカウント)は付けない
#     (-r と SYS_UID_MAX(通常999)を超えるUIDの組み合わせはbuild時にwarningが出るだけで
#      fatalではないが、意味的に矛盾するため削除)
RUN useradd -m -d /home/llama -s /bin/bash -g root -G sudo -u 1001 llama

WORKDIR /app

# ビルド成果物(モデルファイル)のみをコピー
COPY --from=downloader --chown=llama:root /models /app

USER llama

# jemalloc 有効化
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
ENV MALLOC_CONF="background_thread:true,metadata_thp:auto,dirty_decay_ms:0,muzzy_decay_ms:0"

# 
ENV OMP_NUM_THREADS=2
ENV KMP_AFFINITY=granularity=fine,compact
ENV OMP_WAIT_POLICY=ACTIVE
ENV KMP_BLOCKTIME=infinite

CMD ["--server", \
     "-m", "/app/Qwythos-9B-Claude-Mythos-5-1M-Q4_K_M.gguf", \
     "--mmproj", "/app/mmproj-BF16.gguf", \
     "--tools", "all", \
     "--host", "0.0.0.0", \
     "--port", "7860", \
     "-t", "2", \
     "--cache-type-k", "q8_0", \
     "--cache-type-v", "q8_0", \
     "-c", "32000", \
     "-n", "24000"]