docs: fix dankclaw specs (30GiB RAM, 96GiB GPU-visible, ROCm 7.2.4) + add validate.sh
This commit is contained in:
1 parent
5076ef828f
commit
7dce375ab4
4 files changed
+100
-28
No files matched your search
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
## Server Overview
|
## Server Overview
|
||||||
|
|
||||||
Dankclaw is an AMD APU server for vLLM inference. The host runs Ubuntu 26.04 with an AMD Ryzen AI MAX+ 395 Strix Halo APU. The APU uses unified memory — CPU and GPU share the same 61 GB RAM pool.
|
Dankclaw is an AMD APU server for vLLM inference. The host runs Ubuntu 26.04 with an AMD Ryzen AI MAX+ 395 Strix Halo APU. The APU uses unified memory — CPU and GPU share the same physical RAM pool.
|
||||||
rr
|
|
||||||
## Hardware Specifications
|
## Hardware Specifications
|
||||||
|
|
||||||
### CPU
|
### CPU
|
||||||
@@ -22,50 +21,57 @@ rr
|
|||||||
| Property | Value |
|
| Property | Value |
|
||||||
|----------|-------|
|
|----------|-------|
|
||||||
| Model | AMD Radeon 8060S (Strix Halo) |
|
| Model | AMD Radeon 8060S (Strix Halo) |
|
||||||
| PCIe ID | c4:00.0 |
|
| Device ID | 0x1586 |
|
||||||
| Architecture | Strix/Strix Halo |
|
| Architecture | gfx1151 (Strix Halo) |
|
||||||
| Memory | Unified with system RAM (no separate VRAM) |
|
| GPU-Visible Memory | 96 GiB (ROCm addressable range) |
|
||||||
|
| Physical RAM | 30 GiB (shared CPU + GPU) |
|
||||||
|
|
||||||
### ROCm
|
### ROCm
|
||||||
|
|
||||||
| Property | Value |
|
| Property | Value |
|
||||||
|----------|-------|
|
|----------|-------|
|
||||||
| ROCk Module | Loaded |
|
| ROCk Module | Loaded |
|
||||||
| Runtime Version | 1.1 |
|
| Runtime Version | 1.18 |
|
||||||
| HIP Version | 7.1.52801 |
|
| ROCm Version | 7.2.4 (from AMD repos) |
|
||||||
| Agent Name | AMD RYZEN AI MAX+ 395 w/ Radeon 8060S |
|
| Agent Name | AMD RYZEN AI MAX+ 395 w/ Radeon 8060S |
|
||||||
|
| GPU Arch | gfx1151 (Strix Halo) |
|
||||||
|
| GPU Global Memory | 96 GiB (overcommitted, physical is 30 GiB) |
|
||||||
|
|
||||||
### Memory
|
### Memory
|
||||||
|
|
||||||
| Property | Value |
|
| Property | Value |
|
||||||
|----------|-------|
|
|----------|-------|
|
||||||
| System RAM | 61 GiB (shared CPU + GPU) |
|
| System RAM | 30 GiB (shared CPU + GPU) |
|
||||||
|
| GPU-Visible (ROCm) | 96 GiB (overcommitted addressable range) |
|
||||||
| Swap | 8.0 GiB |
|
| Swap | 8.0 GiB |
|
||||||
| /dev/shm | 31 GiB |
|
| /dev/shm | ~15 GiB (half of RAM) |
|
||||||
|
|
||||||
### Storage
|
### Storage
|
||||||
|
|
||||||
| Filesystem | Size | Used | Avail | Use% |
|
| Filesystem | Size | Used | Avail | Use% |
|
||||||
|------------|------|------|-------|------|
|
|------------|------|------|-------|------|
|
||||||
| / (nvme0n1p2) | 1.9T | 333G | 1.5T | 19% |
|
| / (nvme0n1p2) | 1.9T | 391G | 1.4T | 22% |
|
||||||
|
|
||||||
### OS and Software
|
### OS and Software
|
||||||
|
|
||||||
| Property | Value |
|
| Property | Value |
|
||||||
|----------|-------|
|
|----------|-------|
|
||||||
| OS | Ubuntu 26.04 LTS (Resolute Raccoon) |
|
| OS | Ubuntu 26.04 LTS (Resolute Raccoon) |
|
||||||
| Kernel | 7.0.0-28-generic |
|
| Kernel | 7.0.0-29-generic |
|
||||||
| Python | 3.14.4 |
|
| Python | 3.14.4 (system), 3.12.13 (vLLM venv) |
|
||||||
|
| vLLM | 0.26.0+rocm723 |
|
||||||
|
| uv | 0.12.2 |
|
||||||
|
|
||||||
## VLLM Relevance
|
## VLLM Relevance
|
||||||
|
|
||||||
- Unified memory eliminates separate VRAM limits. The GPU uses system RAM.
|
- Unified memory eliminates separate VRAM limits. The GPU uses system RAM.
|
||||||
- 61 GB shared memory allows large models without VRAM constraints.
|
- ROCm reports 96 GiB GPU memory (overcommitted). Physical RAM is 30 GiB. vLLM sees 96 GiB and will try to use it. Set `--gpu-memory-utilization` conservatively (0.80-0.85) to avoid OOM when the OS needs memory.
|
||||||
- Only 8 GB swap. Set `--swap-space` conservatively (4-8 GB).
|
- Only 8 GiB swap. Set `--swap-space` conservatively (4-8 GiB).
|
||||||
- ROCm and HIP 7.1 are installed. vLLM ROCm support requires ROCm 6.3+.
|
- ROCm 7.2.4 from AMD repos. vLLM ROCm support requires ROCm 6.3+.
|
||||||
- Python 3.14.4 is very new. vLLM ROCm wheels target Python 3.12. Verify compatibility.
|
- Python 3.14.4 is very new. vLLM ROCm wheels target Python 3.12. Use a Python 3.12 venv.
|
||||||
- Radeon 8060S falls under Ryzen AI MAX series (gfx1151/1150). vLLM lists this as supported.
|
- Radeon 8060S falls under Ryzen AI MAX series (gfx1151). vLLM lists this as supported.
|
||||||
- 1.5 TB free disk space is ample for model storage.
|
- 1.4 TB free disk space is ample for model storage.
|
||||||
|
- `libmpi_cxx.so.40` is missing from the system. Install `openmpi-bin` or provide a workaround for torch MPI dependency.
|
||||||
|
|
||||||
## See Also
|
## See Also
|
||||||
|
|
||||||
|
|||||||
@@ -26,10 +26,11 @@ Qwen3.6-27B is a dense vision-language model from the Qwen3.6 series. It uses 27
|
|||||||
|----------|-------|
|
|----------|-------|
|
||||||
| CPU | AMD RYZEN AI MAX+ 395 w/ Radeon 8060S (Strix Halo) |
|
| CPU | AMD RYZEN AI MAX+ 395 w/ Radeon 8060S (Strix Halo) |
|
||||||
| GPU | Integrated Radeon 8060S (unified memory) |
|
| GPU | Integrated Radeon 8060S (unified memory) |
|
||||||
| Unified RAM | 61 GB (shared CPU + GPU) |
|
| Physical RAM | 30 GiB (shared CPU + GPU) |
|
||||||
| Swap | 8 GB |
|
| GPU-Visible (ROCm) | 96 GiB (overcommitted) |
|
||||||
| ROCm/HIP | 7.1 |
|
| Swap | 8 GiB |
|
||||||
| Python | 3.14.4 |
|
| ROCm | 7.2.4 |
|
||||||
|
| Python | 3.12.13 (vLLM venv) |
|
||||||
|
|
||||||
## Memory Calculation
|
## Memory Calculation
|
||||||
|
|
||||||
@@ -42,11 +43,11 @@ Qwen3.6-27B is a dense vision-language model from the Qwen3.6 series. It uses 27
|
|||||||
| Overhead | ~2 GB | ~2 GB |
|
| Overhead | ~2 GB | ~2 GB |
|
||||||
| **Total (approximate)** | ~58 GB | ~16.5 GB |
|
| **Total (approximate)** | ~58 GB | ~16.5 GB |
|
||||||
|
|
||||||
The FP8 variant requires approximately 16-17 GB. This fits within the 61 GB unified memory with comfortable headroom for KV cache.
|
The FP8 variant requires approximately 16-17 GB. ThinkingCap-FP8 requires ~29 GB. Both fit within the 30 GiB physical RAM, but ROCm reports 96 GiB to vLLM. Set `--gpu-memory-utilization` conservatively (0.80) to avoid OOM.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
Install vLLM for ROCm. Version 0.19.0 or later is required for Qwen3.6:
|
Install vLLM for ROCm. Version 0.24.0+ is required for Qwen3.6 with speculative decoding:
|
||||||
|
|
||||||
```
|
```
|
||||||
uv venv --python 3.12 --seed
|
uv venv --python 3.12 --seed
|
||||||
@@ -54,13 +55,24 @@ source .venv/bin/activate
|
|||||||
uv pip install vllm --extra-index-url https://wheels.vllm.ai/rocm/
|
uv pip install vllm --extra-index-url https://wheels.vllm.ai/rocm/
|
||||||
```
|
```
|
||||||
|
|
||||||
Python 3.14.4 is installed on Dankclaw. vLLM ROCm wheels target Python 3.12. Create a virtual environment with Python 3.12 if available. Verify that Python 3.12 is installed:
|
Installed: vLLM 0.26.0+rocm723 in Python 3.12.13 venv at `/home/dank/vllm-env`.
|
||||||
|
|
||||||
|
### MPI Dependency
|
||||||
|
|
||||||
|
Torch requires `libmpi_cxx.so.40`. If missing, install `openmpi-bin`:
|
||||||
|
|
||||||
```
|
```
|
||||||
python3.12 --version
|
sudo apt install -y openmpi-bin
|
||||||
```
|
```
|
||||||
|
|
||||||
If Python 3.12 is not available, install it or use the system Python with `--no-build-isolation`.
|
### Environment Variables
|
||||||
|
|
||||||
|
Set these for ROCm on Strix Halo:
|
||||||
|
|
||||||
|
```
|
||||||
|
export HSA_OVERRIDE_GFX_VERSION=11.5.1
|
||||||
|
export HF_HOME=/home/dank/.cache/huggingface
|
||||||
|
```
|
||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ In unified memory:
|
|||||||
|
|
||||||
### ROCm Version
|
### ROCm Version
|
||||||
|
|
||||||
vLLM supports AMD GPUs with ROCm 6.3 or above. Dankclaw should have ROCm 7.0 or later.
|
vLLM supports AMD GPUs with ROCm 6.3 or above. Dankclaw has ROCm 7.2.4 from AMD repos.
|
||||||
|
|
||||||
Check ROCm version:
|
Check ROCm version:
|
||||||
|
|
||||||
@@ -141,6 +141,10 @@ Unified memory has lower bandwidth than dedicated VRAM:
|
|||||||
| GDDR6 (RTX 4090) | 1 TB/s |
|
| GDDR6 (RTX 4090) | 1 TB/s |
|
||||||
| LPDDR5x (Strix Halo) | ~170 GB/s |
|
| LPDDR5x (Strix Halo) | ~170 GB/s |
|
||||||
|
|
||||||
|
### ROCm Overcommit
|
||||||
|
|
||||||
|
ROCm reports 96 GiB GPU memory on Strix Halo APU. Physical RAM is 30 GiB. The GPU can address more than physical RAM exists. vLLM will see 96 GiB and try to allocate accordingly. Set `--gpu-memory-utilization` to 0.80 or lower to prevent OOM.
|
||||||
|
|
||||||
Lower bandwidth means slower inference. Plan for lower throughput.
|
Lower bandwidth means slower inference. Plan for lower throughput.
|
||||||
|
|
||||||
### Cache Effects
|
### Cache Effects
|
||||||
|
|||||||
Executable
+50
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Validation end-to-end test for vLLM on dankclaw
|
||||||
|
# Sends a simple prompt and measures total response time
|
||||||
|
# Usage: ./scripts/validate.sh [host] [port]
|
||||||
|
|
||||||
|
HOST="${1:-dankclaw}"
|
||||||
|
PORT="${2:-8000}"
|
||||||
|
MODEL="bottlecapai/ThinkingCap-Qwen3.6-27B-FP8"
|
||||||
|
|
||||||
|
echo "=== vLLM Validation Test ==="
|
||||||
|
echo "Target: ${HOST}:${PORT}"
|
||||||
|
echo "Model: ${MODEL}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
START_TIME=$(date +%s%N)
|
||||||
|
|
||||||
|
RESPONSE=$(curl -s -w "\n%{http_code}" \
|
||||||
|
"http://${HOST}:${PORT}/v1/chat/completions" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "{
|
||||||
|
\"model\": \"${MODEL}\",
|
||||||
|
\"messages\": [
|
||||||
|
{\"role\": \"user\", \"content\": \"What is 2 plus 2? Answer in one word.\"}
|
||||||
|
],
|
||||||
|
\"max_tokens\": 128,
|
||||||
|
\"temperature\": 0.1
|
||||||
|
}")
|
||||||
|
|
||||||
|
END_TIME=$(date +%s%N)
|
||||||
|
ELAPSED_MS=$(( (END_TIME - START_TIME) / 1000000 ))
|
||||||
|
|
||||||
|
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
|
||||||
|
BODY=$(echo "$RESPONSE" | sed '$d')
|
||||||
|
|
||||||
|
echo "HTTP Status: ${HTTP_CODE}"
|
||||||
|
echo "Response Time: ${ELAPSED_MS}ms"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ "$HTTP_CODE" = "200" ]; then
|
||||||
|
CONTENT=$(echo "$BODY" | python3 -c "import sys,json; print(json.load(sys.stdin)['choices'][0]['message']['content'].strip())" 2>/dev/null)
|
||||||
|
echo "Model Output: ${CONTENT}"
|
||||||
|
echo ""
|
||||||
|
echo "PASS — Server responded successfully"
|
||||||
|
echo "TIME=${ELAPSED_MS}"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "FAIL — Server returned HTTP ${HTTP_CODE}"
|
||||||
|
echo "Response: ${BODY}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Reference in new issue
Block a user