Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| # | |
| # Deploy script for the RIR-ASR Evaluation Leaderboard. | |
| # | |
| # The HF Space runs evaluation directly — no Lambda needed. | |
| # AWS S3 is used only for private dataset storage and results. | |
| # | |
| # Prerequisites: | |
| # - AWS CLI configured (aws configure) | |
| # - HuggingFace CLI installed (pip install huggingface-hub) | |
| # | |
| # Usage: | |
| # 1. Edit the variables below | |
| # 2. ./deploy.sh setup-s3 # One-time: create S3 bucket + IAM user | |
| # 3. ./deploy.sh upload-data # Upload private dataset to S3 | |
| # 4. ./deploy.sh deploy-space # Create/update HuggingFace Space | |
| set -euo pipefail | |
| # ============================================================================ | |
| # CONFIGURATION — edit these | |
| # ============================================================================ | |
| AWS_REGION="us-east-1" | |
| # S3 | |
| S3_BUCKET="FFASR_Leaderboard-storage" | |
| S3_PREFIX="generated_with_treble10" | |
| # IAM user for HF Space to access S3 | |
| IAM_USER_NAME="whojavumusic" | |
| # HuggingFace Space (full repo id: org/SpaceName) | |
| HF_SPACE_NAME="treble-technologies/FFASR_Leaderboard" | |
| # Required for deploy-space: export HF_TOKEN before running (HF Settings → Access Tokens) | |
| HF_TOKEN="${HF_TOKEN:-}" | |
| # Local paths | |
| DATASET_DIR="../data/packed/" | |
| SPACE_DIR="." | |
| # ============================================================================ | |
| # FUNCTIONS | |
| # ============================================================================ | |
| setup_s3() { | |
| echo "=== Creating S3 bucket ===" | |
| aws s3 mb "s3://${S3_BUCKET}" --region "${AWS_REGION}" 2>/dev/null || echo "Bucket already exists" | |
| # Block all public access | |
| aws s3api put-public-access-block \ | |
| --bucket "${S3_BUCKET}" \ | |
| --public-access-block-configuration \ | |
| "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true" | |
| echo "=== Creating IAM user for Space S3 access ===" | |
| aws iam create-user --user-name "${IAM_USER_NAME}" 2>/dev/null || echo "IAM user already exists" | |
| # S3-only policy scoped to this bucket | |
| S3_POLICY="{ | |
| \"Version\": \"2012-10-17\", | |
| \"Statement\": [{ | |
| \"Effect\": \"Allow\", | |
| \"Action\": [\"s3:GetObject\", \"s3:PutObject\", \"s3:ListBucket\"], | |
| \"Resource\": [ | |
| \"arn:aws:s3:::${S3_BUCKET}\", | |
| \"arn:aws:s3:::${S3_BUCKET}/*\" | |
| ] | |
| }] | |
| }" | |
| aws iam put-user-policy \ | |
| --user-name "${IAM_USER_NAME}" \ | |
| --policy-name "S3DatasetAccess" \ | |
| --policy-document "${S3_POLICY}" | |
| echo "" | |
| echo "=== Creating access keys ===" | |
| KEYS=$(aws iam create-access-key --user-name "${IAM_USER_NAME}" 2>/dev/null || echo "") | |
| if [ -n "${KEYS}" ]; then | |
| ACCESS_KEY=$(echo "${KEYS}" | python3 -c "import sys,json; print(json.load(sys.stdin)['AccessKey']['AccessKeyId'])") | |
| SECRET_KEY=$(echo "${KEYS}" | python3 -c "import sys,json; print(json.load(sys.stdin)['AccessKey']['SecretAccessKey'])") | |
| echo "" | |
| echo "Save these — you won't see the secret again:" | |
| echo " AWS_ACCESS_KEY_ID = ${ACCESS_KEY}" | |
| echo " AWS_SECRET_ACCESS_KEY = ${SECRET_KEY}" | |
| else | |
| echo "Access keys already exist. Delete old ones in IAM console if you need new ones." | |
| fi | |
| echo "" | |
| echo "=== S3 setup complete ===" | |
| } | |
| upload_data() { | |
| echo "=== Uploading dataset to S3 ===" | |
| aws s3 sync "${DATASET_DIR}/wavs/" "s3://${S3_BUCKET}/${S3_PREFIX}/wavs/" --region "${AWS_REGION}" | |
| aws s3 sync "${DATASET_DIR}/transcripts/" "s3://${S3_BUCKET}/${S3_PREFIX}/transcripts/" --region "${AWS_REGION}" | |
| echo "" | |
| echo "=== Upload complete ($(aws s3 ls "s3://${S3_BUCKET}/${S3_PREFIX}/wavs/" --region "${AWS_REGION}" | wc -l) wav files) ===" | |
| } | |
| deploy_space() { | |
| echo "=== Deploying HuggingFace Space ===" | |
| if [ -z "${HF_TOKEN}" ]; then | |
| echo "Error: Set HF_TOKEN environment variable" | |
| exit 1 | |
| fi | |
| # Create the Space repo if it doesn't exist | |
| huggingface-cli repo create "${HF_SPACE_NAME}" --type space --space-sdk gradio 2>/dev/null || true | |
| # Clone, copy files, push | |
| TMPDIR=$(mktemp -d) | |
| git clone "https://huggingface.co/spaces/${HF_SPACE_NAME}" "${TMPDIR}/space" 2>/dev/null || \ | |
| git clone "https://huggingface.co/spaces/${HF_SPACE_NAME}" "${TMPDIR}/space" | |
| cp "${SPACE_DIR}/app.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/init.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/analytics.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/ffas.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/family_registry.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/job_queue.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/metrics_config.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/remote_jobs.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/storage.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/utils_display.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/constants.py" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/requirements.txt" "${TMPDIR}/space/" | |
| cp "${SPACE_DIR}/README.md" "${TMPDIR}/space/" | |
| rm -rf "${TMPDIR}/space/backends" "${TMPDIR}/space/benchmark" "${TMPDIR}/space/evaluation" "${TMPDIR}/space/scripts" | |
| cp -R "${SPACE_DIR}/backends" "${TMPDIR}/space/backends" | |
| cp -R "${SPACE_DIR}/benchmark" "${TMPDIR}/space/benchmark" | |
| cp -R "${SPACE_DIR}/evaluation" "${TMPDIR}/space/evaluation" | |
| cp -R "${SPACE_DIR}/scripts" "${TMPDIR}/space/scripts" | |
| cd "${TMPDIR}/space" | |
| git add -A | |
| git commit -m "Update leaderboard app" || echo "No changes to commit" | |
| git push | |
| cd - | |
| rm -rf "${TMPDIR}" | |
| echo "" | |
| echo "=== Space deployed ===" | |
| echo "URL: https://huggingface.co/spaces/${HF_SPACE_NAME}" | |
| echo "" | |
| echo "Set these secrets in Space settings (Settings > Variables and Secrets):" | |
| echo " AWS_ACCESS_KEY_ID = <from setup-s3 output>" | |
| echo " AWS_SECRET_ACCESS_KEY = <from setup-s3 output>" | |
| echo " AWS_DEFAULT_REGION = ${AWS_REGION}" | |
| echo " DATASET_S3_BUCKET = ${S3_BUCKET}" | |
| echo " DATASET_S3_PREFIX = ${S3_PREFIX}" | |
| echo " RESULTS_S3_BUCKET = ${S3_BUCKET}" | |
| echo " RESULTS_S3_KEY = results/leaderboard.csv" | |
| } | |
| # ============================================================================ | |
| # MAIN | |
| # ============================================================================ | |
| case "${1:-help}" in | |
| setup-s3) setup_s3 ;; | |
| upload-data) upload_data ;; | |
| deploy-space) deploy_space ;; | |
| all) | |
| setup_s3 | |
| upload_data | |
| deploy_space | |
| ;; | |
| *) | |
| echo "Usage: $0 {setup-s3|upload-data|deploy-space|all}" | |
| echo "" | |
| echo " setup-s3 Create private S3 bucket + IAM user for the Space" | |
| echo " upload-data Upload private dataset to S3" | |
| echo " deploy-space Deploy HuggingFace Space" | |
| echo " all Run all steps in order" | |
| ;; | |
| esac | |