162 lines
4.4 KiB
Markdown
162 lines
4.4 KiB
Markdown
# amd-strix-halo-toolboxes
|
||
|
||
This repository provides two Fedora Rawhide–based Dockerfiles for building isolated dev containers with AMD’s new **Strix Halo** GPUs (gfx1151):
|
||
|
||
- **Dockerfile.rocm**: Builds `llama.cpp` with ROCm (HIP) support targeting gfx1151
|
||
- **Dockerfile.vulkan**: Builds `llama.cpp` with Vulkan compute support
|
||
|
||
Both images load the latest ROCm/Vulkan libraries from Fedora Rawhide to ensure compatibility with Strix Halo.
|
||
|
||
## Repository Structure
|
||
|
||
```
|
||
.
|
||
├── Dockerfile.rocm # HIP-based build for ROCm (gfx1151)
|
||
├── Dockerfile.vulkan # Vulkan-based build
|
||
└── README.md # This documentation
|
||
```
|
||
|
||
## Prerequisites
|
||
|
||
- **Podman** (or Docker aliased to Podman)
|
||
- **Toolbox** (for creating interactive dev containers, https://containertoolbx.org/)
|
||
- Recent Linux kernel with AMD GPU drivers (`amdgpu`) installed on the host
|
||
|
||
## 1. Pulling Pre-built Containers
|
||
|
||
If you don't want to build locally, pull pre-built images from the registry:
|
||
|
||
```bash
|
||
podman pull docker.io/kyuz0/amd-strix-halo-toolboxes:rocm
|
||
podman pull docker.io/kyuz0/amd-strix-halo-toolboxes:vulkan
|
||
```
|
||
|
||
```bash
|
||
toolbox create llama-rocm \
|
||
--image docker.io/kyuz0/amd-strix-halo-toolboxes:rocm \
|
||
-- \
|
||
--device /dev/kfd \
|
||
--device /dev/dri \
|
||
--group-add video \
|
||
--security-opt seccomp=unconfined
|
||
```
|
||
|
||
```bash
|
||
toolbox create llama-vulkan \
|
||
--image docker.io/kyuz0/amd-strix-halo-toolboxes:vulkan \
|
||
-- \
|
||
--device /dev/dri \
|
||
--group-add video \
|
||
--security-opt seccomp=unconfined
|
||
```
|
||
|
||
## 2. Building the Images
|
||
|
||
### ROCm (HIP) Image
|
||
|
||
```bash
|
||
podman build -t llama-rocm -f Dockerfile.rocm .
|
||
```
|
||
|
||
### Vulkan Image
|
||
|
||
```bash
|
||
podman build -t llama-vulkan -f Dockerfile.vulkan .
|
||
```
|
||
|
||
|
||
- **Podman** (or Docker aliased to Podman)
|
||
- **Toolbox** (for creating interactive dev containers, https://containertoolbx.org/)
|
||
- Recent Linux kernel with AMD GPU drivers (`amdgpu`) installed on the host
|
||
|
||
## 1. Building the Images
|
||
|
||
### ROCm (HIP) Image
|
||
|
||
```bash
|
||
podman build -t llama-rocm -f Dockerfile.rocm .
|
||
```
|
||
|
||
### Vulkan Image
|
||
|
||
```bash
|
||
podman build -t llama-vulkan -f Dockerfile.vulkan .
|
||
```
|
||
|
||
## 2. Creating Toolbox Containers
|
||
|
||
Toolbox will automatically mount your home directory, map your UID:GID, enable X11, and use the host network. You only need to pass through the GPU devices and relax seccomp.
|
||
|
||
### ROCm Toolbox
|
||
|
||
```bash
|
||
toolbox create llama-rocm \
|
||
--image docker.io/kyuz0/amd-strix-halo-toolboxes:rocm \
|
||
-- \
|
||
--device /dev/kfd \
|
||
--device /dev/dri \
|
||
--group-add video \
|
||
--security-opt seccomp=unconfined
|
||
```
|
||
|
||
> **Note:** The `--` separator tells `toolbox` to pass subsequent flags to the underlying Podman/Docker command.
|
||
|
||
### Vulkan Toolbox
|
||
|
||
```bash
|
||
toolbox create llama-vulkan \
|
||
--image docker.io/kyuz0/amd-strix-halo-toolboxes:vulkan \
|
||
-- \
|
||
--device /dev/dri \
|
||
--group-add video \
|
||
--security-opt seccomp=unconfined
|
||
```
|
||
|
||
## 3. Entering and Testing
|
||
|
||
After creation, enter each container and verify that your GPU and libraries are accessible.
|
||
|
||
### ROCm (HIP) Test
|
||
|
||
```bash
|
||
toolbox enter llama-rocm
|
||
# inside container:
|
||
llama-cli --list-devices
|
||
```
|
||
|
||
You should see your Strix Halo gfx1151 device listed.
|
||
|
||
### Vulkan Test
|
||
|
||
```bash
|
||
toolbox enter llama-vulkan
|
||
# inside container:
|
||
vulkaninfo | head -n 10
|
||
llama-cli --help # run the Vulkan-enabled CLI
|
||
```
|
||
|
||
If `vulkaninfo` reports your GPU and `llama-cli` runs without errors, the Vulkan build is working.
|
||
|
||
## Host Configuration
|
||
|
||
The following host details and kernel settings ensure optimal performance and unified memory access for Strix Halo:
|
||
|
||
- **Machine**: HP Z2 Mini G1a
|
||
- **Memory**: 128 GB RAM, with 512 MB allocated to the GPU in BIOS
|
||
- **Host OS**: Fedora 42, kernel 6.15.6-200.fc42.x86_64
|
||
- **Kernel boot parameters** (in `/etc/default/grub`):
|
||
```text
|
||
amd_iommu=off amdgpu.gttsize=131072 ttm.pages_limit=335544321
|
||
```
|
||
- `amd_iommu=off` disables IOMMU for lower latency and avoids address translation overhead.
|
||
- `amdgpu.gttsize=131072` sets the GPU GTT (Graphics Translation Table) size, enabling a unified memory window so the GPU can directly access up to 128 GB of system RAM.
|
||
- `ttm.pages_limit=335544321` raises the TTM (Translation Table Maps) page limit to allow larger pinned allocations.
|
||
- **Apply parameters**: after editing `/etc/default/grub`, run
|
||
```bash
|
||
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
|
||
```
|
||
|
||
## Notes
|
||
|
||
Both images pull Fedora Rawhide packages for the newest ROCm/Vulkan support.
|