Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,18 @@ jobs:
python-version: ${{ matrix.python }}
- run: make pytest

runtime-package:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
# Exercise the actual Dockerfile and context without the large vLLM base.
- name: Fetch and execute DMTCP in the runtime Docker build
run: |
docker build --target dmtcp -f deploy/kubernetes/Dockerfile \
--build-arg BASE=debian:bookworm-slim@sha256:99c0b25c46d0214d5a2091092e7908907dcaecd6a962cde0ac700acee222b6f3 .

lint:
runs-on: ubuntu-24.04
steps:
Expand Down
6 changes: 6 additions & 0 deletions .github/workflows/runtime-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,12 @@ jobs:
tar -xzf "$RUNNER_TEMP/release/warmctl-$RELEASE-linux-amd64.tar.gz" -C bin cuinterpose
- name: Build the released runtime
run: |
# beta.17's Docker context omitted this newly added package fetcher.
# Keep the tag immutable; repair only context and system dependencies.
if [ "$RELEASE" = v2.0.0-beta.17 ]; then
printf '\n!scripts/fetch-dmtcp.sh\n' >> deploy/kubernetes/Dockerfile.dockerignore
sed -i 's/ libstdc++6/ libstdc++6 libatomic1/g' deploy/kubernetes/Dockerfile
fi
args=()
if [ -n "$BASE_IMAGE" ]; then args+=(--build-arg "BASE=$BASE_IMAGE"); fi
docker build -t "localhost:5000/warmctl/runtime:$IMAGE_TAG" \
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,8 @@ Keep `warmctl`, `cuinterpose/` and the versioned `dmtcp/` directory from the
linux-amd64 archive side by side; the installer does this automatically.
Linux arm64 archives include DMTCP but no cuInterpose yet and are CPU-tested,
not GPU-qualified. The native DMTCP packages require Debian 12-compatible
glibc (>= 2.36) and libstdc++. macOS builds run the registry side: `catalog`,
glibc (>= 2.36), libstdc++ and libatomic (`libstdc++6` and `libatomic1` on
Debian/Ubuntu). macOS builds run the registry side: `catalog`,
`images`, `mirror`, `push`, `pull`. Source builds use `make build cuinterpose`;
see [DMTCP runtime installation and upgrades](docs/dmtcp.md).
Every release is signed and has build provenance
Expand Down
3 changes: 2 additions & 1 deletion RELEASING.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ native Linux amd64 and arm64 packages containing both the runtime and fdkeep.
The plugin source is maintained in that fork's `plugin/fdkeep`, not duplicated
here. DMTCP and its shared libraries are native Linux code, not portable Go
executables. Packages are built on Debian 12 (glibc >= 2.36 and compatible
libstdc++); macOS archives contain only the warmctl client.
libstdc++ and libatomic); macOS archives contain only the warmctl client.
Minimal Debian/Ubuntu hosts need `libstdc++6` and `libatomic1` installed.

For an update, first publish and verify the DMTCP release. Update
`internal/dmtcp/VERSION` and copy its published archive checksums into
Expand Down
4 changes: 2 additions & 2 deletions deploy/kubernetes/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
FROM ${BASE} AS dmtcp
COPY scripts/fetch-dmtcp.sh /src/scripts/fetch-dmtcp.sh
COPY internal/dmtcp/VERSION internal/dmtcp/SHA256SUMS /src/internal/dmtcp/
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl libstdc++6 \
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates curl libstdc++6 libatomic1 \
&& sh /src/scripts/fetch-dmtcp.sh amd64 /opt/warmctl/dmtcp \
&& /opt/warmctl/dmtcp/bin/dmtcp_launch --version

Expand All @@ -44,7 +44,7 @@ FROM scratch AS cuinterpose
FROM ${BASE}
# The native DMTCP package also works with minimal Debian/Ubuntu test bases.
# --no-upgrade keeps an existing runtime's C++ library unchanged.
RUN apt-get update && apt-get install -y --no-install-recommends --no-upgrade libstdc++6 \
RUN apt-get update && apt-get install -y --no-install-recommends --no-upgrade libstdc++6 libatomic1 \
&& rm -rf /var/lib/apt/lists/*
ARG BASE
ARG BASE_REF=${BASE}
Expand Down
3 changes: 2 additions & 1 deletion deploy/kubernetes/Dockerfile.dockerignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Only what the Go build and the extension need.
# Only what the Go build, extension and released DMTCP package need.
*
!go.mod
!go.sum
Expand All @@ -8,5 +8,6 @@
!profiles
!hardware
!python/warmctl_vllm
!scripts/fetch-dmtcp.sh
**/*_test.go
**/__pycache__
3 changes: 2 additions & 1 deletion docs/dmtcp.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ existing snapshots. Use an old snapshot's original runtime image or explicit
replace an existing runtime image. See the fork's
[release procedure](https://github.com/TensorRails/dmtcp/blob/v5.0.0-warmctl.1/RELEASING.md).

The packages require glibc >= 2.36 and compatible libstdc++. ARM64 passes
The packages require glibc >= 2.36, compatible libstdc++ and libatomic
(`libstdc++6` and `libatomic1` on Debian/Ubuntu). ARM64 passes
native CPU checkpoint/restore tests, including fdkeep; GPU serving has not
been qualified on ARM64. Parallel pread is x86-64-only; ARM64 uses the
ordinary reader with optional huge pages.
Expand Down
Loading