Read Qwen FP8 native MTP progress #117
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: SpeedBench AL Collection | |
| run-name: Read Qwen FP8 native MTP progress | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| runner: | |
| description: Controller runner label for read-only observation | |
| required: true | |
| type: string | |
| observe-runner-names: | |
| description: Runner names owning the target allocations | |
| required: true | |
| type: string | |
| permissions: | |
| contents: read | |
| jobs: | |
| observe: | |
| # Controller-only reads: this job neither allocates GPUs nor runs benchmarks. | |
| runs-on: ${{ fromJSON(format('["self-hosted",{0}]', toJSON(inputs.runner))) }} | |
| timeout-minutes: 5 | |
| steps: | |
| - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 | |
| with: { persist-credentials: false } | |
| - name: Read live server state | |
| env: | |
| OBSERVE_RUNNER_NAMES: ${{ inputs.observe-runner-names }} | |
| run: | | |
| set -eo pipefail | |
| source benchmarks/benchmark_lib.sh --validation-only | |
| check_env_vars OBSERVE_RUNNER_NAMES | |
| for target in $OBSERVE_RUNNER_NAMES; do | |
| job_id=$(squeue --name="$target" --noheader --format='%i') | |
| if [[ ! "$job_id" =~ ^[0-9]+$ ]]; then | |
| echo "$target: no unique active allocation" | |
| continue | |
| fi | |
| work_dir=$(scontrol show job -o "$job_id" | sed -n 's/.* WorkDir=\([^ ]*\).*/\1/p') | |
| echo "TARGET $target" | |
| python3 - "$work_dir/server.log" <<'PY' | |
| import pathlib, re, sys | |
| path = pathlib.Path(sys.argv[1]) | |
| if not path.is_file(): | |
| print('Server log is not present yet') | |
| else: | |
| text = path.read_text(errors='replace') | |
| for key in ['method', 'num_speculative_tokens', 'rejection_sample_method', 'synthetic_acceptance_length']: | |
| match = re.search(r"'" + key + r"': ([^,}]+)", text) | |
| print(key, match[1] if match else 'not logged yet') | |
| lines = text.splitlines() | |
| metrics = [line for line in lines if 'SpecDecoding metrics:' in line] | |
| print('\n'.join(metrics[-2:] if metrics else lines[-5:])) | |
| errors = [line for line in lines if 'Traceback (most recent' in line or 'ERROR' in line] | |
| print('ERROR LINES', '\n'.join(errors[-5:])) | |
| PY | |
| done |