はじめに
こんにちはサイオステクノロジーの小野です。私は今年入社したばかりの新卒社員なので今年一年は新しいことしか学んできませんでした。その学んできた中でもOpenShift AIは一番インフラエンジニアとして学びになったと感じました。(あと単純にAIが好きだったので一番楽しかったです。)今まで、様々なソフトウェアに対してアプリケーション目線のことしか考えてきませんでしたが、OpenShift AIの勉強を通じて、そのソフトウェアがどのようにして動いているのか、内部のアプリケーションがどのようにして実行されているのかインフラ目線で見る意識が養われた気がします。
今回はそんなOpenShift AIを利用して機械学習を行う方法について解説します。
前回はOpenShift AIを導入してワークベンチのJupyterNotebookを起動するところまで解説したので、まだ見ていない方は先にそちらをご覧ください。
Openshift AIでの機械学習
今回はOpenShift AIのワークベンチ機能とデータ接続機能を用いて実際に機械学習を行います。
ワークベンチは機械学習のモデルを作成、操作するために隔離された作業環境です。MLOpsにおけるデータの分析やモデルの学習、評価、検証を行うために用いられます。
データ接続はOpenShift AIの各種機能を外部のS3オブジェクトストレージに接続するための機能です。
今回構築する機械学習モデル
機械学習におけるモデルとは、あるデータを入力するとそのデータに応じた出力をする数学的関数のことを言います。
今回はMNISTという数字の画像を入力して、その画像が何の数字かを出力するモデルを構築します。
機械学習をやってみる
全体的な作業流れ
最初にOpenShiftAIでプログラムを実行するための環境を設定します。そのために、OpenShiftAIのデータサイエンスプロジェクト、データ接続、ワークベンチをそれぞれ設定します。その次にサンプルプログラムをJupyterLabにアップロードします。最後にプログラムを実行すると、簡単な機械学習を行うことができます。
本環境の条件
- OpenShift情報
- OpenShift:4.17
- OpenShift AI:2.13
- ストレージ情報
- AWS(S3)
- S3を操作するためのIAMと作業用バケットを事前に作成してください。
- AWS(S3)
- プログラムソース
- 0_dataupload.ipynb
- 1_dataprocessed.ipynb
- 2_training.ipynb
環境構築手順
データサイエンスプロジェクト作成
最初にデータサイエンスプロジェクトを作成します。この作業は前回の記事の「Data Science Projects作成」を参考にして設定してください。
データ接続作成
次にデータ接続設定を行います。データサイエンスプロジェクトの詳細画面からData connectionsに移動します。Add data connectionを押下して、設定は以下のようにします:
Name | test-connection |
Access key | S3へのアクセス権限があるIAMのアクセスキー |
Secret key | S3へのアクセス権限があるIAMのシークレットキー |
Endpoint | https://s3.<S3のリージョン>.amazonaws.com |
Region | S3のリージョン |
Bucket | S3に作成したバケット名 |
ワークベンチ作成
次にワークベンチを作成します。詳細は前回の記事の「ワークベンチ作成」を参考にしてください。データサイエンスプロジェクトの詳細画面からWorkbenchesに移動します。Create workbenchを押下して設定は以下のようにします:
- Name:test-workbench
- Notebook image
- Image selection:PyTorch
- Version selection:2024.1
- Deployment size
- Container size:Small
- Accelerator:NVIDIA GPU(GPUがない場合None)
- Number of accelerators:1(GPUがある場合設定する)
- Cluster storage
- Create new persistent storage
- Name:test-workbench
- Persistent storage size:20Gi
- Create new persistent storage
- Data connections
- Use existing data connection
- Data connection:test-connection
- Use existing data connection
ワークベンチへのプログラムアップロード
このリンクからプログラムをダウンロードしてください。
ダウンロードしたプログラムをJupyterLabにドラッグ&ドロップするとワークベンチにプログラムをアップロードできます。
プログラム動作
データの収集
0_dataupload.ipynbを実行します。データソースからMNISTの画像をダウンロードし、S3の/test-demo/dataディレクトリにアップロードします。
実行後、S3の/test-demo/dataディレクトリを確認すると、データがzipにまとめられて保存されているのが確認できます。
データの準備
1_dataprocessed.ipynbを実行します。S3にあるMNISTの画像をダウンロードして、画像を学習に使える形に前処理します。その後、S3の/test-demo/processed_dataディレクトリにアップロードします。
実行後、S3の/test-demo/processed_dataディレクトリを確認すると、前処理済みデータがzipにまとめられて保存されているのが確認できます。
モデルの学習
2_training.ipynbを実行します。S3にある前処理済みの学習データをダウンロードし、モデルの学習・推論を行い、学習後のモデルをS3の/test-demo/modelsディレクトリにアップロードします。その構成図を以下に示します:
実行するとMNIST画像とその画像に対しての推論結果とAccuracy(正解率)が表示されます。表示されているMNIST画像は学習後のモデルに入力する推論用のデータです。推論結果は入力されたMNIST画像がどんな数字であるかモデルが推論した回答になります。Accuracy(正解率)は10000枚のMNIST画像をモデルが推論を行い、その推論した結果とMNISTの画像の数字が一致した確率を示しています。
実行後、S3の/test-demo/modelsディレクトリを確認すると、モデルデータがONNX形式として保存されているのが確認できます。
最後に
以上の手順によりOpenShift AI内で実際に機械学習を行うことができました。このようにワークベンチ内のJupyterLab環境で自由にJupyterNotebookを実行することが可能です。さらにデータ接続機能を利用すると外部のストレージにアクセスも可能になります。ぜひOpenShift AIを利用してモデル開発に役立ててみてください。
参考
- ワークベンチ設定:https://docs.redhat.com/ja/documentation/red_hat_openshift_ai_self-managed/2.13/html/working_on_data_science_projects/using-project-workbenches_projects#creating-a-workbench-select-ide_projects
- データ接続設定:https://docs.redhat.com/ja/documentation/red_hat_openshift_ai_self-managed/2.13/html/working_with_data_in_an_s3-compatible_object_store/index
- OpenShift AIチュートリアル不正検出の例:https://docs.redhat.com/ja/documentation/red_hat_openshift_ai_self-managed/2.13/html/openshift_ai_tutorial_-_fraud_detection_example/index
- 前回:OpenShift AIを導入してみた