Modello BYOC (Bring Your Own Container) per le pipeline

Oltre a definire i passi della pipeline in base a job e script, è possibile utilizzare immagini di container personalizzate per definire il runtime dei passi.

È possibile selezionare l'immagine del contenitore, il comando o il punto di ingresso per l'esecuzione del contenitore. Il codice personalizzato può essere fornito in uno script o in un archivio compresso, per poter essere aggiornato senza ricreare l'immagine.

Configurazione passo BYOC

  1. (Facoltativo) Selezionare Da contenitore.
  2. In Configurazione contenitore, selezionare Configura.
  3. Nel pannello Configura ambiente contenitore:
    1. Selezionare un repository dalla lista. Se il repository si trova in un compartimento diverso, selezionare Modifica compartimento.
    2. Selezionare un'immagine dalla lista.
    3. (Facoltativo) Immettere un punto di ingresso. Per aggiungerne un altro, selezionare +Add, parametro.
    4. (Facoltativo) Immettere un CMD. Per aggiungerne un altro, selezionare +Add, parametro.
    5. (Facoltativo) Immettere un digest di immagine.
    6. (Facoltativo) Se si utilizza la verifica della firma, immettere l'OCID della firma dell'immagine. Ad esempio, ocid1.containerimagesignature.oc1.iad.aaaaaaaaab....
    7. Selezionare Seleziona.
  4. (Facoltativo) Caricare l'artifact del passo trascinandolo nella casella. Questo passo è facoltativo solo se è configurato BYOC.

Artifact modello

Il caricamento di un artifact di passo quando si utilizza BYOC è facoltativo. Tuttavia, consente di modificare il codice che viene eseguito all'interno del contenitore senza ricreare l'immagine.

Gli artifact del passo vengono installati nel contenitore nella cartella /home/datascience/. Se un artifact è un archivio, il relativo contenuto viene estratto nella cartella /home/datascience/decompressed_artifact.

Immagine docker comune
È conveniente creare un'immagine di contenitore generica con l'ambiente richiesto (ad esempio, Python 3.8 e librerie di base come mostrato in Avvio rapido) e aggiungere script Python in un secondo momento come artifact del passo.
Artifact personalizzati - Sostituzione cartella
Quando si utilizza un artifact passo personalizzato, il servizio installa un volume con l'artifact nella cartella /home/datascience, sostituendo la cartella nell'immagine del contenitore. Gli artifact di archivio (zip/tar/...) vengono decompressi e il contenuto viene presentato nella cartella /home/datascience/decompressed_artifact.

Crea una pipeline container - Avvio rapido

Per creare un passo della pipeline del contenitore, procedere come segue.

Costruire il container

  1. Utilizzare un'immagine esistente nel registro OCI o creare una nuova immagine utilizzando il Dockerfile di esempio. Di seguito è riportato il codice di esempio che crea un'immagine che consente di eseguire script 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"]
    Il Dockerfile presuppone che lo script simplest.py si trovi nella stessa cartella. Ecco il codice di esempio per 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. Eseguire il comando di build del docker:
    docker build -t byoc:1.0.0 .

Test del contenitore

Prima di eseguire il push dell'immagine in un registro container, è possibile eseguirne il test in locale.

  1. Esegui l'immagine localmente:
    docker run --rm -it -v "/home/lin/.oci:/home/datascience/.oci" byoc:1.0.0
  2. Verificare che l'output sia simile al seguente:
    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

Spostamento del contenitore in OCIR

Attenersi alla procedura descritta nella documentazione di Container Registry per generare un token di autenticazione per eseguire il login a OCIR.

  1. Eseguire il login a Oracle Container Repository (OCIR):
    docker login -u '<tenant_namespace>/<username>' <region>.ocir.io
    Per ulteriori informazioni, vedere la documentazione di Container Registry.
  2. Contrassegnare l'immagine del contenitore locale:
    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
    Per ulteriori informazioni, vedere la documentazione di Container Registry.
  3. Invia l'immagine con tag a 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
    Per ulteriori informazioni, vedere la documentazione di Container Registry.

Creazione della pipeline

Vedere la sezione Criteri pipeline per assicurarsi di disporre di criteri che consentano all'esecuzione della pipeline di estrarre le immagini dei container dal registro dei container.

Creare una pipeline per utilizzare il contenitore.
  1. Creare una pipeline con un nome appropriato, ad esempio BYOC Demo name.
  2. Selezionare Aggiungi passi della pipeline.
  3. Specificare un nome per il passaggio, ad esempio Step 1.
  4. Per utilizzare Bring Your Own Container, selezionare From container.
  5. In Configurazione contenitore, selezionare Configura.
  6. In Configurare l'ambiente del contenitore:
    1. Selezionare quickstart o byoc del repository dall'elenco. Se il repository si trova in un compartimento diverso, selezionare Modifica compartimento.
    2. Selezionare l'immagine iad.ocir.io/idtlxnfdweil/quickstart/byoc:1.0.0 dall'elenco.
    3. Selezionare Seleziona.
  7. Selezionare Salva.
  8. Facoltativo: definire il log.
  9. Selezionare Crea.

Abilitazione dei log della pipeline

Creare una pipeline e avviarla.
Questo task è facoltativo. Se non si desidera generare i log, è possibile ignorarlo.
  1. Dalla lista di pipeline, selezionare la pipeline che si desidera abilitare.
  2. Nella pagina dei dettagli della pipeline selezionare Log.
  3. Selezionare Abilita log.

Configurazioni supportate

Informazioni importanti sulle configurazioni supportate.

  • Le pipeline ML supportano solo le immagini dei container che risiedono nel registro OCI.
  • La dimensione dell'immagine del contenitore è limitata a 40 GB in formato non compresso.
  • L'utente che crea la risorsa Pipeline ML deve avere accesso all'immagine del contenitore nel registro OCI. In caso contrario, creare un criterio IAM di accesso utente prima di creare la risorsa Pipeline ML.

Immagini del contenitore su Apple Silicon M1 Mac

Per ulteriori informazioni, vedere Docker Image on Apple an M1 MacBook.

Digest immagine

Le immagini in un registro contenitore sono identificate da un repository, un nome e una tag. Inoltre, Docker offre a ogni versione di un'immagine un digest alfanumerico univoco. Quando si esegue il push di un'immagine contenitore aggiornata, si consiglia di assegnare all'immagine aggiornata un nuovo tag per identificarla, anziché riutilizzare un tag esistente, come procedura consigliata. Tuttavia, anche se si esegue il PUSH di un'immagine aggiornata e si assegna lo stesso nome e lo stesso tag di una versione precedente, la nuova versione sottoposta a PUSH ha un digest diverso rispetto alla versione precedente.

Quando si crea una risorsa pipeline, è necessario specificare il nome e la tag di una determinata versione di un'immagine. Per evitare incongruenze in seguito, le pipeline registrano anche il digest univoco di quella particolare versione dell'immagine. È inoltre possibile fornire il digest dell'immagine durante la creazione della risorsa pipeline.

Per impostazione predefinita, se si esegue il PUSH di una versione aggiornata di un'immagine nel registro Docker con lo stesso nome e lo stesso tag della versione originale dell'immagine, le pipeline continuano a utilizzare il digest originale per estrarre la versione originale dell'immagine. Questo potrebbe essere il comportamento richiesto. Tuttavia, se si desidera che le pipeline estraggano la versione successiva dell'immagine, è possibile modificare in modo esplicito il nome dell'immagine con il tag e il digest utilizzato dalle pipeline per identificare la versione dell'immagine da estrarre.