Vultr + SSH setup
A Vultr instance gives you a GPU host you keep for the session. Studio can log in over SSH, install Docker and the NVIDIA container toolkit, pull the image and run the combined Studio + Compute container. No terminal required.
Referral link: it supports the project and does not change the price.
Before you start
- A Vultr account with billing enabled.
- SharpMind Studio running on this PC, with the server image pushed to Docker Hub (or use integral2u/sharpmind-server:gpu).
- A GPU plan and a region near you. The tested plan is vcg-a16-6c-60g-16vram.
- An SSH key, or the instance root password. Studio can create a key for you.
Create the instance
- Deploy a Cloud GPU instance. Pick Ubuntu 24.04 and a GPU image that already includes the NVIDIA driver. A plain Ubuntu image works too, but you must install the driver and reboot before GPU jobs can use the card.
- Add the SSH key at creation. This is the easiest moment to attach it. If you do not have one yet, open Studio first and use Edit → Create key; the public key is shown there.
- Open the ports. Allow 22 for setup, 8080 for the Compute API and 5117 for the remote Studio UI. Restrict them to your IP where possible. A firewall that only allows 22 will make the host card time out even while the container is healthy.
- Keep the data folder. The image uses /data/SharpMind on the instance. If you create a separate block volume, mount it there; otherwise the instance disk is fine for a one-day run.
mkdir -p /root/.ssh
echo 'ssh-ed25519 AAAA...your-public-key... sharpmind-studio' \
>> /root/.ssh/authorized_keys
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
Add an SSH key to Studio
In Settings → Providers → Compute → Edit on the Vultr host:
- Create key generates ~/.ssh/sharpmind_ed25519 (ed25519, no passphrase) and shows the public key.
- Copy public key puts it on the clipboard for the Vultr console or the instance creation form.
- Browse selects an existing OpenSSH/PEM private key instead.
- A root password also works; it is stored encrypted with the host token.
The private key never leaves this PC. The host key is trusted on first use; this is a convenience for a fresh cloud box, not a substitute for pinning if you need it.
Add the host in Studio
- Add host → Vultr cloud server. Base URL http://<public-ip>:8080; Studio URL http://<public-ip>:5117.
- Token. Press Generate. The same value is written into the container as SHARPMIND_TOKEN, so Studio and the host match.
- Server image. Use the full registry name, for example integral2u/sharpmind-server:gpu or your-name/sharpmind-server:gpu. A local tag such as sharpmind-server:gpu cannot be pulled; setup now refuses it before trying.
- SSH fields. Host (blank uses the Base URL host), port 22, user root, key or password, container name sharpmind.
- Tick GPU host. This adds --gpus all and installs the NVIDIA container toolkit when it is missing.
- Save host.
Set up & deploy
On the host card press Test SSH first. You should see the OS, Docker version, GPU name and free disk. Then press Set up & deploy. The helper streams each stage:
[connect] Connected to root@203.0.113.10:22.
[probe] Ubuntu 24.04 LTS · x86_64 · Docker 29.9.2 · NVIDIA A16 · 288G free
[pull] Pulling integral2u/sharpmind-server:gpu…
[run] Up 2 seconds | 0.0.0.0:5117->5117/tcp, 0.0.0.0:8080->8080/tcp
[ready] Container sharpmind: Up 2 seconds | integral2u/sharpmind-server:gpu
Setup replaces an existing container with the same name, so it is safe to run again after changing the image or token. The data folder is preserved.
Verify
- Press Test on the card: the dot turns on and the model list loads.
- Open http://<public-ip>:8080/health in a browser; it is unauthenticated.
- The health payload should list ilgpu with a backend such as CUDA · cuBLAS.
- If the API answers but the Studio URL does not, port 5117 is still blocked.
{
"status": "ok",
"dataRoot": "/data/SharpMind",
"accelerators": [{
"name": "ilgpu",
"inference": true,
"backend": "CUDA · cuBLAS"
}]
}
Upload and train
- Chat model. Upload a packaged .smm from the card, or leave the host without a model: a fine-tune uploads its base with the job.
- Fine-tune. Training → Improve → base .smm, corpus, SFT if the data is chat JSONL, Run on = Vultr. The export downloads back to this PC.
- Watch the engine line. GPU success looks like Engine: [Cuda] NVIDIA A16, 14962 MB, cuBLAS 12.6. If you see Retrying on the CPU, the base did not satisfy the GPU engine; see Training.
Cost and cleanup
- The A16 plan is roughly $0.47/hour; a day is about $11.
- Stopping is not enough. Destroy the instance to stop billing.
- Download any exported model first. The host's /data/SharpMind is deleted with the instance unless it is a separate block volume.
- A snapshot costs a small monthly storage fee and is only worth it for data you cannot recreate.
- Rotate the host token if you shared it, and remove the instance's firewall rules with the instance.
Custom Linux host
Any Linux machine with Docker can be a compute host. The fields are the same as Vultr: Base URL, token, and optionally SSH. Use this for a workstation, a lab server, or another cloud.
- Install Docker (the SSH helper can do this) and make sure the service starts at boot.
- Open the ports 5117 and 8080, and SSH 22 if you want Studio to manage it.
- Add host → Custom remote server, enter the URL and token, and press Test.
- For GPU, install the NVIDIA driver and container toolkit; tick GPU host and let setup add --gpus all.
If the machine already runs the image, skip SSH entirely: Base URL, token, Test. The host only needs to be reachable from this PC.
Common problems
| Message | Meaning / fix |
|---|---|
| pull access denied for sharpmind-server | The image has no registry prefix. Enter user/repo:tag in Edit; setup now refuses local-only names before pulling. |
| Could not reach host:22 | The instance is down, the IP changed, or the provider firewall blocks SSH. |
| SSH login failed | Wrong user, wrong key, or the public key was never added to the host. The console step is the bootstrap. |
| No NVIDIA driver found | nvidia-smi is missing. Use a GPU image or install the driver and reboot; the helper does not install drivers. |
| Port 8080 or 5117 is already used | Another container owns the port. Remove it, or change the container name/ports. |
| API times out but SSH works | Provider firewall. Allow TCP 8080 and 5117, not just 22. |
| 401 after rotating a token | Restart Studio so it reloads the encrypted token, then Test. The old token is invalid by design. |