Open Laboratory Docs
Amazon Web Services

Deploy on AWS

Run Laboratory OS on an EC2 GPU instance.

No inbound ports or firewall rules are needed — Laboratory OS uses an outbound tunnel. You can block all inbound traffic entirely.

1. Launch a GPU Instance

In the EC2 console, click Launch Instance.

AMI: Choose Ubuntu 22.04 LTS (available in the Quick Start tab).

Instance type: Select a GPU instance.

Choosing a GPU: More VRAM lets you run larger models — 16 GB handles most image generation, 24-48 GB covers mid-size LLMs, and 100 GB+ is needed for large LLMs.

Allocate at least 100 GB of storage. 200+ GB recommended if you plan to download multiple models or LLMs.

Security Group: No inbound rules are required. Laboratory OS uses an outbound tunnel. You can block all inbound traffic entirely.

If you want SSH access for setup, allow inbound TCP on port 22 from your IP only.

2. Install Dependencies

SSH into the instance:

ssh ubuntu@<instance-ip>

Docker

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Verify:

docker run --rm hello-world

If you see “Hello from Docker!”, the installation was successful.

NVIDIA Drivers

Note: Some AWS GPU AMIs (like the Deep Learning Base AMI) ship with NVIDIA drivers pre-installed. Run nvidia-smi first — if it works, skip this section.

sudo apt-get update
sudo apt-get install -y ubuntu-drivers-common
sudo ubuntu-drivers autoinstall
sudo reboot

After reboot, confirm the driver is loaded:

nvidia-smi

You should see your GPU listed with its driver version and VRAM.

Troubleshooting: If nvidia-smi is not found after install, make sure you have rebooted — the reboot after ubuntu-drivers autoinstall is required. If you see a Driver/library version mismatch error, reboot to resync the driver and CUDA library versions.

NVIDIA Container Toolkit

# Add the NVIDIA package repository
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# Install
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# Configure Docker runtime and restart
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Verify:

docker run --rm --gpus all nvidia/cuda:12.0-base-ubuntu22.04 nvidia-smi

If you see nvidia-smi output inside the container, everything is set up correctly.

Troubleshooting: If you see could not select device driver “nvidia”, run sudo nvidia-ctk runtime configure --runtime=docker followed by sudo systemctl restart docker. If the GPU is visible on the host but not inside the container, make sure you are passing --gpus all to docker run.

3. Run Laboratory OS

docker run --gpus all \
  -e UPLINK_API_KEY='your-account-key' \
  openlaboratoryorg/laboratory-os

4. Keep It Running

To run in the background and restart automatically after a stop/start:

docker run -d --restart unless-stopped \
  --gpus all \
  --pid host \
  --name laboratory \
  -e UPLINK_API_KEY='your-account-key' \
  -v lab-workspace:/workspace \
  openlaboratoryorg/laboratory-os

5. Cost Management

Stop the instance from the EC2 console when not in use — compute billing pauses and the root volume is retained. Restart it and the container comes back up automatically if you used --restart unless-stopped.

Tip: Use Spot Instances to cut costs by 60–90%, but be aware they can be interrupted with 2 minutes notice. Not ideal for long unattended generation jobs.