tests/int_ops_differential.rs gains a half for jpegai's hyper decoders, context stages and synthesis (§13.6.2): random weight files in the export's form at the shapes the direct networks read (multipliers scaled to keep magnitudes, shifts 24 to 40, one convolution in about 64 grown past A32 in a "hot" case), random hyper-latents, residuals and latents. - jpegai_random_networks_reconstruct_alike (rec_y, rec_uv): ŷ equals the direct hyper decoder's and context stages', or the operator set refuses field_range at a checked tensor (the direct networks computed on); a file that breaks a load check (a member missing, a shift of 128, a weight short, dims, a bias long) is refused model_mismatch, and its bytes and its parsed form lower to the same graph or the same refusal. - jpegai_random_synthesis_networks_decode_alike (syn_y, syn_uv), at the whole picture's size: the planes equal the direct synthesis's, or field_range. - Per push (release, build host): rec 64 cases (alike 56, past A32 3; planned breaks: a member missing 1, a shift of 128 2, a weight short 2); synthesis 8 cases (alike 7, past A32 1). The nightly wai-ops-differential.yml runs both for its time, and names them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
73 lines
3.4 KiB
YAML
73 lines
3.4 KiB
YAML
name: wai-ops differential (nightly)
|
|
|
|
# Each integer decoder that decodes through the integer operator set
|
|
# (wai/extensions/integer-operators.md) against its direct decode (the test-only
|
|
# `legacy_int` feature), on random parameter sets and payloads, for an hour under each
|
|
# build profile: with overflow checks on and with them off. Outside the planned breaks
|
|
# of integer-operators §15.3 the two decode to the same bytes or both refuse, and the
|
|
# direct decode never panics; under a planned break the decode through the operator set
|
|
# refuses (wai/wai-rs/tests/int_ops_differential.rs). Today: wai.neural.int_synth,
|
|
# wai.splat.int_codec, wai.audio.int_codec, wai.neural.int_hyper (whose decode is
|
|
# also the keyframe of wai.video.int_hyper), wai.neural.int_mlicpp, wai.world.model's
|
|
# integer renderer, against its direct renderer with the direct guard, and
|
|
# wai.image.jpegai's scale path and entropy decodes, against its direct computation,
|
|
# which panics (or, without overflow checks, may compute on) where the operator set
|
|
# refuses a stream, and its hyper decoders, context stages and synthesis (the graphs of
|
|
# integer-operators §13.6.2), against its direct networks, which compute on where the
|
|
# operator set refuses a value past its i32 checks; and WIV1 (wai.video.int_motion, the P-frames of wai.video.int_hyper)
|
|
# and WIR1 (the four int_refine capabilities), which decode through the stage operators
|
|
# alone and make no planned break.
|
|
#
|
|
# Each night starts from its own seed, the date, which the log prints; a failing case
|
|
# names its seed, and `WAI_DIFF_SEED=<seed>` re-runs it. The same tests run for a fixed
|
|
# count on every push, in wai-conformance.yml's fast-kernel steps.
|
|
|
|
# One run per branch at a time. A push supersedes the run before it.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '41 2 * * *'
|
|
# A change to this file runs it for two minutes per profile, so a broken job is seen
|
|
# before the night.
|
|
pull_request:
|
|
paths:
|
|
- '.github/workflows/wai-ops-differential.yml'
|
|
|
|
jobs:
|
|
differential:
|
|
name: differential · ${{ matrix.profile }}
|
|
runs-on: linux
|
|
timeout-minutes: 120
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
profile: [debug, release]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# The docker image ships no Rust.
|
|
- name: Install Rust 1.98.0
|
|
shell: bash
|
|
run: |
|
|
export PATH="$HOME/.cargo/bin:$PATH"
|
|
command -v rustup >/dev/null 2>&1 || \
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
|
|
rustup toolchain install 1.98.0 --profile minimal
|
|
rustup default 1.98.0
|
|
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Through the operator set against the direct decode, random sets and payloads
|
|
working-directory: wai/wai-rs
|
|
shell: bash
|
|
env:
|
|
WAI_DIFF_SECS: ${{ github.event_name == 'schedule' && '3600' || '120' }}
|
|
run: |
|
|
set -euo pipefail
|
|
P=""
|
|
if [ "${{ matrix.profile }}" = release ]; then P="--release"; fi
|
|
export WAI_DIFF_SEED="$(date -u +%Y%m%d)"
|
|
echo "WAI_DIFF_SECS=$WAI_DIFF_SECS WAI_DIFF_SEED=$WAI_DIFF_SEED"
|
|
cargo test $P --locked --no-default-features --features legacy_int,splat_int,audio_int,world_int,video_int,staged --test int_ops_differential -- --nocapture
|