Skip to content

Commit c542cf5

Browse files
authored
Merge pull request rh-aiservices-bu#61 from rh-aiservices-bu/feature/notebook-image
Workbench image, Pre-puller, RHOAI configuration
2 parents 760a449 + 38711a8 commit c542cf5

35 files changed

+5458
-3
lines changed

bootstrap/applicationset/applicationset-bootstrap.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ spec:
2727
repoURL: https://github.com/rh-aiservices-bu/insurance-claim-processing.git
2828
targetRevision: dev
2929
path: bootstrap/ic-shared-img-det
30+
- cluster: in-cluster
31+
name: ic-rhoai-configuration
32+
repoURL: https://github.com/rh-aiservices-bu/insurance-claim-processing.git
33+
targetRevision: feature/notebook-image
34+
path: bootstrap/ic-rhoai-configuration
3035
template:
3136
metadata:
3237
name: '{{name}}'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
---
2+
apiVersion: apps/v1
3+
kind: DaemonSet
4+
metadata:
5+
name: image-puller-workbench
6+
namespace: rhods-notebooks
7+
labels:
8+
k8s-app: image-puller
9+
spec:
10+
selector:
11+
matchLabels:
12+
name: image-puller
13+
template:
14+
metadata:
15+
labels:
16+
name: image-puller
17+
spec:
18+
containers:
19+
- name: image-puller
20+
image: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-workbench:1.0
21+
command: ["tail"]
22+
args: ["-f", "/dev/null"]
23+
resources:
24+
limits:
25+
memory: 20Mi
26+
requests:
27+
cpu: 10m
28+
memory: 10Mi
29+
---
30+
apiVersion: apps/v1
31+
kind: DaemonSet
32+
metadata:
33+
name: image-puller-ovms
34+
namespace: rhods-notebooks
35+
labels:
36+
k8s-app: image-puller
37+
spec:
38+
selector:
39+
matchLabels:
40+
name: image-puller
41+
template:
42+
metadata:
43+
labels:
44+
name: image-puller
45+
spec:
46+
containers:
47+
- name: oauth-proxy
48+
image: registry.redhat.io/openshift4/ose-oauth-proxy@sha256:4bef31eb993feb6f1096b51b4876c65a6fb1f4401fee97fa4f4542b6b7c9bc46
49+
command: ["tail"]
50+
args: ["-f", "/dev/null"]
51+
resources:
52+
limits:
53+
memory: 20Mi
54+
requests:
55+
cpu: 10m
56+
memory: 10Mi
57+
- name: model-server
58+
image: quay.io/opendatahub/openvino_model_server@sha256:2cbe8a48ab0bc6fe7fb76919bf33253e83a6218a9c4b486b744c3dcf30679616
59+
command: ["tail"]
60+
args: ["-f", "/dev/null"]
61+
resources:
62+
limits:
63+
memory: 20Mi
64+
requests:
65+
cpu: 10m
66+
memory: 10Mi
67+
- name: runtime-adapter
68+
image: registry.redhat.io/rhods/odh-modelmesh-runtime-adapter-rhel8@sha256:6bba39a3ab246803a1ab6fec1629246c10934faed3ed20add59aeb0945f29883
69+
command: ["tail"]
70+
args: ["-f", "/dev/null"]
71+
resources:
72+
limits:
73+
memory: 20Mi
74+
requests:
75+
cpu: 10m
76+
memory: 10Mi
77+
- name: modelmesh
78+
image: registry.redhat.io/rhods/odh-modelmesh-rhel8@sha256:2977caf3d7914f9d9c407ad3e01d78f783202c358766b70fca342560e1afe3df
79+
command: ["tail"]
80+
args: ["-f", "/dev/null"]
81+
resources:
82+
limits:
83+
memory: 20Mi
84+
requests:
85+
cpu: 10m
86+
memory: 10Mi
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
apiVersion: kustomize.config.k8s.io/v1beta1
3+
kind: Kustomization
4+
5+
commonLabels:
6+
component: ic-rhoai-configuration
7+
8+
resources:
9+
# wave 0
10+
# wave 1
11+
- workbench-imagestream.yaml
12+
- odhdashboardconfig.yaml
13+
- images-puller.yaml
14+
# wave 2
15+
16+
17+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
apiVersion: opendatahub.io/v1alpha
2+
kind: OdhDashboardConfig
3+
metadata:
4+
name: odh-dashboard-config
5+
namespace: redhat-ods-applications
6+
spec:
7+
modelServerSizes:
8+
- name: Standard
9+
resources:
10+
limits:
11+
cpu: '1'
12+
memory: 1Gi
13+
requests:
14+
cpu: '1'
15+
memory: 1Gi
16+
notebookController:
17+
enabled: true
18+
notebookNamespace: rhods-notebooks
19+
pvcSize: 1Gi
20+
gpuSetting: '4'
21+
notebookSizes:
22+
- name: Standard
23+
resources:
24+
limits:
25+
cpu: '2'
26+
memory: 6Gi
27+
requests:
28+
cpu: '1'
29+
memory: 4Gi
30+
templateOrder: []
31+
32+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
kind: ImageStream
2+
apiVersion: image.openshift.io/v1
3+
metadata:
4+
annotations:
5+
opendatahub.io/notebook-image-order: '01'
6+
opendatahub.io/notebook-image-url: >-
7+
https://github.com/rh-aiservices-bu/insurance-claim-processing/tree/main/bootstrap/workbench-image
8+
internal.config.kubernetes.io/previousNamespaces: default
9+
internal.config.kubernetes.io/previousKinds: ImageStream
10+
opendatahub.io/notebook-image-name: Insurance Claim Processing Lab Workbench
11+
internal.config.kubernetes.io/previousNames: Insurance Claim Processing Lab Workbench
12+
opendatahub.io/recommended-accelerators: '["nvidia.com/gpu"]'
13+
opendatahub.io/notebook-image-desc: >-
14+
Jupyter notebook image with all the libraries needed for the OpenShit AI Insurance Claim Lab.
15+
name: ic-workbench
16+
namespace: redhat-ods-applications
17+
labels:
18+
app.kubernetes.io/part-of: workbenches
19+
app.opendatahub.io/workbenches: 'true'
20+
component.opendatahub.io/name: notebooks
21+
opendatahub.io/component: 'true'
22+
opendatahub.io/notebook-image: 'true'
23+
spec:
24+
lookupPolicy:
25+
local: true
26+
tags:
27+
- name: '1.0'
28+
annotations:
29+
opendatahub.io/notebook-python-dependencies: >-
30+
[{"name":"PyTorch","version":"2.1.2"},{"name":"Langchain","version":"0.0.353"},{"name":"Ultralytics","version":"8.0.232"},]
31+
opendatahub.io/notebook-software: >-
32+
[{"name":"CUDA","version":"12.1"},{"name":"Python","version":"v3.11"}]
33+
openshift.io/imported-from: quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-workbench
34+
from:
35+
kind: DockerImage
36+
name: >-
37+
quay.io/rh-aiservices-bu/rhoai-lab-insurance-claim-workbench:1.0
38+
importPolicy:
39+
importMode: Legacy
40+
referencePolicy:
41+
type: Source

bootstrap/ic-shared-img-det/runtime.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -125,11 +125,11 @@ spec:
125125
name: ovms
126126
resources:
127127
limits:
128-
cpu: '2'
129-
memory: 8Gi
128+
cpu: '1'
129+
memory: 1Gi
130130
requests:
131131
cpu: '1'
132-
memory: 2Gi
132+
memory: 1Gi
133133
volumeMounts:
134134
- mountPath: /dev/shm
135135
name: shm
+172
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
FROM quay.io/sclorg/python-311-c9s:c9s
2+
3+
###########################
4+
# Deploy OS Packages #
5+
###########################
6+
7+
USER 0
8+
9+
WORKDIR /opt/app-root/bin/
10+
11+
COPY --chown=1001:0 os-ide/os-packages.txt ./os-ide/os-packages.txt
12+
13+
RUN echo "tsflags=nodocs" | tee -a /etc/yum.conf && \
14+
yum -y update && \
15+
yum install -y yum-utils && \
16+
yum-config-manager --enable crb && \
17+
yum install -y https://download.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \
18+
yum install -y $(cat os-ide/os-packages.txt) && \
19+
rm -f os-ide/os-packages.txt && \
20+
yum -y clean all --enablerepo='*' && \
21+
rm -rf /var/cache/dnf && \
22+
find /var/log -type f -name "*.log" -exec rm -f {} \;
23+
24+
#############################################
25+
# End of OS Packages #
26+
#############################################
27+
28+
###################################################################################################
29+
# CUDA 12.1 Layer, from https://gitlab.com/nvidia/container-images/cuda/-/blob/master/dist/12.1.1 #
30+
###################################################################################################
31+
32+
USER 0
33+
34+
ENV NVARCH x86_64
35+
ENV NVIDIA_REQUIRE_CUDA "cuda>=12.1 brand=tesla,driver>=470,driver<471 brand=unknown,driver>=470,driver<471 brand=nvidia,driver>=470,driver<471 brand=nvidiartx,driver>=470,driver<471 brand=geforce,driver>=470,driver<471 brand=geforcertx,driver>=470,driver<471 brand=quadro,driver>=470,driver<471 brand=quadrortx,driver>=470,driver<471 brand=titan,driver>=470,driver<471 brand=titanrtx,driver>=470,driver<471 brand=tesla,driver>=525,driver<526 brand=unknown,driver>=525,driver<526 brand=nvidia,driver>=525,driver<526 brand=nvidiartx,driver>=525,driver<526 brand=geforce,driver>=525,driver<526 brand=geforcertx,driver>=525,driver<526 brand=quadro,driver>=525,driver<526 brand=quadrortx,driver>=525,driver<526 brand=titan,driver>=525,driver<526 brand=titanrtx,driver>=525,driver<526"
36+
ENV NV_CUDA_CUDART_VERSION 12.1.105-1
37+
38+
COPY cuda.repo-x86_64 /etc/yum.repos.d/cuda.repo
39+
40+
RUN NVIDIA_GPGKEY_SUM=d0664fbbdb8c32356d45de36c5984617217b2d0bef41b93ccecd326ba3b80c87 && \
41+
curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/rhel9/${NVARCH}/D42D0685.pub | sed '/^Version/d' > /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA && \
42+
echo "$NVIDIA_GPGKEY_SUM /etc/pki/rpm-gpg/RPM-GPG-KEY-NVIDIA" | sha256sum -c --strict -
43+
44+
ENV CUDA_VERSION 12.1.1
45+
46+
# For libraries in the cuda-compat-* package: https://docs.nvidia.com/cuda/eula/index.html#attachment-a
47+
RUN yum upgrade -y && yum install -y \
48+
cuda-cudart-12-1-${NV_CUDA_CUDART_VERSION} \
49+
cuda-compat-12-1 \
50+
&& ln -s cuda-12.1 /usr/local/cuda \
51+
&& yum -y clean all --enablerepo='*' && \
52+
rm -rf /var/cache/dnf && \
53+
find /var/log -type f -name "*.log" -exec rm -f {} \;
54+
55+
# nvidia-docker 1.0
56+
RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf && \
57+
echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf
58+
59+
ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
60+
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
61+
62+
COPY NGC-DL-CONTAINER-LICENSE /
63+
64+
# nvidia-container-runtime
65+
ENV NVIDIA_VISIBLE_DEVICES all
66+
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility
67+
68+
ENV NV_CUDA_LIB_VERSION 12.1.1-1
69+
70+
ENV NV_NVTX_VERSION 12.1.105-1
71+
ENV NV_LIBNPP_VERSION 12.1.0.40-1
72+
ENV NV_LIBNPP_PACKAGE libnpp-12-1-${NV_LIBNPP_VERSION}
73+
ENV NV_LIBCUBLAS_VERSION 12.1.3.1-1
74+
ENV NV_LIBNCCL_PACKAGE_NAME libnccl
75+
ENV NV_LIBNCCL_PACKAGE_VERSION 2.17.1-1
76+
ENV NV_LIBNCCL_VERSION 2.17.1
77+
ENV NCCL_VERSION 2.17.1
78+
ENV NV_LIBNCCL_PACKAGE ${NV_LIBNCCL_PACKAGE_NAME}-${NV_LIBNCCL_PACKAGE_VERSION}+cuda12.1
79+
80+
RUN yum install -y \
81+
cuda-libraries-12-1-${NV_CUDA_LIB_VERSION} \
82+
cuda-nvtx-12-1-${NV_NVTX_VERSION} \
83+
${NV_LIBNPP_PACKAGE} \
84+
libcublas-12-1-${NV_LIBCUBLAS_VERSION} \
85+
${NV_LIBNCCL_PACKAGE} \
86+
&& yum -y clean all --enablerepo='*' && \
87+
rm -rf /var/cache/dnf && \
88+
find /var/log -type f -name "*.log" -exec rm -f {} \;
89+
90+
# Set this flag so that libraries can find the location of CUDA
91+
ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/usr/local/cuda
92+
93+
# CuDNN
94+
ENV NV_CUDNN_VERSION 8.9.0.131-1
95+
ENV NV_CUDNN_PACKAGE libcudnn8-${NV_CUDNN_VERSION}.cuda12.1
96+
97+
RUN yum install -y \
98+
${NV_CUDNN_PACKAGE} \
99+
&& yum -y clean all --enablerepo='*' && \
100+
rm -rf /var/cache/dnf && \
101+
find /var/log -type f -name "*.log" -exec rm -f {} \;
102+
103+
#############################################
104+
# End of CUDA 12.1 Layer #
105+
#############################################
106+
107+
######################################
108+
# Deploy Python packages and Jupyter #
109+
######################################
110+
111+
USER 1001
112+
113+
WORKDIR /opt/app-root/bin
114+
115+
# Copy packages list
116+
COPY --chown=1001:0 requirements.txt ./
117+
118+
# Copy notebook launcher and utils
119+
COPY --chown=1001:0 utils utils/
120+
COPY --chown=1001:0 start-notebook.sh ./
121+
122+
# Copy Elyra setup to utils so that it's sourced at startup
123+
COPY --chown=1001:0 setup-elyra.sh ./utils/
124+
125+
# Install packages and cleanup
126+
# (all commands are chained to minimize layer size)
127+
RUN echo "Installing softwares and packages" && \
128+
# Install Python packages \
129+
pip install --no-cache-dir --no-dependencies -r requirements.txt && \
130+
# setup path for runtime configuration \
131+
mkdir /opt/app-root/runtimes && \
132+
# switch to Data Science Pipeline \
133+
cp utils/pipeline-flow.svg /opt/app-root/lib/python3.11/site-packages/elyra/static/icons/kubeflow.svg && \
134+
sed -i "s/Kubeflow Pipelines/Data Science/g" /opt/app-root/lib/python3.11/site-packages/elyra/pipeline/runtime_type.py && \
135+
sed -i "s/Kubeflow Pipelines/Data Science Pipelines/g" /opt/app-root/lib/python3.11/site-packages/elyra/metadata/schemas/kfp.json && \
136+
sed -i "s/kubeflow-service/data-science-pipeline-service/g" /opt/app-root/lib/python3.11/site-packages/elyra/metadata/schemas/kfp.json && \
137+
sed -i "s/\"default\": \"Argo\",/\"default\": \"Tekton\",/g" /opt/app-root/lib/python3.11/site-packages/elyra/metadata/schemas/kfp.json && \
138+
# Workaround for passing ssl_sa_cert and to ensure that Elyra redirects to a correct pipeline run URL \
139+
patch /opt/app-root/lib/python3.11/site-packages/elyra/pipeline/kfp/kfp_authentication.py -i utils/kfp_authentication.patch && \
140+
patch /opt/app-root/lib/python3.11/site-packages/elyra/pipeline/kfp/processor_kfp.py -i utils/processor_kfp.patch && \
141+
# switch to Data Science Pipeline in component catalog \
142+
DIR_COMPONENT="/opt/app-root/lib/python3.11/site-packages/elyra/metadata/schemas/local-directory-catalog.json" && \
143+
FILE_COMPONENT="/opt/app-root/lib/python3.11/site-packages/elyra/metadata/schemas/local-file-catalog.json" && \
144+
URL_COMPONENT="/opt/app-root/lib/python3.11/site-packages/elyra/metadata/schemas/url-catalog.json" && \
145+
tmp=$(mktemp) && \
146+
jq '.properties.metadata.properties.runtime_type = input' $DIR_COMPONENT utils/component_runtime.json > "$tmp" && mv "$tmp" $DIR_COMPONENT && \
147+
jq '.properties.metadata.properties.runtime_type = input' $FILE_COMPONENT utils/component_runtime.json > "$tmp" && mv "$tmp" $FILE_COMPONENT && \
148+
jq '.properties.metadata.properties.runtime_type = input' $URL_COMPONENT utils/component_runtime.json > "$tmp" && mv "$tmp" $URL_COMPONENT && \
149+
sed -i "s/metadata.metadata.runtime_type/\"DATA_SCIENCE_PIPELINES\"/g" /opt/app-root/share/jupyter/labextensions/@elyra/pipeline-editor-extension/static/lib_index_js.*.js && \
150+
# Remove Elyra logo from JupyterLab because this is not a pure Elyra image \
151+
sed -i "s/widget\.id === \x27jp-MainLogo\x27/widget\.id === \x27jp-MainLogo\x27 \&\& false/" /opt/app-root/share/jupyter/labextensions/@elyra/theme-extension/static/lib_index_js.*.js && \
152+
# Replace Notebook's launcher, "(ipykernel)" with Python's version 3.x.y \
153+
sed -i -e "s/Python.*/$(python --version | cut -d '.' -f-2)\",/" /opt/app-root/share/jupyter/kernels/python3/kernel.json && \
154+
# Remove default Elyra runtime-images \
155+
rm /opt/app-root/share/jupyter/metadata/runtime-images/*.json && \
156+
# Fix permissions to support pip in Openshift environments \
157+
chmod -R g+w /opt/app-root/lib/python3.11/site-packages && \
158+
fix-permissions /opt/app-root -P
159+
160+
# Copy Elyra runtime-images definitions and set the version
161+
COPY --chown=1001:0 runtime-images/ /opt/app-root/share/jupyter/metadata/runtime-images/
162+
RUN sed -i "s/RELEASE/2023c/" /opt/app-root/share/jupyter/metadata/runtime-images/*.json
163+
164+
# Jupyter Server config to allow hidden files/folders in explorer. Ref: https://jupyterlab.readthedocs.io/en/latest/user/files.html#displaying-hidden-files
165+
# Jupyter Lab config to hide disabled exporters (WebPDF, Qtpdf, Qtpng)
166+
COPY --chown=1001:0 etc/ /opt/app-root/etc/jupyter/
167+
168+
WORKDIR /opt/app-root/src
169+
170+
ENTRYPOINT ["start-notebook.sh"]
171+
172+

0 commit comments

Comments
 (0)