Skip to main content
When you’re satisfied with your endpoint functions and ready to move to production, use flash deploy to build and deploy your Flash application:
This command performs the following steps:
  1. Build: Packages your code, dependencies, and manifest.
  2. Upload: Sends the artifact to Runpod’s storage.
  3. Provision: Creates or updates Serverless endpoints.
  4. Configure: Sets up environment variables and service discovery.

Deployment architecture

Flash deploys your application as multiple independent Serverless endpoints. Each endpoint configuration in your worker files becomes a separate endpoint. How Flash deployments work:
  • One Endpoint class = one Serverless endpoint: Each unique endpoint configuration (defined by its name parameter) creates a separate Serverless endpoint with its own URL.
  • Call any endpoint: After deployment, you can call whichever endpoint you need—lb_worker for API requests, gpu_worker for GPU tasks, cpu_worker for CPU tasks.
  • Load balancing endpoints: Create HTTP APIs with custom routes using .get(), .post(), etc. decorators.
  • Queue-based endpoints: Run compute tasks using the /runsync or /run routes.
  • Inter-endpoint communication: Endpoints can call each other’s functions when needed, using the Runpod GraphQL service for discovery.

Deploy to a specific environment

Flash organizes deployments using apps and environments. Deploy to a specific environment using the --env flag:
If the app doesn’t exist, Flash creates it along with the target environment. If only the environment doesn’t exist, Flash creates it within the existing app.

Post-deployment

After a successful deployment, Flash displays all deployed endpoints grouped by type:
Each endpoint is independent with its own URL and authentication.
The relationship between endpoint configurations and deployed endpoints differs between load-balanced and queue-based endpoints:

Queue-based endpoints (one function per endpoint)

For queue-based endpoints, each @Endpoint function must have its own unique name:
This creates two separate Serverless endpoints:
  • https://api.runpod.ai/v2/abc123xyz (run-model)
  • https://api.runpod.ai/v2/def456xyz (preprocess)
Calling queue-based endpoints:
Important: For deployed queue-based endpoints, you must use one function per endpoint name. Each function creates its own Serverless endpoint. Do not create multiple @Endpoint functions with the same name when building Flash apps.

Load-balanced endpoints (multiple routes per endpoint)

For load-balanced endpoints, you can define multiple HTTP routes on a single endpoint:
This creates:
  • One Serverless endpoint: https://abc123xyz.api.runpod.ai (named “api”)
  • Three HTTP routes: POST /generate, POST /translate, GET /health
Calling load-balanced endpoints:

Preview before deploying

You can test your deployment locally using Docker before pushing to production using the --preview flag:
This command:
  1. Builds your project (creates the deployment artifact and manifest).
  2. Creates a Docker network for inter-container communication.
  3. Starts one container per endpoint configuration (lb_worker, gpu_worker, cpu_worker, etc.).
  4. Exposes all endpoints for local testing.
Press Ctrl+C to stop the preview environment.

Managing deployment size

Runpod Serverless has a 1.5GB deployment limit. Flash automatically excludes packages that are pre-installed in the base image:
  • torch, torchvision, torchaudio
  • numpy, triton
If your deployment still exceeds the limit, use the --exclude flag to skip additional packages:

Base image packages

Check the worker-flash repository for current base images and pre-installed packages.

Build process

When you run flash deploy (or flash build), Flash:
  1. Discovers all @Endpoint decorated functions.
  2. Groups functions by their endpoint name.
  3. Generates handler files for each endpoint.
  4. Creates a flash_manifest.json file for service discovery.
  5. Installs dependencies with Linux x86_64 compatibility.
  6. Packages everything into .flash/artifact.tar.gz.

Build artifacts

After building, these artifacts are created in the .flash/ directory:

What gets deployed

When you deploy a Flash app, you’re deploying a build artifact (tarball) onto pre-built Flash Docker images. This architecture is similar to AWS Lambda layers: the base runtime is pre-built, and your code and dependencies are layered on top.

The build artifact

The .flash/artifact.tar.gz file (max 1.5 GB) contains:
artifact.tar.gz
lb_worker.py
gpu_worker.py
cpu_worker.py
flash_manifest.json
requirements.txt
[installed dependencies]
torch
transformers
...
Dependencies are installed locally during the build process and bundled into the tarball. They are not installed at runtime on endpoints.

The deployment manifest

The flash_manifest.json file is the brain of your deployment. It tells each endpoint:
  • Which functions to execute.
  • What Docker image to use.
  • How to configure resources (GPUs, workers, scaling).
  • How to route HTTP requests (for load balancer endpoints).

What gets created on Runpod

For each endpoint configuration in the manifest, Flash creates an independent Serverless endpoint, identified by its name parameter.

Cross-endpoint communication

When one endpoint needs to call a function on another endpoint:
  1. Manifest lookup: The calling endpoint checks flash_manifest.json for function-to-resource mapping.
  2. Service discovery: It queries the state manager (Runpod GraphQL API) for target endpoint URL.
  3. Direct call: It makes an HTTP request directly to the target endpoint.
  4. Response: The target endpoint executes the function and returns the result.
Each endpoint maintains its own connection to the state manager, querying for peer endpoint URLs as needed and caching results for 300 seconds to minimize API calls.

Troubleshooting

No @Endpoint functions found

If the build process can’t find your endpoint functions:
  • Ensure functions are decorated with @Endpoint(...).
  • Check that Python files aren’t excluded by .gitignore or .flashignore.
  • Verify decorator syntax is correct.

Deployment size limit exceeded

Base image packages are auto-excluded. If your deployment still exceeds 1.5GB, use --exclude to skip additional packages:

Authentication errors

Verify your API key is set correctly:
If not set, add it to your .env file or export it:

Import errors in endpoint functions

Import packages inside the endpoint function, not at the top of the file:

Next steps