Files
VASTAI-STUDIO-AUDIO/vastai-templates-context.md
2026-02-23 13:26:43 +00:00

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

  1. Éditer un template (ex: vastai/base-image ou vastai/pytorch)
  2. Ajouter la variable d'environnement PROVISIONING_SCRIPT avec 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 = toujours localhost dans 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 :

  1. Écrire le Dockerfile
  2. docker build + docker push vers un registre
  3. 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)

  1. Trouver l'image officielle sur DockerHub
  2. Créer un template avec l'image + ports requis
  3. Sauvegarder et lancer

Personnaliser un template Vast recommandé

  1. Éditer un template recommandé
  2. Ajouter PROVISIONING_SCRIPT pointant vers votre script
  3. Voir section 7 ci-dessus

Construire sa propre image Docker

  1. Créer un Dockerfile (optionnellement FROM une image Vast)
  2. Build + push vers un registre
  3. Créer un template avec le chemin de l'image custom