Mark Stratmann
Running LLMs Background

Framework Desktop (Max+ 395 - 128GB) üzerinde Yerel LLM’leri Çalıştırma

Docker container’larıyla hem llama.cpp hem de Ollama kullanarak yerel LLM’ler çalıştırın

Bu makale, Framework Desktop PC'mi (Max+ 395, 128GB birleşik bellek) Docker konteynerleriyle hem llama.cpp hem de Ollama kullanarak yerel LLM'leri çalıştıracak şekilde nasıl yapılandırdığımı belgeliyor.

Donanım Genel Bakış

Framework Desktop Max+ 395, entegre Radeon grafiklere (Strix Halo) sahip AMD Ryzen AI Max 395 işlemcisini içerir ve şu özelliklere sahiptir:

  • 128GB birleşik bellek (CPU/GPU paylaşımlı)
  • AMD RDNA 3.5 mimarisi
  • gfx1151 GPU hedefi

https://frame.work/gb/en/desktop

GPU Bellek Yapılandırması

GPU iş yükleri için birleşik belleğin tamamı olan 128GB'ı etkinleştirmek için aşağıdaki yapılandırma gereklidir. Bu talimatlar, technigmaai-wiki'deki Ubuntu tabanlı rehberi lhl/strix-halo-testing'in Fedora 43 için LLM kıyaslama kurulumu ile sentezler.

BIOS Kurulumu

  1. Yeniden başlatın ve BIOS/UEFI'ye girin
  2. Integrated Graphics/UMA Frame Buffer Size değerini 512MB olarak ayarlayın
  3. IOMMU'yu devre dışı bırakın

Fedora 43 GRUB Yapılandırması

/etc/default/grub dosyasını düzenleyin ve GRUB_CMDLINE_LINUX_DEFAULT satırını değiştirin:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amd_iommu=off amdgpu.gttsize=131072 ttm.pages_limit=33554432"

Ardından GRUB'u güncelleyin ve yeniden başlatın:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

Bellek Ayarlarını Doğrulama

Yeniden başlattıktan sonra parametrelerin uygulandığını doğrulayın:

cat /proc/cmdline
sudo dmesg | grep -i gtt
sudo dmesg | grep -i ttm

Bu yapılandırma, GPU iş yükleri için yaklaşık 128GB GTT belleğini etkinleştirir; bu da 256K bağlam penceresine sahip Qwen3-Coder-Next gibi büyük modelleri çalıştırmak için kritik önemdedir.

Alternatif Çekirdek Modülü Yapılandırması

Daha ayrıntılı kontrol için /etc/modprobe.d/amdgpu_llm_optimized.conf dosyasını oluşturun:

options amdgpu gttsize=120000
options ttm pages_limit=31457280
options ttm page_pool_size=15728640

Ardından initramfs'i yeniden üretin:

sudo dracut --force

Neden LLM'ler için Fedora 43?

Pek çok rehber Ubuntu'yu hedeflese de Fedora 43, yerel LLM iş yükleri için çeşitli avantajlar sunar:

Daha Güncel Çekirdek: Fedora 43, ROCm 7.x ve Ryzen AI Max 395'in GPU'su için daha iyi destek sağlayan 6.18.4+ çekirdeğiyle gelir

Daha İyi ROCm Desteği: Linux çekirdeğinin AMDGPU sürücüsündeki daha yeni çekirdeklerde yer alan iyileştirmeler, LLM iş yükleri için daha iyi birleşik bellek yönetimi ve VRAM tahsisine dönüşür

Paket Güncelliği: Fedora'nın rolling release modeli, şu gibi temel bağımlılıkların daha yeni sürümlerini sunar:

  • HIP derlemesi için LLVM/Clang
  • Vulkan sürücüleri (Mesa RADV/AMDVLK)
  • CMake ve derleme araç zincirleri
  1. SELinux Hususları: SELinux ek yapılandırma gerektirse de (ör. container_use_devices=1), konteynerleştirilmiş LLM iş yükleri için daha iyi güvenlik izolasyonu sağlar

Bu yaklaşımı şekillendiren temel kaynaklar:

Docker Tabanlı LLM Konteynerleri

Hem llama.cpp hem de Ollama çalıştırmak için kyuz0/amd-strix-halo-toolboxes tabanlı Docker konteynerleri oluşturdum.

Konteyner Ön Koşulları

Herhangi bir konteyner çalıştırmadan önce, konteynerlerin GPU aygıtlarına erişebilmesi için SELinux'u etkinleştirin:

sudo setsebool container_use_devices=1

Bu, yeniden başlatmalar arasında kalıcı olması gereken tek seferlik bir yapılandırmadır:

sudo setsebool -P container_use_devices=1

Vulkan ile Ollama (Çalışıyor)

Vulkan arka ucu, Fedora 43 üzerinde Ollama ile kusursuz çalışıyor.

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 ile Ollama'yı başlatın:

# 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'ya erişin:

ollama list
ollama pull qwen3-coder-next

ROCm ile Ollama (Çalışmıyor - Düzeltme Bekleniyor)

Ollama'nın ROCm uygulaması şu anda Fedora 43 üzerinde ROCm 7.x ile çalışmıyor. Sorun ROCm issue #5902 üzerinden takip ediliyor.

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 arka ucu, sistem ~111GB kullanılabilir VRAM rapor etse bile "out of memory" hatalarıyla başarısız oluyor. Bu, ROCm 7.2'de Ollama'nın bellek hesaplamasını etkileyen bir regresyon gibi görünüyor.

Mevcut Durum: AMD/ROCm ekibinden upstream düzeltme bekleniyor.

Vulkan ile 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 için Vulkan arka ucu kararlı ve iyi test edilmiştir. Tüm model boyutları için güvenilir performans sağlar.

Docker Compose Girdisi:

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 ile llama.cpp (Daha Hızlı - ~%30 Performans Artışı)

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 için ROCm arka ucu, Vulkan'a göre yaklaşık %30 daha iyi performans sağlar. Bunun nedeni ROCm'un, LLM çıkarımı gibi hesaplama ağırlıklı iş yükleri için optimize edilmiş AMD'nin yerel GPU hesaplama platformu olmasıdır.

Docker Compose Girdisi:

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"

Modelleri Çalıştırma

Qwen3-Coder-Next (80B MoE)

Framework Desktop'ın gerçekten parladığı yer burası. Qwen3-Coder-Next'in tam 256K bağlam penceresiyle birlikte UD-Q8_K_XL tam sürümünü çalıştırabiliyorum.

Bağlantılar:

Model özellikleri:

  • Mimari: 80B MoE (3B aktif parametre)
  • Bağlam Penceresi: 262,144 token
  • Gerekli Bellek: UD-Q8_K_XL (8-bit) için ~93.4 GB
  • Önerilen Ayarlar: temp=1.0, top_p=0.95, top_k=40, min_p=0.01

Mevcut Model Kurulumu

docker-compose.yml dosyam birden fazla servis tanımlar:

HizmetArka uçModelBağlam
qwen-3-coder-next-rocmROCmQwen3-Coder-Next (UD-Q8_K_XL)262k
qwen-3-coder-next-vulkanVulkanQwen3-Coder-Next262k
qwen-3-next-rocmROCmQwen3-Next-80B-A3B-Thinking32k
gpt-oss-rocmROCmgpt-oss-120b-GGUF131k
glm-4.7VulkanGLM-4.716k

Başlatma Komutları

Ollama servisini başlatın:

cd ollama-vulkan
docker compose up -d

Belirli bir model için llama.cpp'yi başlatın:

docker compose up -d qwen-3-coder-next-rocm

Tüm servisleri durdurun:

docker compose down

Ajan Tabanlı İş Akışları ve Claude Code

Bu yapılandırmada tamamen otonom Claude Code oturumlarını saatlerce çalıştırıyorum. Framework Desktop, bu makalenin büyük bölümünü bu otonom oturumlar aracılığıyla yazdı.

Claude Code Yapılandırması

export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_API_KEY=""
export ANTHROPIC_BASE_URL=http://your-framework-desktop-ip:11434

claude --model qwen3-coder-next

Not: your-framework-desktop-ip değerini gerçek alan adınız veya IP adresinizle değiştirin.

Mevcut Sorunlar

Ajan tabanlı iş akışlarında Ollama ile ilgili bir sorunla karşılaştım - bkz. Ollama issue #13939. Claude Code zaman zaman yerelde mevcut olmayan model adlarını kullanmaya çalışıyor ve bu da zaman aşımlarına yol açıyor.

Geçici Çözüm: llama.cpp'yi doğrudan kullanmak, kurulumumda ajan tabanlı iş akışları için daha güvenilir sonuçlar veriyor. Kararlılık ve tutarlılık belirgin şekilde daha iyi.

Bu Kurulumdan Neden Çok Memnunum

Ücretsiz Sonsuz "Token"

Bu yapılandırma, 7/24 ücretsiz olarak sonsuz LLM token'ı "yakmama" olanak tanıyor. Ücretli modeller daha hızlı olsa da bu kurulum şunları mümkün kılıyor:

  • Farklı modeller ve istemlerle sonsuz deneme
  • Uzun süre çalışan otonom ajan oturumları
  • Token başı maliyet endişesi olmaması
  • Tam veri gizliliği ve çevrimdışı çalışma

Performans Özellikleri

  • Ücretli modellerden daha yavaş: Evet, ancak fark çoğu görev için kabul edilebilir
  • Kodlama için daha iyi: Yerel modeller kod tamamlama ve anlama konusunda çok başarılı
  • Sınırsız bağlam: Qwen3-Coder-Next'in 256K bağlam penceresi oyunun kurallarını değiştiriyor

Gelecek

Bu yapılandırma inanılmaz derecede üretken oldu. Artık:

  • Saatlerce tamamen otonom Claude Code oturumları çalıştırıyorum
  • Farklı quantisation'lar ve model mimarileriyle denemeler yapıyorum
  • Yerel GPU'dan yararlanan özel ajan iş akışları geliştiriyorum

Yakında Claude Code kurulumum ve bunu bu yerel modellerle çalışacak şekilde nasıl yapılandırdığım hakkında bir makale ekleyeceğim.

Atıf ve Teşekkür

Bu kurulum, açık kaynak topluluğunun inanılmaz çalışmaları olmadan mümkün olmazdı. Şunlara büyük teşekkürler:

  • kyuz0/amd-strix-halo-toolboxes - Vulkan ve ROCm arka uçları için hazır imajlarla, Docker konteynerleri için ilham kaynağı
  • technigmaai-wiki - GPU bellek yapılandırması için kapsamlı adım adım talimatlar
  • lhl/strix-halo-testing - Strix Halo için ayrıntılı LLM kıyaslama kurulumu
  • Unsloth - Harika GGUF optimize edilmiş modeller sağladığı için
  • ROCm - Açık GPU yazılım yığını
  • llama.cpp - ggerganov ve katkıda bulunanların inanılmaz çalışması

Bu kaynaklar ciddi bir emeği temsil ediyor ve AMD donanımı üzerinde yerel LLM çıkarımının en ileri noktasını yansıtıyor.