ald-tao-gpu / CUDA_REFERENCE.md
TiGa-RCE's picture
Add matched four-vehicle support to ALD training
5a037eb verified
|
Raw History Blame Contribute Delete
3.84 kB

A newer version of the Gradio SDK is available: 6.31.0

Upgrade

Bounded CPU/CUDA reference check

This protocol defines a reproducible generated input for qualifying the package's largest vanilla Formula network through the native simulator. This maximum five-output Formula fixture is one bounded qualification case; separate vehicle-specific runtime checks are required for Rally, Snowmobile and Truck. A passing run covers only the selected B01 track, fixture, settings, and build. It does not establish broad original-game parity, training quality, or general CPU/CUDA equivalence.

Public-package fixture

  • Track: builtin_tracks/tracks/Replica B01 Oval.track, catalog ID 787f73f5-3b8c-5d95-b0e3-0016ed076970, SHA-256 0df5755150c145a35edc6c8693f429e5b9ff4b12210ba67cbfcb932c58faf158.
  • Network shape: [20]+[16]*10+[5], with five outputs in game order [0,1,2,3,4] (Steering, Acceleration, Handbrake, Brake, Boost), 13 raycasts plus the seven unparameterized sensors. This is 12 total layers and 2,869 dense weights and biases. The source fixture includes a Name to make the generated JSON self-contained.
  • The Python 3 standard-library snippet below creates deterministic compact JSON bytes and deterministic gzip bytes. It mirrors the generated maximum-shape fixture used by the package contract tests. The generated network is a synthetic reference input, not a trained lapper.
import gzip
import hashlib
import json
import random


def generated_network():
    shape = [20] + [16] * 10 + [5]
    sensors = [
        {"$type": "raycast", "Degrees": -90 + i * 15, "Length": 800}
        for i in range(13)
    ] + [
        {"$type": name}
        for name in (
            "speed", "velocityFront", "velocitySide", "angularVelocity",
            "wheelAngle", "boostCapacity", "correctDirection",
        )
    ]
    rng = random.Random(20261013)
    weights = [
        [[rng.uniform(-0.2, 0.2) for _ in range(width_out)]
         for _ in range(width_in)]
        for width_in, width_out in zip(shape, shape[1:])
    ]
    biases = [[0.0] * width for width in shape[1:]]
    return {
        "Type": 0,
        "Name": "Disposable full-network qualification",
        "Outputs": [0, 1, 2, 3, 4],
        "Sensors": sensors,
        "NeuralNetwork": {
            "Shape": shape,
            "Weights": weights,
            "Biases": biases,
        },
    }


network = generated_network()
raw = json.dumps(network, separators=(",", ":")).encode("utf-8")
compressed = gzip.compress(raw, mtime=0)
print("json_bytes", len(raw), "json_sha256", hashlib.sha256(raw).hexdigest())
print("gzip_bytes", len(compressed), "gzip_sha256", hashlib.sha256(compressed).hexdigest())

Feed the compressed bytes with the unchanged B01 track file. Do not decompress and rewrite the bundled track. The script prints the hashes for the exact Python/runtime-generated bytes; retain the printed values with the test receipt.

Bounded run and receipts

Use population 1, generation 1, 120 ticks, mutation 0.01, seed 42, one worker, and the default total-score reward as a smoke setting. The package contract suite separately exercises actual training with the maximum shape; a small smoke setting should not be presented as a training-quality recommendation.

For hosted qualification, record Space/build ID, CPU or CUDA selection, package and binary hashes, fixture hashes, native report, candidate output hash, candidate validation result, download receipt, and server deletion receipt. Compare CPU and CUDA only on the exact same fixture/settings/build where the deployed service supports both routes and CUDA allowance is available. Do not spend paid overage. A mismatch is a finding to investigate; a match on this one fixture does not establish broad parity. No live GPU job is claimed by this protocol; deployed status and executed qualification belong in the release receipt.