RAG (Retrieval‑Augmented Generation) පද්ධතියක් පරීක්ෂා කරන අතරතුර, එක් ලේඛනයක් සම්පූර්ණයෙන් ආයාත කර ගැනීමට සෙකන්ඩ් 50 කට ආසන්න කාලයක් ගත වන බවක් අපට ගැළපුණා. මොන වගේද කියලා බලද්දී, CPU එක බොහෝ වෙලාවක් නිශ්ශබ්දව ඉඳලා, ජාලයෙහි HTTP ඉල්ලීම් පිළිතුරු බලා ඉන්න තත්වයක් පෙනුණා.
මෙම ගැටළුවට මුලික හේතුව වුණේ සම්පූර්ණයෙන්ම blocking (අවහිර) ආකාරයේ ඉල්ලීම් යොදා ගැනීමයි. එක් එක් කුඩා පෙළ කොටසකට (chunk) සමානව 1.5 සෙකන්ඩ් පමණ කාලයක් නෙට්වර්ක් ප්රතිචාරයක් බලා ඉන්න නිසා, 33 කොටස් සමඟ මුළු කාලය 49.6 සෙකන්ඩ් පමණ වුණා.
මෙම අවස්ථාවේදී, Python හි asyncio සහ aiohttp භාවිතා කර non‑blocking ආකාරයට ඉල්ලීම් එකවරම යැවීමෙන් කාලය 1.56 සෙකන්ඩ් දක්වා අඩු වුණා. එනම්, 31.8 ගුණයක් වේගවත් වූ තත්ත්වයක්. මෙහිදී, CPU එක තවත් නිදහස්ව වැඩ කරගැනීමට හැකියාව ලැබුණු නිසා, පද්ධතියේ සම්පූර්ණ කාර්යක්ෂමතාව වැඩි වුණා.
කේත වෙනස් කිරීම ඉතා සරළයි. පෙරදී අපි requests පුස්තකාලය භාවිතා කර ලුහුබැඳි ලූපයක් තුළ ඉල්ලීම් කළා. එය පහත පරිදි වෙනස් කළා:
- අවශ්ය මොඩියුලයන්
asyncioහාaiohttpආයාත කිරීම. - එක් එක් ඉල්ලීම සඳහා async function එකක් නිර්මාණය කිරීම.
- සියලු ඉල්ලීම් එක්වරම ක්රියාත්මක කිරීම සඳහා
asyncio.gatherභාවිතා කිරීම.
ඉතිරියට, boto3 SDK භාවිතා කරනවානම් aioboto3 හෝ asyncio.to_thread() මඟින් blocking කොඩ් බ්ලොක් ඉවත් කළ හැකිය.
ශ්රී ලංකාවට ඇති වැදගත්කම
- ශිෂ්යයන් – AI පර්යේෂණ හා පද්ධති සංවර්ධනයේ වේගවත් ප්රතිඵල ලබා ගැනීමට, කාර්යක්ෂම කේත ලියනයේ නව පාරදර්ශන ඉගෙන ගත හැක.
- ඩිවෙලොපර්වරු – AWS Bedrock වැනි cloud සේවාවන් සමඟ async පරිසරයක් ගොඩනැගීමේ හැකියාව, පද්ධති පරිමාණය වැඩි කිරීමේදී වියදම අඩු කරයි.
- ව්යාපාර – ලොකු පරිමාණයේ දත්ත ආයාත වැඩසටහන් තත්පර කිහිපයකින් සම්පූර්ණ කර, සේවා නඩත්තු කාලය හා පාරිභෝගික ප්රතිචාර වේගය වැඩි කරයි.
අවසානයේ, එකම ගොනුව (embedder.py) වෙනස් කිරීමෙන් පද්ධතියේ bottleneck එක ඉවත් කර, ඉදිරියේදී වැඩි ධාරිතාව සහ අඩු latency එකක් සමඟ AI‑චලිත යෙදුම් ඉදිරිපත් කිරීමේ හැකියාව ලැබේ.