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

Upload 3 files

Browse files
Files changed (3) hide show
  1. Dockerfile +22 -19
  2. app.py +65 -64
  3. requirements.txt +3 -3
Dockerfile CHANGED
@@ -1,20 +1,23 @@
1
- FROM python:3.10-slim
2
-
3
- WORKDIR /app
4
-
5
- # Minimum sistem bağımlılıkları
6
- RUN apt-get update && apt-get install -y --no-install-recommends gcc && \
7
- apt-get clean && rm -rf /var/lib/apt/lists/*
8
-
9
- # Önbellek ayarı (Xet kullanımını devre dışı bırak)
10
- ENV HF_HUB_DISABLE_SYMLINKS_WARNING=1
11
- ENV TRANSFORMERS_OFFLINE=0
12
-
13
- COPY requirements.txt .
14
- RUN pip install --no-cache-dir -r requirements.txt
15
-
16
- COPY . .
17
-
18
- EXPOSE 7860
19
-
 
 
 
20
  CMD ["python", "app.py"]
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /app
4
+
5
+ # Minimum bağımlılıklar
6
+ RUN apt-get update && apt-get install -y --no-install-recommends gcc && \
7
+ apt-get clean && rm -rf /var/lib/apt/lists/*
8
+
9
+ # Önbellek ayarları
10
+ ENV HF_HOME=/app/cache
11
+ ENV TRANSFORMERS_OFFLINE=0
12
+
13
+ COPY requirements.txt .
14
+ RUN pip install --no-cache-dir -r requirements.txt
15
+
16
+ COPY . .
17
+
18
+ # Önbellek dizini oluştur
19
+ RUN mkdir -p /app/cache && chmod -R 777 /app/cache
20
+
21
+ EXPOSE 7860
22
+
23
  CMD ["python", "app.py"]
app.py CHANGED
@@ -1,64 +1,65 @@
1
- import os
2
- from flask import Flask, request, jsonify
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
 
 
1
+ from flask import Flask, request, jsonify
2
+ from transformers import AutoTokenizer, AutoModelForCausalLM
3
+ import torch
4
+ import logging
5
+
6
+ app = Flask(__name__)
7
+ logging.basicConfig(level=logging.INFO)
8
+ logger = logging.getLogger(__name__)
9
+
10
+ # Daha küçük Türkçe model
11
+ MODEL_NAME = "savasy/turkish-gpt2"
12
+
13
+ def load_model():
14
+ try:
15
+ logger.info("Model yükleniyor...")
16
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
17
+ model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
18
+
19
+ # CPU optimizasyonu
20
+ model = model.to('cpu')
21
+ torch.set_num_threads(1)
22
+
23
+ logger.info("Model başarıyla yüklendi")
24
+ return model, tokenizer
25
+ except Exception as e:
26
+ logger.error(f"Model yükleme hatası: {str(e)}")
27
+ raise RuntimeError("Model yüklenemedi")
28
+
29
+ @app.route('/health')
30
+ def health_check():
31
+ try:
32
+ load_model()
33
+ return jsonify({"status": "healthy"})
34
+ except Exception as e:
35
+ return jsonify({"status": "unhealthy", "error": str(e)}), 500
36
+
37
+ @app.route('/generate', methods=['POST'])
38
+ def generate():
39
+ try:
40
+ data = request.get_json()
41
+ prompt = data.get('prompt', '')[:500] # 500 karakter sınır
42
+
43
+ if not prompt:
44
+ return jsonify({"error": "Prompt gereklidir"}), 400
45
+
46
+ model, tokenizer = load_model()
47
+ inputs = tokenizer(prompt, return_tensors="pt").to('cpu')
48
+
49
+ outputs = model.generate(
50
+ inputs.input_ids,
51
+ max_length=100,
52
+ do_sample=True,
53
+ top_k=40,
54
+ temperature=0.7
55
+ )
56
+
57
+ result = tokenizer.decode(outputs[0], skip_special_tokens=True)
58
+ return jsonify({"result": result})
59
+
60
+ except Exception as e:
61
+ logger.error(f"Hata: {str(e)}")
62
+ return jsonify({"error": "İşlem sırasında hata oluştu"}), 500
63
+
64
+ if __name__ == '__main__':
65
+ app.run(host='0.0.0.0', port=7860, threaded=False)
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
- flask==2.0.3
2
- transformers==4.30.2
3
- torch==1.13.1+cpu # CPU versiyonu
4
  sentencepiece==0.1.99
 
1
+ flask==2.0.3
2
+ transformers==4.30.2
3
+ torch==1.13.1 --extra-index-url https://download.pytorch.org/whl/cpu
4
  sentencepiece==0.1.99