{
  "id": "pct-2026-11-08-spotlight-fba4521180",
  "content_type": "article",
  "desk": "spotlight",
  "title": "A GPU has to earn its place in an audio transcription queue",
  "publication_date": "2026-11-08",
  "observation_date": "2026-11-08",
  "editorial_voice": "AI-assisted Spotlight Desk",
  "body": "# A GPU has to earn its place in an audio transcription queue\n\n*Product spotlight | Peterson Compute Trading | November 8, 2026*\n*AI-assisted public-source analysis. No transcription benchmark, cloud deployment or purchase was performed. All prices and calculations are in US dollars.*\n\nConsider a hypothetical archive of a thousand hours of recorded lectures that needs searchable transcripts by next week. The recordings are owned or appropriately licensed, the speakers have consented, and the collection contains no sensitive material. This is a useful inference workload: it can wait, it divides into independent jobs, and a failed attempt should not require starting the whole collection again.\n\nThe first purchasing question is whether a GPU saves money after its supporting CPU and memory are counted. Using Modal's public rates, the two configurations below put that hurdle at about 3.60 times the CPU worker's throughput. A hypothetical fourfold speedup clears it narrowly. That small margin is the interesting part.\n\n## Start with a transcript worth keeping\n\nThe proposed engine is faster-whisper, a CTranslate2 implementation of Whisper. Begin with the same small English checkpoint on both machines, the same beam size, language setting, timestamp requirements and silence filtering. CPU INT8 and GPU INT8 with FP16 arithmetic are candidate execution modes, not a guarantee of identical output. Choose acceptable transcription quality before selecting the cheapest configuration. [Project documentation](https://github.com/SYSTRAN/faster-whisper)\n\nCreate a representative evaluation set before processing the archive: quiet narration, unfamiliar technical names, poor microphones, accents, music and long pauses. Compare against human-checked reference transcripts. Record word error rate, missing passages, invented passages and timestamp failures. A cheap transcript that requires extensive correction can be more expensive than the compute it saved. Whisper's model card explicitly warns about hallucinated text and uneven performance across languages and speakers. [Whisper model card](https://github.com/openai/whisper/blob/main/model-card.md)\n\nThe project's published performance table is useful orientation, but it compares a small model on an Intel i7-12700K with large-v2 on an RTX 3070 Ti in separate sections. Those rows do not establish a speedup for this CPU-versus-L4 experiment. Timing must also consume faster-whisper's output iterator: transcription work happens during iteration, so timing only the initial call can produce a misleadingly tiny number. [Benchmark and usage notes](https://github.com/SYSTRAN/faster-whisper)\n\n## Price the whole worker\n\nModal's November 8 rate card lists CPU at $0.0000131 per physical-core-second, memory at $0.00000222 per GiB-second, and an L4 at $0.000222 per second. The planning configurations are four physical CPU cores plus 8 GiB, or one L4 plus one physical core and 8 GiB. Multiplying by 3,600 gives $0.252576 and $0.910296 per worker-hour respectively. These use default Function rates with automatic placement, not a regional premium or a Sandbox. [Published prices](https://modal.com/pricing)\n\nThe resulting GPU-to-CPU price ratio is 3.604. For equal accepted output and no extra overhead, GPU throughput must exceed that multiple to reduce compute spending. Actual CPU and memory usage can change the arithmetic: Modal bills the higher of requested resources and actual usage, and its CPU setting denotes physical cores rather than vCPUs. The proposed allocations are sizing assumptions to test, not measured requirements. [Resource accounting](https://modal.com/docs/guide/resources)\n\n## A fourfold speedup can save only five dollars\n\nFor illustration only, assume the CPU consumes 0.20 worker-hours per audio hour and the GPU consumes 0.05. These are invented planning inputs, not measured or vendor-promised speeds. Processing 1,000 audio hours would then consume 200 CPU worker-hours or 50 GPU worker-hours, costing $50.52 or $45.51 before other charges. The GPU saves about $5.00, or 9.9%, despite finishing the compute four times faster at equal worker counts.\n\nNow add ten billed worker-hours of overhead to each option across the collection. CPU compute becomes $53.04; GPU compute becomes $54.62. The ranking reverses. Across 6,000 ten-minute shards, ten hours is an average of six additional billed seconds per shard. This sensitivity test does not predict a cold start on every shard. Containers can be reused, and the mix of initialization, downloading, retries and processing will determine actual overhead. [Cold-start behavior](https://modal.com/docs/guide/cold-start)\n\nThese are gross compute scenarios. They exclude credits, taxes, storage, network transfer, transcription review, orchestration and engineering time. Queueing can affect the deadline without being equivalent to billed worker time. Modal documents no minimum usage-time increment; an hourly equivalent is a comparison unit, not a one-hour reservation. [Billing documentation](https://modal.com/docs/guide/billing)\n\n## Design for interruption\n\nModal Functions are preemptible by default and restart with the same input after an interruption. Its documentation recommends small tasks or checkpoints and retry-safe work. The nonpreemptible option adds a CPU-and-memory premium but is not supported for GPU Functions. An L4 worker therefore needs an interruption plan rather than a checkbox promising uninterrupted execution. [Preemption documentation](https://modal.com/docs/guide/preemption)\n\nA practical design begins with roughly ten-minute audio shards, adjusted around utterance boundaries. Any overlap must be reconciled when timestamps and text are joined, and the extra decoding belongs in the bill. Give each shard a stable identity derived from the source content hash, time range, model revision and decoding options. Store complete outputs durably under that identity and use conditional creation or an equivalent atomic commit. A retry checks for an accepted result before doing expensive work again.\n\nKeep a separate manifest for accepted, failed and pending shards. Do not mark a shard complete until its output is durable and validated. Quarantine corrupt inputs, cap retries and reconcile the manifest against outputs at the end. This proposed design limits repeated work to unfinished shards, subject to correct persistence and concurrency handling. It has not been deployed or tested here.\n\n## A small trial before the archive\n\nMeasure both configurations on the same sample, separating cold and warm runs. Record completed, quality-accepted audio hours per billed worker-hour, peak memory, retries and elapsed completion time. Cache the selected model revision, reuse initialized workers where appropriate, and repeat runs enough to expose variation. If batching improves throughput, rerun quality checks and retain its memory and startup costs.\n\nThe faster-whisper implementation and upstream Whisper code and weights carry MIT licenses. Preserve required notices when distributing software, and separately verify rights to the audio and any additional components. A software license does not grant permission to process someone else's recordings. [faster-whisper license](https://github.com/SYSTRAN/faster-whisper/blob/master/LICENSE), [Whisper licensing](https://github.com/openai/whisper#license)\n\nThe decision rule is simple: buy the configuration with the lowest total cost per accepted audio hour that can meet the deadline. This case gives the GPU a measurable hurdle, not an endorsement. If a representative trial barely clears 3.60 times the throughput, small overhead or quality differences deserve more attention than the GPU's headline speed.\n",
  "sources": [
    {
      "id": "SP-S1",
      "title": "Pricing: Pay per second for GPUs and CPUs",
      "publisher": "Modal",
      "published": null,
      "updated": null,
      "url": "https://modal.com/pricing",
      "accessed": "2026-11-08",
      "access_note": "Opened current public rate card. Checked Function CPU, memory and L4 rates, physical-core units, regional premiums, and separate Sandbox rates. No publication or update date displayed.",
      "license_status": "Public documentation; reuse license not established; linked and paraphrased, no screenshots reproduced.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S2",
      "title": "Faster Whisper transcription with CTranslate2",
      "publisher": "SYSTRAN",
      "published": null,
      "updated": null,
      "url": "https://github.com/SYSTRAN/faster-whisper",
      "accessed": "2026-11-08",
      "access_note": "Opened README, including benchmark environments, CPU/GPU modes, generator behavior, batching, and comparison cautions. Benchmark table identifies faster-whisper v1.1.0; it is not a new November 8 benchmark.",
      "license_status": "Repository MIT license verified separately at SP-S3; required notices apply to redistributed software.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S3",
      "title": "faster-whisper LICENSE",
      "publisher": "SYSTRAN",
      "published": null,
      "updated": null,
      "url": "https://github.com/SYSTRAN/faster-whisper/blob/master/LICENSE",
      "accessed": "2026-11-08",
      "access_note": "Opened MIT license including copyright and permission-notice condition.",
      "license_status": "MIT; copyright 2023 SYSTRAN. License applies to the covered software, not all linked projects or input audio.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S4",
      "title": "Configuring CPU, memory, and disk",
      "publisher": "Modal",
      "published": null,
      "updated": null,
      "url": "https://modal.com/docs/guide/resources",
      "accessed": "2026-11-08",
      "access_note": "Opened resource units, request parameters and billing section. CPU refers to physical cores; CPU/memory billing uses higher of request and actual usage.",
      "license_status": "Public documentation; reuse license not established; linked and paraphrased.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S5",
      "title": "Cold start performance",
      "publisher": "Modal",
      "published": null,
      "updated": null,
      "url": "https://modal.com/docs/guide/cold-start",
      "accessed": "2026-11-08",
      "access_note": "Opened container reuse, initialization and queueing explanations. No numerical startup assumption was borrowed as a measured result.",
      "license_status": "Public documentation; reuse license not established; linked and paraphrased.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S6",
      "title": "Preemption",
      "publisher": "Modal",
      "published": null,
      "updated": null,
      "url": "https://modal.com/docs/guide/preemption",
      "accessed": "2026-11-08",
      "access_note": "Opened defaults, same-input restart, checkpoint/idempotency advice, and GPU exclusion from nonpreemptible option.",
      "license_status": "Public documentation; reuse license not established; linked and paraphrased.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S7",
      "title": "Billing",
      "publisher": "Modal",
      "published": null,
      "updated": null,
      "url": "https://modal.com/docs/guide/billing",
      "accessed": "2026-11-08",
      "access_note": "Opened resource-use/request billing and no-minimum-usage-time-increment statement.",
      "license_status": "Public documentation; reuse license not established; linked and paraphrased.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S8",
      "title": "Model Card: Whisper",
      "publisher": "OpenAI",
      "published": null,
      "updated": null,
      "url": "https://github.com/openai/whisper/blob/main/model-card.md",
      "accessed": "2026-11-08",
      "access_note": "Opened limitations and use sections covering hallucinations, unequal accuracy and consent/context evaluation cautions.",
      "license_status": "Public repository material; no verbatim passages reproduced.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    },
    {
      "id": "SP-S9",
      "title": "Whisper README licensing",
      "publisher": "OpenAI",
      "published": null,
      "updated": null,
      "url": "https://github.com/openai/whisper#license",
      "accessed": "2026-11-08",
      "access_note": "Opened README License section explicitly applying MIT License to code and model weights.",
      "license_status": "MIT for upstream Whisper code and weights; input recordings and other dependencies require separate review.",
      "publication_date": null,
      "observation_date": "2026-11-08"
    }
  ],
  "facts": [
    {
      "id": "SP-F1",
      "claim": "Default Function list rates are USD 0.0000131/physical-core-second, 0.00000222/GiB-second and 0.000222/L4-second.",
      "source_ids": [
        "SP-S1"
      ],
      "evidence_type": "current_published_price_not_transaction_quote"
    },
    {
      "id": "SP-F2",
      "claim": "CPU allocation means physical cores. CPU and memory charges use the higher of requested resources and actual usage.",
      "source_ids": [
        "SP-S4"
      ],
      "evidence_type": "current_documentation"
    },
    {
      "id": "SP-F3",
      "claim": "Functions are preemptible by default and restart on the same input after preemption. Nonpreemptible execution is not supported for GPU Functions.",
      "source_ids": [
        "SP-S6"
      ],
      "evidence_type": "current_documentation"
    },
    {
      "id": "SP-F4",
      "claim": "Containers can be reused; cold-start latency includes queueing and initialization.",
      "source_ids": [
        "SP-S5"
      ],
      "evidence_type": "current_documentation"
    },
    {
      "id": "SP-F5",
      "claim": "Modal states there are no minimum usage-time increments.",
      "source_ids": [
        "SP-S7"
      ],
      "evidence_type": "current_billing_terms"
    },
    {
      "id": "SP-F6",
      "claim": "faster-whisper supports CPU INT8 and GPU INT8/FP16 modes. Transcription runs while iterating its segments generator. Its published CPU small-model and GPU large-v2 benchmark sections use different models and hardware.",
      "source_ids": [
        "SP-S2"
      ],
      "evidence_type": "project_documentation_not_independent_benchmark"
    },
    {
      "id": "SP-F7",
      "claim": "Whisper documentation warns of hallucinations, uneven recognition accuracy and the need for context-specific evaluation.",
      "source_ids": [
        "SP-S8"
      ],
      "evidence_type": "model_developer_documentation"
    },
    {
      "id": "SP-F8",
      "claim": "faster-whisper is MIT licensed, and upstream Whisper states its code and model weights are MIT licensed.",
      "source_ids": [
        "SP-S3",
        "SP-S9"
      ],
      "evidence_type": "published_software_license"
    }
  ],
  "inferences": [
    {
      "id": "SP-I1",
      "claim": "The proposed worker configurations cost USD 0.252576/hour (CPU) and USD 0.910296/hour (L4 including CPU and memory), requiring GPU throughput greater than 3.604047891 times CPU throughput to lower baseline compute cost.",
      "basis_fact_ids": [
        "SP-F1",
        "SP-F2"
      ],
      "label": "PCT arithmetic from public prices, not a quote or measured workload",
      "assumptions": [
        "CPU: 4 physical cores and 8 GiB; GPU: one L4, 1 physical core and 8 GiB; actual usage does not exceed requested CPU/memory.",
        "Default preemptible Function rates, automatic placement, no regional premiums.",
        "Equal quality acceptance and same checkpoint/decoding requirements; no output quality equivalence has been established."
      ]
    },
    {
      "id": "SP-I2",
      "claim": "At assumed real-time factors 0.20 and 0.05, gross compute for 1,000 audio hours is USD 50.5152 and USD 45.5148. GPU savings are USD 5.0004, or approximately 9.90%.",
      "basis_fact_ids": [
        "SP-F1"
      ],
      "label": "hypothetical sensitivity calculation, not measured performance",
      "assumptions": [
        "1,000 unique audio hours with required recording rights and speaker consent.",
        "CPU: 4 physical cores and 8 GiB; GPU: one L4, 1 physical core and 8 GiB; actual usage does not exceed requested CPU/memory.",
        "Default preemptible Function rates, automatic placement, no regional premiums.",
        "Equal quality acceptance and same checkpoint/decoding requirements; no output quality equivalence has been established.",
        "Hypothetical CPU real-time factor 0.20 and GPU real-time factor 0.05, where real-time factor is worker processing hours divided by input audio hours.",
        "6,000 nominal ten-minute shards before any overlap.",
        "Sensitivity case adds 10 billed worker-hours to each configuration, not a prediction of cold starts or failures."
      ]
    },
    {
      "id": "SP-I3",
      "claim": "Adding ten billed worker-hours to both cases changes gross compute to USD 53.04096 (CPU) and USD 54.61776 (GPU), reversing the ranking.",
      "basis_fact_ids": [
        "SP-F1"
      ],
      "label": "hypothetical overhead sensitivity, not a predicted interruption rate",
      "assumptions": [
        "1,000 unique audio hours with required recording rights and speaker consent.",
        "CPU: 4 physical cores and 8 GiB; GPU: one L4, 1 physical core and 8 GiB; actual usage does not exceed requested CPU/memory.",
        "Default preemptible Function rates, automatic placement, no regional premiums.",
        "Equal quality acceptance and same checkpoint/decoding requirements; no output quality equivalence has been established.",
        "Hypothetical CPU real-time factor 0.20 and GPU real-time factor 0.05, where real-time factor is worker processing hours divided by input audio hours.",
        "6,000 nominal ten-minute shards before any overlap.",
        "Sensitivity case adds 10 billed worker-hours to each configuration, not a prediction of cold starts or failures."
      ]
    },
    {
      "id": "SP-I4",
      "claim": "Stable shard identities, durable accepted outputs and atomic commits can limit restart work to unfinished shards; boundaries and overlaps must preserve transcript quality.",
      "basis_fact_ids": [
        "SP-F3"
      ],
      "label": "PCT proposed implementation; no deployment or transcription test"
    },
    {
      "id": "SP-I5",
      "claim": "A purchase decision should compare total cost per quality-accepted audio hour and deadline performance, not GPU-only hourly price.",
      "basis_fact_ids": [
        "SP-F1",
        "SP-F2",
        "SP-F7"
      ],
      "label": "PCT editorial interpretation"
    }
  ],
  "unknowns": [
    "Measured throughput, cold-start/initialization time, quality, peak memory and retry behavior for this exact small-English transcription configuration.",
    "Live capacity, quotas, available regions and account-specific pricing or terms.",
    "Total invoice after allowances, taxes, storage, transfer, orchestration and any additional charges.",
    "Whether 8 GiB and the stated core allocations are sufficient for each actual recording and batching setting.",
    "End-to-end transcript quality across chunk boundaries and overlapped segments.",
    "Production implementation, authentication, atomic persistence, replay safety and queueing behavior; no executable pipeline was deployed."
  ],
  "correction_history": [],
  "license_status": "Original PCT editorial text; public license not selected. Software and source rights remain separate. No source images or long quotations reproduced.",
  "public_url": null,
  "schema_version": "pct-research-item-1.0",
  "desk_extensions": {
    "id": "pct-2026-11-08-spotlight-faster-whisper",
    "section": "Product spotlight",
    "publisher": "Peterson Compute Trading",
    "as_of_date": "2026-11-08",
    "status": "desk_research_with_audited_hypothetical_cost_model",
    "subject": "Restartable faster-whisper lecture transcription on CPU or Modal L4 Functions",
    "deck": "A thousand-hour archive shows why a fourfold GPU speedup can leave only five dollars of compute savings.",
    "editorial_word_count": 1037,
    "reading_minutes": 4.7,
    "reading_wpm": 220,
    "publication_note": "Evergreen technical analysis using documentation and prices observed November 8, 2026. No claim of a November 8 product release or new benchmark.",
    "cost_model": {
      "currency": "USD",
      "as_of": "2026-11-08",
      "pricing_mode": "Default preemptible Modal Functions with automatic placement; no regional premium",
      "rate_source_id": "SP-S1",
      "cpu_rate_per_physical_core_second": 1.31e-05,
      "memory_rate_per_gib_second": 2.22e-06,
      "l4_rate_per_second": 0.000222,
      "cpu_worker": {
        "physical_cores": 4,
        "memory_gib": 8,
        "cost_per_hour": 0.252576
      },
      "gpu_worker": {
        "gpu": "L4",
        "gpu_count": 1,
        "physical_cores": 1,
        "memory_gib": 8,
        "cost_per_hour": 0.910296
      },
      "break_even_throughput_ratio": 3.604047890535918,
      "input_audio_hours": 1000,
      "hypothetical_cpu_real_time_factor": 0.2,
      "hypothetical_gpu_real_time_factor": 0.05,
      "cpu_processing_worker_hours": 200,
      "gpu_processing_worker_hours": 50,
      "cpu_gross_compute_usd": 50.5152,
      "gpu_gross_compute_usd": 45.5148,
      "gpu_gross_compute_savings_usd": 5.0004,
      "gpu_gross_compute_savings_percent": 9.898802736602052,
      "sensitivity_added_billed_worker_hours_each": 10,
      "cpu_with_overhead_gross_compute_usd": 53.04096,
      "gpu_with_overhead_gross_compute_usd": 54.61776,
      "nominal_shard_audio_minutes": 10,
      "nominal_shard_count": 6000,
      "sensitivity_mean_extra_billed_seconds_per_shard": 6,
      "assumptions": [
        "1,000 unique audio hours with required recording rights and speaker consent.",
        "CPU: 4 physical cores and 8 GiB; GPU: one L4, 1 physical core and 8 GiB; actual usage does not exceed requested CPU/memory.",
        "Default preemptible Function rates, automatic placement, no regional premiums.",
        "Equal quality acceptance and same checkpoint/decoding requirements; no output quality equivalence has been established.",
        "Hypothetical CPU real-time factor 0.20 and GPU real-time factor 0.05, where real-time factor is worker processing hours divided by input audio hours.",
        "6,000 nominal ten-minute shards before any overlap.",
        "Sensitivity case adds 10 billed worker-hours to each configuration, not a prediction of cold starts or failures."
      ],
      "exclusions": [
        "Credits and allowances",
        "Taxes",
        "Storage and network transfer",
        "Orchestration and separate preparation resources",
        "Transcript review and correction",
        "Engineering labor",
        "Any unmodeled resource usage or overlap decoding"
      ]
    },
    "implementation_plan": {
      "status": "proposed_not_executed",
      "inputs": "Rights-cleared, consented, non-sensitive English lecture audio; exact checkpoint revision and dependency versions pinned for trial.",
      "steps": [
        "Construct a human-checked representative evaluation sample and set acceptance criteria.",
        "Compare the same checkpoint and decoding options on CPU and L4; candidate modes CPU int8 and GPU int8_float16 require quality checks.",
        "Split near utterance boundaries into roughly ten-minute shards, track original offsets, reconcile any overlap.",
        "Identify each shard by content hash, bounds, checkpoint revision and decoding options.",
        "Persist complete validated output with conditional creation or equivalent atomic commit before recording acceptance.",
        "Skip accepted outputs on retry, cap attempts, quarantine permanent failures and reconcile the manifest.",
        "Record billed resource time and accepted audio duration separately from elapsed queueing and processing latency."
      ],
      "no_transactions": true,
      "no_deployment": true,
      "no_performance_test": true
    },
    "verification": {
      "date": "2026-11-08",
      "public_primary_sources_opened": 9,
      "arithmetic": "Decimal-based local assertions passed for hourly prices and both scenario totals.",
      "benchmark": "No transcription benchmarks run. Existing project benchmark is attributed context only.",
      "cloud_actions": "None; no account changes, uploads, purchases or deployments.",
      "source_date_caution": "Access dates are not publication dates. No last-updated date was visible for the cited pages.",
      "editorial_checks": [
        "Separated published facts from calculations and implementation proposals.",
        "Avoided comparing CPU small-model and GPU large-v2 benchmark rows as equivalent.",
        "Included CPU and memory alongside GPU cost.",
        "Distinguished worker-hours from wall-clock completion time.",
        "Did not imply free credits make workload free.",
        "Did not claim source audio rights derive from MIT software licensing."
      ]
    }
  },
  "public_projection": {
    "version": "1.0.0",
    "date": "2026-11-10",
    "changes": [
      "Internal workspace artifact paths omitted where present. Historical license/status fields retain original provenance; current public reuse policy is stated separately."
    ],
    "rights": "PCT reserves rights in original editorial content; third-party rights retained. No general source-data reuse license."
  }
}
