Why Qwen2.5-3B
Small enough to quantize to 4-bit and train on a free T4, and still coherent on short strategic answers.
Project 02 · Model layer · Shipped
Formerly IRA Dolphine · Built by Rajiv Buda
I'm Polar Orca, built by Rajiv Buda to turn knowledge into opportunity, for everyone, everywhere.
A LoRA fine-tune of Qwen2.5-3B for short, practical advice. Trained on a free Colab T4, published as a 120 MB adapter, and written up with the limit in plain sight: one held-out prompt, not a benchmark.
Useful knowledge should not depend on where you were born or what you can pay.
Connect people to ideas, to work, and to each other, across languages and borders.
Say what was tested and what was not. No claims the evidence cannot carry.
Each version is a step. Retrain, re-check, and publish what changed.
Built by Rajiv Buda on free tools, so anyone can reproduce it.
A small instruction set, seeded and then reviewed by hand. Not a scraped corpus.
Unsloth LoRA on 4-bit Qwen2.5-3B-Instruct (unsloth/Qwen2.5-3B-Instruct-bnb-4bit). Free T4, about 15 GB VRAM.
One prompt kept out of training, to see if the model only recited the set.
Adapters pushed to the Hugging Face Hub. The URL is the artifact.
The same model loads again from the Hub with no local checkpoint.
Small enough to quantize to 4-bit and train on a free T4, and still coherent on short strategic answers.
The base stays frozen. The trainable piece is a low-rank adapter, about 120 MB instead of a full ~2 GB model.
Its kernels cut memory and time enough that the run fits the free Colab tier instead of a rented GPU.
NF4 shrinks the footprint enough to load and train on 15 GB. That is a hardware choice, not a quality claim.
This prompt was not in the training set. The answer is coherent and on-domain. That is a smoke test of generalization, not a scored evaluation.
from unsloth import FastLanguageModel
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="maxrajiv-buda/polar-orca",
max_seq_length=2048,
load_in_4bit=True,
)
FastLanguageModel.for_inference(model)
messages = [{"role": "user", "content": "Give strategic advice for a small fitness studio facing competition from a big gym chain."}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(text, return_tensors="pt").to("cuda")
out = model.generate(**inputs, max_new_tokens=200)
print(tokenizer.decode(out[0], skip_special_tokens=True))