こんにちは、色違いモノです。
docker composeで動作しているllama-serverで
モデルを切り替えるためのシェルスクリプトをChatGPTに書いてもらいました。
処理としては以下を実施しているだけのようです。
- モデル選択
- .envを書き換え
- docker compose down
- docker compose up -d
#!/bin/bash
# === 設定 ===
COMPOSE_DIR="/home/user/llamacpp-work" # compose.yaml のある場所に変更
ENV_FILE="$COMPOSE_DIR/.env"
cd ${COMPOSE_DIR}
# === モデル一覧 ===
declare -A MODELS=(
["gpt-oss:120b"]="/app/models/ggml-org_gpt-oss-120b-GGUF_gpt-oss-120b-mxfp4-00001-of-00003.gguf"
["Qwen3-Coder"]="/app/models/Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf"
)
# === モデル選択 ===
echo "利用可能なモデル:"
select key in "${!MODELS[@]}"; do
[ -n "$key" ] && break
done
MODEL="${MODELS[$key]}"
echo "選択されたモデル: $key → $MODEL"
# .env ファイル更新
cat > "$ENV_FILE" <<EOF
LLAMA_MODEL=$MODEL
LLAMA_MODEL_ALIAS=$key
LLAMA_CTX_SIZE=128000
EOF
# === 再起動 ===
cd "$COMPOSE_DIR"
echo "🛑 llama.cpp server を停止中..."
docker compose down
echo "🚀 新しいモデル [$key] で起動中..."
docker compose up -d
echo "✅ 起動完了: モデル = $key"
ちなみにcompose.yamlは下記にしています。
が、モデルによって引数は調整した方がいいはず……
なのでいつか調べてまとめます。
services:
llama-cpp-gpu:
image: ghcr.io/ggml-org/llama.cpp:server-vulkan
ports:
- "10000:10000"
volumes:
- ./models:/app/models
- llama-cache:/app/cache
environment:
- LLAMA_MODEL=${LLAMA_MODEL}
- LLAMA_CTX_SIZE=${LLAMA_CTX_SIZE:-128000}
- LLAMA_N_GPU_LAYERS=${LLAMA_N_GPU_LAYERS:-99}
- LLAMA_BATCH_SIZE=${LLAMA_BATCH_SIZE:-2048}
- LLAMA_UBATCH_SIZE=${LLAMA_UBATCH_SIZE:-1024}
- LLAMA_THREADS=${LLAMA_THREADS:-16}
- LLAMA_N_PARALLEL=${LLAMA_N_PARALLEL:-8}
- LLAMA_TEMP=${LLAMA_TEMP:-0.8}
- LLAMA_TOP_K=${LLAMA_TOP_K:-40}
- LLAMA_TOP_P=${LLAMA_TOP_P:-0.95}
- LLAMA_MIN_P=${LLAMA_MIN_P:-0.05}
- LLAMA_REPEAT_PENALTY=${LLAMA_REPEAT_PENALTY:-1.1}
- LLAMA_CACHE=/app/cache
command: >
--model ${LLAMA_MODEL}
--alias ${LLAMA_MODEL_ALIAS}
--host 0.0.0.0
--port 10000
--ctx-size ${LLAMA_CTX_SIZE:-128000}
--n-gpu-layers ${LLAMA_N_GPU_LAYERS:-99}
--batch-size ${LLAMA_BATCH_SIZE:-1024}
--ubatch-size ${LLAMA_UBATCH_SIZE:-512}
--threads ${LLAMA_THREADS:-16}
--threads-batch ${LLAMA_THREADS:-16}
--parallel ${LLAMA_N_PARALLEL:-8}
--temp ${LLAMA_TEMP:-0.8}
--top-k ${LLAMA_TOP_K:-40}
--top-p ${LLAMA_TOP_P:-0.95}
--min-p ${LLAMA_MIN_P:-0.05}
--repeat-penalty ${LLAMA_REPEAT_PENALTY:-1.1}
--cont-batching
--log-verbose
--mlock
--jinja
--reasoning-format auto
restart: unless-stopped
devices:
- /dev/kfd:/dev/kfd
- /dev/dri:/dev/dri
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
llama-cache: