- केवल RTX 4080 16GB स्थानीय LLM सेटअप के लिए पर्याप्त नहीं था, इसलिए लगभग £200 में इस्तेमाल किया हुआ Tesla V100 SXM2 16GB और एक adapter जोड़कर कुल 32GB VRAM बनाया गया
- V100 SXM2 एक server GPU है जिसमें PCIe slot, display output, या सामान्य power connector नहीं होता, लेकिन SXM2-to-PCIe adapter के जरिए इसे gaming PC में लगाया जा सका
- server fan का डिफ़ॉल्ट शोर 82dB था, जिससे कमरे में उपयोग मुश्किल था, लेकिन PH2.0-2.54mm jumper cable से उसे motherboard fan header से जोड़कर PWM control और low-noise operation हासिल किया गया
- llama.cpp के tensor splitting से RTX 4080 और V100 पर Qwen3.6-27B-MTP Q5_K_M को बाँटकर चलाया गया, जिससे 128k context और लगभग 32 tok/s inference speed मिली
- यह single 32GB GPU जितना साफ-सुथरा सेटअप नहीं है और driver, CUDA, तथा warm reboot जैसी समस्याएँ बाकी हैं, लेकिन used server GPU स्थानीय LLM VRAM बढ़ाने का सस्ता विकल्प हो सकते हैं
£200 में बना 32GB local LLM सेटअप
- सिर्फ RTX 4080 16GB VRAM से इच्छित local model चलाना संभव नहीं था, इसलिए एक इस्तेमाल किया हुआ datacenter GPU adapter के साथ gaming PC में जोड़ा गया
- Tesla V100 SXM2 16GB और SXM2-to-PCIe adapter मिलाकर लगभग £200 में खरीदे गए, जिससे दोनों GPU को जोड़कर 32GB VRAM वाला सेटअप बना
- 27B parameter model को दोनों GPU में बाँटकर लगभग 32 tokens/s पर चलाया गया, और पूरा model तथा context दोनों VRAM में समा गए
- अनुभव single 32GB consumer GPU जैसा नहीं है, लेकिन RTX 5090 32GB की तुलना में बहुत कम लागत पर VRAM capacity मिल गई
Tesla V100 SXM2 और adapter
- Tesla V100 SXM2 16GB NVIDIA DGX server और hyperscaler rack के लिए बना GPU है
- इसमें सामान्य PCIe slot, display output, या standard power connector नहीं है
- यह server के अंदर proprietary board पर लगता है और NVLink के जरिए communicate करता है
- motherboard में सीधे लगाने के लिए अलग adapter चाहिए
- V100 एक Volta GPU है और इसमें 16GB HBM2 memory तथा 5120 CUDA cores हैं
- eBay पर इसकी कीमत लगभग £150 थी
- 2017 का GPU होने के बावजूद compute performance और VRAM local LLM के लिए अभी भी उपयोगी हैं
- HBM2 memory bandwidth इसका बड़ा फायदा है
- V100 में 4096-bit memory bus के साथ 900GB/s bandwidth मिलती है
- यह RTX 4080 की 736GB/s GDDR6X bandwidth से 22% अधिक है
- Apple M3 Max 400GB/s, M4 Max 546GB/s, और M5 Max 614GB/s से भी अधिक है
- AMD RX 7900 XTX में 24GB GDDR6 और 960GB/s bandwidth है, जो V100 से थोड़ा बेहतर है, लेकिन इसकी कीमत £700 से ऊपर है
- ROCm का LLM inference support अभी CUDA की तुलना में कम परिपक्व माना गया
- V100, RX 7900 XTX की bandwidth का 94% एक-चौथाई से भी कम कीमत में देता है और llama.cpp के साथ काम करता है
- RTX 5090 की 1,792GB/s bandwidth V100 से स्पष्ट रूप से बेहतर है, लेकिन इसकी कीमत £2,000 से ऊपर है
- LLM inference में memory bandwidth अक्सर tokens/s का bottleneck बनती है, इसलिए यह महत्वपूर्ण है
- SXM2-to-PCIe adapter NVIDIA का आधिकारिक उत्पाद नहीं है और न ही इसे आधिकारिक support मिला है
- यह एक bare PCB है, जिसके एक तरफ SXM2 socket और दूसरी तरफ PCIe edge connector है
- इसकी कीमत लगभग £50 थी, और पूरा सेटअप लगभग £200 में तैयार हुआ
- इसी adapter की वजह से V100 16GB को RTX 4080 के साथ motherboard में लगाया जा सका
server cooling fan की समस्या और समाधान
- V100 SXM2 को 2U server के industrial cooling environment में चलाने के लिए बनाया गया है
- adapter का fan सामान्य कमरे में उपयोग के लिए बहुत ज़्यादा शोर करता था
- Apple Watch से मापा गया शोर 82dB था, जिसे garbage disposal और lawn mower के बीच के स्तर जैसा बताया गया
- डिफ़ॉल्ट स्थिति में fan control काम नहीं कर रहा था
nvidia-smi, Linux device probing, और Windows Afterburner—सभी कोशिशें विफल रहीं
- लगता है adapter का fan इस मान्यता के साथ बना था कि server rack में यह लगातार 100% पर चलेगा
- 9V battery test से fan pinout की पुष्टि की गई
- VCC और ground पर jumper wire लगाकर 9V battery छूते ही fan घूमने लगा
- 12V की तुलना में यह काफी शांत था, जिससे fan control की संभावना स्पष्ट हुई
- fan ने standard PC case fan की तरह व्यवहार किया
- jumper wires fan connector में लगाकर दूसरी तरफ motherboard के spare fan header से जोड़ा गया
- motherboard RPM पढ़ पा रहा था और PWM control भी कर पा रहा था
- 10% speed पर भी full load में तापमान 50°C से ऊपर नहीं गया और आवाज़ लगभग सुनाई नहीं दी
- अंतिम cable 2.54mm male to PH2.0 female jumper cable से बनाई गई
- adapter का fan connector 4-pin JST PH2.0 plug है
- motherboard fan header standard 0.1 inch यानी 2.54mm pitch का है
- PH2.0 female तरफ fan के tachometer और PWM pins से, और 2.54mm male तरफ motherboard fan header से जोड़ा गया
- लगभग £2 की jumper cable और connector की पहचान से 82dB की समस्या हल हो गई
दो GPU से VRAM बढ़ाना
- अंतिम GPU configuration इस प्रकार था
- RTX 4080: 16GB VRAM, Ada architecture
- Tesla V100: 16GB VRAM, Volta architecture
- कुल: दोनों GPU मिलाकर 32GB VRAM
- llama.cpp tensor splitting के जरिए model को दो GPU में बाँटकर चला सकता है
- यह PCIe bus के माध्यम से layers को pipeline करता है
- RTX 4080 कुछ layers संभालता है और V100 बाकी
- यह single 32GB GPU से तेज़ नहीं है, लेकिन काम करता है और लगभग 32GB GPU की लागत के 10% में बन जाता है
- V100 की power usage अधिकतम लगभग 150W देखी गई
- local LLM inference GPU के लिए यह छोटा नहीं है, लेकिन असामान्य रूप से बड़ा भी नहीं
- V100 32GB model भी एक विकल्प है
- इसकी कीमत खरीदे गए मॉडल से दोगुने से अधिक है, लेकिन एक single card में 32GB HBM2 कुछ सौ pounds में मिल सकते हैं
- ऐसे दो 32GB V100 से 64GB VRAM बनाया जा सकता है, जिसे मौजूदा RTX 5090 कीमत के लगभग 20% के बराबर बताया गया
- SXM2 format में NVLink का support अंतर्निहित है
- यदि सही multi-GPU setup बनाया जाए तो GPU आपस में उच्च bandwidth पर communicate कर सकते हैं
- PCIe adapter के माध्यम से भी tensor split performance पर्याप्त रूप से मज़बूत रही
NixOS में driver और CUDA मिलाना
- software setup NixOS की वजह से अपेक्षाकृत सहज रहा
- V100, Volta chip पर आधारित है और NVIDIA ने driver branch 560 से Volta support बंद कर दिया
- RTX 4080 Ada और V100 Volta दोनों को साथ support करने वाला अंतिम driver 550.x branch है
- NixOS में यह
nvidiaPackages.legacy_535 के रूप में उपलब्ध है
- यह driver केवल CUDA 12.2 तक support करता है
- वर्तमान nixpkgs CUDA 12.6 या उससे ऊपर देता है
- इसलिए CUDA 12.2 को nixpkgs 24.05 से लाना पड़ा
- driver को Linux kernel 6.6 चाहिए
- legacy driver इससे नए kernel को support नहीं करता
- headless inference server होने के बावजूद
services.xserver.enable = true आवश्यक था
- इसके बिना NVIDIA kernel module load नहीं हो रहा था
- मुख्य NixOS configuration में kernel, NVIDIA legacy driver, और X server NVIDIA driver निर्दिष्ट किए गए
boot.kernelPackages = pkgs.linuxPackages_6_6;
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.legacy_535;
services.xserver.enable = true;
services.xserver.videoDrivers = [ "nvidia" ];
- CUDA 12.2 को पुराने nixpkgs से overlay के ज़रिए लाया गया
nixpkgs.overlays = [
(final: prev: {
cudaPackages_12_2 = nixpkgs-cuda.legacyPackages.${prev.system}.cudaPackages_12_2;
})
];
- दोनों GPU सही तरह दिखे और CUDA भी सामान्य रूप से चला
- पूरी machine definition dotfiles repo के इस commit में शामिल है
- इसमें llama.cpp service definition और सही version पर pinned custom build भी शामिल है
चलाया गया model और performance
- चलाया गया model Qwen3.6-27B-MTP Q5_K_M का quantized version है
- model size लगभग 19GB है
- दोनों GPU का उपयोग करने पर पूरा model VRAM में आ जाता है और context के लिए भी जगह बचती है
- मुख्य runtime settings इस प्रकार थीं
- Model: Qwen3.6-27B-MTP Q5_K_M, 19GB
- Context size: 128k tokens
- GPU layers: 99, पूरी तरह offload
- Tensor split:
-ts 1.0,1.0, दोनों GPU में समान वितरण
- performance इस प्रकार रही
- Inference speed: लगभग 32 tok/s
- Prompt processing: लगभग 133~160 tok/s
- 32 tokens/s को interactive उपयोग के लिए पर्याप्त माना गया
- यह अलग-अलग architecture वाले दो GPU को PCIe के जरिए tensor split करके हासिल किया गया
- network latency को शामिल करने पर इसे अधिकांश cloud API endpoints से भी तेज़ बताया गया
MTP और image input
- MTP का अर्थ Multi-Token Prediction है
- सामान्य LLM inference एक बार में एक token predict करता है, उसे accept करता है, फिर अगला token predict करता है
- MTP कई भविष्य tokens एक साथ predict करता है और फिर सही tokens को verify करता है
- जो tokens accept हो जाते हैं वे लगभग मुफ्त जैसे होते हैं, और गलत prediction सामान्य path पर वापस चली जाती है
- MTP का परिणाम यह है कि accuracy घटाए बिना generation speed लगभग 1.5~2 गुना बढ़ जाती है
- इस setup में लगभग 32 tok/s से बढ़कर, जब MTP अच्छा काम करे, 50~60 tok/s तक जाने की बात कही गई
- यह खासकर code जैसे predictable output में अधिक प्रभावी है
- llama.cpp में MTP support अभी नया feature है
- nixpkgs का llama.cpp version Qwen3.6 MTP architecture को support नहीं करता
- इसलिए वह support जोड़ने वाले specific commit से llama.cpp को source से build करना पड़ा
- NixOS में custom derivation को उसी commit पर pin करके reproducible setup बनाया गया
- model या llama.cpp version बदलना configuration की एक line बदलकर और
nixos-rebuild switch चलाकर किया जाता है
- Qwen3.6-27B अलग multimodal projector file
mmproj के जरिए image input support करता है
- अतिरिक्त file size लगभग 928MB है
- vision encoder image pixels को LLM के token embedding space में बदलता है
- model इंसानों की तरह image को “देखता” नहीं है
- LLM इन converted vectors को एक और token sequence की तरह process करता है
- llama.cpp run flags इस प्रकार हैं
--mmproj /mnt/nas/llamacpp/mmproj-F16.gguf --mmproj-offload
--mmproj-offload vision encoder को model के साथ GPU पर लोड करता है
- इससे image input के साथ भी तेज़ inference बना रहता है
local उपयोग का तरीका
- यह setup OpenCode के साथ उपयोग किया जाता है
- OpenCode एक AI coding assistant है जो local model के साथ चल सकता है
- LLM server desktop पर चलता है, लेकिन उपयोग दूसरे devices से होता है
- घर के अन्य machines से network के ज़रिए access किया जाता है
- बाहर से Tailscale के माध्यम से access किया जाता है
- OpenCode में llama.cpp server का उपयोग API URL सेट करके किया जाता है
- model local रूप से चलता है
- responses तेज़ हैं और data network के बाहर नहीं जाता
बाकी समस्याएँ और सीमाएँ
- V100 के warm reboot के बाद गायब हो जाने की समस्या कभी-कभी आती है
- ऐसे reboot के बाद, जहाँ सिर्फ OS restart होता है और motherboard powered रहता है,
lspci और nvidia-smi में V100 कभी-कभी दिखाई नहीं देता
- यह PCIe slot की ACPI enumeration समस्या लगती है
- मशीन को पूरी तरह बंद करके कुछ सेकंड बाद cold reboot करने पर यह हमेशा वापस आ जाता है
- V100 के बिना llama.cpp शुरू नहीं होता
- क्योंकि 16GB वाले एक GPU में model फिट नहीं होता
- GPU वापस आने तक service crash loop में फँसी रहती है
- चूँकि reboot के समय आमतौर पर उपयोगकर्ता पास ही होता है, इसलिए इसे व्यावहारिक उपयोग में बड़ी समस्या नहीं माना गया
- अलग architecture वाले दो GPU का tensor split setup single GPU जितना साफ नहीं है
- V100 inference के लिए सबसे तेज़ GPU भी नहीं है
- फिर भी कीमत के हिसाब से इसकी value बहुत अधिक मानी गई
विकल्प और निष्कर्ष
- लगभग £200 में मिले परिणाम इस प्रकार हैं
- gaming GPU के साथ काम करने वाला 16GB datacenter GPU
- local LLM inference के लिए कुल 32GB VRAM
- 27B parameter model पर 32 tokens/s
- 128k token context window
- image input के लिए vision support
- cloud या per-token cost के बिना पूरी तरह local पर चलने वाला model
- असली कीमत fan noise के रूप में चुकानी पड़ी, जिसे jumper cable और connector की पहचान से हल कर लिया गया
- यदि आप वास्तव में सक्षम local model चलाना चाहते हैं, तो used server GPU market एक विकल्प हो सकता है
- भले ही आपके पास पहले से GPU न हो, एक single V100 को सस्ते server box में लगाकर 16GB VRAM और उपयोगी local LLM environment बनाया जा सकता है
- केवल V100 SXM2 ही विकल्प नहीं है
- P40 समान लागत पर 24GB देता है, लेकिन धीमा है और उसमें Tensor Cores नहीं हैं
- V100 32GB model महँगा है, लेकिन समान VRAM capacity वाले consumer GPU की तुलना में फिर भी सस्ता है
- लेकिन fan की समस्या के लिए तैयार रहना होगा
1 टिप्पणियां
Lobste.rs की राय
यह तरीका वाकई बहुत शानदार है, और PCIe पर GPU के गायब हो जाने की समस्या के इतने सारे संभावित कारण हैं कि जिज्ञासा और बढ़ जाती है
GPU फैन की तेज आवाज़ सुनकर NVIDIA CUDA टीम में बिताया समय याद आ गया। एक सहकर्मी NVML और nvidia-smi में फैन कंट्रोल फीचर जोड़ रहा था, और क्यूबिकल के उस पार से फैन के तेज़-धीमे होने की आवाज़ आ रही थी, फिर वह चमकती मुस्कान के साथ सिर बाहर निकालकर दिखा
कोड के काम करने का नतीजा उसी पल कानों से सुन पाना, उसके मुताबिक, उसके बनाए फीचर्स में सबसे पसंदीदा था
अगर self-hosted LLM में दिलचस्पी है, तो Dell OEM RTX 3090 आम तौर पर बड़े ब्रांड वाले प्रोडक्ट्स से सस्ता मिलता है, और लगभग 800 कैनेडियन डॉलर में मिल जाता था
अब मुझे vLLM कैसे काम करता है, यह और पढ़ना होगा। मॉडल कभी-कभी संबंधित नामों और विशेषणों की लंबी सूची उगलने लगता है, तो शायद कहीं कुछ गलत कॉन्फ़िगर किया है
मेरी समझ में, ज़्यादातर ढंग के मॉडल ठीक से चलाने के लिए कम से कम 48~64GB VRAM चाहिए, और इसी वजह से unified memory architecture वाले Apple M series chips इस क्षेत्र में लोकप्रिय हैं
ऐसे प्रोडक्ट पहले से पैक्ड रूप में भी मिलते हैं, लेकिन मामला आम तौर पर निर्माता की 3 महीने की वारंटी तक ही सीमित होता है
https://ebay.com/itm/297819576914/…
अमेरिका में इस्तेमाल किया हुआ 32GB model लगभग 600 डॉलर में बिक रहा है
adapter शायद सीधे उसके मूल स्रोत चीन से ही खरीदूँगा
सोच रहा हूँ कि AMD की तरफ इसका कोई समकक्ष प्रोडक्ट है या नहीं। अभी मैं 48GB W7900 के दो कार्ड इस्तेमाल कर रहा हूँ, और बड़े मॉडल चलाने के लिए इसे और स्केल करना चाहता हूँ
cooling अलग से जोड़नी पड़ेगी, लेकिन adapter के साथ छेड़छाड़ करने की ज़रूरत नहीं होगी
जब भी local model configurations के बारे में कुछ मिलता है, मैं पढ़ता हूँ, और अभी 48~128GB जैसी मिड-रेंज VRAM ज़रूरतों के लिए सच में कोई बढ़िया price/performance sweet spot नज़र नहीं आता। विकल्प मोटे तौर पर तीन हैं: 3 पीढ़ी पुरानी data center GPUs की कई यूनिट्स (Tesla V100, Instinct MI60), बड़े VRAM वाले मौजूदा पीढ़ी के सबसे निचले स्तर के कई प्रोडक्ट्स (Arc Pro B70), या मौजूदा पीढ़ी के all-in-one boxes (DGX Spark, Mac Mini, Strix Halo)
एक 32GB consumer GPU या दो 16GB कार्ड से अपग्रेड करने वालों के लिए इनमें से हर विकल्प में कुछ समझौते हैं, लेकिन फायदे भी हैं। लेकिन अगर आप पहले से 48GB कार्ड के दो यूनिट चला रहे हैं, तो मुझे यकीन नहीं कि कोई ऐसा इस्तेमाल किया हुआ हार्डवेयर अपग्रेड है जो महसूस होने लायक सुधार दे सके