From 5f787839ed433f06831c14ed1d4bf7f0a5d60027 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 25 Nov 2025 17:25:48 +0000 Subject: [PATCH 01/16] WIP: flower support --- packages/federated/flower/Dockerfile | 16 ++++++++++++++++ packages/federated/flower/README.md | 27 +++++++++++++++++++++++++++ packages/federated/flower/config.yaml | 2 ++ packages/federated/flower/demo.sh | 7 +++++++ packages/federated/flower/test.sh | 6 ++++++ 5 files changed, 58 insertions(+) create mode 100644 packages/federated/flower/Dockerfile create mode 100644 packages/federated/flower/README.md create mode 100644 packages/federated/flower/config.yaml create mode 100644 packages/federated/flower/demo.sh create mode 100644 packages/federated/flower/test.sh diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile new file mode 100644 index 0000000..9b2ff6c --- /dev/null +++ b/packages/federated/flower/Dockerfile @@ -0,0 +1,16 @@ +# Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +ARG BASE_IMAGE +FROM ${BASE_IMAGE} + +WORKDIR /ryzers + +# Download test image +RUN mkdir -p /ryzers/data/ && \ + pip3 install flwr + +# Copy test script +COPY test.sh /ryzers/test.sh +RUN chmod +x /ryzers/test.sh +CMD /ryzers/test.sh diff --git a/packages/federated/flower/README.md b/packages/federated/flower/README.md new file mode 100644 index 0000000..ba5e90e --- /dev/null +++ b/packages/federated/flower/README.md @@ -0,0 +1,27 @@ +### Gemma3 (4B) + +This directory contains the docker configuration files to run Gemma3-4B on RyzenAI platforms. Gemma3-4B is the smallest open-weights model released under the Gemma3 suite that offers multimodal support. + +### Build and run the Docker Image + +To build and run a Docker container with Gemma3-4B-Instruct using a llamacpp backend, run: + +```sh +ryzers build llamacpp gemma3 +ryzers run +``` + +### Demo + +Additionally, there is a demo.sh included that when run on the host machine, will serve up a webpage that allows a user to interact with Gemma3-4B VLM. A webcam is required. Credit to https://github.com/ngxson/smolvlm-realtime-webcam. + +```sh +git clone https://github.com/ngxson/smolvlm-realtime-webcam + +ryzers build llamacpp gemma3 +ryzers run /ryzers/demo_gemma3.sh +``` + +In a browser, open file://\/index.html + +Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. \ No newline at end of file diff --git a/packages/federated/flower/config.yaml b/packages/federated/flower/config.yaml new file mode 100644 index 0000000..3c34ef6 --- /dev/null +++ b/packages/federated/flower/config.yaml @@ -0,0 +1,2 @@ +# Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT diff --git a/packages/federated/flower/demo.sh b/packages/federated/flower/demo.sh new file mode 100644 index 0000000..f275ac7 --- /dev/null +++ b/packages/federated/flower/demo.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +export PATH=/ryzers/llamacpp/build/bin/:$PATH +llama-server -hf ggml-org/gemma-3-4b-it-GGUF \ No newline at end of file diff --git a/packages/federated/flower/test.sh b/packages/federated/flower/test.sh new file mode 100644 index 0000000..e6bfe65 --- /dev/null +++ b/packages/federated/flower/test.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +# Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +python -c "import flwr;print(flwr.__version__)" From 0269153ad74981f9f41023c01721de89818cef04 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Wed, 26 Nov 2025 14:17:46 +0000 Subject: [PATCH 02/16] flower progress with demo --- packages/federated/flower/Dockerfile | 7 ++++++- packages/federated/flower/demo.sh | 7 ------- packages/federated/flower/test.sh | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 packages/federated/flower/demo.sh diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile index 9b2ff6c..346d3ac 100644 --- a/packages/federated/flower/Dockerfile +++ b/packages/federated/flower/Dockerfile @@ -8,7 +8,12 @@ WORKDIR /ryzers # Download test image RUN mkdir -p /ryzers/data/ && \ - pip3 install flwr + pip3 install flwr[simulation] + +# Make a project +RUN flwr new --framework pytorch --username testuser testapp +RUN cd testapp && sed -i '/torch/d' ./pyproject.toml +RUN cd testapp && pip install -e . # Copy test script COPY test.sh /ryzers/test.sh diff --git a/packages/federated/flower/demo.sh b/packages/federated/flower/demo.sh deleted file mode 100644 index f275ac7..0000000 --- a/packages/federated/flower/demo.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. -# SPDX-License-Identifier: MIT - -export PATH=/ryzers/llamacpp/build/bin/:$PATH -llama-server -hf ggml-org/gemma-3-4b-it-GGUF \ No newline at end of file diff --git a/packages/federated/flower/test.sh b/packages/federated/flower/test.sh index e6bfe65..9d08171 100644 --- a/packages/federated/flower/test.sh +++ b/packages/federated/flower/test.sh @@ -3,4 +3,4 @@ # Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved. # SPDX-License-Identifier: MIT -python -c "import flwr;print(flwr.__version__)" +python -c "import flwr;print('flwr version:', flwr.__version__)" From a9c6d156fb5fc6e2b81ccda5832a5d1c1240441f Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Wed, 26 Nov 2025 14:21:30 +0000 Subject: [PATCH 03/16] readme update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2c543c4..1c696bb 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ For detailed build and run instructions, refer to the included documentation. | Vision | [`OpenCV`](packages/vision/opencv), [`SAM`](packages/vision/sam), [`MobileSAM`](packages/vision/mobilesam), [`ncnn`](packages/vision/ncnn), [`DINOv3`](packages/vision/dinov3) | | Ryzen AI NPU | [`XDNA`](packages/npu/xdna), [`IRON`](packages/npu/iron), [`NPUEval`](packages/npu/npueval), [`Ryzen AI CVML`](packages/npu/ryzenai_cvml) | | Adaptive SoCs | [`PYNQ.remote`](packages/adaptive-socs/pynq-remote) | +| Federated Learning | [`Flower`](packages/federated/flower) | | Utilities | [`JupyterLab`](packages/ide/jupyterlab), [`amdgpu_top`](packages/init/amdgpu_top) | Packages Legend: From bfd66b1fd2c0131dfc1f5bb56853b1e3bf8561e4 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Wed, 26 Nov 2025 14:26:45 +0000 Subject: [PATCH 04/16] flower docs --- packages/federated/flower/README.md | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/packages/federated/flower/README.md b/packages/federated/flower/README.md index ba5e90e..f57b86b 100644 --- a/packages/federated/flower/README.md +++ b/packages/federated/flower/README.md @@ -1,27 +1,19 @@ -### Gemma3 (4B) +### Flower -This directory contains the docker configuration files to run Gemma3-4B on RyzenAI platforms. Gemma3-4B is the smallest open-weights model released under the Gemma3 suite that offers multimodal support. +This directory contains the docker configuration to run the federated learning framework Flower. ### Build and run the Docker Image -To build and run a Docker container with Gemma3-4B-Instruct using a llamacpp backend, run: +To build and run a Docker container with Flower, run: ```sh -ryzers build llamacpp gemma3 +ryzers build flower ryzers run ``` ### Demo -Additionally, there is a demo.sh included that when run on the host machine, will serve up a webpage that allows a user to interact with Gemma3-4B VLM. A webcam is required. Credit to https://github.com/ngxson/smolvlm-realtime-webcam. +Inside the container, there is a test application running on Pytorch with ROCm backend. To run it, cd into the testapp folder and run `flwr run .`. -```sh -git clone https://github.com/ngxson/smolvlm-realtime-webcam - -ryzers build llamacpp gemma3 -ryzers run /ryzers/demo_gemma3.sh -``` - -In a browser, open file://\/index.html -Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. \ No newline at end of file +Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. From 633892d21070862aa17eeb6a48c8768b60260d28 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 16 Dec 2025 21:27:17 +0000 Subject: [PATCH 05/16] flwr enable in docker --- packages/federated/flower/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile index 346d3ac..e73ad7e 100644 --- a/packages/federated/flower/Dockerfile +++ b/packages/federated/flower/Dockerfile @@ -11,7 +11,7 @@ RUN mkdir -p /ryzers/data/ && \ pip3 install flwr[simulation] # Make a project -RUN flwr new --framework pytorch --username testuser testapp +RUN flwr new --framework pytorch --username testuser testapp RUN cd testapp && sed -i '/torch/d' ./pyproject.toml RUN cd testapp && pip install -e . From fab5869e5ac4ec729c0da2cd252cb3bc3ad07ba0 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Mon, 26 Jan 2026 14:57:46 +0000 Subject: [PATCH 06/16] add: bridge based ryzer network --- ryzers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ryzers/__init__.py b/ryzers/__init__.py index 117223c..3130d6a 100644 --- a/ryzers/__init__.py +++ b/ryzers/__init__.py @@ -3,7 +3,7 @@ RYZERS_DEFAULT_INIT_IMAGE = "rocm/pytorch:rocm7.0_ubuntu24.04_py3.12_pytorch_release_2.6.0" -RYZERS_DEFAULT_RUN_FLAGS = "-it --rm --shm-size 16G --cap-add=SYS_PTRACE --network=host --ipc=host" +RYZERS_DEFAULT_RUN_FLAGS = "-it --rm --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host" # This gets populated with path to setup.py during pip install RYZERS_PACKAGES_PATH = None From 604ba360f7f1b9f91d08803cdaeecb08896c2087 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Wed, 18 Feb 2026 17:04:16 +0000 Subject: [PATCH 07/16] Flower federated docker example --- packages/federated/flower/Dockerfile | 14 ++------------ packages/federated/superexec/Dockerfile | 17 +++++++++++++++++ packages/federated/superexec/flower.sh | 13 +++++++++++++ packages/federated/superlink/Dockerfile | 15 +++++++++++++++ packages/federated/supernode/Dockerfile | 13 +++++++++++++ 5 files changed, 60 insertions(+), 12 deletions(-) create mode 100644 packages/federated/superexec/Dockerfile create mode 100755 packages/federated/superexec/flower.sh create mode 100644 packages/federated/superlink/Dockerfile create mode 100644 packages/federated/supernode/Dockerfile diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile index e73ad7e..17c76ab 100644 --- a/packages/federated/flower/Dockerfile +++ b/packages/federated/flower/Dockerfile @@ -6,16 +6,6 @@ FROM ${BASE_IMAGE} WORKDIR /ryzers -# Download test image -RUN mkdir -p /ryzers/data/ && \ - pip3 install flwr[simulation] +COPY quickstart-pytorch /ryzers/quickstart-pytorch -# Make a project -RUN flwr new --framework pytorch --username testuser testapp -RUN cd testapp && sed -i '/torch/d' ./pyproject.toml -RUN cd testapp && pip install -e . - -# Copy test script -COPY test.sh /ryzers/test.sh -RUN chmod +x /ryzers/test.sh -CMD /ryzers/test.sh +ENTRYPOINT[flower-superlink] diff --git a/packages/federated/superexec/Dockerfile b/packages/federated/superexec/Dockerfile new file mode 100644 index 0000000..11e6c31 --- /dev/null +++ b/packages/federated/superexec/Dockerfile @@ -0,0 +1,17 @@ +# Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +ARG BASE_IMAGE +FROM ${BASE_IMAGE} + +ENV HSA_OVERRIDE_GFX_VERSION=11.0.0 + +WORKDIR /ryzers + +RUN python -m pip install flwr + +COPY quickstart-pytorch/pyproject.toml . +RUN sed -i 's/.*flwr\[simulation\].*//' pyproject.toml \ +&& python -m pip install -U --no-cache-dir . + +ENTRYPOINT ["flower-superexec"] diff --git a/packages/federated/superexec/flower.sh b/packages/federated/superexec/flower.sh new file mode 100755 index 0000000..bd1ce57 --- /dev/null +++ b/packages/federated/superexec/flower.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +docker run --rm -p 9091:9091 -p 9092:9092 -p 9093:9093 --network flwr-network --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --name superlink --detach superlink --insecure --isolation process + +docker run --rm -p 9095:9095 --network flwr-network --name supernode-2 --detach --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 supernode --insecure --superlink superlink:9092 --node-config "partition-id=0 num-partitions=2" --clientappio-api-address 0.0.0.0:9095 --isolation process + +docker run --rm -p 9094:9094 --network flwr-network --name supernode-1 --detach --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 supernode --insecure --superlink superlink:9092 --node-config "partition-id=0 num-partitions=2" --clientappio-api-address 0.0.0.0:9094 --isolation process + +docker run --rm --network flwr-network --name superexec-serverapp --detach --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 superexec --insecure --plugin-type serverapp --appio-api-address superlink:9091 + +docker run --rm --network flwr-network --name superexec-clientapp-1 --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --detach superexec --insecure --plugin-type clientapp --appio-api-address supernode-1:9094 + +docker run --rm --network flwr-network --name superexec-clientapp-2 --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --detach superexec --insecure --plugin-type clientapp --appio-api-address supernode-2:9095 diff --git a/packages/federated/superlink/Dockerfile b/packages/federated/superlink/Dockerfile new file mode 100644 index 0000000..bef8f4f --- /dev/null +++ b/packages/federated/superlink/Dockerfile @@ -0,0 +1,15 @@ +# Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +ARG BASE_IMAGE +FROM ${BASE_IMAGE} + +WORKDIR /ryzers + + +ENV HSA_OVERRIDE_GFX_VERSION=11.0.0 + + +RUN python -m pip install flwr + +ENTRYPOINT ["flower-superlink"] diff --git a/packages/federated/supernode/Dockerfile b/packages/federated/supernode/Dockerfile new file mode 100644 index 0000000..98af485 --- /dev/null +++ b/packages/federated/supernode/Dockerfile @@ -0,0 +1,13 @@ +# Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. +# SPDX-License-Identifier: MIT + +ARG BASE_IMAGE +FROM ${BASE_IMAGE} + +WORKDIR /ryzers + +ENV HSA_OVERRIDE_GFX_VERSION=11.0.0 + +RUN python -m pip install flwr + +ENTRYPOINT ["flower-supernode"] From 0cd1f66a0af6582f7931d8a15cdac5d431934239 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Fri, 20 Feb 2026 15:42:44 +0000 Subject: [PATCH 08/16] fix for network --- packages/federated/superexec/flower.sh | 12 ++++++------ ryzers/__init__.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/federated/superexec/flower.sh b/packages/federated/superexec/flower.sh index bd1ce57..e134235 100755 --- a/packages/federated/superexec/flower.sh +++ b/packages/federated/superexec/flower.sh @@ -1,13 +1,13 @@ #!/bin/bash -docker run --rm -p 9091:9091 -p 9092:9092 -p 9093:9093 --network flwr-network --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --name superlink --detach superlink --insecure --isolation process +docker run --rm -p 9091:9091 -p 9092:9092 -p 9093:9093 --shm-size 16G --cap-add=SYS_PTRACE --network=flwr-network --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --name superlink --detach superlink --insecure --isolation process -docker run --rm -p 9095:9095 --network flwr-network --name supernode-2 --detach --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 supernode --insecure --superlink superlink:9092 --node-config "partition-id=0 num-partitions=2" --clientappio-api-address 0.0.0.0:9095 --isolation process +docker run --rm -p 9095:9095 --name supernode-2 --detach --shm-size 16G --cap-add=SYS_PTRACE --network=flwr-network --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 supernode --insecure --superlink superlink:9092 --node-config "partition-id=0 num-partitions=2" --clientappio-api-address 0.0.0.0:9095 --isolation process -docker run --rm -p 9094:9094 --network flwr-network --name supernode-1 --detach --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 supernode --insecure --superlink superlink:9092 --node-config "partition-id=0 num-partitions=2" --clientappio-api-address 0.0.0.0:9094 --isolation process +docker run --rm -p 9094:9094 --name supernode-1 --detach --shm-size 16G --cap-add=SYS_PTRACE --network=flwr-network --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 supernode --insecure --superlink superlink:9092 --node-config "partition-id=0 num-partitions=2" --clientappio-api-address 0.0.0.0:9094 --isolation process -docker run --rm --network flwr-network --name superexec-serverapp --detach --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 superexec --insecure --plugin-type serverapp --appio-api-address superlink:9091 +docker run --rm --name superexec-serverapp --detach --shm-size 16G --cap-add=SYS_PTRACE --network=flwr-network --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 superexec --insecure --plugin-type serverapp --appio-api-address superlink:9091 -docker run --rm --network flwr-network --name superexec-clientapp-1 --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --detach superexec --insecure --plugin-type clientapp --appio-api-address supernode-1:9094 +docker run --rm --name superexec-clientapp-1 --shm-size 16G --cap-add=SYS_PTRACE --network=flwr-network --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --detach superexec --insecure --plugin-type clientapp --appio-api-address supernode-1:9094 -docker run --rm --network flwr-network --name superexec-clientapp-2 --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --detach superexec --insecure --plugin-type clientapp --appio-api-address supernode-2:9095 +docker run --rm --name superexec-clientapp-2 --shm-size 16G --cap-add=SYS_PTRACE --network=flwr-network --ipc=host --device=/dev/kfd --device=/dev/dri --security-opt seccomp=unconfined --group-add video --group-add render -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/video0 --device /dev/video1 --detach superexec --insecure --plugin-type clientapp --appio-api-address supernode-2:9095 diff --git a/ryzers/__init__.py b/ryzers/__init__.py index 3130d6a..117223c 100644 --- a/ryzers/__init__.py +++ b/ryzers/__init__.py @@ -3,7 +3,7 @@ RYZERS_DEFAULT_INIT_IMAGE = "rocm/pytorch:rocm7.0_ubuntu24.04_py3.12_pytorch_release_2.6.0" -RYZERS_DEFAULT_RUN_FLAGS = "-it --rm --shm-size 16G --cap-add=SYS_PTRACE --network=ryzers --ipc=host" +RYZERS_DEFAULT_RUN_FLAGS = "-it --rm --shm-size 16G --cap-add=SYS_PTRACE --network=host --ipc=host" # This gets populated with path to setup.py during pip install RYZERS_PACKAGES_PATH = None From cec7d7532adce0b6111bcdf4b522cc27d1362397 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Fri, 20 Feb 2026 16:28:44 +0000 Subject: [PATCH 09/16] README.md --- packages/federated/README.md | 42 ++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 packages/federated/README.md diff --git a/packages/federated/README.md b/packages/federated/README.md new file mode 100644 index 0000000..41945fd --- /dev/null +++ b/packages/federated/README.md @@ -0,0 +1,42 @@ +# Flower +Flower is a framework for federated learning. This Ryzer demonstrates how to use Flower on AMD GPUs. This example is based on the Flower example found [here](https://flower.ai/docs/framework/docker/tutorial-quickstart-docker.html). + +## Install Flower +Execute `pip install flower` to install Flower. + +In `Ryzers/packages/federated/superexec/` create a getting started project: +`flwr new @flwrlabs/quickstart-pytorch` + +Edit the `pyproject.toml` to comment out the dependencies on torch and torchvision (lines 13-14), as these packages are installed in the Ryzer already. + +## Build the containers +Unlike other Ryzers, Flower requires several containers to be built. From the Ryzers directory, run; + +``` +ryzers build superexec --name superexec +ryzers build superlink --name superlink +ryzers build supernode --name supernode +``` + +## Create the network +Flower communicates between the containers using the docker network. Create a dedicated docker network for it to use: +`docker network create --driver bridge flwr-network` + +## Run the example +Run `Ryzers/packages/federated/superexec/flower.sh`. This will launch a superlink to coordinate the federation, supernodes (clients), and superexecs for scheduling applications per client. + +Find your local config file: +`flwr config list` + +Edit the config file to tell it about your superlink: +``` +[superlink.local-deployment] +address = "127.0.0.1:9093" +insecure = true +``` + +Launch the quickstart application with 2 clients: + +`flwr run . local-deployment --stream` + +The example will use the GPU between 2 clients. From ce262f7467c7934a8c1147f0b131db11ce2daa81 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Fri, 20 Feb 2026 16:43:03 +0000 Subject: [PATCH 10/16] README.md update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c49ae53..03fa53f 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ These dockerfiles will also be pushed and actively maintained in their original | VLA | [`OpenVLA`](packages/vla/openvla), [`SmolVLA`](packages/vla/smolvla), [`GR00T-N1.5`](packages/vla/gr00t), [`openpi`](packages/vla/openpi), [`CogACT`](packages/vla/cogact) | | Graphics | [`O3DE`](packages/graphics/o3de) | | Robotics | [`ROS 2`](packages/ros/ros), [`Gazebo`](packages/ros/gazebo), [`LeRobot`](packages/robotics/lerobot), [`ACT`](packages/robotics/act), [`RAI`](packages/robotics/rai) | +| Federated Learning | [`Flower`](packages/federated/) | | Simulation | [`Genesis`](packages/robotics/genesis) | | Vision | [`OpenCV`](packages/vision/opencv), [`SAM`](packages/vision/sam), [`MobileSAM`](packages/vision/mobilesam), [`ncnn`](packages/vision/ncnn), [`DINOv3`](packages/vision/dinov3), [`SAM3`](packages/vision/sam3), [`Ultralytics`](packages/vision/ultralytics) | | Ryzen AI NPU | [`XDNA`](packages/npu/xdna), [`IRON`](packages/npu/iron), [`NPUEval`](packages/npu/npueval), [`Ryzen AI CVML`](packages/npu/ryzenai_cvml) | From 82f64a5104b4e76093d8f49c7b543ab9fad0de71 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Fri, 20 Feb 2026 16:44:31 +0000 Subject: [PATCH 11/16] README.md formatting --- packages/federated/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/federated/README.md b/packages/federated/README.md index 41945fd..888fa65 100644 --- a/packages/federated/README.md +++ b/packages/federated/README.md @@ -5,7 +5,9 @@ Flower is a framework for federated learning. This Ryzer demonstrates how to use Execute `pip install flower` to install Flower. In `Ryzers/packages/federated/superexec/` create a getting started project: -`flwr new @flwrlabs/quickstart-pytorch` +``` +flwr new @flwrlabs/quickstart-pytorch +``` Edit the `pyproject.toml` to comment out the dependencies on torch and torchvision (lines 13-14), as these packages are installed in the Ryzer already. @@ -20,7 +22,9 @@ ryzers build supernode --name supernode ## Create the network Flower communicates between the containers using the docker network. Create a dedicated docker network for it to use: -`docker network create --driver bridge flwr-network` +``` +docker network create --driver bridge flwr-network +``` ## Run the example Run `Ryzers/packages/federated/superexec/flower.sh`. This will launch a superlink to coordinate the federation, supernodes (clients), and superexecs for scheduling applications per client. From 46e5d0e0e94d5b01c82ebd4a7225a73b806e0d24 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 24 Feb 2026 13:13:39 +0000 Subject: [PATCH 12/16] directory restructure --- packages/federated/{ => flower}/superexec/Dockerfile | 0 packages/federated/{ => flower}/superexec/flower.sh | 0 packages/federated/{ => flower}/superlink/Dockerfile | 0 packages/federated/{ => flower}/supernode/Dockerfile | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename packages/federated/{ => flower}/superexec/Dockerfile (100%) rename packages/federated/{ => flower}/superexec/flower.sh (100%) rename packages/federated/{ => flower}/superlink/Dockerfile (100%) rename packages/federated/{ => flower}/supernode/Dockerfile (100%) diff --git a/packages/federated/superexec/Dockerfile b/packages/federated/flower/superexec/Dockerfile similarity index 100% rename from packages/federated/superexec/Dockerfile rename to packages/federated/flower/superexec/Dockerfile diff --git a/packages/federated/superexec/flower.sh b/packages/federated/flower/superexec/flower.sh similarity index 100% rename from packages/federated/superexec/flower.sh rename to packages/federated/flower/superexec/flower.sh diff --git a/packages/federated/superlink/Dockerfile b/packages/federated/flower/superlink/Dockerfile similarity index 100% rename from packages/federated/superlink/Dockerfile rename to packages/federated/flower/superlink/Dockerfile diff --git a/packages/federated/supernode/Dockerfile b/packages/federated/flower/supernode/Dockerfile similarity index 100% rename from packages/federated/supernode/Dockerfile rename to packages/federated/flower/supernode/Dockerfile From 23b047af9c64a0f4fd2eaa0912076999c94f1102 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 24 Feb 2026 13:42:08 +0000 Subject: [PATCH 13/16] Package finding improvements --- README.md | 2 +- packages/federated/flower/Dockerfile | 1 - ryzers/packages.py | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 03fa53f..0b7e33c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ These dockerfiles will also be pushed and actively maintained in their original | VLA | [`OpenVLA`](packages/vla/openvla), [`SmolVLA`](packages/vla/smolvla), [`GR00T-N1.5`](packages/vla/gr00t), [`openpi`](packages/vla/openpi), [`CogACT`](packages/vla/cogact) | | Graphics | [`O3DE`](packages/graphics/o3de) | | Robotics | [`ROS 2`](packages/ros/ros), [`Gazebo`](packages/ros/gazebo), [`LeRobot`](packages/robotics/lerobot), [`ACT`](packages/robotics/act), [`RAI`](packages/robotics/rai) | -| Federated Learning | [`Flower`](packages/federated/) | +| Federated Learning | [`Flower`](packages/federated/flower) | | Simulation | [`Genesis`](packages/robotics/genesis) | | Vision | [`OpenCV`](packages/vision/opencv), [`SAM`](packages/vision/sam), [`MobileSAM`](packages/vision/mobilesam), [`ncnn`](packages/vision/ncnn), [`DINOv3`](packages/vision/dinov3), [`SAM3`](packages/vision/sam3), [`Ultralytics`](packages/vision/ultralytics) | | Ryzen AI NPU | [`XDNA`](packages/npu/xdna), [`IRON`](packages/npu/iron), [`NPUEval`](packages/npu/npueval), [`Ryzen AI CVML`](packages/npu/ryzenai_cvml) | diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile index 17c76ab..4e4d049 100644 --- a/packages/federated/flower/Dockerfile +++ b/packages/federated/flower/Dockerfile @@ -8,4 +8,3 @@ WORKDIR /ryzers COPY quickstart-pytorch /ryzers/quickstart-pytorch -ENTRYPOINT[flower-superlink] diff --git a/ryzers/packages.py b/ryzers/packages.py index 3fce431..851f6bb 100644 --- a/ryzers/packages.py +++ b/ryzers/packages.py @@ -50,8 +50,8 @@ def _find_allpackages(self, current_path=None, current_depth=0, max_depth=4): if self._is_directory_readable(entry_path): if os.path.exists(os.path.join(entry_path, "Dockerfile")): dockerfile_path_map[entry] = entry_path - else: - dockerfile_path_map.update(self._find_allpackages(entry_path, current_depth + 1, max_depth)) + #else: + dockerfile_path_map.update(self._find_allpackages(entry_path, current_depth + 1, max_depth)) return dockerfile_path_map def get_packages_filelist(self, filename, optional=False): @@ -94,4 +94,4 @@ def get_initial_image(self): def _is_directory_readable(self, path): return (os.path.exists(path) and os.path.isdir(path) and - os.access(path, os.R_OK)) \ No newline at end of file + os.access(path, os.R_OK)) From 2fa8935220b33cab8fcdde699649591a3f5c0c0b Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 24 Feb 2026 13:52:49 +0000 Subject: [PATCH 14/16] Flower test script --- packages/federated/flower/Dockerfile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile index 4e4d049..32eed6a 100644 --- a/packages/federated/flower/Dockerfile +++ b/packages/federated/flower/Dockerfile @@ -6,5 +6,10 @@ FROM ${BASE_IMAGE} WORKDIR /ryzers -COPY quickstart-pytorch /ryzers/quickstart-pytorch +RUN pip install flwr +RUN flwr new @flwrlabs/quickstart-pytorch + +COPY test.sh . +RUN chmod +x test.sh +CMD ./test.sh From d9d889c4e79ed9c5217fb5d5080c7ebc8c3067da Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 24 Feb 2026 13:55:07 +0000 Subject: [PATCH 15/16] README.md --- packages/federated/README.md | 46 ---------------------------- packages/federated/flower/README.md | 47 +++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 56 deletions(-) delete mode 100644 packages/federated/README.md diff --git a/packages/federated/README.md b/packages/federated/README.md deleted file mode 100644 index 888fa65..0000000 --- a/packages/federated/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Flower -Flower is a framework for federated learning. This Ryzer demonstrates how to use Flower on AMD GPUs. This example is based on the Flower example found [here](https://flower.ai/docs/framework/docker/tutorial-quickstart-docker.html). - -## Install Flower -Execute `pip install flower` to install Flower. - -In `Ryzers/packages/federated/superexec/` create a getting started project: -``` -flwr new @flwrlabs/quickstart-pytorch -``` - -Edit the `pyproject.toml` to comment out the dependencies on torch and torchvision (lines 13-14), as these packages are installed in the Ryzer already. - -## Build the containers -Unlike other Ryzers, Flower requires several containers to be built. From the Ryzers directory, run; - -``` -ryzers build superexec --name superexec -ryzers build superlink --name superlink -ryzers build supernode --name supernode -``` - -## Create the network -Flower communicates between the containers using the docker network. Create a dedicated docker network for it to use: -``` -docker network create --driver bridge flwr-network -``` - -## Run the example -Run `Ryzers/packages/federated/superexec/flower.sh`. This will launch a superlink to coordinate the federation, supernodes (clients), and superexecs for scheduling applications per client. - -Find your local config file: -`flwr config list` - -Edit the config file to tell it about your superlink: -``` -[superlink.local-deployment] -address = "127.0.0.1:9093" -insecure = true -``` - -Launch the quickstart application with 2 clients: - -`flwr run . local-deployment --stream` - -The example will use the GPU between 2 clients. diff --git a/packages/federated/flower/README.md b/packages/federated/flower/README.md index f57b86b..888fa65 100644 --- a/packages/federated/flower/README.md +++ b/packages/federated/flower/README.md @@ -1,19 +1,46 @@ -### Flower +# Flower +Flower is a framework for federated learning. This Ryzer demonstrates how to use Flower on AMD GPUs. This example is based on the Flower example found [here](https://flower.ai/docs/framework/docker/tutorial-quickstart-docker.html). -This directory contains the docker configuration to run the federated learning framework Flower. +## Install Flower +Execute `pip install flower` to install Flower. -### Build and run the Docker Image +In `Ryzers/packages/federated/superexec/` create a getting started project: +``` +flwr new @flwrlabs/quickstart-pytorch +``` + +Edit the `pyproject.toml` to comment out the dependencies on torch and torchvision (lines 13-14), as these packages are installed in the Ryzer already. -To build and run a Docker container with Flower, run: +## Build the containers +Unlike other Ryzers, Flower requires several containers to be built. From the Ryzers directory, run; -```sh -ryzers build flower -ryzers run +``` +ryzers build superexec --name superexec +ryzers build superlink --name superlink +ryzers build supernode --name supernode ``` -### Demo +## Create the network +Flower communicates between the containers using the docker network. Create a dedicated docker network for it to use: +``` +docker network create --driver bridge flwr-network +``` + +## Run the example +Run `Ryzers/packages/federated/superexec/flower.sh`. This will launch a superlink to coordinate the federation, supernodes (clients), and superexecs for scheduling applications per client. + +Find your local config file: +`flwr config list` + +Edit the config file to tell it about your superlink: +``` +[superlink.local-deployment] +address = "127.0.0.1:9093" +insecure = true +``` -Inside the container, there is a test application running on Pytorch with ROCm backend. To run it, cd into the testapp folder and run `flwr run .`. +Launch the quickstart application with 2 clients: +`flwr run . local-deployment --stream` -Copyright(C) 2025 Advanced Micro Devices, Inc. All rights reserved. +The example will use the GPU between 2 clients. From 615394fbebdf7016b6fa3d74a6ad05bf783ad1c7 Mon Sep 17 00:00:00 2001 From: Ken O'Brien Date: Tue, 24 Feb 2026 17:10:40 +0000 Subject: [PATCH 16/16] simplified flower example --- packages/federated/flower/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/federated/flower/Dockerfile b/packages/federated/flower/Dockerfile index 32eed6a..f9ad85d 100644 --- a/packages/federated/flower/Dockerfile +++ b/packages/federated/flower/Dockerfile @@ -6,9 +6,11 @@ FROM ${BASE_IMAGE} WORKDIR /ryzers -RUN pip install flwr +RUN pip install -U "flwr[simulation]" RUN flwr new @flwrlabs/quickstart-pytorch +RUN cd quickstart-pytorch && sed -i '/torch=/d;/torchvision=/d' pyproject.toml && pip install -e . + COPY test.sh . RUN chmod +x test.sh