𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗮𝗻𝗱 𝗣𝗮𝗴𝗲𝗱𝗔𝘁𝘁𝗲𝗻𝘁𝗶𝗼𝗻: 𝗪𝗵𝘆 𝗬𝗼𝘂𝗿 𝗟𝗟𝗠 𝗦𝗲𝗿𝘃𝗲𝗿 𝗦𝗹𝗼𝘄𝘀 𝗗𝗼𝘄𝗻

உங்கள் LLM சர்வர் மெதுவாக இயங்குகிறது.

நீங்கள் நான்கு A100 GPUs-களில் ஒரு 70B மாடலை நிறுவியுள்ளீர்கள். காலை 8 மணிக்கு எல்லாம் சரியாகத் தெரிகிறது. மதிய உணவிற்குள், தாமதம் (latency) இருமடங்காகிறது. உங்கள் நினைவகத்தைச் (memory) சரிபார்க்கிறீர்கள். அதில் பெரும்பாலானவை "tensor buffers" மூலம் ஆக்கிரமிக்கப்பட்டுள்ளன. இவை உண்மையில் பழைய உரையாடல்களிலிருந்து சேமிக்கப்பட்ட நிலைகள் (cached states) ஆகும்.

இதுதான் KV cache பிரச்சனை. உற்பத்தி நிலையில் (production) LLM சேவையைப் பயன்படுத்துவதில் இதுவே மிகப்பெரிய தடையாகும் (bottleneck).

KV cache என்றால் என்ன?

ஒவ்வொரு transformer மாடலும் டோக்கன்களை (tokens) ஒவ்வொன்றாக உருவாக்குகிறது. ஒரு புதிய டோக்கனை உருவாக்க, மாடலுக்கு முந்தைய அனைத்து டோக்கன்களிலிருந்தும் Key மற்றும் Value டென்சர்கள் (tensors) தேவைப்படுகின்றன. இவற்றை ஒவ்வொரு முறையும் மீண்டும் கணக்கிடுவது மிகவும் மெதுவானது. அதற்குப் பதிலாக, இன்ஜின் அவற்றைச் சேமித்து வைக்கிறது. இந்தச் சேமிப்பகமே KV cache ஆகும்.

நினைவகப் பிரச்சனை:

ஒரு Llama 3.1 70B மாடலுக்கு, ஒரு 4096-டோக்கன் வரிசைக்கு (sequence) சுமார் 1.3 GB நினைவகம் தேவைப்படுகிறது.

ஒரே நேரத்தில் 256 பயனர்கள் இருந்தால், உங்களுக்கு 336 GB நினைவகம் தேவைப்படும். இது நான்கு A100 GPUs-களால் தாங்கக்கூடிய அளவை விட அதிகம். KV cache மிக வேகமாக வளர்வதால், இது பெரும்பாலும் மாடல் எடைகளை (model weights) விட அதிக நினைவகத்தைப் பயன்படுத்துகிறது.

பாரம்பரிய நினைவக மேலாண்மை (Traditional memory management) தோல்வியடைவதற்கு காரணங்கள்:

  • Internal fragmentation: நீங்கள் 4096 டோக்கன்களுக்கு இடம் ஒதுக்குகிறீர்கள், ஆனால் 300 மட்டுமே பயன்படுத்துகிறீர்கள். இதனால் அந்த இடத்தின் 93% வீணாகிறது.
  • No sharing: ஒரே சிஸ்டம் பிராம்ப்ட் (system prompt) கொண்ட இரண்டு பயனர்கள், அந்த பிராம்ப்ட்டின் தனித்தனி நகல்களைச் சேமிக்கிறார்கள்.
  • All-or-nothing eviction: நினைவகம் தீர்ந்துவிடும்போது, நீங்கள் முழு வரிசையையும் (entire sequence) CPU-க்கு மாற்ற வேண்டும். இது GPU-வை முடக்குகிறது.

PagedAttention இதை எவ்வாறு சரிசெய்கிறது:

PagedAttention ஒரு இயங்குதளத்தைப் (operating system) போலச் செயல்படுகிறது. இது KV cache-ஐ 'pages' எனப்படும் சிறிய, நிலையான அளவு கொண்ட தொகுதிகளாகப் பிரிக்கிறது.

இது மூன்று முக்கியப் பிரச்சனைகளைத் தீர்க்கிறது:

  • On-demand allocation: ஒரு வரிசை வளர வளர மட்டுமே அதற்கெனப் பக்கங்களை (pages) எடுத்துக்கொள்ளும். பயன்படுத்தப்படாத திறனுக்காக நீங்கள் நினைவகத்தை வீணடிக்கத் தேவையில்லை.
  • Shared prefix support: ஒரே சிஸ்டம் பிராம்ப்ட்டிற்காகப் பல பயனர்கள் ஒரே இயற்பியல் பக்கங்களைப் (physical pages) பகிர்ந்து கொள்ளலாம். இது நினைவகத்தை பெருமளவில் சேமிக்க "copy-on-write" தர்க்கத்தைப் பயன்படுத்துகிறது.
  • Fine-grained eviction: நினைவகம் நிரம்பும்போது, சிஸ்டம் பெரிய வரிசைகளுக்குப் பதிலாகச் சிறிய பக்கங்களை மட்டும் CPU-க்கு மாற்றுகிறது.

முடிவு:

PagedAttention-ஐப் பயன்படுத்துவதன் மூலம் (vLLM-க்குள் இருக்கும் தொழில்நுட்பம்), பாரம்பரிய முறைகளுடன் ஒப்பிடும்போது செயல்திறனை (throughput) 2 முதல் 4 மடங்கு வரை அதிகரிக்க முடியும்.

எப்போது பயன்படுத்த வேண்டும்:

  • அதிகப்படியான ஒரே நேரத்தில் பயனர்கள் (High concurrency).
  • வெவ்வேறு நீளம் கொண்ட வரிசைகள்.
  • ஒரே தொடக்கத்தைக் கொண்ட பிராம்ப்ட்கள்.

எப்போது தவிர்க்க வேண்டும்:

  • ஒற்றைப் பயனர் உள்ளூர் அனுமானம் (Single-user local inference).
  • மிகச் சிறிய மாடல்கள்.
  • ஒவ்வொரு வரிசையும் துல்லியமாக ஒரே நீளமாக இருக்கும் பணிகள்.

KV Cache மற்றும் PagedAttention: அவை என்ன செய்கின்றன மற்றும் ஏன் முக்கியமானவை

பெரிய மொழி மாதிரிகளின் (LLMs) எழுச்சி செயற்கை நுண்ணறிவுத் துறையில் ஒரு புரட்சியை ஏற்படுத்தியுள்ளது. ஆனால், இந்த மாதிரிகளைப் பயன்படுத்துவதில் (inference) சில முக்கியமான சவால்கள் உள்ளன. குறிப்பாக, மாதிரியின் வேகம் மற்றும் நினைவகப் பயன்பாடு (memory usage) ஆகியவை ஒரு பெரிய தடையாக உள்ளன. இந்தத் தடையை நீக்க உதவும் இரண்டு முக்கியமான தொழில்நுட்பங்கள் தான் KV Cache மற்றும் PagedAttention.

KV Cache என்றால் என்ன?

LLM-கள் உரையை உருவாக்கும் போது, அவை ஒவ்வொரு முறையும் முந்தைய டோக்கன்களை (tokens) மீண்டும் மீண்டும் கணக்கிட வேண்டிய அவசியமில்லை. ஒரு டோக்கனை உருவாக்கும் போது, அதற்கு முந்தைய டோக்கன்களின் தகவல்கள் தேவைப்படும்.

ஒவ்வொரு டோக்கனுக்கும், Attention mechanism-இல் இரண்டு முக்கியத் தரவுகள் உள்ளன:

  1. Key (K)
  2. Value (V)

ஒவ்வொரு முறையும் இந்த K மற்றும் V மதிப்புகளை மீண்டும் கணக்கிடுவது அதிக நேரத்தையும் கணினித் திறனையும் (computation) எடுத்துக்கொள்ளும். இதைத் தவிர்க்க, முந்தைய டோக்கன்களின் K மற்றும் V மதிப்புகளை ஒரு நினைவகத்தில் சேமித்து வைக்கிறோம். இதையே KV Cache என்கிறோம். இது அடுத்தடுத்த டோக்கன்களை உருவாக்கும் வேகத்தை கணிசமாக அதிகரிக்கிறது.

நினைவகத் துண்டாதல் சிக்கல் (The Memory Fragmentation Problem)

KV Cache மிகவும் பயனுள்ளதாக இருந்தாலும், இது ஒரு பெரிய சிக்கலை உருவாக்குகிறது: நினைவகத் துண்டாதல் (Memory Fragmentation).

LLM-கள் உருவாக்கும் உரையின் நீளம் நிலையானது அல்ல. சில நேரங்களில் ஒரு வாக்கியம் சிறியதாக இருக்கும், சில நேரங்களில் மிக நீளமாக இருக்கும். இதனால், நினைவகத்தை ஒதுக்கும்போது (memory allocation) இரண்டு வகையான சிக்கல்கள் ஏற்படுகின்றன:

  1. Internal Fragmentation: ஒரு டோக்கனுக்குத் தேவையான அளவை விட அதிக நினைவகம் ஒதுக்கப்பட்டால், மீதமுள்ள பகுதி வீணாகிறது.
  2. External Fragmentation: நினைவகத்தில் பல சிறிய இடைவெளிகள் இருக்கும், ஆனால் ஒரு பெரிய தொடர்ச்சியான தொகுப்பை (contiguous block) ஒதுக்க போதுமான இடம் இருக்காது.

இதனால், நினைவகம் இருந்தும், மாதிரியால் பெரிய context window-களைப் பயன்படுத்த முடியாமல் போகிறது.

PagedAttention: ஒரு புரட்சிகரமான தீர்வு

இந்த நினைவகச் சிக்கலைத் தீர்க்கவே PagedAttention அறிமுகப்படுத்தப்பட்டது. இது கணினி இயக்க முறைமைகளில் (Operating Systems) பயன்படுத்தப்படும் Virtual Memory மற்றும் Paging முறையிலிருந்து ஈர்க்கப்பட்டது.

PagedAttention எவ்வாறு செயல்படுகிறது?

பாரம்பரிய முறையில், KV Cache-ஐ ஒரு தொடர்ச்சியான நினைவகத் தொகுப்பாக (contiguous block) ஒதுக்க வேண்டும். ஆனால் PagedAttention, KV Cache-ஐ சிறிய, நிலையான அளவுள்ள "Pages" ஆகப் பிரிக்கிறது.

இந்த முறையில்:

  • நினைவகம் துண்டு துண்டாகப் பிரிக்கப்பட்டாலும், அவை ஒரு தர்க்கரீதியான வரிசையில் (logical order) இணைக்கப்படுகின்றன.
  • நினைவகம் தேவைப்படும்போது மட்டுமே புதிய "Pages" ஒதுக்கப்படுகின்றன.
  • இதனால் நினைவகம் வீணடிக்கப்படுவது பெருமளவு குறைகிறது.

இது vLLM போன்ற நூலகங்களில் (libraries) பயன்படுத்தப்படுகிறது, இது LLM-களின் Throughput-ஐ (ஒரே நேரத்தில் கையாளக்கூடிய கோரிக்கைகளின் எண்ணிக்கை) பல மடங்கு அதிகரிக்கிறது.

முடிவுரை

KV Cache என்பது வேகமான LLM செயல்பாட்டிற்கு அவசியமானது, ஆனால் அது நினைவகச் சிக்கல்களை உருவாக்குகிறது. PagedAttention அந்தச் சிக்கலைத் திறம்படத் தீர்த்து, நினைவகப் பயன்பாட்டை மேம்படுத்துகிறது. இதன் மூலம், குறைந்த நினைவகத்தில் அதிகப்படியான பயனர்களுக்கு வேகமான மற்றும் திறமையான முறையில் LLM சேவைகளை வழங்க முடிகிறது.


Optional learning community: https://t.me/GyaanSetuAi