Instructions to use h34v7/Qwen3.5-9B-Furry-RP-Preview with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use h34v7/Qwen3.5-9B-Furry-RP-Preview with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="h34v7/Qwen3.5-9B-Furry-RP-Preview") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("h34v7/Qwen3.5-9B-Furry-RP-Preview") model = AutoModelForCausalLM.from_pretrained("h34v7/Qwen3.5-9B-Furry-RP-Preview", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.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(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use h34v7/Qwen3.5-9B-Furry-RP-Preview with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "h34v7/Qwen3.5-9B-Furry-RP-Preview" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "h34v7/Qwen3.5-9B-Furry-RP-Preview", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/h34v7/Qwen3.5-9B-Furry-RP-Preview
- SGLang
How to use h34v7/Qwen3.5-9B-Furry-RP-Preview 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 "h34v7/Qwen3.5-9B-Furry-RP-Preview" \ --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": "h34v7/Qwen3.5-9B-Furry-RP-Preview", "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 "h34v7/Qwen3.5-9B-Furry-RP-Preview" \ --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": "h34v7/Qwen3.5-9B-Furry-RP-Preview", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use h34v7/Qwen3.5-9B-Furry-RP-Preview with Docker Model Runner:
docker model run hf.co/h34v7/Qwen3.5-9B-Furry-RP-Preview
language:
- en
tags:
- qwen
- qwen3.5
- furry
- roleplay
- split-mlp
- slerp
- nf4
license: apache-2.0
library_name: transformers
pipeline_tag: text-generation
base_model: Qwen/Qwen3.5-9B
model-index:
- name: Qwen3.5-9B-Furry-RP-Preview
results: []
Qwen3.5-9B-Furry-RP-Preview
A split-MLP slerp merge β not a LoRA adapter, not a full fine-tune, but something in between.
This model was created by training a 4B Qwen3.5 with split-MLP architecture on furry roleplay data, then migrating the learned FFN patterns to the 9B base via spherical linear interpolation (slerp), followed by a brief NF4+LoRA adaptation to smooth the transition.
Total training compute: ~2.5 hours on a single RTX 4090.
Why this is different from a normal LoRA
| Normal LoRA | This model | |
|---|---|---|
| What changes | Low-rank adapters added to existing weights | The FFN intermediate dimension is expanded via slerp of trained 4B weights |
| Architecture | Original architecture preserved | intermediate_size grows from 12288 β 12416 (128 slerp dims per layer) |
| Knowledge injection | Rank-limited bottleneck (e.g. rank 16) | Full intermediate dimension weights are updated |
| Inference | Requires loading base + LoRA adapter | Single standalone model file |
| Serving | LoRA stacking/merging complexity | Drop-in replacement for original 9B |
| Merge difficulty | Naive merge can degrade base quality | Slerp preserves direction of both vectors |
How split-MLP slerp migration works
Instead of traditional fine-tuning (which modifies the entire model) or LoRA (which adds tiny bypass matrices), this technique:
Teach a smaller model first β Train a 4B Qwen with an expanded intermediate dimension (9216 β 9344) on the target domain. The FFN layers learn new roleplay patterns.
Extract and slerp β Take the trained
down_projweights from the 4B and use spherical linear interpolation to insert them into the 9B's wider FFN. The 128 new dimensions per layer are interpolated between the teacher's trained weights and random initialization.Brief NF4+LoRA polish β A short 500-step adaptation in NF4+LoRA mode to settle the interpolated dimensions into the existing representation space. Only 25M trainable params vs the full 9B.
Result: The model gains domain-specific knowledge with dramatically less compute than full fine-tuning (~2.5 hours vs ~30+ hours on single 4090), while avoiding the rank bottleneck that limits LoRA adapters.
Training details
| Parameter | 4B Training | 9B Migration |
|---|---|---|
| Base model | Qwen/Qwen3.5-4B | Qwen/Qwen3.5-9B |
| Steps | 9,000 | 500 |
| Loss | 1.69 (eval) | ~2.0 |
| Precision | bf16 | NF4 (base) + bf16 (compute) |
| Data | 43.6 MB furry RP text | Same |
| Hardware | 1Γ RTX 4090 (24 GB) | Same |
| Training time | ~2h 22m | ~2 min |
Usage
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("h34v7/Qwen3.5-9B-Furry-RP-Preview")
tokenizer = AutoTokenizer.from_pretrained("h34v7/Qwen3.5-9B-Furry-RP-Preview")
# For GPU inference with 24GB VRAM, load in 4-bit:
# model = AutoModelForCausalLM.from_pretrained("h34v7/Qwen3.5-9B-Furry-RP-Preview", load_in_4bit=True)
The model uses Qwen3.5's chat template with <|im_start|>, <|im_end|>, and <think> tags for reasoning.
Available formats
- HF (NF4): 7.2 GB β for transformers inference β [on this repo]
- GGUF Q4_K_M: 5.67 GB β for llama.cpp, koboldcpp, oobabooga β separate repo
Limitations
- Preview release β 500 quick-adapt steps is minimal
- Trained on single-source RP data (Furry-RP corpus)
- The base Qwen3.5-9B model has not been abliterated. It retains its original alignment, so it may refuse or water down NSFW roleplay and other restricted content. This is a preview of the split-MLP migration technique, not a behaviorally untrained model.
- FFN down_proj fallback to q5_0/q8_0 in GGUF (12416 dims non-divisible by 256)
Converting to bf16/fp16
This repo stores weights in NF4 (4-bit) format to save space. To get standard bf16 weights for full-precision inference or fine-tuning:
python dequantize_to_bf16.py --input ./ --output ./model-bf16 --dtype bf16
The dequantize_to_bf16.py script is included in this repo. Requirements: torch, transformers, bitsandbytes, safetensors.
What split-MLP is not
This is not an abliterated, uncensored, or alignment-removed model. The training data contains furry roleplay, but the base model's refusal patterns remain intact. If you need an unrestricted model, consider combining this technique with an abliterated base or applying additional post-processing.