यह लेख बताता है कि मैंने अपने Framework Desktop PC (Max+ 395 with 128GB unified memory) को कैसे कॉन्फ़िगर किया है ताकि लोकल LLMs चलाए जा सकें—llama.cpp और Ollama दोनों को Docker कंटेनरों के साथ इस्तेमाल करते हुए।
हार्डवेयर ओवरव्यू
Framework Desktop Max+ 395 में AMD Ryzen AI Max 395 प्रोसेसर (Strix Halo) के साथ इंटीग्रेटेड Radeon ग्राफ़िक्स हैं, जिसमें शामिल है:
- 128GB unified memory (shared CPU/GPU)
- AMD RDNA 3.5 architecture
- gfx1151 GPU target
https://frame.work/gb/en/desktop
GPU मेमोरी कॉन्फ़िगरेशन
GPU वर्कलोड्स के लिए unified memory का पूरा 128GB सक्षम करने हेतु नीचे दिया गया कॉन्फ़िगरेशन आवश्यक है। ये निर्देश technigmaai-wiki की Ubuntu-आधारित गाइड और lhl/strix-halo-testing की Fedora 43 के लिए LLM benchmark सेटअप को मिलाकर (synthesise करके) बनाए गए हैं।
BIOS सेटअप
- रीबूट करें और BIOS/UEFI में जाएँ
- Integrated Graphics/UMA Frame Buffer Size को 512MB पर सेट करें
- IOMMU को Disable करें
Fedora 43 GRUB कॉन्फ़िगरेशन
/etc/default/grub को एडिट करें और GRUB_CMDLINE_LINUX_DEFAULT लाइन को संशोधित करें:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=off amdgpu.gttsize=131072 ttm.pages_limit=33554432"
फिर GRUB अपडेट करें और रीबूट करें:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
मेमोरी सेटिंग्स सत्यापित करें
रीबूट के बाद, जाँचें कि पैरामीटर लागू हुए हैं:
cat /proc/cmdline
sudo dmesg | grep -i gtt
sudo dmesg | grep -i ttm
यह कॉन्फ़िगरेशन GPU वर्कलोड्स के लिए लगभग 128GB GTT मेमोरी सक्षम करता है, जो Qwen3-Coder-Next जैसे बड़े मॉडल्स (उसकी 256K context window के साथ) चलाने के लिए आवश्यक है।
वैकल्पिक Kernel Module कॉन्फ़िगरेशन
और अधिक granular नियंत्रण के लिए, /etc/modprobe.d/amdgpu_llm_optimized.conf बनाएँ:
options amdgpu gttsize=120000
options ttm pages_limit=31457280
options ttm page_pool_size=15728640
फिर initramfs फिर से जनरेट करें:
sudo dracut --force
LLMs के लिए Fedora 43 ही क्यों?
कई गाइड्स Ubuntu को टार्गेट करती हैं, लेकिन Fedora 43 लोकल LLM वर्कलोड्स के लिए कई फायदे देता है:
More Recent Kernel: Fedora 43 में kernel 6.18.4+ आता है, जो ROCm 7.x और Ryzen AI Max 395 के GPU के लिए बेहतर सपोर्ट देता है
Better ROCm Support: नए kernels में Linux kernel के AMDGPU ड्राइवर सुधार unified memory management और LLM वर्कलोड्स के लिए VRAM allocation को बेहतर बनाते हैं
Package Freshness: Fedora का rolling release मॉडल प्रमुख dependencies के नए वर्शन उपलब्ध कराता है, जैसे:
- HIP compilation के लिए LLVM/Clang
- Vulkan drivers (Mesa RADV/AMDVLK)
- CMake और build toolchains
- SELinux विचार: SELinux को अतिरिक्त कॉन्फ़िगरेशन (जैसे
container_use_devices=1) की ज़रूरत होती है, लेकिन यह containerised LLM वर्कलोड्स के लिए बेहतर security isolation देता है
इस अप्रोच के लिए जिन मुख्य स्रोतों से मदद मिली:
Docker-आधारित LLM कंटेनर्स
मैंने kyuz0/amd-strix-halo-toolboxes पर आधारित Docker कंटेनर्स बनाए हैं ताकि llama.cpp और Ollama दोनों चल सकें।
कंटेनर प्रीरेक्विज़िट्स
किसी भी कंटेनर को चलाने से पहले, GPU डिवाइसेज़ तक कंटेनर एक्सेस की अनुमति देने के लिए SELinux सक्षम करें:
sudo setsebool container_use_devices=1
यह one-time कॉन्फ़िगरेशन है, जिसे रीबूट्स के बाद भी बना रहना चाहिए:
sudo setsebool -P container_use_devices=1
Vulkan के साथ Ollama (काम कर रहा है)
Fedora 43\ पर Ollama के साथ Vulkan backend बिल्कुल सही काम करता है।
Dockerfile: ollama-vulkan/Dockerfile Docker Compose: ollama-vulkan/docker-compose.yml
# Ollama + Vulkan on Strix Halo (Fedora 43)
FROM registry.fedoraproject.org/fedora-minimal:43
# Base runtime deps + Vulkan userspace
RUN microdnf -y --nodocs --setopt=install_weak_deps=0 install \
bash ca-certificates curl tar \
libatomic libstdc++ libgcc \
vulkan-loader vulkan-loader-devel vulkaninfo \
mesa-vulkan-drivers radeontop \
pciutils procps-ng wget gzip zstd \
&& microdnf clean all && rm -rf /var/cache/dnf/*
# Install AMDVLK (optional, can use Mesa RADV)
RUN curl -L -o /tmp/amdvlk-2025.Q2.1.x86_64.rpm \
https://github.com/GPUOpen-Drivers/AMDVLK/releases/download/v-2025.Q2.1/amdvlk-2025.Q2.1.x86_64.rpm \
&& microdnf -y install /tmp/amdvlk-*.rpm \
&& rm -f /tmp/amdvlk-*.rpm
# Install Ollama (generic Linux build with Vulkan support)
RUN wget -P /tmp https://github.com/ollama/ollama/releases/download/v0.15.5-rc2/ollama-linux-amd64.tar.zst \
&& tar --zstd -C /usr -xf /tmp/ollama-linux-amd64.tar.zst \
&& rm -f /tmp/ollama-linux-amd64.tar.zst
RUN mkdir -p /root/.ollama
ENV OLLAMA_VULKAN=1 \
GGML_VK_VISIBLE_DEVICES=0 \
OLLAMA_HOST=0.0.0.0 \
OLLAMA_ORIGINS="*"
EXPOSE 11434
CMD ["/usr/bin/ollama", "serve"]
Vulkan के साथ Ollama लॉन्च करें:
# Build the image
docker build -t ollama-strix-vulkan -f ollama-vulkan/Dockerfile .
# Or using Docker Compose
cd ollama-vulkan
docker compose up -d
Ollama एक्सेस करें:
ollama list
ollama pull qwen3-coder-next
ROCm के साथ Ollama (काम नहीं कर रहा - फ़िक्स लंबित)
Ollama का ROCm इम्प्लीमेंटेशन फिलहाल Fedora 43 पर ROCm 7.x के साथ काम नहीं करता। यह issue ROCm issue #5902 में ट्रैक हो रहा है।
Dockerfile: ollama-rocm/Dockerfile Docker Compose: ollama-rocm/docker-compose.yml
# Ollama + Vulkan on Strix Halo (Fedora 43)
FROM registry.fedoraproject.org/fedora:43
RUN dnf -y --nodocs --setopt=install_weak_deps=False install \
make gcc cmake lld clang clang-devel compiler-rt libcurl-devel \
radeontop git vim patch curl ninja-build tar xz aria2c wget zstd \
&& dnf clean all && rm -rf /var/cache/dnf/*
# find & fetch the latest Linux 7.x.x tarball (gfx1151)
WORKDIR /tmp
ARG ROCM_MAJOR_VER=7
ARG GFX=gfx1151
RUN set -euo pipefail; \
BASE="https://therock-nightly-tarball.s3.amazonaws.com"; \
PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}"; \
KEY="$(curl -s "${BASE}?list-type=2&prefix=${PREFIX}" \
| tr '<' '\n' \
| grep -o "therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}\..*\.tar\.gz" \
| sort -V | tail -n1)"; \
echo "Latest tarball: ${KEY}"; \
aria2c -x 16 -s 16 -j 16 --file-allocation=none "${BASE}/${KEY}" -o therock.tar.gz
RUN mkdir -p /opt/rocm-7.0 \
&& tar xzf therock.tar.gz -C /opt/rocm-7.0 --strip-components=1
ENV ROCM_PATH=/opt/rocm-7.0 \
HIP_PLATFORM=amd \
HIP_PATH=/opt/rocm-7.0 \
HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin \
HIP_INCLUDE_PATH=/opt/rocm-7.0/include \
HIP_LIB_PATH=/opt/rocm-7.0/lib \
HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode \
PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib \
LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64 \
CPATH=/opt/rocm-7.0/include \
PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig
RUN printf '%s\n' \
'export ROCM_PATH=/opt/rocm-7.0' \
'export HIP_PLATFORM=amd' \
'export HIP_PATH=/opt/rocm-7.0' \
'export HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin' \
'export HIP_INCLUDE_PATH=/opt/rocm-7.0/include' \
'export HIP_LIB_PATH=/opt/rocm-7.0/lib' \
'export HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode' \
'export PATH="$ROCM_PATH/bin:$HIP_CLANG_PATH:$PATH"' \
'export LD_LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64:$ROCM_PATH/llvm/lib"' \
'export LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64"' \
'export CPATH="$HIP_INCLUDE_PATH"' \
'export PKG_CONFIG_PATH="$ROCM_PATH/lib/pkgconfig"' \
> /etc/profile.d/rocm.sh \
&& chmod +x /etc/profile.d/rocm.sh \
&& echo 'source /etc/profile.d/rocm.sh' >> /etc/bashrc
# Install the Ollama ROCm drivers (v0.15.2)
RUN wget -P /tmp https://github.com/ollama/ollama/releases/download/v0.15.5-rc3/ollama-linux-amd64-rocm.tar.zst \
&& tar -C /usr --use-compress-program=unzstd -xf /tmp/ollama-linux-amd64-rocm.tar.zst \
&& rm -f /tmp/ollama-linux-amd64-rocm.tar.zst
# Install ollama (v0.15.2)
RUN wget -P /tmp https://github.com/ollama/ollama/releases/download/v0.15.5-rc3/ollama-linux-amd64.tar.zst \
&& tar -C /usr --use-compress-program=unzstd -xf /tmp/ollama-linux-amd64.tar.zst \
&& rm -f /tmp/ollama-linux-amd64.tar.zst
# Make Ollama + ROCm shared libs visible to the runtime linker
RUN printf '%s\n' \
/usr/lib/ollama \
/opt/rocm-7.0/lib \
> /etc/ld.so.conf.d/ollama-rocm.conf \
&& ldconfig
# Create /opt/rocm symlink that Ollama expects
RUN ln -sfn /opt/rocm-7.0 /opt/rocm
# Data directory
RUN mkdir -p /root/.ollama
# Expose Ollama API port
EXPOSE 11434
# profile
RUN printf '%s\n' \
'export ROCBLAS_USE_HIPBLASLT=1' \
> /etc/profile.d/rocm.sh && chmod +x /etc/profile.d/rocm.sh \
&& echo 'source /etc/profile.d/rocm.sh' >> /etc/bashrc
ENV OLLAMA_HOST=0.0.0.0 \
OLLAMA_ORIGINS="*"
# Start the server
CMD ["/usr/bin/ollama", "serve"]
ROCm backend "out of memory" errors के साथ फेल हो जाता है, जबकि सिस्टम ~111GB उपलब्ध VRAM रिपोर्ट करता है। यह ROCm 7.2 में एक regression जैसा लगता है, जो Ollama की memory calculation को प्रभावित कर रहा है।
Current Status: AMD/ROCm टीम से upstream fix का इंतज़ार।
Vulkan के साथ llama.cpp
Dockerfile: llamacpp/Dockerfile.llamacpp-strix-vulkan
# build stage
FROM registry.fedoraproject.org/fedora:43 AS builder
# deps
RUN dnf -y --nodocs --setopt=install_weak_deps=False install \
git vim \
make gcc cmake ninja-build lld clang clang-devel compiler-rt libcurl-devel \
vulkan-loader-devel vulkaninfo mesa-vulkan-drivers \
radeontop glslc \
&& dnf clean all && rm -rf /var/cache/dnf/*
# llama.cpp
WORKDIR /opt/llama.cpp
RUN git clone --recursive https://github.com/ggerganov/llama.cpp.git .
# build
RUN git clean -xdf \
&& git submodule update --recursive \
&& cmake -S . -B build -G Ninja \
-DGGML_VULKAN=ON \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_RPC=ON \
-DCMAKE_INSTALL_PREFIX=/usr \
-DLLAMA_BUILD_TESTS=OFF \
-DLLAMA_BUILD_EXAMPLES=ON \
-DLLAMA_BUILD_SERVER=ON \
&& cmake --build build --config Release \
&& cmake --install build --config Release
# libs
RUN find /opt/llama.cpp/build -type f -name 'lib*.so*' -exec cp {} /usr/lib64/ \; \
&& ldconfig
# runtime stage
FROM registry.fedoraproject.org/fedora-minimal:43
# runtime deps
RUN microdnf -y --nodocs --setopt=install_weak_deps=0 install \
bash ca-certificates libatomic libstdc++ libgcc \
vulkan-loader vulkan-loader-devel vulkaninfo mesa-vulkan-drivers radeontop \
&& microdnf clean all && rm -rf /var/cache/dnf/*
# copy
COPY --from=builder /usr/ /usr/
COPY --from=builder /usr/local/ /usr/local/
COPY --from=builder /opt/llama.cpp/build/bin/rpc-* /usr/local/bin/
# ld
RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf \
&& echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local.conf \
&& ldconfig \
&& cp -n /usr/local/lib/libllama*.so* /usr/lib64/ 2>/dev/null || true \
&& ldconfig
# shell
CMD ["/bin/bash"]
llama.cpp के लिए Vulkan backend stable और well-tested है। यह सभी model sizes के लिए भरोसेमंद performance देता है।
Docker Compose एंट्री:
qwen-3-coder-vulkan:
image: llamacpp-strix-vulkan
container_name: llamacpp
restart: unless-stopped
devices:
- /dev/dri:/dev/dri
group_add:
- "video"
volumes:
- /home/mark/running-llms/:/root/running-llms
ports:
- "8080:8080"
security_opt:
- seccomp=unconfined
command: >
bash -c "llama-server --alias Qwen3-Coder-30B -m /root/running-llms/hf-models/unsloth/Qwen3-Coder-30B-A3B-Instruct-1M-BF16/BF16/Qwen3-Coder-30B-A3B-Instruct-1M-BF16-00001-of-00002.gguf --ctx-size 262144 -fa 1 --no-mmap --host 0.0.0.0 --port 8080 --temp 0.7 --top-k 20 --min-p 0.01 --top-p 0.8 --repeat-penalty 1.05 --jinja -ngl 99 --threads -1"
ROCm के साथ llama.cpp (तेज़ - ~30% परफ़ॉर्मेंस बूस्ट)
Dockerfile: llamacpp/Dockerfile.llamacpp-rocm
# build
FROM registry.fedoraproject.org/fedora:43 AS builder
RUN dnf -y --nodocs --setopt=install_weak_deps=False install \
make gcc cmake lld clang clang-devel compiler-rt libcurl-devel \
radeontop git vim patch curl ninja-build tar xz aria2c \
&& dnf clean all && rm -rf /var/cache/dnf/*
# find & fetch the latest Linux 7.x.x tarball (gfx1151)
WORKDIR /tmp
ARG ROCM_MAJOR_VER=7
ARG GFX=gfx1151
RUN set -euo pipefail; \
BASE="https://therock-nightly-tarball.s3.amazonaws.com"; \
PREFIX="therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}"; \
KEY="$(curl -s "${BASE}?list-type=2&prefix=${PREFIX}" \
| tr '<' '\n' \
| grep -o "therock-dist-linux-${GFX}-${ROCM_MAJOR_VER}\..*\.tar\.gz" \
| sort -V | tail -n1)"; \
echo "Latest tarball: ${KEY}"; \
aria2c -x 16 -s 16 -j 16 --file-allocation=none "${BASE}/${KEY}" -o therock.tar.gz
RUN mkdir -p /opt/rocm-7.0 \
&& tar xzf therock.tar.gz -C /opt/rocm-7.0 --strip-components=1
ENV ROCM_PATH=/opt/rocm-7.0 \
HIP_PLATFORM=amd \
HIP_PATH=/opt/rocm-7.0 \
HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin \
HIP_INCLUDE_PATH=/opt/rocm-7.0/include \
HIP_LIB_PATH=/opt/rocm-7.0/lib \
HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode \
PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib \
LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64 \
CPATH=/opt/rocm-7.0/include \
PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig
RUN printf '%s\n' \
'export ROCM_PATH=/opt/rocm-7.0' \
'export HIP_PLATFORM=amd' \
'export HIP_PATH=/opt/rocm-7.0' \
'export HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin' \
'export HIP_INCLUDE_PATH=/opt/rocm-7.0/include' \
'export HIP_LIB_PATH=/opt/rocm-7.0/lib' \
'export HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode' \
'export PATH="$ROCM_PATH/bin:$HIP_CLANG_PATH:$PATH"' \
'export LD_LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64:$ROCM_PATH/llvm/lib"' \
'export LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64"' \
'export CPATH="$HIP_INCLUDE_PATH"' \
'export PKG_CONFIG_PATH="$ROCM_PATH/lib/pkgconfig"' \
> /etc/profile.d/rocm.sh \
&& chmod +x /etc/profile.d/rocm.sh \
&& echo 'source /etc/profile.d/rocm.sh' >> /etc/bashrc
WORKDIR /opt/llama.cpp
RUN git clone --recursive https://github.com/ggerganov/llama.cpp.git . \
&& git clean -xdf \
&& git submodule update --recursive
RUN cmake -S . -B build \
-DGGML_HIP=ON \
-DAMDGPU_TARGETS=gfx1151 \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_RPC=ON \
-DLLAMA_HIP_UMA=ON \
&& cmake --build build --config Release -- -j$(nproc) \
&& cmake --install build --config Release
# keep bin; drop headers/docs/static libs (retain llama.cpp for rpc binaries)
RUN find /opt/rocm-7.0 -type f -name '*.a' -delete \
&& rm -rf /opt/rocm-7.0/include /opt/rocm-7.0/share \
/opt/rocm-7.0/llvm/include /opt/rocm-7.0/llvm/share
# runtime
FROM registry.fedoraproject.org/fedora-minimal:43
RUN microdnf -y --nodocs --setopt=install_weak_deps=0 install \
bash ca-certificates libatomic libstdc++ libgcc radeontop vim procps-ng \
&& microdnf clean all && rm -rf /var/cache/dnf/*
COPY --from=builder /opt/rocm-7.0 /opt/rocm-7.0
COPY --from=builder /usr/local/ /usr/local/
COPY --from=builder /opt/llama.cpp/build/bin/rpc-* /usr/local/bin/
# COPY gguf-vram-estimator.py /usr/local/bin/
# RUN chmod +x /usr/local/bin/gguf-vram-estimator.py
ENV ROCM_PATH=/opt/rocm-7.0 \
HIP_PLATFORM=amd \
HIP_PATH=/opt/rocm-7.0 \
HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin \
HIP_INCLUDE_PATH=/opt/rocm-7.0/include \
HIP_LIB_PATH=/opt/rocm-7.0/lib \
HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode \
PATH=/opt/rocm-7.0/bin:/opt/rocm-7.0/llvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
LD_LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64:/opt/rocm-7.0/llvm/lib \
LIBRARY_PATH=/opt/rocm-7.0/lib:/opt/rocm-7.0/lib64 \
CPATH=/opt/rocm-7.0/include \
PKG_CONFIG_PATH=/opt/rocm-7.0/lib/pkgconfig
RUN printf '%s\n' \
'export ROCM_PATH=/opt/rocm-7.0' \
'export HIP_PLATFORM=amd' \
'export HIP_PATH=/opt/rocm-7.0' \
'export HIP_CLANG_PATH=/opt/rocm-7.0/llvm/bin' \
'export HIP_INCLUDE_PATH=/opt/rocm-7.0/include' \
'export HIP_LIB_PATH=/opt/rocm-7.0/lib' \
'export HIP_DEVICE_LIB_PATH=/opt/rocm-7.0/lib/llvm/amdgcn/bitcode' \
'export PATH="$ROCM_PATH/bin:$HIP_CLANG_PATH:$PATH"' \
'export LD_LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64:$ROCM_PATH/llvm/lib"' \
'export LIBRARY_PATH="$HIP_LIB_PATH:$ROCM_PATH/lib:$ROCM_PATH/lib64"' \
'export CPATH="$HIP_INCLUDE_PATH"' \
'export PKG_CONFIG_PATH="$ROCM_PATH/lib/pkgconfig"' \
> /etc/profile.d/rocm.sh \
&& chmod +x /etc/profile.d/rocm.sh \
&& echo 'source /etc/profile.d/rocm.sh' >> /etc/bashrc
# make /usr/local libs visible without touching env
RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf \
&& echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local.conf \
&& ldconfig
CMD ["/bin/bash"]
llama.cpp के लिए ROCm backend, Vulkan के मुकाबले लगभग 30% बेहतर performance देता है। इसका कारण है कि ROCm, AMD का native GPU computing platform है, जिसे compute-heavy वर्कलोड्स (जैसे LLM inference) के लिए optimise किया गया है।
Docker Compose एंट्री:
qwen-3-coder-rocm:
image: llamacpp-rocm
container_name: llamacpp
restart: unless-stopped
devices:
- /dev/dri:/dev/dri
- /dev/kfd:/dev/kfd
group_add:
- "video"
- "render"
volumes:
- /home/mark/running-llms/:/root/running-llms
ports:
- "8080:8080"
security_opt:
- seccomp=unconfined
command: >
bash -c "llama-server --alias Qwen3-Coder-30B -m /root/running-llms/hf-models/unsloth/Qwen3-Coder-30B-A3B-Instruct-1M-BF16/BF16/Qwen3-Coder-30B-A3B-Instruct-1M-BF16-00001-of-00002.gguf --ctx-size 262144 -fa 1 --no-mmap --host 0.0.0.0 --port 8080 --temp 0.7 --top-k 20 --min-p 0.01 --top-p 0.8 --repeat-penalty 1.05 --jinja -ngl 99 --threads -1"
मॉडल्स चलाना
Qwen3-Coder-Next (80B MoE)
यही वह जगह है जहाँ Framework Desktop वाकई चमकता है। मैं Qwen3-Coder-Next का पूरा UD-Q8_K_XL वर्शन, पूरी 256K context window के साथ चला सकता हूँ।
लिंक्स:
मॉडल स्पेक्स:
- Architecture: 80B MoE (3B active parameters)
- Context Window: 262,144 tokens
- Memory Required: UD-Q8_K_XL (8-bit) के लिए ~93.4 GB
- Recommended Settings: temp=1.0, top_p=0.95, top_k=40, min_p=0.01
वर्तमान मॉडल सेटअप
मेरा docker-compose.yml कई services परिभाषित करता है:
| Service | Backend | Model | Context |
|---|---|---|---|
| qwen-3-coder-next-rocm | ROCm | Qwen3-Coder-Next (UD-Q8_K_XL) | 262k |
| qwen-3-coder-next-vulkan | Vulkan | Qwen3-Coder-Next | 262k |
| qwen-3-next-rocm | ROCm | Qwen3-Next-80B-A3B-Thinking | 32k |
| gpt-oss-rocm | ROCm | gpt-oss-120b-GGUF | 131k |
| glm-4.7 | Vulkan | GLM-4.7 | 16k |
लॉन्च कमांड्स
Ollama service शुरू करें:
cd ollama-vulkan
docker compose up -d
किसी विशिष्ट मॉडल के लिए llama.cpp शुरू करें:
docker compose up -d qwen-3-coder-next-rocm
सभी services बंद करें:
docker compose down
एजेंटिक वर्कफ़्लोज़ और Claude Code
मैं इस कॉन्फ़िगरेशन पर कई घंटों तक पूरी तरह autonomous Claude Code sessions चला रहा हूँ। Framework Desktop ने इन autonomous sessions के ज़रिए इस लेख का बड़ा हिस्सा लिखा है।
Claude Code कॉन्फ़िगरेशन
export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_API_KEY=""
export ANTHROPIC_BASE_URL=http://your-framework-desktop-ip:11434
claude --model qwen3-coder-next
Note: your-framework-desktop-ip को अपने वास्तविक domain या IP address से बदलें।
वर्तमान समस्याएँ
एजेंटिक वर्कफ़्लोज़ में मुझे Ollama के साथ एक issue मिला है - देखें Ollama issue #13939। Claude Code कभी-कभी ऐसे model names इस्तेमाल करने की कोशिश करता है जो लोकल रूप से उपलब्ध नहीं होते, जिससे timeouts हो जाते हैं।
Workaround: मेरे सेटअप पर एजेंटिक वर्कफ़्लोज़ के लिए सीधे llama.cpp इस्तेमाल करने से ज़्यादा भरोसेमंद नतीजे मिलते हैं। stability और consistency स्पष्ट रूप से बेहतर है।
मैं इस सेटअप से इतना खुश क्यों हूँ
मुफ़्त में अनंत "Tokens"
यह कॉन्फ़िगरेशन मुझे मुफ़्त में 24x7 अनंत LLM tokens “burn” करने देता है। हालांकि paid models तेज़ होते हैं, यह सेटअप सक्षम करता है:
- अलग-अलग मॉडल्स और prompts के साथ अंतहीन प्रयोग
- लंबे समय तक चलने वाले autonomous agent sessions
- per-token costs की चिंता नहीं
- पूर्ण data privacy और offline operation
परफ़ॉर्मेंस विशेषताएँ
- Paid models से धीमा: हाँ, लेकिन अधिकांश tasks के लिए यह अंतर स्वीकार्य है
- Coding के लिए बेहतर: लोकल models code completion और understanding में उत्कृष्ट हैं
- Unlimited context: Qwen3-Coder-Next की 256K context window game-changing है
भविष्य
यह कॉन्फ़िगरेशन बेहद productive रहा है। अब मैं:
- घंटों तक पूरी तरह autonomous Claude Code sessions चला रहा हूँ
- अलग-अलग quantisations और model architectures पर प्रयोग कर रहा हूँ
- लोकल GPU का लाभ उठाने वाले custom agent workflows विकसित कर रहा हूँ
मैं जल्द ही अपने Claude Code सेटअप पर एक लेख जोड़ूँगा और बताऊँगा कि मैं इसे इन लोकल models के साथ काम करने के लिए कैसे कॉन्फ़िगर करता हूँ।
Attribution और धन्यवाद
open-source community के अविश्वसनीय काम के बिना यह सेटअप संभव नहीं होता। बहुत-बहुत धन्यवाद:
- kyuz0/amd-strix-halo-toolboxes - Docker कंटेनर्स के लिए प्रेरणा; Vulkan और ROCm backends के लिए pre-built images के साथ
- technigmaai-wiki - GPU memory configuration के लिए व्यापक step-by-step निर्देश
- lhl/strix-halo-testing - Strix Halo के लिए विस्तृत LLM benchmarking setup
- Unsloth - शानदार GGUF-optimised models उपलब्ध कराने के लिए
- ROCm - open GPU software stack
- llama.cpp - ggerganov और contributors का अविश्वसनीय काम
ये resources काफी प्रयास का प्रतिनिधित्व करते हैं और AMD hardware पर local LLM inference की cutting edge स्थिति को दर्शाते हैं।
