azmisahin commited on
Commit
301cc78
·
verified ·
1 Parent(s): 716480d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -43
app.py CHANGED
@@ -3,74 +3,62 @@ from flask import Flask, request, jsonify
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import torch
5
  import logging
6
- from functools import lru_cache
7
 
8
  app = Flask(__name__)
9
  logging.basicConfig(level=logging.INFO)
10
  logger = logging.getLogger(__name__)
11
 
12
- # Model ayarları
13
- MODEL_NAME = "redrussianarmy/gpt2-turkish-cased"
14
- ALTERNATIVE_MODEL = "savasy/bert-base-turkish-uncased" # Yedek model
15
- CACHE_DIR = "/app/cache" # Dockerfile ile uyumlu
16
 
17
- @lru_cache(maxsize=1)
18
  def load_model():
19
- logger.info("Model yükleniyor...")
20
  try:
21
- # Önce ana modeli dene
22
- tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, cache_dir=CACHE_DIR)
23
- model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, cache_dir=CACHE_DIR)
24
- logger.info("Ana model başarıyla yüklendi")
 
 
 
 
 
25
  return model, tokenizer
26
  except Exception as e:
27
- logger.error(f"Ana model hatası: {str(e)}")
28
- try:
29
- # Yedek modeli dene
30
- logger.info("Yedek model deniyor...")
31
- tokenizer = AutoTokenizer.from_pretrained(ALTERNATIVE_MODEL, cache_dir=CACHE_DIR)
32
- model = AutoModelForCausalLM.from_pretrained(ALTERNATIVE_MODEL, cache_dir=CACHE_DIR)
33
- logger.info("Yedek model başarıyla yüklendi")
34
- return model, tokenizer
35
- except Exception as alt_e:
36
- logger.error(f"Yedek model hatası: {str(alt_e)}")
37
- raise RuntimeError("Hiçbir model yüklenemedi")
38
 
39
- @app.route('/health')
40
- def health_check():
41
- try:
42
- model, _ = load_model()
43
- return jsonify({"status": "healthy", "model": MODEL_NAME if model else ALTERNATIVE_MODEL})
44
- except Exception as e:
45
- return jsonify({"status": "unhealthy", "error": str(e)}), 500
46
 
47
  @app.route('/generate', methods=['POST'])
48
  def generate():
49
  try:
50
  data = request.get_json()
51
- prompt = data.get('prompt', '')
 
52
  if not prompt:
53
  return jsonify({"error": "Prompt gereklidir"}), 400
54
 
55
  model, tokenizer = load_model()
56
- inputs = tokenizer(prompt, return_tensors="pt")
57
 
58
- with torch.no_grad():
59
- outputs = model.generate(
60
- inputs.input_ids,
61
- max_length=100,
62
- do_sample=True,
63
- top_k=50,
64
- top_p=0.95,
65
- temperature=0.7
66
- )
67
 
68
  result = tokenizer.decode(outputs[0], skip_special_tokens=True)
69
  return jsonify({"result": result})
70
 
71
  except Exception as e:
72
- logger.error(f"Generate hatası: {str(e)}")
73
- return jsonify({"error": str(e)}), 500
74
 
75
  if __name__ == '__main__':
76
- app.run(host='0.0.0.0', port=7860)
 
3
  from transformers import AutoTokenizer, AutoModelForCausalLM
4
  import torch
5
  import logging
 
6
 
7
  app = Flask(__name__)
8
  logging.basicConfig(level=logging.INFO)
9
  logger = logging.getLogger(__name__)
10
 
11
+ # Daha küçük bir Türkçe model seçimi (CPU dostu)
12
+ MODEL_NAME = "savasy/turkish-gpt2" # 300MB boyutunda
 
 
13
 
 
14
  def load_model():
 
15
  try:
16
+ logger.info("Küçük Türkçe model yükleniyor...")
17
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
18
+ model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
19
+
20
+ # CPU optimizasyonu
21
+ model = model.to('cpu')
22
+ torch.set_num_threads(1) # Tek çekirdek kullan
23
+
24
+ logger.info("Model başarıyla yüklendi")
25
  return model, tokenizer
26
  except Exception as e:
27
+ logger.error(f"Model yükleme hatası: {str(e)}")
28
+ raise RuntimeError("Model yüklenemedi")
 
 
 
 
 
 
 
 
 
29
 
30
+ @app.route('/')
31
+ def home():
32
+ return "Türkçe GPT-2 API Çalışıyor"
 
 
 
 
33
 
34
  @app.route('/generate', methods=['POST'])
35
  def generate():
36
  try:
37
  data = request.get_json()
38
+ prompt = data.get('prompt', '')[:500] # 500 karakterle sınırla
39
+
40
  if not prompt:
41
  return jsonify({"error": "Prompt gereklidir"}), 400
42
 
43
  model, tokenizer = load_model()
44
+ inputs = tokenizer(prompt, return_tensors="pt").to('cpu')
45
 
46
+ # CPU için optimize edilmiş üretim
47
+ outputs = model.generate(
48
+ inputs.input_ids,
49
+ max_length=100, # Daha kısa çıktı
50
+ do_sample=True,
51
+ top_k=40,
52
+ temperature=0.7,
53
+ pad_token_id=tokenizer.eos_token_id
54
+ )
55
 
56
  result = tokenizer.decode(outputs[0], skip_special_tokens=True)
57
  return jsonify({"result": result})
58
 
59
  except Exception as e:
60
+ logger.error(f"Hata: {str(e)}")
61
+ return jsonify({"error": "İşlem sırasında hata oluştu"}), 500
62
 
63
  if __name__ == '__main__':
64
+ app.run(host='0.0.0.0', port=7860, threaded=False) # threaded=False CPU için daha iyi