Choisir un type de volume
Utilisez un volume temporaire comme espace de travail au sein d’un même run. Utilisez un Volume enregistré pour les données qui doivent survivre à la sandbox ou que plusieurs bacs à sable lisent simultanément, comme un dataset partagé ou les poids du modèle.
Volumes temporaires
Les exemples de volumes temporaires omettentauth et s’authentifient avec un jeton d’accès à l’API CoreWeave fourni par CWSANDBOX_API_KEY. Pour utiliser une clé API Forge, suivez la procédure décrite dans Premiers pas, puis transmettez les AuthHeaders obtenus à Sandbox.run().
Un volume temporaire est créé en même temps que la sandbox et détruit avec elle. Pour en déclarer un, ajoutez ScratchVolumeOptions à la liste volumes.
ScratchVolumeOptions accepte les champs suivants :
Choisir un support de stockage
AvecStorageMedium.DISK, le volume repose sur le disque local. Avec StorageMedium.MEMORY, il repose sur tmpfs, ce qui est plus rapide, mais l’espace utilisé est décompté de la requête de mémoire du conteneur qui monte le volume ainsi que du plafond de mémoire de la politique.
Comme un volume en RAM sans limite pourrait épuiser les ressources du nœud, un volume MEMORY doit déclarer une valeur size. Celle-ci peut être exprimée sous forme de quantité absolue ou de pourcentage entier de la requête de mémoire résolue de la sandbox, par exemple "50%". La forme en pourcentage n’est valide que pour MEMORY. Un volume DISK doit utiliser une taille absolue.
Monter un volume temporaire sur plusieurs conteneurs
mount_path est un raccourci qui monte le volume sur le conteneur principal. Dans une sandbox multiconteneur, omettez mount_path et déclarez plutôt les montages sur chaque conteneur, afin que plusieurs conteneurs puissent accéder au même volume.
Volumes enregistrés
Les exemples suivants utilisent une PVC de votre cluster CKS et un jeton d’accès à l’API CoreWeave défini dansCWSANDBOX_API_KEY. Suivez la procédure Utiliser votre propre capacité de calcul avant d’enregistrer ou de monter un Volume adossé à une PVC.
Un Volume enregistré pointe vers une PersistentVolumeClaim (PVC) qui existe déjà dans l’un de vos clusters. Une fois le Volume enregistré, les bacs à sable peuvent monter la demande sans disposer d’un accès au cluster lui-même. Le Volume n’est qu’un pointeur de métadonnées : CoreWeave ne copie jamais les données, et la suppression du Volume n’affecte en rien la demande.
Chaque rattachement offre une vue en direct de la même demande : toute écriture effectuée depuis un bac à sable est donc visible par tous les autres bacs à sable qui la montent.
Enregistrer un Volume
Volume.create() renvoie immédiatement le Volume à l’état VALIDATING, puis le plan de contrôle vérifie que la demande existe et qu’elle est utilisable. Interrogez son statut avec wait_until_ready() avant de le monter.
La source et l’option
read_only sont également immuables après la création. Seul le champ description peut être modifié par la suite.PvcVolumeSource accepte les champs suivants :
Définissez
read_only=True dans Volume.create() pour que la lecture seule devienne une propriété du Volume lui-même. Ce paramètre fixe un minimum, et non une valeur par défaut : un montage peut être en lecture seule sur un Volume accessible en écriture, mais aucun montage ne peut écrire sur un Volume en lecture seule.
Monter un Volume enregistré
Montez le Volume à l’aide de son ID avecRegisteredVolumeOptions. Le Volume doit être à l’état READY au démarrage, faute de quoi la sandbox échoue avec l’erreur CWSANDBOX_VOLUME_NOT_READY.
RegisteredVolumeOptions exige name, volume_id et un mount_path absolu autre que /. Il accepte également sub_path, qui se combine avec tout sub_path défini lors de l’enregistrement, ainsi que read_only.
Une sandbox indique les Volumes qu’elle a montés dans attached_volume_ids.
Localité et placement
La propriétélocality d’un Volume indique s’il impose des contraintes de placement :
cluster_local: le Volume réside dans un seul cluster ; les bacs à sable qui le montent sont donc planifiés sur l’exécuteur de ce cluster. Les Volumes adossés à un PVC sont locaux au cluster.global: le Volume est accessible depuis n’importe quel cluster et n’impose aucune contrainte de placement.
CWSANDBOX_VOLUME_PLACEMENT_CONFLICT.
Gérer les Volumes enregistrés
Utilisez les opérations suivantes pour lister, inspecter, mettre à jour et annuler l’enregistrement des Volumes de votre organisation.Volume.list() gère automatiquement la pagination et accepte les filtres states et runner_ids. delete() accepte allow_missing=True, de sorte que la suppression d’un Volume déjà supprimé réussit au lieu de lever une exception.
La suppression d’un Volume encore monté par des bacs à sable dans un état non terminal échoue avec l’erreur CWSANDBOX_VOLUME_IN_USE, que le client Python lève sous la forme d’une exception VolumeInUseError. Arrêtez d’abord les bacs à sable associés.
États des volumes
Au cours de son cycle de vie, un Volume enregistré passe par les états suivants :wait_until_ready() interroge l’état du Volume jusqu’à ce qu’il passe à READY. La méthode lève VolumeError si le Volume passe à ERROR ou DELETING, et VolumeWaitTimeoutError si le délai d’expiration est écoulé avant.
Motifs d’échec
Utilisez ce tableau pour interpréter les motifs d’échec que peuvent renvoyer les opérations sur les sandbox et les Volumes.Ressources associées
Pour en savoir plus sur les fonctionnalités connexes des sandbox, consultez les ressources suivantes :- Instantanés du système de fichiers : conserver et restaurer le système de fichiers d’une sandbox.
- Accorder aux bacs à sable l’accès à AI Object Storage : lire et écrire dans des buckets depuis une sandbox.
- Configuration du bac à sable : les autres options de création d’une sandbox
- Distributed File Storage : créer les PersistentVolumeClaims vers lesquelles pointent les Volumes enregistrés.