Skip to main content
Ce guide présente le décorateur @session.function(), qui permet d’exécuter des fonctions Python dans des sandboxes. Il s’adresse aux développeurs qui souhaitent déporter des calculs Python ponctuels vers des environnements isolés sans avoir à gérer eux-mêmes le cycle de vie d’un sandbox. Il explique comment définir des fonctions distantes, quels types d’arguments et de valeurs de retour l’API prend en charge, et dans quels cas cette API est la plus adaptée.

Choisir l’authentification

Ces exemples s’exécutent sur une capacité sans serveur, sauf si une section précise CKS. Choisissez l’identifiant d’authentification du compte propriétaire de vos sandboxes. Pour obtenir une clé ou un jeton, consultez Choisir et obtenir des identifiants d’authentification. Exécutez les commandes d’installation dans un environnement virtuel Python actif. Enregistrez le code Python de l’onglet correspondant à votre identifiant d’authentification sous le nom sandbox_auth.py, dans le même répertoire que les scripts Python que vous exécutez depuis cette page. Ce fichier enregistre le mode d’authentification choisi, et non votre identifiant d’authentification lui-même. Les exemples importent AUTH depuis ce fichier et le transmettent explicitement à chaque nouvelle sandbox ou session.
Utilisez votre clé API Forge via la stratégie d’authentification W&B du SDK :
sandbox_auth.py
Pour un placement sur CKS, choisissez le jeton CoreWeave, activez un exécuteur et définissez placement_mode="cks" lors de la création de la sandbox ou dans SandboxDefaults. Créer une session avec auth=AUTH authentifie également les sandboxes qui lui appartiennent. Conservez le même identifiant d’authentification pour vous reconnecter aux sandboxes, les lister ou les nettoyer.

Aperçu

L’API de décorateur de fonction vous permet d’exécuter des fonctions Python dans des conteneurs sandbox isolés. Utilisez-la pour exécuter à distance des traitements Python distincts tout en conservant un code appelant simple :

Utilisation de base

Définir des fonctions

Décorez les fonctions avec @session.function() :

Appeler des fonctions

Appelez .remote() sur la fonction décorée pour l’exécuter dans le sandbox :

Méthodes d’exécution

Exécuter en parallèle avec map()

Exécutez sur plusieurs entrées :
Avec des tuples pour des arguments multiples :

Exécuter en local avec local()

Exécutez le code en local, sans sandbox, ce qui est pratique pour les tests :

Types des arguments et des valeurs de retour

Les fonctions distantes transmettent les arguments et les valeurs de retour au format JSON. Ils doivent donc être sérialisables en JSON : dictionnaires, listes, chaînes de caractères, nombres, booléens et None.
Si vous transmettez un argument non représentable en JSON, l’appel lève une exception TypeError avant le démarrage de la sandbox :
Example output
Une valeur de retour que JSON ne peut pas représenter provoque le même échec, avec le message return value is not JSON-serializable. Les objets JSON n’acceptent que des clés de type string. Un dictionnaire dont les clés sont des entiers, des nombres à virgule flottante ou des booléens est rejeté plutôt que converti : ainsi, les types que reçoit votre fonction dans la sandbox correspondent à ceux que vous avez transmis. Pour manipuler des tableaux NumPy, des DataFrames pandas ou des instances de classes personnalisées, convertissez-les en valeurs compatibles avec JSON avant d’appeler la fonction, puis reconstruisez-les à l’intérieur de celle-ci :
Le client n’installe rien avant d’exécuter votre fonction. Toute bibliothèque importée par la fonction, comme NumPy, doit déjà être présente dans l’image de conteneur. Si les données sont trop volumineuses pour être transmises en JSON, écrivez-les dans un stockage accessible depuis la sandbox et transmettez plutôt une référence. Voir Opérations sur les fichiers.

Closures et variables globales

Variables de closure

Les fonctions capturent les variables de leur portée englobante :

Variables globales

Le décorateur sérialise avec la fonction les variables globales auxquelles elle fait référence :
Les variables de closure capturées et les variables globales sont transférées vers la sandbox au format JSON, tout comme les arguments et les valeurs de retour. Si une fonction capture une valeur non représentable en JSON, l’appel échoue pour cette raison, même si tous les arguments que vous transmettez sont valides.

Image de conteneur

Remplacez l’image de conteneur pour certaines fonctions :

Gestion des erreurs

Les exceptions levées par une fonction se propagent jusqu’à l’appelant :

Quand utiliser les fonctions plutôt que les sandboxes

Utilisez le tableau suivant pour déterminer laquelle de l’API du décorateur de fonction ou de l’API sandbox convient le mieux à votre charge de travail.

Limitations

L’API de fonctions est volontairement simple. Pour les flux de travail complexes :
  • Nouvelles tentatives et backoff : implémentez-les dans le code appelant.
  • Dépendances entre tâches et DAG : utilisez un orchestrateur de flux de travail comme Airflow ou Prefect.
  • Ordonnancement complexe : utilisez directement l’API de sandbox.

Exemple complet

L’exemple suivant réunit les concepts présentés dans ce guide. Il illustre l’exécution unique et l’exécution parallèle, ainsi qu’un calcul dont l’argument et la valeur de retour sont transmis au format JSON :
Dernière modification le 23 octobre 2026