Choisir le bon mode d'exécution
Les charges de travail à l'échelle utilitaire peuvent prendre de nombreuses heures à s'exécuter, il est donc important que les ressources classiques et quantiques soient planifiées efficacement pour simplifier l'exécution. Les modes d'exécution offrent de la flexibilité pour équilibrer le compromis entre coût et temps, afin d'utiliser les ressources de façon optimale selon tes charges de travail. Plusieurs aspects sont à prendre en compte lorsque tu choisis le mode d'exécution à utiliser, comme le temps d'exécution total (durée de vie maximale, ou TTL) et le temps entre les jobs (TTL interactif).
Les avantages de chacun sont résumés ci-dessous :
- Batch
- L'ensemble du lot de jobs est planifié ensemble et il n'y a pas de temps d'attente supplémentaire en file d'attente pour chacun.
- Le calcul classique des jobs, comme la compilation, s'exécute en parallèle. Ainsi, l'exécution de plusieurs jobs dans un lot est significativement plus rapide que leur exécution en série.
- Le délai entre les jobs est généralement minimal, ce qui peut aider à éviter la dérive.
- Si tu partitionnes ta charge de travail en plusieurs jobs et que tu les exécutes en mode batch, tu peux obtenir les résultats de chaque job individuellement, ce qui les rend plus souples à manipuler. Par exemple, si les résultats d'un job ne correspondent pas à tes attentes, tu peux annuler les jobs restants. De plus, si un job échoue, tu peux le soumettre à nouveau au lieu de relancer toute la charge de travail.
- Est généralement moins coûteux que les sessions.
- Session
- Toutes les fonctionnalités du mode batch (mais nécessitant une utilisation accrue ; voir Utilisation des charges de travail pour plus de détails sur le calcul de l'utilisation).
- Accès dédié et exclusif au QPU pendant la fenêtre active de la session.
- Utile pour les charges de travail dont toutes les entrées ne sont pas disponibles dès le départ, pour les charges de travail itératives qui nécessitent un post-traitement classique avant que la suivante puisse s'exécuter, et pour les expériences devant s'exécuter le plus étroitement possible les unes après les autres.
- Job
- Le plus simple à utiliser pour une petite expérience.
- Peut s'exécuter plus tôt que le mode batch.
Recommandations et bonnes pratiques
En règle générale, utilise le mode batch sauf si tes charges de travail n'ont pas toutes leurs entrées disponibles dès le départ.
-
Utilise le mode batch pour soumettre plusieurs jobs primitifs simultanément et réduire le temps de traitement.
-
Utilise le mode session pour les charges de travail itératives, ou si tu as besoin d'un accès dédié au QPU.
-
Utilise toujours le mode job pour soumettre une seule requête primitive.
-
Étant donné que les sessions sont généralement plus coûteuses, il est recommandé d'utiliser le mode batch chaque fois que tu n'as pas besoin des avantages supplémentaires offerts par les sessions.
-
Les utilisateurs du plan Open ne peuvent pas soumettre de jobs en session.
Pour garantir l'utilisation la plus efficace des modes d'exécution, les pratiques suivantes sont recommandées :
-
Il existe un coût fixe associé à l'exécution d'un job. En général, si chacun de tes jobs utilise moins d'une minute de temps QPU, envisage d'en combiner plusieurs en un job plus grand (cela s'applique à tous les modes d'exécution). Le « temps QPU » désigne le temps passé par le complexe QPU à traiter ton job.
-
Si chacun de tes jobs consomme plus d'une minute de temps QPU, ou si combiner les jobs n'est pas pratique, tu peux tout de même exécuter plusieurs jobs en parallèle. Chaque job passe par un traitement classique et quantique. Alors qu'un QPU ne peut traiter qu'un seul job à la fois, jusqu'à cinq jobs classiques peuvent être traités en parallèle. Tu peux en profiter en soumettant plusieurs jobs en mode d'exécution batch ou session.
Les points ci-dessus sont des lignes directrices générales, et tu dois ajuster ta charge de travail pour trouver le ratio optimal, en particulier lorsque tu utilises des sessions. Par exemple, si tu utilises une session pour obtenir un accès exclusif à un backend, envisage de diviser les grands jobs en plus petits et de les exécuter en parallèle. Cela peut être plus rentable car cela peut réduire le temps d'exécution réel.
Exemples
Exécuter un algorithme variationnel quantique
L'exécution d'un algorithme variationnel quantique suit généralement ce flux :
- Préparer l'ansatz.
- Évaluer la fonction de coût sur un QPU.
- Prendre le résultat de l'étape précédente et le passer dans un optimiseur classique.
- Ajuster les paramètres en fonction du résultat de (3), puis revenir à l'étape (2).
Dans ce cas, si tu utilisais le mode job ou batch, chaque job généré par l'étape (2) doit repasser par la file d'attente. Cela augmente considérablement la durée de l'expérience (temps d'exécution réel) en raison du temps d'attente en file. La convergence pourrait également prendre plus de temps en raison de la dérive du dispositif. C'est-à-dire que chaque itération est censée te donner un meilleur résultat, mais la dérive du dispositif pourrait rendre les résultats suivants moins bons.
De plus, si tu utilises PEA ou PEC, tu peux apprendre le modèle de bruit une seule fois et l'appliquer aux jobs suivants lors d'une exécution en session dédiée. Cela ne fonctionne généralement pas avec le mode batch ou job, car le modèle de bruit pourrait devenir obsolète au moment où le prochain job sort de la file d'attente.
Comparer les paramètres d'atténuation des erreurs
Pour comparer les effets des méthodes d'atténuation des erreurs disponibles, tu pourrais suivre ce flux :
- Construire un circuit et un observable.
- Soumettre des jobs primitifs qui utilisent différentes combinaisons de paramètres d'atténuation des erreurs.
- Tracer les résultats pour observer les effets des différents paramètres.
Dans ce cas, tous les jobs (qui sont liés mais indépendants) sont disponibles dès le départ. Si tu utilises le mode batch, ils sont planifiés collectivement, de sorte que tu n'as à attendre qu'une seule fois qu'ils passent dans la file d'attente. De plus, comme l'objectif est de comparer les effets des différentes méthodes d'atténuation des erreurs, il est avantageux qu'ils s'exécutent le plus près possible les uns des autres. Ainsi, le mode batch serait un bon choix. Tu pourrais exécuter ces jobs dans une session, mais étant donné que les sessions sont généralement plus coûteuses, il est recommandé d'utiliser le mode batch chaque fois que tu n'as pas besoin des fonctionnalités supplémentaires qu'offrent les sessions.