--- license: apache-2.0 library_name: peft tags: - trl - sft - generated_from_trainer - peft base_model: mistralai/Mistral-7B-v0.1 datasets: - b-mc2/sql-create-context model-index: - name: mistral-7b-text-to-sql results: [] reference: - https://www.philschmid.de/fine-tune-llms-in-2024-with-trl language: - en --- # mistral-7b-text-to-sql - This model is a fine-tuned version of [mistralai/Mistral-7B-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1) on the b-mc2/sql-create-context dataset. - These are the adapter weights, and the code to use these for generation is given below. - A full model will be uploaded at a later date. - Primary reference: https://www.philschmid.de/fine-tune-llms-in-2024-with-trl ## Model description - Model type: Language model - Language(s) (NLP): English - License: Apache 2.0 - Finetuned from model : Mistral-7B-v0.1 ## How to get started with the model ```python import torch from transformers import AutoTokenizer, pipeline from datasets import load_dataset from peft import AutoPeftModelForCausalLM from random import randint peft_model_id = "delayedkarma/mistral-7b-text-to-sql" # Load Model with PEFT adapter model = AutoPeftModelForCausalLM.from_pretrained( peft_model_id, device_map="auto", torch_dtype=torch.float16 ) tokenizer = AutoTokenizer.from_pretrained(peft_model_id) # load into pipeline pipe = pipeline("text-generation", model=model, tokenizer=tokenizer) # Load dataset and Convert dataset to OAI messages system_message = """You are a text to SQL query translator. Users will ask you questions in English and you will generate a SQL query based on the provided SCHEMA. SCHEMA: {schema}""" def create_conversation(sample): return { "messages": [ {"role": "system", "content": system_message.format(schema=sample["context"])}, {"role": "user", "content": sample["question"]}, {"role": "assistant", "content": sample["answer"]} ] } # Load dataset from the hub dataset = load_dataset("b-mc2/sql-create-context", split="train") dataset = dataset.shuffle().select(range(100)) # Convert dataset to OAI messages dataset = dataset.map(create_conversation, remove_columns=dataset.features, batched=False) dataset = dataset.train_test_split(test_size=20/100) # Evaluate eval_dataset = dataset['test'] rand_idx = randint(0, len(eval_dataset)) # Test on sample prompt = pipe.tokenizer.apply_chat_template(eval_dataset[rand_idx]["messages"][:2], tokenize=False, add_generation_prompt=True) outputs = pipe(prompt, max_new_tokens=256, do_sample=False, temperature=0.1, top_k=50, top_p=0.1, eos_token_id=pipe.tokenizer.eos_token_id, pad_token_id=pipe.tokenizer.pad_token_id) print(f"Query:\n{eval_dataset[rand_idx]['messages'][1]['content']}") print(f"Original Answer:\n{eval_dataset[rand_idx]['messages'][2]['content']}") print(f"Generated Answer:\n{outputs[0]['generated_text'][len(prompt):].strip()}") ``` ## Training procedure ### Training hyperparameters The following hyperparameters were used during training: - learning_rate: 0.0002 - train_batch_size: 3 - eval_batch_size: 8 - seed: 42 - gradient_accumulation_steps: 2 - total_train_batch_size: 6 - optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08 - lr_scheduler_type: constant - lr_scheduler_warmup_ratio: 0.03 - num_epochs: 3 ### Framework versions - PEFT 0.7.2.dev0 - Transformers 4.36.2 - Pytorch 2.2.2 - Datasets 2.16.1 - Tokenizers 0.15.2