本文记录了我如何配置我的 Framework Desktop PC(Max+ 395,配备 128GB 统一内存),以便使用 llama.cpp 和 Ollama 通过 Docker 容器运行本地 LLM。
硬件概览
Framework Desktop Max+ 395 采用 AMD Ryzen AI Max 395 处理器并集成 Radeon 显卡(Strix Halo),特性包括:
- 128GB 统一内存(CPU/GPU 共享)
- AMD RDNA 3.5 架构
- gfx1151 GPU target
https://frame.work/gb/en/desktop
GPU 内存配置
为了让 GPU 工作负载能够使用完整的 128GB 统一内存,需要进行如下配置。这些说明综合了 technigmaai-wiki 的 Ubuntu 指南,以及 lhl/strix-halo-testing 面向 Fedora 43 的 LLM 基准测试配置。
BIOS 设置
- 重启并进入 BIOS/UEFI
- 将 Integrated Graphics/UMA Frame Buffer Size 设置为 512MB
- 禁用 IOMMU
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 上下文窗口的大模型至关重要。
替代的内核模块配置
如果需要更精细的控制,创建 /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
为什么用 Fedora 43 跑 LLM?
虽然很多指南都面向 Ubuntu,但 Fedora 43 对本地 LLM 工作负载有几个优势:
更新的内核:Fedora 43 搭载 6.18.4+ 内核,对 ROCm 7.x 以及 Ryzen AI Max 395 的 GPU 支持更好
更好的 ROCm 支持:较新内核中 Linux 的 AMDGPU 驱动改进,会带来更好的统一内存管理与 VRAM 分配,更适合 LLM 工作负载
软件包更新:Fedora 的滚动更新模式会提供更“新鲜”的关键依赖版本,例如:
- 用于 HIP 编译的 LLVM/Clang
- Vulkan 驱动(Mesa RADV/AMDVLK)
- CMake 与构建工具链
- SELinux 注意事项:虽然 SELinux 需要额外配置(例如
container_use_devices=1),但它能为容器化 LLM 工作负载提供更好的安全隔离
促成该方案的关键信息来源:
基于 Docker 的 LLM 容器
我基于 kyuz0/amd-strix-halo-toolboxes 制作了 Docker 容器,用于运行 llama.cpp 和 Ollama。
容器前置条件
在运行任何容器之前,启用 SELinux 以允许容器访问 GPU 设备:
sudo setsebool container_use_devices=1
这是一项一次性配置,需要在重启后仍然生效:
sudo setsebool -P container_use_devices=1
使用 Vulkan 的 Ollama(可用)
在 Fedora 43 上,Ollama 的 Vulkan 后端运行得非常好。
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 上无法工作。问题跟踪见 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"]
即使系统报告可用 VRAM 约为 ~111GB,ROCm 后端仍会因 “out of memory” 报错而失败。这似乎是 ROCm 7.2 的一个回归问题,影响了 Ollama 的内存计算。
当前状态:等待 AMD/ROCm 团队在上游修复。
使用 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 后端稳定且经过充分测试,能为所有模型规模提供可靠性能。
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 后端性能比 Vulkan 高约 30%。这是因为 ROCm 是 AMD 原生的 GPU 计算平台,针对 LLM 推理这类计算密集型负载进行了优化。
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 真正大放异彩的地方。我可以在完整 256K 上下文窗口下运行 Qwen3-Coder-Next 的完整 UD-Q8_K_XL 版本。
链接:
模型规格:
- 架构:80B MoE(3B 活跃参数)
- 上下文窗口:262,144 tokens
- 所需内存:UD-Q8_K_XL(8-bit)约 ~93.4 GB
- 推荐设置:temp=1.0, top_p=0.95, top_k=40, min_p=0.01
当前模型配置
我的 docker-compose.yml 定义了多个服务:
| 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 服务:
cd ollama-vulkan
docker compose up -d
为特定模型启动 llama.cpp:
docker compose up -d qwen-3-coder-next-rocm
停止所有服务:
docker compose down
Agentic 工作流与 Claude Code
在这套配置上,我已经运行了完全自治的 Claude Code 会话很多小时。Framework Desktop 通过这些自治会话写出了本文的大部分内容。
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
注意:请将 your-framework-desktop-ip 替换为你的实际域名或 IP 地址。
当前问题
我在 agentic 工作流中遇到了一个 Ollama 问题 - 见 Ollama issue #13939。Claude Code 偶尔会尝试使用本地不存在的模型名称,从而导致超时。
变通方案:在我的环境里,直接使用 llama.cpp 进行 agentic 工作流会更可靠,稳定性与一致性都明显更好。
为什么我对这套配置非常满意
免费“无限 Tokens”
这套配置让我能够免费 24x7 “烧”无限的 LLM tokens。虽然付费模型更快,但该方案能够:
- 无止境地实验不同模型与提示词
- 长时间运行自治 agent 会话
- 无需担心按 token 计费
- 完整的数据隐私与离线运行
性能特征
- 比付费模型更慢:是的,但对大多数任务来说差异可以接受
- 更适合写代码:本地模型在代码补全与理解方面表现出色
- 无限上下文:Qwen3-Coder-Next 的 256K 上下文窗口堪称改变游戏规则
未来
这套配置的生产力非常高。我现在:
- 连续数小时运行完全自治的 Claude Code 会话
- 试验不同量化方式与模型架构
- 开发能利用本地 GPU 的自定义 agent 工作流
我很快会再写一篇文章,介绍我的 Claude Code 配置,以及我如何将其配置为与这些本地模型协同工作。
致谢与归属
没有开源社区令人惊叹的工作,这套方案不可能实现。特别感谢:
- kyuz0/amd-strix-halo-toolboxes - Docker 容器的灵感来源,提供了 Vulkan 和 ROCm 后端的预构建镜像
- technigmaai-wiki - GPU 内存配置的完整分步指南
- lhl/strix-halo-testing - 面向 Strix Halo 的详细 LLM 基准测试配置
- Unsloth - 提供令人惊艳的 GGUF 优化模型
- ROCm - 开放的 GPU 软件栈
- llama.cpp - ggerganov 及贡献者们的杰出工作
这些资源凝聚了大量投入,代表了在 AMD 硬件上进行本地 LLM 推理的前沿水平。
