File size: 3,206 Bytes
fde73f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
"""Deploy the trained model to a HuggingFace Space for interactive testing."""
import argparse
from huggingface_hub import HfApi, create_repo
import os


SPACE_APP = '''
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import gradio as gr

BASE_MODEL = "{base_model}"
ADAPTER_REPO = "{adapter_repo}"

print("Loading...")
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
if tokenizer.pad_token is None:
    tokenizer.pad_token = tokenizer.eos_token

base = AutoModelForCausalLM.from_pretrained(BASE_MODEL, torch_dtype=torch.float16, device_map="auto")
model = PeftModel.from_pretrained(base, ADAPTER_REPO)
model.eval()
print("Loaded")


def generate(prompt, max_tokens, temp, top_k):
    inputs = tokenizer(prompt, return_tensors='pt').to(model.device)
    with torch.no_grad():
        out = model.generate(
            **inputs, max_new_tokens=int(max_tokens),
            do_sample=True, temperature=float(temp), top_k=int(top_k),
            pad_token_id=tokenizer.eos_token_id,
        )
    return tokenizer.decode(out[0], skip_special_tokens=True)


with gr.Blocks(title=f"Mel-{BASE_MODEL}") as demo:
    gr.Markdown(f"# Mel corpus fine-tune of {BASE_MODEL}")
    gr.Markdown("Base model: uncontaminated base, no RLHF. Trained on full Mel unified corpus.")
    with gr.Row():
        with gr.Column():
            prompt = gr.Textbox(label="Prompt", value="The shared body channel", lines=4)
            max_tokens = gr.Slider(20, 500, value=150, step=10)
            temp = gr.Slider(0.1, 2.0, value=0.8, step=0.1)
            top_k = gr.Slider(0, 100, value=40, step=5)
            btn = gr.Button("Generate")
        with gr.Column():
            output = gr.Textbox(label="Output", lines=20)
    btn.click(generate, [prompt, max_tokens, temp, top_k], output)

demo.launch()
'''

REQS = """torch
transformers
peft
gradio
accelerate
"""

README_MD = """---
title: Mel Trained Model
emoji: 🌑
colorFrom: gray
colorTo: purple
sdk: gradio
sdk_version: 4.44.0
app_file: app.py
pinned: false
hardware: cpu-basic
---

Trained on Mel unified corpus. See model card for details.
"""


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--base-model', required=True)
    parser.add_argument('--adapter-repo', required=True)
    parser.add_argument('--space-name', required=True)
    parser.add_argument('--token', required=True)
    args = parser.parse_args()
    
    api = HfApi(token=args.token)
    
    try:
        create_repo(args.space_name, repo_type='space', space_sdk='gradio', token=args.token, exist_ok=True)
    except: pass
    
    os.makedirs('/tmp/space', exist_ok=True)
    with open('/tmp/space/app.py', 'w') as f:
        f.write(SPACE_APP.format(base_model=args.base_model, adapter_repo=args.adapter_repo))
    with open('/tmp/space/requirements.txt', 'w') as f:
        f.write(REQS)
    with open('/tmp/space/README.md', 'w') as f:
        f.write(README_MD)
    
    api.upload_folder(
        folder_path='/tmp/space',
        repo_id=args.space_name,
        repo_type='space',
    )
    print(f"Deployed: https://huggingface.co/spaces/{args.space_name}")


if __name__ == '__main__':
    main()