# Mistral Small 4 (official NVFP4) on ana-ml2 GPU 0 — copy to .env on the host. # Real .env lives on ana-ml2 at /opt/docker/compose/mistral-small-4/.env (gitignored). # # See compose.yaml header for the NVFP4/TP=1/MLA rationale and the vLLM>=0.20 floor. # PINNED to v0.22.0 — the last release BEFORE the Mistral multimodal regression # (#44911, MistralCommonImageProcessor.fetch_images, landed ~0.22.1; 0.23.0 is # affected). v0.22.0 loads the NVFP4 (compressed-tensors) AND serves VISION — # verified: half-blue/half-red image read correctly ("left blue, right red"). # This gives a working vision tower as the abliteration/tuning baseline. Do NOT # bump to 0.23.0 (breaks vision). reasoning_effort works (none/high only) but # reasoning_content-splitting is unreliable on this version — vision is the # priority. Revisit when vLLM patches the Mistral mm path on a newer release. MISTRAL_IMAGE=vllm/vllm-openai:v0.22.0 MISTRAL_CONTAINER_NAME=vllm-mistral4 MISTRAL_MODEL=mistralai/Mistral-Small-4-119B-2603-NVFP4 MISTRAL_PORT=8010 # GPU 0 = the free 96 GB Blackwell card, dedicated single-tenant to this model # (74.4 GB weights leave no room to co-tenant). GPU 1 holds qwen36 + granite + # the embed/rerank/reward trio. MISTRAL_GPU_ID=0 # util 0.93 (~89 GB budget) — measured 66.1 GiB weights + 0.8 GiB graph + ~18.5 GiB # KV. MLA keeps KV compressed, so the FULL native 256K context fits (verified). MISTRAL_GPU_MEM_UTIL=0.93 # 262144 = native 256K (for novel-length consistency-checking). The KV pool is # util-bound (~862K tokens) regardless of max-len, so 256K costs no extra VRAM — # it just lets one request use up to 256K (→ max concurrency 3.29x at full length). MISTRAL_MAX_MODEL_LEN=262144 # 32 (halved from 64 when going to 256K): the warmup transient scales with # max-num-seqs × max-model-len, so halving seqs while doubling len keeps it flat # and fits the tight card. 32 is ample — this is a low-concurrency creative model. MISTRAL_MAX_NUM_SEQS=32 # Optional — model is ungated (Apache-2.0), no token needed. HF_TOKEN= API_KEY=