Hello World Example#

This is the simplest Dynamo example demonstrating a basic service using Dynamo’s distributed runtime. It showcases the fundamental concepts of creating endpoints and workers in the Dynamo runtime system.

Architecture#

Client (dynamo_worker)
      │
      ▼
┌─────────────┐
│   Backend   │  Dynamo endpoint (/generate)
└─────────────┘

Components#

  • Backend: A Dynamo service with an endpoint that receives text input and streams back greetings for each comma-separated word

  • Client: A Dynamo worker that connects to and sends requests to the backend service, then prints out the response

Implementation Details#

The example demonstrates:

  • Endpoint Definition: Using the @dynamo_endpoint decorator to create streaming endpoints

  • Worker Setup: Using the @dynamo_worker() decorator to create distributed runtime workers

  • Service Creation: Creating services and endpoints using the distributed runtime API

  • Streaming Responses: Yielding data for real-time streaming

  • Client Integration: Connecting to services and processing streams

  • Logging: Basic logging configuration with configure_dynamo_logging

Getting Started#

Prerequisites#

Before running this example, ensure you have the following services running:

  • etcd: A distributed key-value store used for service discovery and metadata storage

  • NATS: A high-performance message broker for inter-component communication

You can start these services using Docker Compose:

# clone the dynamo repository if necessary
# git clone https://github.com/ai-dynamo/dynamo.git
cd dynamo
docker compose -f deploy/docker-compose.yml up -d

Running the Example#

First, start the backend service:

cd examples/runtime/hello_world
python hello_world.py

Second, in a separate terminal, run the client:

cd examples/runtime/hello_world
python client.py

The client will connect to the backend service and print the streaming results.

Expected Output#

When running the client, you should see streaming output like:

Hello world!
Hello sun!
Hello moon!
Hello star!

Code Structure#

Backend Service (hello_world.py)#

  • content_generator: A dynamo endpoint that processes text input and yields greetings

  • worker: A dynamo worker that sets up the service, creates the endpoint, and serves it

Client (client.py)#

  • worker: A dynamo worker that connects to the backend service and processes the streaming response

Deployment to Kubernetes#

Follow the Quickstart Guide to install Dynamo Cloud. Then deploy to kubernetes using

export NAMESPACE=<your-namespace>
cd dynamo
kubectl apply -f examples/runtime/hello_world/deploy/hello_world.yaml -n ${NAMESPACE}

to delete your deployment:

kubectl delete dynamographdeployment hello-world -n ${NAMESPACE}