4 पॉइंट द्वारा GN⁺ 2024-10-04 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2024-10-04
Hacker News की राय
  • अगर उपयोग inference के लिए है और कार्ड supported है, या architecture ऐसी है जिस पर Linux में HSA_OVERRIDE_GFX_VERSION इस्तेमाल किया जा सकता है, तो upstream PyTorch और transformers से लगभग सब कुछ चलाया जा सकता है
    llama.cpp भी कम से कम करीब 1 साल से काफी बिना दिक्कत compile हो रहा है, और Windows पर आम तौर पर release में win-hip binary होती है; नहीं तो performance कम होगी, लेकिन Vulkan build से workaround किया जा सकता है
    हालांकि इस लेख का ROCm 5.4.2 लगभग 2 साल पुराना version है और तब से काफी कुछ बदल चुका है, इसलिए यह अक्टूबर 2024 में नया प्रकाशित क्यों हुआ, यह जानने की उत्सुकता है
    मैंने हाल ही में RDNA3-केंद्रित compatibility document को ROCm 6.2 के आधार पर update किया था, और कुछ महीनों में भी upstream bitsandbytes, upstream xformers, Triton-based Flash Attention आदि में बहुत बदलाव हुए हैं: https://llm-tracker.info/howto/AMD-GPUs

    • मैंने AMD 7900 XTX पर inference करके देखा है, और आजकल सच में लगभग कोई खास juggling करने की जरूरत नहीं पड़ती
      अगर आप a1111 जैसी चीज इस्तेमाल कर रहे हैं, तो requirements.txt पर भरोसा न करें; PyTorch homepage के निर्देशों के अनुसार ROCm version वाला torch install करें
      Obsidian भी ऐसा ही है, और HIP कम से कम Arch और Ubuntu पर काफी आसान है, जबकि Fedora में अभी थोड़ा tweaking चाहिए
      मुझे पता नहीं था कि xformers भी काम करता है; यह अच्छी खबर है
    • अच्छा होगा अगर Linux में Docker से चलाने का तरीका वाला section हो
      तुरंत काम करने वाला सिर्फ Ollama था, जिसमें example मौजूद है: https://github.com/ollama/ollama/blob/main/docs/docker.md
      llama.cpp और koboldcpp के Docker images तो हैं, लेकिन run examples कम हैं, और text-generation-webui-docker RHEL9 पर 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
    • संबंधित लेख: https://www.nonbios.ai/post/deploying-large-405b-models-in-f...
      संक्षेप में, 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 का आधा हिस्सा print statements है, और जहां branching है, वहां असल में branching की जरूरत भी नहीं है
    बस दो environment variables define करने और torch के दो flags set करने जितना काम है

    • Data scientists और machine learning वाले लोगों को software engineers समझकर उनसे वही output expect करने से सिर्फ BP बढ़ता है—यह बात सुधारने के लिए मुझे therapy तक लेनी पड़ी
      मेरा मानना है कि team या organization में expectation management सच में बहुत बड़ा हिस्सा है
    • लगा कि शायद यह बहुत harsh है, लेकिन repository देखकर लगा कि नहीं
      सच में content लगभग कुछ भी नहीं है
    • आपका मतलब समझ में आता है, लेकिन ऐसे comments की वजह से लोग code share करने, open source contribution करने या programming जारी रखने से हिचकने लगते हैं
  • लगता है कि पुराना ROCm 5.4.2 इस्तेमाल हो रहा है; यह 2 साल पुराना version है, इसलिए मुझे शक है कि यह मेरे RX 7900 XTX को support करेगा या नहीं
    व्यक्तिगत तौर पर, latest rocm/pytorch image इस्तेमाल करना और उसमें जरूरी चीजें चलाना मेरे लिए सबसे आसान रहा

    • RX 7900 XTX(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, render group 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

    • Ubuntu 22.04.5 पर RX 7900 XTX के साथ AMD-provided ROCm और Ollama बिना बड़ी दिक्कत के install किए, और Ollama से ROCm-based LLM भी ठीक चलता है
    • क्या इस समय market में consumer-friendly price पर 24GB से ज्यादा VRAM वाला कोई AMD card है?
  • Ryzen 8700G को NPU पर neural network inference के लिए खरीदे हुए करीब 8 महीने हो गए हैं, लेकिन अब तक acceleration NPU से नहीं, सिर्फ iGPU के Vulkan से मिला है
    मैं सिर्फ Linux इस्तेमाल कर रहा हूँ, और अच्छी बात यह है कि 64GB RAM की वजह से 32GB से बड़े models भी बिना समस्या आज़मा पाया
    Vulkan backend सपोर्ट करने वाला llama.cpp तारीफ के काबिल है

    • iGPU पर भी ROCm/HIP support मिल सकता है, और llama.cpp compile करते समय LLAMA_HIP_UMA=1 flag डालकर देखा जा सकता है
      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 होता है, यह समझ नहीं आया

    • आजकल software बेतहाशा भारी हो गया है, यह सही है, लेकिन ROCm कोई simple GPU driver नहीं है
      इसमें कई tools और libraries शामिल हैं
      CUDA toolkit को भी single file के रूप में लें तो सिर्फ download ही 4GB से ज्यादा है, इसलिए किसी भी तरफ जाएँ, नतीजा अजीब तरह से बहुत बड़ा दिखता है
    • https://github.com/zml/zml पर इस समस्या को solve किया जा रहा है
    • अब GPU पर चलने वाला CPU driver लगभग पूरा operating system बन चुका है
    • AMD driver के नाम पर Linux kernel को पूरी तरह गंदा करने के स्तर तक पहुँचा हुआ है: https://www.phoronix.com/news/AMD-5-Million-Lines
  • यह 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 हैं, तो समझ नहीं आता कि यहाँ असल में हो क्या रहा है

    • मूल रूप से यह एक बड़ा requirements file और Dockerfile है, और बाकी ज्यादातर helper scripts हैं
  • आजकल अच्छे value-for-money AMD GPU कौन-से हैं?
    अभी-अभी मैंने eBay refurbished से used 3090 की दो units लगभग 750 डॉलर प्रति unit में खरीदी हैं, लेकिन local पर LLM चलाते समय बाकी लोग क्या इस्तेमाल कर रहे हैं, यह जानना चाहता हूँ

    • हाल ही में MI100 650 डॉलर में खरीदा
      यह 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/7011
      SDXL 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 अपेक्षाकृत आसानी से चल जाते हैं
    • निजी तौर पर AMD iGPU/GPU मेरे लिए ज्यादा valuable नहीं रहा, क्योंकि PyTorch, ROCm, xformers, Ollama update आते ही कुछ न कुछ टूट जाता था
      Nvidia की तरफ रात को ज्यादा चैन से सो सकते हैं
    • Radeon Pro VII नया 300 euro में खरीदा, और deal बुरी नहीं थी
      इसमें HBM2 है और memory bandwidth 4090 जैसी 1TB/s है
      हालांकि VRAM सिर्फ 16GB है
    • शायद 7900 XTX ही जवाब होगा
      1,000 डॉलर में 24GB RAM मिलता है
  • लोग अक्सर “Docker-based” कहते हैं, लेकिन असल मतलब यह है कि $SOFTWARE को Docker image के रूप में distribute किया जाता है
    “Docker-based” कहने पर ऐसा पढ़ता है मानो Docker से AMD cards पर inference किया जा रहा हो, जो मुझे अजीब/बेमतलब expression लगता है

    • Nvidia में जैसे होता है, वैसे ही Docker container के अंदर inference किया जा सकता है
      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 करने जैसा ही है
    • Docker machine learning का standard tool इसलिए बना क्योंकि system libraries से जुड़ने वाला Python distribution अगर वह layer साथ लेकर न चले तो पूरा मामला गड़बड़ हो जाता है
    • Docker में specific device mount किया जा सकता है
      script देखने पर GPU mount किया जा रहा है: https://github.com/slashml/amd_inference/blob/main/run-docke...
    • ZML में इस समस्या को solve किया जा रहा है: https://github.com/zml/zml
    • यह बेमतलब क्यों है? Docker container में भी device से communicate किया जा सकता है, बस उसे attach कर देना होता है