File size: 10,090 Bytes
ee774c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
---
library_name: peft
license: apache-2.0
base_model: google/gemma-4-31b-it
tags:
  - pharmacovigilance
  - drug-safety
  - medical
  - peft
  - lora
  - text-generation
  - gemma
  - gemma-4
  - amd
  - mi300x
  - rocm
  - tcs-amd-hackathon
datasets:
  - custom
language:
  - en
pipeline_tag: text-generation
model-index:
  - name: gemmra
    results:
      - task:
          type: text-generation
          name: Pharmacovigilance Assessment
        metrics:
          - type: accuracy
            value: 0.862
            name: Composite Score (Weighted)
          - type: accuracy
            value: 0.995
            name: T1 Seriousness (F1 Score)
          - type: accuracy
            value: 0.667
            name: T2 MedDRA Coding (Weighted)
          - type: accuracy
            value: 0.801
            name: T3 Labelling (F1 Score)
          - type: accuracy
            value: 0.986
            name: T4 Causality (Weighted)
---

# Gemmra — Pharmacovigilance LoRA Adapter for Gemma 4 31B

**Gemmra** is a LoRA adapter that transforms Google's Gemma 4 31B-IT into a specialized pharmacovigilance assessment system. It automates four critical drug safety tasks that typically take 30 minutes per case manually — completing them in under 10 seconds with auditable reasoning traces.

Built for the **TCS & AMD AI Hackathon 2026** on AMD Instinct MI300X (192 GB HBM3).

> ⚠️ **Research Use Only.** This model is for research and educational purposes. It does not provide professional medical or regulatory advice. Do not use for clinical decision-making without expert oversight.

## Key Results

| Task | Metric | Score | Eval Samples |
|------|--------|:-----:|:------------:|
| T1: Seriousness Classification | F1 Score | **99.5%** | 1,027 |
| T2: MedDRA PT Coding | Weighted (Exact→Synonym→Fuzzy→SOC) | **66.7%** | 759 |
| T3: Drug Labelling Status | F1 Score | **80.1%** | 980 |
| T4: WHO-UMC Causality | Weighted (Exact + Partial) | **98.6%** | 794 |
| **Composite** | **Average (T1+T2+T3+T4)** | **86.2%** | **3,560** |
| Format Compliance | Structured Output Parsing | **100%** | 3,560 |

### Base Model Comparison

Evaluated on the same eval samples (base model used hand-crafted format prompts for fair comparison).

| Metric | Base Gemma 4 31B | Gemmra (SFT) | Δ |
|--------|:---:|:---:|:---:|
| T1 Seriousness (F1) | 97.7% | **99.5%** | +1.8pp |
| T2 MedDRA (Weighted) | 31.1% | **66.7%** | +35.6pp |
| T3 Labelling (F1) | 78.2% | **80.1%** | +1.9pp |
| T4 Causality (Weighted) | 84.5% | **98.6%** | +14.1pp |
| Composite | 72.9% | **86.2%** | +13.3pp |

## Model Details

- **Base Model:** [google/gemma-4-31b-it](https://huggingface.co/google/gemma-4-31b-it)
- **Method:** LoRA SFT (bf16, r=64) (WiSE-FT weight interpolation explored for reasoning recovery)
- **Training Hardware:** AMD Instinct MI300X (192 GB HBM3)
- **Precision:** bf16 (zero quantization — MI300X VRAM enables full precision)
- **Training Time:** ~1.9 hours
- **VRAM Usage:** 95 GB (training) / 61 GB (inference)

### LoRA Configuration

| Parameter | Value |
|-----------|-------|
| Rank (r) | 64 |
| Alpha (lora_alpha) | 128 |
| Dropout | 0.0 |
| Target Modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Task Type | CAUSAL_LM |
| Trainable Parameters | ~0.5% of 31B |

### WiSE-FT (Weight Interpolation Exploration)

While pure SFT (α=1.0) is the primary model deployed due to its superior accuracy across 3 out of 4 tasks and 100% format compliance, we also explored **WiSE-FT** as a research variant to recover reasoning depth. Scaling the LoRA adapter weights by α=0.9 blends SFT format compliance with base model reasoning depth. This recovers the base model's native clinical reasoning (providing 400+ words of structured thinking) at a small cost of ~4% composite accuracy.

```
θ_final = α × θ_SFT + (1 - α) × θ_base (via LoRA adapter weight scaling)
```

## Training Data

| Source | Purpose | Volume |
|--------|---------|--------|
| [FDA FAERS](https://www.fda.gov/drugs/fda-adverse-event-reporting-system-faers) | Adverse event case reports (29 quarters, 2019Q1–2026Q1) | 12M+ cases |
| [BioDEX](https://github.com/KarelDO/BioDEX) | Biomedical literature → MedDRA PT mapping | T2 pairs |
| [OnSIDES](https://github.com/tatonetti-lab/onsides) | Drug label side effects → labelling ground truth | T3 pairs |

- **Training pairs:** 32,355 instruction-completion pairs
- **Eval samples:** 3,560 (content-hash decontaminated, MeditronFO-inspired splitting)
- **Diversity:** 93–99% unique completions via Combinatorial Diversity Engine

### Data Challenges Solved
1. **MedDRA is proprietary** — engineered PT training from BioDEX open literature
2. **FDA redacts doctor narratives** — built structured prompts from remaining FAERS fields
3. **BioDEX truncation** — abstracts cut at 500 chars hid ground truth from 92% of T2 data; fixing this single line gave 2.1× improvement
4. **Train/eval leakage** — content-hash splitting ensures zero contamination

## Usage

### Loading the Adapter

```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel

# Load base model (requires ~62 GB VRAM in bf16)
base_model = AutoModelForCausalLM.from_pretrained(
    "google/gemma-4-31b-it",
    torch_dtype=torch.bfloat16,
    device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("google/gemma-4-31b-it")

# Load Gemmra LoRA adapter
model = PeftModel.from_pretrained(base_model, "Amaltrkmr/gemmra")
```

### Running Inference

```python
messages = [
    {"role": "system", "content": "You are a pharmacovigilance expert. Assess whether this adverse event case is SERIOUS per ICH E2A criteria (Death, Life-threatening, Hospitalization, Disability, Congenital anomaly). Think step by step, then provide your structured assessment."},
    {"role": "user", "content": """Patient: 69-year-old female
Drug: ACTEMRA (tocilizumab)
Adverse events: Cardiac arrest, Pulmonary embolism, Acute kidney injury, Haemodialysis, Platelet count decreased
Outcome: Patient did not survive"""}
]

prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=1024, temperature=0.1, do_sample=True)

response = tokenizer.decode(outputs[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(response)
```

**Expected Output:**
```
SERIOUS: YES
Criteria met: DE (Death), LT (Life-threatening), HO (Hospitalization), DS (Disability)
Rationale: The clinical outcome meets multiple seriousness categories, confirming serious classification.
```

### Using with Unsloth (Faster)

```python
from unsloth import FastLanguageModel
import torch

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="google/gemma-4-31b-it",
    max_seq_length=8192,
    load_in_4bit=False,
    dtype=torch.bfloat16,
)

from peft import PeftModel
model = PeftModel.from_pretrained(model, "Amaltrkmr/gemmra")
FastLanguageModel.for_inference(model)
```

## Four Pharmacovigilance Tasks

| Task | Input | Output | Regulatory Framework |
|------|-------|--------|---------------------|
| T1: Seriousness | Patient demographics, AEs, outcomes | SERIOUS: YES/NO + criteria (DE/LT/HO/DS/CA) | ICH E2A |
| T2: MedDRA Coding | Adverse event narrative | MedDRA Preferred Term | MedDRA hierarchy |
| T3: Labelling | Drug name + adverse event | LABELLED: YES/NO + evidence | Drug product labels |
| T4: Causality | Full case context | WHO-UMC category + 6-dim evidence | WHO-UMC criteria |

## Training Pipeline

```
FAERS + BioDEX + OnSIDES

Combinatorial Diversity Engine → 32,355 pairs

SFT (bf16 LoRA r=64 on MI300X, ~1.9 hrs) → Primary Adapter ✅

WiSE-FT exploration (α=0.9) → Explored reasoning variant

GRPO validation → +0.003 composite improvement → validated SFT ceiling

Evaluation (3,560 decontaminated samples)

This Adapter ✅
```

## Hardware Requirements

| Setup | VRAM Required | Notes |
|-------|:---:|-------|
| bf16 inference | ~62 GB | AMD MI300X (192 GB) ✅, 2× A100 80 GB ✅ |
| 4-bit inference | ~18 GB | Single A100/RTX 4090 |
| bf16 training (LoRA r=64) | ~95 GB | AMD MI300X only — impossible on single NVIDIA GPU |

## AMD MI300X Advantage

Training this model at bf16 precision with LoRA r=64 across all 7 linear layer types requires 95 GB VRAM. This is physically impossible on any single NVIDIA GPU (A100/H100 max at 80 GB). AMD MI300X's 192 GB HBM3 is the enabling technology — zero quantization means higher quality gradients and a better final model.

## Limitations

- **MedDRA vocabulary:** Trained on BioDEX-derived PTs (~5,000 terms), not the full proprietary MedDRA dictionary (80,000+ PTs). T2 accuracy will improve with dictionary augmentation.
- **Data source:** FDA FAERS data has known limitations — doctor narratives are redacted, outcome codes can be inconsistent.
- **Not a medical device:** Outputs require expert review before regulatory submission.
- **English only:** Trained exclusively on English-language adverse event reports.

## Citation

```bibtex
@misc{gemmra2026,
  title={Gemmra: Multi-Task Pharmacovigilance Assessment with Fine-Tuned Gemma 4 on AMD MI300X},
  author={Amal T R and Bhaskar Jha},
  year={2026},
  howpublished={TCS \& AMD AI Hackathon 2026},
  url={https://github.com/bhaskarjha-dev/gemmra}
}
```

## Contributors

- **[Amal T R](https://huggingface.co/Amaltrkmr)** — Model training, evaluation, data pipeline, WiSE-FT research
- **[Bhaskar Jha](https://huggingface.co/bhaskarjha-dev)** — Architecture, data engineering, website, presentation, system design

## Links

- 🌐 **Website:** [gemmra.bhaskarjha.dev](https://gemmra.bhaskarjha.dev)
- 💻 **GitHub:** [bhaskarjha-dev/gemmra](https://github.com/bhaskarjha-dev/gemmra) (upstream: [amaltr/gemmra](https://github.com/amaltr/gemmra))
- 🏆 **Hackathon:** TCS & AMD AI Hackathon 2026 — Track: Fine-Tuning (FINETUNING_005)