- AMD GPU पर बड़े language models चलाने के लिए Docker-आधारित inference engine, जो Hugging Face models के लिए बनाया गया है और LLaMA परिवार पर फोकस करता है
- रनटाइम environment के लिए ROCm-सपोर्टेड AMD GPU, Docker, और host पर इंस्टॉल किया गया ROCm driver 5.4.2 या compatible version चाहिए
run-docker-amd.sh Docker image को अपने-आप build करता है और AMD GPU access के लिए ज़रूरी /dev/kfd, /dev/dri, video group, SYS_PTRACE, seccomp=unconfined settings के साथ container चलाता है
- उपयोगकर्ता Hugging Face repository name और prompt को arguments के रूप में देकर model बदल सकते हैं; उदाहरण के तौर पर
meta-llama/Llama-2-7b-chat-hf और facebook/opt-1.3b दिए गए हैं
- inference behavior बदलने के लिए
run_inference.py को modify करने के बाद Docker image को फिर से build करना होगा; memory कम पड़ने पर छोटा model या कम input/output length इस्तेमाल करनी चाहिए
प्रोजेक्ट का उद्देश्य और लक्षित मॉडल
- यह प्रोजेक्ट AMD GPU पर LLM चलाने के लिए एक Docker-आधारित inference engine है
- इसे Hugging Face के models इस्तेमाल करने के लिए डिज़ाइन किया गया है, खासकर LLaMA model family पर फोकस के साथ
- यह Hugging Face Transformers library का उपयोग करता है
आवश्यक environment
- चलाने से पहले निम्न शर्तें पूरी होनी चाहिए
- ROCm को सपोर्ट करने वाला AMD GPU
- सिस्टम पर इंस्टॉल किया गया Docker
- host system पर इंस्टॉल किया गया ROCm driver
- 5.4.2 या compatible version आवश्यक है
प्रोजेक्ट संरचना
- repository की संरचना
src/ directory और execution/build files से बनी है
src/engine.py
src/model.py
src/utils.py
src/amd_setup.py
Dockerfile
requirements.txt
run_inference.py
run-docker-amd.sh
README.md
त्वरित रन flow
- repository को clone करने के बाद project directory में जाएँ
git clone https://github.com/slashml/amd-gpu-inference.git
cd amd-gpu-inference
- execution script को execute permission दें
chmod +x run-docker-amd.sh
- model name और prompt देकर inference engine चलाएँ
./run-docker-amd.sh "meta-llama/Llama-2-7b-chat-hf" "Translate the following English text to French: 'Hello, how are you?'"
"meta-llama/Llama-2-7b-chat-hf" को अपनी पसंद के Hugging Face model से बदला जा सकता है, और prompt भी सीधे दिया जा सकता है
Docker और ROCm रन करने का तरीका
Aptfile में Docker container के अंदर इंस्टॉल होने वाले ROCm packages सूचीबद्ध हैं
- यह container के भीतर ज़रूरी ROCm drivers और libraries उपलब्ध कराने के लिए configuration है
run-docker-amd.sh Docker image को अपने-आप build करता है
- manual build निम्न command से किया जा सकता है
docker build -t amd-gpu-inference .
- container को manually चलाते समय AMD GPU access के लिए device और permission options देने होते हैं
docker run --rm -it \
--device=/dev/kfd \
--device=/dev/dri \
--group-add=video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
amd-gpu-inference "model_name" "your prompt here"
"model_name" में Hugging Face model name दें और "your prompt here" में input text डालें
customization और troubleshooting
- model बदलना run करते समय Hugging Face repository name बताकर किया जाता है
./run-docker-amd.sh "facebook/opt-1.3b" "Your prompt here"
- inference logic बदलने के लिए
run_inference.py file को modify करें
- बदलाव के बाद Docker image को फिर से build करना होगा
- troubleshooting बिंदु इस प्रकार हैं
- जाँचें कि AMD GPU driver और ROCm host system पर सही तरह से इंस्टॉल और configure हैं
- अगर
"out of memory" error आए, तो छोटा model इस्तेमाल करें या input/output length कम करें
- model-विशिष्ट समस्याओं के लिए Hugging Face के संबंधित model documentation को देखें
लाइसेंस और संदर्भ
- प्रोजेक्ट contributions को Pull Request के रूप में स्वीकार करता है
- ROCm को AMD ने विकसित किया है और यह MIT License के तहत उपलब्ध है
- सवाल या issues के लिए GitHub repository में issue खोला जा सकता है
1 टिप्पणियां
Hacker News की राय
अगर उपयोग inference के लिए है और कार्ड supported है, या architecture ऐसी है जिस पर Linux में
HSA_OVERRIDE_GFX_VERSIONइस्तेमाल किया जा सकता है, तो upstream PyTorch औरtransformersसे लगभग सब कुछ चलाया जा सकता हैllama.cppभी कम से कम करीब 1 साल से काफी बिना दिक्कत compile हो रहा है, और Windows पर आम तौर पर release मेंwin-hipbinary होती है; नहीं तो performance कम होगी, लेकिन Vulkan build से workaround किया जा सकता हैहालांकि इस लेख का ROCm 5.4.2 लगभग 2 साल पुराना version है और तब से काफी कुछ बदल चुका है, इसलिए यह अक्टूबर 2024 में नया प्रकाशित क्यों हुआ, यह जानने की उत्सुकता है
मैंने हाल ही में RDNA3-केंद्रित compatibility document को ROCm 6.2 के आधार पर update किया था, और कुछ महीनों में भी upstream
bitsandbytes, upstreamxformers, Triton-based Flash Attention आदि में बहुत बदलाव हुए हैं: https://llm-tracker.info/howto/AMD-GPUsअगर आप
a1111जैसी चीज इस्तेमाल कर रहे हैं, तोrequirements.txtपर भरोसा न करें; PyTorch homepage के निर्देशों के अनुसार ROCm version वाला torch install करेंObsidian भी ऐसा ही है, और HIP कम से कम Arch और Ubuntu पर काफी आसान है, जबकि Fedora में अभी थोड़ा tweaking चाहिए
मुझे पता नहीं था कि
xformersभी काम करता है; यह अच्छी खबर हैतुरंत काम करने वाला सिर्फ Ollama था, जिसमें example मौजूद है: https://github.com/ollama/ollama/blob/main/docs/docker.md
llama.cppऔरkoboldcppके Docker images तो हैं, लेकिन run examples कम हैं, औरtext-generation-webui-dockerRHEL9 पर 7800 XT के साथ टूट गया: https://github.com/ggerganov/llama.cpp/blob/master/docs/dock..., https://github.com/LostRuins/koboldcpp?tab=readme-ov-file#do..., https://github.com/Atinoda/text-generation-webui-dockerसंक्षेप में, latest ROCm 6.2 के साथ single-node 8×MI300X AMD GPU पर Llama 405B को full-precision inference में चलाया गया
जानना चाहूंगा कि ROCm 6.2 और AMD stack को Nvidia की तुलना में कितना mature माना जाता है
generative तरीके से जल्दबाजी में बनाई गई machine learning libraries की भरमार हैरान करने वाली है
इस library का आधा हिस्सा
printstatements है, और जहां branching है, वहां असल में branching की जरूरत भी नहीं हैबस दो environment variables define करने और
torchके दो flags set करने जितना काम हैमेरा मानना है कि team या organization में expectation management सच में बहुत बड़ा हिस्सा है
सच में content लगभग कुछ भी नहीं है
लगता है कि पुराना ROCm 5.4.2 इस्तेमाल हो रहा है; यह 2 साल पुराना version है, इसलिए मुझे शक है कि यह मेरे RX 7900 XTX को support करेगा या नहीं
व्यक्तिगत तौर पर, latest
rocm/pytorchimage इस्तेमाल करना और उसमें जरूरी चीजें चलाना मेरे लिए सबसे आसान रहाgfx1100) को ROCm 5.4 मेंrocBLASजैसी math libraries में पहली बार enable किया गया था, लेकिनMIOpenजैसी AI libraries शायद ROCm 5.5 से पहले enable नहीं थींमुझे लगता है कि बाद के releases में performance भी काफी बेहतर हुई है
Ubuntu 24.04 और Debian Unstable में OS-provided packages से ही Vega के बाद के लगभग सभी discrete AMD GPU पर
llama.cppको ROCm के साथ चलाया जा सकता हैDocker या
HSA_OVERRIDE_GFX_VERSIONकी भी जरूरत नहीं है;hipcc,libhipblas-dev,librocblas-dev,cmakeआदि install करने के बादvideo,rendergroup permissions दें औरGGML_HIPBLAS=ONसे build करेंRDNA 3, MI200, MI300 users के लिए performance के लिहाज से AMD-provided ROCm packages बेहतर हैं, और जब PyTorch की जरूरत हो तब भी system packages में कुछ dependencies नहीं होतीं, इसलिए AMD-provided packages इस्तेमाल करना बेहतर है
फिर भी installation की सुविधा और पुराने hardware compatibility के मामले में OS packages को हराना मुश्किल है, और reference link है https://lists.debian.org/debian-ai/2024/07/msg00002.html
Ryzen 8700G को NPU पर neural network inference के लिए खरीदे हुए करीब 8 महीने हो गए हैं, लेकिन अब तक acceleration NPU से नहीं, सिर्फ iGPU के Vulkan से मिला है
मैं सिर्फ Linux इस्तेमाल कर रहा हूँ, और अच्छी बात यह है कि 64GB RAM की वजह से 32GB से बड़े models भी बिना समस्या आज़मा पाया
Vulkan backend सपोर्ट करने वाला
llama.cppतारीफ के काबिल हैllama.cppcompile करते समयLLAMA_HIP_UMA=1flag डालकर देखा जा सकता हैhttps://github.com/amd/RyzenAI-SW देखने पर NPU से खेलने के लिए काफी software मिलता है, लेकिन Phoenix 16 TOPS है, इसलिए खुद test करने का मन नहीं हुआ
NixOS workstation में बस इतना जोड़ना काफी था
hardware.graphics.enable = true;enable किया औरservices.ollamaमेंacceleration = "rocm";,ROC_ENABLE_PRE_VEGA = "1";,HSA_OVERRIDE_GFX_VERSION = "11.0.0";set कियापहले
llamafileकी simplicity देखकर AMD ROCm install करने का मन हो गया थालेकिन
sudo apt install rocmका नतीजा था 203 install packages, करीब 2.37GB download, और 35.7GB जगह की जरूरतGPU driver जैसी चीज़ के लिए 36GB कैसे justify होता है, यह समझ नहीं आया
इसमें कई tools और libraries शामिल हैं
CUDA toolkit को भी single file के रूप में लें तो सिर्फ download ही 4GB से ज्यादा है, इसलिए किसी भी तरफ जाएँ, नतीजा अजीब तरह से बहुत बड़ा दिखता है
यह wrapper के wrapper के wrapper के ऊपर AI से बना wrapper जैसा दिखता है
# Other AMD-specific optimizations can be added here,# For example, you might want to set specific flags or use AMD-optimized librariesजैसी comments हैं, तो समझ नहीं आता कि यहाँ असल में हो क्या रहा हैrequirementsfile और Dockerfile है, और बाकी ज्यादातर helper scripts हैंआजकल अच्छे value-for-money AMD GPU कौन-से हैं?
अभी-अभी मैंने eBay refurbished से used 3090 की दो units लगभग 750 डॉलर प्रति unit में खरीदी हैं, लेकिन local पर LLM चलाते समय बाकी लोग क्या इस्तेमाल कर रहे हैं, यह जानना चाहता हूँ
यह 32GB HBM2 है और basic Flash Attention 2 benchmark में 3090 से लगभग 0–5% तेज है, लेकिन real application performance काफी inconsistent है
कई projects CDNA के matrix cores के लिए optimized नहीं हैं, और RDNA के लिए काम हो भी तो वह अक्सर सीधे CDNA तक नहीं पहुँचता
यह भी frustrating है कि
llama.cppने AMD के लिए Flash Attention PR को यह कहकर close कर दिया कि header-only library unnecessary dependency जोड़ती है: https://github.com/ggerganov/llama.cpp/pull/7011SDXL defaults में
xformersइस्तेमाल करने पर लगभग 4.5–5it/s मिलता है, जो 3090 और 4090 के बीच जैसा है, औरexllamav2में Qwen 72B 3bpw करीब 7t/s देता है, जो 3090 से धीमा है, लेकिन 3090 में fit कराने के लिए और कम precision इस्तेमाल करनी पड़ेगीयह project
llama.cpp,exllamav2,mlc-aiजैसे मौजूदा options की तुलना में AMD users को क्या ज्यादा देता है, यह मुझे ठीक से नहीं पता, और आजकल ज्यादातर projects अपेक्षाकृत आसानी से चल जाते हैंxformers, Ollama update आते ही कुछ न कुछ टूट जाता थाNvidia की तरफ रात को ज्यादा चैन से सो सकते हैं
इसमें HBM2 है और memory bandwidth 4090 जैसी 1TB/s है
हालांकि VRAM सिर्फ 16GB है
1,000 डॉलर में 24GB RAM मिलता है
लोग अक्सर “Docker-based” कहते हैं, लेकिन असल मतलब यह है कि
$SOFTWAREको Docker image के रूप में distribute किया जाता है“Docker-based” कहने पर ऐसा पढ़ता है मानो Docker से AMD cards पर inference किया जा रहा हो, जो मुझे अजीब/बेमतलब expression लगता है
OpenAI भी इसी तरह K8s clusters चलाता है, और AMD के पास भी docs हैं
हालांकि AMD AI side पर सही card, सही ROCm version, और शुद्ध किस्मत चाहिए
AMD ROCm support वाली Docker images देता है, तो उसे base layer की तरह app के साथ जोड़कर GPU को container में pass कर दें तो यह चल सकता है
आखिरकार deployment के दौरान ध्यान रखने वाले variables में से एक कम हो जाता है, इसलिए सचमुच Docker से AMD पर inference करने जैसा ही है
script देखने पर GPU mount किया जा रहा है: https://github.com/slashml/amd_inference/blob/main/run-docke...