204 lines
7.9 KiB
Markdown
204 lines
7.9 KiB
Markdown
---
|
||
license: apache-2.0
|
||
base_model: Qwen/Qwen2.5-14B-Instruct
|
||
library_name: transformers
|
||
tags:
|
||
- soil-science
|
||
- soil-microbiome
|
||
- domain-adaptation
|
||
- continued-pretraining
|
||
- qlora
|
||
- qwen2
|
||
pipeline_tag: text-generation
|
||
language:
|
||
- en
|
||
model-index:
|
||
- name: soilfm-qwen2.5-14b-literature-cpt
|
||
results: []
|
||
---
|
||
|
||
# SoilFM Language Tower — Qwen2.5-14B Literature CPT
|
||
|
||
A domain-adapted large language model for **soil science and soil microbiology**, created by continued pretraining of [Qwen2.5-14B-Instruct](https://huggingface.co/Qwen/Qwen2.5-14B-Instruct) on 200,000 curated soil science text passages.
|
||
|
||
This model is the **Language Tower** component of [SoilFM2](https://github.com/northenlab), a multi-modal foundation model for soil microbiome analysis developed at Lawrence Berkeley National Laboratory.
|
||
|
||
## Model Details
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Base model** | Qwen/Qwen2.5-14B-Instruct (14.2B parameters) |
|
||
| **Method** | Continued pretraining via QLoRA (4-bit NF4) |
|
||
| **Format** | Full merged model (LoRA weights merged into base) |
|
||
| **Precision** | BF16 |
|
||
| **Context length** | 32,768 tokens |
|
||
| **Size on disk** | ~28 GB |
|
||
| **LoRA adapter** | Also available at [northenlab/soilfm-qwen2.5-14b-qlora](https://huggingface.co/northenlab/soilfm-qwen2.5-14b-qlora) (263 MB) |
|
||
|
||
## Intended Uses
|
||
|
||
- Generating explanations of soil microbial processes, rhizosphere ecology, and plant-microbe interactions
|
||
- Providing domain-grounded context within the SoilFM2 multi-modal pipeline (prebiotic recommendation, substrate preference prediction)
|
||
- Serving as a soil-science-aware backbone for downstream fine-tuning or RAG systems
|
||
- Research and educational applications in soil microbiology
|
||
|
||
## Training Data
|
||
|
||
The training corpus was assembled from four sources of soil science domain knowledge, stratified-sampled to 200,000 training examples and 10,000 validation examples (seed = 42):
|
||
|
||
| Source | Description | Proportion | Train | Val |
|
||
|--------|-------------|:----------:|------:|----:|
|
||
| **PubMed Central** | Full-text soil microbiology papers (39,853 articles) | 55% | 110,000 | 5,500 |
|
||
| **Wikipedia** | Soil science articles | 20% | 40,000 | 2,000 |
|
||
| **USDA Soil Survey Manual** | Official USDA technical reference | 10% | 20,000 | 1,000 |
|
||
| **Wikipedia General Biology** | Broad biology context to prevent catastrophic forgetting | 15% | 30,000 | 1,500 |
|
||
| **Total** | | **100%** | **200,000** | **10,000** |
|
||
|
||
Text was chunked to 1,024 tokens with 100-token overlap. The full corpus contained 329M tokens across 388,563 chunks; the 200K stratified subsample was used for this training run.
|
||
|
||
### Preprocessing
|
||
|
||
- PubMed Central articles retrieved via BioC JSON API, cleaned of XML artifacts
|
||
- Soil Survey Manual cleaned of page headers, footers, and index content (57 of 435 chunks removed)
|
||
- All sources standardized to JSONL format with `text` and `source` fields
|
||
|
||
## Training Procedure
|
||
|
||
### Configuration
|
||
|
||
| Parameter | Value |
|
||
|-----------|-------|
|
||
| Quantization | 4-bit NF4 (BitsAndBytes, double quantization) |
|
||
| LoRA rank | 16 |
|
||
| LoRA alpha | 32 |
|
||
| LoRA dropout | 0.05 |
|
||
| Rank-stabilized LoRA (rsLoRA) | Yes |
|
||
| Target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
|
||
| Trainable parameters | ~263M (1.85% of total) |
|
||
| Optimizer | PagedAdamW8bit |
|
||
| Learning rate | 2e-5 (cosine schedule, 10% warmup) |
|
||
| Effective batch size | 128 (micro-batch 2, gradient accumulation 64) |
|
||
| Max gradient norm | 1.0 |
|
||
| Weight decay | 0.01 |
|
||
| Precision | BF16 mixed precision |
|
||
| Flash Attention 2 | Enabled |
|
||
| Epochs | 1 |
|
||
| Total steps | 1,500 |
|
||
|
||
### Infrastructure
|
||
|
||
- **GPU**: NVIDIA A100 PCIe 80GB (RunPod)
|
||
- **Training time**: ~42 hours
|
||
- **Peak VRAM**: 54 GB (67% utilization)
|
||
|
||
### Training Script
|
||
|
||
A custom manual PyTorch training loop was used (rather than HuggingFace Trainer) for compatibility and control. The script is available in the project repository as `train_soilfm_cpt_MANUAL.py`.
|
||
|
||
## Results
|
||
|
||
### Validation Loss
|
||
|
||
| Step | Validation Loss |
|
||
|-----:|:---------------:|
|
||
| 500 | 1.7369 |
|
||
| 1,000 | 1.6281 |
|
||
| 1,500 | **1.6130** |
|
||
|
||
**Total improvement: 7.2%** over the course of training. Loss was still decreasing at the end of training with no signs of overfitting. Gradient norms remained stable in the 0.2–0.8 range throughout.
|
||
|
||
### Qualitative Evaluation
|
||
|
||
**Prompt:** *"The role of root exudates in shaping rhizosphere microbial communities involves"*
|
||
|
||
**Output:** The model produces coherent, technically accurate continuations using appropriate domain terminology (root exudates, rhizosphere, primary/secondary metabolites, phytohormones), demonstrating successful domain adaptation.
|
||
|
||
## Usage
|
||
|
||
### Direct Loading (Recommended)
|
||
|
||
```python
|
||
import torch
|
||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||
|
||
model = AutoModelForCausalLM.from_pretrained(
|
||
"northenlab/soilfm-qwen2.5-14b-literature-cpt",
|
||
torch_dtype=torch.bfloat16,
|
||
device_map="auto",
|
||
)
|
||
tokenizer = AutoTokenizer.from_pretrained(
|
||
"northenlab/soilfm-qwen2.5-14b-literature-cpt"
|
||
)
|
||
|
||
prompt = "The role of mycorrhizal fungi in soil nutrient cycling"
|
||
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
|
||
outputs = model.generate(**inputs, max_new_tokens=256)
|
||
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
||
```
|
||
|
||
### With vLLM (Production)
|
||
|
||
```bash
|
||
python3 -m vllm.entrypoints.openai.api_server \
|
||
--model northenlab/soilfm-qwen2.5-14b-literature-cpt \
|
||
--host 0.0.0.0 --port 8001
|
||
```
|
||
|
||
### LoRA Adapter Only
|
||
|
||
If you prefer to load the adapter separately (e.g., for 4-bit inference):
|
||
|
||
```python
|
||
from transformers import AutoModelForCausalLM
|
||
from peft import PeftModel
|
||
|
||
base = AutoModelForCausalLM.from_pretrained(
|
||
"Qwen/Qwen2.5-14B-Instruct",
|
||
load_in_4bit=True,
|
||
device_map="auto",
|
||
)
|
||
model = PeftModel.from_pretrained(base, "northenlab/soilfm-qwen2.5-14b-qlora")
|
||
```
|
||
|
||
## Part of SoilFM2
|
||
|
||
This Language Tower works alongside other SoilFM2 components:
|
||
|
||
| Component | Description | HuggingFace |
|
||
|-----------|-------------|-------------|
|
||
| **Language Tower** (this model) | Domain-adapted LLM | [northenlab/soilfm-qwen2.5-14b-literature-cpt](https://huggingface.co/northenlab/soilfm-qwen2.5-14b-literature-cpt) |
|
||
| **Graph Tower** | Heterogeneous GNN on 2.39M-node knowledge graph | [northenlab/soilfm2-graph-tower-joint-v0.1](https://huggingface.co/northenlab/soilfm2-graph-tower-joint-v0.1) |
|
||
| **BSPR** | Bayesian substrate preference model (AUC 0.94) | — |
|
||
|
||
Together these components power a prebiotic recommendation pipeline that takes 16S microbiome profiles as input and suggests soil amendments to steer community function.
|
||
|
||
## Use Restrictions
|
||
|
||
This model is intended for **research and non-commercial use only**. The training corpus includes PubMed Central Open Access articles under various Creative Commons licenses, some of which may carry non-commercial (CC BY-NC) terms. Users should ensure their use complies with the underlying data licenses.
|
||
|
||
The base model (Qwen2.5-14B-Instruct) is released under the Apache 2.0 license.
|
||
|
||
## Limitations
|
||
|
||
- Trained for 1 epoch on a 200K subsample of the full 667K corpus; additional training may further improve performance
|
||
- Domain adaptation was evaluated primarily via validation loss and qualitative generation; systematic benchmarking on soil science Q&A tasks is ongoing
|
||
- The model inherits the base Qwen2.5-14B-Instruct capabilities and limitations
|
||
- Not intended for medical, agricultural, or regulatory decision-making without expert review
|
||
|
||
## Citation
|
||
|
||
```bibtex
|
||
@misc{soilfm-language-tower-2025,
|
||
title={SoilFM Language Tower: Domain Adaptation of Qwen2.5-14B for Soil Science},
|
||
author={Northen Lab, Lawrence Berkeley National Laboratory},
|
||
year={2025},
|
||
publisher={HuggingFace},
|
||
url={https://huggingface.co/northenlab/soilfm-qwen2.5-14b-literature-cpt},
|
||
note={Continued pretraining on 200K soil science literature examples via QLoRA}
|
||
}
|
||
```
|
||
|
||
## License
|
||
|
||
Apache 2.0 (inherited from the base Qwen2.5-14B-Instruct model). Training data includes PubMed Central Open Access articles under various CC licenses — see **Use Restrictions** above.
|