வெறும் 3.2 GB RAM மட்டுமே கொண்ட ஒரு லேப்டாப்பில், வெறும் C99 மற்றும் ஒரு NVMe டிரைவை மட்டுமே பயன்படுத்தி, 284-பில்லியன் அளவுருக்கள் (parameters) கொண்ட ஒரு மொழி மாதிரியை (language model) இயக்க முடிந்தது. முழுமையான 160 GB செக்பாயிண்ட்டையும் (checkpoint) மெமரியில் ஏற்றாமல், மாதிரியின் எக்ஸ்பர்ட் வெயிட்டுகளை (expert weights) ஸ்ட்ரீமிங் (streaming) செய்வதே இதற்கான ரகசியம். இதன் மூலம் மிகப்பெரிய Mixture-of-Experts (MoE) மாதிரிகளைக் கூட சாதாரண நுகர்வோர் வன்பொருளில் (consumer hardware) இயக்க முடியும் என்பதை நிரூபித்துள்ளேன்.

இது ஏன் முக்கியமானது

பெரிய மொழி மாதிரிகள் (LLMs) குறியீடு உருவாக்கம் (code generation), ஆராய்ச்சி உதவி மற்றும் பலவற்றிற்குப் பயன்படுகின்றன, ஆனால் அவற்றின் அளவு பொதுவாக பயனர்களை அதிக விலை கொண்ட பல GPU கொண்ட சர்வர்களுக்கோ அல்லது தரத்தைக் குறைக்கும் கனமான குவாண்டிசேஷன் (quantisation) முறைகளுக்கோ தள்ளுகிறது. ஒரு 284 B-parameter MoE மாதிரியை சில ஜிகாபைட் RAM-ல் இயக்க முடியும் என்பதைக் காட்டுவது, பொழுதுபோக்கு ஆர்வலர்கள் (hobbyists), சிறிய ஸ்டார்ட்அப்கள் மற்றும் குறைந்த பட்ஜெட் கொண்ட ஆராய்ச்சியாளர்கள் தரம் குறையாமல் அதிநவீன மாதிரிகளுடன் பரிசோதனை செய்ய வழிவகை செய்கிறது.

மாதிரி மற்றும் வன்பொருள் தடைகள் (hardware bottleneck)

DeepSeek-V4-Flash என்பது ஒவ்வொரு டிரான்ஸ்ஃபார்மர் லேயரிலும் (transformer layer) 256 எக்ஸ்பர்ட்கள் மூலம் 284 B அளவுருக்களைச் சேமிக்கிறது. இதன் மூலமான செக்பாயிண்ட் (raw checkpoint) டிஸ்க்கில் சுமார் 160 GB இடத்தை ஆக்கிரமிக்கிறது—இது ஒரு சாதாரண லேப்டாப்பில் உள்ள 3.2 GB RAM-ஐ விடப் பல மடங்கு பெரியது. பாரம்பரிய இன்ஃபரன்ஸ் பைப்லைன்கள் (inference pipelines) முழு செக்பாயிண்ட்டையும் மெமரியில் ஏற்ற முயற்சிக்கும், இது விரைவாக RAM அளவைத் தீர்த்துவிடுவதோடு சிஸ்டத்தையும் செயலிழக்கச் (crash) செய்துவிடும்.

எக்ஸ்பர்ட் வெயிட்டுகளை ஸ்ட்ரீமிங் செய்தல்: முக்கிய யோசனை

MoE கட்டமைப்புகள் ஒவ்வொரு டோக்கனுக்கும் (token) மிகச்சிறிய அளவிலான எக்ஸ்பர்ட்களை மட்டுமே செயல்படுத்துகின்றன. DeepSeek-V4-Flash-இல், ரூட்டர் (router) ஒவ்வொரு லேயரிலும் உள்ள 256-இல் ஆறு எக்ஸ்பர்ட்களைத் தேர்ந்தெடுக்கிறது. கணக்கீடுகள் (computation) பயன்படுத்தப்படாத எக்ஸ்பர்ட்களைத் தொடாததால், இன்ஃபரன்ஸ் என்ஜின் (inference engine) அவற்றை ஏற்றத் தேவையில்லை.

இந்தச் செயலாக்கம் (implementation) செக்பாயிண்ட்டை ஒரு ஸ்ட்ரீமிங் மூலமாக (streaming source) கருதுகிறது. தற்போதைய டோக்கனுக்கு எந்த எக்ஸ்பர்ட்கள் தேவை என்பதை ரூட்டர் தீர்மானிக்கும்போது, என்ஜின் அந்த வெயிட் பிளாக்குகளை (weight blocks) NVMe டிரைவிலிருந்து RAM-இல் உள்ள LRU (least-recently-used) கேஷிற்குள் (cache) இழுக்கிறது. கேஷ் போதுமான அளவு பெரியதாக இருந்தால், அடுத்தடுத்த டோக்கன்களுக்கு அதே எக்ஸ்பர்ட்கள் மீண்டும் பயன்படுத்தப்படும் (cache hits); கேஷ் மிகவும் சிறியதாக இருந்தால், என்ஜின் அடிக்கடி டிஸ்க்கிலிருந்து வாசிக்கும். இதன் விளைவாக, முழுத் துல்லியமான வெயிட்டுகளைப் (full-precision weights) பாதுகாத்து, எந்த GPU வேகமுமின்றி, லேப்டாப்பின் வரம்பிற்குள்ளேயே 3.23 GB உச்ச மெமரி பயன்பாட்டை (peak memory footprint) இது பெறுகிறது.

செயலாக்கத்திலிருந்து கற்றுக்கொண்ட பாடங்கள்

1. சரளமான வெளியீடு என்பது சரியானதற்கான சான்றல்ல ஒரு பிழையான கர்னல் (buggy kernel) நம்பகமானதாகத் தோன்றும் வாக்கியங்களை வெளியிடும், குறிப்பாக மாதிரியின் மொழி முறைகள் (language patterns) எண் பிழைகளை மறைக்கும்போது இது நடக்கும். நான் ஒவ்வொரு 14 முக்கியமான செயல்பாடுகளையும் (critical operations) புதிய PyTorch குறிப்புடன் (reference) சரிபார்த்து, எண் வேறுபாடு மிகச்சிறிய அளவில் இருப்பதை உறுதி செய்தேன். இந்தத் தடையைத் தவிர்த்திருந்தால், நுட்பமான மாற்றங்கள் (subtle drift) கவனிக்கப்படாமல் போயிருக்கும்.

2. பொதுவான தோல்வி முறைகள் உங்கள் சோதனைகளை ஏமாற்றலாம் ஒரு மெமரி-கரப்ஷன் (memory-corruption) பிழை, ரூட்டிங் தேர்வுகளை ஒரு சில எக்ஸ்பர்ட்களுடன் மட்டும் சுருக்கிவிட்டது, இது கேச்-ஹிட் விகிதத்தை (cache-hit rate) 52% இலிருந்து 95% ஆக உயர்த்தி, ஒரு மிகப்பெரிய வேக அதிகரிப்பு போன்ற மாயையை உருவாக்கியது. சோதனைத் தொகுப்பு (test suite) ஒரே பிழையான குறியீட்டின் இரண்டு பதிப்புகளை ஒப்பிட்டதால், அந்தப் பிரச்சனையை அது கண்டறியவில்லை. இதற்குத் தீர்வு, ஒரு தனித்துவமான குறிப்புப் பாதையை (independent reference path) சேர்ப்பதுதான்—அதாவது முதன்மைச் செயலாக்கத்துடன் எந்த தர்க்கத்தையும் (logic) பகிராத குறியீடு—அப்போதுதான் பொதுவான குறைபாடுகள் கவனிக்கப்படாமல் போகாது.

3. மேம்படுத்துவதற்கு (optimise) முன் அளவிடுங்கள் ஒரு மெமரி காப்பி 1 ms எடுக்கும் என்று நான் நினைத்து அதை மேம்படுத்த நேரத்தைச் செலவிட்டேன். ஆனால் ப்ரொஃபைலிங் (Profiling) செய்தபோது, அந்தச் செயல்முறை உண்மையில் 3.6 ms அல்லது மொத்த இன்ஃபரன்ஸ் நேரத்தின் 22% எடுப்பதாகக் காட்டியது. பாடம் என்னவென்றால்: செயல்திறன் முக்கியமான பகுதிகளில் (performance-critical sections) எப்போதும் உள்ளுணர்வை (intuition) நம்ப வேண்டாம்; துல்லியமான அளவீடு மட்டுமே நம்பகமான வழிகாட்டி.

4. வெப்ப நிலைத் தன்மைகள் (Thermal conditions) செயல்திறனை (throughput) பெருமளவு பாதிக்கின்றன வெப்பமடைந்த லேப்டாப்பில் பெஞ்ச்மார்க்குகளை (benchmarks) இயக்கியபோது, குளிர்ந்த இயந்திரத்தை விட மூன்று மடங்கு வரை மெதுவாகச் செயல்பட்டது. உயர்ந்த வெப்பநிலையானது NVMe டிரைவின் செயல்திறனைக் குறைத்தது மற்றும் CPU வேகத்தைக் குறைத்தது, இது முடிவுகளைத் தவறாகக் காட்டியது. நீங்கள் செயல்திறன் எண்களை வெளியிடும்போது எப்போதும் கணினியின் வெப்ப நிலையை (thermal state) பதிவு செய்யுங்கள்.

புள்ளிவிவரங்கள் எப்படி உள்ளன

  • டிஸ்க்கில் மாதிரியின் அளவு: ~160 GB
  • உச்ச RAM பயன்பாடு: 3.23 GB
  • ஒரு டோக்கனுக்கான எக்ஸ்பர்ட்கள்: 6 (256-இல்)
  • கேச்-ஹிட் விகிதம்: RAM-ஐப் பொறுத்து மாறுபடும்; 3.2 GB-இல் இது ஏற்ற இறக்கத்துடன் இருக்கும்.
  • குவாண்டிசேஷன் இல்லை: முழுத் துல்லியமான வெயிட்டுகள் ஸ்ட்ரீம் செய்யப்படுகின்றன, இது மாதிரியின் தரத்தைப் பாதுகாக்கிறது.

RAM அளவு சுமார் 3.21 GB-க்குக் கீழே குறைந்தால், கேச் de nunca நிரம்பாது மற்றும் என்ஜின் ஒவ்வொரு டோக்கனுக்கும் ஸ்ட்ரீமிங் செய்யும், இது செயல்திறனில் பெரும் சரிவை ஏற்படுத்தும்.

மூலக் குறியீடு (source code) github.com/ronak-create/deepseek-v4-in-c-இல் பொதுப்படையாகக் கிடைக்கிறது. இந்தச் சோதனையை மீண்டும் செய்ய அல்லது விரிவுபடுத்த விரும்புபவர்களுக்காக t.me/GyaanSetuAi-இல் ஒரு சமூக விவாத சேனல் உள்ளது.

முடிவுரை (Takeaway)

ஒரு MoE மாதிரி உண்மையில் பயன்படுத்தும் நிபுணர்களை (experts) மட்டும் ஸ்ட்ரீமிங் செய்வதன் மூலம், குவாண்டிசேஷன் (quantisation) அல்லது GPU முடுக்கம் (GPU acceleration) இல்லாமலேயே, 284 பில்லியன் அளவுருக்களைக் கொண்ட ஒரு LLM-ஐ ஒரு சாதாரண மடிக்கணினியில் இயக்க முடியும். புத்திசாலித்தனமான தரவு நகர்வு, கடுமையான சரிபார்ப்பு மற்றும் முறையான அளவீடு ஆகியவற்றின் மூலம், பலரும் மாற்ற முடியாதவை என்று கருதும் வன்பொருள் கட்டுப்பாடுகளைத் தவிர்க்க முடியும் என்பதை இந்த ஆய்வு காட்டுகிறது.