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.
|