6.5 KiB
Vast.ai — Guide de création de templates
Référence condensée pour créer et configurer ses propres templates sur Vast.ai.
1. Identification
| Champ | Description |
|---|---|
| Template Name | Nom affiché sur la carte du template. |
| Template Description | Description optionnelle, utile si le template est partagé/public. |
2. Image Docker (Image Path:Tag)
Format obligatoire : repository/image_name:tag
Exemples d'images compatibles :
- Images publiques DockerHub :
nginx:latest,postgres:14,python:3.11 - Images Vast.ai :
vastai/base-image,vastai/pytorch - Registres alternatifs (chemin complet requis) :
nvcr.io/nvidia/pytorch:25.04-py3,ghcr.io/…,gcr.io/…
Tag spécial [Automatic] : sélectionne automatiquement l'image compatible avec la version CUDA de la machine (nécessite que le tag contienne la version CUDA, ex: my-image-cuda-12.8).
3. Ports
- Ajouter les ports TCP/UDP nécessaires à l'accès externe.
- Un port externe aléatoire est assigné et mappé vers le port interne du container.
- Alternative via tunnel SSH :
ssh -p [SSH_PORT] [USER]@[REMOTE_HOST] -L [LOCAL_PORT]:localhost:[REMOTE_PORT]
4. Variables d'environnement
- Ajouter les variables requises par l'image Docker.
- Ne jamais mettre de secrets dans un template public → utiliser les variables d'environnement du compte (
cloud.vast.ai/account/) qui sont injectées dans toutes les instances.
Variables spéciales
| Variable | Rôle |
|---|---|
PROVISIONING_SCRIPT |
URL d'un script shell exécuté au démarrage de l'instance |
PORTAL_CONFIG |
Configure l'accès aux applications via l'Instance Portal |
5. Modes de lancement
| Mode | Description |
|---|---|
| Jupyter + SSH | Installe Jupyter (port 8080) et SSH (port 22) au runtime. Entrypoint Docker ignoré. |
| SSH uniquement | Comme ci-dessus, sans Jupyter. Entrypoint Docker ignoré. |
| docker ENTRYPOINT | Le container s'exécute exactement comme prévu. Aucun outil supplémentaire ajouté. |
⚠️ En mode Jupyter ou SSH, l'entrypoint Docker original n'est pas exécuté. Utiliser le On-start Script pour démarrer les services.
6. On-start Script (Jupyter/SSH uniquement)
Script Bash exécuté au démarrage. Exemples :
# Exécuter un script existant dans l'image
chmod +x /usr/local/bin/start.sh
bash /usr/local/bin/start.sh
# Modifier un fichier de configuration
sed -i 's/-sslOnly//g' /dockerstartup/vnc_startup.sh
# Créer un répertoire
sudo -i -u kasm-user mkdir -p /home/kasm-user/Desktop
# Persister les variables d'environnement
env >> /etc/environment
Toujours appeler la commande ENTRYPOINT/CMD originale à la fin du script.
7. PROVISIONING_SCRIPT — Personnalisation au runtime
Méthode la plus simple pour personnaliser un template sans rebuilder une image Docker.
Configuration
- Éditer un template (ex:
vastai/base-imageouvastai/pytorch) - Ajouter la variable d'environnement
PROVISIONING_SCRIPTavec une URL vers un script shell (GitHub, Gist, etc.)
Exemple de script
#!/bin/bash
cd /workspace/
set -eo pipefail
# Activer l'environnement virtuel
. /venv/main/bin/activate
# Installer des packages
pip install your-packages
# Télécharger des fichiers
wget -P "${WORKSPACE}/" https://example.org/my-application.tar.gz
tar xvf ${WORKSPACE}/my-application.tar.gz
# Configurer un service Supervisor
echo "my-supervisor-config" > /etc/supervisor/conf.d/my-application.conf
echo "my-supervisor-wrapper" > /opt/supervisor-scripts/my-application.sh
chmod +x /opt/supervisor-scripts/my-application.sh
# Reconfigurer le portail
export PORTAL_CONFIG="localhost:1111:11111:/:Instance Portal|localhost:1234:11234:/:My Application"
# Recharger Supervisor
supervisorctl reload
Toutes les installations doivent aller dans
/workspace/pour la persistance.
8. PORTAL_CONFIG — Accès aux applications
Structure :
hostname:external_port:local_port:url_path:Application Name|...
- Séparateur entre applications :
| - Séparateur entre paramètres :
: hostname= toujourslocalhostdans les containers Docker- Si
external_port ≠ local_port→ Caddy agit en reverse proxy - Si
external_port = local_port→ Caddy ne proxifie pas (utile pour Jupyter)
Exemple complet :
"localhost:8002:18002:/hello:MyApp|localhost:1111:11111:/:Instance Portal|localhost:8080:18080:/:Jupyter|localhost:8384:18384:/:Syncthing"
9. Images Docker personnalisées (build custom)
Option A : FROM une image Vast.ai (recommandé)
FROM vastai/base-image:cuda-12.6.3-cudnn-devel-ubuntu22.04-py313
# ou
FROM vastai/pytorch:2.6.0-cuda-12.6.3-py312
WORKDIR /opt/workspace-internal/
RUN . /venv/main/bin/activate && your-installation-commands
Option B : FROM n'importe quelle image de base
Compatible avec toute image publique ou privée.
Étapes :
- Écrire le Dockerfile
docker build+docker pushvers un registre- Créer un template avec le chemin de l'image personnalisée
10. Authentification Docker (images privées)
Renseigner les credentials dans la section Docker Repository Authentication.
| Registre | Server Name |
|---|---|
| Docker Hub | (laisser vide) |
| GitHub Container Registry | ghcr.io |
| Google Container Registry | gcr.io |
11. Paramètres supplémentaires
| Paramètre | Description |
|---|---|
| Disk Space | Espace disque minimum pour les instances créées depuis ce template |
| Extra Filters | Restreindre les machines affichées (ex: CPU architecture AMD64/ARM64) |
| Visibility | Public (visible dans la recherche) ou Privé (accessible via URL uniquement) |
⚠️ Ne jamais mettre de secrets dans un template public.
12. Sauvegarde et lancement
| Bouton | Action |
|---|---|
| Create | Sauvegarde dans "My Templates" |
| Create & Use | Sauvegarde et ouvre la page des offres |
Le template génère aussi une commande CLI équivalente (section lecture seule).
Cas d'usage courants
Lancer une application existante (ex: nginx)
- Trouver l'image officielle sur DockerHub
- Créer un template avec l'image + ports requis
- Sauvegarder et lancer
Personnaliser un template Vast recommandé
- Éditer un template recommandé
- Ajouter
PROVISIONING_SCRIPTpointant vers votre script - Voir section 7 ci-dessus
Construire sa propre image Docker
- Créer un Dockerfile (optionnellement FROM une image Vast)
- Build + push vers un registre
- Créer un template avec le chemin de l'image custom