openfree commited on
Commit
f76958e
ยท
verified ยท
1 Parent(s): fc3d5aa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -5
app.py CHANGED
@@ -12,13 +12,27 @@ import gradio as gr
12
  import spaces
13
  import torch
14
  from loguru import logger
15
- from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
 
16
 
17
  # CSV/TXT ๋ถ„์„
18
  import pandas as pd
19
  # PDF ํ…์ŠคํŠธ ์ถ”์ถœ
20
  import PyPDF2
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  ##############################################################################
23
  # ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ ํ•จ์ˆ˜ ์ถ”๊ฐ€
24
  ##############################################################################
@@ -134,17 +148,21 @@ def do_web_search(query: str) -> str:
134
  ##############################################################################
135
  # ๋ชจ๋ธ ๋ฐ ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ (Space ํ™˜๊ฒฝ์—์„œ ์ตœ์ ํ™”)
136
  ##############################################################################
137
- @spaces.GPU
138
  def load_model(model_name="VIDraft/Gemma-3-R1984-1B", adapter_name="openfree/Gemma-3-R1984-1B-0613"):
 
 
139
  logger.info(f"๋ชจ๋ธ ๋กœ๋”ฉ ์‹œ์ž‘: {model_name} (์–ด๋Œ‘ํ„ฐ: {adapter_name})")
140
  clear_cuda_cache() # ์บ์‹œ ์ •๋ฆฌ
141
 
 
 
 
 
142
  bnb_config = BitsAndBytesConfig(
143
  load_in_4bit=True,
144
  bnb_4bit_use_double_quant=True,
145
  bnb_4bit_quant_type="nf4",
146
  bnb_4bit_compute_dtype=torch.bfloat16,
147
- # nf4_nested_quant=False, # ํ•„์š”์‹œ ํ™œ์„ฑํ™”
148
  )
149
 
150
  # ๋ฒ ์ด์Šค ๋ชจ๋ธ ๋กœ๋“œ
@@ -160,14 +178,12 @@ def load_model(model_name="VIDraft/Gemma-3-R1984-1B", adapter_name="openfree/Gem
160
  tokenizer.pad_token = tokenizer.eos_token
161
 
162
  # PEFT ์–ด๋Œ‘ํ„ฐ ๋กœ๋“œ ๋ฐ ๋ฒ ์ด์Šค ๋ชจ๋ธ์— ๋ณ‘ํ•ฉ
163
- from peft import PeftModel
164
  try:
165
  model = PeftModel.from_pretrained(model, adapter_name)
166
  logger.info(f"PEFT ์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ ๋ฐ ๋ณ‘ํ•ฉ ์™„๋ฃŒ: {adapter_name}")
167
  except Exception as e:
168
  logger.error(f"PEFT ์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ ์˜ค๋ฅ˜: {e}")
169
  logger.warning("์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค ๋ชจ๋ธ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.")
170
- # ์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ ์‹คํŒจ ์‹œ ๋ฒ ์ด์Šค ๋ชจ๋ธ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
171
 
172
  model.eval() # ์ถ”๋ก  ๋ชจ๋“œ๋กœ ์„ค์ •
173
 
@@ -290,6 +306,7 @@ def process_history(history: list[dict]) -> str:
290
  ##############################################################################
291
  def _model_gen_with_oom_catch(**kwargs):
292
  """๋ณ„๋„ ์Šค๋ ˆ๋“œ์—์„œ OutOfMemoryError๋ฅผ ์žก์•„์ฃผ๊ธฐ ์œ„ํ•ด"""
 
293
  try:
294
  model.generate(**kwargs)
295
  except torch.cuda.OutOfMemoryError:
@@ -312,6 +329,11 @@ def run(
312
  use_web_search: bool = False,
313
  web_search_query: str = "",
314
  ) -> Iterator[str]:
 
 
 
 
 
315
 
316
  try:
317
  # ์ „์ฒด ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ
 
12
  import spaces
13
  import torch
14
  from loguru import logger
15
+ from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer, BitsAndBytesConfig
16
+ from peft import PeftModel
17
 
18
  # CSV/TXT ๋ถ„์„
19
  import pandas as pd
20
  # PDF ํ…์ŠคํŠธ ์ถ”์ถœ
21
  import PyPDF2
22
 
23
+ ##############################################################################
24
+ # ์ƒ์ˆ˜ ์ •์˜
25
+ ##############################################################################
26
+ MAX_CONTENT_CHARS = 2000 # ๋ฌธ์„œ ๋‚ด์šฉ ์ตœ๋Œ€ ๋ฌธ์ž ์ˆ˜
27
+ MAX_INPUT_LENGTH = 4096 # ๋ชจ๋ธ ์ž…๋ ฅ ์ตœ๋Œ€ ํ† ํฐ ์ˆ˜
28
+
29
+ ##############################################################################
30
+ # ์ „์—ญ ๋ณ€์ˆ˜
31
+ ##############################################################################
32
+ model = None
33
+ tokenizer = None
34
+ device = None
35
+
36
  ##############################################################################
37
  # ๋ฉ”๋ชจ๋ฆฌ ์ •๋ฆฌ ํ•จ์ˆ˜ ์ถ”๊ฐ€
38
  ##############################################################################
 
148
  ##############################################################################
149
  # ๋ชจ๋ธ ๋ฐ ํ† ํฌ๋‚˜์ด์ € ๋กœ๋“œ (Space ํ™˜๊ฒฝ์—์„œ ์ตœ์ ํ™”)
150
  ##############################################################################
 
151
  def load_model(model_name="VIDraft/Gemma-3-R1984-1B", adapter_name="openfree/Gemma-3-R1984-1B-0613"):
152
+ global model, tokenizer, device
153
+
154
  logger.info(f"๋ชจ๋ธ ๋กœ๋”ฉ ์‹œ์ž‘: {model_name} (์–ด๋Œ‘ํ„ฐ: {adapter_name})")
155
  clear_cuda_cache() # ์บ์‹œ ์ •๋ฆฌ
156
 
157
+ # device ์„ค์ •
158
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
159
+ logger.info(f"Using device: {device}")
160
+
161
  bnb_config = BitsAndBytesConfig(
162
  load_in_4bit=True,
163
  bnb_4bit_use_double_quant=True,
164
  bnb_4bit_quant_type="nf4",
165
  bnb_4bit_compute_dtype=torch.bfloat16,
 
166
  )
167
 
168
  # ๋ฒ ์ด์Šค ๋ชจ๋ธ ๋กœ๋“œ
 
178
  tokenizer.pad_token = tokenizer.eos_token
179
 
180
  # PEFT ์–ด๋Œ‘ํ„ฐ ๋กœ๋“œ ๋ฐ ๋ฒ ์ด์Šค ๋ชจ๋ธ์— ๋ณ‘ํ•ฉ
 
181
  try:
182
  model = PeftModel.from_pretrained(model, adapter_name)
183
  logger.info(f"PEFT ์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ ๋ฐ ๋ณ‘ํ•ฉ ์™„๋ฃŒ: {adapter_name}")
184
  except Exception as e:
185
  logger.error(f"PEFT ์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ ์˜ค๋ฅ˜: {e}")
186
  logger.warning("์–ด๋Œ‘ํ„ฐ ๋กœ๋”ฉ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค ๋ชจ๋ธ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.")
 
187
 
188
  model.eval() # ์ถ”๋ก  ๋ชจ๋“œ๋กœ ์„ค์ •
189
 
 
306
  ##############################################################################
307
  def _model_gen_with_oom_catch(**kwargs):
308
  """๋ณ„๋„ ์Šค๋ ˆ๋“œ์—์„œ OutOfMemoryError๋ฅผ ์žก์•„์ฃผ๊ธฐ ์œ„ํ•ด"""
309
+ global model
310
  try:
311
  model.generate(**kwargs)
312
  except torch.cuda.OutOfMemoryError:
 
329
  use_web_search: bool = False,
330
  web_search_query: str = "",
331
  ) -> Iterator[str]:
332
+ global model, tokenizer
333
+
334
+ # ๋ชจ๋ธ์ด ๋กœ๋“œ๋˜์ง€ ์•Š์•˜์œผ๋ฉด ๋กœ๋“œ
335
+ if model is None or tokenizer is None:
336
+ load_model()
337
 
338
  try:
339
  # ์ „์ฒด ํ”„๋กฌํ”„ํŠธ ๊ตฌ์„ฑ