Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert to UBI conformant container images #341

Open
ckadner opened this issue Jun 17, 2022 · 0 comments
Open

Convert to UBI conformant container images #341

ckadner opened this issue Jun 17, 2022 · 0 comments

Comments

@ckadner
Copy link
Member

ckadner commented Jun 17, 2022

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_

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant