(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024095855
(43)【公開日】2024-07-11
(54)【発明の名称】パイプライン処理システム、及びパイプライン処理プログラム
(51)【国際特許分類】
G06F 9/50 20060101AFI20240704BHJP
H04L 67/75 20220101ALI20240704BHJP
【FI】
G06F9/50 150B
H04L67/75
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022212807
(22)【出願日】2022-12-29
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.UNIX
2.Linux
3.WINDOWS
4.JAVA
5.MAC
(71)【出願人】
【識別番号】516249414
【氏名又は名称】AWL株式会社
(74)【代理人】
【識別番号】100110788
【弁理士】
【氏名又は名称】椿 豊
(74)【代理人】
【識別番号】100124589
【弁理士】
【氏名又は名称】石川 竜郎
(72)【発明者】
【氏名】アロック クマ― ビショイ
(72)【発明者】
【氏名】エデゥアード ナーバイズ ヒユエーテス
(72)【発明者】
【氏名】アリーフ ダルマワン
(72)【発明者】
【氏名】土田 安紘
(72)【発明者】
【氏名】ラビナンダン キシヨール
(72)【発明者】
【氏名】ファドワ ゴーラビ
(57)【要約】
【課題】メンテナンス性が向上したパイプライン処理システムを提供する。
【解決手段】推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個つなげたパイプラインの処理を行うパイプライン処理システムは、パイプラインを構成する各ブロックのファイルを記憶する記憶手段と、パイプラインの構成を定義した情報であって、パイプラインを構成する全てのブロックについての情報と、パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶する記憶手段と、パイプライン構成情報に従って、パイプラインの外部のプログラムから入力されたデータを用いて、パイプラインに含まれるブロックの各々をロードして実行し、パイプラインの処理の実行結果を外部プログラムに返すパイプライン処理制御手段とを備える。
【選択図】
図3
【特許請求の範囲】
【請求項1】
推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個つなげたパイプラインの処理を行うパイプライン処理システムであって、
前記パイプラインを構成する各ブロックのファイルを記憶するブロックファイル記憶手段と、
前記パイプラインの構成を定義した情報であって、前記パイプラインを構成する全てのブロックについての情報と、前記パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶する構成情報記憶手段と、
前記パイプライン構成情報に従って、前記パイプラインの外部のプログラム(以下、「外部プログラム」という。)から入力されたデータを用いて、前記パイプラインに含まれるブロックの各々をロードして実行し、前記パイプラインの処理の実行結果を前記外部プログラムに返すパイプライン処理制御手段とを備えた、パイプライン処理システム。
【請求項2】
前記パイプライン処理システムは、複数の情報端末を備え、
前記情報端末の各々は、自機で実行する各ブロックのインスタンスの出力を、ネットワークを介して、それを入力として用いる別の情報端末に送ることが可能で、別の情報端末における各ブロックのインスタンスからの出力を、ネットワークを介して、自機における各ブロックのインスタンスへの入力として受信することが可能な送受信手段を備えることを特徴とする請求項1に記載のパイプライン処理システム。
【請求項3】
前記パイプライン処理システムは、サーバをさらに備え、
前記外部プログラムを実行する情報端末は、前記パイプライン構成情報のうち、少なくとも、当該情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を記憶する端末側構成情報記憶手段を備え、
前記サーバは、前記パイプライン構成情報を編集して、このパイプライン構成情報のうち、前記端末側パイプライン構成情報を、前記情報端末の端末側構成情報記憶手段に書き込むためのユーザインタフェース手段をさらに備えたことを特徴とする請求項2に記載のパイプライン処理システム。
【請求項4】
前記パイプライン処理システムは、サーバをさらに備え、
前記サーバは、前記情報端末の各々から、前記各ブロックのインスタンスの処理のパーフォーマンス情報を受信して表示するパーフォーマンス表示手段を備えることを特徴とする請求項2乃至4のいずれか一項に記載のパイプライン処理システム。
【請求項5】
前記パイプライン処理システムは、サーバをさらに備え、
前記外部プログラムを実行する情報端末は、前記パイプライン構成情報のうち、少なくとも、当該情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を記憶する端末側構成情報記憶手段を備え、
前記サーバは、前記情報端末の各々から、前記各ブロックのインスタンスの処理のパーフォーマンス情報を受信して、これらのパーフォーマンス情報に基づいて、前記パイプライン構成情報を自動的に編集して、このパイプライン構成情報のうち、前記端末側パイプライン構成情報を、前記情報端末の端末側構成情報記憶手段に書き込むようにしたことを特徴とする請求項2に記載のパイプライン処理システム。
【請求項6】
前記外部プログラムに組み込まれて、この外部プログラムの実行環境において、前記パイプラインに含まれるブロックを実行するのに必要なソースコードのライブラリを記憶するコードライブラリ記憶手段をさらに備えることを特徴とする請求項1に記載のパイプライン処理システム。
【請求項7】
ブロックを複数組み合わせることでパイプライン処理を実行させるパイプライン処理システムであって、
前記ブロックは、データの入力と出力とを行うコンピュータで実行可能な電子ファイルであり、
前記パイプライン処理システムは、サーバとデバイスとから構成され、
前記サーバは、
前記複数のブロックを示すアイコンを画面上で配列させることでパイプラインの構成を表示させる表示手段と、
ユーザからの入力に基づいて、前記表示手段に表示されるパイプラインの構成を変更する変更手段と、
前記表示手段に表示されるパイプラインの構成に基づいて、そのパイプラインの構成を示すコンフィグレーションファイルを作成する作成手段と、
前記コンフィグレーションファイルをデプロイするデバイスを選択させる選択手段と、
前記選択手段で選択されたデバイスに前記コンフィグレーションファイルをデプロイするデプロイ手段を備え、
前記デバイスは、
前記デプロイ手段で前記コンフィグレーションファイルがデプロイされたときに、それが示すパイプラインを構成する複数のブロックを取得する取得手段と、
前記コンフィグレーションファイルに従い、前記取得された複数のブロックを順に実行する実行手段とを備える、パイプライン処理システム。
【請求項8】
推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個つなげたパイプラインの処理を行うパイプライン処理プログラムであって、
情報処理装置を、
前記パイプラインを構成する各ブロックのファイルを記憶するブロックファイル記憶手段と、
前記パイプラインの構成を定義した情報であって、前記パイプラインを構成する全てのブロックについての情報と、前記パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶する構成情報記憶手段と、
前記パイプライン構成情報に従って、前記パイプラインの外部のプログラム(以下、「外部プログラム」という。)から入力されたデータを用いて、前記パイプラインに含まれるブロックの各々をロードして実行し、前記パイプラインの処理の実行結果を前記外部プログラムに返すパイプライン処理制御手段として機能させるためのパイプライン処理プログラム。
【請求項9】
前記パイプライン処理プログラムは、前記情報処理装置を、さらに、前記外部プログラムに組み込まれて、この外部プログラムの実行環境において、前記パイプラインに含まれるブロックを実行するのに必要なソースコードのライブラリを記憶するコードライブラリ記憶手段として機能させることを特徴とする請求項8に記載のパイプライン処理プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明はパイプライン処理システム、及びパイプライン処理プログラムに関する。
【背景技術】
【0002】
下記特許文献1には、複数の機械学習モデルを組み合わせて処理を行う情報処理装置が開示されている。この情報処理装置は、利用者の操作を受け付ける受付部と、受付部により受け付けられた操作に基づいて、出力形式が異なる複数の機械学習モデルの組み合わせを設定する設定部と、設定部により設定された組み合わせに基づいて、複数の機械学習モデルに検出処理を実行させる実行部とを備える。
【0003】
また近年、複数種類のプログラム部品をそれぞれ画面上にブロックとしてビジュアルに表示し、それをドラッグアンドドロップさせ、複数のブロックを画面上で配列させることでプログラミングを行うコンピュータ言語が知られている(例えば、Scratch等)。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
この発明は、使いやすく、メンテナンス性が向上したパイプライン処理システム、及びパイプライン処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【0006】
この発明のある局面に従うと、推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個繋げたパイプラインの処理を行うパイプライン処理システムは、前記パイプラインを構成する各ブロックのファイルを記憶するブロックファイル記憶手段と、前記パイプラインの構成を定義した情報であって、前記パイプラインを構成する全てのブロックについての情報と、前記パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶する構成情報記憶手段と、前記パイプライン構成情報に従って、前記パイプラインの外部のプログラム(以下、「外部プログラム」という)から入力されたデータを用いて、前記パイプラインに含まれるブロックの各々をロードして実行し、前記パイプラインの処理の実行結果を前記外部プログラムに返すパイプライン処理制御手段とを備える。
【0007】
好ましくは、前記パイプライン処理システムは、複数の情報端末を備え、前記パイプライン構成情報は、前記パイプラインを構成する各ブロックを実行する情報端末についての情報である実行端末情報をさらに含み、前記パイプライン処理制御手段は、前記実行端末情報に従って、前記各ブロックを実行する情報端末に、前記各ブロックのインスタンスを作り、前記パイプライン処理システムにおける前記情報端末の各々は、前記各ブロックのインスタンスの出力を、ネットワークを介して、それを入力として用いる別の情報端末に送ることが可能で、別の情報端末における各ブロックのインスタンスからの出力を、ネットワークを介して、自機における各ブロックのインスタンスへの入力として受信することが可能な送受信手段を備える。
【0008】
好ましくは、前記パイプライン処理システムは、サーバをさらに備え、前記外部プログラムを実行する情報端末は、前記パイプライン構成情報のうち、少なくとも、当該情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を記憶する端末側構成情報記憶手段を備え、前記サーバは、前記実行端末情報を含むパイプライン構成情報を編集して、このパイプライン構成情報のうち、前記端末側パイプライン構成情報を、前記情報端末の端末側構成情報記憶手段に書き込むためのユーザインタフェース手段をさらに備える。
【0009】
好ましくは、前記パイプライン処理システムは、サーバをさらに備え、前記サーバは、前記情報端末の各々から、前記各ブロックのインスタンスの処理のパーフォーマンス情報を受信して表示するパーフォーマンス表示手段を備える。
【0010】
好ましくは前記パイプライン処理システムは、サーバをさらに備え、前記外部プログラムを実行する情報端末は、前記パイプライン構成情報のうち、少なくとも、当該情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を記憶する端末側構成情報記憶手段を備え、前記サーバは、前記情報端末の各々から、前記各ブロックのインスタンスの処理のパーフォーマンス情報を受信して、これらのパーフォーマンス情報に基づいて、前記パイプライン構成情報を自動的に編集して、このパイプライン構成情報のうち、前記端末側パイプライン構成情報を、前記情報端末の端末側構成情報記憶手段に書き込むようにしたことを特徴とする。
【0011】
好ましくは前記パイプライン処理システムは、前記外部プログラムに組み込まれて、この外部プログラムの実行環境において、前記パイプラインに含まれるブロックを実行するのに必要なソースコードのライブラリを記憶するコードライブラリ記憶手段をさらに備える。
【0012】
この発明の他の局面に従うと、ブロックを複数組み合わせることでパイプライン処理を実行させるパイプライン処理システムにおいて、前記ブロックは、データの入力と出力とを行うコンピュータで実行可能な電子ファイルであり、前記パイプライン処理システムは、サーバとデバイスとから構成され、前記サーバは、前記複数のブロックを示すアイコンを画面上で配列させることでパイプラインの構成を表示させる表示手段と、ユーザからの入力に基づいて、前記表示手段に表示されるパイプラインの構成を変更する変更手段と、 前記表示手段に表示されるパイプラインの構成に基づいて、そのパイプラインの構成を示すコンフィグレーションファイルを作成する作成手段と、前記コンフィグレーションファイルをデプロイするデバイスを選択させる選択手段と、前記選択手段で選択されたデバイスに前記コンフィグレーションファイルをデプロイするデプロイ手段を備え、前記デバイスは、前記デプロイ手段で前記コンフィグレーションファイルがデプロイされたときに、それが示すパイプラインを構成する複数のブロックを取得する取得手段と、前記コンフィグレーションファイルに従い、前記取得された複数のブロックを順に実行する実行手段とを備える。
【0013】
この発明の他の局面に従うと、推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個つなげたパイプラインの処理を行うパイプライン処理プログラムは、情報処理装置を、前記パイプラインを構成する各ブロックのファイルを記憶するブロックファイル記憶手段と、前記パイプラインの構成を定義した情報であって、前記パイプラインを構成する全てのブロックについての情報と、前記パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶する構成情報記憶手段と、前記パイプライン構成情報に従って、前記パイプラインの外部のプログラム(以下、「外部プログラム」という)から入力されたデータを用いて、前記パイプラインに含まれるブロックの各々をロードして実行し、前記パイプラインの処理の実行結果を前記外部プログラムに返すパイプライン処理制御手段として機能させるためのパイプライン処理プログラムである。
【0014】
好ましくは前記パイプライン処理プログラムは、前記情報処理装置を、さらに、前記外部プログラムに組み込まれて、この外部プログラムの実行環境において、前記パイプラインに含まれるブロックを実行するのに必要なソースコードのライブラリを記憶するコードライブラリ記憶手段として機能させることを特徴とする。
【発明の効果】
【0015】
この発明のある局面に従うパイプライン処理システムは、推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個繋げたパイプラインの処理を行う。パイプライン処理システムは、パイプラインを構成する各ブロックのファイルを記憶し、パイプラインの構成を定義した情報であって、パイプラインを構成する全てのブロックについての情報と、パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶し、パイプライン構成情報に従って、パイプラインの外部のプログラムから入力されたデータを用いて、パイプラインに含まれるブロックの各々をロードして実行し、パイプラインの処理の実行結果を外部プログラムに返す。これにより、パイプラインの処理を効率的に行うことができる。
【0016】
この発明の他の局面に従うパイプライン処理システムは、ブロックを複数組み合わせることでパイプライン処理を実行させるパイプライン処理システムであって、サーバは、複数のブロックを示すアイコンを画面上で配列させることでパイプラインの構成を表示させ、ユーザからの入力に基づいて、表示されるパイプラインの構成を変更し、表示されるパイプラインの構成に基づいて、そのパイプラインの構成を示すコンフィグレーションファイルを作成し、コンフィグレーションファイルをデプロイするデバイスを選択させ、選択されたデバイスにコンフィグレーションファイルをデプロイする。デバイスは、コンフィグレーションファイルがデプロイされたときに、それが示すパイプラインを構成する複数のブロックを取得し、コンフィグレーションファイルに従い、取得された複数のブロックを順に実行する。これにより、パイプラインを簡易かつ効率的に作成することができ、またパイプラインの構成を示すコンフィグレーションファイルを容易にデプロイすることができる。
【図面の簡単な説明】
【0017】
【
図1】本発明の第1の実施の形態における情報処理システムの構成を示すブロック図である。
【
図2】
図1のエッジデバイス200A,200Bの1つの構成を示すブロック図である。
【
図3】上記の情報処理システム1において主要な役割を果たすサーバ100、エッジデバイス200A,200Bの機能ブロックを示す図である。
【
図4】ブロックの作成と利用法を説明するための図である。
【
図5】アプリケーションからSDKに送られるパイプラインコンフィグレーションファイルと、それによるSDKの動作を示す図である。
【
図6】バッファを介して複数のブロック(ブロック1~ブロックN)が動作する状態を示した図である。
【
図7】複数の推論のループ(それぞれは時間的に異なる時期に実行される)におけるある1つのブロックが、そのブロックに対応付いた持続データコンテナを利用する状態を示した図である。
【
図8】複数のデバイスで分散コンピューティングを行う場合の処理を示す図である。
【
図9】ストレージWebサービスについて説明するための図である。
【
図10】コンフィグレーション、デプロイ、およびモニタリングWebサービスについて説明するための図である。
【
図11】AIエンジニアが特定のブロックまたはAIモデルをアップロードするためのウィンドウ(ストレージWebサービスのUIインターフェイス)を示す図である。
【
図12】コンフィグレーションWebサービスのWebページ画面を示す図である。
【
図13】Webインターフェイスから新しいパイプラインを作成する画面を示す図である。
【
図14】複数のデバイスに渡ってコンフィグレーションファイルをデプロイするためのWebページのUIを示す図である。
【
図15】パイプラインのデバッグ画面を示す図である。
【発明を実施するための形態】
【0018】
[第1の実施の形態]
図1は、本発明の第1の実施の形態における情報処理システムの構成を示すブロック図である。
【0019】
図1に示す情報処理システム1は、サーバコンピュータ100(以下、「サーバ100」と略す)と、インターネット400と、エッジデバイス200A,200Bと、コンピュータ資源500と、携帯デバイス600から構成される。この情報処理システム1は、推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個つなげたパイプラインの処理を行うパイプライン処理システムの一例である。エッジデバイス200A,200Bは、カメラ付きの監視デバイス、センサや出力装置を含む小型コンピュータなどである。携帯デバイス600は、スマートフォン、タブレット、ノートPCなどのモバイルデバイスである。
【0020】
サーバ100は、CPU101と、通信部103と、I/O105と、ROM107と、RAM109と、ハードディスク111と、音声入力/出力部113と、ディスプレイ115と、グラフィックユニット117と、キーボード119と、マウス121とを含んで構成されている。上記のハードディスク111には、請求項におけるパイプライン処理プログラムのうち、サーバ100側の機能を実現するプログラム(情報処理装置を、「ブロックファイル記憶手段」、及び「構成情報記憶手段」として機能させるためプログラム)が記憶されている。
【0021】
サーバ100は、インターネット400に接続される(LAN300を介しての接続でもよい)。インターネット400にはエッジデバイス200A,200Bと、コンピュータ資源500と、携帯デバイス600とが接続されている。インターネットに接続される機器の台数は何台でもよい。一部は接続されなくてもよい。
【0022】
ここでコンピュータ資源とは、サーバ、パーソナルコンピュータ、記憶装置(コンピュータ内のストレージ、NAS(Network Attached Storage)など)、および情報通信経路(ネットワーク、ロードバランサ、スイッチ、ルータなど)、並びに、それらを構成するCPU、メモリ、記憶装置(ハードディスク、光学的または磁気的記憶装置、SSDほか半導体デバイス)、ROM、マザーボード、キーボード、マウス、マイクなどの入力装置、ディスプレイ、およびスピーカなどの出力装置、並びに記憶装置から読み出され、一般にはメモリ上で動作するコンピュータプログラム、データなどのソフトウェアの全てまたは一部を示している。
【0023】
コンピュータ資源500やサーバ100は、インターネット400に直接接続されず、ルータ(図示せず)を介して接続されてもよい。ルータ、コンピュータ資源500、サーバ100にファイヤウォール機能を設けることにより、インターネット400側からコンピュータ資源500やサーバ100にアクセスすることが禁じられる。これにより、コンピュータ資源500やサーバ100がインターネット400を介して外部から操作されることはなく、また、コンピュータ資源500やサーバ100に記憶されたデータに外部からアクセスすることが禁止されている。
【0024】
各デバイス間の通信プロトコルは、HTTPS(Hypertext Transfer Protocol Secure)等により行われる。すなわち、SSL(Secure Sockets Layer)/TLS(Transport Layer Security)プロトコルによって提供されるセキュアな暗号化(秘密鍵、公開鍵を使ったデータ暗号化手法)の上でHTTP通信が行われるので、コンピュータ資源500およびサーバ100などの間の通信内容を秘匿化することができ、その通信内容が第三者に漏洩することは防止される。通信内容の第三者への漏洩を防ぐことができるのであれば、HTTPS以外の暗号化通信を行っても良い。
【0025】
図2は、
図1のエッジデバイス200A,200Bの1つの構成を示すブロック図である。
【0026】
エッジデバイス200A,200Bの各々は、CPU201と、通信部203と、I/O205と、ROM207と、RAM209と、メモリやハードディスク等のストレージ211と、音声入力/出力部213と、ディスプレイ215と、グラフィックユニット217と、操作部219と、カメラ221とを含んで構成されている。これはエッジデバイスの具体例であり、エッジデバイスは、各種センサなどを含んでいてもよいし、カメラを直接有さず、カメラと接続された構成であってもよい。上記のストレージ211には、パイプライン処理プログラム220が格納されている。このパイプライン処理プログラム220は、請求項におけるパイプライン処理プログラムのうち、エッジデバイス200A,200B側の機能を担当するプログラム(情報処理装置を、「パイプライン処理制御手段」として機能させるためプログラム)である。
【0027】
ハードディスク111,ストレージ211には、CPU101,201によって順に実行されることで、サーバ100やエッジデバイス200A,200Bを情報処理装置として動作させるコンピュータ読取り可能な実行形式のプログラムが複数記録されている。プログラムは、ハードディスク111、ストレージ211から読み出され、RAM109,209上に展開される。プログラムは、RAM109,209上でCPU101,201によって実行される。
【0028】
サーバ100、エッジデバイス200A,200B、コンピュータ資源500、および携帯デバイス600は情報端末(デバイス)であり、後述するブロックを実行することで、パイプラインコンフィグレーションに従った動作(データ処理)を行うことができる。
【0029】
図3は、上記の情報処理システム1において主要な役割を果たすサーバ100、エッジデバイス200A,200Bの機能ブロック(注:請求項における「ブロック」とは異なり、マイコンを含む通常の情報処理機器における「機能ブロック」を意味する)を示す。サーバ100は、機能ブロックとして、ブロックファイル記憶部131と、SDK記憶部132と、構成情報記憶部133と、ユーザインタフェース部134と、パーフォーマンス表示135とを備えている。上記のブロックファイル記憶部131と、SDK記憶部132と、構成情報記憶部133と、ユーザインタフェース部134と、パーフォーマンス表示部135とは、それぞれ、請求項におけるブロックファイル記憶手段と、コードライブラリ記憶手段と、構成情報記憶手段と、ユーザインタフェース手段と、パーフォーマンス表示手段に相当する。また、上記のブロックファイル記憶部131と、SDK記憶部132と、構成情報記憶部133とは、サーバ100のハードディスク111により実現される。ユーザインタフェース部134は、主に、サーバ100のCPU101と、通信部103と、ディスプレイ115と、グラフィックユニット117と、キーボード119と、マウス121とにより実現される。パーフォーマンス表示部135は、主に、サーバ100のCPU101と、通信部103と、ディスプレイ115と、グラフィックユニット117とにより実現される。
【0030】
ブロックファイル記憶部131は、上記のパイプラインを構成する各ブロックのファイルを記憶する。SDK記憶部132は、外部プログラムに組み込まれて、この外部プログラムの実行環境において、上記のパイプラインに含まれるブロックを実行するのに必要なソースコードのライブラリであるSDK(Software Development Kit)を記憶する。構成情報記憶部133は、上記のパイプラインの構成を定義した情報であって、パイプラインを構成する全てのブロックについての情報と、パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶する。ユーザインタフェース部134は、ユーザ(後述するパイプラインマネージャー)が、上記のパイプライン構成情報を編集して、このパイプライン構成情報のうち、端末側パイプライン構成情報を、エッジデバイス200A,200Bのストレージ211の端末側構成情報記憶部231に書き込むためのユーザインタフェース等の機能を提供する。パーフォーマンス表示部135は、エッジデバイス200A,200Bの各々から、各ブロックのインスタンスの処理のパーフォーマンス情報を受信して表示する。
【0031】
また、エッジデバイス200A、200Bは、いずれも、機能ブロックとして、端末側構成情報記憶部231と、パイプライン処理制御部232と、送受信部234とを備えている。上記の端末側構成情報記憶部231、パイプライン処理制御部232、送受信部234は、それぞれ、請求項における端末側構成情報記憶手段、パイプライン処理制御手段、送受信手段に相当する。また、上記の端末側構成情報記憶部231は、エッジデバイス200A、200Bのストレージ211により実現される。パイプライン処理制御部232は、主に、エッジデバイス200A、200BのCPU201とパイプライン処理プログラム220(
図2参照)により実現される。送受信部234は、主に、
図2の通信部203により実現される。なお、
図3中のアプリケーション233は、請求項における「外部プログラム」に相当する。
【0032】
端末側構成情報記憶部231は、ユーザ(パイプラインマネージャー)がユーザインタフェース部134を用いて編集したパイプライン(全体の)構成情報のうち、少なくとも、当該エッジデバイスで実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を記憶する。パイプライン処理制御部232は、上記の端末側パイプライン構成情報(又はユーザインタフェース部134を用いて編集したパイプライン全体の構成情報)に従って、パイプラインの外部のプログラムであるアプリケーション233から入力されたデータを用いて、パイプラインに含まれるブロック(のうち、当該エッジデバイスで実行するブロック)の各々をロードして実行し、このパイプライン処理の実行結果をアプリケーション233に返す。また、上記の送受信部234を用いて、エッジデバイス200A、200Bの各々が、自機で実行する各ブロックのインスタンスの出力を、ネットワーク(インターネット400)を介して、それを入力として用いる別のエッジデバイスに送ることが可能で、別のエッジデバイスにおける各ブロックのインスタンスからの出力を、ネットワークを介して、自機における各ブロックのインスタンスへの入力として受信することができる。上記の送受信部234は、自機における各ブロックのインスタンスの処理のパーフォーマンス情報をサーバ側に送信する処理や、上記のサーバ側から送られる端末側パイプライン構成情報の受信処理にも、用いられる。
【0033】
次に、以下の項目に従って本発明について説明する。
**********
(1)システム構成
(1-0)用語について(定義)
(1-1)SDKコンポーネント
(1-2)ブロック
(1-2-1)ブロックの作成方法と使用方法
(1-2-2)シングルブロック実行
(1-2-3)SDK内のブロック仕様とアクセス
(1-2-4)ブロック実行依存判定
(2)マルチデバイス分散コンピューティングフレームワーク
(3)セレクター+トレーナーメカニズム
アプローチ
SDKでのセレクターの実装
フロー
(4)インターフェイスのデザイン
(4-0)システム全般
ストレージWebサービス
(4-0-1)AIブロックとモデルファイルをアップロードする
Webサービスの構成、デプロイ、および監視
(4-1-0)デプロイされたパイプラインを表示する
(4-1-1)Webインターフェイスから新しいパイプラインを作成する
(4-1-2)パイプラインをインターフェイスにデプロイする
(4-1-3)パイプラインをデバッグしてメトリクス(評価尺度)を取得する
**********
(1)システム構成
(1-0)用語について
以下、本明細書で用いられる用語について説明する。これら用語は、発明の実施の形態の一例を説明するためのものであり、発明の外延がこれによって限定されるものではない。
【0034】
「モデルファイル」とは、特定の入力データに対して特定のデータを出力するようにトレーニングされたパラメータ及び命令の定義を含むファイルである。トレーニングとは、一連のデータセット(入力データと出力データ(ラベル)の組み合わせ)を使ってモデルのパラメータを最適化する処理である。トレーニングされたモデルは、トレーニング用のデータセットと異なる入力データについても推論が可能となる。
【0035】
「ブロック」とは、実行時にロードされるコンパイル済みのコード命令である。多くの場合、各ブロックは所定の入力とブロックパラメータを受け取り、コード命令とブロックパラメータに基づいて入力に対して処理を実行する。各ブロックは、実行ステップの一部としてモデルファイルをロードすることにより、1つ以上のAIモデルファイルをロードすることもできる。複数のブロックは、望ましいシーケンシャルな方法で集合的に実行されることで、パイプラインを構成する。
【0036】
「ブロックパラメータ」とは、コードの実行に影響を与える、実行時にブロックに提供される値/変数またはパラメータを示す。
【0037】
「AIブロック」とは、そのコード命令の一部として、ライフサイクルの任意の時点で1つ以上のモデルファイルをロードするブロックである。すなわち「AIブロック」とは、推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムである。
【0038】
「非AIブロック」とは、そのコード命令の一部として、ライフサイクルのどの時点においてもモデルファイルをロードする必要がないブロックである。
【0039】
「パイプライン」とは、目的のビジネスユースケースで実行する必要がある一連の計算手順であり、パイプラインの各ステップはブロックで表される。なお、この「パイプライン」は、Unix系オペレーティングシステムにおける「パイプ」又は「パイプライン」に相当する。
【0040】
「パイプラインコンフィグレーションファイル」とは、以下を記述するコンフィグレーション(構成)ファイルである。(A)目的のパイプラインを構成するすべてのブロック、(B)パイプライン内の各ブロックの実行順序と依存関係グラフ、(C)各ブロックに渡される個々のブロックパラメータとモデルファイル。すなわち「パイプラインコンフィグレーションファイル」とは、パイプラインの構成を定義した情報であって、パイプラインを構成する全てのブロックについての情報と、パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報(の)ファイルである。この「パイプライン構成情報」は、サーバ100側で、UIを用いた入力情報に基づいて作成され、アプリケーションを実行する情報端末(エッジデバイス200A,200B等)にダウンロードされる。パイプラインコンフィグレーションファイルを省略して、単にコンフィギュレーションファイルとも呼ぶ。
【0041】
(1-1)SDKコンポーネント
「SDK」とは、コードライブラリであり、以下の特徴を有する。(A)任意のオペレーティングシステムおよび任意のプログラミング言語用のソフトウェアプロジェクト内に含めることができる。(B)統合されている外部アプリケーション(請求項における「外部プログラム」)から一部のデータを取り込み、パイプラインコンフィグレーションファイルで定義されている一連のコンピュータ処理を実行し、結果の出力があればそれを外部アプリケーションに返す。(C)AIアプリケーションの実行に必要なメモリ空間の割り当てを管理する。(D)パイプラインの実行速度を最適化する。
【0042】
「アプリケーション」(請求項における「外部プログラム」)とは、コンポーネントの一部としてSDK(上記定義された機能を含む)を含み、SDKからデータを送受信するソフトウェアである。
【0043】
以下、SDKのコンポーネントについて説明する。コンポーネントは、バッファ、ブロックシーケンスマネージャー、I/Oマネージャー、セッティングマネージャー、およびフレームワークSDKマネージャーを含んでいる。それぞれについて説明する。
【0044】
「バッファ」は、SDK処理の入力データと出力データを格納するためのメインコンテナオブジェクトである。これは、データ処理に役立つ機能を備えたフラットバッファ(FlatBuffer)のラッパーである。バッファは、アプリケーション側で作成され、アプリケーション側で必要な入力データが入力され、この入力データはSDKに渡されて参照オブジェクトとして処理される。結果は同じバッファに格納され、アプリケーション側は同じバッファオブジェクトを独自の処理に使用できる。
【0045】
「ブロックシーケンスマネージャー」は、メインのAI処理を含む複数のブロックのインスタンスを作成する。複数のブロックインスタンスを作成すると、それらは内部配列に格納され、使用できるようになる。ブロックシーケンスマネージャーは、バッファを入力として使用してブロックのシーケンスも実行する。このコンポーネントは、推論の実行のメインコントローラーとして使用される。
【0046】
「I/Oマネージャー」には、メインのデータコンテナであるバッファが含まれている。これは、現在のバッファインスタンスを格納するためのバッファハンドラーとして機能し、過去のバッファインスタンスを格納するためのバッファハンドラーとしても機能する。I/Oマネージャーは、ブロックシーケンスマネージャーに含まれており、前述のように過去のバッファを格納する機能を備えている。
【0047】
「セッティングマネージャー」のモジュールには、次の目的がある。(1)指定された形式で設定を読み取り、ロードする。(2)設定の変更・変化を確認する。(3)ファイル/モデルの復号化を実行する。(4)SDKライセンスをアクティブ化/非アクティブ化する。
【0048】
「フレームワークSDKマネージャー」のフレームワークSDKは、外部インターフェイスとして使用されるコンポーネントである。これには、アプリケーション側と対話するためのすべての公開関数が含まれている。完全なSDK機能には、フレームワークSDKクラスのメンバー関数を使用してのみアクセスする必要がある。
【0049】
(1-2)ブロック
(1-2-1)ブロックの作成方法と使用方法
各ブロックは基本的に共有ライブラリ(.soファイル)であり、その実行依存関係はSDKのものと同じである。これらを使用するには、ヘッダー(ブロックの実行に必要なすべての依存関係を含む)を含め、実行時にSDKライブラリから共有オブジェクトファイルをロードする必要がある。
【0050】
SDKに新しい依存関係を追加する必要がある場合はいつでも、SDKライブラリを再コンパイルし、アプリケーションが使用するプロジェクトに再度含める必要がある。同様に、SDKの新機能(新しい依存関係を含む)を使用するには、各ブロックの共有ライブラリファイルの新しいバージョンをリビルドして作成する必要がある。
【0051】
図4の上図は、C++言語(他のコンピュータ言語でもよい)で記述されたコードから.soの拡張子をもつブロックファイルがビルド(コンパイル)されることで、ブロックが作成される状態を示している。
【0052】
図4の下図は、ブロックが使われる環境を示している。単数または複数のブロックが実行時にSDKにダイナミックライブラリとしてロードされる状況が示されている。ダイナミックライブラリとは、実行時にプログラムとリンクする、動的リンクを用いたライブラリである。SDKのライブラリは、アプリケーションの内部に統合される。
【0053】
(1-2-2)シングルブロック実行
ブロックは、実行時にロードされるとき、次の情報を必要とする。
【0054】
(A)ブロックに関連するブロックパラメータ
(B)ブロックの実行に必要なモデルファイル(およびその他のアセット)
図5は、アプリケーションからSDKに送られるパイプラインコンフィグレーションファイルと、それによるSDKの動作を示す図である。
【0055】
図5に示すように、SDKは、セッティングマネージャーと、ブロックシーケンスマネージャーとを含んでいる。アプリケーションからSDKにパイプラインコンフィグレーションファイルが送られると、セッティングマネージャーはその内容を読取り、解釈する。セッティングマネージャーは、それから、それぞれのブロックのパラメータとアセットと共に、生成させてロードさせるべき必要なブロック(及びそのローカルパス)を示す。
【0056】
セッティングマネージャーはブロックシーケンスマネージャーに、ブロックファイルのパスと、モデルファイルのパスと、ブロックパラメータを送る。
【0057】
ブロックシーケンスマネージャは、実行時に必要とされる全てのブロックをロードし、それらに、必要とされるすべてのブロックパラメータとアセット(必要であればモデルファイルも)を提供する。
【0058】
(1-2-3)SDK内のブロックの仕様とアクセス
単一の推論ループへの入力データは、アプリケーションが入力データを書き込むバッファの名前空間(「この範囲内では、異なる変数には、異なる名前を付けなければならない」という範囲における名前)を記載することで定義される。
【0059】
(仕様1)バッファアクセス
各ブロックは共通のバッファにアクセスでき、データをバッファに書き込む機能と、バッファに存在するデータを読み取る機能を備えている。これにより、各ブロックは、
(A)その出力をバッファに保存し、その出力は、後で同じ推論ループで実行される他のブロック(下流のブロック)によって読み取られることができる。また、
(B)同じ推論ループで以前に実行されたブロック(上流のブロック)の出力データを読み取ることができる。
【0060】
図6は、バッファを介して複数のブロック(ブロック1~ブロックN)が動作する状態を示した図である。バッファは、アプリケーションからデータを入力し、一時保存する。これをトリガとして(またはトリガとせず他のタイミングで)、最上流のブロック1はバッファに保存されたデータを読み出し、データを処理し、下流での使用のために出力データをバッファに書き込む。その1つ下流のブロック2は、上流のブロック1が書き込んだデータ(およびアプリケーションがバッファに入力したデータを用いてもよい)を入力し、データを処理し、下流での使用のために出力データをバッファに書き込む。
【0061】
同様に次のブロック3から最下流のブロックNまで順に処理が行われ、最終のデータがバッファに書き込まれると、それが最終的な出力データとなる。
【0062】
(仕様2)持続データコンテナ
「ブロック固有のデータ」とは、特定のブロックの実行のコンテキストに関連するデータである。このブロック固有のデータは、それが属するブロック以外のブロックでは必要とされない。
【0063】
各ブロックには、そのブロックが使用できる持続データコンテナがある。各ブロックは、持続データコンテナにブロック固有のデータを書き込むこと、ブロック固有のデータを読み取ること、ブロック固有のデータを削除すること、が可能である。
【0064】
各持続データコンテナは、各ブロックに固有である。持続データコンテナ内のデータは、ブロックロジックによって明示的に削除されない限り、SDKインスタンスのライフサイクルを越えて保持される。持続データコンテナ内のデータは、ブロックロジックによって明示的に削除されない限り、複数の推論ループにわたって保持される。
【0065】
これにより、各ブロックは、その出力、又はいくつかの中間情報を、持続データコンテナに保存して、将来の推論ループ(時間的な下流ブロック)において、時間的に後の時点で、同じブロックによって後で読み取ることができ、また、各ブロックは、過去の推論ループ(時間的な上流のブロック)で以前に実行されたブロックの出力データまたはいくつかの中間情報を読み取ることができる。
【0066】
特定の推論ループのデータを一意に識別するアクセスメカニズムは以下の通りである。各推論ループには、アプリケーションがその推論ループの入力を渡したときにアプリケーション側によって設定される一意のリクエストID(RequestID)がある。このRequestIDは、持続データコンテナにデータを設定およびデータを取得するために使用される。
【0067】
図7は、複数の推論のループ(それぞれは時間的に異なる時期に実行される)におけるある1つのブロックが、そのブロックに対応付いた持続データコンテナを利用する状態を示した図である。右のループほど時間的に後に実行されるものであることを示している。ブロックは各推論ループにおいて、持続データコンテナ内に情報を書き込んだり、持続データコンテナから情報を読み込んだり、情報を削除することができる。
【0068】
(1-2-4)ブロック実行依存判定
パイプラインコンフィグレーションファイルには、次のコンテンツが含まれる(それ以外の情報も含まれる)。
【0069】
(A)複数のブロックが定義されているリスト([ブロック1、ブロック2、ブロック3、・・・])。1つのブロックは、必要に応じて他のブロックの実行に依存することができる。
【0070】
(B)従属ブロックが実行された後にのみブロックの実行が発生するブロックの、ブロックの有向非巡回グラフの定義
ランタイムのブロック実行を最適化するための方針は、
(A)そのブロックが依存するすべての依存ブロックが実行されたブロックを実行すること、
(B)全ての依存ブロックが実行されたブロックが複数ある場合は、各ブロックを別々のスレッドで生成すること、である。
【0071】
我々は、これらを達成するために、カーンのアルゴリズム(Kahn’s algorithm)を修正したものをパラレルに使用する。
【0072】
(2)マルチデバイス分散コンピューティングフレームワーク
SDKの複数のインスタンスは、同じアプリケーション/デバイスで実行できる。また、SDKの各インスタンスは、他のインスタンスとは独立して実行できる。
【0073】
1つのSDKインスタンスの出力は、それを入力として使用できる別のデバイスにネットワーク経由で送信できる。アプリケーションは、ブロックステップ(独自の入力と出力を持つブロック)ごとに各SDKインスタンスを作成する。すなわちブロックステップごとに新しいSDKインスタンスが作成される。アプリケーション(またはラッパー層)は、パイプラインコンフィグレーションからブロックステップごとに独自のSDKインスタンスを作成する必要がある。
【0074】
図8は、複数のデバイスで分散コンピューティングを行う場合の処理を示す図である。ここではデバイス1とデバイス2との間で分散コンピューティングが行われている。
【0075】
デバイス1は例えばデジタルカメラ(ビデオ)を備え、処理速度の遅いハードウェアで画像を処理し、出力するデバイス(例えばエッジデバイスやIoTデバイス)である。デバイス1は、ブロック1~3を直列に用いてカメラからの画像を処理する。重い処理が必要であるブロック4、5は高性能のデバイス2で実行され、実行後のデータがデバイス2から1へ送られる。ブロック6、7はデバイス1で実行され、出力データは再度デバイス2へ送られる。デバイス2ではブロック7の実行結果をブロック8、9で処理する。
【0076】
デバイス間のデータ転送(およびどのデータをどこに送信するかの判断)は、アプリケーション側によって処理される。
【0077】
(4)インターフェイスのデザイン
(4-0)システム全般
以下、システムに関与する開発者や、ユーザについて説明する。
【0078】
「AIエンジニア」は、コンフィグレーションファイルに保存され、含まれるAIブロックとモデルを作成する者である。
【0079】
「パイプラインマネージャー」とは、ブロックやコンフィグレーションファイルをつなぎ合わせ、複数のデバイスに渡ってコンフィグレーションファイルをデプロイし、システムの実行を監視するために、特定の顧客とデプロイの要件を考慮する者である。
【0080】
以下、システムの構成要素について説明する。
【0081】
「アセットコンテナ」とは、クラウドにおいて、生(未編集でありオリジナルの)のアセット(AIブロックとモデル)が保存される場所である。
【0082】
「アセットデータベース」とは、アセット(AIブロックとモデル)をすばやく取得できるようにするために、アセットのインベントリに関する情報と、各アセットの関連情報を保存するデータベースである。
【0083】
「ストレージWebサービス」とは、AIエンジニアがアセットを適切なアセットコンテナに配置し、各AIアセットに対して適切な関連情報とタグを保存して、各アセットを後で検索して取得できるようにするWebサービスである。
【0084】
「コンフィグレーション、デプロイ、およびモニタリングWebサービス」とは、パイプラインマネージャーを支援するWebサービスである。
【0085】
図9は、ストレージWebサービスについて説明するための図である。
【0086】
図9に示すように、AIエンジニアはストレージWebサービスに対して、AIアセットを必要な情報とともにアップロードする。ストレージWebサービスは、アセットコンテナに、生(未編集でありオリジナル)のアセットファイルを保存する。また、アセットデータベースに、アセットをすばやく取得できるようにするための情報をサポート情報とともに保存する。
【0087】
図10は、コンフィグレーション、デプロイ、およびモニタリングWebサービスについて説明するための図である。
【0088】
図10に示すように、パイプラインマネージャーは、「コンフィグレーション、デプロイ、およびモニタリングWebサービス」にアクセスし、操作を行うことで、アセットデータベースから、アセットをすばやく取得できるようにするための情報をサポート情報とともに取得する。また、アセットコンテナから必要な生のアセットを取得する。また、パイプラインマネージャーは、「コンフィグレーション、デプロイ、およびモニタリングWebサービス」を介して単数または複数のデバイスへ必要なコンフィグレーションファイルをデプロイする。このようにしてコンフィグレーションファイルが作成され、それが各デバイスにデプロイされる。
【0089】
次にストレージWebサービスについて説明する。
【0090】
(4-0-1)AIブロックとモデルファイルのアップロード
AIエンジニアが特定のブロックまたはAIモデルを構築すると、内部の職員がアクセスできる中央のストレージWebサービスにそれらが格納される。アップロードされたアセットは、後で検索して取得できるように、適切な関連情報とタグとともにストレージコンテナに保存される。
【0091】
図11は、AIエンジニアが特定のブロックまたはAIモデルをアップロードするためのウィンドウ(ストレージWebサービスのUIインターフェイス)を示す図である。
【0092】
図の上側から順に、AIエンジニアによって付与されるブロック名(Block Name)の入力欄、アップロードするファイルを選択するためのボタン(Select File)、ブロックの説明(Description)を入力する欄、対応するハードウェア(Hardware Support)を選択するチェックボックス、対応するOS(OS Support)を選択するチェックボックス、ブロックに付与するタグ(Tags)の入力欄、ブロックパラメータ(Block Parameters)の入力欄、及びアップロード(Submit)ボタンが表示されている。
【0093】
ブロックの説明(Description)を入力する欄は、パイプラインマネージャーがコンフィグレーションファイルを作成するときに正しい判断ができるように、そのブロックの説明を入力する欄である。
【0094】
対応するハードウェアを選択するチェックボックスは、そのブロックの対応ハードウェアや対応CPUをチェックさせる箇所である。例えばX86系、ARM系、CUDAアクセレータなどのハードウェアが選択可能である。
【0095】
対応するOSを選択するチェックボックスは、そのブロックの対応OSを選択させる箇所である。例えばLinux、Windows、MacなどのOSが選択可能である。
【0096】
ブロックに付与するタグの入力欄は、ユーザが後にブロックへ迅速なアクセスを行うことができるように付与されるカスタマータグを選択させるものである。
【0097】
ブロックパラメータの入力欄は、そのブロックに必要とされるパラメータと、それぞれの初期値と、それぞれのパラメータの説明を入力する部分である。
【0098】
次に、「コンフィグレーション、デプロイ、およびモニタリングWebサービス」について説明する。「コンフィグレーション、デプロイ、およびモニタリングWebサービス」(コンフィグレーションWebサービス)は、以下の機能、画面を有する。
【0099】
(4-1-0)デプロイされたパイプラインを表示する
コンフィグレーションWebサービスのWebページを使用すると、パイプラインマネージャーは、デプロイされたすべてのパイプラインを表示させたり、新しいパイプラインを作成してデプロイしたりすることができる。
【0100】
図12は、コンフィグレーションWebサービスのWebページ画面を示す図である。
【0101】
ここに示されるように、デプロイされたすべてのパイプラインが一覧となって表示される。それぞれのパイプラインに対して、その名称、バージョン、顧客、説明、およびそのパイプラインのアップデートボタンが表示される。また、画面右上のボタンを押すことで、新しいパイプラインを作成、追加することができる。
【0102】
(4-1-1)Webインターフェイスから新しいパイプラインを作成する
図13は、Webインターフェイスから新しいパイプラインを作成する画面を示す図である。
【0103】
この画面は、コンフィグレーションWebサービスのWebページ画面(
図12)の右上のボタンを押すことで表示される。
図13の画面は、コンフィグレーションファイルを作成するためのUIである。この画面でパイプラインマネージャーは、複数のブロックを示すアイコンを画面上で配列させることでパイプラインを構成することができる。
【0104】
画面の左上にパイプラインの名称(Pipeline Name)が表示され、それを変更することができるようになっている。その下に表示される「Block Inventory」の部分は、アセットコンテナに保存されている情報に基づいてブロックを検索するための部分である。ここでは対応ハードウェア、計算アクセラレータなどをキーにして検索(フィルタリング)を行い、条件にあったブロックが表示される。表示されたブロックを選択することで、その説明が表示される。表示されたブロックは、中央のパイプライン図ビルダーにドラッグアンドドロップすることが可能である。
【0105】
画面左下に表示される「Data Source/Sinks」は、そのパイプラインを構成する各ブロックリスト(ブロックの集合)についての入出力タイプを定義する部分である。この欄に示されるソース1(Source 1),及びソース2(Source 2)は、データソース(入力)のブロックであり、シンク1(Sink 1)は,データを受信するブロックである。データソースは、パイプラインの外部のプログラム(外部アプリケーション)から入力されたデータでありうる。
【0106】
画面中央は、ドラッグアンドドロップでパイプライン図を描画し、その図に対応するパイプラインを作成するパイプライン図ビルダーである。
【0107】
画面中央下には、特定のコンフィグレーションの様々なブロックリストのうち、ビルダーに表示するものを選択するためのトグルが表示される。ここではBlockList1、BlockList2、BlockList3のうちの1つが選択可能となっており、BlockList1が選択されている状態を示している。
【0108】
1つのブロックリストは単数のブロックまたは複数のブロックの組み合わせからなり、複数のブロックリストを含むパイプライン(コンフィグレーション)を作成することが可能である。もちろん、1つのパイプラインに1つのブロックリストのみが存在することとしてもよい。
【0109】
画面右の「Configuration」は、選択されたブロックのブロックパラメータや、パイプラインレベルでのパラメータを設定するための部分である。
【0110】
この画面を使ってパイプラインマネージャーは、AIエンジニアが作成したブロックを組み合わせ、入力と出力を設定し、パイプラインを構成する。
【0111】
(4-1-2)パイプラインをインターフェイスにデプロイする
パイプラインの定義が完了したら、次のステップは、パイプラインの各ブロックリストをデプロイする場所を決定することである。
【0112】
図14は、複数のデバイスに渡ってパイプラインコンフィグレーションファイルをデプロイするためのページのUIを示す図である。
【0113】
この画面は、新しいパイプラインを作成する画面(
図13)の右上の「SAVE&NEXT」ボタンが押されることで表示される。画面左下には、パイプラインに記述されたブロックリストのうち、表示するものを選択するためのトグルが表示される。選択されたブロックリストが画面の左上に表示される。ここでは「BlockList1」が選択されている場合を想定している。
【0114】
画面右は、選択されたブロックリスト(ここではBlockList1)をデプロイするデバイスを選択するための欄である。パイプラインマネージャーは、所望の条件を入力し、条件に合致するデバイスを検索し、その検索結果からデプロイするデバイスを選択する。ここでは、Device 1A~1Cが選択されているものとする。「Selected Devices」として、既に選択されたデバイスのリストが表示される。もしも検出されたデバイスのタイプから、パイプラインがそのデバイスで動作しないなど不具合がある場合には、エラーがポップアップ表示される。
【0115】
「Input Source」の欄には、パイプラインの入力が定義される。例えば、ローカルのビデオファイル、ライブカメラ出力、リモートカメラの出力などが入力として定義される。
【0116】
(4-1-3)パイプラインをデバッグしてメトリクスを取得する
図15は、パイプラインのデバッグ画面を示す図である。
【0117】
この画面は、コンフィグレーションファイルをデプロイするためのページ(
図14)のUI画面の右上の「Deploy」ボタンが押されることで表示される。
【0118】
図14でのデプロイ後、推論実行のプロファイリング結果が集中型サーバーに送信され、そこでデータが処理され、
図15に示されるように、結果がWebサービスに表示される。
【0119】
図15の画面左下には、パイプラインに記述されたブロックリストのうち、表示するものを選択するためのトグルが表示される。選択されたブロックリストが画面の左上に表示される。ここでは「BlockList1」が選択されている場合を想定する。
【0120】
表示されたブロックリストに含まれるブロックのそれぞれに、遅延(レイテンシ)情報が表示される。また、画面の右には上から順に、パイプライン全体でのレイテンシ、パイプライン全体実行におけるメモリ使用のプロファイル、特定のAIブロックの精度の検出結果(例えば人数カウントの精度、頭部の方向の検出の精度、頭部の検出の精度)が表示される。
【0121】
これを見ることでパイプラインマネージャーは、システム全体の処理速度、メモリの利用状況(パフォーマンス)を把握することができ、またどのブロックで遅延が生じているかを判断することができる。AIの判定精度を確認することもできる。ブロックでの遅延は、前段のブロックからデータが送られてこないことが原因であるもの、ハードウェアが貧弱であるためブロック自体の処理速度が遅いことが原因であるものなどがある。遅延によっては、パイプラインマネージャーは、特定のブロックを実行するハードウェアを貧弱なものから強力なものに変更させたり(すなわちそのブロックをデプロイするハードウェアを変更する)、ブロックの組み合わせ方を変更することで、遅延が生じないようにシステムをアップデートすることができる。
【0122】
また、あるAIブロックの判定精度が悪ければ、それを異なるブロックに置き換えたり、学習データをアップデートしたり、追加学習をさせたりすることができる。さらに新しいAIブロックがAIエンジニアによって作られたときには既存のブロックをそれで置き換えたり、ハードウェアのアップデートがあったのであればそれに対応したパイプライン構成にアップデートすることも可能である。
【0123】
上記のように、本実施形態のパイプライン処理システムである情報処理システム1によれば、推論処理用の学習済ニューラルネットワークモデルをロードする機能を有する実行形式プログラムであるブロックを、複数個繋げたパイプラインの処理を行う。情報処理システム1(パイプライン処理システム)は、パイプラインを構成する各ブロックのファイルを記憶し、パイプラインの構成を定義した情報であって、パイプラインを構成する全てのブロックについての情報と、パイプラインを構成する各ブロックの実行順序に関する情報とを含む、パイプライン構成情報を記憶し、パイプライン構成情報に従って、パイプラインの外部のプログラムから入力されたデータを用いて、パイプラインに含まれるブロックの各々をロードして実行し、パイプラインの処理の実行結果を外部プログラムに返す。これにより、パイプラインの処理を効率的に行うことができる。
【0124】
上記説明において、各ブロックは引数としての入力を行い、計算結果を特定の場所(次段のブロックの入力や、結果を入力するサーバや表示装置など)に出力するものである。返り値、戻り値として出力を行ってもよい。また、例えば入力のみ、出力のみを行うブロック(入力なしで定数や時刻などを出力するブロックなど)を作成してもよい。
【0125】
本発明はAI(機械学習、ニューラルネットワーク)を用いたシステムを構築し、保守する場合に特に効果を奏するが、AIを使わないシステムに本発明を適用してもよい。
【0126】
各ブロックは、CPUの命令コードに合わせた実行ファイルとしてもよいが、Javaバイトコードのように情報端末上の仮想マシーン(JVMなど)で実行するための中間コードが記載されたファイルとしてもよい。さらには、各ブロックをソースコードを記述したファイルとし、情報端末でコンパイルして使用したり、情報端末上のインタプリタで実行させることとしてもよい。
【0127】
デプロイは、ブロックをまとめたパイプラインの状態でサーバから情報端末(例えば、エッジデバイス200A、200B)にファイルを送信し、それを情報端末で実行させることで行ってもよいし、必要な各ブロックとコンフィグレーションファイルを送信することとしてもよい。パイプラインの処理が複数の情報端末をまたいで実行される場合には、サーバから情報端末に送信されるパイプライン構成情報は、この情報端末で実行される範囲のものでもよい。すなわち、サーバは、作成した(パイプライン全体の)パイプライン構成情報のうち、該当の情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を、この情報端末に送って、この情報端末のメモリやハードディスク等のストレージ(請求項における「端末側構成情報記憶手段」)に記憶させる。また、コンフィグレーションファイルを情報端末に送ることで、情報端末が外部サーバにアクセスし、外部サーバから必要なファイル(ブロック等)をダウンロードするようにしてもよい。
【0128】
図15で得られたパフォーマンスに関する情報に基づいて、サーバが演算によって自動的にパイプラインの構成(ブロックの配列)を最適化するようにしてもよい。最適化されたコンフィグレーションファイルで、端末装置に記憶されたコンフィグレーションファイルを自動的に更新(書き込み)するようにしてもよい。
【0129】
また、上記のように、サーバが、作成した(パイプライン全体の)パイプライン構成情報のうち、少なくとも、該当の情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む、端末側パイプライン構成情報を、この情報端末に送って、この情報端末のストレージに記憶させた上で、サーバが、上記の情報端末の各々から、該当の情報端末で実行される各ブロックのインスタンスの処理のパーフォーマンス情報を受信して、これらのパーフォーマンス情報に基づいて、上記のパイプライン構成情報を自動的に編集して、このパイプライン構成情報のうち、少なくとも、該当の情報端末に関連する端末側パイプライン構成情報(少なくとも、該当の情報端末で実行するブロックについての情報と、これらのブロックの実行順序に関する情報とを含む構成情報)を、該当の情報端末に送って、この情報端末のメモリやハードディスク等のストレージに書き込むようにしてもよい。
【0130】
コンパイル前のSDKのソースコードはサーバ側に記憶されるが、外部のアプリケーションに組み込まれた、コンパイル後のSDKのソースコード(のライブラリ)は、サーバ側から各情報端末にダウンロードされて、各情報端末に記憶されるようにしてもよい。
【0131】
[発明の他の構成例]
発明の構成として、以下のものも考えられる。
【0132】
(A)システムとしての構成
ブロックを複数組み合わせることでパイプライン処理を実行させるパイプライン処理システムであって、
前記ブロックは、データの入力と出力とを行うコンピュータで実行可能な電子ファイルであり、
前記パイプライン処理システムは、サーバとデバイスとから構成され、
前記サーバは、
前記複数のブロックを示すアイコンを画面上で配列させることでパイプラインの構成を表示させる表示手段と、
ユーザからの入力に基づいて、前記表示手段に表示されるパイプラインの構成を変更する変更手段と、
前記表示手段に表示されるパイプラインの構成に基づいて、そのパイプラインの構成を示すコンフィグレーションファイルを作成する作成手段と、
前記コンフィグレーションファイルをデプロイするデバイスを選択させる選択手段と、
前記選択手段で選択されたデバイスに前記コンフィグレーションファイルをデプロイするデプロイ手段を備え、
前記デバイスは、
前記デプロイ手段で前記コンフィグレーションファイルがデプロイされたときに、それが示すパイプラインを構成する複数のブロックを取得する取得手段と、
前記コンフィグレーションファイルに従い、前記取得された複数のブロックを順に実行する実行手段とを備える、パイプライン処理システム。
【0133】
このパイプライン処理システム(情報処理システム1)は、ブロックを複数組み合わせることでパイプライン処理を実行させるパイプライン処理システムであって、サーバは、複数のブロックを示すアイコンを画面上で配列させることでパイプラインの構成を表示させ、ユーザからの入力に基づいて、表示されるパイプラインの構成を変更し、表示されるパイプラインの構成に基づいて、そのパイプラインの構成を示すコンフィグレーションファイルを作成し、コンフィグレーションファイルをデプロイするデバイスを選択させ、選択されたデバイスにコンフィグレーションファイルをデプロイする。デバイスは、コンフィグレーションファイルがデプロイされたときに、それが示すパイプラインを構成する複数のブロックを取得し、コンフィグレーションファイルに従い、取得された複数のブロックを順に実行する。これにより、パイプラインを簡易かつ効率的に作成することができ、またパイプラインの構成を示すコンフィグレーションファイルを容易にデプロイすることができる。
*****
(B)なお、システムとしての構成だけでなく、サーバ部分だけの発明、デバイス部分だけの発明、処理方法の発明、各装置で動作するプログラムとしても発明を構成することが可能である。
【0134】
上述の実施の形態、およびそれに含まれる要素(一部の構成、一部の処理)を組み合わせたり、入替えたりすることで新たな別の実施の形態とすることもできる。
【0135】
上記実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0136】
1 情報処理システム(パイプライン処理システム)
100 サーバ
101 CPU
103 通信部
109 RAM
111 ハードディスク
131 ブロックファイル記憶部(ブロックファイル記憶手段)
132 SDK記憶部(コードライブラリ記憶手段)
133 構成情報記憶部(構成情報記憶手段)
134 ユーザインタフェース部(ユーザインタフェース手段)
135 パーフォーマンス表示部(パーフォーマンス表示手段)
200A,200B エッジデバイス(情報端末)
201 CPU
203 通信部
209 RAM
211 ストレージ
213 音声入出力部
220 パイプライン処理プログラム(請求項における「パイプライン処理プログラム」のうち、エッジデバイス側の機能を担当するプログラム)
221 カメラ
231 端末側構成情報記憶部(端末側構成情報記憶手段)
232 パイプライン処理制御部(パイプライン処理制御手段)
233 アプリケーション(外部プログラム)
234 送受信部(送受信手段)