Getting Started
This guide takes you from a fresh installation to a completed GPU job. Docker is required for local API operation and custom images.
Install
To have a coding agent such as Claude Code or Codex do the setup, paste this into it:
set up https://anycloud.sh/SKILL.md
On macOS, install with Homebrew:
brew install anycloud-sh/tap/anycloud
Or use the installer:
curl -fsSL https://get.anycloud.sh | sh
The installer needs no sudo. It puts anycloud in ~/.local/bin and adds that
directory to PATH in your shell startup file; pass --no-modify-path to skip
that, or --install-dir <dir> to choose another directory. An existing
/usr/local/bin installation is updated where it is.
The installer verifies the downloaded binary against the checksums published in
the public anycloud-sh/releases repository. To inspect it before running:
curl -fsSLo install.sh https://get.anycloud.sh
less install.sh
sh install.sh
For Python, install the SDK too. It requires Python 3.10 or newer:
pip install anycloud-sdk
Sign in to GitHub when you need it
A local API runs public images without a GitHub sign-in. Sign in for private GHCR images, Services (their public URLs), clusters and hosted APIs:
anycloud login
Login asks GitHub only for read:org and read:packages, so it can't push
images; Container Images shows
how to push with the GitHub CLI. When a coding agent runs it, login prints the
sign-in URL and code for you to approve in your browser.
Start the API
Every command talks to one active API. For a personal setup on this machine, start the Anycloud API in Docker:
anycloud api start
api start writes a token to ~/.anycloud/local-api-token that only you can
read. The local API admits nothing else, and the CLI sends it only to the local
API.
A hosted API runs in your cloud account and gives it a stable URL for use from multiple machines or by a trusted team. Start with the local API above, then create the installation's Kubernetes cluster, which hosts the API and later runs node pools, Deployments and Services:
anycloud cluster create prod --credentials my-aws --region us-east-2 --vm-type t3.medium
anycloud api use https://<cluster-id>.anycloud.sh
Clusters walks that path end to end; Hosted APIs covers sharing and updating the API.
If you already own or have access to a hosted API, select it instead:
anycloud api use https://<cluster-id>.anycloud.sh
The selected URL is stored in ~/.anycloud/api-url. API_URL is a temporary
override.
The Python SDK's Client() uses the selected API with the local API's token,
or with the token saved by anycloud login for a hosted API. You can also pass api_url= and token= explicitly; see
Configuration.
Add cloud credentials
The interactive wizard can read durable local credentials, use supported provider tooling, or accept values you paste:
anycloud credentials new my-aws
For non-interactive setup, pass the provider fields explicitly:
anycloud credentials new my-aws --provider aws \
--access-key-id AKIA... \
--secret-access-key ...
Anycloud never installs cloud CLIs. When aws, gcloud or az is missing,
the wizard prints how to install it. AWS still offers its other choices; for
Azure and GCP generation, rerun and pick another option. If
you have neither credentials nor permission to create them, choose I don't
have AWS access keys (or the Azure or GCP equivalent): it prints a request to
forward to your cloud administrator. See Ask an
administrator. The identity
needs its provider's published role: AWS
AnycloudAccess, Azure
Anycloud (or Contributor), or
GCP Anycloud with the Security
Token Service API enabled for Buckets.
Azure, GCP, and Lambda use the same command with provider-specific fields. See Cloud Credentials for setup paths and the credentials command reference for every flag.
Deploy a job
The fastest first run uses a public image, so no image build or source checkout is needed.
- CLI
- Python
anycloud job pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime \
--credentials my-aws \
--gpu-type h100 \
--gpus all \
-- python -c "import torch; print('CUDA available:', torch.cuda.is_available())"
Follow it until completion:
anycloud status <job-id> --verbose
anycloud logs <job-id>
from anycloud import Client
with Client() as client:
job = client.submit(
"pytorch/pytorch:2.2.0-cuda12.1-cudnn8-runtime",
credential_name="my-aws",
gpu="h100",
docker_options={"gpus": "all"},
command=[
"python",
"-c",
"import torch; print('CUDA available:', torch.cuda.is_available())",
],
)
print(job.id)
job.wait()
print(job.last_status.workload.state)
Anycloud provisions a GPU VM, pulls the image, runs the command, and tears the VM down after the job exits.
Choose your next path
- Learn the building blocks: start with Jobs, then add Buckets, Container Images, and GPUs & VM Types as your workload needs them.
- Work directly on provisioned compute: launch and connect to a VM.
- Follow a complete workload: train MACE on spot GPUs.
- Look up exact syntax: use Configuration, the CLI reference, or the Python SDK reference.
To update an existing installation, run:
anycloud update