LLM कॉल्स दरम्यान तुम्ही DB कनेक्शन्स का धरून ठेवू नयेत
AI लॅटन्सी (latency) म्हणजे केवळ मॉडेल विचार करण्यात घालवलेला वेळ नाही. यामध्ये तुम्ही डेटाबेस कनेक्शन्स कसे व्यवस्थापित करता हे देखील समाविष्ट आहे.
LLM किंवा एम्बेडिंग API ची प्रतीक्षा करत असताना DB कनेक्शन धरून ठेवल्यामुळे तुमचा कनेक्शन पूल (connection pool) संपू शकतो. संथ बाह्य कॉल्स (external calls) मुळे सेशन्स गरजेपेक्षा जास्त काळ उघडे राहतात.
मी त्यांचा उपाय पाहण्यासाठी Honcho रिपॉझिटरीचा अभ्यास केला. त्यांनी एका सिंगल, दीर्घकाळ टिकणाऱ्या सेशन्सऐवजी लहान, कार्य-विशिष्ट (task-specific) सेशन्सचा वापर करण्यास सुरुवात केली.
जुना पॅटर्न (Old Pattern)
- DB सेशन उघडा
- युजर सेटिंग्स वाचा
- LLM कॉल करा (संथ)
- एम्बेडिंग API कॉल करा (संथ)
- निकाल सेव्ह करा
- DB सेशन बंद करा
नवीन पॅटर्न (New Pattern)
- प्री-फ्लाइट चेकसाठी DB सेशन उघडा
- आवश्यक व्हॅल्यूज व्हेरिएबल्समध्ये वाचा
- DB सेशन बंद करा
- LLM आणि एम्बेडिंग API कॉल करा (कोणतेही DB कनेक्शन धरून ठेवले जाणार नाही)
- निकाल सेव्ह करण्यासाठी नवीन, लहान DB सेशन उघडा
- DB सेशन बंद करा
याचा उद्देश डेटाबेस सोडून देणे हा नाही; तर ट्रान्झॅक्शन कन्सिस्टन्सी (transaction consistency) आणि नेटवर्क वेटिंग (network waiting) यांना वेगळे ठेवणे हा आहे.
तुमचे कनेक्शन्स व्यवस्थापित करण्यासाठी पाच पायऱ्या
- तुमच्या कन्सिस्टन्सीच्या सीमा (consistency boundaries) निश्चित करा.
- कोणत्याही बाह्य API कॉलपूर्वी सर्व आवश्यक व्हॅल्यूज व्हेरिएबल्समध्ये घ्या.
- डेटाबेस स्कोप (database scope) बंद करा.
- संथ बाह्य कार्ये (external tasks) पूर्ण करा.
- अंतिम निकाल कायमस्वरूपी जतन करण्यासाठी नवीन, लहान 'राईट स्कोप' (write scope) उघडा.
टीप: जर तुम्ही pgvector वापरत असाल, तर सर्च डेटाबेसच्या आत चालतो, त्यामुळे त्या ऑपरेशन दरम्यान तुम्हाला सेशन उघडे ठेवावे लागेल.
सेशनचे आयुष्य कमी केल्यामुळे स्केलिंग सुधारते, परंतु तुमच्या ORM मधील 'detached-object' एरर्सकडे लक्ष द्या आणि ट्रान्झॅक्शन स्नॅपशॉट्समध्ये डेटा कन्सिस्टंट राहतो की नाही याची खात्री करा.
Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg
Optional learning community: https://t.me/GyaanSetuAi
