peft medical en arxiv:1910.09700 base_model:lmsys/vicuna-7b-v1.5 license:llama2 region:us
---
library_name: peft
license: llama2
language:
- en
tags:
- medical
base_model: lmsys/vicuna-7b-v1.5
inference: false
---

# MindWell

MindWell is a chat assistant trained by fine-tuning [lmsys/vicuna-7b-v1.5](https://huggingface.co/lmsys/vicuna-7b-v1.5) on two symptom-based depression datasets: [BDI-Sen](https://dl.acm.org/doi/abs/10.1145/3539618.3591905) and [PsySym](https://aclanthology.org/2022.emnlp-main.677/). To expedite and optimize the fine-tuning process, we have implemented Low Rank Adaptation (LoRA) techniques, ensuring enhanced efficiency and faster adaptation.

## How to Get Started with MindWell

Use the code below to get started with the model.

```python
from peft import PeftModel
from transformers import AutoModelForCausalLM, LlamaTokenizer, GenerationConfig

config = PeftConfig.from_pretrained("irlab-udc/MindWell")
model = AutoModelForCausalLM.from_pretrained("lmsys/vicuna-13b-v1.5", device_map="auto")
model = PeftModel.from_pretrained(model, "irlab-udc/MindWell")
tokenizer = AutoTokenizer.from_pretrained("lmsys/vicuna-13b-v1.5")

def evaluate(input):
  inputs = tokenizer(input, return_tensors="pt")
  input_ids = inputs["input_ids"].cuda()
  generation_output = model.generate(
      input_ids=input_ids,
      generation_config=GenerationConfig(do_sample=True),
      return_dict_in_generate=True,
      output_scores=True,
      max_new_tokens=512,
  )
  for s in generation_output.sequences:
    output = tokenizer.decode(s)
    print("Answer:", output)

evaluate("What can you do?")
```

```
Answer: I can analyze the user's comments to determine if they exhibit any signs of depressive symptoms based on the provided list of symptoms. I will justify my decisions by means of excerpts from the user's comments. If I don't know the answer, I will truthfully say that I don't know.
```

## Training

#### Configurations and Hyperparameters

The following `LoraConfig` config was used during training:
- r: 8
- lora_alpha: 16
- target_modules: ["q_proj", "v_proj"]
- lora_dropout: 0.05
- bias: "none"
- task_type: "CAUSAL_LM"

The following `TrainingArguments` config was used during training:
- per_device_train_batch_size: 64
- gradient_accumulation_steps: 32
- warmup_steps: 100
- num_train_epochs: 20
- learning_rate: 3e-4
- fp16=True

The following `bitsandbytes` quantization config was used during training:
- quant_method: bitsandbytes
- load_in_8bit: True
- load_in_4bit: False
- llm_int8_threshold: 6.0
- llm_int8_skip_modules: None
- llm_int8_enable_fp32_cpu_offload: False
- llm_int8_has_fp16_weight: False
- bnb_4bit_quant_type: fp4
- bnb_4bit_use_double_quant: False
- bnb_4bit_compute_dtype: float32

#### Framework versions

- PyTorch 2.1.0
- PEFT 0.5.0
- 🤗 Transformers 4.34.0
- 🤗 Datasets 2.14.5
- 🤗 Tokenizers 0.14.0


## Environmental Impact

Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).

- **Hardware Type:** NVIDIA RTX 6000 Ada Generation.
- **Hours used:** 20.
- **Cloud Provider:** Private infrastructure.
- **Carbon Emitted:** 2.59 Kg. CO2 eq.