# Nightly per-GPU voice-bench smoke run. # # STATUS: stub. Gated by workflow_dispatch input until a self-hosted CUDA GPU # runner is wired. L4 (the cheapest GitHub-hosted GPU runner) is a reasonable # starting target; for the full matrix (3090 / 4090 / 5090 / H200) we # need a self-hosted pool. # # Per docs/inference/gpu-tier.md the per-GPU autotune profiles live in # packages/inference/configs/gpu/, and `voice-bench bench gpu` prints # the resolved plan for the host card. Once a real cuda PipelineDriver # is wired (see packages/inference/voice-bench/README.md "Wiring the # real pipeline"), this workflow runs the actual benchmark. name: gpu-bench-nightly on: schedule: # Nightly at 06:00 UTC. Adjust once we know what window the # self-hosted runners are available. - cron: "0 6 * * *" workflow_dispatch: inputs: bundle: description: "Bundle id (e.g. eliza-1-9b)" required: false default: "eliza-1-9b" enable_gpu_bench: description: "Run the scaffold GPU bench jobs" required: false type: boolean default: false # Default to least privilege. Override per-job where needed. permissions: contents: read jobs: detect: name: detect host GPU if: ${{ github.event_name == 'workflow_dispatch' && inputs.enable_gpu_bench == true }} runs-on: [self-hosted, gpu-cuda-12.6] steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 with: bun-version: canary - name: install run: bun install --frozen-lockfile || bun install --no-frozen-lockfile - name: probe GPU + print autotune plan run: | bun run --cwd packages/inference/voice-bench bench gpu \ --bundle "${{ github.event.inputs.bundle || 'eliza-1-9b' }}" \ | tee gpu-plan.json - name: upload plan uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with: name: gpu-plan path: gpu-plan.json if-no-files-found: error retention-days: 7 bench: name: voice-bench (cuda) needs: detect if: ${{ github.event_name == 'workflow_dispatch' && inputs.enable_gpu_bench == true }} runs-on: [self-hosted, gpu-cuda-12.6] timeout-minutes: 60 steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 with: bun-version: canary - name: install run: bun install --frozen-lockfile || bun install --no-frozen-lockfile - name: run voice-bench run: | bun run --cwd packages/inference/voice-bench bench \ --bundle "${{ github.event.inputs.bundle || 'eliza-1-9b' }}" \ --backend cuda \ --scenario all \ --runs 5 \ --output bench.json - name: upload bench result uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with: name: bench-${{ github.run_id }} path: bench.json if-no-files-found: error retention-days: 7