File size: 3,732 Bytes
b2cc17d
aaed90f
c4181d2
aaed90f
 
cdfaa37
2649793
 
 
b2cc17d
aaed90f
 
 
 
 
cdfaa37
 
 
aaed90f
cdfaa37
aaed90f
 
 
 
 
 
 
 
 
 
 
c4181d2
2649793
 
e7c4f2a
 
 
 
 
aaed90f
e7c4f2a
 
2649793
aaed90f
 
2649793
aaed90f
 
e7c4f2a
aaed90f
 
 
 
 
2649793
c4181d2
aaed90f
c4181d2
aaed90f
 
 
c4181d2
aaed90f
c4181d2
aaed90f
c4181d2
 
aaed90f
 
 
 
2649793
 
b2cc17d
aaed90f
 
 
 
 
 
 
 
2649793
 
e7c4f2a
aaed90f
 
 
e7c4f2a
 
 
aaed90f
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from transformers import pipeline
import os
import openai
import gc  # برای آزاد کردن حافظه
import psutil  # برای مانیتور کردن حافظه

class MultiModelSystem:
    def __init__(self):
        self.models = {}

    def load_model(self, task, model_id, use_auth_token=None):
        """مدل‌ها را به صورت lazy بارگذاری می‌کند."""
        if model_id == "OpenAI":
            return self.load_openai_model()
        else:
            return pipeline(
                task=self.get_task_type(task),
                model=model_id,
                use_auth_token=use_auth_token
            )

    def unload_model(self, task):
        """مدل بارگذاری شده را از حافظه پاک می‌کند."""
        if task in self.models:
            del self.models[task]
            gc.collect()  # جمع‌آوری حافظه

    @staticmethod
    def load_openai_model():
        """مدل ریاضی OpenAI."""
        return "OpenAI (Math)"

    @staticmethod
    def get_task_type(task):
        task_map = {
            "translation": "translation",
            "qa": "question-answering",
            "persian_nlp": "text-classification",
            "custom_ai": "text-generation",
            "math": "text-generation",
        }
        return task_map.get(task, "text-generation")

    def process_task(self, task, model_id, **kwargs):
        """مدیریت وظایف."""
        if task not in self.models:
            self.models[task] = self.load_model(task, model_id, use_auth_token=os.getenv("Passsssssss"))
        model = self.models[task]

        # پردازش وظیفه
        if task == "math":
            return self.process_math_task(kwargs.get("text"))
        else:
            return model(**kwargs)

    def process_math_task(self, text):
        """مدیریت وظایف ریاضی OpenAI."""
        try:
            response = openai.ChatCompletion.create(
                model="gpt-4",
                messages=[{"role": "user", "content": text}]
            )
            return response['choices'][0]['message']['content'].strip()
        except Exception as e:
            print(f"Error processing math task: {e}")
            return None

# مانیتورینگ حافظه
def check_memory_usage():
    mem = psutil.virtual_memory()
    print(f"Memory usage: {mem.percent}% ({mem.used / (1024 ** 3):.2f} GB used)")

# نمونه استفاده
if __name__ == "__main__":
    MODEL_CONFIG = {
        "translation": "PontifexMaximus/opus-mt-iir-en-finetuned-fa-to-en",
        "qa": "HooshvareLab/bert-fa-base-uncased",
        "math": "OpenAI",
        "persian_nlp": "HooshvareLab/bert-fa-zwnj-base",
        "custom_ai": "universitytehran/PersianMind-v1.0",
    }

    system = MultiModelSystem()

    tasks = [
        {"task": "translation", "model_id": MODEL_CONFIG["translation"], "kwargs": {"text": "سلام دنیا!", "src_lang": "fa", "tgt_lang": "en"}},
        {"task": "qa", "model_id": MODEL_CONFIG["qa"], "kwargs": {"question": "پایتخت ایران چیست؟", "context": "ایران کشوری در خاورمیانه است و پایتخت آن تهران است."}},
        {"task": "math", "model_id": MODEL_CONFIG["math"], "kwargs": {"text": "What is the integral of x^2?"}},
    ]

    for task_info in tasks:
        check_memory_usage()  # نمایش میزان حافظه
        result = system.process_task(task_info["task"], task_info["model_id"], **task_info["kwargs"])
        print(f"Result for task '{task_info['task']}':", result)
        system.unload_model(task_info["task"])  # آزادسازی حافظه
        check_memory_usage()  # دوباره بررسی حافظه