Skip to content
TAIP

Products / For platform admins

TAIP Billing

Available

Every reserved GPU-hour, priced once, on a ledger that balances.

TAIP Billing treats billing as an accounting problem, not a dashboard. It charges the reservation, not the load: usage starts when the control plane places a pod on a node and ends when its last container finishes, computed the way kube-scheduler computes requests — sidecars, init containers, pod overhead, in-place resize. Queued work costs nothing. Slurm jobs are read from slurmdbd and priced like Kubernetes pods on the same hardware, with no double counting of the slurmd reservation. Price books are immutable and effective-dated, with rules by GPU model, resource pool, priority tier, storage class, or any node label. Amounts are integer micro-units, rated with exact rational arithmetic and rounded once. The ledger is double-entry and append-only — database triggers reject edits, and a transaction that does not sum to zero cannot commit. Enforcement blocks new work at three gates — a pod admission webhook that fails open, a Kueue AdmissionCheck that keeps gang jobs queued, and Slurm submission limits — and rolls out in dry run first. Spend, runway, budgets, and estimates sit in front of account owners while there is still time to act; capacity, margin, efficiency, and a daily Prometheus cross-check sit in front of the platform team.

Specification

Version
v1.1.3 — generally available
Meters
CPU core-hours · memory GiB-hours · GPU and any extended resource per device-hour (NVIDIA, MIG, AMD, Ascend) · PVC GiB-hours per storage class
Sources
Pods and PVCs in tenant namespaces · Slurm jobs from slurmdbd (taip-slurm)
Pricing
Effective-dated, immutable price books per currency · rules by GPU model, pool, priority tier, storage class, or any node label
Money
Integer micro-units, exact rational rating · CNY · USD · TKN credits · double-entry, append-only ledger
Accounts
Personal accounts with a welcome grant · organization accounts with owner / billing admin / member roles · namespace and Slurm bindings
Enforcement
Pod admission webhook (fails open) · Kueue AdmissionCheck · Slurm GrpSubmitJobs — dry run first, running work never killed
Database
Dedicated PostgreSQL on CloudNativePG · synchronous replication · 30-day point-in-time recovery · weekly restore tests
Footprint
Single Go binary · two replicas, leader-elected · one Helm release
Languages
English · 简体中文

Proof, not promises

See it in one block.

No proprietary SDKs, no rewrites — TAIP Billing meets your tools where they already are.

one pod, priced to the micro-unit
# pod train-resnet-0 · 2 × A100 · 16 cores · 64 GiB · team-vision
09:31  created          # pending in queue — free
09:40  PodScheduled     # billing starts
12:10  finishedAt       # billing ends · 4 hourly slices
meter            09:40    10:00    11:00    12:00    total
nvidia.com/gpu    8.000   24.000   24.000    4.000   60.000000
cpu               0.267    0.800    0.800    0.133    2.000000
memory            0.213    0.640    0.640    0.107    1.600000
ledger  debit wallet_credit 40.000000 + wallet_cash 23.600000 → credit revenue_usage 63.600000
# Σ entries = 0.000000 TKN — an unbalanced transaction cannot commit▌

Charge what the scheduler reserved, price it exactly, post it to a ledger nobody can edit. Grants are spent before cash; illustrative prices.

Capabilities

What TAIP Billing gives you

01

Charge the reservation, not the load

You pay for what the scheduler set aside: requests, not utilization. Billing starts at PodScheduled and ends at the last container's finishedAt — both set by the control plane, accurate to the second — with the effective request computed exactly as kube-scheduler does it, including sidecars, init containers, pod overhead, and in-place resize. Pending, gated, and unschedulable work costs nothing; a pod on a lost node stops billing when the node went NotReady.

02

Every accelerator, and Slurm too

Any extended resource is metered under its own name — nvidia.com/gpu, MIG profiles, amd.com/gpu, huawei.com/Ascend910B — with no code change for a new vendor. Slurm jobs are read from slurmdbd and priced like Kubernetes pods on the same nodes; the long-lived slurmd reservation is recorded as platform capacity, never billed twice.

03

Price books that never rewrite the past

A price book is a set of rules for one currency with an effective date. Rules match on GPU model, resource pool, priority tier, storage class, or any node label you map to a dimension; the most specific rule wins, with configurable precedence. Books cannot take effect before usage already rated — and a meter with no matching rule is reported as unpriced, so you find it before an invoice does.

04

A ledger that cannot be edited

Every balance change is a double-entry transaction in integer micro-units. Database triggers reject UPDATE, DELETE, and TRUNCATE; a deferred constraint rejects any transaction that does not sum to zero. Mistakes are corrected by reversals and adjustments, never edits. Rating and posting are each exactly-once, finished months seal into immutable statements, and money-moving routes accept browser sessions only — API tokens can never post, reverse, or re-price.

05

Block new work, never kill running work

An account with no available balance — or a blocking budget used up — cannot start new work at any of three gates: a pod admission webhook that answers from an in-memory snapshot and fails open, a Kueue AdmissionCheck that keeps gang jobs queued rather than half-admitted, and Slurm submission limits set through account-sync. Running work continues. Roll out in dry run, then switch to enforce once prices and usage look right.

06

People and teams, both

Every user gets a personal account on first login with a welcome grant; organization accounts are shared by owners, billing admins, and members. Namespaces, Slurm accounts, and partitions bind to an organization from a moment forward — bindings cannot be backdated — and usage inside an organization breaks down per user from the labels TAIP apps already set, or by your own project and cost-centre labels.

07

Spend you can act on, before month-end

Month-to-date spend against last month, a 30-day trend, spend by resource, what is running right now at its hourly rate, and runway at both the 7-day and current burn. Budgets on accounts, namespaces, or users with thresholds and a month-end forecast; estimates for a workload before you submit it. Notifications by email in English or Chinese, and to operations on an Alertmanager-format webhook.

08

The platform team's view

Fleet-wide usage filterable to unattributed or unpriced, exported to Excel. Capacity — allocatable against reserved against idle per pool, GPU model, or node — with cost books for capacity cost, revenue, margin, and idle value. Reserved-versus-used efficiency, a daily cross-check of billed unit-hours against Prometheus with drift alerts, and an audit log of every change.

09

Built to keep the money safe

Once a pod is gone its usage exists only in billing's database, so the database is its own PostgreSQL cluster on CloudNativePG: three instances with synchronous replication, continuous WAL archiving for 30-day point-in-time recovery, monthly logical dumps, and a weekly restore test verified against the ledger. If billing itself is down, the gap is closed at the last heartbeat — silence can cost the platform money, never the tenant.

How it works

From pod to ledger, one writer per stage.

  1. Step 01

    Meter

    Informers on pods, PVCs, nodes, and resource pools — plus a five-minute reconcile and a Slurm poller — turn what the scheduler reserved into time intervals, per object and per meter.

  2. Step 02

    Rate

    Every five minutes the leader slices unrated time at clock hours, price changes, and payer changes, prices each slice exactly, and commits charges and progress together — a crash never prices usage twice.

  3. Step 03

    Post

    Hourly, rated usage moves onto the double-entry ledger, credit before cash. Finished months seal into immutable statements with CSV export.

  4. Step 04

    Gate

    Every replica reads balances back into an in-memory snapshot. Exhausted accounts are held at the webhook, the Kueue check, and Slurm submission — with events, banners, and email where people work.

Who it's for

Built for these teams

  • Platform teams charging back shared GPU clusters to users and departments
  • Operators selling compute internally in credits or externally in real currency
  • Finance and team leads who need budgets and runway, not a month-end surprise
  • Organizations running Kubernetes and Slurm side by side on one price list