From a147fded1c0a719798a37efe81011baae0b1c922 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 1 Jun 2026 21:34:06 +0000 Subject: [PATCH 01/12] [AUTOMATED] Bumped version to v0.3.0 --- gigl-core/pyproject.toml | 2 +- gigl/__init__.py | 2 +- gigl/dep_vars.env | 10 +++++----- pyproject.toml | 6 +++--- uv.lock | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gigl-core/pyproject.toml b/gigl-core/pyproject.toml index f7b159954..8eddd7635 100644 --- a/gigl-core/pyproject.toml +++ b/gigl-core/pyproject.toml @@ -2,7 +2,7 @@ name = "gigl-core" description = "GiGL C++/CUDA kernels (pybind11 extensions)" readme = "README.md" -version = "0.2.0" +version = "0.3.0" requires-python = "==3.11.*" # Torch is resolved from the ambient environment. gigl-core wheels are ABI-bound # to the torch variant they were built against (cpu or cu128). The parent `gigl` diff --git a/gigl/__init__.py b/gigl/__init__.py index d3ec452c3..493f7415d 100644 --- a/gigl/__init__.py +++ b/gigl/__init__.py @@ -1 +1 @@ -__version__ = "0.2.0" +__version__ = "0.3.0" diff --git a/gigl/dep_vars.env b/gigl/dep_vars.env index 6f6ee5584..8314a0cb5 100644 --- a/gigl/dep_vars.env +++ b/gigl/dep_vars.env @@ -3,11 +3,11 @@ DOCKER_LATEST_BASE_CUDA_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external- DOCKER_LATEST_BASE_CPU_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cpu-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 DOCKER_LATEST_BASE_DATAFLOW_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dataflow-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 -DEFAULT_GIGL_RELEASE_SRC_IMAGE_CUDA=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cuda:0.2.0 -DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cpu:0.2.0 -DEFAULT_GIGL_RELEASE_SRC_IMAGE_DATAFLOW_CPU=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cpu-dataflow:0.2.0 -DEFAULT_GIGL_RELEASE_DEV_WORKBENCH_IMAGE=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dev-workbench:0.2.0 -DEFAULT_GIGL_RELEASE_KFP_PIPELINE_PATH=gs://public-gigl/releases/pipelines/gigl-pipeline-0.2.0.yaml +DEFAULT_GIGL_RELEASE_SRC_IMAGE_CUDA=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cuda:0.3.0 +DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cpu:0.3.0 +DEFAULT_GIGL_RELEASE_SRC_IMAGE_DATAFLOW_CPU=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cpu-dataflow:0.3.0 +DEFAULT_GIGL_RELEASE_DEV_WORKBENCH_IMAGE=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dev-workbench:0.3.0 +DEFAULT_GIGL_RELEASE_KFP_PIPELINE_PATH=gs://public-gigl/releases/pipelines/gigl-pipeline-0.3.0.yaml SPARK_31_TFRECORD_JAR_GCS_PATH=gs://public-gigl/tools/scala/spark_packages/spark-custom-tfrecord_2.12-0.5.0.jar SPARK_35_TFRECORD_JAR_GCS_PATH=gs://public-gigl/tools/scala/spark_packages/spark_3.5.0-custom-tfrecord_2.12-0.6.1.jar diff --git a/pyproject.toml b/pyproject.toml index b22e1f0e6..971cf044f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ name = "gigl" description = "GIgantic Graph Learning Library" readme = "README.md" -version = "0.2.0" +version = "0.3.0" classifiers = [ "Programming Language :: Python", "Programming Language :: Python :: 3", @@ -15,7 +15,7 @@ dependencies = [ "chardet", # gigl-core hosts all C++ / CUDA / pybind11 extensions. Separate wheel per torch # variant (cpu/cu128). Version must match gigl exactly. - "gigl-core==0.2.0", + "gigl-core==0.3.0", "google-cloud-aiplatform", "google-cloud-dataproc", "google-cloud-logging", @@ -303,7 +303,7 @@ select = ["F401", "I"] known-first-party = ["gigl", "tests", "snapchat", "scripts"] [tool.ty.environment] -python-version = "3.11" +python-version = "0.3.0" [tool.ty.src] exclude = ["*_pb2.py", "*_pb2.pyi", "**/*.ipynb"] diff --git a/uv.lock b/uv.lock index 1909a0793..62d35c155 100644 --- a/uv.lock +++ b/uv.lock @@ -702,7 +702,7 @@ wheels = [ [[package]] name = "gigl" -version = "0.2.0" +version = "0.3.0" source = { editable = "." } dependencies = [ { name = "argo-workflows" }, @@ -965,7 +965,7 @@ typing-stubs = [ [[package]] name = "gigl-core" -version = "0.2.0" +version = "0.3.0" source = { directory = "gigl-core" } [[package]] From 096b37611bd02a512c53207df4264c763d0df7e5 Mon Sep 17 00:00:00 2001 From: mkolodner Date: Mon, 1 Jun 2026 22:03:32 +0000 Subject: [PATCH 02/12] update --- pyproject.toml | 2 +- scripts/bump_version.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 971cf044f..9d4ba6089 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -303,7 +303,7 @@ select = ["F401", "I"] known-first-party = ["gigl", "tests", "snapchat", "scripts"] [tool.ty.environment] -python-version = "0.3.0" +python-version = "3.11" [tool.ty.src] exclude = ["*_pb2.py", "*_pb2.pyi", "**/*.ipynb"] diff --git a/scripts/bump_version.py b/scripts/bump_version.py index 499f99ed9..ba7c6d3bd 100644 --- a/scripts/bump_version.py +++ b/scripts/bump_version.py @@ -99,7 +99,9 @@ def update_pyproject(version: str) -> None: path = f"{GIGL_ROOT_DIR}/pyproject.toml" with open(path, "r") as f: content = f.read() - content = re.sub(r'(version\s*)=\s*"[\d\.]+"', f'\\1= "{version}"', content) + content = re.sub( + r'(?m)^(version[ \t]*)=[ \t]*"[^"]+"', f'\\1= "{version}"', content + ) # Keep the gigl-core pin in sync with the new version. content = re.sub(r'"gigl-core==[\d\.a-zA-Z]+"', f'"gigl-core=={version}"', content) with open(path, "w") as f: @@ -110,7 +112,9 @@ def update_gigl_core_pyproject(version: str) -> None: path = f"{GIGL_ROOT_DIR}/gigl-core/pyproject.toml" with open(path, "r") as f: content = f.read() - content = re.sub(r'(version\s*)=\s*"[\d\.]+"', f'\\1= "{version}"', content) + content = re.sub( + r'(?m)^(version[ \t]*)=[ \t]*"[^"]+"', f'\\1= "{version}"', content + ) with open(path, "w") as f: f.write(content) From b0eab48c5c0c05e6dd8b75b2ae840102a1d297c5 Mon Sep 17 00:00:00 2001 From: mkolodner Date: Mon, 1 Jun 2026 22:36:35 +0000 Subject: [PATCH 03/12] Update changelog --- CHANGELOG.md | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff47ac9d4..8c017e7dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,107 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] +## [0.3.0] - Jun 1, 2026 + +### Deprecations + +- Deprecate `ShardStrategy` and default distributed sharding to `CONTIGUOUS` by @kmontemayor2-sc in + https://github.com/Snapchat/GiGL/pull/582 and https://github.com/Snapchat/GiGL/pull/545 +- Migrate `RESOURCE_CONFIG_PATH` to `GIGL_RESOURCE_CONFIG_URI` by @kmontemayor2-sc in + https://github.com/Snapchat/GiGL/pull/648 + +### Changed + +- Replace mypy with [ty](https://github.com/astral-sh/ty) for static type checking and migrate formatting to Ruff by + @svij-sc in https://github.com/Snapchat/GiGL/pull/585 and https://github.com/Snapchat/GiGL/pull/583 +- Consolidate distributed loader and sampler abstractions, including `BaseDistLoader`, `BaseDistNeighborSampler`, + sampler factory helpers, two-phase loader initialization, and shared sampling options by @mkolodner-sc and + @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/495, https://github.com/Snapchat/GiGL/pull/532, + https://github.com/Snapchat/GiGL/pull/536, https://github.com/Snapchat/GiGL/pull/570, + https://github.com/Snapchat/GiGL/pull/576, https://github.com/Snapchat/GiGL/pull/579, and + https://github.com/Snapchat/GiGL/pull/561 +- Update `RemoteDistDataset` APIs and graph store internals for per-rank inputs, `fetch_` method naming, RPC message + dataclasses, and graph store server consolidation by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/511, + https://github.com/Snapchat/GiGL/pull/539, https://github.com/Snapchat/GiGL/pull/557, and + https://github.com/Snapchat/GiGL/pull/506 +- Move Graph Transformer code into `gigl.nn` by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/598 +- Merge `testing/` into `tests/`, migrate tests to GiGL test case utilities, and improve graph store integration test + coverage by @kmontemayor2-sc and @svij-sc in https://github.com/Snapchat/GiGL/pull/494, + https://github.com/Snapchat/GiGL/pull/479, https://github.com/Snapchat/GiGL/pull/480, + https://github.com/Snapchat/GiGL/pull/515, and https://github.com/Snapchat/GiGL/pull/547 + +### Added + +- Add graph store support across storage and compute, including custom storage definitions, GiGL-owned `DistServer`, + `RemoteDistDataset` ABLP inputs, `DistABLPLoader` graph store mode, multiple graph store loaders, partition-book + fetching on compute nodes, and local graph store launch scripts by @kmontemayor2-sc in + https://github.com/Snapchat/GiGL/pull/459, https://github.com/Snapchat/GiGL/pull/471, + https://github.com/Snapchat/GiGL/pull/476, https://github.com/Snapchat/GiGL/pull/485, + https://github.com/Snapchat/GiGL/pull/493, https://github.com/Snapchat/GiGL/pull/510, and + https://github.com/Snapchat/GiGL/pull/587 +- Add graph store examples for heterogeneous inference, homogeneous training, and heterogeneous training by + @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/452, https://github.com/Snapchat/GiGL/pull/514, and + https://github.com/Snapchat/GiGL/pull/526 +- Add distributed PPR sampling, PPR sequence generation, C++ infrastructure, and C++ PPR sampling by @mkolodner-sc and + @yliu2-sc in https://github.com/Snapchat/GiGL/pull/538, https://github.com/Snapchat/GiGL/pull/560, + https://github.com/Snapchat/GiGL/pull/558, and https://github.com/Snapchat/GiGL/pull/556 +- Add shared multi-channel graph store sampling backend, remote channels with pinned-memory bulk transfer, and two-phase + sampling APIs by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/577, + https://github.com/Snapchat/GiGL/pull/565, and https://github.com/Snapchat/GiGL/pull/578 +- Add weighted sampling, positional encoding transforms, Graph Transformer encoder, degree tensor computation for + `DistDataset`, and max-label-per-anchor support in the data splitter by @mkolodner-sc and @yliu2-sc in + https://github.com/Snapchat/GiGL/pull/635, https://github.com/Snapchat/GiGL/pull/509, + https://github.com/Snapchat/GiGL/pull/537, https://github.com/Snapchat/GiGL/pull/517, and + https://github.com/Snapchat/GiGL/pull/589 +- Add `CustomResourceConfig` shell-command launchers, custom launcher subprocess dispatch, and GiGL env var propagation + for custom and Vertex AI launchers by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/625, + https://github.com/Snapchat/GiGL/pull/626, https://github.com/Snapchat/GiGL/pull/642, and + https://github.com/Snapchat/GiGL/pull/653 +- Add Vertex AI boot disk, reservation, and Data Preprocessor timeout controls by @zfan3-sc, @kmontemayor2-sc, and + @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/521, https://github.com/Snapchat/GiGL/pull/590, and + https://github.com/Snapchat/GiGL/pull/524 +- Add GBML config wrapper maps for node and edge type metadata, unified metadata extraction, BigQuery latest-table + utility, and SNC example code by @svij-sc, @mkolodner-sc, and @kmontemayor2-sc in + https://github.com/Snapchat/GiGL/pull/643, https://github.com/Snapchat/GiGL/pull/544, + https://github.com/Snapchat/GiGL/pull/516, and https://github.com/Snapchat/GiGL/pull/641 + +### Fixed + +- Improve graph store startup, shutdown, and sampling reliability, including storage-node counts, free-port allocation, + global-lock removal, homogeneous graphs with labeled edges, leader election, RPC staggering, empty-input shared-memory + channels, teardown protocol, inactive-server shutdown, and labeled homogeneous ABLP memory fixes by @kmontemayor2-sc + and @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/474, https://github.com/Snapchat/GiGL/pull/481, + https://github.com/Snapchat/GiGL/pull/497, https://github.com/Snapchat/GiGL/pull/507, + https://github.com/Snapchat/GiGL/pull/535, https://github.com/Snapchat/GiGL/pull/540, + https://github.com/Snapchat/GiGL/pull/592, https://github.com/Snapchat/GiGL/pull/594, + https://github.com/Snapchat/GiGL/pull/616, and https://github.com/Snapchat/GiGL/pull/645 +- Fix PPR sampler output edges and memory behavior by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/562, + https://github.com/Snapchat/GiGL/pull/566, and https://github.com/Snapchat/GiGL/pull/645 +- Fix dataloading of multiple labels, missing anchor-node labels, dataset factory parallel tensor loading, test dataset + edge direction, and `PreprocessedMetadataPbWrapper` `LocalUri` kwargs by @mkolodner-sc, @kmontemayor2-sc, and @svij-sc + in https://github.com/Snapchat/GiGL/pull/612, https://github.com/Snapchat/GiGL/pull/571, + https://github.com/Snapchat/GiGL/pull/606, https://github.com/Snapchat/GiGL/pull/552, and + https://github.com/Snapchat/GiGL/pull/639 +- Fix launcher image selection for graph store storage pools, default `should_use_glt_backend`, C++ installation, SBT + dependency resolution, and types-protobuf v7 `ParseDict` compatibility by @kmontemayor2-sc, @mkolodner-sc, and + @svij-sc in https://github.com/Snapchat/GiGL/pull/615, https://github.com/Snapchat/GiGL/pull/609, + https://github.com/Snapchat/GiGL/pull/619, https://github.com/Snapchat/GiGL/pull/631, and + https://github.com/Snapchat/GiGL/pull/638 +- Make metric exporters fall back to NoOp when initialization fails and fix seeding utility behavior by @mkolodner-sc + and @svij-sc in https://github.com/Snapchat/GiGL/pull/550 and https://github.com/Snapchat/GiGL/pull/644 + +### Misc + +- Add and refine agent/development guidance, including `CLAUDE.md`, `AGENTS.md`, `/all_test`, `/codex-review`, and + `/watch-action` workflow support by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/498, + https://github.com/Snapchat/GiGL/pull/504, https://github.com/Snapchat/GiGL/pull/543, + https://github.com/Snapchat/GiGL/pull/508, https://github.com/Snapchat/GiGL/pull/528, and + https://github.com/Snapchat/GiGL/pull/563 +- Update graph store and in-memory SGS documentation, supervision-edge direction docs, Vertex AI Agent Platform links, + and presubmit whitespace checks by @mkolodner-sc and @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/553, + https://github.com/Snapchat/GiGL/pull/593, https://github.com/Snapchat/GiGL/pull/595, + https://github.com/Snapchat/GiGL/pull/608, and https://github.com/Snapchat/GiGL/pull/607 + ## [0.2.0] - Jan 30, 2025 ### Added From fcb726e3d9a67c52280795117b0d3523abf5dcde Mon Sep 17 00:00:00 2001 From: mkolodner Date: Mon, 1 Jun 2026 22:40:55 +0000 Subject: [PATCH 04/12] update changelog --- CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c017e7dc..4e4509f40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed +- Enable C++-based PPR sampling, which changes GiGL wheel builds to include the new `gigl-core` C++/CUDA extension + package by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/558 and + https://github.com/Snapchat/GiGL/pull/556 - Replace mypy with [ty](https://github.com/astral-sh/ty) for static type checking and migrate formatting to Ruff by @svij-sc in https://github.com/Snapchat/GiGL/pull/585 and https://github.com/Snapchat/GiGL/pull/583 - Consolidate distributed loader and sampler abstractions, including `BaseDistLoader`, `BaseDistNeighborSampler`, @@ -37,7 +40,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added -- Add graph store support across storage and compute, including custom storage definitions, GiGL-owned `DistServer`, +- Enable graph store mode across storage and compute, including custom storage definitions, GiGL-owned `DistServer`, `RemoteDistDataset` ABLP inputs, `DistABLPLoader` graph store mode, multiple graph store loaders, partition-book fetching on compute nodes, and local graph store launch scripts by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/459, https://github.com/Snapchat/GiGL/pull/471, @@ -47,9 +50,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add graph store examples for heterogeneous inference, homogeneous training, and heterogeneous training by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/452, https://github.com/Snapchat/GiGL/pull/514, and https://github.com/Snapchat/GiGL/pull/526 -- Add distributed PPR sampling, PPR sequence generation, C++ infrastructure, and C++ PPR sampling by @mkolodner-sc and - @yliu2-sc in https://github.com/Snapchat/GiGL/pull/538, https://github.com/Snapchat/GiGL/pull/560, - https://github.com/Snapchat/GiGL/pull/558, and https://github.com/Snapchat/GiGL/pull/556 +- Add distributed PPR sampling and PPR sequence generation by @mkolodner-sc and @yliu2-sc in + https://github.com/Snapchat/GiGL/pull/538 and https://github.com/Snapchat/GiGL/pull/560 - Add shared multi-channel graph store sampling backend, remote channels with pinned-memory bulk transfer, and two-phase sampling APIs by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/577, https://github.com/Snapchat/GiGL/pull/565, and https://github.com/Snapchat/GiGL/pull/578 From 11007c2b704c737c133bdcd0edc7a4a3da17256f Mon Sep 17 00:00:00 2001 From: mkolodner Date: Mon, 1 Jun 2026 22:41:06 +0000 Subject: [PATCH 05/12] format --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e4509f40..c5518859c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,8 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - Enable C++-based PPR sampling, which changes GiGL wheel builds to include the new `gigl-core` C++/CUDA extension - package by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/558 and - https://github.com/Snapchat/GiGL/pull/556 + package by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/558 and https://github.com/Snapchat/GiGL/pull/556 - Replace mypy with [ty](https://github.com/astral-sh/ty) for static type checking and migrate formatting to Ruff by @svij-sc in https://github.com/Snapchat/GiGL/pull/585 and https://github.com/Snapchat/GiGL/pull/583 - Consolidate distributed loader and sampler abstractions, including `BaseDistLoader`, `BaseDistNeighborSampler`, From e19e55ef53386c005e0c01e45e2226178d132c01 Mon Sep 17 00:00:00 2001 From: mkolodner Date: Mon, 1 Jun 2026 23:31:20 +0000 Subject: [PATCH 06/12] Address comments --- CHANGELOG.md | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5518859c..6a2d085d6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,8 +17,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed -- Enable C++-based PPR sampling, which changes GiGL wheel builds to include the new `gigl-core` C++/CUDA extension - package by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/558 and https://github.com/Snapchat/GiGL/pull/556 - Replace mypy with [ty](https://github.com/astral-sh/ty) for static type checking and migrate formatting to Ruff by @svij-sc in https://github.com/Snapchat/GiGL/pull/585 and https://github.com/Snapchat/GiGL/pull/583 - Consolidate distributed loader and sampler abstractions, including `BaseDistLoader`, `BaseDistNeighborSampler`, @@ -27,11 +25,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). https://github.com/Snapchat/GiGL/pull/536, https://github.com/Snapchat/GiGL/pull/570, https://github.com/Snapchat/GiGL/pull/576, https://github.com/Snapchat/GiGL/pull/579, and https://github.com/Snapchat/GiGL/pull/561 -- Update `RemoteDistDataset` APIs and graph store internals for per-rank inputs, `fetch_` method naming, RPC message - dataclasses, and graph store server consolidation by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/511, - https://github.com/Snapchat/GiGL/pull/539, https://github.com/Snapchat/GiGL/pull/557, and - https://github.com/Snapchat/GiGL/pull/506 -- Move Graph Transformer code into `gigl.nn` by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/598 - Merge `testing/` into `tests/`, migrate tests to GiGL test case utilities, and improve graph store integration test coverage by @kmontemayor2-sc and @svij-sc in https://github.com/Snapchat/GiGL/pull/494, https://github.com/Snapchat/GiGL/pull/479, https://github.com/Snapchat/GiGL/pull/480, @@ -39,16 +32,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added -- Enable graph store mode across storage and compute, including custom storage definitions, GiGL-owned `DistServer`, - `RemoteDistDataset` ABLP inputs, `DistABLPLoader` graph store mode, multiple graph store loaders, partition-book - fetching on compute nodes, and local graph store launch scripts by @kmontemayor2-sc in - https://github.com/Snapchat/GiGL/pull/459, https://github.com/Snapchat/GiGL/pull/471, +- Enable GraphStore mode across storage and compute, including GiGL-owned `DistServer`, `DistABLPLoader` GraphStore + mode, multiple GraphStore loaders, and homogeneous and heterogeneous examples by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/476, https://github.com/Snapchat/GiGL/pull/485, - https://github.com/Snapchat/GiGL/pull/493, https://github.com/Snapchat/GiGL/pull/510, and - https://github.com/Snapchat/GiGL/pull/587 -- Add graph store examples for heterogeneous inference, homogeneous training, and heterogeneous training by - @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/452, https://github.com/Snapchat/GiGL/pull/514, and + https://github.com/Snapchat/GiGL/pull/493, https://github.com/Snapchat/GiGL/pull/514, and https://github.com/Snapchat/GiGL/pull/526 +- Add C++-based PPR sampling, which changes GiGL wheel builds to include the new `gigl-core` C++/CUDA extension package + by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/558 and https://github.com/Snapchat/GiGL/pull/556 - Add distributed PPR sampling and PPR sequence generation by @mkolodner-sc and @yliu2-sc in https://github.com/Snapchat/GiGL/pull/538 and https://github.com/Snapchat/GiGL/pull/560 - Add shared multi-channel graph store sampling backend, remote channels with pinned-memory bulk transfer, and two-phase @@ -73,14 +63,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed -- Improve graph store startup, shutdown, and sampling reliability, including storage-node counts, free-port allocation, - global-lock removal, homogeneous graphs with labeled edges, leader election, RPC staggering, empty-input shared-memory - channels, teardown protocol, inactive-server shutdown, and labeled homogeneous ABLP memory fixes by @kmontemayor2-sc - and @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/474, https://github.com/Snapchat/GiGL/pull/481, - https://github.com/Snapchat/GiGL/pull/497, https://github.com/Snapchat/GiGL/pull/507, - https://github.com/Snapchat/GiGL/pull/535, https://github.com/Snapchat/GiGL/pull/540, - https://github.com/Snapchat/GiGL/pull/592, https://github.com/Snapchat/GiGL/pull/594, - https://github.com/Snapchat/GiGL/pull/616, and https://github.com/Snapchat/GiGL/pull/645 - Fix PPR sampler output edges and memory behavior by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/562, https://github.com/Snapchat/GiGL/pull/566, and https://github.com/Snapchat/GiGL/pull/645 - Fix dataloading of multiple labels, missing anchor-node labels, dataset factory parallel tensor loading, test dataset From 46d5cf690e55370f5cce0046eb33d4eea3fbf511 Mon Sep 17 00:00:00 2001 From: mkolodner Date: Tue, 2 Jun 2026 00:05:05 +0000 Subject: [PATCH 07/12] Combine ppr changes into one --- CHANGELOG.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a2d085d6..8055aab17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,10 +37,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). https://github.com/Snapchat/GiGL/pull/476, https://github.com/Snapchat/GiGL/pull/485, https://github.com/Snapchat/GiGL/pull/493, https://github.com/Snapchat/GiGL/pull/514, and https://github.com/Snapchat/GiGL/pull/526 -- Add C++-based PPR sampling, which changes GiGL wheel builds to include the new `gigl-core` C++/CUDA extension package - by @mkolodner-sc in https://github.com/Snapchat/GiGL/pull/558 and https://github.com/Snapchat/GiGL/pull/556 -- Add distributed PPR sampling and PPR sequence generation by @mkolodner-sc and @yliu2-sc in - https://github.com/Snapchat/GiGL/pull/538 and https://github.com/Snapchat/GiGL/pull/560 +- Add distributed and C++-based PPR sampling, including PPR sequence generation and new GiGL wheel builds with the + `gigl-core` C++/CUDA extension package, by @mkolodner-sc and @yliu2-sc in https://github.com/Snapchat/GiGL/pull/538, + https://github.com/Snapchat/GiGL/pull/560, https://github.com/Snapchat/GiGL/pull/558, and + https://github.com/Snapchat/GiGL/pull/556 - Add shared multi-channel graph store sampling backend, remote channels with pinned-memory bulk transfer, and two-phase sampling APIs by @kmontemayor2-sc in https://github.com/Snapchat/GiGL/pull/577, https://github.com/Snapchat/GiGL/pull/565, and https://github.com/Snapchat/GiGL/pull/578 From f8fc284c124c63fa36a340f6fae4a255b911eb53 Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Tue, 2 Jun 2026 23:38:09 +0000 Subject: [PATCH 08/12] Pass resource config URI to graph store networking integration test workers get_graph_store_info() reads get_resource_config() to build the readiness URI (added in #533), but the launched Vertex AI workers had no GIGL_RESOURCE_CONFIG_URI in their env, so they failed with "No resource config provided". Inject it via the compute pool's environment_variables, which launch_graph_store_job propagates to both compute and storage pools. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../distributed/utils/networking_test.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/integration/distributed/utils/networking_test.py b/tests/integration/distributed/utils/networking_test.py index 4bfeeb838..9c48829b9 100644 --- a/tests/integration/distributed/utils/networking_test.py +++ b/tests/integration/distributed/utils/networking_test.py @@ -1,10 +1,12 @@ import uuid from textwrap import dedent +from google.cloud.aiplatform_v1.types import env_var from parameterized import param, parameterized from gigl.common.constants import DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU from gigl.common.services.vertex_ai import VertexAiJobConfig, VertexAIService +from gigl.env.constants import GIGL_RESOURCE_CONFIG_URI_ENV_KEY from gigl.env.pipelines_config import get_resource_config from tests.test_assets.test_case import TestCase @@ -63,12 +65,23 @@ def test_get_graph_store_info(self, _, storage_nodes, compute_nodes): """ ), ] + # get_graph_store_info() calls get_resource_config() (to build the readiness + # URI), so the launched workers need GIGL_RESOURCE_CONFIG_URI in their env. + # launch_graph_store_job propagates the compute pool's environment_variables + # to both the compute and storage container specs. + resource_config_env_vars = [ + env_var.EnvVar( + name=GIGL_RESOURCE_CONFIG_URI_ENV_KEY, + value=self._resource_config.get_resource_config_uri, + ) + ] compute_cluster_config = VertexAiJobConfig( job_name=job_name, container_uri=DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU, replica_count=compute_nodes, command=command, machine_type="n2-standard-8", + environment_variables=resource_config_env_vars, ) storage_cluster_config = VertexAiJobConfig( job_name=job_name, From 6aa633538850f8a1799e664bddfc65255c07d2c0 Mon Sep 17 00:00:00 2001 From: kmontemayor Date: Tue, 2 Jun 2026 23:41:10 +0000 Subject: [PATCH 09/12] Upload resource config to regional bucket for graph store networking test workers The test runner's resource config URI may be a local path that does not exist on the worker Docker image, so passing it directly to the workers via GIGL_RESOURCE_CONFIG_URI would not be readable. Instead, upload the in-memory resource config to the regional bucket (accessible to workers over GCS), pass that URI to the workers, and delete it in tearDown. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../distributed/utils/networking_test.py | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/tests/integration/distributed/utils/networking_test.py b/tests/integration/distributed/utils/networking_test.py index 9c48829b9..21925d66a 100644 --- a/tests/integration/distributed/utils/networking_test.py +++ b/tests/integration/distributed/utils/networking_test.py @@ -6,8 +6,10 @@ from gigl.common.constants import DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU from gigl.common.services.vertex_ai import VertexAiJobConfig, VertexAIService +from gigl.common.utils.proto_utils import ProtoUtils from gigl.env.constants import GIGL_RESOURCE_CONFIG_URI_ENV_KEY from gigl.env.pipelines_config import get_resource_config +from gigl.src.common.utils.file_loader import FileLoader from tests.test_assets.test_case import TestCase @@ -26,8 +28,31 @@ def setUp(self): service_account=self._service_account, staging_bucket=self._staging_bucket, ) + + # get_graph_store_info() (run on the launched workers) calls + # get_resource_config() to build the readiness URI, so the workers need a + # resource config they can read. The test runner's resource config URI may + # be a local path that does not exist on the worker image, so we upload the + # in-memory resource config to the regional bucket (which the workers can + # read from GCS) and pass that URI via GIGL_RESOURCE_CONFIG_URI. + self._file_loader = FileLoader() + self._remote_resource_config_uri = ( + self._resource_config.temp_assets_regional_bucket_path + / "gigl" + / "integration_tests" + / "networking" + / f"resource_config_{uuid.uuid4()}.yaml" + ) + ProtoUtils().write_proto_to_yaml( + proto=self._resource_config.resource_config, + uri=self._remote_resource_config_uri, + ) super().setUp() + def tearDown(self): + self._file_loader.delete_files([self._remote_resource_config_uri]) + super().tearDown() + @parameterized.expand( [ param( @@ -65,14 +90,13 @@ def test_get_graph_store_info(self, _, storage_nodes, compute_nodes): """ ), ] - # get_graph_store_info() calls get_resource_config() (to build the readiness - # URI), so the launched workers need GIGL_RESOURCE_CONFIG_URI in their env. # launch_graph_store_job propagates the compute pool's environment_variables - # to both the compute and storage container specs. + # to both the compute and storage container specs, so the uploaded resource + # config URI is visible to every worker. resource_config_env_vars = [ env_var.EnvVar( name=GIGL_RESOURCE_CONFIG_URI_ENV_KEY, - value=self._resource_config.get_resource_config_uri, + value=self._remote_resource_config_uri.uri, ) ] compute_cluster_config = VertexAiJobConfig( From e16e2ba84925f8af11ffad3030a0fc17b466a594 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 3 Jun 2026 16:44:19 +0000 Subject: [PATCH 10/12] [AUTOMATED] Update dep.vars, and other relevant files with new image names --- .github/cloud_builder/run_command_on_active_checkout.yaml | 2 +- gigl/dep_vars.env | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/cloud_builder/run_command_on_active_checkout.yaml b/.github/cloud_builder/run_command_on_active_checkout.yaml index 1808472a0..f83c26011 100644 --- a/.github/cloud_builder/run_command_on_active_checkout.yaml +++ b/.github/cloud_builder/run_command_on_active_checkout.yaml @@ -3,7 +3,7 @@ substitutions: options: logging: CLOUD_LOGGING_ONLY steps: - - name: us-central1-docker.pkg.dev/external-snap-ci-github-gigl/gigl-base-images/gigl-builder:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 + - name: us-central1-docker.pkg.dev/external-snap-ci-github-gigl/gigl-base-images/gigl-builder:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 entrypoint: /bin/bash # Route sbt through Google's Maven Central mirror to avoid 429 rate limits from repo1.maven.org. # Intentionally set here (CI env) rather than in scala/.sbtopts or scala_spark35/.sbtopts to avoid diff --git a/gigl/dep_vars.env b/gigl/dep_vars.env index 8314a0cb5..a8a194cff 100644 --- a/gigl/dep_vars.env +++ b/gigl/dep_vars.env @@ -1,7 +1,7 @@ # Note this file only supports static key value pairs so it can be loaded by make, bash, python, and sbt without any additional parsing. -DOCKER_LATEST_BASE_CUDA_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cuda-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 -DOCKER_LATEST_BASE_CPU_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cpu-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 -DOCKER_LATEST_BASE_DATAFLOW_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dataflow-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 +DOCKER_LATEST_BASE_CUDA_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cuda-base:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 +DOCKER_LATEST_BASE_CPU_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cpu-base:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 +DOCKER_LATEST_BASE_DATAFLOW_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dataflow-base:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 DEFAULT_GIGL_RELEASE_SRC_IMAGE_CUDA=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cuda:0.3.0 DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cpu:0.3.0 From 8bac68f663c65dfe8b04193f707432b100e7d149 Mon Sep 17 00:00:00 2001 From: mkolodner Date: Wed, 3 Jun 2026 20:10:23 +0000 Subject: [PATCH 11/12] Revert "[AUTOMATED] Update dep.vars, and other relevant files with new image names" This reverts commit e16e2ba84925f8af11ffad3030a0fc17b466a594. --- .github/cloud_builder/run_command_on_active_checkout.yaml | 2 +- gigl/dep_vars.env | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/cloud_builder/run_command_on_active_checkout.yaml b/.github/cloud_builder/run_command_on_active_checkout.yaml index f83c26011..1808472a0 100644 --- a/.github/cloud_builder/run_command_on_active_checkout.yaml +++ b/.github/cloud_builder/run_command_on_active_checkout.yaml @@ -3,7 +3,7 @@ substitutions: options: logging: CLOUD_LOGGING_ONLY steps: - - name: us-central1-docker.pkg.dev/external-snap-ci-github-gigl/gigl-base-images/gigl-builder:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 + - name: us-central1-docker.pkg.dev/external-snap-ci-github-gigl/gigl-base-images/gigl-builder:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 entrypoint: /bin/bash # Route sbt through Google's Maven Central mirror to avoid 429 rate limits from repo1.maven.org. # Intentionally set here (CI env) rather than in scala/.sbtopts or scala_spark35/.sbtopts to avoid diff --git a/gigl/dep_vars.env b/gigl/dep_vars.env index a8a194cff..8314a0cb5 100644 --- a/gigl/dep_vars.env +++ b/gigl/dep_vars.env @@ -1,7 +1,7 @@ # Note this file only supports static key value pairs so it can be loaded by make, bash, python, and sbt without any additional parsing. -DOCKER_LATEST_BASE_CUDA_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cuda-base:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 -DOCKER_LATEST_BASE_CPU_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cpu-base:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 -DOCKER_LATEST_BASE_DATAFLOW_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dataflow-base:6db83bdc98b2da65ac80243ce08cd8b37b3ee85f.110.1 +DOCKER_LATEST_BASE_CUDA_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cuda-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 +DOCKER_LATEST_BASE_CPU_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-cpu-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 +DOCKER_LATEST_BASE_DATAFLOW_IMAGE_NAME_WITH_TAG=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/gigl-dataflow-base:7d3182eeb6446ce3e35910babba990c8e003879d.109.1 DEFAULT_GIGL_RELEASE_SRC_IMAGE_CUDA=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cuda:0.3.0 DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU=us-central1-docker.pkg.dev/external-snap-ci-github-gigl/public-gigl/src-cpu:0.3.0 From 02e4bbf2e1450612dea4d0d93df9ff020f892136 Mon Sep 17 00:00:00 2001 From: mkolodner Date: Wed, 3 Jun 2026 20:10:28 +0000 Subject: [PATCH 12/12] Revert "Merge branch 'kmonte/fix-networking-test' into release/v0.3.0" This reverts commit 6db83bdc98b2da65ac80243ce08cd8b37b3ee85f, reversing changes made to 0d6d03d28212eafbc2835877a2ced1b5134e3dae. --- .../distributed/utils/networking_test.py | 37 ------------------- 1 file changed, 37 deletions(-) diff --git a/tests/integration/distributed/utils/networking_test.py b/tests/integration/distributed/utils/networking_test.py index 21925d66a..4bfeeb838 100644 --- a/tests/integration/distributed/utils/networking_test.py +++ b/tests/integration/distributed/utils/networking_test.py @@ -1,15 +1,11 @@ import uuid from textwrap import dedent -from google.cloud.aiplatform_v1.types import env_var from parameterized import param, parameterized from gigl.common.constants import DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU from gigl.common.services.vertex_ai import VertexAiJobConfig, VertexAIService -from gigl.common.utils.proto_utils import ProtoUtils -from gigl.env.constants import GIGL_RESOURCE_CONFIG_URI_ENV_KEY from gigl.env.pipelines_config import get_resource_config -from gigl.src.common.utils.file_loader import FileLoader from tests.test_assets.test_case import TestCase @@ -28,31 +24,8 @@ def setUp(self): service_account=self._service_account, staging_bucket=self._staging_bucket, ) - - # get_graph_store_info() (run on the launched workers) calls - # get_resource_config() to build the readiness URI, so the workers need a - # resource config they can read. The test runner's resource config URI may - # be a local path that does not exist on the worker image, so we upload the - # in-memory resource config to the regional bucket (which the workers can - # read from GCS) and pass that URI via GIGL_RESOURCE_CONFIG_URI. - self._file_loader = FileLoader() - self._remote_resource_config_uri = ( - self._resource_config.temp_assets_regional_bucket_path - / "gigl" - / "integration_tests" - / "networking" - / f"resource_config_{uuid.uuid4()}.yaml" - ) - ProtoUtils().write_proto_to_yaml( - proto=self._resource_config.resource_config, - uri=self._remote_resource_config_uri, - ) super().setUp() - def tearDown(self): - self._file_loader.delete_files([self._remote_resource_config_uri]) - super().tearDown() - @parameterized.expand( [ param( @@ -90,22 +63,12 @@ def test_get_graph_store_info(self, _, storage_nodes, compute_nodes): """ ), ] - # launch_graph_store_job propagates the compute pool's environment_variables - # to both the compute and storage container specs, so the uploaded resource - # config URI is visible to every worker. - resource_config_env_vars = [ - env_var.EnvVar( - name=GIGL_RESOURCE_CONFIG_URI_ENV_KEY, - value=self._remote_resource_config_uri.uri, - ) - ] compute_cluster_config = VertexAiJobConfig( job_name=job_name, container_uri=DEFAULT_GIGL_RELEASE_SRC_IMAGE_CPU, replica_count=compute_nodes, command=command, machine_type="n2-standard-8", - environment_variables=resource_config_env_vars, ) storage_cluster_config = VertexAiJobConfig( job_name=job_name,