パイプラインのコンテナ持込み(BYOC)

ジョブおよびスクリプトに基づくパイプライン・ステップの定義とは別に、カスタム・コンテナ・イメージを使用してステップ・ランタイムを定義できます。

コンテナ実行用のコンテナ・イメージ、コマンドまたはエントリ・ポイントを選択できます。スクリプトまたは圧縮アーカイブにカスタム・コードを指定できます。これにより、イメージを再構築せずにコードを更新できます。

BYOCステップ構成

  1. (オプション)「コンテナから」を選択します。
  2. 「コンテナ構成」で、「構成」を選択します。
  3. 「コンテナ環境の構成」パネルで:
    1. リストからリポジトリを選択します。リポジトリが別のコンパートメントにある場合は、「コンパートメントの変更」を選択します。
    2. リストからイメージを選択してください。
    3. (オプション)エントリポイントを入力します。もう1つ追加するには、+Addパラメータを選択します。
    4. (オプション) CMDを入力します。もう1つ追加するには、+Addパラメータを選択します。
    5. (オプション)イメージ・ダイジェストを入力します。
    6. (オプション)署名検証を使用する場合は、イメージ署名のOCIDを入力します。たとえば、ocid1.containerimagesignature.oc1.iad.aaaaaaaaab...です。
    7. 「選択」を選択します。
  4. (オプション)ステップ・アーティファクトをボックスにドラッグしてアップロードします。このステップは、BYOCが構成されている場合にのみオプションです。

モデル・アーティファクト

BYOCの使用時のステップ・アーティファクトのアップロードはオプションです。ただし、イメージを再構築せずに、コンテナ内で実行されるコードを変更できます。

ステップ・アーティファクトは、コンテナ内でフォルダ/home/datascience/にマウントされます。アーティファクトがアーカイブの場合、そのコンテンツはフォルダ/home/datascience/decompressed_artifactに抽出されます。

共通dockerイメージ
必要な環境(クイック・スタートに示すようにPython 3.8および基本ライブラリなど)で汎用コンテナ・イメージを構築し、後でステップ・アーティファクトとしてPythonスクリプトを追加すると便利です。
カスタム・アーティファクト- フォルダのオーバーライド
カスタム・ステップ・アーティファクトを使用すると、サービスはアーティファクトを含むボリュームを/home/datascienceフォルダにマウントし、コンテナ・イメージ内のフォルダをオーバーライドします。アーカイブ・アーティファクト(zip/tar/...)は解凍され、コンテンツはフォルダ/home/datascience/decompressed_artifactに表示されます。

コンテナ・パイプラインの作成- クイック・スタート

コンテナ・パイプライン・ステップを作成するには、次のステップに従います。

コンテナの構築

  1. OCIレジストリの既存のイメージを使用するか、サンプルのDockerfileを使用して新しいイメージを作成します。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"]
    Dockerfileは、スクリプトsimplest.pyが同じフォルダ内にあることを前提としています。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. docker buildコマンドを実行します。
    docker build -t byoc:1.0.0 .

コンテナのテスト

イメージをコンテナ・レジストリにプッシュする前に、ローカルでテストできます。

  1. イメージをローカルに実行します:
    docker run --rm -it -v "/home/lin/.oci:/home/datascience/.oci" byoc:1.0.0
  2. 次のように出力されていることを確認します。
    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

コンテナのOCIRへのプッシュ

コンテナ・レジストリのドキュメントのステップに従って、認証トークンを生成してOCIRにログインします。

  1. Oracle Container Repository (OCIR)にログインします。
    docker login -u '<tenant_namespace>/<username>' <region>.ocir.io
    詳細は、コンテナ・レジストリのドキュメントを参照してください。
  2. ローカル・コンテナ・イメージにタグを付けます。
    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
    詳細は、コンテナ・レジストリのドキュメントを参照してください。
  3. タグ付けされたイメージを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
    詳細は、コンテナ・レジストリのドキュメントを参照してください。

パイプラインの作成

パイプラインにコンテナ・レジストリからリソース・プル・コンテナ・イメージを実行させるポリシーがあることを確認するには、「パイプライン・ポリシー」の項を参照してください。

コンテナを使用するパイプラインを作成します。
  1. BYOC Demo nameなど、適切な名前でパイプラインを作成します。
  2. 「パイプライン・ステップの追加」を選択します。
  3. ステップにStep 1などの名前を指定します。
  4. 「Bring Your Own Container」を使用するには、「From container」を選択します。
  5. 「コンテナ構成」で、「構成」を選択します。
  6. 「コンテナ環境の構成」で:
    1. リストからリポジトリ・クイックスタートまたはbyocを選択します。リポジトリが別のコンパートメントにある場合は、「コンパートメントの変更」を選択します。
    2. リストからイメージiad.ocir.io/idtlxnfdweil/quickstart/byoc:1.0.0を選択します。
    3. 「選択」を選択します。
  7. 「保存」を選択します。
  8. オプション: ロギングを定義します。
  9. 「作成」を選択します。

パイプライン・ログの有効化

パイプラインを作成し、開始します。
このタスクはオプションであり、ログを生成しない場合は無視できます。
  1. パイプラインのリストから、有効にするパイプラインを選択します。
  2. パイプラインの詳細ページで、「ログ」を選択します。
  3. 「ログの有効化」を選択します。

サポートされている構成

サポートされている構成に関する重要な情報。

  • MLパイプラインは、OCIレジストリに存在するコンテナ・イメージのみをサポートします。
  • コンテナ・イメージのサイズは、非圧縮形式では40 GBに制限されます。
  • MLパイプライン・リソースを作成するユーザーは、OCIレジストリのコンテナ・イメージにアクセスできる必要があります。そうでない場合は、MLパイプライン・リソースを作成する前に、ユーザー・アクセスIAMポリシーを作成します。

Apple Silicon M1 Macのコンテナ画像

詳細は、AppleのDockerイメージ(M1 MacBook)を参照してください。

イメージ・デジタル

コンテナ・レジストリ内のイメージは、リポジトリ、名前およびタグによって識別されます。また、Dockerでは、イメージの各バージョンに一意の英数字の消化が付与されます。更新されたコンテナ・イメージをプッシュする場合は、ベスト・プラクティスとして、既存のタグを再利用するのではなく、更新されたイメージに特定するための新しいタグを提供することをお薦めします。ただし、更新されたイメージをプッシュして、そのイメージに以前のバージョンと同じ名前およびタグを付ける場合でも、新しくプッシュされたバージョンのダイジェストは、以前のバージョンとは異なります。

パイプライン・リソースを作成する場合は、イメージの特定のバージョンの名前とタグを指定します。後で矛盾を回避するために、パイプラインは、その特定のバージョンのイメージの一意のダイジェストも記録します。パイプライン・リソースの作成時にイメージのダイジェストを指定することもできます。

デフォルトでは、更新されたバージョンのイメージを、元のバージョンのイメージと同じ名前およびタグを使用してDockerレジストリにプッシュすると、パイプラインでは、元のダイジェストを使用してイメージの元のバージョンがプルされます。これが必要な動作である場合もあります。ただし、パイプラインでより新しいバージョンのイメージをプルする場合は、パイプラインがプルするイメージのバージョンを識別するために使用するタグおよびダイジェストを使用してイメージ名を明示的に変更できます。