diff --git a/containers/llamacpp/llamacpp-serve.README b/containers/llamacpp/llamacpp-serve.README new file mode 100644 index 0000000..6f4ddfe --- /dev/null +++ b/containers/llamacpp/llamacpp-serve.README @@ -0,0 +1,532 @@ +### Lllama.Cpp + +----- common params ----- + +-h, --help, --usage print usage and exit +--version show version and build info +--license show source code license and dependencies +-cl, --cache-list show list of models in cache +--completion-bash print source-able bash completion script for llama.cpp +--verbose-prompt print a verbose prompt before generation (default: false) +-t, --threads N number of CPU threads to use during generation (default: -1) + (env: LLAMA_ARG_THREADS) +-tb, --threads-batch N number of threads to use during batch and prompt processing (default: + same as --threads) +-C, --cpu-mask M CPU affinity mask: arbitrarily long hex. Complements cpu-range + (default: "") +-Cr, --cpu-range lo-hi range of CPUs for affinity. Complements --cpu-mask +--cpu-strict <0|1> use strict CPU placement (default: 0) +--prio N set process/thread priority : low(-1), normal(0), medium(1), high(2), + realtime(3) (default: 0) +--poll <0...100> use polling level to wait for work (0 - no polling, default: 50) +-Cb, --cpu-mask-batch M CPU affinity mask: arbitrarily long hex. Complements cpu-range-batch + (default: same as --cpu-mask) +-Crb, --cpu-range-batch lo-hi ranges of CPUs for affinity. Complements --cpu-mask-batch +--cpu-strict-batch <0|1> use strict CPU placement (default: same as --cpu-strict) +--prio-batch N set process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime + (default: 0) +--poll-batch <0|1> use polling to wait for work (default: same as --poll) +-c, --ctx-size N size of the prompt context (default: 0, 0 = loaded from model) + (env: LLAMA_ARG_CTX_SIZE) +-n, --predict, --n-predict N number of tokens to predict (default: -1, -1 = infinity) + (env: LLAMA_ARG_N_PREDICT) +-b, --batch-size N logical maximum batch size (default: 2048) + (env: LLAMA_ARG_BATCH) +-ub, --ubatch-size N physical maximum batch size (default: 512) + (env: LLAMA_ARG_UBATCH) +--keep N number of tokens to keep from the initial prompt (default: 0, -1 = + all) +--swa-full use full-size SWA cache (default: false) + [(more + info)](https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) + (env: LLAMA_ARG_SWA_FULL) +-fa, --flash-attn [on|off|auto] set Flash Attention use ('on', 'off', or 'auto', default: 'auto') + (env: LLAMA_ARG_FLASH_ATTN) +--perf, --no-perf whether to enable internal libllama performance timings (default: + false) + (env: LLAMA_ARG_PERF) +-e, --escape, --no-escape whether to process escapes sequences (\n, \r, \t, \', \", \\) + (default: true) +--rope-scaling {none,linear,yarn} RoPE frequency scaling method, defaults to linear unless specified by + the model + (env: LLAMA_ARG_ROPE_SCALING_TYPE) +--rope-scale N RoPE context scaling factor, expands context by a factor of N + (env: LLAMA_ARG_ROPE_SCALE) +--rope-freq-base N RoPE base frequency, used by NTK-aware scaling (default: loaded from + model) + (env: LLAMA_ARG_ROPE_FREQ_BASE) +--rope-freq-scale N RoPE frequency scaling factor, expands context by a factor of 1/N + (env: LLAMA_ARG_ROPE_FREQ_SCALE) +--yarn-orig-ctx N YaRN: original context size of model (default: 0 = model training + context size) + (env: LLAMA_ARG_YARN_ORIG_CTX) +--yarn-ext-factor N YaRN: extrapolation mix factor (default: -1.00, 0.0 = full + interpolation) + (env: LLAMA_ARG_YARN_EXT_FACTOR) +--yarn-attn-factor N YaRN: scale sqrt(t) or attention magnitude (default: -1.00) + (env: LLAMA_ARG_YARN_ATTN_FACTOR) +--yarn-beta-slow N YaRN: high correction dim or alpha (default: -1.00) + (env: LLAMA_ARG_YARN_BETA_SLOW) +--yarn-beta-fast N YaRN: low correction dim or beta (default: -1.00) + (env: LLAMA_ARG_YARN_BETA_FAST) +-kvo, --kv-offload, -nkvo, --no-kv-offload + whether to enable KV cache offloading (default: enabled) + (env: LLAMA_ARG_KV_OFFLOAD) +--repack, -nr, --no-repack whether to enable weight repacking (default: enabled) + (env: LLAMA_ARG_REPACK) +--no-host bypass host buffer allowing extra buffers to be used + (env: LLAMA_ARG_NO_HOST) +-ctk, --cache-type-k TYPE KV cache data type for K + allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 + (default: f16) + (env: LLAMA_ARG_CACHE_TYPE_K) +-ctv, --cache-type-v TYPE KV cache data type for V + allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 + (default: f16) + (env: LLAMA_ARG_CACHE_TYPE_V) +-dt, --defrag-thold N KV cache defragmentation threshold (DEPRECATED) + (env: LLAMA_ARG_DEFRAG_THOLD) +--rpc SERVERS comma separated list of RPC servers (host:port) + (env: LLAMA_ARG_RPC) +--mlock force system to keep model in RAM rather than swapping or compressing + (env: LLAMA_ARG_MLOCK) +--mmap, --no-mmap whether to memory-map model. (if mmap disabled, slower load but may + reduce pageouts if not using mlock) (default: enabled) + (env: LLAMA_ARG_MMAP) +-dio, --direct-io, -ndio, --no-direct-io + use DirectIO if available. (default: disabled) + (env: LLAMA_ARG_DIO) +--numa TYPE attempt optimizations that help on some NUMA systems + - distribute: spread execution evenly over all nodes + - isolate: only spawn threads on CPUs on the node that execution + started on + - numactl: use the CPU map provided by numactl + if run without this previously, it is recommended to drop the system + page cache before using this + see https://github.com/ggml-org/llama.cpp/issues/1437 + (env: LLAMA_ARG_NUMA) +-dev, --device comma-separated list of devices to use for offloading (none = don't + offload) + use --list-devices to see a list of available devices + (env: LLAMA_ARG_DEVICE) +--list-devices print list of available devices and exit +-ot, --override-tensor =,... + override tensor buffer type + (env: LLAMA_ARG_OVERRIDE_TENSOR) +-cmoe, --cpu-moe keep all Mixture of Experts (MoE) weights in the CPU + (env: LLAMA_ARG_CPU_MOE) +-ncmoe, --n-cpu-moe N keep the Mixture of Experts (MoE) weights of the first N layers in the + CPU + (env: LLAMA_ARG_N_CPU_MOE) +-ngl, --gpu-layers, --n-gpu-layers N max. number of layers to store in VRAM, either an exact number, + 'auto', or 'all' (default: auto) + (env: LLAMA_ARG_N_GPU_LAYERS) +-sm, --split-mode {none,layer,row} how to split the model across multiple GPUs, one of: + - none: use one GPU only + - layer (default): split layers and KV across GPUs + - row: split rows across GPUs + (env: LLAMA_ARG_SPLIT_MODE) +-ts, --tensor-split N0,N1,N2,... fraction of the model to offload to each GPU, comma-separated list of + proportions, e.g. 3,1 + (env: LLAMA_ARG_TENSOR_SPLIT) +-mg, --main-gpu INDEX the GPU to use for the model (with split-mode = none), or for + intermediate results and KV (with split-mode = row) (default: 0) + (env: LLAMA_ARG_MAIN_GPU) +-fit, --fit [on|off] whether to adjust unset arguments to fit in device memory ('on' or + 'off', default: 'on') + (env: LLAMA_ARG_FIT) +-fitt, --fit-target MiB0,MiB1,MiB2,... + target margin per device for --fit, comma-separated list of values, + single value is broadcast across all devices, default: 1024 + (env: LLAMA_ARG_FIT_TARGET) +-fitc, --fit-ctx N minimum ctx size that can be set by --fit option, default: 4096 + (env: LLAMA_ARG_FIT_CTX) +--check-tensors check model tensor data for invalid values (default: false) +--override-kv KEY=TYPE:VALUE,... advanced option to override model metadata by key. to specify multiple + overrides, either use comma-separated values. + types: int, float, bool, str. example: --override-kv + tokenizer.ggml.add_bos_token=bool:false,tokenizer.ggml.add_eos_token=bool:false +--op-offload, --no-op-offload whether to offload host tensor operations to device (default: true) +--lora FNAME path to LoRA adapter (use comma-separated values to load multiple + adapters) +--lora-scaled FNAME:SCALE,... path to LoRA adapter with user defined scaling (format: + FNAME:SCALE,...) + note: use comma-separated values +--control-vector FNAME add a control vector + note: use comma-separated values to add multiple control vectors +--control-vector-scaled FNAME:SCALE,... + add a control vector with user defined scaling SCALE + note: use comma-separated values (format: FNAME:SCALE,...) +--control-vector-layer-range START END + layer range to apply the control vector(s) to, start and end inclusive +-m, --model FNAME model path to load + (env: LLAMA_ARG_MODEL) +-mu, --model-url MODEL_URL model download url (default: unused) + (env: LLAMA_ARG_MODEL_URL) +-dr, --docker-repo [/][:quant] + Docker Hub model repository. repo is optional, default to ai/. quant + is optional, default to :latest. + example: gemma3 + (default: unused) + (env: LLAMA_ARG_DOCKER_REPO) +-hf, -hfr, --hf-repo /[:quant] + Hugging Face model repository; quant is optional, case-insensitive, + default to Q4_K_M, or falls back to the first file in the repo if + Q4_K_M doesn't exist. + mmproj is also downloaded automatically if available. to disable, add + --no-mmproj + example: unsloth/phi-4-GGUF:q4_k_m + (default: unused) + (env: LLAMA_ARG_HF_REPO) +-hfd, -hfrd, --hf-repo-draft /[:quant] + Same as --hf-repo, but for the draft model (default: unused) + (env: LLAMA_ARG_HFD_REPO) +-hff, --hf-file FILE Hugging Face model file. If specified, it will override the quant in + --hf-repo (default: unused) + (env: LLAMA_ARG_HF_FILE) +-hfv, -hfrv, --hf-repo-v /[:quant] + Hugging Face model repository for the vocoder model (default: unused) + (env: LLAMA_ARG_HF_REPO_V) +-hffv, --hf-file-v FILE Hugging Face model file for the vocoder model (default: unused) + (env: LLAMA_ARG_HF_FILE_V) +-hft, --hf-token TOKEN Hugging Face access token (default: value from HF_TOKEN environment + variable) + (env: HF_TOKEN) +--log-disable Log disable +--log-file FNAME Log to file + (env: LLAMA_LOG_FILE) +--log-colors [on|off|auto] Set colored logging ('on', 'off', or 'auto', default: 'auto') + 'auto' enables colors when output is to a terminal + (env: LLAMA_LOG_COLORS) +-v, --verbose, --log-verbose Set verbosity level to infinity (i.e. log all messages, useful for + debugging) +--offline Offline mode: forces use of cache, prevents network access + (env: LLAMA_OFFLINE) +-lv, --verbosity, --log-verbosity N Set the verbosity threshold. Messages with a higher verbosity will be + ignored. Values: + - 0: generic output + - 1: error + - 2: warning + - 3: info + - 4: debug + (default: 3) + + (env: LLAMA_LOG_VERBOSITY) +--log-prefix Enable prefix in log messages + (env: LLAMA_LOG_PREFIX) +--log-timestamps Enable timestamps in log messages + (env: LLAMA_LOG_TIMESTAMPS) +-ctkd, --cache-type-k-draft TYPE KV cache data type for K for the draft model + allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 + (default: f16) + (env: LLAMA_ARG_CACHE_TYPE_K_DRAFT) +-ctvd, --cache-type-v-draft TYPE KV cache data type for V for the draft model + allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 + (default: f16) + (env: LLAMA_ARG_CACHE_TYPE_V_DRAFT) + + +----- sampling params ----- + +--samplers SAMPLERS samplers that will be used for generation in the order, separated by + ';' + (default: + penalties;dry;top_n_sigma;top_k;typ_p;top_p;min_p;xtc;temperature) +-s, --seed SEED RNG seed (default: -1, use random seed for -1) +--sampler-seq, --sampling-seq SEQUENCE + simplified sequence for samplers that will be used (default: + edskypmxt) +--ignore-eos ignore end of stream token and continue generating (implies + --logit-bias EOS-inf) +--temp N temperature (default: 0.80) +--top-k N top-k sampling (default: 40, 0 = disabled) + (env: LLAMA_ARG_TOP_K) +--top-p N top-p sampling (default: 0.95, 1.0 = disabled) +--min-p N min-p sampling (default: 0.05, 0.0 = disabled) +--top-nsigma N top-n-sigma sampling (default: -1.00, -1.0 = disabled) +--xtc-probability N xtc probability (default: 0.00, 0.0 = disabled) +--xtc-threshold N xtc threshold (default: 0.10, 1.0 = disabled) +--typical N locally typical sampling, parameter p (default: 1.00, 1.0 = disabled) +--repeat-last-n N last n tokens to consider for penalize (default: 64, 0 = disabled, -1 + = ctx_size) +--repeat-penalty N penalize repeat sequence of tokens (default: 1.00, 1.0 = disabled) +--presence-penalty N repeat alpha presence penalty (default: 0.00, 0.0 = disabled) +--frequency-penalty N repeat alpha frequency penalty (default: 0.00, 0.0 = disabled) +--dry-multiplier N set DRY sampling multiplier (default: 0.00, 0.0 = disabled) +--dry-base N set DRY sampling base value (default: 1.75) +--dry-allowed-length N set allowed length for DRY sampling (default: 2) +--dry-penalty-last-n N set DRY penalty for the last n tokens (default: -1, 0 = disable, -1 = + context size) +--dry-sequence-breaker STRING add sequence breaker for DRY sampling, clearing out default breakers + ('\n', ':', '"', '*') in the process; use "none" to not use any + sequence breakers +--adaptive-target N adaptive-p: select tokens near this probability (valid range 0.0 to + 1.0; negative = disabled) (default: -1.00) + [(more info)](https://github.com/ggml-org/llama.cpp/pull/17927) +--adaptive-decay N adaptive-p: decay rate for target adaptation over time. lower values + are more reactive, higher values are more stable. + (valid range 0.0 to 0.99) (default: 0.90) +--dynatemp-range N dynamic temperature range (default: 0.00, 0.0 = disabled) +--dynatemp-exp N dynamic temperature exponent (default: 1.00) +--mirostat N use Mirostat sampling. + Top K, Nucleus and Locally Typical samplers are ignored if used. + (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) +--mirostat-lr N Mirostat learning rate, parameter eta (default: 0.10) +--mirostat-ent N Mirostat target entropy, parameter tau (default: 5.00) +-l, --logit-bias TOKEN_ID(+/-)BIAS modifies the likelihood of token appearing in the completion, + i.e. `--logit-bias 15043+1` to increase likelihood of token ' Hello', + or `--logit-bias 15043-1` to decrease likelihood of token ' Hello' +--grammar GRAMMAR BNF-like grammar to constrain generations (see samples in grammars/ + dir) (default: '') +--grammar-file FNAME file to read grammar from +-j, --json-schema SCHEMA JSON schema to constrain generations (https://json-schema.org/), e.g. + `{}` for any JSON object + For schemas w/ external $refs, use --grammar + + example/json_schema_to_grammar.py instead +-jf, --json-schema-file FILE File containing a JSON schema to constrain generations + (https://json-schema.org/), e.g. `{}` for any JSON object + For schemas w/ external $refs, use --grammar + + example/json_schema_to_grammar.py instead +-bs, --backend-sampling enable backend sampling (experimental) (default: disabled) + (env: LLAMA_ARG_BACKEND_SAMPLING) + + +----- example-specific params ----- + +-lcs, --lookup-cache-static FNAME path to static lookup cache to use for lookup decoding (not updated by + generation) +-lcd, --lookup-cache-dynamic FNAME path to dynamic lookup cache to use for lookup decoding (updated by + generation) +--ctx-checkpoints, --swa-checkpoints N + max number of context checkpoints to create per slot (default: + 8)[(more info)](https://github.com/ggml-org/llama.cpp/pull/15293) + (env: LLAMA_ARG_CTX_CHECKPOINTS) +-cram, --cache-ram N set the maximum cache size in MiB (default: 8192, -1 - no limit, 0 - + disable)[(more + info)](https://github.com/ggml-org/llama.cpp/pull/16391) + (env: LLAMA_ARG_CACHE_RAM) +-kvu, --kv-unified, -no-kvu, --no-kv-unified + use single unified KV buffer shared across all sequences (default: + enabled if number of slots is auto) + (env: LLAMA_ARG_KV_UNIFIED) +--context-shift, --no-context-shift whether to use context shift on infinite text generation (default: + disabled) + (env: LLAMA_ARG_CONTEXT_SHIFT) +-r, --reverse-prompt PROMPT halt generation at PROMPT, return control in interactive mode +-sp, --special special tokens output enabled (default: false) +--warmup, --no-warmup whether to perform warmup with an empty run (default: enabled) +--spm-infill use Suffix/Prefix/Middle pattern for infill (instead of + Prefix/Suffix/Middle) as some models prefer this. (default: disabled) +--pooling {none,mean,cls,last,rank} pooling type for embeddings, use model default if unspecified + (env: LLAMA_ARG_POOLING) +-np, --parallel N number of server slots (default: -1, -1 = auto) + (env: LLAMA_ARG_N_PARALLEL) +-cb, --cont-batching, -nocb, --no-cont-batching + whether to enable continuous batching (a.k.a dynamic batching) + (default: enabled) + (env: LLAMA_ARG_CONT_BATCHING) +-mm, --mmproj FILE path to a multimodal projector file. see tools/mtmd/README.md + note: if -hf is used, this argument can be omitted + (env: LLAMA_ARG_MMPROJ) +-mmu, --mmproj-url URL URL to a multimodal projector file. see tools/mtmd/README.md + (env: LLAMA_ARG_MMPROJ_URL) +--mmproj-auto, --no-mmproj, --no-mmproj-auto + whether to use multimodal projector file (if available), useful when + using -hf (default: enabled) + (env: LLAMA_ARG_MMPROJ_AUTO) +--mmproj-offload, --no-mmproj-offload whether to enable GPU offloading for multimodal projector (default: + enabled) + (env: LLAMA_ARG_MMPROJ_OFFLOAD) +--image-min-tokens N minimum number of tokens each image can take, only used by vision + models with dynamic resolution (default: read from model) + (env: LLAMA_ARG_IMAGE_MIN_TOKENS) +--image-max-tokens N maximum number of tokens each image can take, only used by vision + models with dynamic resolution (default: read from model) + (env: LLAMA_ARG_IMAGE_MAX_TOKENS) +-otd, --override-tensor-draft =,... + override tensor buffer type for draft model +-cmoed, --cpu-moe-draft keep all Mixture of Experts (MoE) weights in the CPU for the draft + model + (env: LLAMA_ARG_CPU_MOE_DRAFT) +-ncmoed, --n-cpu-moe-draft N keep the Mixture of Experts (MoE) weights of the first N layers in the + CPU for the draft model + (env: LLAMA_ARG_N_CPU_MOE_DRAFT) +-a, --alias STRING set alias for model name (to be used by REST API) + (env: LLAMA_ARG_ALIAS) +--host HOST ip address to listen, or bind to an UNIX socket if the address ends + with .sock (default: 127.0.0.1) + (env: LLAMA_ARG_HOST) +--port PORT port to listen (default: 8080) + (env: LLAMA_ARG_PORT) +--path PATH path to serve static files from (default: ) + (env: LLAMA_ARG_STATIC_PATH) +--api-prefix PREFIX prefix path the server serves from, without the trailing slash + (default: ) + (env: LLAMA_ARG_API_PREFIX) +--webui-config JSON JSON that provides default WebUI settings (overrides WebUI defaults) + (env: LLAMA_ARG_WEBUI_CONFIG) +--webui-config-file PATH JSON file that provides default WebUI settings (overrides WebUI + defaults) + (env: LLAMA_ARG_WEBUI_CONFIG_FILE) +--webui, --no-webui whether to enable the Web UI (default: enabled) + (env: LLAMA_ARG_WEBUI) +--embedding, --embeddings restrict to only support embedding use case; use only with dedicated + embedding models (default: disabled) + (env: LLAMA_ARG_EMBEDDINGS) +--rerank, --reranking enable reranking endpoint on server (default: disabled) + (env: LLAMA_ARG_RERANKING) +--api-key KEY API key to use for authentication, multiple keys can be provided as a + comma-separated list (default: none) + (env: LLAMA_API_KEY) +--api-key-file FNAME path to file containing API keys (default: none) +--ssl-key-file FNAME path to file a PEM-encoded SSL private key + (env: LLAMA_ARG_SSL_KEY_FILE) +--ssl-cert-file FNAME path to file a PEM-encoded SSL certificate + (env: LLAMA_ARG_SSL_CERT_FILE) +--chat-template-kwargs STRING sets additional params for the json template parser, must be a valid + json object string, e.g. '{"key1":"value1","key2":"value2"}' + (env: LLAMA_CHAT_TEMPLATE_KWARGS) +-to, --timeout N server read/write timeout in seconds (default: 600) + (env: LLAMA_ARG_TIMEOUT) +--threads-http N number of threads used to process HTTP requests (default: -1) + (env: LLAMA_ARG_THREADS_HTTP) +--cache-prompt, --no-cache-prompt whether to enable prompt caching (default: enabled) + (env: LLAMA_ARG_CACHE_PROMPT) +--cache-reuse N min chunk size to attempt reusing from the cache via KV shifting, + requires prompt caching to be enabled (default: 0) + [(card)](https://ggml.ai/f0.png) + (env: LLAMA_ARG_CACHE_REUSE) +--metrics enable prometheus compatible metrics endpoint (default: disabled) + (env: LLAMA_ARG_ENDPOINT_METRICS) +--props enable changing global properties via POST /props (default: disabled) + (env: LLAMA_ARG_ENDPOINT_PROPS) +--slots, --no-slots expose slots monitoring endpoint (default: enabled) + (env: LLAMA_ARG_ENDPOINT_SLOTS) +--slot-save-path PATH path to save slot kv cache (default: disabled) +--media-path PATH directory for loading local media files; files can be accessed via + file:// URLs using relative paths (default: disabled) +--models-dir PATH directory containing models for the router server (default: disabled) + (env: LLAMA_ARG_MODELS_DIR) +--models-preset PATH path to INI file containing model presets for the router server + (default: disabled) + (env: LLAMA_ARG_MODELS_PRESET) +--models-max N for router server, maximum number of models to load simultaneously + (default: 4, 0 = unlimited) + (env: LLAMA_ARG_MODELS_MAX) +--models-autoload, --no-models-autoload + for router server, whether to automatically load models (default: + enabled) + (env: LLAMA_ARG_MODELS_AUTOLOAD) +--jinja, --no-jinja whether to use jinja template engine for chat (default: enabled) + (env: LLAMA_ARG_JINJA) +--reasoning-format FORMAT controls whether thought tags are allowed and/or extracted from the + response, and in which format they're returned; one of: + - none: leaves thoughts unparsed in `message.content` + - deepseek: puts thoughts in `message.reasoning_content` + - deepseek-legacy: keeps `` tags in `message.content` while + also populating `message.reasoning_content` + (default: auto) + (env: LLAMA_ARG_THINK) +--reasoning-budget N controls the amount of thinking allowed; currently only one of: -1 for + unrestricted thinking budget, or 0 to disable thinking (default: -1) + (env: LLAMA_ARG_THINK_BUDGET) +--chat-template JINJA_TEMPLATE set custom jinja chat template (default: template taken from model's + metadata) + if suffix/prefix are specified, template will be disabled + only commonly used templates are accepted (unless --jinja is set + before this flag): + list of built-in templates: + bailing, bailing-think, bailing2, chatglm3, chatglm4, chatml, + command-r, deepseek, deepseek2, deepseek3, exaone-moe, exaone3, + exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, grok-2, + hunyuan-dense, hunyuan-moe, kimi-k2, llama2, llama2-sys, + llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, + mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, + mistral-v7-tekken, monarch, openchat, orion, pangu-embedded, phi3, + phi4, rwkv-world, seed_oss, smolvlm, solar-open, vicuna, vicuna-orca, + yandex, zephyr + (env: LLAMA_ARG_CHAT_TEMPLATE) +--chat-template-file JINJA_TEMPLATE_FILE + set custom jinja chat template file (default: template taken from + model's metadata) + if suffix/prefix are specified, template will be disabled + only commonly used templates are accepted (unless --jinja is set + before this flag): + list of built-in templates: + bailing, bailing-think, bailing2, chatglm3, chatglm4, chatml, + command-r, deepseek, deepseek2, deepseek3, exaone-moe, exaone3, + exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, grok-2, + hunyuan-dense, hunyuan-moe, kimi-k2, llama2, llama2-sys, + llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, + mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, + mistral-v7-tekken, monarch, openchat, orion, pangu-embedded, phi3, + phi4, rwkv-world, seed_oss, smolvlm, solar-open, vicuna, vicuna-orca, + yandex, zephyr + (env: LLAMA_ARG_CHAT_TEMPLATE_FILE) +--prefill-assistant, --no-prefill-assistant + whether to prefill the assistant's response if the last message is an + assistant message (default: prefill enabled) + when this flag is set, if the last message is an assistant message + then it will be treated as a full message and not prefilled + + (env: LLAMA_ARG_PREFILL_ASSISTANT) +-sps, --slot-prompt-similarity SIMILARITY + how much the prompt of a request must match the prompt of a slot in + order to use that slot (default: 0.10, 0.0 = disabled) +--lora-init-without-apply load LoRA adapters without applying them (apply later via POST + /lora-adapters) (default: disabled) +--sleep-idle-seconds SECONDS number of seconds of idleness after which the server will sleep + (default: -1; -1 = disabled) +-td, --threads-draft N number of threads to use during generation (default: same as + --threads) +-tbd, --threads-batch-draft N number of threads to use during batch and prompt processing (default: + same as --threads-draft) +--draft, --draft-n, --draft-max N number of tokens to draft for speculative decoding (default: 16) + (env: LLAMA_ARG_DRAFT_MAX) +--draft-min, --draft-n-min N minimum number of draft tokens to use for speculative decoding + (default: 0) + (env: LLAMA_ARG_DRAFT_MIN) +--draft-p-min P minimum speculative decoding probability (greedy) (default: 0.75) + (env: LLAMA_ARG_DRAFT_P_MIN) +-cd, --ctx-size-draft N size of the prompt context for the draft model (default: 0, 0 = loaded + from model) + (env: LLAMA_ARG_CTX_SIZE_DRAFT) +-devd, --device-draft comma-separated list of devices to use for offloading the draft model + (none = don't offload) + use --list-devices to see a list of available devices +-ngld, --gpu-layers-draft, --n-gpu-layers-draft N + max. number of draft model layers to store in VRAM, either an exact + number, 'auto', or 'all' (default: auto) + (env: LLAMA_ARG_N_GPU_LAYERS_DRAFT) +-md, --model-draft FNAME draft model for speculative decoding (default: unused) + (env: LLAMA_ARG_MODEL_DRAFT) +--spec-replace TARGET DRAFT translate the string in TARGET into DRAFT if the draft model and main + model are not compatible +--spec-type [none|ngram-cache|ngram-simple|ngram-map-k|ngram-map-k4v|ngram-mod] + type of speculative decoding to use when no draft model is provided + (default: none) +--spec-ngram-size-n N ngram size N for ngram-simple/ngram-map speculative decoding, length + of lookup n-gram (default: 12) +--spec-ngram-size-m N ngram size M for ngram-simple/ngram-map speculative decoding, length + of draft m-gram (default: 48) +--spec-ngram-min-hits N minimum hits for ngram-map speculative decoding (default: 1) +-mv, --model-vocoder FNAME vocoder model for audio generation (default: unused) +--tts-use-guide-tokens Use guide tokens to improve TTS word recall +--embd-gemma-default use default EmbeddingGemma model (note: can download weights from the + internet) +--fim-qwen-1.5b-default use default Qwen 2.5 Coder 1.5B (note: can download weights from the + internet) +--fim-qwen-3b-default use default Qwen 2.5 Coder 3B (note: can download weights from the + internet) +--fim-qwen-7b-default use default Qwen 2.5 Coder 7B (note: can download weights from the + internet) +--fim-qwen-7b-spec use Qwen 2.5 Coder 7B + 0.5B draft for speculative decoding (note: can + download weights from the internet) +--fim-qwen-14b-spec use Qwen 2.5 Coder 14B + 0.5B draft for speculative decoding (note: + can download weights from the internet) +--fim-qwen-30b-default use default Qwen 3 Coder 30B A3B Instruct (note: can download weights + from the internet) +--gpt-oss-20b-default use gpt-oss-20b (note: can download weights from the internet) +--gpt-oss-120b-default use gpt-oss-120b (note: can download weights from the internet) +--vision-gemma-4b-default use Gemma 3 4B QAT (note: can download weights from the internet) +--vision-gemma-12b-default use Gemma 3 12B QAT (note: can download weights from the internet) diff --git a/containers/llamacpp/llamacpp-watchdog.service b/containers/llamacpp/llamacpp-watchdog.service new file mode 100644 index 0000000..2509312 --- /dev/null +++ b/containers/llamacpp/llamacpp-watchdog.service @@ -0,0 +1,7 @@ +[Unit] +Description=Watchdog llamacpp: riavvia il servizio se /slots smette di rispondere (livelock) +After=llamacpp.service + +[Service] +Type=oneshot +ExecStart=%h/scripts/llamacpp-watchdog/llamacpp-watchdog.sh diff --git a/containers/llamacpp/llamacpp-watchdog.sh b/containers/llamacpp/llamacpp-watchdog.sh new file mode 100755 index 0000000..a0154b2 --- /dev/null +++ b/containers/llamacpp/llamacpp-watchdog.sh @@ -0,0 +1,75 @@ +#!/bin/bash +# Watchdog per il container llamacpp (rocm): /health risponde "ok" anche +# quando il server e' livelocked - bug osservato il 2026-08-07, dove +# cancellare una richiesta a meta' prompt-processing su uno slot "freddo" +# (nessuna cache riusabile) con speculative decoding attivo lascia il thread +# principale a girare in loop su CPU senza mai liberare lo slot: GPU a 0%, +# nessuna nuova richiesta viene piu' assegnata, ma /health continua a dire +# "ok" perche' non tocca lo stato interno degli slot. +# +# L'unico segnale affidabile trovato e' /slots: si blocca perche' per +# leggere lo stato di ogni slot condivide (probabilmente) un lock col loop +# principale, che nel livelock non lo rilascia mai. Da qui il check. +# +# Uso: pensato per girare come systemd --user timer (vedi +# llamacpp-watchdog.service/.timer), non a mano. +set -euo pipefail + +CONTAINER="llamacpp" +SERVICE="llamacpp.service" +CURL_TIMEOUT=5 +FAIL_THRESHOLD=3 # controlli /slots falliti consecutivi prima di riavviare +MAX_RESTARTS_PER_WINDOW=3 # oltre questa soglia nella finestra sotto, ci si ferma +RESTART_WINDOW_SEC=3600 + +STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/llamacpp-watchdog" +mkdir -p "$STATE_DIR" +FAIL_COUNT_FILE="$STATE_DIR/fail_count" +RESTART_LOG="$STATE_DIR/restart_log" + +log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"; } + +# Porta rilevata a runtime invece che hardcoded: il file quadlet nel repo +# puo' disallinearsi da quella realmente pubblicata (successo gia' una volta). +port="$(podman port "$CONTAINER" 2>/dev/null | head -n1 | sed -E 's#.*:([0-9]+)$#\1#')" +if [ -z "$port" ]; then + log "ERRORE: impossibile determinare la porta pubblicata di $CONTAINER (container fermo?), salto il check" + exit 0 +fi + +fail_count=0 +[ -f "$FAIL_COUNT_FILE" ] && fail_count="$(cat "$FAIL_COUNT_FILE")" + +if curl -sf -m "$CURL_TIMEOUT" "http://127.0.0.1:${port}/slots" -o /dev/null; then + if [ "$fail_count" -gt 0 ]; then + log "OK: /slots torna a rispondere dopo $fail_count fallimenti, reset contatore" + fi + echo 0 > "$FAIL_COUNT_FILE" + exit 0 +fi + +fail_count=$((fail_count + 1)) +echo "$fail_count" > "$FAIL_COUNT_FILE" +log "ATTENZIONE: /slots non risponde (fallimento $fail_count/$FAIL_THRESHOLD)" + +if [ "$fail_count" -lt "$FAIL_THRESHOLD" ]; then + exit 0 +fi + +# Soglia raggiunta. Prima di riavviare, controlla di non aver gia' riavviato +# troppe volte di recente: se il livelock si ripresenta subito dopo ogni +# restart c'e' un bug persistente da guardare a mano, non da nascondere +# dietro un restart-loop infinito. +now="$(date +%s)" +touch "$RESTART_LOG" +recent_restarts="$(awk -v now="$now" -v window="$RESTART_WINDOW_SEC" '$1 > now - window' "$RESTART_LOG" | wc -l)" + +if [ "$recent_restarts" -ge "$MAX_RESTARTS_PER_WINDOW" ]; then + log "CRITICO: $recent_restarts restart gia' effettuati nell'ultima ora, mi fermo qui (serve intervento manuale: il problema si ripresenta troppo in fretta)" + exit 1 +fi + +log "RIAVVIO: /slots bloccato per $fail_count controlli consecutivi, riavvio $SERVICE" +echo "$now" >> "$RESTART_LOG" +echo 0 > "$FAIL_COUNT_FILE" +systemctl --user restart "$SERVICE" diff --git a/containers/llamacpp/llamacpp-watchdog.timer b/containers/llamacpp/llamacpp-watchdog.timer new file mode 100644 index 0000000..e72cd18 --- /dev/null +++ b/containers/llamacpp/llamacpp-watchdog.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Timer watchdog llamacpp (ogni minuto) + +[Timer] +OnBootSec=2m +OnUnitActiveSec=60s +Persistent=false + +[Install] +WantedBy=timers.target diff --git a/containers/llamacpp/llamacpp.README b/containers/llamacpp/llamacpp.README index 6f4ddfe..5a2ab1e 100644 --- a/containers/llamacpp/llamacpp.README +++ b/containers/llamacpp/llamacpp.README @@ -1,532 +1,145 @@ -### Lllama.Cpp +# Llama.Cpp — Router Mode (preset) & Watchdog ------ common params ----- +Path di riferimento per i flag CLI di `llama-server`: vedi `llamacpp-serve.README`. --h, --help, --usage print usage and exit ---version show version and build info ---license show source code license and dependencies --cl, --cache-list show list of models in cache ---completion-bash print source-able bash completion script for llama.cpp ---verbose-prompt print a verbose prompt before generation (default: false) --t, --threads N number of CPU threads to use during generation (default: -1) - (env: LLAMA_ARG_THREADS) --tb, --threads-batch N number of threads to use during batch and prompt processing (default: - same as --threads) --C, --cpu-mask M CPU affinity mask: arbitrarily long hex. Complements cpu-range - (default: "") --Cr, --cpu-range lo-hi range of CPUs for affinity. Complements --cpu-mask ---cpu-strict <0|1> use strict CPU placement (default: 0) ---prio N set process/thread priority : low(-1), normal(0), medium(1), high(2), - realtime(3) (default: 0) ---poll <0...100> use polling level to wait for work (0 - no polling, default: 50) --Cb, --cpu-mask-batch M CPU affinity mask: arbitrarily long hex. Complements cpu-range-batch - (default: same as --cpu-mask) --Crb, --cpu-range-batch lo-hi ranges of CPUs for affinity. Complements --cpu-mask-batch ---cpu-strict-batch <0|1> use strict CPU placement (default: same as --cpu-strict) ---prio-batch N set process/thread priority : 0-normal, 1-medium, 2-high, 3-realtime - (default: 0) ---poll-batch <0|1> use polling to wait for work (default: same as --poll) --c, --ctx-size N size of the prompt context (default: 0, 0 = loaded from model) - (env: LLAMA_ARG_CTX_SIZE) --n, --predict, --n-predict N number of tokens to predict (default: -1, -1 = infinity) - (env: LLAMA_ARG_N_PREDICT) --b, --batch-size N logical maximum batch size (default: 2048) - (env: LLAMA_ARG_BATCH) --ub, --ubatch-size N physical maximum batch size (default: 512) - (env: LLAMA_ARG_UBATCH) ---keep N number of tokens to keep from the initial prompt (default: 0, -1 = - all) ---swa-full use full-size SWA cache (default: false) - [(more - info)](https://github.com/ggml-org/llama.cpp/pull/13194#issuecomment-2868343055) - (env: LLAMA_ARG_SWA_FULL) --fa, --flash-attn [on|off|auto] set Flash Attention use ('on', 'off', or 'auto', default: 'auto') - (env: LLAMA_ARG_FLASH_ATTN) ---perf, --no-perf whether to enable internal libllama performance timings (default: - false) - (env: LLAMA_ARG_PERF) --e, --escape, --no-escape whether to process escapes sequences (\n, \r, \t, \', \", \\) - (default: true) ---rope-scaling {none,linear,yarn} RoPE frequency scaling method, defaults to linear unless specified by - the model - (env: LLAMA_ARG_ROPE_SCALING_TYPE) ---rope-scale N RoPE context scaling factor, expands context by a factor of N - (env: LLAMA_ARG_ROPE_SCALE) ---rope-freq-base N RoPE base frequency, used by NTK-aware scaling (default: loaded from - model) - (env: LLAMA_ARG_ROPE_FREQ_BASE) ---rope-freq-scale N RoPE frequency scaling factor, expands context by a factor of 1/N - (env: LLAMA_ARG_ROPE_FREQ_SCALE) ---yarn-orig-ctx N YaRN: original context size of model (default: 0 = model training - context size) - (env: LLAMA_ARG_YARN_ORIG_CTX) ---yarn-ext-factor N YaRN: extrapolation mix factor (default: -1.00, 0.0 = full - interpolation) - (env: LLAMA_ARG_YARN_EXT_FACTOR) ---yarn-attn-factor N YaRN: scale sqrt(t) or attention magnitude (default: -1.00) - (env: LLAMA_ARG_YARN_ATTN_FACTOR) ---yarn-beta-slow N YaRN: high correction dim or alpha (default: -1.00) - (env: LLAMA_ARG_YARN_BETA_SLOW) ---yarn-beta-fast N YaRN: low correction dim or beta (default: -1.00) - (env: LLAMA_ARG_YARN_BETA_FAST) --kvo, --kv-offload, -nkvo, --no-kv-offload - whether to enable KV cache offloading (default: enabled) - (env: LLAMA_ARG_KV_OFFLOAD) ---repack, -nr, --no-repack whether to enable weight repacking (default: enabled) - (env: LLAMA_ARG_REPACK) ---no-host bypass host buffer allowing extra buffers to be used - (env: LLAMA_ARG_NO_HOST) --ctk, --cache-type-k TYPE KV cache data type for K - allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 - (default: f16) - (env: LLAMA_ARG_CACHE_TYPE_K) --ctv, --cache-type-v TYPE KV cache data type for V - allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 - (default: f16) - (env: LLAMA_ARG_CACHE_TYPE_V) --dt, --defrag-thold N KV cache defragmentation threshold (DEPRECATED) - (env: LLAMA_ARG_DEFRAG_THOLD) ---rpc SERVERS comma separated list of RPC servers (host:port) - (env: LLAMA_ARG_RPC) ---mlock force system to keep model in RAM rather than swapping or compressing - (env: LLAMA_ARG_MLOCK) ---mmap, --no-mmap whether to memory-map model. (if mmap disabled, slower load but may - reduce pageouts if not using mlock) (default: enabled) - (env: LLAMA_ARG_MMAP) --dio, --direct-io, -ndio, --no-direct-io - use DirectIO if available. (default: disabled) - (env: LLAMA_ARG_DIO) ---numa TYPE attempt optimizations that help on some NUMA systems - - distribute: spread execution evenly over all nodes - - isolate: only spawn threads on CPUs on the node that execution - started on - - numactl: use the CPU map provided by numactl - if run without this previously, it is recommended to drop the system - page cache before using this - see https://github.com/ggml-org/llama.cpp/issues/1437 - (env: LLAMA_ARG_NUMA) --dev, --device comma-separated list of devices to use for offloading (none = don't - offload) - use --list-devices to see a list of available devices - (env: LLAMA_ARG_DEVICE) ---list-devices print list of available devices and exit --ot, --override-tensor =,... - override tensor buffer type - (env: LLAMA_ARG_OVERRIDE_TENSOR) --cmoe, --cpu-moe keep all Mixture of Experts (MoE) weights in the CPU - (env: LLAMA_ARG_CPU_MOE) --ncmoe, --n-cpu-moe N keep the Mixture of Experts (MoE) weights of the first N layers in the - CPU - (env: LLAMA_ARG_N_CPU_MOE) --ngl, --gpu-layers, --n-gpu-layers N max. number of layers to store in VRAM, either an exact number, - 'auto', or 'all' (default: auto) - (env: LLAMA_ARG_N_GPU_LAYERS) --sm, --split-mode {none,layer,row} how to split the model across multiple GPUs, one of: - - none: use one GPU only - - layer (default): split layers and KV across GPUs - - row: split rows across GPUs - (env: LLAMA_ARG_SPLIT_MODE) --ts, --tensor-split N0,N1,N2,... fraction of the model to offload to each GPU, comma-separated list of - proportions, e.g. 3,1 - (env: LLAMA_ARG_TENSOR_SPLIT) --mg, --main-gpu INDEX the GPU to use for the model (with split-mode = none), or for - intermediate results and KV (with split-mode = row) (default: 0) - (env: LLAMA_ARG_MAIN_GPU) --fit, --fit [on|off] whether to adjust unset arguments to fit in device memory ('on' or - 'off', default: 'on') - (env: LLAMA_ARG_FIT) --fitt, --fit-target MiB0,MiB1,MiB2,... - target margin per device for --fit, comma-separated list of values, - single value is broadcast across all devices, default: 1024 - (env: LLAMA_ARG_FIT_TARGET) --fitc, --fit-ctx N minimum ctx size that can be set by --fit option, default: 4096 - (env: LLAMA_ARG_FIT_CTX) ---check-tensors check model tensor data for invalid values (default: false) ---override-kv KEY=TYPE:VALUE,... advanced option to override model metadata by key. to specify multiple - overrides, either use comma-separated values. - types: int, float, bool, str. example: --override-kv - tokenizer.ggml.add_bos_token=bool:false,tokenizer.ggml.add_eos_token=bool:false ---op-offload, --no-op-offload whether to offload host tensor operations to device (default: true) ---lora FNAME path to LoRA adapter (use comma-separated values to load multiple - adapters) ---lora-scaled FNAME:SCALE,... path to LoRA adapter with user defined scaling (format: - FNAME:SCALE,...) - note: use comma-separated values ---control-vector FNAME add a control vector - note: use comma-separated values to add multiple control vectors ---control-vector-scaled FNAME:SCALE,... - add a control vector with user defined scaling SCALE - note: use comma-separated values (format: FNAME:SCALE,...) ---control-vector-layer-range START END - layer range to apply the control vector(s) to, start and end inclusive --m, --model FNAME model path to load - (env: LLAMA_ARG_MODEL) --mu, --model-url MODEL_URL model download url (default: unused) - (env: LLAMA_ARG_MODEL_URL) --dr, --docker-repo [/][:quant] - Docker Hub model repository. repo is optional, default to ai/. quant - is optional, default to :latest. - example: gemma3 - (default: unused) - (env: LLAMA_ARG_DOCKER_REPO) --hf, -hfr, --hf-repo /[:quant] - Hugging Face model repository; quant is optional, case-insensitive, - default to Q4_K_M, or falls back to the first file in the repo if - Q4_K_M doesn't exist. - mmproj is also downloaded automatically if available. to disable, add - --no-mmproj - example: unsloth/phi-4-GGUF:q4_k_m - (default: unused) - (env: LLAMA_ARG_HF_REPO) --hfd, -hfrd, --hf-repo-draft /[:quant] - Same as --hf-repo, but for the draft model (default: unused) - (env: LLAMA_ARG_HFD_REPO) --hff, --hf-file FILE Hugging Face model file. If specified, it will override the quant in - --hf-repo (default: unused) - (env: LLAMA_ARG_HF_FILE) --hfv, -hfrv, --hf-repo-v /[:quant] - Hugging Face model repository for the vocoder model (default: unused) - (env: LLAMA_ARG_HF_REPO_V) --hffv, --hf-file-v FILE Hugging Face model file for the vocoder model (default: unused) - (env: LLAMA_ARG_HF_FILE_V) --hft, --hf-token TOKEN Hugging Face access token (default: value from HF_TOKEN environment - variable) - (env: HF_TOKEN) ---log-disable Log disable ---log-file FNAME Log to file - (env: LLAMA_LOG_FILE) ---log-colors [on|off|auto] Set colored logging ('on', 'off', or 'auto', default: 'auto') - 'auto' enables colors when output is to a terminal - (env: LLAMA_LOG_COLORS) --v, --verbose, --log-verbose Set verbosity level to infinity (i.e. log all messages, useful for - debugging) ---offline Offline mode: forces use of cache, prevents network access - (env: LLAMA_OFFLINE) --lv, --verbosity, --log-verbosity N Set the verbosity threshold. Messages with a higher verbosity will be - ignored. Values: - - 0: generic output - - 1: error - - 2: warning - - 3: info - - 4: debug - (default: 3) - - (env: LLAMA_LOG_VERBOSITY) ---log-prefix Enable prefix in log messages - (env: LLAMA_LOG_PREFIX) ---log-timestamps Enable timestamps in log messages - (env: LLAMA_LOG_TIMESTAMPS) --ctkd, --cache-type-k-draft TYPE KV cache data type for K for the draft model - allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 - (default: f16) - (env: LLAMA_ARG_CACHE_TYPE_K_DRAFT) --ctvd, --cache-type-v-draft TYPE KV cache data type for V for the draft model - allowed values: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1 - (default: f16) - (env: LLAMA_ARG_CACHE_TYPE_V_DRAFT) +## Indice +- [Router mode & preset (piu' modelli)](#router-mode--preset-piu-modelli) +- [Aggiungere un modello](#aggiungere-un-modello) +- [Watchdog (livelock su /slots)](#watchdog-livelock-su-slots) ------ sampling params ----- +--- ---samplers SAMPLERS samplers that will be used for generation in the order, separated by - ';' - (default: - penalties;dry;top_n_sigma;top_k;typ_p;top_p;min_p;xtc;temperature) --s, --seed SEED RNG seed (default: -1, use random seed for -1) ---sampler-seq, --sampling-seq SEQUENCE - simplified sequence for samplers that will be used (default: - edskypmxt) ---ignore-eos ignore end of stream token and continue generating (implies - --logit-bias EOS-inf) ---temp N temperature (default: 0.80) ---top-k N top-k sampling (default: 40, 0 = disabled) - (env: LLAMA_ARG_TOP_K) ---top-p N top-p sampling (default: 0.95, 1.0 = disabled) ---min-p N min-p sampling (default: 0.05, 0.0 = disabled) ---top-nsigma N top-n-sigma sampling (default: -1.00, -1.0 = disabled) ---xtc-probability N xtc probability (default: 0.00, 0.0 = disabled) ---xtc-threshold N xtc threshold (default: 0.10, 1.0 = disabled) ---typical N locally typical sampling, parameter p (default: 1.00, 1.0 = disabled) ---repeat-last-n N last n tokens to consider for penalize (default: 64, 0 = disabled, -1 - = ctx_size) ---repeat-penalty N penalize repeat sequence of tokens (default: 1.00, 1.0 = disabled) ---presence-penalty N repeat alpha presence penalty (default: 0.00, 0.0 = disabled) ---frequency-penalty N repeat alpha frequency penalty (default: 0.00, 0.0 = disabled) ---dry-multiplier N set DRY sampling multiplier (default: 0.00, 0.0 = disabled) ---dry-base N set DRY sampling base value (default: 1.75) ---dry-allowed-length N set allowed length for DRY sampling (default: 2) ---dry-penalty-last-n N set DRY penalty for the last n tokens (default: -1, 0 = disable, -1 = - context size) ---dry-sequence-breaker STRING add sequence breaker for DRY sampling, clearing out default breakers - ('\n', ':', '"', '*') in the process; use "none" to not use any - sequence breakers ---adaptive-target N adaptive-p: select tokens near this probability (valid range 0.0 to - 1.0; negative = disabled) (default: -1.00) - [(more info)](https://github.com/ggml-org/llama.cpp/pull/17927) ---adaptive-decay N adaptive-p: decay rate for target adaptation over time. lower values - are more reactive, higher values are more stable. - (valid range 0.0 to 0.99) (default: 0.90) ---dynatemp-range N dynamic temperature range (default: 0.00, 0.0 = disabled) ---dynatemp-exp N dynamic temperature exponent (default: 1.00) ---mirostat N use Mirostat sampling. - Top K, Nucleus and Locally Typical samplers are ignored if used. - (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) ---mirostat-lr N Mirostat learning rate, parameter eta (default: 0.10) ---mirostat-ent N Mirostat target entropy, parameter tau (default: 5.00) --l, --logit-bias TOKEN_ID(+/-)BIAS modifies the likelihood of token appearing in the completion, - i.e. `--logit-bias 15043+1` to increase likelihood of token ' Hello', - or `--logit-bias 15043-1` to decrease likelihood of token ' Hello' ---grammar GRAMMAR BNF-like grammar to constrain generations (see samples in grammars/ - dir) (default: '') ---grammar-file FNAME file to read grammar from --j, --json-schema SCHEMA JSON schema to constrain generations (https://json-schema.org/), e.g. - `{}` for any JSON object - For schemas w/ external $refs, use --grammar + - example/json_schema_to_grammar.py instead --jf, --json-schema-file FILE File containing a JSON schema to constrain generations - (https://json-schema.org/), e.g. `{}` for any JSON object - For schemas w/ external $refs, use --grammar + - example/json_schema_to_grammar.py instead --bs, --backend-sampling enable backend sampling (experimental) (default: disabled) - (env: LLAMA_ARG_BACKEND_SAMPLING) +## Router mode & preset (piu' modelli) +Il container `llamacpp.container` gira in **router mode**: `llama-server` non +carica un modello fisso ma fa da router, caricando/scaricando i modelli al +volo e selezionandoli per richiesta tramite il campo `"model"` dell'API. ------ example-specific params ----- +I preset sono definiti nel file **`/config/preset.ini`** (montato da host in +`/srv/containers/llamacpp/config/preset.ini`), impostato con l'env var +`LLAMA_ARG_MODELS_PRESET`. --lcs, --lookup-cache-static FNAME path to static lookup cache to use for lookup decoding (not updated by - generation) --lcd, --lookup-cache-dynamic FNAME path to dynamic lookup cache to use for lookup decoding (updated by - generation) ---ctx-checkpoints, --swa-checkpoints N - max number of context checkpoints to create per slot (default: - 8)[(more info)](https://github.com/ggml-org/llama.cpp/pull/15293) - (env: LLAMA_ARG_CTX_CHECKPOINTS) --cram, --cache-ram N set the maximum cache size in MiB (default: 8192, -1 - no limit, 0 - - disable)[(more - info)](https://github.com/ggml-org/llama.cpp/pull/16391) - (env: LLAMA_ARG_CACHE_RAM) --kvu, --kv-unified, -no-kvu, --no-kv-unified - use single unified KV buffer shared across all sequences (default: - enabled if number of slots is auto) - (env: LLAMA_ARG_KV_UNIFIED) ---context-shift, --no-context-shift whether to use context shift on infinite text generation (default: - disabled) - (env: LLAMA_ARG_CONTEXT_SHIFT) --r, --reverse-prompt PROMPT halt generation at PROMPT, return control in interactive mode --sp, --special special tokens output enabled (default: false) ---warmup, --no-warmup whether to perform warmup with an empty run (default: enabled) ---spm-infill use Suffix/Prefix/Middle pattern for infill (instead of - Prefix/Suffix/Middle) as some models prefer this. (default: disabled) ---pooling {none,mean,cls,last,rank} pooling type for embeddings, use model default if unspecified - (env: LLAMA_ARG_POOLING) --np, --parallel N number of server slots (default: -1, -1 = auto) - (env: LLAMA_ARG_N_PARALLEL) --cb, --cont-batching, -nocb, --no-cont-batching - whether to enable continuous batching (a.k.a dynamic batching) - (default: enabled) - (env: LLAMA_ARG_CONT_BATCHING) --mm, --mmproj FILE path to a multimodal projector file. see tools/mtmd/README.md - note: if -hf is used, this argument can be omitted - (env: LLAMA_ARG_MMPROJ) --mmu, --mmproj-url URL URL to a multimodal projector file. see tools/mtmd/README.md - (env: LLAMA_ARG_MMPROJ_URL) ---mmproj-auto, --no-mmproj, --no-mmproj-auto - whether to use multimodal projector file (if available), useful when - using -hf (default: enabled) - (env: LLAMA_ARG_MMPROJ_AUTO) ---mmproj-offload, --no-mmproj-offload whether to enable GPU offloading for multimodal projector (default: - enabled) - (env: LLAMA_ARG_MMPROJ_OFFLOAD) ---image-min-tokens N minimum number of tokens each image can take, only used by vision - models with dynamic resolution (default: read from model) - (env: LLAMA_ARG_IMAGE_MIN_TOKENS) ---image-max-tokens N maximum number of tokens each image can take, only used by vision - models with dynamic resolution (default: read from model) - (env: LLAMA_ARG_IMAGE_MAX_TOKENS) --otd, --override-tensor-draft =,... - override tensor buffer type for draft model --cmoed, --cpu-moe-draft keep all Mixture of Experts (MoE) weights in the CPU for the draft - model - (env: LLAMA_ARG_CPU_MOE_DRAFT) --ncmoed, --n-cpu-moe-draft N keep the Mixture of Experts (MoE) weights of the first N layers in the - CPU for the draft model - (env: LLAMA_ARG_N_CPU_MOE_DRAFT) --a, --alias STRING set alias for model name (to be used by REST API) - (env: LLAMA_ARG_ALIAS) ---host HOST ip address to listen, or bind to an UNIX socket if the address ends - with .sock (default: 127.0.0.1) - (env: LLAMA_ARG_HOST) ---port PORT port to listen (default: 8080) - (env: LLAMA_ARG_PORT) ---path PATH path to serve static files from (default: ) - (env: LLAMA_ARG_STATIC_PATH) ---api-prefix PREFIX prefix path the server serves from, without the trailing slash - (default: ) - (env: LLAMA_ARG_API_PREFIX) ---webui-config JSON JSON that provides default WebUI settings (overrides WebUI defaults) - (env: LLAMA_ARG_WEBUI_CONFIG) ---webui-config-file PATH JSON file that provides default WebUI settings (overrides WebUI - defaults) - (env: LLAMA_ARG_WEBUI_CONFIG_FILE) ---webui, --no-webui whether to enable the Web UI (default: enabled) - (env: LLAMA_ARG_WEBUI) ---embedding, --embeddings restrict to only support embedding use case; use only with dedicated - embedding models (default: disabled) - (env: LLAMA_ARG_EMBEDDINGS) ---rerank, --reranking enable reranking endpoint on server (default: disabled) - (env: LLAMA_ARG_RERANKING) ---api-key KEY API key to use for authentication, multiple keys can be provided as a - comma-separated list (default: none) - (env: LLAMA_API_KEY) ---api-key-file FNAME path to file containing API keys (default: none) ---ssl-key-file FNAME path to file a PEM-encoded SSL private key - (env: LLAMA_ARG_SSL_KEY_FILE) ---ssl-cert-file FNAME path to file a PEM-encoded SSL certificate - (env: LLAMA_ARG_SSL_CERT_FILE) ---chat-template-kwargs STRING sets additional params for the json template parser, must be a valid - json object string, e.g. '{"key1":"value1","key2":"value2"}' - (env: LLAMA_CHAT_TEMPLATE_KWARGS) --to, --timeout N server read/write timeout in seconds (default: 600) - (env: LLAMA_ARG_TIMEOUT) ---threads-http N number of threads used to process HTTP requests (default: -1) - (env: LLAMA_ARG_THREADS_HTTP) ---cache-prompt, --no-cache-prompt whether to enable prompt caching (default: enabled) - (env: LLAMA_ARG_CACHE_PROMPT) ---cache-reuse N min chunk size to attempt reusing from the cache via KV shifting, - requires prompt caching to be enabled (default: 0) - [(card)](https://ggml.ai/f0.png) - (env: LLAMA_ARG_CACHE_REUSE) ---metrics enable prometheus compatible metrics endpoint (default: disabled) - (env: LLAMA_ARG_ENDPOINT_METRICS) ---props enable changing global properties via POST /props (default: disabled) - (env: LLAMA_ARG_ENDPOINT_PROPS) ---slots, --no-slots expose slots monitoring endpoint (default: enabled) - (env: LLAMA_ARG_ENDPOINT_SLOTS) ---slot-save-path PATH path to save slot kv cache (default: disabled) ---media-path PATH directory for loading local media files; files can be accessed via - file:// URLs using relative paths (default: disabled) ---models-dir PATH directory containing models for the router server (default: disabled) - (env: LLAMA_ARG_MODELS_DIR) ---models-preset PATH path to INI file containing model presets for the router server - (default: disabled) - (env: LLAMA_ARG_MODELS_PRESET) ---models-max N for router server, maximum number of models to load simultaneously - (default: 4, 0 = unlimited) - (env: LLAMA_ARG_MODELS_MAX) ---models-autoload, --no-models-autoload - for router server, whether to automatically load models (default: - enabled) - (env: LLAMA_ARG_MODELS_AUTOLOAD) ---jinja, --no-jinja whether to use jinja template engine for chat (default: enabled) - (env: LLAMA_ARG_JINJA) ---reasoning-format FORMAT controls whether thought tags are allowed and/or extracted from the - response, and in which format they're returned; one of: - - none: leaves thoughts unparsed in `message.content` - - deepseek: puts thoughts in `message.reasoning_content` - - deepseek-legacy: keeps `` tags in `message.content` while - also populating `message.reasoning_content` - (default: auto) - (env: LLAMA_ARG_THINK) ---reasoning-budget N controls the amount of thinking allowed; currently only one of: -1 for - unrestricted thinking budget, or 0 to disable thinking (default: -1) - (env: LLAMA_ARG_THINK_BUDGET) ---chat-template JINJA_TEMPLATE set custom jinja chat template (default: template taken from model's - metadata) - if suffix/prefix are specified, template will be disabled - only commonly used templates are accepted (unless --jinja is set - before this flag): - list of built-in templates: - bailing, bailing-think, bailing2, chatglm3, chatglm4, chatml, - command-r, deepseek, deepseek2, deepseek3, exaone-moe, exaone3, - exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, grok-2, - hunyuan-dense, hunyuan-moe, kimi-k2, llama2, llama2-sys, - llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, - mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, - mistral-v7-tekken, monarch, openchat, orion, pangu-embedded, phi3, - phi4, rwkv-world, seed_oss, smolvlm, solar-open, vicuna, vicuna-orca, - yandex, zephyr - (env: LLAMA_ARG_CHAT_TEMPLATE) ---chat-template-file JINJA_TEMPLATE_FILE - set custom jinja chat template file (default: template taken from - model's metadata) - if suffix/prefix are specified, template will be disabled - only commonly used templates are accepted (unless --jinja is set - before this flag): - list of built-in templates: - bailing, bailing-think, bailing2, chatglm3, chatglm4, chatml, - command-r, deepseek, deepseek2, deepseek3, exaone-moe, exaone3, - exaone4, falcon3, gemma, gigachat, glmedge, gpt-oss, granite, grok-2, - hunyuan-dense, hunyuan-moe, kimi-k2, llama2, llama2-sys, - llama2-sys-bos, llama2-sys-strip, llama3, llama4, megrez, minicpm, - mistral-v1, mistral-v3, mistral-v3-tekken, mistral-v7, - mistral-v7-tekken, monarch, openchat, orion, pangu-embedded, phi3, - phi4, rwkv-world, seed_oss, smolvlm, solar-open, vicuna, vicuna-orca, - yandex, zephyr - (env: LLAMA_ARG_CHAT_TEMPLATE_FILE) ---prefill-assistant, --no-prefill-assistant - whether to prefill the assistant's response if the last message is an - assistant message (default: prefill enabled) - when this flag is set, if the last message is an assistant message - then it will be treated as a full message and not prefilled - - (env: LLAMA_ARG_PREFILL_ASSISTANT) --sps, --slot-prompt-similarity SIMILARITY - how much the prompt of a request must match the prompt of a slot in - order to use that slot (default: 0.10, 0.0 = disabled) ---lora-init-without-apply load LoRA adapters without applying them (apply later via POST - /lora-adapters) (default: disabled) ---sleep-idle-seconds SECONDS number of seconds of idleness after which the server will sleep - (default: -1; -1 = disabled) --td, --threads-draft N number of threads to use during generation (default: same as - --threads) --tbd, --threads-batch-draft N number of threads to use during batch and prompt processing (default: - same as --threads-draft) ---draft, --draft-n, --draft-max N number of tokens to draft for speculative decoding (default: 16) - (env: LLAMA_ARG_DRAFT_MAX) ---draft-min, --draft-n-min N minimum number of draft tokens to use for speculative decoding - (default: 0) - (env: LLAMA_ARG_DRAFT_MIN) ---draft-p-min P minimum speculative decoding probability (greedy) (default: 0.75) - (env: LLAMA_ARG_DRAFT_P_MIN) --cd, --ctx-size-draft N size of the prompt context for the draft model (default: 0, 0 = loaded - from model) - (env: LLAMA_ARG_CTX_SIZE_DRAFT) --devd, --device-draft comma-separated list of devices to use for offloading the draft model - (none = don't offload) - use --list-devices to see a list of available devices --ngld, --gpu-layers-draft, --n-gpu-layers-draft N - max. number of draft model layers to store in VRAM, either an exact - number, 'auto', or 'all' (default: auto) - (env: LLAMA_ARG_N_GPU_LAYERS_DRAFT) --md, --model-draft FNAME draft model for speculative decoding (default: unused) - (env: LLAMA_ARG_MODEL_DRAFT) ---spec-replace TARGET DRAFT translate the string in TARGET into DRAFT if the draft model and main - model are not compatible ---spec-type [none|ngram-cache|ngram-simple|ngram-map-k|ngram-map-k4v|ngram-mod] - type of speculative decoding to use when no draft model is provided - (default: none) ---spec-ngram-size-n N ngram size N for ngram-simple/ngram-map speculative decoding, length - of lookup n-gram (default: 12) ---spec-ngram-size-m N ngram size M for ngram-simple/ngram-map speculative decoding, length - of draft m-gram (default: 48) ---spec-ngram-min-hits N minimum hits for ngram-map speculative decoding (default: 1) --mv, --model-vocoder FNAME vocoder model for audio generation (default: unused) ---tts-use-guide-tokens Use guide tokens to improve TTS word recall ---embd-gemma-default use default EmbeddingGemma model (note: can download weights from the - internet) ---fim-qwen-1.5b-default use default Qwen 2.5 Coder 1.5B (note: can download weights from the - internet) ---fim-qwen-3b-default use default Qwen 2.5 Coder 3B (note: can download weights from the - internet) ---fim-qwen-7b-default use default Qwen 2.5 Coder 7B (note: can download weights from the - internet) ---fim-qwen-7b-spec use Qwen 2.5 Coder 7B + 0.5B draft for speculative decoding (note: can - download weights from the internet) ---fim-qwen-14b-spec use Qwen 2.5 Coder 14B + 0.5B draft for speculative decoding (note: - can download weights from the internet) ---fim-qwen-30b-default use default Qwen 3 Coder 30B A3B Instruct (note: can download weights - from the internet) ---gpt-oss-20b-default use gpt-oss-20b (note: can download weights from the internet) ---gpt-oss-120b-default use gpt-oss-120b (note: can download weights from the internet) ---vision-gemma-4b-default use Gemma 3 4B QAT (note: can download weights from the internet) ---vision-gemma-12b-default use Gemma 3 12B QAT (note: can download weights from the internet) +Struttura del `preset.ini`: + +```ini +version = 1 + +[*] +; tuning globale, condiviso da tutti i modelli +batch-size = 4096 +ubatch-size = 1024 +cache-type-k = q4_1 +cache-type-v = q4_1 +cache-reuse = 256 + +[qwen36-mtp] +hf = unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-IQ4_NL +spec-type = draft-mtp +spec-draft-n-max = 2 + +[gemma4] +hf = unsloth/gemma-4-26B-A4B-it-GGUF:UD-IQ4_NL + +[deepseek] +hf = unsloth/DeepSeek-V4-Flash-0731-GGUF:UD-IQ3_XXS +hf-repo-draft = unsloth/DeepSeek-V4-Flash-0731-GGUF:Q8_0 +spec-type = draft-dspark +spec-draft-n-max = 3 +n-gpu-layers-draft = 99 +``` + +- Ogni sezione `[nome]` e' un preset/modello; il **nome della sezione** e' il + valore da passare nel campo `"model"` dell'API. +- La chiave `hf` punta a un modello Hugging Face (repo:quant); usa il quant + **esatto** del repo (prefisso `UD-` incluso). In alternativa `model` punta + a un file `.gguf` locale gia' scaricato. +- La sezione `[*]` contiene il tuning globale condiviso (batch, ubatch, + cache-type, cache-reuse). +- I parametri **per-modello** (tipo MTP, ctx dedicato) vanno nella sezione + del modello, NON in `[*]`. `spec-type=draft-mtp` e' valido solo sui modelli + con MTP nativo (qwen36-mtp). DeepSeek usa **DSpark** + (`spec-type=draft-dspark` + `hf-repo-draft` per il draft module separato, + che si scarica da solo da HF), mentre gemma usa un file draft separato da + configurare esplicitamente. +- `LLAMA_ARG_CTX_SIZE` resta come `Environment=` nel `.container` ed e' + ereditato da ogni istanza di modello. + +### Uso + +```bash +# Elenca i modelli disponibili nel router +curl -s localhost:8090/v1/models + +# Chat selezionando il modello tramite il campo "model" +curl -s localhost:8090/v1/chat/completions \ + -H 'Content-Type: application/json' \ + -d '{"model":"qwen36-mtp","messages":[{"role":"user","content":"ciao"}]}' +``` + +### Aggiungere un modello + +1. Aggiungi una sezione a `preset.ini` — sia in git + (`containers/llamacpp/preset.ini`) sia in + `/srv/containers/aitools/config/preset.ini` (la copia montata). + Esempio con override per-modello: + + ```ini + [chat] + hf = unsloth/altro-modello-GGUF:Q4_K_M + ctx-size = 65536 + ``` + +2. Riavvia il servizio: + + ```bash + systemctl --user daemon-reload + systemctl --user restart llamacpp.service + ``` + +> **Nota**: il Model ID cambiato. Prima era il nome del file `.gguf`; ora e' +> il nome della sezione nel preset (es. `qwen36-mtp`). Aggiorna il campo +> "model" nelle integrazioni (es. Odoo > AI). + +--- + +## Watchdog (livelock su /slots) + +`llama-server` puo' restare "livelocked" dopo la cancellazione di una +richiesta a meta' prompt-processing su uno slot senza cache riusabile, +specialmente con speculative decoding attivo su contesti molto lunghi: il +thread principale gira in loop su CPU senza mai liberare lo slot, la GPU +resta a 0% e nessuna nuova richiesta viene piu' processata. `/health` +continua pero' a rispondere "ok", quindi non e' un check affidabile; +`/slots` invece si blocca (probabilmente condivide un lock col loop +principale) ed e' il segnale usato dal watchdog qui incluso. + +I file sono in `containers/llamacpp/`: +`llamacpp-watchdog.sh`, `llamacpp-watchdog.service`, `llamacpp-watchdog.timer`. + +Installazione su host (utente non-root, stesso utente che gestisce i +quadlet): + +```bash +mkdir -p ~/scripts/llamacpp-watchdog +cp containers/llamacpp/llamacpp-watchdog.sh ~/scripts/llamacpp-watchdog/ +chmod +x ~/scripts/llamacpp-watchdog/llamacpp-watchdog.sh + +cp containers/llamacpp/llamacpp-watchdog.service ~/.config/systemd/user/ +cp containers/llamacpp/llamacpp-watchdog.timer ~/.config/systemd/user/ + +systemctl --user daemon-reload +systemctl --user enable --now llamacpp-watchdog.timer +``` + +Verifica: + +```bash +systemctl --user status llamacpp-watchdog.timer +journalctl --user -u llamacpp-watchdog.service -f +``` + +Il watchdog riavvia `llamacpp.service` dopo 3 controlli `/slots` falliti di +fila (~3 minuti), e si ferma da solo (senza piu' riavviare) se in un'ora +scatta piu' di 3 volte, per non nascondere un bug persistente dietro un +restart-loop infinito - in quel caso va guardato a mano. \ No newline at end of file diff --git a/containers/llamacpp/llamacpp.caddy b/containers/llamacpp/llamacpp.caddy index 59f9c19..b5ac0b3 100644 --- a/containers/llamacpp/llamacpp.caddy +++ b/containers/llamacpp/llamacpp.caddy @@ -21,7 +21,7 @@ @embeddings path /v1/embeddings* reverse_proxy @embeddings [ip_address]:8091 - # Chat / completions: container principale (porta 8090, modello Qwen3-Coder) + # Chat / completions: container principale (porta 8090) reverse_proxy [ip_address]:8090 log { diff --git a/containers/llamacpp/llamacpp.container b/containers/llamacpp/llamacpp.container index b15d94e..0812233 100644 --- a/containers/llamacpp/llamacpp.container +++ b/containers/llamacpp/llamacpp.container @@ -11,6 +11,7 @@ PublishPort=8090:8090 # Volumes Volume=/srv/containers/aitools/models/hf:/root/.cache/huggingface/hub +Volume=/srv/containers/aitools/config:/config # ROCm tuning AddDevice=/dev/dri/renderD128 @@ -19,21 +20,8 @@ SecurityLabelType=container_runtime_t Environment=LLAMA_ARG_HOST=0.0.0.0 Environment=LLAMA_ARG_PORT=8090 -Environment=LLAMA_ARG_LOAD_MODE=none +Environment=LLAMA_ARG_MODELS_PRESET=/config/preset.ini Environment=LLAMA_ARG_CTX_SIZE=131072 -Environment=LLAMA_ARG_HF_REPO=unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF:Q2_K - -# Improvements -Environment=LLAMA_ARG_CACHE_REUSE=256 -Environment=LLAMA_ARG_BATCH=4096 -Environment=LLAMA_ARG_UBATCH=1024 -Environment=LLAMA_ARG_CACHE_TYPE_K=q4_1 -Environment=LLAMA_ARG_CACHE_TYPE_V=q4_1 -#Environment=LLAMA_CHAT_TEMPLATE_KWARGS={"thinking":true,"reasoning_effort":"medium"} - -# MTP -Environment=LLAMA_ARG_SPEC_TYPE=draft-mtp -Environment=LLAMA_ARG_SPEC_DRAFT_N_MAX=6 # RPC — worker ggml-rpc-server (llamacpp-rpc.container), lista host:port; backend insicuro, solo su internal.network #Environment=LLAMA_ARG_RPC=llamacpp-rpc:50052 @@ -48,9 +36,9 @@ Environment=HF_TOKEN=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 # Decommentare per abilitare l'autenticazione #Environment=LLAMA_API_KEY=la-tua-chiave-segreta -# Model alias — nome con cui il server risponde alle richieste (campo "model" nell'API) -# Se non impostato, llama-server usa il nome del file .gguf come alias -#Environment=LLAMA_ARG_ALIAS=chat +# Model ID — in router mode il campo "model" dell'API e' il nome della sezione +# del preset (/config/preset.ini), es. "qwen36-mtp". Aggiorna di conseguenza +# il campo "model" nelle integrazioni (es. Odoo > AI > API Key). # Override Boot #Entrypoint=/usr/bin/sleep diff --git a/containers/llamacpp/llamacpp.nginx b/containers/llamacpp/llamacpp.nginx index 90e9543..ece5e24 100644 --- a/containers/llamacpp/llamacpp.nginx +++ b/containers/llamacpp/llamacpp.nginx @@ -58,7 +58,7 @@ server { proxy_pass http://[ip_address]:8091; } - # Chat / completions: container principale (porta 8090, modello Qwen3-Coder) + # Chat / completions: container principale (porta 8090) location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; diff --git a/containers/llamacpp/preset.ini b/containers/llamacpp/preset.ini new file mode 100644 index 0000000..58a2d27 --- /dev/null +++ b/containers/llamacpp/preset.ini @@ -0,0 +1,52 @@ +# Preset per llama-server in modalita' router +# +# Il server gira in router mode (nessun modello fisso): ogni sezione [nome] +# definisce un modello, e il nome della sezione e' il valore da passare nel +# campo "model" dell'API, es. { "model": "qwen36-mtp", "messages": [...] }. +# +# Sezione [*]: parametri di tuning globali condivisi da tutti i modelli. +# I parametri per-modello (es. MTP, ctx-size dedicato) vanno NEL sezione del +# modello, NON in [*]. +# +# Hf tag: usa il quant ESATTO del repo (prefisso UD- incluso), es. UD-IQ4_NL, +# altrimenti llama.cpp potrebbe non individuare il file. +# +# Esempi per-modello: +# [chat] +# hf = unsloth/altro-modello-GGUF:UD-Q4_K_M +# ctx-size = 65536 +# # chat-template-kwargs = {"thinking":true,"reasoning_effort":"medium"} + +version = 1 + +# Tuning globale (ereditato da ogni modello) +[*] +batch-size = 4096 +ubatch-size = 1024 +cache-type-k = q4_1 +cache-type-v = q4_1 +cache-reuse = 256 + +# MTP nativo (layers MTP nel GGUF): ~1.5-2x piu' veloce. +# Nota: MTP richiede -np 1 (parallel non supportato) e -fa on. +[qwen36-mtp] +hf = unsloth/Qwen3.6-35B-A3B-MTP-GGUF:UD-IQ4_NL +spec-type = draft-mtp +spec-draft-n-max = 2 + +# Gemma 4 (MTP tramite file draft separato "MTP Q8_0"/"MTP BF16"): +# da configurare esplicitamente con il draft model se serve; senza spec si +# carica senza speculative decoding. +[gemma4] +hf = unsloth/gemma-4-26B-A4B-it-GGUF:UD-IQ4_NL + +# DeepSeek V4 Flash: speculative decoding via DSpark (spec-type draft-dspark), +# NON draft-mtp. Il draft module e' un GGUF separato (dspark-...-Q8_0.gguf), +# auto-scaricato da HF tramite hf-repo-draft (il tag :Q8_0 individua univocamente +# il file draft, essendo il solo file "Q8_0" del repo). +[deepseek] +hf = unsloth/DeepSeek-V4-Flash-0731-GGUF:UD-IQ3_XXS +hf-repo-draft = unsloth/DeepSeek-V4-Flash-0731-GGUF:Q8_0 +spec-type = draft-dspark +spec-draft-n-max = 3 +n-gpu-layers-draft = 99 \ No newline at end of file