Burla

The simplest way to scale Python.

Documentation · Getting started · API reference · Examples · Website

PyPI Downloads Python 3.11+ License

--- Burla is a distributed computing framework that runs plain Python functions across thousands of VMs in your own Google Cloud project. It has exactly one function: ```python from burla import remote_parallel_map my_inputs = list(range(1000)) def my_function(x): print(f"[#{x}] running on separate computer") remote_parallel_map(my_function, my_inputs) ``` This example runs `my_function` on 1,000 VMs in less than one second:

Burla terminal demo showing remote_parallel_map running on 1,000 computers

## Highlights - **One function.** `results = remote_parallel_map(my_function, my_inputs)` is the entire API. No DAGs, no YAML, no cluster SDK to learn. - **Feels local.** Anything your function prints streams back to your terminal. Exceptions are re-raised locally with full tracebacks. Local packages and modules are cloned onto every machine automatically. - **Fast dispatch.** Code starts running in under a second, even with thousands of VMs or millions of inputs. - **Runs in your cloud.** Burla is self-hosted in your Google Cloud project. Your code, inputs, and results never leave it. - **Any hardware, any image.** Request CPUs, RAM, or GPUs (A100, H100) per function call, and run inside any Docker image. - **High utilization.** Adaptive concurrency repacks work while the job runs, keeping CPU and RAM near 90% utilization and preventing out-of-memory errors. - **Built-in dashboard.** Live logs, node status, and background jobs, viewable from any device. ## Getting started You'll need Python 3.11+, a Google Cloud project with billing enabled, and the [gcloud CLI](https://cloud.google.com/sdk/docs/install) authenticated (`gcloud auth login` and `gcloud auth application-default login`). ```bash pip install burla burla install ``` `burla install` deploys Burla into the project your gcloud CLI points at: it enables the required APIs, creates a service account with a minimum set of permissions, and deploys the dashboard to Cloud Run. Running it again upgrades an existing installation in place. The exact permissions it uses are listed in the [CLI reference](https://docs.burla.dev/cli-reference). Once installed: 1. Open the dashboard URL printed by the installer and hit **⏻ Start** to boot machines. Idle nodes shut themselves down after 10 minutes. 2. Run `burla login` to connect your machine to the cluster. 3. Run your first job: ```python from burla import remote_parallel_map def my_function(x): print(f"processing input {x} on a machine in the cloud") return x * 2 results = remote_parallel_map(my_function, list(range(1000))) ``` See the [getting started guide](https://docs.burla.dev/get-started) for a full walkthrough. ## Usage Hardware and environment are arguments, not configuration: ```python results = remote_parallel_map( my_function, my_inputs, func_cpu=4, # CPUs reserved per function call func_ram=16, # GB of RAM per call ("dynamic" by default) func_gpu="A100", # one GPU per call image="python:3.12", # any Docker image grow=True, # add VMs to the cluster if capacity falls short generator=True, # yield results as they finish ) ``` Because each call can use different machine sizes, types, and environments, a multi-stage pipeline over a 100+ TB dataset is just a few lines: ```python remote_parallel_map(process, [...], image="rocker/geospatial:latest") remote_parallel_map(aggregate, [...], func_cpu=64) remote_parallel_map(predict, [...], func_gpu="A100") ```

Burla data pipeline: cloud storage to CPUs, into a 64-CPU aggregation step, out to GPUs, and back to cloud storage

## Efficiency Burla measures the actual CPU and RAM each task uses and repacks work across the cluster while the job runs. Nodes stay near full utilization instead of idling on conservative resource requests, so the same workloads typically finish with 20-50% less compute than on Ray, Dask, or AWS Batch, without taking any longer.

CPU utilization comparison: other orchestration tools fluctuate between idle and busy, while the same workload on Burla stays near full utilization

[Read the blog post](https://docs.burla.dev/blog/dynamic-hardware) on how adaptive concurrency works. ## Monitoring Every deployment includes a dashboard with live logs, output files, node status, and background jobs:

Burla dashboard showing live logs, output files, and cluster status

## Examples
Query 2.4TB of Parquet in 76s
Query 2.4TB of Parquet in 76s
Rank 1.7M Airbnbs
Rank 1.7M Airbnbs
Distill 572M Amazon reviews
Distill 572M Amazon reviews
Cluster 2.7M arXiv abstracts
Cluster 2.7M arXiv abstracts
Genomic alignment pipeline
Genomic alignment pipeline
Map 9.5M geotagged photos
Map 9.5M geotagged photos

Browse all →

## How it works Burla is three services, all in this repository: | Directory | Runs on | Purpose | | --- | --- | --- | | [`client/`](client) | Your machine | The `burla` PyPI package. Pickles your function, uploads inputs, streams back logs and results. | | [`main_service/`](main_service) | Cloud Run | Control plane. Boots and deletes VMs, hosts the dashboard, handles auth. | | [`node_service/`](node_service) | Each VM | Per-node orchestrator. Queues inputs, runs your function inside workers in your Docker image. | When you call `remote_parallel_map`, the client sends your function and inputs directly to the nodes, which fan them out to one worker per CPU. Results, logs, and exceptions stream straight back to your machine. Cluster state lives in a Firestore database inside your project, and nodes rebalance queued inputs between themselves mid-job so the cluster stays busy. ## FAQ **How is Burla different from Ray or Dask?** Ray and Dask are general-purpose frameworks with APIs for tasks, actors, and distributed data structures. Burla deliberately covers one case, fanning a Python function out over many machines, and optimizes it hard: sub-second starts, adaptive concurrency, and nothing to learn beyond `remote_parallel_map`. **Where does my code run?** Entirely inside your own Google Cloud project, on VMs Burla boots and deletes for you. Your client talks directly to those VMs; your code, inputs, and results are never routed through anyone else's servers. **Which clouds are supported?** Google Cloud today. If you want to run Burla on AWS or Azure, email jake@burla.dev. ## Contributing Bug reports and feature requests are welcome in [GitHub issues](https://github.com/Burla-Cloud/burla/issues). If you'd like to contribute code, open an issue first so we can point you in the right direction. To report a security issue, email jake@burla.dev. ## License Burla is licensed under the [Functional Source License, Version 1.1, with Apache 2.0 Future License](LICENSE) (FSL-1.1-Apache-2.0). You can use, copy, modify, and redistribute it for any purpose except a competing commercial offering, and each version becomes available under Apache 2.0 two years after its release. ---

Questions? Email jake@burla.dev or book a call, we're always happy to talk.