diff --git a/.github/workflows/build-default-models.yaml b/.github/workflows/build-default-models.yaml index c6abc4c134..496a2b34f5 100644 --- a/.github/workflows/build-default-models.yaml +++ b/.github/workflows/build-default-models.yaml @@ -47,6 +47,7 @@ jobs: if [ "${{ inputs.target }}" = "big" ]; then NAME=$(python3 -c "from openpilot.sunnypilot.models.model_name import DEFAULT_BIG_MODEL; print(DEFAULT_BIG_MODEL)") HF_DEFAULTS_PATH="models/defaults/big" + ONNX_PATH="openpilot/selfdrive/modeld/models/big_driving_tinygrad.pkl" elif [ "${{ inputs.target }}" = "dm" ]; then ONNX_PATH="openpilot/selfdrive/modeld/models/dmonitoring_model.onnx" HF_DEFAULTS_PATH="models/defaults/dm" @@ -206,6 +207,34 @@ jobs: raise RuntimeError('Chestnut PCIe link not ready after 10 attempts') " + - name: Compile big warp + run: | + source ${UV_PROJECT_ENVIRONMENT}/bin/activate + export PYTHONPATH="${PYTHONPATH}:${{ github.workspace }}/tinygrad_repo:${{ github.workspace }}" + + CHESTNUT_TG_FLAGS="DEBUG=1 DEV=USB+AMD:LLVM FRAME_DEV=CPU FLOAT16=1 JIT_BATCH_SIZE=0 GMMU=0 TC_OPT=2 TC_MIN_GLOBALS=32" + COMPILER="${{ github.workspace }}/tinygrad_repo/examples/openpilot" + MODELS_DIR="${{ github.workspace }}/openpilot/selfdrive/modeld/models" + MODEL_SIZE=$(python3 -c "from openpilot.common.transformations.model import MEDMODEL_INPUT_SIZE as s; print(f'{s[0]}x{s[1]}')") + + for res in $(python3 -c "from openpilot.common.transformations.camera import _ar_ox_fisheye as a, _os_fisheye as o; print(f'{a.width}x{a.height} {o.width}x{o.height}')"); do + CAM_W=$(echo $res | cut -d x -f1) + CAM_H=$(echo $res | cut -d x -f2) + STRIDE_INFO=$(python3 -c " + import sys + from openpilot.system.camerad.cameras.nv12_info import get_nv12_info + s,y,u,sz = get_nv12_info(int(sys.argv[1]), int(sys.argv[2])) + print(f'{s},{y},{u},{sz}') + " $CAM_W $CAM_H) + WARP_PKL="${MODELS_DIR}/big_driving_warp_${res}_tinygrad.pkl" + env ${CHESTNUT_TG_FLAGS} python3 "${COMPILER}/compile_warp.py" \ + --frame ${CAM_W},${CAM_H},${STRIDE_INFO} \ + --warp-to ${MODEL_SIZE} \ + --layout yuv420 \ + --frames 2 \ + --output "${WARP_PKL}" + done + - name: Prepare output env: MODEL_NAME: ${{ needs.resolve.outputs.safe_model_name }} @@ -219,7 +248,7 @@ jobs: cp "$MODELS_DIR/${PKL_BASE}" "$OUTPUT_DIR/" - PKL_LFS_SHA256=$(sha256sum "$MODELS_DIR/${PKL_BASE}" | cut -d' ' -f1) + PKL_LFS_SHA256=$(git cat-file blob "$(git ls-files -s "${{ github.workspace }}/${{ env.BIG_PKL }}" | awk '{print $2}')" | grep '^oid sha256:' | cut -d: -f2) python3 "${{ github.workspace }}/release/ci/model_generator.py" \ --model-dir "$MODELS_DIR" \ @@ -228,6 +257,8 @@ jobs: --upstream-branch "${{ needs.resolve.outputs.onnx_ref }}" \ --onnx-sha256 "$PKL_LFS_SHA256" + cp "$MODELS_DIR"/big_driving_warp_* "$OUTPUT_DIR/" || true + echo "model-${MODEL_NAME}-${{ github.run_number }}" > "$OUTPUT_DIR/artifact_name.txt" - name: Upload big model artifact @@ -305,6 +336,8 @@ jobs: --hf-defaults-path "${{ needs.resolve.outputs.hf_defaults_path }}" \ --artifact-name "$ARTIFACT_NAME" \ --model-dir output \ + --onnx-path "${{ needs.resolve.outputs.onnx_path }}" \ + --onnx-ref "${{ needs.resolve.outputs.onnx_ref }}" \ --model-name "${{ needs.resolve.outputs.model_name }}" \ --tinygrad-ref "${{ needs.resolve.outputs.tinygrad_ref }}" \ --run-number "${{ github.run_number }}" @@ -458,4 +491,3 @@ jobs: run: | source ${UV_PROJECT_ENVIRONMENT}/bin/activate PYTHONPATH=$PYTHONPATH:${{ github.workspace }}/ ${{ github.workspace }}/scripts/manage-powersave.py --enable - diff --git a/.github/workflows/download-hf-model/action.yml b/.github/workflows/download-hf-model/action.yml index d8372c3c10..863d81c89f 100644 --- a/.github/workflows/download-hf-model/action.yml +++ b/.github/workflows/download-hf-model/action.yml @@ -63,6 +63,11 @@ runs: ENCODED_URL=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${BASE_URL}/${warp}', safe=':/'))") printf '%s\t%s\n' "$ENCODED_URL" "${DEST_DIR}/${warp}" >> "$DOWNLOAD_LIST" done + elif [ "$CANONICAL" = "big_driving_tinygrad.pkl" ]; then + for warp in big_driving_warp_1928x1208_tinygrad.pkl big_driving_warp_1344x760_tinygrad.pkl; do + ENCODED_URL=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${BASE_URL}/${warp}', safe=':/'))") + printf '%s\t%s\n' "$ENCODED_URL" "${DEST_DIR}/${warp}" >> "$DOWNLOAD_LIST" + done fi } diff --git a/openpilot/sunnypilot/modeld_v2/compile_warp.py b/openpilot/sunnypilot/modeld_v2/compile_warp.py old mode 100644 new mode 100755