File size: 3,308 Bytes
ada690e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66fa74c
ada690e
 
 
 
 
 
66fa74c
 
 
 
ada690e
 
 
66fa74c
 
ada690e
66fa74c
 
 
ada690e
 
66fa74c
 
ada690e
 
 
66fa74c
 
ada690e
 
 
 
 
 
 
 
 
 
 
 
66fa74c
ada690e
 
 
 
 
 
 
 
 
 
 
 
 
2a81511
ada690e
 
 
 
 
 
 
 
 
 
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
---
base_model: meta-llama/Meta-Llama-3.1-8B-Instruct
library_name: peft
pipeline_tag: text-generation
license: apache-2.0
tags:
- lora
- finance
- instruction-tuning
- english
- transformers
- adapter
---

# Llama for Finance (LoRA)

A financial-domain instruction-tuned LoRA adapter for `meta-llama/Meta-Llama-3.1-8B-Instruct`, trained with length-aware batching and an English-only heuristic.

## Model Details
- **Base model:** meta-llama/Meta-Llama-3.1-8B-Instruct  
- **Adapter type:** LoRA (PEFT)  
- **Target modules:** q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj  
- **LoRA hyperparams:** r=64, alpha=128, dropout=0.1, bias=none  
- **Precision:** fp16 (bf16 when available); gradient checkpointing on  
- **Length bucketing:** enabled (`group_by_length=True`, boundaries 512/1024/1536/2048)  
- **Context length:** up to 2048 tokens  
- **Language:** English (non-English filtered via ASCII-ratio heuristic)

## Training Data & Filtering
- **Source dataset:** `Josephgflowers/Finance-Instruct-500k`
- **Sampling caps:** max_train_samples=25k, max_val_samples=2.5k after filtering
- **Chat formatting:** preformatted `text` field with system/user/assistant turns
- **Filters:**  
  - drop rows without text  
  - English-only heuristic (`min_english_ratio`≈0.85, `min_chars_for_lang_check`=40)  
  - EOS enforced at end of samples

## Training Setup
- **Epochs:** 2  
- **Batching:** per-device train 16, grad accumulation 4 (effective 64); eval batch 8  
- **Optimizer:** paged_adamw_8bit  
- **LR / schedule:** 1e-4, cosine, warmup_ratio 0.05  
- **Regularization:** weight_decay 0.01, max_grad_norm 1.0  
- **Eval/save:** eval_steps=50, save_steps=100 (load_best_model_at_end=True)  
- **Length-aware sampler:** custom bucket sampler reduces padding waste

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

base = "meta-llama/Meta-Llama-3.1-8B-Instruct"
adapter = "TimberGu/Llama_for_Finance"

tokenizer = AutoTokenizer.from_pretrained(adapter)
tokenizer.pad_token = tokenizer.eos_token
tokenizer.padding_side = "right"  # matches training setup

dtype = torch.bfloat16 if torch.cuda.is_bf16_supported() else torch.float16
base_model = AutoModelForCausalLM.from_pretrained(base, dtype=dtype, device_map="auto")
model = PeftModel.from_pretrained(base_model, adapter)
model.eval()

prompt = "Explain what a yield curve inversion implies for equities."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=256, temperature=0.8, top_p=0.9)
print(tokenizer.decode(out[0], skip_special_tokens=True))
```

## Evaluation
- Held-out validation (`eval_50_gpt_judged_raw.jsonl`): eval_loss ≈1.05 over 2 epochs. No public benchmark beyond the filtered split.

## Limitations & Risks
- Domain-focused on finance/economics; may underperform on general tasks.
- English-centric; non-English input was filtered during training.
- Hallucinations remain possible—do not use for financial advice without human review.

## Files
- `adapter_model.safetensors`, `adapter_config.json`: LoRA weights/config
- `tokenizer.json`, `tokenizer_config.json`, `special_tokens_map.json`, `chat_template.jinja`
- `training_config.json`, `training_args.bin`, `test_results.json`