> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lyceum.technology/llms.txt
> Use this file to discover all available pages before exploring further.

# Launch an Instance

> Provision a dedicated GPU VM with SSH access

Launching a VM requires three things: a hardware profile, a number of GPUs, and an SSH public key. The platform provisions the VM, configures it to accept your key, and returns the IP once it's ready.

## SSH keys

Every VM is bootstrapped with one or more SSH public keys you provide. The corresponding private key stays on your machine and never touches Lyceum Cloud, that's the whole point of the asymmetric scheme.

If you don't have a key, generate one:

```bash theme={null}
ssh-keygen -t ed25519 -C "you@example.com"
```

Then provide the contents of `~/.ssh/id_ed25519.pub` (the public half) when launching.

## On-demand vs reserved capacity

The platform supports launching VMs **on demand** (billed hourly, terminate any time) or under a **reserved-capacity contract** (1, 3, 6, or 12 months) at a discounted rate. For reserved capacity, contact the team via the dashboard's quote flow or [support@lyceum.technology](mailto:support@lyceum.technology), there's no self-service contract path.

## Checking availability

Hardware availability varies by region and demand. Before launching, check whether the profile you want is available:

```http theme={null}
GET /api/v2/external/vms/availability?hardware_profile=a100
```

## Launching

<Tabs>
  <Tab title="CLI" icon="terminal">
    ```bash theme={null}
    lyceum vm start \
      -h h100 \
      -k "$(cat ~/.ssh/id_ed25519.pub)" \
      -g 1
    ```

    | Flag                       | Default  | Description                                               |
    | -------------------------- | -------- | --------------------------------------------------------- |
    | `-h`, `--hardware-profile` | `a100`   | Hardware profile (`cpu`, `a100`, `h100`, ...)             |
    | `-k`, `--key`              | required | SSH public key (the contents, not a path)                 |
    | `-g`, `--gpu-count`        | `1`      | Number of GPUs                                            |
    | `-a`, `--async`            | off      | Return immediately without waiting for the VM to be ready |

    By default the CLI waits for the VM to enter `ready` and prints the IP. Use `--async` to fire-and-forget; you can poll status afterwards with `lyceum vm status`.
  </Tab>

  <Tab title="REST API" icon="play">
    ```http theme={null}
    POST /api/v2/external/vms/create
    ```

    Body: `user_public_key`, `hardware_profile`, optional `instance_specs`. Returns `vm_id`, `status`, `ip_address`, `created_at`.

    The VM starts in `provisioning` and transitions to `ready` once the IP is assigned. Poll `GET /vms/{vm_id}/status` until that happens, or use the CLI which does the polling for you.
  </Tab>
</Tabs>

## After launching

Once the VM is `ready`:

```bash theme={null}
ssh root@<ip-address>
```

From there it's a normal Linux box. Install whatever you need, upload data via [Storage](/docs/configuration/storage) or `scp`, run jobs, and `lyceum vm terminate <vm_id>` when you're done.
