データモデルの開発およびデプロイ

Red Hat OpenShift Data Science 1

開発およびデプロイメントのワークフローを理解し、インテリジェントなアプリケーションにデータモデルをデプロイ

概要

開発およびデプロイメントのワークフローを理解し、インテリジェントなアプリケーションにデータモデルをデプロイします。

前書き

このドキュメントは、Red Hat OpenShift Data Science のフィールドトライアルリリース用に作成されています。

このフィールドトライアルリリースに関連するサービスおよびライフサイクル情報については、以下のドキュメントを参照してください。

第1章 データモデルの開発およびデプロイの概要

このセクションでは、Red Hat OpenShift Data Science を使用して作成された予測モデルを使用するアプリケーションの開発およびデプロイに必要な作業について説明します。

組織は、このプロセスの責任をデータサイエンティストやアプリケーション開発者などの複数の役割に分割したり、この作業を 1 つの役割で行ったりする場合があります。それぞれのステップについての適切なロールが記述されます。

表1.1 ロール別の開発タスク

アプリケーション開発者データサイエンティストタスクの説明

 

OpenShift Data Science アプリケーションテンプレートを使用して、Python S2I プロジェクトを Git に作成します。

 

データサイエンティストがリポジトリーへのプッシュおよびリポジトリーからのプルができるように、Git プロジェクトへのユーザーアクセスを設定します

この時点で、モデルとモデルを使用するアプリケーションを同時に開発することができます。

 

プロジェクトリポジトリーを使用して OpenShift アプリケーションを作成します

 

OpenShift アプリケーションをビルド してコードを検証します。

 

Webhook を使用してビルドプロセスを自動化します

 

JupyterHub を起動、ノートブックを 作成 または インポート します。

 

アプリケーションの Git プロジェクトを JupyterHub に インポート します。

 

JupyterHub のノートブックを使用して、モデルを開発し、テストします。

 

モデルを独立した Python 関数 として別々の Python ファイルに保存します。

 

関数に必要な依存関係で requirements.txt ファイルを更新します

 

ノートブックサーバーで関数をテストします

 

更新をリモート Git プロジェクトに再びプッシュします

デプロイされたアプリケーションエンドポイントをテストします

第2章 OpenShift Data Science の Python S2I アプリケーションの作成

2.1. GitHub テンプレートからの OpenShift Data Science の Python S2I アプリケーションの作成

Red Hat の Python S2I アプリケーションリポジトリーを GitHub のテンプレートとして使用して、Red Hat OpenShift Data Science に適したアプリケーションをすばやく作成できます。テンプレートを使用して、既存の Red Hat OpenShift Data Science リポジトリーと同じ形式、ディレクトリー構造、およびファイルを指定して新規リポジトリーを生成します。

前提条件

  • GitHub アカウントが必要です。
  • 使用する適切なテンプレートが含まれる GitHub リポジトリーにアクセスするための認証情報が必要です。

手順

  1. GitHub で、テンプレートリポジトリーのメインページに移動します。
  2. Use this template をクリックします。
  3. オプション: Owner 一覧から、リポジトリーを所有するアカウントを選択します。
  4. Repository name フィールドに新規リポジトリーの名前を入力します。
  5. オプション: Description フィールドに、新規リポジトリーの説明を入力します。
  6. リポジトリーの表示レベルを設定します。

    1. 誰もがリポジトリーを表示できるようにするには、Public を選びます。デフォルトでは、リポジトリーの表示は Public に設定されます。
    2. Private をクリックして、リポジトリーを表示してコミットできるユーザーを制限します。
  7. オプション: Include all branches チェックボックスを選択し、テンプレートリポジトリーのブランチを新規リポジトリーにコピーします。
  8. Create repository from template をクリックします。

検証

  • テンプレートから作成したリポジトリーが表示され、GitHub アカウントからアクセスできます。

2.2. Cookiecutter を使用した OpenShift Data Science の Python S2I アプリケーションの作成

Cookiecutter を使用して、Red Hat OpenShift Data Science に適したアプリケーションを迅速に作成できます。Cookiecutter は、データサイエンスの作業用に柔軟で標準化されたプロジェクト構造を作成する Python ライブラリーです。Cookiecutter を使用してプロジェクトのリポジトリーをさらにカスタマイズできます。たとえば、プロジェクトの要件に合わせてリポジトリーのディレクトリー構造を変更することができます。

前提条件

  • 起動済みで実行中の JupyterHub サーバー。
  • GitHub アカウントが必要です。
  • 使用するテンプレートを含む GitHub リポジトリーにアクセスするための認証情報が必要です。

手順

  1. JupyterHub インターフェースで、FileNewTerminal をクリックします。
  2. ターミナルで pip install コマンドを実行して Cookiecutter をインストールします。

    pip install cookiecutter
  3. cookiecutter コマンドを実行して、Cookiecutter のリポジトリーテンプレートからプロジェクトを作成します。

    cookiecutter template-repository-url

    template-repository-url は、テンプレートリポジトリーの URL に置き換えます。たとえば、https://github.com/cookiecutter-template/template です。

  4. プロンプトが表示されたら、以下の情報を指定します。

    1. プロジェクトの名前。
    2. リポジトリーの名前。
    3. プロジェクトの作成者の名前。
    4. プロジェクトの説明。
    5. オープンソースライセンスファイルのタイプ。

      Cookiecutter テンプレートリポジトリーの内容は、左側のサイドバーの File Browser に表示されます。

  5. GitHub でリポジトリーを作成します。

    1. GitHub ホームページの右上にある +New repository をクリックします。

      Create a new repository ページが開きます。

    2. Repository template フィールドで、使用するテンプレートを選択します。
    3. オプション: Include all branches チェックボックスを選択し、テンプレートリポジトリーのブランチを新規リポジトリーにコピーします。
    4. Owner フィールドで、リポジトリーの所有者のユーザー名を選択します。
    5. Repository 名フィールドに、リポジトリーの名前を入力します。
    6. オプション: Description フィールドに、リポジトリーの説明を入力します。
  6. リポジトリーの表示レベルを設定します。

    1. 誰もがリポジトリーを表示できるようにするには、Public を選びます。デフォルトでは、リポジトリーの表示は Public に設定されます。
    2. Private をクリックして、リポジトリーを表示してコミットできるユーザーを選択します。
    3. Create repository をクリックします。
  7. JupyterHub サーバーでリポジトリーのクローンを作成します。

    1. JupyterHub インターフェースで、GitClone a Repository をクリックします。

      Clone a repo ダイアログが表示されます。

    2. クローンを作成するリポジトリーの URL を入力します。
    3. Clone をクリックします。

      クローン作成したリポジトリーは、左側のサイドバーの File Browser に表示されます。

    4. File Browser で、Cookiecutter で作成されたファイルおよびディレクトリーを、クローン作成したリポジトリーに移動します。
  8. 変更をリモートリポジトリーにプッシュします。

    1. 左側のサイドバーで Git ( The Git icon ) をクリックします。
    2. 変更を追跡していない場合は、Changes タブで、カーソルを Untracked セクションバーの上に置き、 jupyter git add or commit をクリックします。
    3. 変更が含まれるファイルがある場合は、Changes タブで、カーソルを Changed セクションバーの上に置き、 jupyter git add or commit をクリックします。
    4. Required フィールドに、変更の要約を入力します。
    5. Description フィールドに、変更の説明を入力します。
    6. Commit をクリックします。
    7. JupyterHub インターフェースで、GitPush to Remote をクリックして、変更をリモートリポジトリーにプッシュします。

      Git credentials required ダイアログが開きます。

    8. リモートリポジトリーにアクセスするために認証情報を入力します。
    9. OK をクリックします。

検証

  • テンプレートから作成したリモートリポジトリーにアクセスできます。
  • リモートリポジトリーでプッシュした変更を確認できます。

第3章 リモート Git リポジトリーへのユーザーアクセスの設定

お使いのデータサイエンティストやアプリケーション開発者は、リポジトリーからデータをプッシュおよびプルするために、リモート Git リポジトリーへのアクセスが必要です。リポジトリーの所有者は、開発者としてこれらのユーザーをリポジトリーに追加して、このアクセスを許可することができます。

GitHub リポジトリーは、GitHub ドキュメント を参照してください。

第4章 Git リポジトリーからの OpenShift アプリケーションの作成

Git リポジトリーからコードをインポートし、これを使用して OpenShift Dedicated で Red Hat OpenShift Data Science アプリケーションを作成し、ビルドし、デプロイできます。

前提条件

  • OpenShift Dedicated Web コンソールにログインしている。
  • Developer パースペクティブを使用している。
  • OpenShift Dedicated でアプリケーションおよび他のワークロードを作成するための適切なプロジェクト内のロールおよびパーミッションがある。
  • Git リポジトリーを設定している。
  • Git リポジトリーをインポートするためのパーミッションがある。

手順

  1. OpenShift Dedicated で、アプリケーションを作成するプロジェクトを選択するか、アプリケーションの新規プロジェクトを作成します。
  2. +Add ビューで From Git をクリックし、Import from Git フォームを表示します。
  3. Git セクションで、アプリケーションの作成に使用するコードベースの Git リポジトリー URL を入力します。
  4. オプション: Show Advanced Git Options をクリックし、以下のような詳細を追加します。

    • Git Reference: アプリケーションのビルドに使用する特定のブランチ、タグ、またはコミットのコードを参照します。
    • Context Dir: アプリケーションのビルドに使用するアプリケーションのソースコードのサブディレクトリーを指定します。
    • Source Secret: プライベートリポジトリーからソースコードをプルするための認証情報で Secret Name を作成します。
  5. Builder セクションで、適切なビルダーイメージがデフォルトで検出され、選択されます。
  6. General セクションで、以下を実行します。

    1. Application フィールドに、アプリケーションを分類するために一意の名前を入力します。これはプロジェクトで一意でなければなりません。
    2. Name フィールドには、git リポジトリーの URL に基づいて自動的に設定されます。これは、このアプリケーション用に作成されたリソースを識別するのに使用されます。
  7. Resources セクションで Deployment Config を選択し、OpenShift スタイルのアプリケーションを作成します。
  8. Advanced Options セクションで、以下を行います。

    1. Create a route to the application チェックボックスがデフォルトで選択されるため、公開されている URL を使用してアプリケーションにアクセスできます。

      アプリケーションをパブリックルートに公開しない場合は、チェックボックスをクリアします。

    2. オプション: Routing をクリックし、高度なルーティングオプションを表示します。

      1. ルートのホスト名をカスタマイズします。
      2. ルーターが監視するパスを指定します。
      3. ルート上のトラフィックのターゲットポートを選択します。
      4. ルートのトランスポートセキュリティーを設定します。
    3. オプション: Build configuration をクリックし、モデルをビルドするのに必要な環境変数など、高度なビルド設定オプションを表示します。
    4. オプション: Deployment configuration をクリックして、モデルがデプロイメント環境で必要とする環境変数を含む、高度なデプロイメント構成オプションを表示します。

      たとえば、アプリケーションが OpenShift Streams for Apache Kafka を統合する場合は、ここに Kafka 環境変数を追加します。

    5. オプション: Scaling をクリックし、最初にデプロイする Pod またはアプリケーションインスタンスの数を定義します。
    6. オプション: Resource Limit をクリックして、コンテナーが実行時に保証または使用が許可されている CPU および メモリー リソースの量を設定します。
    7. オプション: Labels をクリックし、カスタムラベルをアプリケーションに追加します。
  9. Create をクリックして、アプリケーションを作成し、Topology ビューでビルドのステータスを確認します。

検証

  • Topology ビューでアプリケーションを表示できます。
  • アプリケーションをクリックし、アプリケーションの詳細ペインの Resources タブを確認します。Builds で成功メッセージ (例: Build #1 is complete) を探します。

第5章 Web コンソールを使用した OpenShift アプリケーションのビルド

OpenShift Dedicated に対して、OpenShift Dedicated Web コンソールの Start Build ボタンを使用して既存の OpenShift アプリケーションをビルドするように指示できます。

前提条件

  • OpenShift Dedicated への Developer アクセスがある。
  • OpenShift Dedicated アプリケーションを作成している。

手順

  1. OpenShift Dedicated で、Project ドロップダウンをアプリケーションプロジェクトに設定します。
  2. Topology をクリックします。
  3. アプリケーションをクリックして、アプリケーションの詳細ペインを表示します。
  4. Start build ボタンをクリックします。

第6章 Webhook を使用した更新されたアプリケーションの自動再構築

アプリケーションコードが含まれる Git リポジトリーに更新が加えられるたびに、OpenShift アプリケーションを自動的に再ビルドし、再デプロイするように設定できます。これにより、アプリケーションの最新バージョンが常に利用できるようになります。

前提条件

  • GitHub リポジトリーをソースとして使用して作成された OpenShift アプリケーション。
  • GitHub リポジトリーの Webhook 設定を変更するためのパーミッション。

手順

  1. OpenShift Dedicated では、Developer パースペクティブに切り替え、Project ドロップダウンを適切なプロジェクトに設定します。
  2. Topology をクリックし、アプリケーションでアプリケーションの詳細ペインを表示します。
  3. Builds で、ビルド設定の名前(BC で識別)をクリックし、ビルド設定ページを表示します。
  4. Webhooks で GitHub のエントリーを見つけ、Secret で Copy URL をクリックします。
  5. GitHub のプロジェクトページに移動し、Settings をクリックします。
  6. WebhooksAdd webhook をクリックします。
  7. Add webhook ページで以下の詳細を入力します。

    1. シークレットでコピーした URL を Payload URL フィールドに貼り付けます。
    2. Content typeapplication/json に設定します。
    3. その他のすべてのオプションはデフォルトのままにします。
    4. Add webhook をクリックします。

検証

  • アプリケーションコードを更新し、アプリケーションが正しく再ビルドされ、デプロイされていることを確認します。

第7章 JupyterHub でのノートブックの作成またはインポート

7.1. 新規ノートブックの作成

既存のノートブックコンテナーイメージから新規の Jupyter ノートブックを作成し、そのリソースおよびプロパティーにアクセスできます。JupyterHub Spawner には、単一ユーザーのノートブックサーバーとして実行できる利用可能なコンテナーイメージの一覧が含まれます。

前提条件

  • Red Hat OpenShift Data Science にログインしていることを確認します。
  • JupyterHub にログインし、ノートブックサーバーを起動していることを確認します。
  • ノートブックイメージはレジストリー、イメージストリームに存在し、アクセス可能である必要があります。

手順

  1. FileNewNotebook の順にクリックします
  2. プロンプトが表示されたら、一覧からノートブックのカーネルを選択します。

    カーネルを使用する場合は、Select をクリックします。カーネルを使用しない場合は、No Kernel をクリックします。

検証

  • ノートブックファイルが JupyterHub に表示されることを確認します。

7.2. JupyterLab を使用した Git リポジトリーからの既存ノートブックファイルのインポート

JupyterLab ユーザーインターフェースを使用して Git リポジトリーをワークスペースにクローンし、そのまま作業を継続したり、外部プロジェクトのファイルを統合したりできます。

前提条件

  • 起動済みで実行中の JupyterHub サーバー。
  • クローンを作成する Git リポジトリーの読み取りアクセス。

手順

  1. Git リポジトリーの HTTPS URL をコピーします。

    • GitHub で ⤓ CodeHTTPS をクリックし、Clipboard ボタンをクリックします。
    • GitLab で Clone をクリックし、Clone with HTTPS の下にある Clipboard ボタンをクリックします。
  2. JupyterLab インターフェースで、Git Clone ボタン ( Git Clone button ) をクリックします。

    また、メニューで GitClone a repository をクリックするか、または Git アイコン ( Git button ) をクリックして Clone a repository ボタンをクリックできます。

    Clone a repo ダイアログが表示されます。

  3. ノートブックが含まれるリポジトリーの HTTPS URL を入力します。
  4. CLONE をクリックします。
  5. プロンプトが表示されたら、Git リポジトリーのユーザー名とパスワードを入力します。

検証

  • リポジトリーの内容が JupyterLab のファイルブラウザーに表示されるか、ターミナルで ls コマンドを実行して、リポジトリーがディレクトリーとして表示されることを確認します。

第8章 独立した Python 関数としてモデルを保存

データモデルを独立した Python 機能に切り替えて、ノートブックサーバー環境外でこれを実行し、これをインテリジェントアプリケーションで使用できます。

前提条件

  • JupyterHub インターフェースへのアクセスがある。
  • Jupyter ノートブックで予測モデルを開発している。
  • Jupyterノートブックは、Red Hat OpenShift DataScienceサンプルS2Iアプリケーションリポジトリーから作成されたGitリポジトリーに保存されます。

手順

  1. JupyterHub で、新しい prediction.py ファイルを作成します。
  2. prediction.py ファイルを編集し、Jupyter ノートブックの予測モデルに基づいて predict 関数を定義します。

    • 予測の作成に必要なコードのみを含めます。たとえば、Jupyter ノートブックでのプロットのレンダリングにのみ関連するライブラリをインポートする必要はありません。
    • 予測を実行するために新しいパッケージが必要な場合は、requirements.txt ファイルの内容を更新し、pip install -r requirements.txt を実行して新規パッケージをインストールします。
  3. 新しいノートブックセルで関数を呼び出すことにより、ノートブックから独立したPython関数を実行できることをテストします。次に例を示します。

    from prediction import predict
      predict(data)

検証

  • predict 関数が正しく実行され、ノートブックセルから呼び出されると予想される出力を返します。

8.1. ノートブックサーバーへの Python パッケージのインストール

パッケージとバージョンを requirements.txt ファイルに追加し、ノートブックセルで pip install コマンドを実行すると、デフォルトのノートブックサーバーイメージの一部ではない Python パッケージをインストールできます。

注記

Red Hat は、パッケージを直接インストールすることもできますが、モデルを後でデプロイできるように requirements.txt ファイルを使用することを推奨します。

前提条件

  • JupyterHub にログインし、ノートブックを開きます。

手順

  1. 以下の方法のいずれかを使用して、新規テキストファイルを作成します。

    • + をクリックして新規のランチャーを開き、Text file をクリックします。
    • FileNewText File の順にクリックします。
  2. テキストファイルの名前を requirements.txt に変更します。

    1. ファイルの名前を右クリックし、Rename Text をクリックします。Rename File ダイアログが開きます。
    2. New Name フィールドに requirements.txt を入力し、Rename をクリックします。
  3. Requirements.txt ファイルにインストールするパッケージを追加します。

    altair

    == (等しい) 演算子を使用して、インストールするバージョンを指定できます。以下に例を示します。

    altair==4.1.0

    複数のパッケージを同時にインストールするには、各パッケージを別々の行に配置します。

  4. ノートブックセルを使用して、requirements.txt のパッケージをサーバーにインストールします。

    1. ノートブックに新しいセルを作成し、以下のコマンドを入力します。

      !pip install -r requirements.txt
    2. Shift と Enter を押してセルを実行します。
    重要

    これにより、ノートブックサーバーにパッケージがインストールされますが、コードセルで import ディレクティブを実行してコード内のパッケージを使用する必要があります。

    import altair

検証

第9章 サンプル Flask アプリケーションを使用した Python 関数のテスト

独立した Python 機能をアプリケーションに追加する前に、想定通りに機能することをテストする必要があります。

前提条件

手順

  1. JupyterHub で、run_flask.ipynb ノートブックファイルを開きます。
  2. CellRun All をクリックして、ノートブックのすべてのセルを実行します。

    これにより、Flagsk アプリケーションが起動します。

検証

  • FileNewTerminal をクリックして JupyterHub でターミナルを開き、以下のコマンドを実行します。

    curl -X POST -H "Content-Type: application/json" --data '{"data" : "hello world"}' http://localhost:5000/prediction

    あるいは、新規ノートブックセルに以下を入力し、セルを実行します。

    !curl -X POST -H "Content-Type: application/json" --data '{"data" : "hello world"}' http://localhost:5000/prediction

    サンプルアプリケーションに変更が加えられていない場合は、{"prediction" : "not implemented"} のようなブラウザーに応答が表示されます。

第10章 プロジェクトの変更を Git リポジトリーにプッシュ

実稼働環境でアプリケーションをビルドし、デプロイするには、作業をリモート Git リポジトリーにアップロードします。

前提条件

  • JupterHub インターフェースでノートブックを開く。
  • 関連する Git リポジトリーが、すでにノートブックサーバーに追加されている。
  • 関連する Git リポジトリーに変更をプッシュするパーミッションがある。
  • Git バージョン制御拡張がインストールされている。

手順

  1. FileSave All をクリックして、保存していない変更を保存します。
  2. Git アイコン( Git button )をクリックし、JupyterHub インターフェースで Git ペインを開きます。
  3. 変更したファイルが Changed に表示されることを確認します。

    変更したファイルが Untracked にある場合は、GitSimple Staging をクリックして簡素化された Git プロセスを有効にします。

  4. 変更をコミットします。

    1. Changed の下にあるすべてのファイルに、青いチェックマークが付いていることを確認します。
    2. Summary フィールドに、加えた変更の簡単な説明を入力します。
    3. Commit をクリックします。
  5. GitPush to Remote をクリックして、変更をリモートリポジトリーにプッシュします。
  6. プロンプトが表示されたら、Git 認証情報を入力し、OK をクリックします。

検証

  • 最近プッシュされた変更は、リモート Git リポジトリーに表示されます。

第11章 予測機能についてのデプロイされたアプリケーションエンドポイントのテスト

アプリケーションのデプロイ後に、デプロイされたエンドポイントで予測機能が適切に機能することをテストできます。

前提条件

  • お使いのアプリケーションが予測機能でビルドされ、デプロイされている。
  • 予測機能が含まれるアプリケーションの Web アドレスを把握している。

手順

  1. FileNewTerminal をクリックして、JupyterHub でターミナルを開きます。
  2. 以下のコマンドを実行します。<application-url> はアプリケーションの Web アドレスに置き換えてください(例: http://myapp-myproject.apps.mycluster.abc1.s1.devshift.org)。

    curl -X POST -H "Content-Type: application/json" --data {"data" : "hello world"} <application-url>/prediction

    例:

    curl -X POST -H "Content-Type: application/json" --data {"data" : "hello world"} http://myapp-myproject.apps.mycluster.abc1.s1.devshift.org/prediction

    または、! の後に、新しいノートブックセルに同じコマンドを入力して、セルを実行します。

    !curl -X POST -H "Content-Type: application/json" --data {"data" : "hello world"} <application-url>/prediction

検証

  • このエンドポイントは、{"prediction" : "not implemented"} など、アプリケーションから応答を受信した場合に機能します。