|
|
|
|
|
import gradio as gr |
|
import json |
|
|
|
|
|
|
|
from utilities.setup import get_json_cfg |
|
from utilities.templates import prompt_template |
|
|
|
|
|
|
|
conf = get_json_cfg() |
|
|
|
def textbox_visibility(radio): |
|
value = radio |
|
if value == "Hugging Face Hub Dataset": |
|
return gr.Dropdown(visible=bool(1)) |
|
else: |
|
return gr.Dropdown(visible=bool(0)) |
|
|
|
def upload_visibility(radio): |
|
value = radio |
|
if value == "Upload Your Own": |
|
return gr.UploadButton(visible=bool(1)) |
|
else: |
|
return gr.UploadButton(visible=bool(0)) |
|
|
|
def greet(model_name, inject_prompt, dataset, pefts): |
|
"""The model call""" |
|
return f"Hello!! Using model: {model_name} with template: {inject_prompt}" |
|
|
|
|
|
|
|
def main(): |
|
with gr.Blocks() as demo: |
|
|
|
|
|
gr.Markdown("# Instruction Tuning with Unsloth") |
|
|
|
|
|
gr.Markdown("### Model Inputs") |
|
|
|
|
|
modelnames = conf['model']['choices'] |
|
model_name = gr.Dropdown(label="Supported Models", |
|
choices=modelnames, |
|
value=modelnames[0]) |
|
|
|
inject_prompt = gr.Textbox(label="Prompt Template", |
|
value=prompt_template()) |
|
|
|
dataset_choice = gr.Radio(label="Choose Dataset", |
|
choices=["Hugging Face Hub Dataset", "Upload Your Own"], |
|
value="Hugging Face Hub Dataset") |
|
dataset_predefined = gr.Textbox(label="Hugging Face Hub Dataset", |
|
value='yahma/alpaca-cleaned', |
|
visible=True) |
|
dataset_upload = gr.UploadButton(label="Upload Dataset (csv, jsonl, or txt)", |
|
file_types=[".csv",".jsonl", ".txt"], |
|
visible=False) |
|
data_field = gr.Textbox(label="Dataset Training Field", |
|
value=conf['model']['general']["dataset_text_field"]) |
|
dataset_choice.change(textbox_visibility, |
|
dataset_choice, |
|
dataset_predefined) |
|
dataset_choice.change(upload_visibility, |
|
dataset_choice, |
|
dataset_upload) |
|
|
|
gr.Markdown("### Model Parameter Selection") |
|
|
|
max_seq_length = gr.Textbox(label="Maximum sequence length", |
|
value=conf['model']['general']["max_seq_length"]) |
|
random_seed = gr.Textbox(label="Seed", |
|
value=conf['model']['general']["seed"]) |
|
num_epochs = gr.Textbox(label="Training Epochs", |
|
value=conf['model']['general']["num_train_epochs"]) |
|
max_steps = gr.Textbox(label="Maximum steps", |
|
value=conf['model']['general']["max_steps"]) |
|
repository = gr.Textbox(label="Repository Name", |
|
value=conf['model']['general']["repository"]) |
|
model_out_name = gr.Textbox(label="Model Output Name", |
|
value=conf['model']['general']["model_name"]) |
|
|
|
|
|
with gr.Accordion("Advanced Tuning", open=False): |
|
|
|
sftparams = conf['model']['general'] |
|
|
|
dict_string = json.dumps(dict(conf['model']['peft']), indent=4) |
|
peft = gr.Textbox(label="PEFT Parameters (json)", value=dict_string) |
|
|
|
dict_string = json.dumps(dict(conf['model']['sft']), indent=4) |
|
sft = gr.Textbox(label="SFT Parameters (json)", value=dict_string) |
|
|
|
|
|
|
|
|
|
tune_btn = gr.Button("Start Fine Tuning") |
|
gr.Markdown("### Model Progress") |
|
|
|
output = gr.Textbox(label="Output") |
|
|
|
tune_btn.click(fn=greet, |
|
inputs=[model_name, |
|
inject_prompt, |
|
dataset_predefined, |
|
peft, |
|
sft, |
|
max_seq_length, |
|
random_seed, |
|
num_epochs, |
|
max_steps, |
|
data_field, |
|
repository, |
|
model_out_name |
|
], |
|
outputs=output) |
|
|
|
demo.launch() |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
main() |