Utiliser son propre conteneur (BYOC) pour les pipelines

Outre la définition d'étapes de pipeline basées sur des travaux et des scripts, vous pouvez utiliser des images de conteneur personnalisées pour définir l'exécution de l'étape.

Vous pouvez sélectionner l'image, la commande ou le point d'entrée du conteneur pour l'exécution du conteneur. Vous pouvez fournir le code personnalisé dans un script ou une archive compressée, ce qui vous permet de mettre à jour le code sans reconstruire l'image.

Configuration d'étape BYOC

  1. (Facultatif) Sélectionnez De conteneur.
  2. Sous Configuration de conteneur, sélectionnez Configurer.
  3. Dans le panneau Configurer votre environnement de conteneur :
    1. Sélectionnez un référentiel dans la liste. Si le référentiel se trouve dans un autre compartiment, sélectionnez Changer de compartiment.
    2. Sélectionnez une image dans la liste.
    3. Entrez un point d'entrée (facultatif). Pour en ajouter un autre, sélectionnez Paramètre +Add.
    4. Entrez un CMD (facultatif). Pour en ajouter un autre, sélectionnez Paramètre +Add.
    5. (Facultatif) Entrez un condensé d'image.
    6. (Facultatif) Si vous utilisez la vérification de signature, entrez l'OCID de la signature d'image. Par exemple ocid1.containerimagesignature.oc1.iad.aaaaaaaaab....
    7. Sélectionnez Sélectionner.
  4. (Facultatif) Chargez l'artefact d'étape en le faisant glisser dans la zone. Cette étape est facultative uniquement si BYOC est configuré.

Artefact de modèle

Le chargement d'un artefact d'étape lors de l'utilisation de BYOC est facultatif. Cependant, il vous permet de modifier le code qui s'exécute à l'intérieur du conteneur sans reconstruire l'image.

Les artefacts d'étape sont montés dans le conteneur dans le dossier /home/datascience/. Si un artefact est une archive, son contenu est extrait dans le dossier /home/datascience/decompressed_artifact.

Image commune du docker
Il est pratique de créer une image de conteneur générique avec l'environnement requis (par exemple, Python 3.8 et les bibliothèques de base, comme indiqué dans Démarrage rapide) et d'ajouter des scripts Python plus tard en tant qu'artefacts d'étape.
Artefacts personnalisés - Remplacement de dossier
Lorsque vous utilisez un artefact d'étape personnalisé, le service monte un volume avec l'artefact dans le dossier /home/datascience, en remplaçant le dossier dans votre image de conteneur. Les artefacts d'archive (zip/tar/...) sont décompressés et le contenu est présenté dans le dossier /home/datascience/decompressed_artifact.

Créer un pipeline de conteneur - Démarrage rapide

Suivez ces étapes pour créer une étape de pipeline de conteneur.

Création du conteneur

  1. Utilisez une image existante dans le registre OCI ou créez une nouvelle image à l'aide de l'exemple de fichier Dockerfile. Voici l'exemple de code qui crée une image qui vous permet d'exécuter des scripts Python.
    Dockerfile :
    FROM python:3.8-slim AS base
     
    ENV DATASCIENCE_USER datascience
    ENV DATASCIENCE_UID 1000
    ENV HOME /home/$DATASCIENCE_USER
     
    RUN python -m pip install \
            oci \
            ocifs
     
    COPY simplest.py .
    CMD ["python", "simplest.py"]
    Le fichier Dockerfile suppose que le script simplest.py se trouve dans le même dossier. Voici un exemple de code pour simplest.py :
    import datetime
    import os
    import time
     
    pipe_id = os.environ.get("PIPELINE_RUN_OCID", "LOCAL")
    print(f"Starting pipeline run: {pipe_id}")
    print(f"Current timestamp in UTC: {datetime.datetime.utcnow()}")
     
    print("Delay 5s")
     
    time.sleep(5)
     
    print("Environment variables:")
     
    for item, value in os.environ.items():
        print(f"\t {item}: {value}")
  2. Exécutez la commande docker build :
    docker build -t byoc:1.0.0 .

Test du conteneur

Avant de pousser l'image vers un registre de conteneurs, vous pouvez la tester localement.

  1. Exécutez l'image localement :
    docker run --rm -it -v "/home/lin/.oci:/home/datascience/.oci" byoc:1.0.0
  2. Vérifiez que la sortie est similaire à :
    Starting pipeline run: LOCAL
    Current timestamp in UTC: 2024-03-07 14:44:08.506191
    Delay 5s
    Environment variables:
             PATH: /usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
             HOSTNAME: ae441d10f33e
             TERM: xterm
             LANG: C.UTF-8
             GPG_KEY: E3FF2839C048B25C084DEBE9B26995E310250568
             PYTHON_VERSION: 3.8.18
             PYTHON_PIP_VERSION: 23.0.1
             PYTHON_SETUPTOOLS_VERSION: 57.5.0
             PYTHON_GET_PIP_URL: https://github.com/pypa/get-pip/raw/dbf0c85f76fb6e1ab42aa672ffca6f0a675d9ee4/public/get-pip.py
             PYTHON_GET_PIP_SHA256: dfe9fd5c28dc98b5ac17979a953ea550cec37ae1b47a5116007395bfacff2ab9
             DATASCIENCE_USER: datascience
             DATASCIENCE_UID: 1000
             HOME: /home/datascience

Transmission du conteneur à OCIR

Suivez les étapes de la documentation sur le registre de conteneurs pour générer un jeton d'authentification pour vous connecter à OCIR.

  1. Connectez-vous à Oracle Container Repository (OCIR) :
    docker login -u '<tenant_namespace>/<username>' <region>.ocir.io
    Pour plus d'informations, consultez la documentation sur Container Registry.
  2. Marquer l'image de conteneur local :
    docker tag <local_image_name>:<local_version>
                                        <region>.ocir.io/<tenancy_ocir_namespace>/<repo>:<version>
    docker tag byoc:1.0.0 iad.ocir.io/testtenancy/byoc:1.0.0
    Pour plus d'informations, consultez la documentation sur Container Registry.
  3. Pousser l'image marquée vers OCI :
    docker push <region>.ocir.io/<tenancy_ocid_namespace>/<repo>:<version>
    docker push byoc:1.0.0 iad.ocir.io/testtenancy/byoc:1.0.0
    Pour plus d'informations, consultez la documentation sur Container Registry.

Création du pipeline

Voir la section Politiques de pipeline pour vous assurer que vous disposez de politiques qui permettent à la ressource d'exécution de pipeline d'extraire des images de conteneur du registre de conteneur.

Créez un pipeline pour utiliser le conteneur.
  1. Créez un pipeline avec un nom approprié, par exemple BYOC Demo name.
  2. Sélectionnez Ajouter des étapes de pipeline.
  3. Attribuez un nom à l'étape, par exemple Step 1.
  4. Pour utiliser Utiliser son propre conteneur, sélectionnez De conteneur.
  5. Dans Configuration de conteneur, sélectionnez Configurer.
  6. Dans Configurer votre environnement de conteneur :
    1. Sélectionnez le démarrage rapide ou l'oculaire du référentiel dans la liste. Si le référentiel se trouve dans un autre compartiment, sélectionnez Changer de compartiment.
    2. Sélectionnez l'image iad.ocir.io/idtlxnfdweil/quickstart/byoc:1.0.0 dans la liste.
    3. Sélectionnez Sélectionner.
  7. Sélectionnez enregistrer.
  8. Facultatif : Définissez la journalisation.
  9. Sélectionnez Créer.

Activation des journaux de pipeline

Créez un pipeline et démarrez-le.
Cette tâche est facultative. Si vous ne voulez pas générer les journaux, vous pouvez l'ignorer.
  1. Dans la liste des pipelines, sélectionnez le pipeline à activer.
  2. Dans la page des détails du pipeline, sélectionnez Journaux.
  3. Sélectionnez Activer les journaux.

Configurations prises en charge

Informations importantes sur les configurations prises en charge.

  • Les pipelines d'apprentissage automatique ne prennent en charge que les images de conteneur résidant dans le registre OCI.
  • La taille de l'image du conteneur est limitée à 40 Go sous forme non compressée.
  • L'utilisateur qui crée la ressource de pipeline d'apprentissage automatique doit avoir accès à l'image de conteneur dans le registre OCI. Sinon, créez une politique IAM d'accès utilisateur avant de créer la ressource de pipeline d'apprentissage automatique.

Images de conteneur sur Apple Silicon M1 Mac

Pour plus d'informations, voir Image Docker sur Apple sur M1 MacBook.

condensés d'image;

Les images dans un registre de conteneur sont identifiées par un référentiel, un nom et un marqueur. En outre, Docker attribue un condensé unique à chaque version d'une image. Lors de la transmission d'une image de conteneur mise à jour, il est recommandé d'indiquer à l'image mise à jour un nouveau marqueur pour l'identifier, plutôt que de réutiliser un marqueur existant, comme meilleure pratique. Cependant, même si vous poussez une image mise à jour et que vous lui donnez le même nom et le même marqueur que ceux d'une version précédente, la nouvelle version poussée a un condensé différent de la version précédente.

Lorsque vous créez une ressource de pipeline, vous spécifiez le nom et le marqueur d'une version particulière d'une image. Pour éviter les incohérences plus tard, les pipelines enregistrent également le condensé unique de cette version particulière de l'image. Vous pouvez également fournir le condensé de l'image lors de la création de la ressource de pipeline.

Par défaut, si vous poussez une version mise à jour d'une image vers le registre Docker avec le même nom et le même marqueur que la version initiale de l'image, les pipelines continueront d'utiliser le condensé initial pour extraire la version initiale de l'image. C'est peut-être le comportement que vous recherchez. En revanche, si vous voulez que les pipelines extraient la version la plus récente de l'image, vous pouvez modifier explicitement le nom de l'image avec le marqueur et le condensé que les pipelines utilisent pour identifier la version de l'image à extraire.