- यह repository NVIDIA Linux open GPU kernel modules का source release है, और README के अनुसार इसका version 565.57.01 है
- बनाए गए kernel modules को उसी 565.57.01 driver release के GSP firmware और user-space NVIDIA GPU driver components के साथ इस्तेमाल करना होगा
- समर्थित targets x86_64 और aarch64 हैं, और Linux kernel support proprietary NVIDIA kernel modules जैसी ही range को कवर करता है, जो वर्तमान में 4.15 या उससे ऊपर है
- kernel modules को operating-system-independent components और Linux kernel interface layer में बांटा गया है, और target kernel के अनुसार kernel interface layer को build करना होगा
- compatible GPU में Turing के बाद के GPU शामिल हैं, और तालिका में NVIDIA GeForce RTX 4090 सहित कई GeForce, RTX, A/H/L series products और PCI ID सूचीबद्ध हैं
रिलीज़ और build शर्तें
- यह repository NVIDIA Linux open GPU kernel modules का source release है और इसका version 565.57.01 है
- मूल build command इस प्रकार है
make modules -j$(nproc)
- install करने से पहले मौजूदा NVIDIA kernel modules को हटाना होगा, और root अधिकारों के साथ निम्न चलाना होगा
make modules_install -j$(nproc)
- यहां बनाए गए kernel modules के लिए संबंधित 565.57.01 driver release का GSP firmware और user-space NVIDIA GPU driver components आवश्यक हैं
- उदाहरण के तौर पर NVIDIA GPU driver
.runफ़ाइल को--no-kernel-modulesविकल्प के साथ install करने का तरीका दिया गया है
- उदाहरण के तौर पर NVIDIA GPU driver
समर्थित architecture और toolchain
- kernel modules को फिलहाल x86_64 या aarch64 के लिए build किया जा सकता है
- cross compilation के समय
TARGET_ARCH=aarch64|x86_64के साथCC,LD,AR,CXX,OBJCOPYको make command line में निर्दिष्ट किया जाता है - इसे GCC या Clang के अपेक्षाकृत नए versions से build किया जा सकता है
- kernel modules की kernel interface layer को उसी toolchain से build करना होगा जिसका उपयोग target kernel को build करने में किया गया था
- समर्थित Linux kernel versions वही range हैं जिन्हें proprietary NVIDIA kernel modules support करते हैं, और वर्तमान में यह Linux kernel 4.15 या उससे ऊपर है
build options
NV_VERBOSE=1चलाए जाने वाले पूरे commands को print करता है- default setting में केवल संक्षिप्त
CClines दिखाई जाती हैं
- default setting में केवल संक्षिप्त
DEBUG=1kernel modules को debug build के रूप में compile करता है- default build debugging information के बिना compile होता है
- यह option kernel modules के कई debug log messages को भी सक्षम करता है
kernel module संरचना
- अधिकतर NVIDIA kernel modules दो components में विभाजित होते हैं
- OS-agnostic component: operating system से स्वतंत्र हिस्सा
- kernel interface layer: Linux kernel version और configuration के लिए विशेष हिस्सा
- NVIDIA
.runinstall package में OS-agnostic component binary रूप में दिया जाता है- यह component बड़ा है और compile होने में समय लेता है, इसलिए हर driver install पर users को दोबारा compile न करना पड़े, इसके लिए prebuilt version दिया जाता है
nvidia.koमें इस component का नामnv-kernel.o_binaryहैnvidia-modeset.koमें इस component का नामnv-modeset-kernel.o_binaryहैnvidia-drm.koऔरnvidia-uvm.koमें OS-agnostic component नहीं है
- हर kernel module की kernel interface layer को target kernel के अनुसार build करना होता है
directory संरचना और Nouveau integration
- मुख्य directories की भूमिकाएं इस प्रकार हैं
kernel-open/: kernel interface layerkernel-open/nvidia/:nvidia.koके लिए kernel interface layerkernel-open/nvidia-drm/:nvidia-drm.koके लिए kernel interface layerkernel-open/nvidia-modeset/:nvidia-modeset.koके लिए kernel interface layerkernel-open/nvidia-uvm/:nvidia-uvm.koके लिए kernel interface layersrc/: OS-agnostic codesrc/nvidia/:nvidia.koके लिए OS-agnostic codesrc/nvidia-modeset/:nvidia-modeset.koके लिए OS-agnostic codesrc/common/: utility code जोnvidia.koऔरnvidia-modeset.koमें से एक या अधिक में उपयोग होता हैnouveau/: Nouveau device driver integration tools
nouveaudirectory की Python scripts source code में encoded कुछ firmware binary images और संबंधित data को extract करके अलग files में सहेजती हैं- इन files का उपयोग Nouveau device driver द्वारा GSP firmware को load करने और उससे communication करने में किया जाता है
- binary file layout का विवरण
nouveau_firmware_layout.odsमें दिया गया है, और यह फ़ाइल OpenDocument Spreadsheet format में है
योगदान और issue handling
- योगदान NVIDIA की
open-gpu-kernel-modulesrepository में pull request बनाकर किया जाता है - pull request submit करते समय Contributor License Agreement स्वीकार करना आवश्यक है
- यह codebase NVIDIA proprietary driver के साथ साझा किया जाता है, और public source साझा code पर कई processing steps के बाद तैयार होता है
- GitHub repository मुख्य रूप से हर driver release के snapshot की तरह काम करती है
- NVIDIA shared codebase में किए गए individual changes की revision history मिलने की अपेक्षा करना कठिन है
- हर driver release में केवल एक git commit होने की संभावना अधिक है
- individual contributions GitHub repository में अलग git commit के रूप में शामिल न हो पाएं, ऐसा हो सकता है
- public release से पहले होने वाली processing के कारण shared codebase में contribution लागू करने के लिए manual merge की आवश्यकता होती है
- बड़े refactoring को merge करना और स्वीकार करना कठिन हो सकता है, इसलिए पहले से संपर्क और समन्वय आवश्यक है
- Open GPU Kernel Modules से जुड़े issues को NVIDIA repository के Issues, NVIDIA developer forums, या
linux-bugs@nvidia.comपर भेजा जा सकता है - यदि कोई security vulnerability मिलती है, तो अलग
SECURITY.mddocument देखना चाहिए
compatible GPU range
- NVIDIA open kernel modules का उपयोग Turing के बाद के GPU पर किया जा सकता है
- feature support और limitations का विस्तृत विवरण NVIDIA GPU driver end user README के
kernel_open.htmldocument में देखने को कहा गया है - vGPU support के लिए vGPU Host Package में शामिल
README.vgpuको देखना चाहिए - compatible GPU तालिका product names और PCI ID को साथ में सूचीबद्ध करती है
- यदि तीन IDs हों, तो पहली PCI Device ID, दूसरी PCI Subsystem Vendor ID, और तीसरी PCI Subsystem Device ID होती है
- तालिका में NVIDIA GeForce RTX 4090, NVIDIA GeForce RTX 4090 D, NVIDIA GeForce RTX 4080 SUPER, NVIDIA GeForce RTX 4070 Ti SUPER, NVIDIA H100, NVIDIA H200, NVIDIA GH200, NVIDIA L40S सहित कई products शामिल हैं
1 टिप्पणियां
Hacker News की राय
शानदार। मैं सोच रहा था कि क्या यह संभव है; अब local LLM के लिए 4x4090 मशीन को रोकने वाली चीज़ बस उसे बनाने में लगने वाला समय है
tensor parallelization होने पर inference में यह H100 SXM से कहीं सस्ता और तेज़ लग सकता है। हालांकि अभी भी समझ नहीं आता कि tinybox ने 6 GPU वाला configuration क्यों चुना। कई workloads 4 या 8 पर ही अच्छे से चलते हैं; अभी तो ऐसा लगता है कि आप 6 का दाम देकर सिर्फ 4 इस्तेमाल कर रहे हैं, या 8 न होने वाला बीच का अजीब configuration ले रहे हैं
6 चुनने की वजह यह है कि PCIe lanes 128 हैं, यानी x16 ports 8 हैं। NVMe के लिए 1 और network के लिए 1 इस्तेमाल करें तो 6 GPU को full fabric से जोड़ा जा सकता है। 4 ही इस्तेमाल करें तो PCIe waste होता है, और 8 इस्तेमाल करें तो USB3 के कुछ ports छोड़कर external connectivity की गुंजाइश नहीं बचती
लक्ष्य भी 70B FP16 model चलाना था, जिसके लिए लगभग 140GB VRAM चाहिए। 6*24GB = 144GB, इसलिए यह ठीक बैठता है
उदाहरण के लिए 4 NVMe हों तो x16 lanes, और 10G network हो तो फिर x4 lanes चाहिए
NVIDIA SXM बाद में version 3 और 4 में update हुआ और यह configuration उसका आधार भी नहीं है, लेकिन शायद 6-way के sensible होने की कोई और वजह भी हो सकती है
यह वाकई अच्छी खबर है। academia में होने के कारण, मैं कई labs को जानता हूँ जिन्होंने कई 4090 cards से मशीन बनाई और उन्हें पता ही नहीं था कि Nvidia ने cards के बीच P2P communication बंद कर रखा है
मेरे काम के लिए 4090 काफी सस्ता पड़ता, लेकिन उसे न खरीदने की एक वजह यही थी। यह NVLink नहीं है, लेकिन Nvidia ने top-end cards को छोड़कर NVLink को लगभग हटा ही दिया है, इसलिए न होने से तो बेहतर है। पिछले साल के अंत में 4 NVLink H100 cards का quote लिया था, delivery time 13 महीने था; non-NVLink products 4 महीने में मिल सकते थे। अभी lab को चलाए रखने के लिए 4 L40S खरीदे हैं, लेकिन supply chain issues और भारी price hikes की वजह से research बहुत मुश्किल हो गई है। 6 PhD students और कई undergraduates को support करने के लिए यह बिल्कुल नाकाफी है
2015–2018 में पिछली university में हम 2 GPU और NVLink वाली machines प्रति unit 5 हजार डॉलर में बना सकते थे और हर student की desk के नीचे एक रख सकते थे; तब सब कुछ बहुत आसान था
labs के लिहाज़ से, MTBF आधा भी हो तो कीमत 1/4 वाले card को वे कभी भी चुनेंगे
यहाँ P2P का मतलब क्या है? Search करने पर peer to peer जैसा लग रहा है, लेकिन graphics card के context में इसका मतलब क्या है?
https://developer.nvidia.com/gpudirect
काश और hardware companies documentation खोल दें और बाकी चीजें community को पता लगाने दें
यह शुरुआती IBM VGA में हुई चीज़ों जैसा है। "Mode X" या BIOS के बजाय hardware के असली modes, यहाँ तक कि 800x600x16 भी खोजे जा सकते हैं। अफसोस है कि ज्यादातर companies product usage के हर पहलू पर कसकर control रखना पसंद करती दिखती हैं, ताकि user base से और पैसा निकाला जा सके। निजी तौर पर मुझे लगता है कि PC का सबसे productive दौर वही था जब वह सबसे open भी था
तब product की कीमत बस और महंगी हो जाती
adversarial interoperability आम थी, और manufacturer चाहे या न चाहे, reverse engineering से software चलाया जाता था। पहले जो rare था लेकिन अब आम हो गया है, वह software और hardware locking है। cryptography ऐसी technology होनी चाहिए थी जो हमें ताकत दे, लेकिन आखिरकार इसे हमारी अपनी machines से हमें बाहर रखने में इस्तेमाल किया जाने लगा। अब हम driver seat में नहीं हैं। operating system तक अब system को operate नहीं कर पाता। एक free Linux system भी manufacturer के अनजान proprietary firmware और silicon से बने ढेर के अंदर बस "user OS" ही है, और असली operation से sandbox किया गया छोटा-सा हिस्सा भर है
Nvidia ने consumer lineup से NVLink हटाते समय जो मूल justification दिया था, वह यह था कि PCIe 5 काफी तेज़ होगा
लेकिन 40xx series PCIe 5 और P2P support, दोनों के बिना launch हुई। अब उसका आधा भी मिलना अच्छा है, लेकिन कल्पना करना मुश्किल है कि अगली generation के firmware में भी वे इसे allow करेंगे
क्या यह consumer cards में market segmentation के लिए disable किए गए features में से एक है?
पूरी तरह सही analogy नहीं है, लेकिन मान लें कि करीब 15 घरों वाली एक छोटी colony में construction चल रहा है। आम तौर पर corner पर 200kVA transformer रखा जाता है और grid से उचित बिजली supply की जाती है। लेकिन transformer की कमी के कारण contractor commercial 1250kVA transformer लगा देता है। यह जरूरत से कहीं ज्यादा घरों को power दे सकता है, इसलिए काफी capacity बची रहती है। एक दिन कोई resident बड़े पैमाने पर grow operation शुरू करना चाहता है और अपने ही घर के लिए उस extra transformer capacity को activate करने का तरीका खोज लेता है। geohot ने जो पाया, वह ठीक उसी “activation” जैसा है
मैं लंबे समय से George Hotz की hacking ability से हमेशा प्रभावित रहा हूँ। मेरे personal projects के लिए भी वह बड़ी inspiration रहे हैं
वे अक्सर ऐसे सतही और मनमाने issues पर अटक जाते हैं जो ज्यादा knowledgeable engineer को कम कठिन लगेंगे। उन्हें बहुत खराब code, कभी-कभी तो गलत code लिखते हुए भी अक्सर देखा जा सकता है। Twitter से जुड़े scenes इसका अच्छा example हैं। फिर भी वे अकेले लगातार iterate करते रहते हैं और उतनी ही बार चौंकाने वाली improvements भी कर देते हैं। सीखने लायक अच्छा example है
geohot और tinygrad/comma contributors, सभी को बधाई
README पर नजर डालकर, जो लोग curious हैं उनके लिए: यह NVLink नहीं, बल्कि PCIe पर P2P है
Future architectures में वे इसे firmware में lock करना शुरू कर देंगे, इसलिए जब तक यह चलता है, अच्छा रहेगा
इसलिए बिल्कुल न होने से बेहतर है कि कम से कम एक generation तक इसे इस्तेमाल किया जा सके
उत्सुकता है कि यह George ने खुद किया है या tinycorp द्वारा रखे गए bounty को पाने की कोशिश में किसी और ने किया है
और PCI subsystem को अच्छी तरह जानने वाले किसी व्यक्ति से पूछना चाहता हूँ: क्या यह ऐसा नहीं लगता कि NVIDIA ने इसे सक्रिय रूप से रोकने की कोशिश करने के बजाय बस इस पर ध्यान नहीं दिया?
इसलिए device में बदलाव करके पूरे VRAM को address space में डालने के लिए configure करना तार्किक है। resizable BAR support हो, या fixed-size BAR पर्याप्त बड़ा हो तो काम हो सकता है। साथ ही एक card को दूसरे card के VRAM में mapped address को read/write करने का निर्देश देना भी तार्किक है। जिज्ञासा है कि bottleneck PCIe switching capacity बनेगी या point-to-point link और VRAM। किसी भी तरह, system RAM के जरिए round trip कम करना मददगार होगा