Sidhartha-Rajput commited on
Commit
5b8e8b4
·
verified ·
1 Parent(s): b007c8e

Upload generate.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. generate.py +53 -0
generate.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Standalone inference for Sid-GPT.
3
+
4
+ pip install torch tokenizers
5
+ python generate.py --prompt "Responsible for the mobile app roadmap."
6
+ """
7
+ import argparse
8
+ import os
9
+
10
+ import torch
11
+ from tokenizers import ByteLevelBPETokenizer
12
+
13
+ from model import GPT
14
+
15
+ HERE = os.path.dirname(os.path.abspath(__file__))
16
+ TEMPLATE = "Turn this into a strong, quantified PM resume bullet:\n{}"
17
+
18
+
19
+ def load(checkpoint=None, tokenizer_dir=None, device="cpu"):
20
+ tok = ByteLevelBPETokenizer(os.path.join(tokenizer_dir or os.path.join(HERE, "tokenizer"), "vocab.json"),
21
+ os.path.join(tokenizer_dir or os.path.join(HERE, "tokenizer"), "merges.txt"))
22
+ ckpt = torch.load(checkpoint or os.path.join(HERE, "sft.pt"), map_location=device, weights_only=False)
23
+ model = GPT(ckpt["config"]).to(device)
24
+ model.load_state_dict(ckpt["model"])
25
+ model.eval()
26
+ return model, tok
27
+
28
+
29
+ def rewrite(model, tok, bullet, temperature=0.5, top_k=20, max_new_tokens=70, device="cpu"):
30
+ uid, aid, eot = (tok.token_to_id(t) for t in ("<|user|>", "<|assistant|>", "<|endoftext|>"))
31
+ ids = [uid] + tok.encode(TEMPLATE.format(bullet.strip())).ids + [aid]
32
+ with torch.no_grad():
33
+ out = model.generate(torch.tensor([ids], device=device), max_new_tokens=max_new_tokens,
34
+ temperature=temperature, top_k=top_k)
35
+ new = out[0, len(ids):].tolist()
36
+ if eot in new:
37
+ new = new[:new.index(eot)]
38
+ return tok.decode(new).strip()
39
+
40
+
41
+ def main():
42
+ ap = argparse.ArgumentParser()
43
+ ap.add_argument("--prompt", required=True)
44
+ ap.add_argument("--temperature", type=float, default=0.5)
45
+ ap.add_argument("--top_k", type=int, default=20)
46
+ ap.add_argument("--max_new_tokens", type=int, default=70)
47
+ args = ap.parse_args()
48
+ model, tok = load()
49
+ print(rewrite(model, tok, args.prompt, args.temperature, args.top_k, args.max_new_tokens))
50
+
51
+
52
+ if __name__ == "__main__":
53
+ main()