Skip to content

Convert to UBI conformant container images #341

@ckadner

Description

@ckadner

Describe the feature or enhancement request:

Convert container images used in MLX and MLX Katalog to UBI.

Announced at Red Hat Summit 2019, Red Hat Universal Base Images (UBI) are OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable. Like previous base images, they are built from portions of Red Hat Enterprise Linux. UBI images can be obtained from the Red Hat container catalog, and be built and deployed anywhere.

UBI is designed to be a foundation for cloud-native and web applications use cases developed in containers. You can build a containerized application using UBI, push it to your choice of registry server, easily share it with others - and because it’s freely redistributable — even deploy it on non-Red Hat platforms. And since it’s built on Red Hat Enterprise Linux, UBI is a platform that is reliable, secure, and performant.


Where do we currently use potentially non-UBI-compliant images?

  • MLX API, pipeline code templates (reusing component samples from katalog):

    $ grep "image=" api/server/swagger_server/code_templates/*.py
    
    api/server/swagger_server/code_templates/run_notebook.TEMPLATE.py:          image="${image}")
    api/server/swagger_server/code_templates/run_notebook_with_dataset...py:    image="${image}")
    api/server/swagger_server/code_templates/serve_kfserving.TEMPLATE.py:       image='tomcli/model-config',
    api/server/swagger_server/code_templates/serve_knative.TEMPLATE.py:         image='tomcli/model-config',
    api/server/swagger_server/code_templates/serve_knative.TEMPLATE.py:         image='aipipeline/knative-model-deploy',
    api/server/swagger_server/code_templates/serve_kubernetes.TEMPLATE.py:      image='aipipeline/model-config',
    api/server/swagger_server/code_templates/serve_kubernetes.TEMPLATE.py:      image='aipipeline/deployment-k8s-remote',
    api/server/swagger_server/code_templates/train_watsonml.TEMPLATE.py:        image='tomcli/model-config:latest',
    api/server/swagger_server/code_templates/train_watsonml_w_credentials...py: image='aipipeline/model-config:latest',
    
  • MLX Katalog, components (some being used in code_templates above):

    $ grep -r "image: " component-samples/**/*.yaml
    
    component-samples/echo/component.yaml:                  image: alpine:latest
    component-samples/dlf/component.yaml:                   image: aipipeline/dlf-to-pvc:0.0.1
    component-samples/kube-model-deployment/component.yaml: image: docker.io/aipipeline/k8s-model-deploy:latest
    component-samples/model-config/component.yaml:          image: aipipeline/model-config:latest
    component-samples/create-secret/component.yaml:         image: docker.io/aipipeline/wml-config:latest
    component-samples/dax-to-dlf/component.yaml:            image: ckadner/dax-to-dlf:0.0.9
    
  • MLX Katalog, pipelines:

    $ grep -r "image: " pipeline-samples/*.yaml
    
    pipeline-samples/calculation-pipeline.yaml:          image: python:3.7
    pipeline-samples/calculation-pipeline.yaml:          image: tensorflow/tensorflow:1.11.0-py3
    pipeline-samples/calculation-pipeline.yaml:          image: python:3.7
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/flip-coin-pipeline.yaml:          image: python:alpine3.6
    pipeline-samples/katib-pipeline.yaml:          image: docker.io/kubeflowkatib/kubeflow-pipelines-launcher
    pipeline-samples/katib-pipeline.yaml:          image: library/bash:4.4.23
    pipeline-samples/nested-pipeline.yaml:          image: google/cloud-sdk
    pipeline-samples/nested-pipeline.yaml:          image: python:3.5-jessie
    pipeline-samples/nested-pipeline.yaml:          image: google/cloud-sdk
    pipeline-samples/trusted-ai-pipeline.yaml:                    image: aipipeline/gender-classification:latest
    pipeline-samples/trusted-ai-pipeline.yaml:          image: $(params.image)
    pipeline-samples/trusted-ai-pipeline.yaml:          image: aipipeline/bias-detector:pytorch
    pipeline-samples/trusted-ai-pipeline.yaml:          image: aipipeline/robustness-evaluation:pytorch
    pipeline-samples/wml-pipeline.yaml:          image: docker.io/aipipeline/wml-config:latest
    pipeline-samples/wml-pipeline.yaml:          image: docker.io/aipipeline/wml-train:latest
    pipeline-samples/wml-pipeline.yaml:          image: docker.io/aipipeline/wml-store:latest
    pipeline-samples/wml-pipeline.yaml:          image: docker.io/aipipeline/wml-deploy:latest
    
  • MLX Katalog, models:

    $ grep -r "image_url: " model-samples/**/*.yaml
    
    model-samples/codenet-language-classification/codenet-language-classification.yaml: container_image_url: "codait/codenet-language-classifier"
    model-samples/max-human-pose-estimator/max-human-pose-estimator.yaml:               container_image_url: "quay.io/codait/max-human-pose-estimator:latest"
    model-samples/max-image-caption-generator/max-image-caption-generator.yaml:         container_image_url: "quay.io/codait/max-image-caption-generator:latest"
    model-samples/max-image-resolution-enhancer/max-image-resolution-enhancer.yaml:     container_image_url: "quay.io/codait/max-image-resolution-enhancer:latest"
    model-samples/max-named-entity-tagger/max-named-entity-tagger.yaml:                 container_image_url: "quay.io/codait/max-named-entity-tagger:latest"
    model-samples/max-object-detector/max-object-detector.yaml:                         container_image_url: "quay.io/codait/max-object-detector:latest"
    model-samples/max-ocr/max-ocr.yaml:                                                 container_image_url: "quay.io/codait/max-ocr:latest"
    model-samples/max-question-answering/max-question-answering.yaml:                   container_image_url: "quay.io/codait/max-question-answering:latest"
    model-samples/max-recommender/max-recommender.yaml:                                 container_image_url: "quay.io/codait/max-recommender:latest"
    model-samples/max-text-sentiment-classifier/max-text-sentiment-classifier.yaml:     container_image_url: "quay.io/codait/max-text-sentiment-classifier:latest"
    model-samples/max-toxic-comment-classifier/max-toxic-comment-classifier.yaml:       container_image_url: "quay.io/codait/max-toxic-comment-classifier:latest"
    model-samples/max-weather-forecaster/max-weather-forecaster.yaml:                   container_image_url: "quay.io/codait/max-weather-forecaster:latest"
    
  • MLX Katalog, notebooks:

    $ grep -r "image: " notebook-samples/*.yaml --exclude template.yaml
    
    notebook-samples/JFK-airport.yaml:  image: 'tensorflow/tensorflow:2.7.0'
    notebook-samples/aif-bias.yaml:     image: 'tensorflow/tensorflow:2.3.0'
    notebook-samples/art-detector.yaml: image: 'tensorflow/tensorflow:2.3.0'
    notebook-samples/art-poison.yaml:   image: 'tensorflow/tensorflow:2.2.0'
    notebook-samples/codenet-lang.yaml: image: 'tensorflow/tensorflow:2.7.0'
    notebook-samples/codenet-mlm.yaml:  image: 'tensorflow/tensorflow:2.7.0'
    notebook-samples/qiskit-ml.yaml:    image: 'tensorflow/tensorflow:2.7.0'
    notebook-samples/qiskit-nncr.yam    image: 'tensorflow/tensorflow:2.7.0'
    

/cc @jbusche

Related issues:

machine-learning-exchange/katalog#73

Further reading:

https://developers.redhat.com/blog/2019/07/29/red-hat-universal-base-image-how-it-works-in-3-minutes-or-less#what_is_ubi_

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions