OpenShift AIで実現できるCI/CDプロセス

# 目的
OpenShift AIは、Openshiftを基盤にしたエンタープライズ向けAI/MLアプリ開発のためのプラットフォームである。具体的にどのようなことができるのかを知るために、Red Hatが提供するFraud Detectionのチュートリアルを使ってみたので、その結果を共有する。
使用したチュートリアルはこちら。

https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/index

# 使用した環境
Developer Sandbox：色々なRed Hatのプロダクトを無料で使用できる

https://developers.redhat.com/developer-sandbox

# アーキテクチャ図
![OpenShiftAIFraudDetection.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4052406/d5a598a1-214a-4ec3-9897-f70f6a85744c.png)
こちらの資料を参考に作成しました。

https://developers.redhat.com/articles/2024/08/06/red-hat-openshift-ai-and-machine-learning-operations#architecture_of_red_hat_openshift_ai?source=sso

# OpenShift AIで実現できるCI/CDプロセスの範囲
![OpenShiftAIFraudDetection-Processes.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4052406/b88f0f95-c0fc-4f6d-b0b6-b10469be3764.png)
こちらの資料を参考に作成しました。

https://developers.redhat.com/articles/2024/07/29/creating-ai-powered-service-detecting-fraudulent-card-transactions?source=sso#developer_experience_with_openshift

# チュートリアルの進め方
## プロジェクト内の各種リソース
- Workbenches
開発環境および実験環境のインスタンスです。通常、これらには、JupyterLabなどの IDE が含まれています。
- Pipelines
プロジェクト内で実行されるデータサイエンスパイプラインが含まれています。
- Models
リアルタイム推論用にトレーニング済みモデルを迅速に提供できます。データサイエンスプロジェクトごとに複数のモデルサーバーを使用できます。1 つのモデルサーバーで複数のモデルをホストできます。
- Clustre Storage
ワークベンチ内で作業中のファイルとデータを保持する永続ボリュームです。ワークベンチは 1 つ以上のクラスターストレージインスタンスにアクセスできます。
- Connections
S3 オブジェクトバケットなどのデータソースに接続するために必要な設定パラメーターが含まれています。

各種リソースの説明については、以下の記事から引用しました。

https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/setting-up-a-project-and-storage#setting-up-your-data-science-project

## 1. S3 object storageとConnectionsの作成
２つのS3バケットとConnecdtionsをOpenShift Consoleから作成できます。
~~~
oc apply -n <your-project-name/> -f https://github.com/rh-aiservices-bu/fraud-detection/raw/main/setup/setup-s3.yaml
~~~
- My Storage
このバケットをモデルとデータの保存に使用します。このバケットとその接続をノートブックおよびモデルサーバーに再利用できます。
- Pipelines Artifacts
このバケットをパイプラインアーティファクトのストレージとして使用します。パイプラインサーバーを作成する場合は、パイプラインアーティファクトバケットが必要です。このチュートリアルでは、わかりやすくするために、このバケットを最初のストレージバケットから分離して作成します。

各種リソースの説明については、以下の記事から引用しました。

https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/setting-up-a-project-and-storage#storing-data-with-connections

### Troubleshooting/Tips
- 既にあるリソースは作成されずにエラーとなるため、oc apply commandを複数回実行できる。
## 2. Pipeline Serverの設定
Elyra を使用した、OpenShift AI で実行できる視覚的なエンドツーエンドのパイプラインワークフローを作成するために、[Pipeline Serverの設定](https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/setting-up-a-project-and-storage#enabling-data-science-pipelines)を行います。
### Troubleshooting/Tips
- Pineline Serverの設定がエラーとなった場合、チュートリアルにある通り設定を削除する。それをやって再設定してもエラーになる場合、これまでに作成したすべてのリソースを削除して最初からやり直す。私は必ずそうする必要がありました。
## 3. Workbenchの作成
ワークベンチは、開発および実験環境のインスタンスです。ワークベンチを作成するときは、モデルの開発に必要なツールとライブラリーで最適化されたワークベンチイメージ (ノートブックイメージと呼ばれることもあります) を選択します。[こちらのページ](https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/creating-a-workbench-and-a-notebook#creating-a-workbench)を参照しながら作成できます。
チュートリアルで使用するJupyterLabのソースコードを、以下のPathからImportする。Current Branchをv2.18にすること。
~~~
https://github.com/rh-aiservices-bu/fraud-detection.git
~~~
### Troubleshooting/Tips
- Sandboxの場合は、何回もWorkbenchを作成するとCPU等のリソース不足でエラーとなった。その場合は30日間の無料期間が過ぎてプロジェクトごと削除されるのを待って再度やるしかなかった。
## 4. パイプラインによるワークフローの自動化
JupyterNoteBookを利用したModelのビルド、トレーニング、保存、デプロイメントのフローをElysaを利用して[自動化](https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/implementing-pipelines#automating-workflows-with-pipelines)できます。
### Troubleshooting/Tips
実行するとエラーとなってしまう。
~~~
Could not find a version that satisfies the requirement onnxruntime==1.20.1 (from versions: 1.7.0, 1.8.0, 1.8.1, 1.9.0, 1.10.0, 1.11.0, 1.11.1, 1.12.0, 1.12.1, 1.13.1, 1.14.0, 1.14.1, 1.15.0, 1.15.1, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.17.0, 1.17.1, 1.17.3, 1.18.0, 1.18.1, 1.19.0, 1.19.2)
~~~
JupyterLabのTerminalからonnx versionを見ると1.17.0であり、[公式サイト](https://onnxruntime.ai/docs/reference/compatibility.html#onnx-opset-support)によると1.16.1は1.20.0のRuntimeをサポートしているので、問題なさそうであるが。。解決できず。。
~~~
(app-root) pip list | grep 'onnx'
onnx                         1.17.0
onnxconverter-common         1.13.0
skl2onnx                     1.17.0
tf2onnx                      1.16.1
~~~
## 5. パイプラインのIaC化
[こちらの資料](https://docs.redhat.com/en/documentation/red_hat_openshift_ai_cloud_service/1/html/openshift_ai_tutorial_-_fraud_detection_example/implementing-pipelines#running-a-pipeline-generated-from-python-code)に沿って、パイプラインをIaC化できる。
### Troubleshooting/Tips
手順に沿ってやってみたが、２つ目のタスクである"train-model"でエラーになった。パイプラインによるワークフローの自動化で起きたエラーと同じである。
~~~
ERROR: Could not find a version that satisfies the requirement onnxruntime==1.20.1 (from versions: 1.7.0, 1.8.0, 1.8.1, 1.9.0, 1.10.0, 1.11.0, 1.11.1, 1.12.0, 1.12.1, 1.13.1, 1.14.0, 1.14.1, 1.15.0, 1.15.1, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.17.0, 1.17.1, 1.17.3, 1.18.0, 1.18.1, 1.19.0, 1.19.2)
ERROR: No matching distribution found for onnxruntime==1.20.1
~~~
## 6. モデルのトレーニングを複数の CPU に分散する

ここは具体的なユースケースが出てきた時に、テストしてみる。

# 参考文献
参考にした記事のリンクを、全て記事内に添付しました。
BostonのRed Hat Summit 2025に参加しますので、帰ってきたら投稿しようと思います！

当サイトに掲載している記事は個人の見解であり、所属する組織の公式見解ではありません。