Choisir l’authentification
Ces exemples s’exécutent sur une capacité sans serveur, sauf si une section indique CoreWeave Kubernetes Service (CKS). Choisissez l’identifiant d’authentification du compte propriétaire de vos Sandbox. Consultez Choisir et obtenir des identifiants pour obtenir une clé ou un jeton. Enregistrez la configuration correspondant à votre langage dans le même répertoire que les scripts que vous exécutez depuis cette page. Les exemples Python importentAUTH depuis sandbox_auth.py. Les exemples TypeScript importent client depuis sandbox-client.mts. Ces fichiers sélectionnent l’authentification sans stocker votre identifiant d’authentification. Pour Python, utilisez un environnement virtuel actif. Pour TypeScript, installez d’abord le client avec npm install @coreweave/cwsandbox@1.0.0.
- Clé API Forge
- Jeton d’accès à l’API CoreWeave
Utilisez votre clé API Forge avec l’intégration
wandb du SDK. Remplacez [WANDB-API-KEY] par votre clé API :- Python
- TypeScript
sandbox_auth.py
placement_mode="cks" lors de la création de la Sandbox ou dans SandboxDefaults. En TypeScript, choisissez le jeton CoreWeave et définissez un tableau runnerIds non vide pour sélectionner CKS. Créer une session Python avec auth=AUTH authentifie également les Sandbox qui lui appartiennent. Conservez le même identifiant d’authentification pour vous reconnecter à vos Sandbox, les lister ou les nettoyer.
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
Un volume temporaire est créé en même temps que la sandbox et détruit avec elle. Pour en déclarer un, ajoutezScratchVolumeOptions à la liste volumes.
- Python
- TypeScript
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 Volumes enregistrés adossés à une PVC décrits dans ce guide nécessitent un jeton d’accès à l’API CoreWeave ainsi que l’activation des Volumes enregistrés pour votre organisation. L’onglet clé API Forge de la section Choisir l’authentification s’applique aux volumes temporaires. 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 Sandbox 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 une Sandbox est donc visible par toutes les autres Sandbox qui la montent.
Le client TypeScript n’expose pas d’API permettant d’enregistrer ou de gérer des Volumes, ni d’options de montage de Volumes enregistrés pour create() et run(). Utilisez le client Python pour ces opérations.
Dans la version 1.0.0 du client TypeScript, runFromTemplate() peut hériter des Volumes enregistrés et de leurs montages définis dans un modèle de Sandbox. Omettez containerImage pour conserver les conteneurs et les montages du modèle. Si vous définissez containerImage, ce paramètre remplace les conteneurs et supprime leurs montages. Si des Volumes enregistrés se retrouvent sans montage, la requête est rejetée.
Enregistrer un Volume
L’enregistrement, la mise à jour ou la suppression d’un Volume nécessite le rôle Sandbox Admin. Le rôle Sandbox User permet de lister, de lire, de valider et de monter des Volumes enregistrés. Le rôle Sandbox Admin inclut les autorisations du rôle Sandbox User. Voir Rôles Sandbox.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 Sandbox 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 Sandbox 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.