BYOC (Bring Your Own Container) para Pipelines

Além de definir etapas do pipeline com base em jobs e scripts, você pode usar imagens de contêiner personalizadas para definir o runtime da etapa.

Você pode selecionar a imagem do contêiner, o comando ou o ponto de entrada para execução do contêiner. Você pode fornecer o código personalizado em um script ou em um arquivo compactado, o que permite atualizar o código sem recriar a imagem.

Configuração da Etapa BYOC

  1. (Opcional) Selecione Do contêiner.
  2. Em Configuração do contêiner, selecione Configurar.
  3. No painel Configurar seu ambiente de contêiner:
    1. Selecione um repositório na lista. Se o repositório estiver em outro compartimento, selecione Alterar compartimento.
    2. Selecione uma imagem na lista.
    3. (Opcional) Informe um ponto de entrada. Para adicionar outro, selecione o parâmetro +Add.
    4. (Opcional) Insira um CMD. Para adicionar outro, selecione o parâmetro +Add.
    5. (Opcional) Informe uma compilação de imagem.
    6. (Opcional) Se estiver usando a verificação de assinatura, digite o OCID da assinatura da imagem. Por exemplo, ocid1.containerimagesignature.oc1.iad.aaaaaaaaab....
    7. Selecione Selecionar.
  4. (Opcional) Faça upload do artefato de etapa arrastando-o para a caixa. Essa etapa será opcional somente se BYOC estiver configurado.

Artefato de Modelo

O upload de um artefato de etapa ao usar BYOC é opcional. No entanto, ele permite alterar o código que é executado dentro do contêiner sem recriar a imagem.

Os artefatos de etapa são montados no contêiner para a pasta /home/datascience/. Se um artefato for um arquivo compactado, seu conteúdo será extraído para a pasta /home/datascience/decompressed_artifact.

Imagem comum do docker
É conveniente criar uma imagem de contêiner genérica com o ambiente necessário (por exemplo, Python 3.8 e bibliotecas básicas, conforme mostrado no Início rápido) e adicionar scripts Python posteriormente como artefatos de etapa.
Artefatos personalizados - substituição de pasta
Quando você usa um artefato de etapa personalizado, o serviço monta um volume com o artefato na pasta /home/datascience, substituindo a pasta na imagem do contêiner. Os artefatos de arquivamento (zip/tar/...) são descompactados e o conteúdo é apresentado na pasta /home/datascience/decompressed_artifact.

Criar um Pipeline de Contêiner - Início Rápido

Siga estas etapas para criar uma etapa do pipeline de contêiner.

Criando o Contêiner

  1. Use uma imagem existente no OCI Registry ou crie uma nova imagem usando o Dockerfile de amostra. Aqui está o exemplo de código que cria uma imagem que permite executar 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"]
    O Dockerfile pressupõe que o script simplest.py esteja na mesma pasta. Veja a seguir um exemplo de código para 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. Execute o comando docker build:
    docker build -t byoc:1.0.0 .

Testando o Contêiner

Antes de enviar a imagem para um registro de contêiner, você pode testá-la localmente.

  1. Execute a imagem localmente:
    docker run --rm -it -v "/home/lin/.oci:/home/datascience/.oci" byoc:1.0.0
  2. Confirme se a saída é semelhante a:
    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

Enviando o Contêiner para o OCIR

Siga as etapas na documentação do Container Registry para gerar um token de autenticação para fazer log-in no OCIR.

  1. Faça log-in no Oracle Container Repository (OCIR):
    docker login -u '<tenant_namespace>/<username>' <region>.ocir.io
    Para obter mais informações, consulte a documentação do Container Registry.
  2. Marque a imagem do contêiner 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
    Para obter mais informações, consulte a documentação do Container Registry.
  3. Envie a imagem marcada para o 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
    Para obter mais informações, consulte a documentação do Container Registry.

Criando o Pipeline

Consulte a seção Políticas do Pipeline para garantir que você tenha políticas que permitam que o pipeline execute imagens de contêiner de extração de recursos do registro de contêiner.

Crie um pipeline para usar o contêiner.
  1. Crie um pipeline com um nome apropriado, por exemplo, BYOC Demo name.
  2. Selecione Adicionar etapas de pipeline.
  3. Atribua um nome à etapa, por exemplo, Step 1.
  4. Para usar o Bring Your Own Container, selecione Do contêiner.
  5. Em Configuração do contêiner, selecione Configurar.
  6. Em Configure seu ambiente de contêiner:
    1. Selecione o início rápido ou byoc do repositório na lista. Se o repositório estiver em outro compartimento, selecione Alterar compartimento.
    2. Selecione a imagem, iad.ocir.io/idtlxnfdweil/quickstart/byoc:1.0.0, na lista.
    3. Selecione Selecionar.
  7. Selecione Salvar.
  8. Opcional: Definir log.
  9. Selecione Criar.

Ativando os Logs de Pipeline

Crie um pipeline e inicie-o.
Essa tarefa é opcional, se você não quiser gerar os logs, poderá ignorá-la.
  1. Na lista de pipelines, selecione o pipeline que você deseja ativar.
  2. Na página de detalhes do pipeline, selecione Logs.
  3. Selecione Ativar logs.

Configurações Suportadas

Informações importantes sobre configurações suportadas.

  • Os Pipelines de ML só suportam imagens de contêiner que residem no OCI Registry.
  • O tamanho da imagem do contêiner é limitado a 40 GB em formato descompactado.
  • O usuário que cria o recurso Pipeline de ML deve ter acesso à imagem do contêiner no OCI Registry. Caso contrário, crie uma política de IAM de acesso do usuário antes de criar o recurso de Pipeline de ML.

Imagens de contêiner no Apple Silicon M1 Mac

Para obter mais informações, consulte Imagem do Docker na Apple e M1 MacBook.

Compilação de imagem

As imagens de um registro de contêiner são identificadas por repositório, nome e uma tag. Além disso, o Docker fornece a cada versão de uma imagem uma compilação alfanumérica exclusiva. Ao enviar uma imagem de contêiner atualizada, recomendamos fornecer à imagem atualizada uma nova tag para identificá-la, em vez de reutilizar uma tag existente, como prática recomendada. No entanto, mesmo que você envie uma imagem atualizada e dê a ela o mesmo nome e tag de uma versão anterior, a versão recém-promovida tem outra compilação da versão anterior.

Ao criar um recurso de pipeline, você especifica o nome e a tag de uma versão específica de uma imagem. Para evitar inconsistências posteriormente, os pipelines também registram a compilação exclusiva dessa versão específica da imagem. Você também pode fornecer a compilação da imagem ao criar o recurso de pipeline.

Por padrão, se você enviar uma versão atualizada de uma imagem para o registro do Docker com o mesmo nome e tag da versão original da imagem, os pipelines continuarão usando a compilação original para extrair a versão original da imagem. Pode ser que este seja o comportamento exigido. No entanto, se você quiser que os pipelines extraiam a versão mais recente da imagem, poderá alterar explicitamente o nome da imagem com a tag e a compilação que os pipelines usam para identificar qual versão da imagem será extraída.