From 2a7571abdc0384c7c0d204fb10ad7a56f3eafb76 Mon Sep 17 00:00:00 2001 From: Frank Date: Mon, 10 Aug 2026 21:12:48 -0700 Subject: [PATCH] chore: remove stale root-level duplicates of scripts/ files - validate-vllm.sh (root) superseded by scripts/validate-vllm.sh - vllm-qwen36.sh superseded by scripts/serve-vllm-qwen36-dflash.sh --- validate-vllm.sh | 85 ------------------------------------------------ vllm-qwen36.sh | 31 ------------------ 2 files changed, 116 deletions(-) delete mode 100755 validate-vllm.sh delete mode 100755 vllm-qwen36.sh diff --git a/validate-vllm.sh b/validate-vllm.sh deleted file mode 100755 index e97e163..0000000 --- a/validate-vllm.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env bash -# End-to-end validation test for vLLM Qwen3.6-35B-A3B-FP8 -# Tests single stream and 4 parallel streams -set -euo pipefail - -HOST="${1:-127.0.0.1}" -PORT="${2:-8001}" -NUM_STREAMS=4 - -echo "=== Validating vLLM on ${HOST}:${PORT} ===" - -# Test health endpoint -echo "Health check..." -if ! curl -sf "http://${HOST}:${PORT}/health" > /dev/null 2>&1; then - echo "FAIL: Health check failed" - exit 1 -fi - -# Single stream test -echo "Single stream test..." -START=$(date +%s%N) -RESPONSE=$(curl -s -X POST "http://${HOST}:${PORT}/v1/chat/completions" \ - -H "Content-Type: application/json" \ - -d '{ - "model": "frank-default-small", - "messages": [ - {"role": "user", "content": "Explain the difference between supervised, unsupervised, and reinforcement learning in machine learning. For each type, provide a concrete real-world example, describe the training process, and discuss the advantages and limitations. Then compare them across three dimensions: data requirements, interpretability of results, and computational cost. Finally, describe a hybrid scenario where combining two of these approaches would outperform using either alone."} - ], - "max_tokens": 256 - }') -END=$(date +%s%N) -ELAPSED_MS=$(( (END - START) / 1000000 )) -PROMPT_TOKENS=$(echo "$RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin)['usage']['prompt_tokens'])") -COMPLETION_TOKENS=$(echo "$RESPONSE" | python3 -c "import sys,json; print(json.load(sys.stdin)['usage']['completion_tokens'])") -SINGLE_SPEED=$(python3 -c "print(f'{${PROMPT_TOKENS}/${ELAPSED_MS}*1000:.2f}')") -echo "Single stream: ${SINGLE_SPEED} tok/s (prompt)" - -# Parallel streams test -echo "Parallel streams test (${NUM_STREAMS} streams)..." -START=$(date +%s%N) -TMPDIR=$(mktemp -d) -for i in $(seq 1 $NUM_STREAMS); do - curl -s -X POST "http://${HOST}:${PORT}/v1/chat/completions" \ - -H "Content-Type: application/json" \ - -d '{ - "model": "frank-default-small", - "messages": [ - {"role": "user", "content": "Explain the difference between supervised, unsupervised, and reinforcement learning in machine learning. For each type, provide a concrete real-world example, describe the training process, and discuss the advantages and limitations. Then compare them across three dimensions: data requirements, interpretability of results, and computational cost. Finally, describe a hybrid scenario where combining two of these approaches would outperform using either alone."} - ], - "max_tokens": 256 - }' > "$TMPDIR/$i.json" & -done -wait -END=$(date +%s%N) -ELAPSED_MS=$(( (END - START) / 1000000 )) - -# Aggregate results from all streams -TOTAL_PROMPT=0 -TOTAL_COMPLETION=0 -for i in $(seq 1 $NUM_STREAMS); do - PT=$(python3 -c "import json; print(json.load(open('$TMPDIR/$i.json'))['usage']['prompt_tokens'])") - CT=$(python3 -c "import json; print(json.load(open('$TMPDIR/$i.json'))['usage']['completion_tokens'])") - TOTAL_PROMPT=$((TOTAL_PROMPT + PT)) - TOTAL_COMPLETION=$((TOTAL_COMPLETION + CT)) -done -rm -rf "$TMPDIR" - -PARALLEL_SPEED=$(python3 -c "print(f'{${TOTAL_PROMPT}/${ELAPSED_MS}*1000:.2f}')") - -echo "" -echo "=== Results ===" -echo "Single stream prompt speed: ${SINGLE_SPEED} tok/s" -echo "Parallel streams prompt speed: ${PARALLEL_SPEED} tok/s (${NUM_STREAMS} streams, ${TOTAL_PROMPT} total prompt tokens)" -echo "Parallel completion speed: $(python3 -c "print(f'{${TOTAL_COMPLETION}/${ELAPSED_MS}*1000:.2f}')") tok/s" -echo "Total parallel time: ${ELAPSED_MS}ms" -echo "" - -# Fail if parallel speed < 5 tok/s -if python3 -c "import sys; sys.exit(0 if ${TOTAL_PROMPT}/${ELAPSED_MS}*1000 >= 5 else 1)"; then - echo "PASS: Validation successful" - echo "$PARALLEL_SPEED" > /tmp/vllm_prompt_speed.txt -else - echo "FAIL: Parallel prompt speed ${PARALLEL_SPEED} tok/s is below 5 tok/s threshold" - exit 1 -fi diff --git a/vllm-qwen36.sh b/vllm-qwen36.sh deleted file mode 100755 index 5426845..0000000 --- a/vllm-qwen36.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -MODEL="Qwen/Qwen3.6-35B-A3B-FP8" -PORT=8001 -HOST="0.0.0.0" - -exec docker run --rm --name vllm-qwen36 \ - --gpus all \ - --privileged \ - --ipc=host \ - -p "${PORT}:${PORT}" \ - -e PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True \ - -v /home/dank/.cache/huggingface:/root/.cache/huggingface \ - docker.io/vllm/vllm-openai:latest \ - "${MODEL}" \ - --port "${PORT}" \ - --host "${HOST}" \ - --kv-cache-dtype fp8 \ - --gpu-memory-utilization 0.95 \ - --max-num-seqs 4 \ - --max-model-len 16384 \ - --max-num-batched-tokens 4096 \ - --trust-remote-code \ - --cpu-offload-gb 30 \ - --cpu-offload-params "experts" \ - --enable-chunked-prefill \ - --enable-prefix-caching \ - --served-model-name frank-default-small \ - --enable-auto-tool-choice \ - --tool-call-parser qwen3_xml