Doron Adler commited on
Commit
edd9b00
ยท
1 Parent(s): 4c03781

Proper model and tokenizer caching, some UI/flow fixes

Browse files
Files changed (1) hide show
  1. app.py +23 -23
app.py CHANGED
@@ -9,16 +9,19 @@ import random
9
  import numpy as np
10
  import torch
11
  from transformers import AutoTokenizer, AutoModelForCausalLM
 
12
 
13
- os.environ["TOKENIZERS_PARALLELISM"] = "false"
14
 
15
- @st.cache(allow_output_mutation=True)
 
 
 
16
  def load_model(model_name):
17
  tokenizer = AutoTokenizer.from_pretrained(model_name)
18
  model = AutoModelForCausalLM.from_pretrained(model_name)
19
  return model, tokenizer
20
 
21
-
22
  def extend(input_text, max_size=20, top_k=50, top_p=0.95):
23
  if len(input_text) == 0:
24
  input_text = ""
@@ -71,19 +74,16 @@ def extend(input_text, max_size=20, top_k=50, top_p=0.95):
71
  parsed_text = "ืฉื’ื™ืื”"
72
  return parsed_text
73
 
74
-
75
-
76
  if __name__ == "__main__":
77
  st.title("Hebrew GPT Neo (Small)")
78
-
79
- tokenizer = AutoTokenizer.from_pretrained("Norod78/hebrew-gpt_neo-small")
80
- model = AutoModelForCausalLM.from_pretrained("Norod78/hebrew-gpt_neo-small")
81
 
82
  stop_token = "<|endoftext|>"
83
  new_lines = "\n\n\n"
84
 
85
  np.random.seed(None)
86
- random_seed = np.random.randint(10000,size=1)
87
 
88
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
89
  n_gpu = 0 if torch.cuda.is_available()==False else torch.cuda.device_count()
@@ -94,24 +94,21 @@ if __name__ == "__main__":
94
 
95
  model.to(device)
96
 
97
- st.sidebar.subheader("Configurable parameters")
98
-
99
- max_len = st.sidebar.slider("Max-Length", 0, 512, 256,help="The maximum length of the sequence to be generated.")
100
- top_k = st.sidebar.slider("Top-K", 0, 100, 50, help="The number of highest probability vocabulary tokens to keep for top-k-filtering.")
101
- top_p = st.sidebar.slider("Top-P", 0.0, 1.0, 0.95, help="If set to float < 1, only the most probable tokens with probabilities that add up to top_p or higher are kept for generation.")
102
 
103
- st.markdown(
104
- """Hebrew text generation model based on EleutherAI's gpt-neo. Each was trained on a TPUv3-8 which was made avilable to me via the [TPU Research Cloud Program](https://sites.research.google/trc/). """
105
- )
106
 
107
- prompt = "ื”ืื™ืฉ ื”ืื—ืจื•ืŸ ื‘ืขื•ืœื ื™ืฉื‘ ืœื‘ื“ ื‘ื—ื“ืจื• ื›ืฉืœืคืชืข ื ืฉืžืขื” ื ืงื™ืฉื”"
108
- text = st.text_area("Enter text", prompt)
 
109
 
110
- if st.button("Run"):
111
  with st.spinner(text="Generating results..."):
112
  st.subheader("Result")
113
  print(f"device:{device}, n_gpu:{n_gpu}, random_seed:{random_seed}, maxlen:{max_len}, top_k:{top_k}, top_p:{top_p}")
114
- result = extend(input_text=text,
 
 
115
  max_size=int(max_len),
116
  top_k=int(top_k),
117
  top_p=float(top_p))
@@ -120,7 +117,10 @@ if __name__ == "__main__":
120
  #<div class="rtl" dir="rtl" style="text-align:right;">
121
  st.markdown(f"<p dir=\"rtl\" style=\"text-align:right;\"> {result} </p>", unsafe_allow_html=True)
122
  st.write("\n\nResult length: " + str(len(result)) + " bytes")
123
- print(f"\"{result}\"")
124
 
125
- st.markdown("<footer><hr><p style=\"font-size:12px\">By <a href=\"https://linktr.ee/Norod78\">Doron Adler</a></p></footer> ", unsafe_allow_html=True)
 
 
126
 
 
 
9
  import numpy as np
10
  import torch
11
  from transformers import AutoTokenizer, AutoModelForCausalLM
12
+ import tokenizers
13
 
14
+ #os.environ["TOKENIZERS_PARALLELISM"] = "false"
15
 
16
+ random.seed(None)
17
+ suggested_text_list = ['ืคืขื ืื—ืช, ืœืคื ื™ ืฉื ื™ื ืจื‘ื•ืช','ืฉืœื•ื, ืงื•ืจืื™ื ืœื™ ื“ื•ืจื•ืŸ ื•ืื ื™','ื‘ื•ืงืจ ื˜ื•ื‘ ืœื›ื•ืœื','ื•ืื– ื”ืคืจืชื™ ืืช ื›ืœ ื›ืœืœื™ ื”ื˜ืงืก ื›ืฉ']
18
+
19
+ @st.cache(hash_funcs={tokenizers.Tokenizer: id, tokenizers.AddedToken: id})
20
  def load_model(model_name):
21
  tokenizer = AutoTokenizer.from_pretrained(model_name)
22
  model = AutoModelForCausalLM.from_pretrained(model_name)
23
  return model, tokenizer
24
 
 
25
  def extend(input_text, max_size=20, top_k=50, top_p=0.95):
26
  if len(input_text) == 0:
27
  input_text = ""
 
74
  parsed_text = "ืฉื’ื™ืื”"
75
  return parsed_text
76
 
 
 
77
  if __name__ == "__main__":
78
  st.title("Hebrew GPT Neo (Small)")
79
+ pre_model_path = "Norod78/hebrew-gpt_neo-small"
80
+ model, tokenizer = load_model(pre_model_path)
 
81
 
82
  stop_token = "<|endoftext|>"
83
  new_lines = "\n\n\n"
84
 
85
  np.random.seed(None)
86
+ random_seed = np.random.randint(10000,size=1)
87
 
88
  device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
89
  n_gpu = 0 if torch.cuda.is_available()==False else torch.cuda.device_count()
 
94
 
95
  model.to(device)
96
 
97
+ text_area = st.text_area("Enter the first few words (or leave blank), tap on \"Generate Text\" below. Tapping again will produce a different result.", 'ื”ืื™ืฉ ื”ืื—ืจื•ืŸ ื‘ืขื•ืœื ื™ืฉื‘ ืœื‘ื“ ื‘ื—ื“ืจื• ื›ืฉืœืคืชืข ื ืฉืžืขื” ื ืงื™ืฉื”')
 
 
 
 
98
 
99
+ st.sidebar.subheader("Configurable parameters")
 
 
100
 
101
+ max_len = st.sidebar.slider("Max-Length", 0, 256, 192,help="The maximum length of the sequence to be generated.")
102
+ top_k = st.sidebar.slider("Top-K", 0, 100, 40, help="The number of highest probability vocabulary tokens to keep for top-k-filtering.")
103
+ top_p = st.sidebar.slider("Top-P", 0.0, 1.0, 0.92, help="If set to float < 1, only the most probable tokens with probabilities that add up to top_p or higher are kept for generation.")
104
 
105
+ if st.button("Generate Text"):
106
  with st.spinner(text="Generating results..."):
107
  st.subheader("Result")
108
  print(f"device:{device}, n_gpu:{n_gpu}, random_seed:{random_seed}, maxlen:{max_len}, top_k:{top_k}, top_p:{top_p}")
109
+ if len(text_area.strip()) == 0:
110
+ text_area = random.choice(suggested_text_list)
111
+ result = extend(input_text=text_area,
112
  max_size=int(max_len),
113
  top_k=int(top_k),
114
  top_p=float(top_p))
 
117
  #<div class="rtl" dir="rtl" style="text-align:right;">
118
  st.markdown(f"<p dir=\"rtl\" style=\"text-align:right;\"> {result} </p>", unsafe_allow_html=True)
119
  st.write("\n\nResult length: " + str(len(result)) + " bytes")
120
+ print(f"\"{result}\"")
121
 
122
+ st.markdown(
123
+ """Hebrew text generation model (125M parameters) based on EleutherAI's gpt-neo architecture. Originally trained on a TPUv3-8 which was made avilable to me via the [TPU Research Cloud Program](https://sites.research.google/trc/)."""
124
+ )
125
 
126
+ st.markdown("<footer><hr><p style=\"font-size:14px\">Enjoy</p><p style=\"font-size:12px\">Created by <a href=\"https://linktr.ee/Norod78\">Doron Adler</a></p></footer> ", unsafe_allow_html=True)