Text Generation
PEFT
Safetensors
Transformers
English
lora
qlora
medical
research-artifact
conversational
Instructions to use Babblu2821/tinyllama-medqa-qlora with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Babblu2821/tinyllama-medqa-qlora with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0") model = PeftModel.from_pretrained(base_model, "Babblu2821/tinyllama-medqa-qlora") - Transformers
How to use Babblu2821/tinyllama-medqa-qlora with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="Babblu2821/tinyllama-medqa-qlora") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("Babblu2821/tinyllama-medqa-qlora", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Babblu2821/tinyllama-medqa-qlora with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Babblu2821/tinyllama-medqa-qlora" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Babblu2821/tinyllama-medqa-qlora", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Babblu2821/tinyllama-medqa-qlora
- SGLang
How to use Babblu2821/tinyllama-medqa-qlora 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 "Babblu2821/tinyllama-medqa-qlora" \ --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": "Babblu2821/tinyllama-medqa-qlora", "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 "Babblu2821/tinyllama-medqa-qlora" \ --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": "Babblu2821/tinyllama-medqa-qlora", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use Babblu2821/tinyllama-medqa-qlora with Docker Model Runner:
docker model run hf.co/Babblu2821/tinyllama-medqa-qlora
| base_model: TinyLlama/TinyLlama-1.1B-Chat-v1.0 | |
| library_name: peft | |
| pipeline_tag: text-generation | |
| license: apache-2.0 | |
| language: | |
| - en | |
| datasets: | |
| - keivalya/MedQuad-MedicalQnADataset | |
| tags: | |
| - base_model:adapter:TinyLlama/TinyLlama-1.1B-Chat-v1.0 | |
| - lora | |
| - qlora | |
| - peft | |
| - transformers | |
| - medical | |
| - research-artifact | |
| # tinyllama-medqa-qlora | |
| A QLoRA adapter (4-bit NF4, double-quantised) for **TinyLlama-1.1B-Chat**, fine-tuned | |
| for one epoch on [MedQuAD](https://huggingface.co/datasets/keivalya/MedQuad-MedicalQnADataset) | |
| medical Q&A. It is the **treatment arm** of a controlled comparison against LoRA on a | |
| smaller model β the other arm is | |
| [`Babblu2821/gpt2-medqa-lora`](https://huggingface.co/Babblu2821/gpt2-medqa-lora). | |
| Code, method and full results: **https://github.com/fayazhussain2821/llm-finetuning-medqa** | |
| > ## β οΈ Do not use this for medical information | |
| > | |
| > This is a **methodology demonstration**, not a medical tool. Its factual reliability | |
| > has been measured, and while it is the best arm in this project, it is still poor: on | |
| > a blinded review of 20 held-out questions it **contradicted the reference answer or | |
| > invented an entity in 35% of them**, scoring **3.25 out of 5** for factual soundness. | |
| > | |
| > It produces fluent, confident, well-formed text that is frequently wrong. Fluency is | |
| > exactly what makes this dangerous. | |
| > | |
| > Do not use it for diagnosis, treatment, triage, patient-facing text, or to answer any | |
| > real health question. | |
| ## What it is for | |
| Reproducing and studying a parameter-efficient fine-tuning comparison. Note that the | |
| project's own conclusion is a caution against over-reading this adapter: most of its | |
| advantage over the LoRA arm comes from the base model being ~9Γ larger and already | |
| instruction-tuned, not from QLoRA. See "Evaluation". | |
| ## Training | |
| | | | | |
| |---|---| | |
| | Base model | `TinyLlama/TinyLlama-1.1B-Chat-v1.0` (1.1B) | | |
| | Method | QLoRA β 4-bit NF4, double quantisation, fp16 compute | | |
| | LoRA | r=16, Ξ±=32, dropout=0.05 | | |
| | Target modules | `q_proj`, `k_proj`, `v_proj`, `o_proj` | | |
| | Data | MedQuAD, 16,407 pairs, 90/10 split, seed 42 β 14,766 train | | |
| | Epochs | 1 | | |
| | Learning rate | 2e-4, cosine schedule, 30 warmup steps | | |
| | Effective batch | 16 (4 Γ 4 accumulation) β matched to the LoRA arm | | |
| | Optimiser | `paged_adamw_8bit` | | |
| | Mixed precision | Off β QLoRA trains fp32 adapters with no grad scaler | | |
| | Max length | 1024 tokens | | |
| | Prompt format | TinyLlama's native chat template | | |
| | Hardware | Colab T4 | | |
| **Provenance.** These weights were trained on 2026-08-03 with the project's original | |
| notebook pipeline, using TRL's `SFTTrainer`. The current repository trains both arms | |
| under `transformers.Trainer` β a deliberate change, so the two arms of the comparison | |
| no longer run different training machinery. **Re-running the current code will not | |
| reproduce these exact weights.** Every published number below was measured on *these* | |
| files. | |
| ## Evaluation | |
| Scored on 1,641 held-out rows, identical rows for every arm, **answer span only** β | |
| the prompt template differs between arms and scoring it would let boilerplate move the | |
| metric. | |
| **Bits per byte** is the headline metric, not perplexity. Perplexity is per *token*, | |
| and TinyLlama's SentencePiece tokenizer differs from GPT-2's byte-level BPE, so the two | |
| perplexities are not on one scale. | |
| | run | bits/byte β | perplexity | | |
| |---|---|---| | |
| | `gpt2` (untrained control) | 0.8049 | 11.51 | | |
| | `gpt2-medqa-lora` | 0.5970 | 6.12 | | |
| | `TinyLlama-1.1B-Chat` (untrained control) | 0.6120 | 5.39 | | |
| | **`tinyllama-medqa-qlora` (this model)** | **0.3954** | **2.97** | | |
| Fine-tuning cut bits per byte by **35.4%** against its own base model. | |
| **Read the control row carefully.** Untouched TinyLlama (0.6120) is already within a | |
| few percent of *fully fine-tuned* GPT-2 (0.5970), having seen no MedQuAD at all. Most | |
| of the cross-model gap is model scale and prior instruction tuning, **not** QLoRA. An | |
| earlier version of this project reported a "53% improvement" by comparing the two | |
| fine-tuned arms' perplexities directly; that number was wrong twice over β different | |
| tokenizers, and no control. | |
| ### Generated-answer quality | |
| Greedy decoding, β€200 new tokens, 200 held-out questions: | |
| | | ROUGE-L F1 β | token F1 β | repeated 4-grams β | | |
| |---|---|---|---| | |
| | base (control) | 0.1548 | 0.2718 | 0.0101 | | |
| | **this model** | **0.2337** | **0.3435** | **0.0146** | | |
| No degeneration β the model does not loop. | |
| ### Factual soundness (blinded, 1β5) | |
| | | mean β | contradicts reference β | | |
| |---|---|---| | |
| | base (control) | 2.90 | 50% | | |
| | **this model** | **3.25** | **35%** | | |
| Fine-tuning produced **no detectable improvement in factual accuracy** (paired 95% CI | |
| β0.20 to +0.90, spanning zero), despite the automatic metrics reporting large gains. | |
| What *is* detectable is that the untouched base model already beats the fully | |
| fine-tuned GPT-2 arm by +1.10 (95% CI +0.35 to +1.85). | |
| These ratings are a human pass, rated blind to which model produced each answer, by | |
| the repository's author β one non-expert rater, not a clinician and not adjudicated by | |
| a second. An earlier LLM-judge pass over the same sheet scored every arm lower (2.70 | |
| mean, 40% contradiction for this model) but reached every identical verdict; both are | |
| published in the source repository. | |
| ## Usage | |
| ```python | |
| from peft import PeftModel | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| base_id = "TinyLlama/TinyLlama-1.1B-Chat-v1.0" | |
| base = AutoModelForCausalLM.from_pretrained(base_id) | |
| model = PeftModel.from_pretrained(base, "Babblu2821/tinyllama-medqa-qlora") | |
| tokenizer = AutoTokenizer.from_pretrained("Babblu2821/tinyllama-medqa-qlora") | |
| prompt = tokenizer.apply_chat_template( | |
| [{"role": "user", "content": "What is anemia?"}], | |
| tokenize=False, | |
| add_generation_prompt=True, | |
| ) | |
| inputs = tokenizer(prompt, return_tensors="pt") | |
| out = model.generate(**inputs, max_new_tokens=160, repetition_penalty=1.15) | |
| print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)) | |
| ``` | |
| 4-bit loading requires CUDA (`bitsandbytes`). On CPU or Apple Silicon, load in fp16 or | |
| fp32 as above β the published evaluation was run that way, in fp16 on MPS, so the | |
| figures are not bit-identical to a 4-bit run. | |
| ## Limitations | |
| - **Not factually reliable.** See the measured numbers above. | |
| - One epoch, one seed, one run β no variance estimate across training runs. | |
| - The comparison against the GPT-2 arm confounds model size, prior instruction tuning | |
| and adaptation method. Only the within-model comparison is attributable. | |
| - MedQuAD is NIH-sourced, US-centric, and frozen at collection time. | |
| - Evaluation compares against a single reference answer. | |
| ## License | |
| Apache 2.0, following the base model. The dataset carries its own license. | |