Instructions to use ProCreations/grug-27b-v2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ProCreations/grug-27b-v2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="ProCreations/grug-27b-v2") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("ProCreations/grug-27b-v2") model = AutoModelForMultimodalLM.from_pretrained("ProCreations/grug-27b-v2", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use ProCreations/grug-27b-v2 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "ProCreations/grug-27b-v2" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ProCreations/grug-27b-v2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/ProCreations/grug-27b-v2
- SGLang
How to use ProCreations/grug-27b-v2 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "ProCreations/grug-27b-v2" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ProCreations/grug-27b-v2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "ProCreations/grug-27b-v2" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ProCreations/grug-27b-v2", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use ProCreations/grug-27b-v2 with Docker Model Runner:
docker model run hf.co/ProCreations/grug-27b-v2
Training and provenance
Grug 27B v2 starts from Qwen/Qwen3.8-27B revision 1d4bf0f2ff6012fd82039f2fa52739d0dd7c60c0. It is a new post-training run from Qwen, rather than another adapter applied to the v1.1 checkpoint. The Qwen3.5-family architecture and original vision encoder are preserved.
Main model
The training split contains 3,466 examples, with 176 examples in a task-group-disjoint validation split. The trainer evaluates a fixed 96-example subset of that validation split. Groups are split before reasoning-effort variants are expanded.
The mixture combines verified coding and math examples from training splits, verified repository repair episodes, inherited Grug agent/tool and general replay, and newly authored session-title examples. Generated code answers are tested before acceptance. Grug compression preserves final answers, tool calls, and fenced code. Long reasoning receives separate section compression to retain more of its original content. Raw inherited replay is not published.
Training uses rank-32 LoRA with alpha 64, learning rate 2e-5, microbatch 4, accumulation 2, and 1.5 nominal epochs. There are 233,455,616 trainable parameters. Only the final assistant body's reasoning, answer or tool call, and EOS contribute to loss. The maximum sequence length is 6,144; there is no cross-example packing. Overlong inherited examples are dropped whole rather than cutting off target answers.
The run completed 651 optimizer steps. Checkpoint 600 was selected by validation loss: 0.308386, compared with 0.797465 before training. The adapter is merged at scale 1.0. The split contains 4,476,496 input tokens and 968,945 supervised tokens per nominal epoch. These figures describe the data and optimization, not downstream benchmark accuracy.
The release retains the native low, medium, and xhigh effort instructions. Its default effort is medium. A template compatibility fix normalizes historical inline reasoning and the reasoning alias once, preventing duplicated reasoning wrappers. Canonical rendering was checked across 48 native cases, plus historical compatibility and idempotence checks.
The selected generation settings are temperature 0.6, top-p 0.95, top-k 20, and repetition penalty 1.05. Reserved development coding tasks were used to compare native and compact-prompt variants and temperature 1.0. The compact instruction reduced medium-effort coding accuracy, so the release keeps the native effort prompts. Release results and sampling settings are reported separately from those development probes.
Native MTP head
The main checkpoint contains all 15 native MTP tensors, including 424,699,392 head parameters. Head training freezes the entire verifier and uses its greedy next-token decisions as targets on supervised spans. The MTP input uses the backbone hidden state after final RMSNorm, matching the tested vLLM and llama.cpp implementations.
Training uses learning rate 5e-5, accumulation 4, and maximum length 2,048. The run processed 2,536 usable examples, 1,862,103 input tokens, and 801,095 supervised tokens over 634 optimizer steps. Step 500 was selected for the best held-out verifier agreement among checkpoints whose validation loss did not exceed the starting head's loss.
On 48 held-out task-group rows containing 14,853 supervised positions, draft/verifier top-1 agreement increased from 90.4396% to 90.8975%, and distillation loss decreased from 0.350240 to 0.296483. These are held-out distillation measurements, not speculative acceptance rates or speedup claims. Runtime acceptance and speed are measured separately.
All 12 original backbone shard hashes were unchanged when the head was integrated. The safetensors index adds the 15 MTP tensors, and both the wrapper and text configuration identify one MTP layer. The release generation-default update also preserves all 13 final weight shard hashes.
Every text GGUF includes this head. Its matrix tensors retain Q8_0 precision even in lower-bit main-model quantizations. Conversion provenance and checksums identify the exact files.
Compute and evaluation independence
All model generation, training, merging, quantization, and runtime testing occurred on Hugging Face Jobs. The user's local GPU was not used. Local operations were limited to orchestration, source editing, metadata checks, and analysis of saved outputs.
New training examples use training splits and separately authored tasks. HumanEval and MBPP development indices 0–31 are excluded from the reported release coding subsets. Exact issue IDs and normalized problem text from the 12 SWE-bench cases were checked against inherited replay with no matches. This does not exclude paraphrased overlap or foundation-pretraining exposure.
See training_receipt.json, mtp_training.json, training_provenance.json, and evaluation_protocol.md for machine-readable details and measurement limits.