From e74c6f0aaa84e0cfb0522d3a362bd7f78444905b Mon Sep 17 00:00:00 2001 From: isVoid Date: Thu, 11 Dec 2025 17:49:03 +0000 Subject: [PATCH] add nvshmem4py device notebook demo --- .../notebooks/Chapter_nvshmem4py_device.ipynb | 368 ++++++++++++++++++ .../images/chapter-nvshmem4py-device/1.png | Bin 0 -> 16193 bytes .../images/chapter-nvshmem4py-device/2.png | Bin 0 -> 20853 bytes .../images/chapter-nvshmem4py-device/3.png | Bin 0 -> 22970 bytes .../images/chapter-nvshmem4py-device/4.png | Bin 0 -> 20928 bytes .../images/chapter-nvshmem4py-device/5.png | Bin 0 -> 20614 bytes .../images/chapter-nvshmem4py-device/6.png | Bin 0 -> 23556 bytes 7 files changed, 368 insertions(+) create mode 100644 Accelerated_Python_User_Guide/notebooks/Chapter_nvshmem4py_device.ipynb create mode 100644 Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/1.png create mode 100644 Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/2.png create mode 100644 Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/3.png create mode 100644 Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/4.png create mode 100644 Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/5.png create mode 100644 Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/6.png diff --git a/Accelerated_Python_User_Guide/notebooks/Chapter_nvshmem4py_device.ipynb b/Accelerated_Python_User_Guide/notebooks/Chapter_nvshmem4py_device.ipynb new file mode 100644 index 00000000..68d9837f --- /dev/null +++ b/Accelerated_Python_User_Guide/notebooks/Chapter_nvshmem4py_device.ipynb @@ -0,0 +1,368 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "387b6083", + "metadata": {}, + "source": [ + "# NVSHMEM4Py Device APIs\n", + "\n", + "## Introduction\n", + "\n", + "This notebook documents the NVSHMEM4Py device API for use in Numba CUDA kernels. It is a continuation of `Nvshmem4py` notebook.\n", + "\n", + "## Environment\n", + "\n", + "NVSHMEM4Py Numba-CUDA device APIs require the additional dependency `Numba-CUDA`, with a matching CUDA API version on your machine. Assuming you are using CUDA 12:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c5cf4c36", + "metadata": { + "vscode": { + "languageId": "shellscript" + } + }, + "outputs": [], + "source": [ + "!pip install mpi4py nvshmem4py-cu12 cupy-cuda13x numba-cuda[cu12]==0.20.1 cuda-core" + ] + }, + { + "cell_type": "markdown", + "id": "e0d3279c", + "metadata": {}, + "source": [ + "## NVSHMEM4Py Numba-CUDA Device API Overview\n", + "\n", + "Device APIs allow developers to write GPU-initiated, one-sided operations from `@numba.cuda.jit` kernels. Users who need fine-grained, low-latency inter-GPU communication entirely from device code are encouraged to use them. These APIs are available via the `nvshmem.device.numba` namespace.\n", + "\n", + "### Features\n", + "\n", + "- Querying\n", + "- Remote Memory Access (RMA)\n", + "- Signal Operations\n", + "- Atomic Memory Operations (AMO)\n", + "- Collectives\n", + "- Synchronization\n", + "- Memory Mapping (direct device loads/stores)\n", + "\n", + "### Pythonic Interface\n", + "\n", + "Unlike the C/C++ APIs, the Numba device APIs are Pythonic in that they accept the `numba.types.Array` type. Certain APIs (such as RMA) omit the transfer element size, as it is deduced from the input array size. Users who need to specify a transfer size should slice the input array to create a view before passing it as an argument. The APIs are data type-aware, so users only need to ensure that the operand arrays have the same data type.\n", + "\n", + "### Thread Scope Variants\n", + "\n", + "Most of these APIs provide `_warp` or `_block` variants, which provide different levels of thread granularity. For example, the `put` API has `put_block` and `put_warp` variants. When used, all threads within the designated scope must receive the same arguments. They are frequently used for these purposes:\n", + "\n", + "- Using `put_block` instead of `put` allows the GPU to copy data with all threads of the same block in parallel if two PEs are connected via a point-to-point connection. If they are connected via a remote connection, only a single GPU thread is used to initialize the copy instruction.\n", + "- The `block` and `warp` variants of collectives allow threads of different granularity levels to perform reductions across PEs." + ] + }, + { + "cell_type": "markdown", + "id": "0dd374c0", + "metadata": {}, + "source": [ + "## Example: Ring-Allreduce in Python\n", + "\n", + "The ring-allreduce example performs an allreduce operation using a ring algorithm. The algorithm is separated into two phases: the reduction phase, and the broadcast phase. The example demonstrates use of device side APIs like `put_signal_nbi` and `signal_wait`.\n", + "\n", + "### Problem Setup\n", + "\n", + "Each PE has a local `src` data array initialized to `my_pe() + 1` to indicate its uniqueness. It also has an empty `dst` array of the same size as `src` to hold reduced data. Finally, there's an integral `signal` array to hold signals sent from other PEs.\n", + "\n", + "The following image shows the initial setup of elements on 4 PEs. Signal and chunking is not represented for simplicity.\n", + "\n", + "![NVSHMEM4Py Device API Overview](assets/1.png)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a9d252b9", + "metadata": {}, + "outputs": [], + "source": [ + "from mpi4py import MPI\n", + "from cuda.core.experimental import Device, system, Stream\n", + "\n", + "from numba import cuda, uint64\n", + "\n", + "import nvshmem\n", + "import nvshmem.bindings\n", + "from nvshmem.core import SignalOp, ComparisonType\n", + "from nvshmem.core.device.numba import put_signal_nbi, signal_wait, my_pe, n_pes\n", + "\n", + "@cuda.jit\n", + "def ring_reduce(dst, src, nreduce, signal, chunk_size):\n", + " # Numba-CUDA constructs to setup thread-wise variables\n", + " mype = my_pe()\n", + " npes = n_pes()\n", + " peer = (mype + 1) % npes\n", + "\n", + " thread_id = cuda.threadIdx.x\n", + " num_threads = cuda.blockDim.x\n", + " num_blocks = cuda.gridDim.x\n", + " block_idx = cuda.blockIdx.x\n", + " elems_per_block = nreduce // num_blocks\n", + "\n", + " if elems_per_block * (block_idx + 1) > nreduce:\n", + " return" + ] + }, + { + "cell_type": "markdown", + "id": "035dfe05", + "metadata": {}, + "source": [ + "### Reduction Phase\n", + "\n", + "Initially, PE0 sends its local data to the next PE. Once finished, it increments PE1's signal flag by 1.\n", + "\n", + "![Reduction-1](images/chapter-nvshmem4py-device/2.png)\n", + "\n", + "Meanwhile, PE1 was waiting for an update to the signal flag. Once received, it indicates that PE0 has sent its data. It now performs a local compute.\n", + "\n", + "![Reduction-1](images/chapter-nvshmem4py-device/3.png)\n", + "\n", + "Once compute finishes, PE1 sends the data to the next PE. The next PE waits for the signal, and then performs local compute. It iterates to the last PE.\n", + "\n", + "![Reduction-1](images/chapter-nvshmem4py-device/4.png)\n", + "\n", + "On the last PE, once the compute finishes, it sends the result to PE0. Notice this time the result is already the final reduced result. PE0 is waiting for a signal to be updated. After receiving, it enters the broadcast phase.\n", + "\n", + "![Reduction-1](images/chapter-nvshmem4py-device/5.png)\n", + "\n", + "Each Cooperative Thread Array (CTA) handles a \"chunk\" of data within its assigned range for each iteration. Each chunk is handled independently from other chunks." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24e1152e", + "metadata": {}, + "outputs": [], + "source": [ + " init_offset = block_idx * elems_per_block \n", + " signal_block = signal[block_idx:block_idx+1]\n", + " num_chunks = elems_per_block // chunk_size\n", + "\n", + " starts = range(init_offset, init_offset+elems_per_block, chunk_size)\n", + " ends = range(init_offset+chunk_size, init_offset+elems_per_block+chunk_size, chunk_size)\n", + " # Reduce phase\n", + " for chunk, (start, end) in enumerate(zip(starts, ends)):\n", + " src_block = src[start:end]\n", + " dst_block = dst[start:end]\n", + " if mype != 0:\n", + " if thread_id == 0:\n", + " signal_wait(signal_block, ComparisonType.CMP_GE, chunk + 1)\n", + " \n", + " cuda.syncthreads()\n", + " for i in range(thread_id, chunk_size, num_threads):\n", + " dst_block[i] = dst_block[i] + src_block[i]\n", + " cuda.syncthreads()\n", + " \n", + " if thread_id == 0:\n", + " src_data = src_block if mype == 0 else dst_block\n", + " put_signal_nbi(dst_block, src_data, \n", + " signal_block, uint64(1), SignalOp.SIGNAL_ADD, peer)" + ] + }, + { + "cell_type": "markdown", + "id": "cce6cdba", + "metadata": {}, + "source": [ + "### Broadcast Phase\n", + "\n", + "The broadcast phase is kicked off by the last PE's `put` instruction to PE0. Once PE0 receives the final result, a chain of `put`s are invoked following the PE order. Afterward, all PEs possess the final computed result.\n", + "\n", + "![Broadcast-1](images/chapter-nvshmem4py-device/6.png)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8d7c3357", + "metadata": {}, + "outputs": [], + "source": [ + " # Broadcast phase\n", + " if thread_id == 0:\n", + " for chunk, (start, end) in enumerate(zip(starts, ends)):\n", + " dst_block = dst[start:end]\n", + " if mype < npes - 1: # Last pe already has the final result\n", + " expected_val = (chunk + 1) if mype == 0 else (num_chunks + chunk + 1)\n", + " signal_wait(signal_block, ComparisonType.CMP_GE, expected_val)\n", + " \n", + " if mype < npes - 2:\n", + " put_signal_nbi(dst_block, dst_block,\n", + " signal_block, uint64(1), SignalOp.SIGNAL_ADD, peer)" + ] + }, + { + "cell_type": "markdown", + "id": "150a02dc", + "metadata": {}, + "source": [ + "## Full Code Example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "414db538", + "metadata": {}, + "outputs": [], + "source": [ + "from mpi4py import MPI\n", + "from cuda.core.experimental import Device, system, Stream\n", + "\n", + "from numba import cuda, uint64\n", + "\n", + "import nvshmem\n", + "import nvshmem.bindings\n", + "from nvshmem.core import SignalOp, ComparisonType\n", + "from nvshmem.core.device.numba import put_signal_nbi, signal_wait, my_pe, n_pes\n", + "\n", + "@cuda.jit\n", + "def ring_reduce(dst, src, nreduce, signal, chunk_size):\n", + " mype = my_pe()\n", + " npes = n_pes()\n", + " peer = (mype + 1) % npes\n", + "\n", + " thread_id = cuda.threadIdx.x\n", + " num_threads = cuda.blockDim.x\n", + " num_blocks = cuda.gridDim.x\n", + " block_idx = cuda.blockIdx.x\n", + " elems_per_block = nreduce // num_blocks\n", + "\n", + " # Change src, dst, nreduce, signal to what this block is going to process\n", + " # Each CTA will work independently\n", + " if elems_per_block * (block_idx + 1) > nreduce:\n", + " return\n", + " \n", + " # Adjust pointers for this block\n", + " init_offset = block_idx * elems_per_block\n", + " \n", + " signal_block = signal[block_idx:block_idx+1]\n", + "\n", + " num_chunks = elems_per_block // chunk_size\n", + "\n", + " starts = range(init_offset, init_offset+elems_per_block, chunk_size)\n", + " ends = range(init_offset+chunk_size, init_offset+elems_per_block+chunk_size, chunk_size)\n", + " # Reduce phase\n", + " for chunk, (start, end) in enumerate(zip(starts, ends)):\n", + " src_block = src[start:end]\n", + " dst_block = dst[start:end]\n", + " if mype != 0:\n", + " if thread_id == 0:\n", + " signal_wait(signal_block, ComparisonType.CMP_GE, chunk + 1)\n", + " \n", + " cuda.syncthreads()\n", + " for i in range(thread_id, chunk_size, num_threads):\n", + " dst_block[i] = dst_block[i] + src_block[i]\n", + " cuda.syncthreads()\n", + " \n", + " if thread_id == 0:\n", + " src_data = src_block if mype == 0 else dst_block\n", + " put_signal_nbi(dst_block, src_data, \n", + " signal_block, uint64(1), SignalOp.SIGNAL_ADD, peer)\n", + "\n", + " # if signal is printed here, it will be 0 for first and last PE, num_chunks for other PEs.\n", + "\n", + " # Broadcast phase\n", + " if thread_id == 0:\n", + " for chunk, (start, end) in enumerate(zip(starts, ends)):\n", + " dst_block = dst[start:end]\n", + " if mype < npes - 1: # Last pe already has the final result\n", + " expected_val = (chunk + 1) if mype == 0 else (num_chunks + chunk + 1)\n", + " signal_wait(signal_block, ComparisonType.CMP_GE, expected_val)\n", + " \n", + " if mype < npes - 2:\n", + " put_signal_nbi(dst_block, dst_block,\n", + " signal_block, uint64(1), SignalOp.SIGNAL_ADD, peer)\n", + " \n", + "\n", + "# Initialize MPI and NVSHMEM\n", + "local_rank_per_node = MPI.COMM_WORLD.Get_rank() % system.num_devices\n", + "dev = Device(local_rank_per_node)\n", + "dev.set_current()\n", + "\n", + "nb_stream = cuda.stream() # WAR: Numba-CUDA takes numba stream object or int\n", + "cu_stream_ref = Stream.from_handle(nb_stream.handle.value)\n", + "\n", + "nvshmem.core.init(\n", + " device=dev,\n", + " uid=None,\n", + " rank=None,\n", + " nranks=None,\n", + " mpi_comm=MPI.COMM_WORLD,\n", + " initializer_method=\"mpi\",\n", + ")\n", + "\n", + "mype = nvshmem.bindings.my_pe()\n", + "npes = nvshmem.bindings.n_pes()\n", + "\n", + "# Test parameters\n", + "nreduce = 1024\n", + "\n", + "num_blocks = 32\n", + "elems_per_block = nreduce // num_blocks\n", + "num_chunk_per_block = 4\n", + "chunk_size = elems_per_block // num_chunk_per_block\n", + "\n", + "threads_per_block = 512 \n", + "\n", + "# Allocate arrays\n", + "src = nvshmem.core.array((nreduce,), dtype=\"int32\")\n", + "dst = nvshmem.core.array((nreduce,), dtype=\"int32\")\n", + "signal = nvshmem.core.array((num_blocks,), dtype=\"uint64\")\n", + "\n", + "# Initialize data\n", + "for i in range(nreduce):\n", + " src[i] = mype + 1\n", + "\n", + "dst[:] = 0\n", + "\n", + "# Initialize signal\n", + "for i in range(num_blocks):\n", + " signal[i] = 0\n", + "\n", + "# Launch kernel\n", + "ring_reduce[num_blocks, threads_per_block, nb_stream, 0](dst, src, nreduce, signal, chunk_size)\n", + "\n", + "nvshmem.core.barrier(nvshmem.core.Teams.TEAM_WORLD, stream=cu_stream_ref)\n", + "dev.sync()\n", + "\n", + "# Check results\n", + "expected_result = sum(range(1, npes + 1))\n", + "for i in range(nreduce):\n", + " assert dst[i] == expected_result, f\"PE {mype}: Mismatch at index {i}: got {dst[i]}, expected {expected_result}\"\n", + "print(f\"PE {mype}: Ring allreduce test passed\")\n", + "\n", + "# Clean up\n", + "nvshmem.core.free_array(src)\n", + "nvshmem.core.free_array(dst)\n", + "nvshmem.core.free_array(signal)\n", + "nvshmem.core.finalize()\n" + ] + }, + { + "cell_type": "markdown", + "id": "14ce7aaf", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/1.png b/Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed123d5515e01ceb2e0b6e7b5ca6eb0a3e61a675 GIT binary patch literal 16193 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 literal 0 HcmV?d00001 diff --git a/Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/2.png b/Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/2.png new file mode 100644 index 0000000000000000000000000000000000000000..7b59a2659e27ee84bc7159c21f410c017bd74671 GIT binary patch literal 20853 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 QK?#DixWdCcQKP{B2eE)uDF6Tf literal 0 HcmV?d00001 diff --git a/Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/5.png b/Accelerated_Python_User_Guide/notebooks/images/chapter-nvshmem4py-device/5.png new file mode 100644 index 0000000000000000000000000000000000000000..231c16358abcb20e2fced56f65c7325d39967151 GIT binary patch literal 20614 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