isahsn commited on
Commit
ed72a14
ยท
verified ยท
1 Parent(s): 2c7d3ce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -2
app.py CHANGED
@@ -1,6 +1,6 @@
1
- !pip install -q llama-cpp-python gradio transformers torch sentencepiece sacremoses openai huggingface_hub
2
  import os
3
  import re
 
4
  import gradio as gr
5
  import torch
6
  from transformers import AutoModelForCausalLM, AutoTokenizer, MarianMTModel, MarianTokenizer
@@ -14,7 +14,7 @@ from llama_cpp import Llama
14
  # 3) GPT-5 โ†’ ุนุจุฑ ุงู„ู€ OpenAI API.
15
  # ุฌู…ูŠุน ุงู„ู†ู…ุงุฐุฌ ุงู„ู…ุญู„ูŠุฉ ุชูุญู…ู‘ู„ ูƒุณูˆู„ุงู‹ ุนู†ุฏ ุฃูˆู„ ุงุณุชุฎุฏุงู… ู„ุชูˆููŠุฑ ุงู„ุฐุงูƒุฑุฉ ุนู†ุฏ ุงู„ุฅู‚ู„ุงุน.
16
  # ==========================================
17
- QWEN_MODEL = "Qwen/Qwen3-1.7B"
18
  LLAMA_LABEL = "Llama-3.1-8B-Instruct (local GGUF)"
19
  GPT_LABEL = "GPT-5 (OpenAI API)"
20
 
@@ -24,10 +24,28 @@ LLAMA_FILE = "Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf" # ~4.9GB โ€” ู„ู„ุฐ
24
  _qwen_models = {} # ุณุฌู„ู‘ ู†ู…ุงุฐุฌ Qwen ุงู„ู…ุญู…ู‘ู„ุฉ ุนุจุฑ Transformers
25
  _llama_model = {} # ุณุฌู„ู‘ ู†ู…ูˆุฐุฌ Llama ุงู„ู…ุญู…ู‘ู„ ุนุจุฑ llama-cpp
26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  # ------------------------------------------
28
  # ุชุญู…ูŠู„ Qwen ุนุจุฑ Transformers (ู…ุน ุชูƒู…ูŠู… int8 ุนู„ู‰ ุงู„ู€ CPU ู„ุชูˆููŠุฑ ุงู„ุฐุงูƒุฑุฉ)
29
  # ------------------------------------------
30
  def get_qwen_model(model_id):
 
31
  if model_id not in _qwen_models:
32
  print(f"โณ ุฌุงุฑูŠ ุชุญู…ูŠู„ ู†ู…ูˆุฐุฌ {model_id} ...")
33
  tok = AutoTokenizer.from_pretrained(model_id)
@@ -38,6 +56,7 @@ def get_qwen_model(model_id):
38
  # ุนู„ู‰ ุงู„ู€ CPU: ู†ุญู…ู‘ู„ float32 ุซู… ู†ูƒู…ู‘ู… ุงู„ุทุจู‚ุงุช ุงู„ุฎุทูŠุฉ ุฅู„ู‰ int8 (ุชูƒู…ูŠู… ุฏูŠู†ุงู…ูŠูƒูŠ)
39
  print("๐Ÿ”ป ุชุทุจูŠู‚ ุชูƒู…ูŠู… int8 ุงู„ุฏูŠู†ุงู…ูŠูƒูŠ ุนู„ู‰ CPU ู„ุชูˆููŠุฑ ุงู„ุฐุงูƒุฑุฉ ูˆุงู„ุชุณุฑูŠุน...")
40
  mdl = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32, low_cpu_mem_usage=True)
 
41
  mdl = torch.quantization.quantize_dynamic(mdl, {torch.nn.Linear}, dtype=torch.qint8)
42
  _qwen_models[model_id] = (tok, mdl)
43
  return _qwen_models[model_id]
@@ -46,6 +65,7 @@ def get_qwen_model(model_id):
46
  # ุชุญู…ูŠู„ Llama 3.1 8B ุนุจุฑ llama-cpp (GGUF 4-bit)
47
  # ------------------------------------------
48
  def get_llama_model():
 
49
  if "llm" not in _llama_model:
50
  print(f"โณ ุฌุงุฑูŠ ุชุญู…ูŠู„ ู†ู…ูˆุฐุฌ Llama 3.1 8B (ู‚ุฏ ูŠูู†ุฒู‘ู„ ~4.9GB ุฃูˆู„ ู…ุฑุฉ) ...")
51
  # n_gpu_layers=-1 ูŠุฏูุน ุงู„ุทุจู‚ุงุช ุฅู„ู‰ ุงู„ู€ GPU ุฅู† ุชูˆูู‘ุฑุŒ ูˆุฅู„ุง ูŠุจู‚ู‰ ูƒู„ ุดูŠุก ุนู„ู‰ ุงู„ู€ CPU.
 
 
1
  import os
2
  import re
3
+ import gc
4
  import gradio as gr
5
  import torch
6
  from transformers import AutoModelForCausalLM, AutoTokenizer, MarianMTModel, MarianTokenizer
 
14
  # 3) GPT-5 โ†’ ุนุจุฑ ุงู„ู€ OpenAI API.
15
  # ุฌู…ูŠุน ุงู„ู†ู…ุงุฐุฌ ุงู„ู…ุญู„ูŠุฉ ุชูุญู…ู‘ู„ ูƒุณูˆู„ุงู‹ ุนู†ุฏ ุฃูˆู„ ุงุณุชุฎุฏุงู… ู„ุชูˆููŠุฑ ุงู„ุฐุงูƒุฑุฉ ุนู†ุฏ ุงู„ุฅู‚ู„ุงุน.
16
  # ==========================================
17
+ QWEN_MODEL = "Qwen/Qwen3.5-2B"
18
  LLAMA_LABEL = "Llama-3.1-8B-Instruct (local GGUF)"
19
  GPT_LABEL = "GPT-5 (OpenAI API)"
20
 
 
24
  _qwen_models = {} # ุณุฌู„ู‘ ู†ู…ุงุฐุฌ Qwen ุงู„ู…ุญู…ู‘ู„ุฉ ุนุจุฑ Transformers
25
  _llama_model = {} # ุณุฌู„ู‘ ู†ู…ูˆุฐุฌ Llama ุงู„ู…ุญู…ู‘ู„ ุนุจุฑ llama-cpp
26
 
27
+ # ------------------------------------------
28
+ # ุชุญุฑูŠุฑ ุงู„ุฐุงูƒุฑุฉ: ู†ูุจู‚ูŠ ู†ู…ูˆุฐุฌุงู‹ ู…ุญู„ูŠุงู‹ ูˆุงุญุฏุงู‹ ูู‚ุท ููŠ ุงู„ู€ RAM ููŠ ูƒู„ ู„ุญุธุฉ.
29
+ # ู‡ุฐุง ูŠู…ู†ุน ุชุฑุงูƒู… Qwen + Llama ู…ุนุงู‹ (ุงู„ุณุจุจ ุงู„ุฑุฆูŠุณูŠ ู„ู†ูุงุฏ ุงู„ุฐุงูƒุฑุฉ ูˆุงู„ุงู†ู‡ูŠุงุฑ).
30
+ # ------------------------------------------
31
+ def _free_local_models(keep):
32
+ released = False
33
+ if keep != "qwen" and _qwen_models:
34
+ _qwen_models.clear()
35
+ released = True
36
+ if keep != "llama" and _llama_model:
37
+ _llama_model.clear()
38
+ released = True
39
+ if released:
40
+ gc.collect()
41
+ if torch.cuda.is_available():
42
+ torch.cuda.empty_cache()
43
+
44
  # ------------------------------------------
45
  # ุชุญู…ูŠู„ Qwen ุนุจุฑ Transformers (ู…ุน ุชูƒู…ูŠู… int8 ุนู„ู‰ ุงู„ู€ CPU ู„ุชูˆููŠุฑ ุงู„ุฐุงูƒุฑุฉ)
46
  # ------------------------------------------
47
  def get_qwen_model(model_id):
48
+ _free_local_models(keep="qwen") # ุญุฑู‘ุฑ Llama ู‚ุจู„ ุชุญู…ูŠู„ Qwen
49
  if model_id not in _qwen_models:
50
  print(f"โณ ุฌุงุฑูŠ ุชุญู…ูŠู„ ู†ู…ูˆุฐุฌ {model_id} ...")
51
  tok = AutoTokenizer.from_pretrained(model_id)
 
56
  # ุนู„ู‰ ุงู„ู€ CPU: ู†ุญู…ู‘ู„ float32 ุซู… ู†ูƒู…ู‘ู… ุงู„ุทุจู‚ุงุช ุงู„ุฎุทูŠุฉ ุฅู„ู‰ int8 (ุชูƒู…ูŠู… ุฏูŠู†ุงู…ูŠูƒูŠ)
57
  print("๐Ÿ”ป ุชุทุจูŠู‚ ุชูƒู…ูŠู… int8 ุงู„ุฏูŠู†ุงู…ูŠูƒูŠ ุนู„ู‰ CPU ู„ุชูˆููŠุฑ ุงู„ุฐุงูƒุฑุฉ ูˆุงู„ุชุณุฑูŠุน...")
58
  mdl = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float32, low_cpu_mem_usage=True)
59
+ mdl = mdl.to(torch.float32) # ูŠุญูˆู‘ู„ ุฃูŠ ุฃูˆุฒุงู†/buffers ุจู‚ูŠุช bfloat16 ุฅู„ู‰ float32 (ูŠุตู„ุญ ุฎุทุฃ ุงู„ุชูƒู…ูŠู…)
60
  mdl = torch.quantization.quantize_dynamic(mdl, {torch.nn.Linear}, dtype=torch.qint8)
61
  _qwen_models[model_id] = (tok, mdl)
62
  return _qwen_models[model_id]
 
65
  # ุชุญู…ูŠู„ Llama 3.1 8B ุนุจุฑ llama-cpp (GGUF 4-bit)
66
  # ------------------------------------------
67
  def get_llama_model():
68
+ _free_local_models(keep="llama") # ุญุฑู‘ุฑ Qwen ู‚ุจู„ ุชุญู…ูŠู„ Llama
69
  if "llm" not in _llama_model:
70
  print(f"โณ ุฌุงุฑูŠ ุชุญู…ูŠู„ ู†ู…ูˆุฐุฌ Llama 3.1 8B (ู‚ุฏ ูŠูู†ุฒู‘ู„ ~4.9GB ุฃูˆู„ ู…ุฑุฉ) ...")
71
  # n_gpu_layers=-1 ูŠุฏูุน ุงู„ุทุจู‚ุงุช ุฅู„ู‰ ุงู„ู€ GPU ุฅู† ุชูˆูู‘ุฑุŒ ูˆุฅู„ุง ูŠุจู‚ู‰ ูƒู„ ุดูŠุก ุนู„ู‰ ุงู„ู€ CPU.