OpenShift AIで機械学習をやってみた

はじめに

こんにちはサイオステクノロジーの小野です。私は今年入社したばかりの新卒社員なので今年一年は新しいことしか学んできませんでした。その学んできた中でも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と作業用バケットを事前に作成してください。
  • プログラムソース
    • 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
  • Data connections
    • Use existing data connection
      • Data connection:test-connection

ワークベンチへのプログラムアップロード

このリンクからプログラムをダウンロードしてください。

MLcode

ダウンロードしたプログラムをJupyterLabにドラッグ&ドロップするとワークベンチにプログラムをアップロードできます。

プログラム動作

データの収集

0_dataupload.ipynbを実行します。データソースからMNISTの画像をダウンロードし、S3の/test-demo/dataディレクトリにアップロードします。

実行後、S3の/test-demo/dataディレクトリを確認すると、データがzipにまとめられて保存されているのが確認できます。

0_dataupload実行後のS3

データの準備

1_dataprocessed.ipynbを実行します。S3にあるMNISTの画像をダウンロードして、画像を学習に使える形に前処理します。その後、S3の/test-demo/processed_dataディレクトリにアップロードします。

実行後、S3の/test-demo/processed_dataディレクトリを確認すると、前処理済みデータがzipにまとめられて保存されているのが確認できます。

1_dataprocessed実行後のS3

モデルの学習

2_training.ipynbを実行します。S3にある前処理済みの学習データをダウンロードし、モデルの学習・推論を行い、学習後のモデルをS3の/test-demo/modelsディレクトリにアップロードします。その構成図を以下に示します:

モデルの学習構成図

実行するとMNIST画像とその画像に対しての推論結果とAccuracy(正解率)が表示されます。表示されているMNIST画像は学習後のモデルに入力する推論用のデータです。推論結果は入力されたMNIST画像がどんな数字であるかモデルが推論した回答になります。Accuracy(正解率)は10000枚のMNIST画像をモデルが推論を行い、その推論した結果とMNISTの画像の数字が一致した確率を示しています。

モデルの推論・評価の結果

実行後、S3の/test-demo/modelsディレクトリを確認すると、モデルデータがONNX形式として保存されているのが確認できます。

2_training実行後のS3

最後に

以上の手順によりOpenShift AI内で実際に機械学習を行うことができました。このようにワークベンチ内のJupyterLab環境で自由にJupyterNotebookを実行することが可能です。さらにデータ接続機能を利用すると外部のストレージにアクセスも可能になります。ぜひOpenShift AIを利用してモデル開発に役立ててみてください。

参考

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です