lap096 commited on
Commit
0f71bae
·
verified ·
1 Parent(s): 5760dfc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -10
app.py CHANGED
@@ -1,15 +1,63 @@
1
- # app.py
2
- from transformers import GPT2Tokenizer, GPT2LMHeadModel
3
  import gradio as gr
 
 
 
4
 
5
- # Load the tiny pretrained GPT model
6
- tokenizer = GPT2Tokenizer.from_pretrained("./tiny-gpt")
7
- model = GPT2LMHeadModel.from_pretrained("./tiny-gpt")
8
 
9
- def generate_text(prompt):
10
- inputs = tokenizer(prompt, return_tensors="pt")
11
- outputs = model.generate(**inputs, max_length=50)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  return tokenizer.decode(outputs[0], skip_special_tokens=True)
13
 
14
- # Gradio web interface
15
- gr.Interface(fn=generate_text, inputs="text", outputs="text").launch()
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ from transformers import GPT2Config, GPT2LMHeadModel, GPT2Tokenizer
3
+ from datasets import load_dataset
4
+ import torch
5
 
6
+ # Load tokenizer
7
+ tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
8
+ tokenizer.pad_token = tokenizer.eos_token
9
 
10
+ # EXTREMELY tiny model
11
+ config = GPT2Config(
12
+ vocab_size=tokenizer.vocab_size,
13
+ n_embd=64,
14
+ n_layer=1,
15
+ n_head=1,
16
+ n_positions=64,
17
+ n_ctx=64
18
+ )
19
+
20
+ model = GPT2LMHeadModel(config)
21
+
22
+ # Load VERY small dataset
23
+ dataset = load_dataset("wikitext", "wikitext-2-raw-v1", split="train[:0.1%]")
24
+
25
+ def tokenize(x):
26
+ return tokenizer(
27
+ x["text"],
28
+ truncation=True,
29
+ padding="max_length",
30
+ max_length=64
31
+ )
32
+
33
+ dataset = dataset.map(tokenize)
34
+ dataset.set_format(type="torch", columns=["input_ids"])
35
+
36
+ # ONE tiny training loop
37
+ optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3)
38
+
39
+ for step, batch in enumerate(dataset):
40
+ if step > 50: # HARD LIMIT
41
+ break
42
+ outputs = model(
43
+ input_ids=batch["input_ids"].unsqueeze(0),
44
+ labels=batch["input_ids"].unsqueeze(0)
45
+ )
46
+ loss = outputs.loss
47
+ loss.backward()
48
+ optimizer.step()
49
+ optimizer.zero_grad()
50
+
51
+ print("Tiny training finished")
52
+
53
+ def generate(text):
54
+ inputs = tokenizer(text, return_tensors="pt")
55
+ outputs = model.generate(inputs["input_ids"], max_length=50)
56
  return tokenizer.decode(outputs[0], skip_special_tokens=True)
57
 
58
+ gr.Interface(
59
+ fn=generate,
60
+ inputs="text",
61
+ outputs="text",
62
+ title="agent_1 (trained inside Space)"
63
+ ).launch()