(57)【要約】【課題】ストレージ装置の記憶容量の消費を削減し、記憶容量の小容量化及び容量効率の向上を図る。【解決手段】サーバとネットワークを介して接続されたストレージ装置１０４は、外部から取得された元データを記憶する記憶部と、サーバからの加工データの要求に応じて、記憶部に記憶されている元データのうちから選択した元データに対して加工を行って加工データを生成する生成部と、生成部による加工データの生成に先立って、生成部が加工データを生成する際の処理性能を評価する評価部とを有し、評価された処理性能に基づいて生成部により加工データを生成し、生成した加工データをサーバに送信する。【選択図】図７
2020144553.tif 000002
【特許請求の範囲】
【請求項１】
サーバとネットワークを介して接続されたストレージ装置において、
外部から取得された元データを記憶する記憶部と、
前記サーバからの加工データの要求に応じて、前記記憶部に記憶されている元データのうちから選択した元データに対して加工を行って加工データを生成する生成部と、
前記生成部による加工データの生成に先立って、前記生成部が該加工データを生成する際の処理性能を評価する評価部と
を有し、
前記評価された処理性能に基づいて前記生成部により前記加工データを生成し、生成した加工データを前記サーバに送信することを特徴とするストレージ装置。
【請求項２】
前記生成部による加工データの生成を管理する生成管理部をさらに有し、
前記生成管理部は、
予め通知された前記ストレージ装置から前記サーバへのデータ読み出しに関するパラメータと前記サーバから前記ストレージ装置へのアクセス状況とから、前記ストレージ装置から前記サーバへのデータ読み出し速度を計算し、前記評価部により評価された加工データの単位リソースあたりの生成速度と前記計算したデータ読み出し速度とから、前記生成部が加工データを生成する生成速度を調整し、
前記生成部は、
前記生成管理部により調整された生成速度で、前記サーバに送信する加工データを生成する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記評価部は、前記加工を行うプログラム毎に、前記加工データの単位リソースあたりの生成速度を評価することを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記評価部は、前記記憶部に元データが登録された際に、前記生成部に、前記加工を行うプログラム毎に１つの元データに対して前記加工を行わせることで、前記加工データの単位リソースあたりの生成速度を評価することを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記生成部により生成された加工データを記憶する記憶領域を有し、
前記サーバからの加工データの要求に応じて、前記記憶領域に記憶されている加工データを前記サーバに送信することを特徴とする請求項１に記載のストレージ装置。
【請求項６】
前記評価部による前記処理性能の評価の際に前記生成部により生成された加工データを前記記憶領域に記憶させ、
前記サーバからの加工データの要求があった際に、前記評価の際に前記生成部により生成された加工データが前記記憶領域に記憶されている場合には、該加工データを前記記憶領域から読み出して前記サーバに送信することを特徴とする請求項５に記載のストレージ装置。
【請求項７】
前記生成管理部は、
前記サーバからの要求に応じて加工データを前記サーバに送信した後、前記サーバから該加工データの要求に後続する加工データの要求が見込まれるか否かを判定し、
前記生成部は、
前記生成管理部により後続する加工データの要求が見込まれと判定された場合に、前記サーバからの該要求に応じて前記サーバに送信する該後続する加工データを、予め生成して前記記憶領域に記憶させておくことを特徴とする請求項５に記載のストレージ装置。
【請求項８】
前記パラメータに含まれる前記ストレージ装置に同時アクセスする前記サーバの数と、前記サーバによる前記加工データに対するファイルクローズ回数とから、前記加工データが一時記憶されている前記記憶領域を開放する記憶領域容量制御部をさらに有することを特徴とする請求項５に記載のストレージ装置。
【請求項９】
前記元データは、画像データであることを特徴とする請求項１に記載のストレージ装置。
【請求項１０】
前記サーバは、教師データの機械学習を行うサーバであり、
前記生成部は、前記元データのうちから選択したデータに対してデータオーギュメンテーションを行って、前記教師データとなる前記加工データを生成することを特徴とする請求項１に記載のストレージ装置。
【請求項１１】
アクセラレータをさらに有し、
前記生成部は、前記アクセラレータを用いて前記加工データを生成することを特徴とする請求項１に記載のストレージ装置。
【請求項１２】
前記評価部は、前記加工を行うアクセラレータ及び該アクセラレータが実行するアクセラレータプログラム毎に、前記処理性能を評価することを特徴とする請求項１１に記載のストレージ装置。
【請求項１３】
サーバとネットワークを介して接続されたストレージ装置におけるデータ処理方法において、
前記ストレージ装置が、
外部から取得された元データを記憶部に記憶し、
前記サーバからの加工データの要求に応じて、前記記憶部に記憶されている元データのうちから選択した元データに対して加工を行って加工データを生成し、
前記加工データの生成に先立って、該加工データを生成する際の処理性能を評価し、
前記評価した処理性能に基づいて前記加工データを生成し、
前記生成した加工データを前記サーバに送信する
各処理を含んだことを特徴とするストレージ装置におけるデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びストレージ装置におけるデータ処理方法に関し、例えば監視カメラなどＩｏＴ（Internet  of  Things）センサデバイスにより取得されストレージ装置に蓄積された画像データを機械学習に用いる画像系ＡＩ（Artificial  Intelligence）の情報処理システムに適用して好適なるものである。
【背景技術】
【０００２】
特許文献１には、データをひとつの拠点のファイルサーバ又は他の拠点のファイルサーバの何れかで管理し、データが何れのファイルサーバで管理されているかに基づいて、適切にデータ参照を行う技術が開示されている。詳細には、ファイルサーバが、ユーザ端末から受信したファイルのデータを記憶デバイスに格納すると共にリモートのファイルサーバにレプリケーションし、記憶デバイスに格納したファイルのデータをスタブ化する。ファイルサーバは、ユーザ端末から受信したアクセス要求に係るファイルがスタブ化されていない場合には、記憶デバイスから該当のファイルのデータを読み出してユーザ端末に送信する。一方、ファイルサーバは、ユーザ端末から受信したアクセス要求に係るファイルがスタブ化されていない場合には、記憶デバイスから該当のファイルのデータを読み出してユーザ端末に送信する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特許６２３１６２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
近年のＩｏＴ及びＡＩの発展に伴い、ＩｏＴデバイスであるカメラなどで取得されストレージ装置に蓄積された画像データをサーバで機械学習する情報処理システムがある。かかる情報処理システムにおいて、機械学習の効率化及び精度向上のために、画像データをもとにした加工画像（元画像に対して位置シフトや回転などの加工を施した画像）を追加するデータオーギュメンテーションが行われている。この情報処理システムにおいては、データオーギュメンテーションの際、ストレージ装置から全ての加工対象の画像データがサーバに読み出され、サーバでデータオーギュメンテーションが行われ全ての加工画像のデータがストレージ装置に書き出される。
【０００５】
よって、上述の従来技術では、ＩｏＴデバイスで取得されストレージ装置に蓄積された画像データをサーバで機械学習する情報処理システムにおいて、全ての加工画像データを一旦ストレージ装置に書き出すことによりストレージ装置の記憶容量が圧迫されるという問題がある。
【０００６】
さらに、機械学習を行う情報処理システムには、当該システムが搭載する主記憶容量以上の教師データを取り扱う際、ＨＤＤ（Hard  Disk  Drive）などからなる二次記憶領域に機械学習用データを格納し、主記憶へ部分的に読み出すことで機械学習を行うシステムが利用されている。このようなシステムでは、複数の学習用データを束ねてサイズの大きな中間データとすることで、ＨＤＤなどへのアクセスを効率化することが知られている。しかし、これら中間データについてもいったんストレージ装置に書き出されるため、前述のデータオーギュメンテーションと合わせて、学習用データの規模が大きくなればなるほど、ストレージ装置の記憶容量が圧迫される問題はより大きくなる。
【０００７】
本発明は以上の点を考慮してなされたもので、ＩｏＴデバイスで取得されストレージ装置に蓄積されたデータをサーバで機械学習する情報処理システムにおいて、ストレージ装置の記憶容量の消費を削減し、記憶容量の小容量化及び容量効率の向上を図ることができるストレージ装置及びストレージ装置におけるデータ処理方法を提案しようとするものである。
【課題を解決するための手段】
【０００８】
かかる課題を解決するため本発明においては、ストレージ装置は、サーバとネットワークを介して接続され、外部から取得された元データを記憶する記憶部と、前記サーバからの加工データの要求に応じて、前記記憶部に記憶されている元データのうちから選択した元データに対して加工を行って加工データを生成する生成部と、前記生成部による加工データの生成に先立って、前記生成部が該加工データを生成する際の処理性能を評価する評価部とを有し、前記評価された処理性能に基づいて前記生成部により前記加工データを生成し、生成した加工データを前記サーバに送信することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、ストレージ装置の記憶容量の小容量化及び記憶効率の向上により、機械学習に用いるＡＩの情報処理システムにおける設備コスト及び運用コストを低減できる。
【図面の簡単な説明】
【００１０】
【図１】実施例１のストレージ装置を含む学習システムのハードウェアの論理的構成の一例を示す図である。
【図２】実施例１のストレージ装置のメモリに格納されるプログラムとデータの一例を示す図である。
【図３】実施例１のストレージ装置のストレージデータ領域に格納されるデータの一例を示す図である。
【図４】実施例１のデータ生成リストセットに含まれるデータ生成リストの一例を示す図である。
【図５】実施例１の事前性能評価結果を記録するテーブルの一例を示す図である。
【図６】実施例１の学習サーバ装置のメモリに格納されるプログラムの一例を示す図である。
【図７】実施例１のストレージ装置のデータ登録フェーズにおける論理的構成の一例を示す図である。
【図８】実施例１のストレージ装置におけるデータ登録フェーズの処理の一例を示すフローチャートである。
【図９】実施例１のストレージ装置の学習フェーズにおける論理的構成の一例を示す図である。
【図１０】実施例１のストレージ装置における学習フェーズの処理の一例を示すフローチャートである。
【図１１】実施例１のストレージ装置におけるバッファ領域解放処理の一例を示すフローチャートである。
【図１２】実施例２のストレージ装置を含む学習システムのハードウェアの論理的構成の一例を示す図である。
【図１３】実施例２のストレージ装置のメモリに格納されるプログラムとデータの一例を示す図である。
【図１４】実施例２のストレージ装置のストレージデータ領域に格納されるデータの一例を示す図である。
【図１５】実施例２のデータ生成リストセットに含まれる拡張データ生成リストの一例を示す図である。
【図１６】実施例２の事前性能評価結果のテーブルの一例を示す図である。
【図１７】実施例２のストレージ装置のデータ登録フェーズにおける論理的構成の一例を示す図である。
【図１８】実施例２のストレージ装置の学習フェーズにおける論理的構成の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下図面に基づき、本発明の実施例を詳述する。以下の実施例を説明するための各図面において、同一の参照番号で同一あるいは類似の機能を備えた構成要件を示し、後出の説明を省略する。また実施例及び変形例は、本発明の技術思想の範囲内及び整合する範囲内でその一部又は全部を組合せることができる。
【００１２】
以下の説明では、「ａａａリスト」又は「ａａａテーブル」の表現にて各種情報を説明することがあるが、各種情報は、リスト及びテーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ａａａリスト」及び「ａａａテーブル」を「ａａａ情報」と呼ぶこともできる。「ａａａリスト」、「ａａａテーブル」、又は「ａａａ情報」は、記憶資源（例えばメモリ）に確保された記憶領域に格納される。
【００１３】
また、以下の説明では、「プログラム」を主語として処理フローを説明する場合がある。プログラムは、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって、記憶資源（例えばメモリ）にロードされ実行されることで、記憶資源及び通信インタフェースのうちの少なくとも１つを適宜に使用しながら予め定められた処理を実行する。例えば「ｘｘｘプログラム」のように説明又は図示される要素は、プロセッサが、記憶資源又は通信インタフェースを使用し、プログラムソースを解析実行することで、予め定められた処理を実行する処理部である。このため、プログラムによる処理の主語が、プロセッサ、もしくはそのプロセッサを有する装置とされてもよい。また、「ｘｘｘプログラム」は、「ｘｘｘ部」とも言い換えることができる。
【００１４】
また、プロセッサが実行する処理の一部又は全部は、ハードウェア回路により処理されてもよい。プロセッサが実行する処理を規定するプログラムは、例えば外部装置からネットワークを介して取得して、あるいは記憶メディアを介して取得して、プロセッサにより実行されるものとしてもよい。
【実施例１】
【００１５】
本発明の実施例１について、図１〜図１０を用いて説明する。
【００１６】
＜実施例１のストレージ装置を含む学習システムの構成＞
図１を用いて、本発明の前提となるシステムのハードウェアの論理的構造を説明する。図１は、実施例１のストレージ装置を含む学習システムのハードウェアの論理的構成の一例を示す図である。実施例１のストレージ装置１０４を含む学習システム１Ｓは、複数の学習サーバ１０１、１０２とストレージ装置１０４とが、ネットワーク１０３で接続されたシステムである。
【００１７】
学習システム１Ｓの複数の学習サーバ１０１、１０２は、教師データの機械学習を行うサーバであり、積和演算や誤差逆伝搬処理などの学習処理を分担して行う学習サーバ（従）１０２と、学習処理に加えて初期化や学習結果の集約なども行う学習サーバ（主）１０１とによって構成される。これら学習サーバ１０１、１０２のそれぞれは、ＣＰＵ１１１と、メモリ１１２と、ＩＦ１１３とから構成される。なお、学習サーバ１０１、１０２は、ＨＤＤ（Hard  Disk  Drive）などの記憶装置を搭載することもある。また、学習サーバ１０１、１０２は、学習処理を高速化するためのアクセラレータを搭載していてもよい。学習サーバ（従）１０２を用いずに、学習サーバ（主）１０１のみで学習処理を行うことも可能である。
【００１８】
ＣＰＵ１１１は、メモリ１１２に格納された各プログラム、管理情報などを使用して、学習処理を含む各種処理を実行する。
【００１９】
メモリ１１２は、ＣＰＵ１１１が実行するプログラムやプログラムが使用する管理情報などを格納する。このメモリ１１２には、これら以外の情報、例えばＯＳ（Operating  System）の管理情報を格納するなどの用途に使用してもよい。また、メモリ１１２は、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）で構成されることが一般的であるが、これ以外の記憶素子で構成されてもよい。
【００２０】
ＩＦ１１３は、ネットワーク１０３を介して、学習サーバ１０１、１０２が相互に情報をやり取りしたり、ストレージ装置１０４から学習データを読み出したりするためのインタフェースである。このＩＦ１１３は、ネットワーク１０３の構成に合わせて選択することが可能であり、また用途ごとに分けることも可能である。例えば学習サーバ１０１、１０２が相互にやり取りする場合はＥｔｈｅｒｎｅｔ（登録商標、以下同様）を使用する、ストレージ装置１０４から学習データを読み出す場合はＦｉｂｒｅ  Ｃｈａｎｎｅｌを利用する、といった具合である。また、複数のＩＦ１１３を連携させることで、冗長性を得るなども可能である。
【００２１】
ネットワーク１０３は、集線装置とケーブルからなり、学習サーバ１０１、１０２同士、もしくはストレージ装置１０４との間の通信を取り持つ。本実施例では全てＥｔｈｅｒｎｅｔによるネットワーク１０３を例としているが、全てもしくは部分的に異なる通信規格、例えばＩｎｆｉｎｉｂａｎｄ（登録商標）やＦｉｂｒｅ  Ｃｈａｎｎｅｌなどを用いることができる。異なる通信規格を混在させる場合は、通信規格に合わせた集線装置とケーブルを併用することができる。
【００２２】
ストレージ装置１０４は、ＦＥ（フロントエンド）１２１と、ＣＰＵ１２２と、ＢＥ（バックエンド）１２３と、メモリ１２４と、１つ以上のドライブ１２５とから構成される。
【００２３】
ＦＥ１２１は、ネットワーク１０３を介して、学習サーバ１０１、１０２からストレージ装置１０４への通信を受け付けるたり、応答したりする。通信規格としてはＥｔｈｅｒｎｅｔやＦｉｂｒｅ  Ｃｈａｎｎｅｌなどを使用することができる。
【００２４】
ＣＰＵ１２２は、メモリ１２４に格納された各プログラム、管理情報などを使用して、学習サーバ１０１、１０２やその他サーバからのＦＥ１２１を介してのデータアクセスに対し応答する。
【００２５】
ＢＥ１２３は、ＣＰＵ１２２が学習サーバ１０１、１０２やその他サーバからのアクセスの際に、実際のデータが格納されているドライブ１２５へのアクセスを仲介する。通信規格としてはＳＡＳ（Serial  Attached  SCSI）やＮＶＭｅ（Non-Volatile  Memory  Express）などを使用できる。
【００２６】
メモリ１２４は、ＣＰＵ１２２が実行するプログラムやプログラムが使用する管理情報などを格納する。このメモリ１２４には、これら以外の情報、例えばストレージファームウェアの管理情報を格納するなどの用途に使用してもよい。また、メモリ１２４は、ＳＤＲＡＭ（Synchronous  Dynamic  Random  Access  Memory）で構成されることが一般的であるが、これ以外の記憶素子で構成されてもよい。
【００２７】
１又は複数のドライブ１２５は、ＨＤＤやＳＳＤ（Solid  State  Drive）で構成される記憶装置である。また、複数のドライブ１２５をパリティグループと呼ばれる単位にまとめ、ＲＡＩＤ（Redundant  Arrays  of  Independent  Disks）のような高信頼化技術を使用して、論理的な記憶領域として使用してもよい。なお、ＳＳＤはＮＡＮＤ  Ｆｌａｓｈ  Ｍｅｍｏｒｙを記憶領域として使用したものに限らず、Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙなどの記憶素子を用いたもので構成してもよい。
【００２８】
＜実施例１のストレージ装置のメモリに格納されるプログラムとデータ＞
図２を用いて、ストレージ装置１０４のメモリ１２４に格納されるプログラム及び情報を示す。図２は、実施例１のストレージ装置のメモリに格納されるプログラムとデータの一例を示す図である。
【００２９】
メモリ１２４には、データ生成管理プログラム２０１と、バッファサイズ抑制プログラム２０２と、事前性能評価プログラム２０３と、データ生成処理プログラム２０４と、パラメータ受信プログラム２０５と、ＩＯ観測プログラム２０６と、ファイルエミュレーションプログラム２０７とが格納される。また、メモリ１２４は、データを一時格納する一時領域として生成済みデータバッファ２１１を有する。詳細は後述するが、後述のストレージデータ領域３０１の生成済みデータ退避領域３０３（図３参照）も、生成済みデータバッファ２１１と共に、データを一時格納する一時領域となる。なお、メモリ１２４は、これ以外の制御プログラム、制御データなども保持してよい。
【００３０】
データ生成管理プログラム２０１は、データ生成処理プログラム２０４を起動させ、学習サーバ１０１、１０２が要求する学習データサイズや、学習サーバ１０１、１０２のデータ読み出しスループットに応じたデータ生成スループットで、オーギュメンテーションデータを動的に生成し、一時領域に格納する制御を行う。生成されたオーギュメンテーションデータは、学習データとなる。
【００３１】
バッファサイズ抑制プログラム２０２は、学習サーバ１０１、１０２からの読み出しが終わった、すなわちクローズされた生成済みのオーギュメンテーションデータが使用していた一時領域を解放し、一時領域の肥大化を抑える制御を行う。
【００３２】
事前性能評価プログラム２０３は、データオーギュメンテーションの単位処理性能（１処理あたりの処理性能）、すなわちデータ生成スループットを実際の学習処理前に事前評価する。
【００３３】
データ生成処理プログラム２０４は、データ生成管理プログラム２０１から起動され、実際のデータオーギュメンテーションを行う。
【００３４】
パラメータ受信プログラム２０５は、ユーザが学習サーバ１０１、１０２を使用する際に動的に決定する動的パラメータ、例えば学習サーバ（従）１０２の台数や、学習サーバ１０１、１０２における処理のスレッド数、メモリ１１２に一度に読み出す教師データ数、エポック数などを、学習サーバ（主）１０１から受信する。また、動的パラメータをストレージ装置１０４が受け取った後、ストレージ装置１０４内部でオーギュメンテーションデータの応答準備が完了すると、学習サーバ（主）１０１にオーギュメンテーションデータの読み出しが可能な状態になったことを通知する。
【００３５】
なお、教師データとは、学習対象になる画像などの学習データと学習データに対する正解情報を組み合わせたもののことを言う。また、エポック数とは、ある教師データ群を何回繰り返し使用して学習するかを示す数値である。
【００３６】
ＩＯ観測プログラム２０６は、学習サーバ１０１、１０２による学習データのファイルのオープン、リード、クローズといったイベントや、学習サーバ１０１、１０２への学習データのデータ転送速度を観測し、データ生成管理プログラム２０１とバッファサイズ抑制プログラム２０２へ通知する。
【００３７】
ファイルエミュレーションプログラム２０７は、学習サーバ１０１、１０２に対して、一時領域に格納している作成済みのオーギュメンテーションデータを通常のファイルとして公開したり、生成前のオーギュメンテーションデータがあたかも存在するかのように見せ、学習サーバ１０１、１０２に動的なデータオーギュメンテーションがされていることを意識させないようにする仮想化を行ったりする。
【００３８】
生成済みデータバッファ２１１は、データ生成処理プログラム２０４が生成したオーギュメンテーションデータが格納される一時領域である。生成済みデータバッファ２１１に格納されるオーギュメンテーションデータは、ファイルエミュレーションプログラム２０７が学習サーバ１０１、１０２に対して公開するオーギュメンテーションデータの実体となる。
【００３９】
＜実施例１のストレージ装置のストレージデータ領域に格納されるデータ＞
図３を用いて、ストレージ装置１０４の記憶領域に格納される情報を示す。図３は、実施例１のストレージ装置のストレージデータ領域に格納されるデータの一例を示す図である。
【００４０】
ストレージデータ領域３０１は、ストレージ装置１０４が内蔵するドライブ１２５上に論理的に構成された記憶領域である。このストレージデータ領域３０１には、事前性能評価結果３０２と、生成済みデータ退避領域３０３と、データ生成リストセット３１１と、データオーギュメンテーションプログラム３１２と、元データ３１３とが格納される。
【００４１】
このうち、事前性能評価結果３０２と生成済みデータ退避領域３０３は、ストレージデータ領域３０１に格納されるもののユーザには公開されないデータである。一方、データ生成リストセット３１１と、データオーギュメンテーションプログラム３１２と、元データ３１３は、ユーザによってストレージデータ領域３０１に格納される画像データなどのデータである。このストレージデータ領域３０１には、上記以外のデータも格納されてもよい。
【００４２】
事前性能評価結果３０２は、事前性能評価プログラム２０３が行う事前評価の結果を記録したテーブルを格納する領域である。事前性能評価結果３０２の詳細は、後述する。
【００４３】
生成済みデータ退避領域３０３は、データ生成処理プログラム２０４により生成され生成済みデータバッファ２１１に格納されているオーギュメンテーションデータのうち、容量制限のために生成済みデータバッファ２１１に格納しきれないデータを一時的に退避させて格納する領域である。
【００４４】
データ生成リストセット３１１は、ユーザが元データ３１３に対して行いたいデータオーギュメンテーションと、データオーギュメンテーションの結果として学習サーバ１０１、１０２が学習に使用することとなるデータの関係づけを記載するデータ生成リスト４０１（図４参照）の集合である。データ生成リスト４０１の詳細は、後述する。
【００４５】
データオーギュメンテーションプログラム３１２は、データオーギュメンテーションに用いられるプログラムもしくはスクリプトであり、ストレージ装置１０４のＣＰＵ１２２により実行される。
【００４６】
元データ３１３は、ユーザが加工（データオーギュメンテーション）の対象とするデータである。複数のファイル、リストなどから構成され、例えば学習用の画像データや正解データなどである。
【００４７】
＜実施例１のデータ生成リスト＞
図４を用いて、データ生成リストセット３１１に含まれるデータ生成リスト４０１を説明する。図４は、実施例１のデータ生成リストセットに含まれるデータ生成リストの一例を示す図である。なお、データ生成リストセット３１１に含まれる複数のデータ生成リスト４０１のそれぞれは、データ生成リストセット３１１内でユニークなＩＤが付与されて識別される。
【００４８】
データ生成リスト４０１は、入力データ４１１と、データオーギュメンテーションプログラム４１２と、オプション４１３と、出力データ４１４との各列を含む。データ生成リスト４０１は、複数行からなり、１組の入力データ４１１とデータオーギュメンテーションプログラム４１２とオプション４１３と出力データ４１４との対応が１行に記載される。１行が１つの出力ファイルに対応する。
【００４９】
入力データ４１１には、データオーギュメンテーションを行う対象の元データ３１３のファイル名が記載される。入力データ４１１に記載される加工対象の元データ３１３のファイル名には、該当の元データ３１３のパス情報も含まれる。
【００５０】
データオーギュメンテーションプログラム４１２には、入力データ４１１に記載されたファイル名の元データ３１３に対して実行するデータオーギュメンテーションのプログラム名が記載される。オプション４１３には、データオーギュメンテーションプログラム４１２に記載されたデータオーギュメンテーションプログラムを、入力データ４１１に記載されたファイル名の元データ３１３に対して実行する際に、与える引数などのオプションが記載される。
【００５１】
出力データ４１４は、入力データ４１１に記載されたファイル名の元データ３１３に対して、データオーギュメンテーションプログラム４１２に記載されたデータオーギュメンテーションプログラムを、オプション４１３に記載されたオプションを与えて実行した処理結果であるオーギュメンテーションデータの出力ファイル名が記載される。出力データ４１４に記載される出力ファイル名には、該当の出力ファイルのパス情報も含まれる。出力データ４１４に記載の出力ファイル名は、データオーギュメンテーションの処理結果を学習サーバ１０１、１０２に公開する際のファイル名である。
【００５２】
なお、データオーギュメンテーションプログラム４１２に、データオーギュメンテーションを行わないことを示すキーワードとして、ＮＯＮＥと記載することもできる。
【００５３】
例えば、図４における１行目は、入力データ４１１が“imgs01.jpg”である入力データに対して、データオーギュメンテーションプログラム４１２が“img_augmentation”というデータオーギュメンテーションプログラムを、“-flip”のオプションを与えて実行することを示す。その出力データ４１４は、“imgs01-f.jpg”である。
【００５４】
また例えば、図４における２行目は、入力データ４１１が“imgs02.lst”であるリストファイル内で列挙されている複数の入力データに対して、データオーギュメンテーションプログラム４１２が“imgs_aug”というデータオーギュメンテーションプログラムを、“-flip”及び“-pack  bin”のオプションを与えて実行することを示す。その出力データ４１４は、“imgs02-f.bin”である。“imgs02-f.bin”は、“-pack  bin”のオプションにより、複数の入力データがそれぞれデータオーギュメンテーションされた複数の出力データがパッキングされた中間ファイルである。
【００５５】
＜実施例１の事前性能評価結果を記録するテーブル＞
図５を参照して、事前性能評価結果３０２を記録するテーブルについて説明する。図５は、実施例１の事前性能評価結果を記録するテーブルの一例を示す図である。
【００５６】
事前性能評価３０２のテーブルは、データオーギュメンテーションプログラム３２１と、オプション３２２と、単位処理性能３２３との各列を含む。事前性能評価結果３０２のテーブルは、複数行からなり、１組のデータオーギュメンテーションプログラム３２１とオプション３２２と単位処理性能３２３との対応が１行に記載される。
【００５７】
データオーギュメンテーションプログラム３２１とオプション３２２との組合せは、データ生成リスト４０１に記載されているデータオーギュメンテーションプログラム４１２とオプション４１３との組合せに対応する。すなわち、事前性能評価プログラム２０３は、事前性能評価結果３０２のテーブルの各行に記載のデータオーギュメンテーションプログラム４１２とオプション４１３との全ての組合せから重複排除した組合せを、該当する加工対象の入力データ４１１のうちの１つに対して実行し、単位スレッドあたりの性能を測定する。そして、事前性能評価プログラム２０３は、データオーギュメンテーションプログラム３２１とオプション３２２との組合せを実行して測定した単位スレッドあたりの性能を、単位処理性能３２３に記録する。単位処理性能３２３は、例えば単位スレッドでの単位時間あたりの処理データ量（スループット）である。
【００５８】
＜学習サーバ装置のメモリに格納されるプログラム＞
図６を用いて、学習サーバ１０１、１０２のメモリ１１２に格納されるプログラムを説明する。図６は、実施例１の学習サーバ装置のメモリに格納されるプログラムの一例を示す図である。メモリ１１２には、学習プログラム５０１とパラメータ送信ライブラリ５０２とが格納される。
【００５９】
学習プログラム５０１は、ユーザが実際に行いたい学習処理の内容を記述したプログラムである。学習プログラム５０１による処理は、一般的に初期化フェーズと学習フェーズとに分かれている。
【００６０】
学習プログラム５０１は、初期化フェーズにおいて学習処理時に使用するパラメータを決定する。パラメータの具体例としては、学習プログラム５０１が使用する学習データに対応するデータ生成リスト４０１のファイル名、学習サーバ１０１、１０２の数、スレッド数、メモリ１１２に一度に読み出す教師データ数、エポック数などである。
【００６１】
これらのパラメータをパラメータ受信プログラム２０５に送信するため、学習プログラム５０１の初期化フェーズ部分にはパラメータ送信ＡＰＩ（Application  Programing   Interface）が記述される。
【００６２】
なお、一般的には、学習サーバ（主）１０１と学習サーバ（従）１０２とは、学習サーバ１０１、１０２が持つ識別情報をもとに、学習サーバ（主）１０１か学習サーバ（従）１０２かが判別される。学習サーバ（主）１０１と学習サーバ（従）１０２との間で、学習プログラム５０１自体は共有されるが、学習サーバ１０１、１０２全体で１回だけ実施すればよい処理などは、学習サーバ（主）１０１のみに実施させるなどの制御を行うことができる。
【００６３】
パラメータ送信ライブラリ５０２は、学習プログラム５０１に記述されるパラメータ送信ＡＰＩから呼び出されるプログラムの実体である。パラメータ送信ライブラリ５０２は、パラメータ受信プログラム２０５を経由してストレージ装置１０４に学習プログラム５０１の動的パラメータを通知する機能と、動的パラメータ通知後からストレージ装置１０４へのデータアクセス準備完了まで学習プログラム５０１の実行を待機させる機能を有する。
【００６４】
＜実施例１の学習システムにおける学習処理＞
以上を有する実施例１の学習システム１Ｓにおける学習処理を行う手順を以降に示す。学習システム１Ｓにおける学習処理には、大きく２つのフェーズがある。ユーザのデータ生成リスト４０１、データオーギュメンテーションプログラム３１２及び元データ３１３をストレージ装置１０４に登録するデータ登録フェーズ、及び、教師データの機械学習を行う学習フェーズである。
【００６５】
＜実施例１のデータ登録フェーズ＞
図７及び図８を用いて、実施例１のデータ登録フェーズの動作を説明する。図７は、実施例１のストレージ装置のデータ登録フェーズにおける論理的構成の一例を示す図であり、データ登録フェーズにおける学習サーバ（主）１０１とストレージ装置１０４の各プログラム及びデータの関係を示す。図８は、実施例１のストレージ装置におけるデータ登録フェーズの処理の一例を示すフローチャートであり、データ登録フェーズにおけるストレージ装置１０４の動作フローを示す。
【００６６】
実施例１のデータ登録フェーズの処理において、先ず、学習サーバ（主）１０１は、図７のステップＳ７００で示すように、ストレージ装置１０４の事前に決められたデータ領域（フォルダなど）に、データ生成リストセット３１１に含まれるあるデータ生成リスト４０１と、データオーギュメンテーションプログラム３１２と、元データ３１３とを書き込む。ストレージ装置１０４のデータ領域に書き込まれるデータ生成リスト４０１に記載されている入力データ４１１及びデータオーギュメンテーションプログラム４１２のそれぞれが指し示すデータ及びプログラムが、データ生成リスト４０１とほぼ同時に書き込まれる元データ３１３及びデータオーギュメンテーションプログラム３１２である。
【００６７】
図８に示すように、ステップＳ７０１では、ストレージ装置１０４の事前性能評価プログラム２０３は、データ生成リストセット３１１が更新されるのを監視する。事前性能評価プログラム２０３は、データ生成リストセット３１１に含まれるデータ生成リスト４０１が新規登録もしくは更新されている場合（ステップＳ７０１：ＹＥＳ）、ステップＳ７０２に処理を移し、新規登録も更新もされていない場合（ステップＳ７０１：ＮＯ）、ステップＳ７０１を繰り返す。
【００６８】
続いて、ステップＳ７０２では、事前性能評価プログラム２０３は、新規登録もしくは更新されたデータ生成リスト４０１に対応するデータオーギュメンテーションプログラム３１２及び元データ３１３が格納済みかを確認する。事前性能評価プログラム２０３は、データ生成リスト４０１に対応するデータオーギュメンテーションプログラム３１２及び元データ３１３が格納済みの場合（ステップＳ７０２：ＹＥＳ）、ステップＳ７０３に処理を移し、格納済みでない場合（ステップＳ７０２：ＮＯ）、ステップＳ７０２を繰り返し、格納の完了を待つ。
【００６９】
続いて、ステップＳ７０３では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、新規追加もしくは更新が確認されたデータ生成リスト４０１に記載されているデータオーギュメンテーション（データオーギュメンテーションプログラム及びオプションの組合せ）の１つを、例えば、ＣＰＵ１２２の１スレッドで１つの入力データに対して実行させる事前性能評価を行う。
【００７０】
データ生成処理プログラム２０４は、事前性能評価の際、オーギュメンテーションデータを作成するとともに、単位スレッドあたりの性能（スループットなど）を測定する。続いて、ステップＳ７０４では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４による処理が完了した後、性能測定結果をストレージデータ領域にある事前性能評価結果３０２のテーブルに記録する（図５参照）。
【００７１】
続いて、ステップＳ７０５では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、生成済みデータバッファ２１１に空き領域があるかを確認させる。事前性能評価プログラム２０３は、生成済みデータバッファ２１１に空き領域がある場合（ステップＳ７０５：ＹＥＳ）、ステップＳ７１２に処理を移し、空き領域がない場合（ステップＳ７０５：ＮＯ）、ステップＳ７０６に処理を移す。
【００７２】
ステップＳ７０６では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、生成済みデータ退避領域３０３に空き領域があるかを確認させる。事前性能評価プログラム２０３は、生成済みデータ退避領域３０３に空き領域がある場合（ステップＳ７０６：ＹＥＳ）、ステップＳ７１１に処理を移し、空き領域がない場合（ステップＳ７０６：ＮＯ）、ステップＳ７０７に処理を移す。
【００７３】
ステップＳ７０７では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、生成済みデータ退避領域３０３の一部が解放可能かを確認させる。事前性能評価プログラム２０３は、生成済みデータ退避領域３０３の一部が解放可能である場合（ステップＳ７０７：ＹＥＳ）、ステップＳ７１０に処理を移し、解放可能でない場合（ステップＳ７０７：ＮＯ）、ステップＳ７０８に処理を移す。
【００７４】
ステップＳ７０８では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、事前性能評価の際に作成したオーギュメンテーションデータを破棄させる。
【００７５】
続いて、ステップＳ７０９では、事前性能評価プログラム２０３は、ステップＳ７０１で新規追加もしくは更新が確認されたデータ生成リスト４０１内に、ステップＳ７０３の性能測定を行っていないデータオーギュメンテーションが有るかを判定する。事前性能評価プログラム２０３は、新規追加もしくは更新が確認されたデータ生成リスト４０１内に性能測定を行っていないデータオーギュメンテーションが有る場合（ステップＳ７０９：ＹＥＳ）、ステップＳ７０３に処理を移す。一方、事前性能評価プログラム２０３は、新規追加もしくは更新が確認されたデータ生成リスト４０１内に、性能測定を行っていないデータオーギュメンテーションが無い場合（ステップＳ７０９：ＮＯ）、ステップＳ７０１に処理を移す。
【００７６】
他方、ステップＳ７１０では、事前性能評価プログラム２０３は、生成済みデータ退避領域３０３に空き領域がないことから、データ生成処理プログラム２０４に、生成済みデータ退避領域３０３に格納されたデータのうち保持優先度の低いものを破棄させることで空き領域を確保する。ステップＳ７１０が終了すると、事前性能評価プログラム２０３は、ステップＳ７１１に処理を移す。
【００７７】
また、ステップＳ７１１では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、生成済みデータバッファ２１１に格納されたオーギュメンテーションデータの一部を生成済みデータ退避領域３０３に退避させる。ステップＳ７１１が終了すると、事前性能評価プログラム２０３は、ステップＳ７１２に処理を移す。
【００７８】
また、ステップＳ７１２では、事前性能評価プログラム２０３は、データ生成処理プログラム２０４に、ステップＳ７０３の事前性能評価時に作成したオーギュメンテーションデータを生成済みデータバッファ２１１に格納させる。ステップＳ７１２が終了すると、事前性能評価プログラム２０３は、ステップＳ７０９に処理を移す。
【００７９】
ステップＳ７０９から処理を移されたステップＳ７０１では、事前性能評価プログラム２０３は、データ生成リストセット３１１を再確認し、事前性能評価が未実行のデータオーギュメンテーションプログラム３１２が、存在する場合は再度ステップＳ７０３の事前性能評価を行い、存在しない場合はデータ生成リストセット３１１が更新されるのを待つ。以上がデータ登録フェーズの動作である。
【００８０】
なお、ストレージ装置１０４の事前に決められたデータ領域（フォルダなど）にデータ生成リストセット３１１、データオーギュメンテーションプログラム３１２、及び元データ３１３を書き込むのは、必ずしも学習サーバ（主）１０１である必要はなく、ストレージ装置１０４にアクセスできる機器であれば、何れでもよい。
【００８１】
＜実施例１の学習フェーズ＞
図９、図１０、及び図１１を用いて、実施例１の学習フェーズの動作を示す。学習フェーズは、さらに、データ生成動作フロー及び生成済みデータ領域の解放動作フローを含む。図９は、実施例１のストレージ装置の学習フェーズにおける論理的構成の一例を示す図であり、学習フェーズにおける学習サーバ１０１、１０２とストレージ装置１０４の各プログラム及びデータの関係を示す。図１０は、実施例１のストレージ装置における学習フェーズの処理の一例を示すフローチャートであり、学習フェーズにおけるストレージ装置１０４のデータ生成動作フローを示す。図１１は、実施例１のストレージ装置におけるバッファ領域解放処理の一例を示すフローチャートであり、不要になった生成済みデータ領域の解放動作フローを示す。
【００８２】
学習フェーズは、図９に示すように、学習サーバ（主）１０１が学習プログラム５０１を起動するところから始まる。学習サーバ（主）１０１は、学習プログラム５０１の初期化フェーズを実行し、その中でパラメータ送信ＡＰＩを呼び出す。そして、学習サーバ（主）１０１において、パラメータ送信ＡＰＩにより起動されたパラメータ送信ライブラリ５０２は、学習プログラム５０１の動的パラメータをストレージ装置１０４のパラメータ受信プログラム２０５に送信する。動的パラメータは、既述の通り、例えば学習サーバ（従）１０２の台数や、学習サーバ１０１、１０２における処理のスレッド数、メモリ１１２に一度に読み出す教師データ数、エポック数などである。その後、パラメータ送信ライブラリ５０２は、パラメータ受信プログラム２０５からの応答を待ち、学習プログラム５０１を待機させる。
【００８３】
＜実施例１のデータ生成動作フロー＞
図１０に示すように、先ず、ステップＳ９０１では、データ生成管理プログラム２０１は、パラメータ受信プログラム２０５がパラメータ送信ライブラリ５０２から動的パラメータを受信したかを判定する。データ生成管理プログラム２０１は、パラメータ受信プログラム２０５がパラメータ送信ライブラリ５０２から動的パラメータを受信した場合（ステップＳ９０１：ＹＥＳ）、ステップＳ９０２に処理を移す。一方、データ生成管理プログラム２０１は、パラメータ受信プログラム２０５がパラメータ送信ライブラリ５０２から動的パラメータを受信していない場合（ステップＳ９０１：ＮＯ）、ステップＳ９０１を繰り返す。
【００８４】
ステップＳ９０２では、データ生成管理プログラム２０１は、パラメータ受信プログラム２０５に、パラメータ送信ライブラリ５０２から受信した動的パラメータを、各プログラムから参照可能に保持させる。パラメータ受信プログラム２０５は、動的パラメータを各プログラムが利用可能な状態に保持するとともに、データ生成管理プログラム２０１とバッファサイズ抑制プログラム２０２に学習フェーズ開始を通知する。
【００８５】
続いて、ステップＳ９０３では、データ生成管理プログラム２０１は、パラメータ受信プログラム２０５から学習フェーズ開始の通知を受け、学習フェーズで読み出されるオーギュメンテーションデータに対応したデータ生成リスト４０１を読み出し、事前性能評価時に生成したオーギュメンテーションデータが生成済みデータ退避領域３０３に保持されているかを確認する。データ生成管理プログラム２０１は、事前性能評価時に生成したオーギュメンテーションデータが生成済みデータ退避領域３０３に保持されている場合（ステップＳ９０３：ＹＥＳ）、ステップＳ９０４に処理を移し、保持されていない場合（ステップＳ９０３：ＮＯ）、ステップＳ９０５に処理を移す。
【００８６】
ステップＳ９０４では、データ生成管理プログラム２０１は、ステップＳ９０３で生成済みデータ退避領域３０３に保持されているとされたオーギュメンテーションデータを、生成済みデータ退避領域３０３から生成済みデータバッファ２１１に読み出す。
【００８７】
続いて、ステップＳ９０５では、データ生成管理プログラム２０１は、データ生成処理プログラム２０４に、１回目の学習時に使用する初回データを生成させ、生成した初回データをもとにファイルエミュレーションプログラム２０７に応答準備をさせる。なお、この初回データは、学習サーバ１０１、１０２の台数、スレッド数、メモリ１１２に一度に読み出す教師データ数をもとに、そのサイズとファイル数が決定され、決定されたサイズで必要データ数分だけ生成される。また、この初回データに該当するデータのうち、ステップＳ９０４で生成済みデータバッファ２１１に読み出されたデータや、事前性能評価時に生成され生成済みデータバッファ２１１に残存しているデータは、再利用される。
【００８８】
続いて、ステップＳ９０６では、データ生成管理プログラム２０１は、データ生成処理プログラム２０４の応答準備が完了すると、パラメータ受信プログラム２０５に応答準備完了を通知し、応答準備完了をパラメータ送信ライブラリ５０２へ応答させる。その後、パラメータ送信ライブラリ５０２は、パラメータ受信プログラム２０５から応答準備完了を受信すると、待機させていた学習プログラム５０１を再開させ、学習サーバ１０１、１０２からストレージ装置１０４へのデータアクセスを開始させる。
【００８９】
続いて、ステップＳ９０７では、データ生成管理プログラム２０１は、学習サーバ１０１、１０２からストレージ装置１０４へのデータアクセス（ファイルオープン）が発生したかを判定する。ここで、ＩＯ観測プログラム２０６は、学習サーバ１０１、１０２からストレージ装置１０４へのデータアクセスと、ファイルエミュレーションプログラム２０７による生成済みデータバッファ２１１に格納されているオーギュメンテーションデータを使用した学習サーバ１０１、１０２へのアクセス対象のデータ返却とを監視している。ＩＯ観測プログラム２０６は、このデータアクセス及びデータ返却をデータ生成管理プログラム２０１に通知する。また、同時に、ＩＯ観測プログラム２０６は、学習サーバ１０１、１０２がオーギュメンテーションデータを読み出す速度と、次データへのアクセス間隔についても監視する。
【００９０】
データ生成管理プログラム２０１は、学習サーバ１０１、１０２からストレージ装置１０４へのデータアクセス（ファイルオープン）が発生した場合（ステップＳ９０７：ＹＥＳ）、ステップＳ９０８に処理を移す。一方、データ生成管理プログラム２０１は、学習サーバ１０１、１０２からストレージ装置１０４へのデータアクセス（ファイルオープン）が発生していない場合（ステップＳ９０７：ＮＯ）、ステップＳ９０７を繰り返す。
【００９１】
ステップＳ９０８では、データ生成管理プログラム２０１は、ステップＳ９０７でのデータアクセスに続く後続データアクセスが発生するかを判定する。ここで、データ生成管理プログラム２０１は、ステップＳ９０７でＩＯ観測プログラム２０６から通知されたデータアクセスの後続データが存在する場合、もしくは、後続データは存在しないがエポック回数分のデータ読み出しが繰り返されていない場合、後続データアクセスが発生すると判定する。後続データとは、データ生成リスト４０１において現在読み出されているオーギュメンテーションデータに該当する行の次の行に該当するデータであり、後続する加工データの要求が見込まれと判断できるデータである。
【００９２】
データ生成管理プログラム２０１は、後続データアクセスが発生する場合（ステップＳ９０８：ＹＥＳ）、ステップＳ９０９に処理を移し、後続データアクセスが発生しない場合（ステップＳ９０８：ＮＯ）、ステップＳ９０１に処理を戻す。データ生成管理プログラム２０１は、後続データアクセスが発生しないと判定した場合、アクセス中の学習データを使用した学習が終了したと判定し、次のパラメータ送信ＡＰＩの起動を待つ。
【００９３】
ステップＳ９０９では、データ生成管理プログラム２０１は、生成済みデータバッファ２１１及び生成済みデータ退避領域３０３の何れかに後続データアクセスに該当する必要データがあるかに応じて後続データの生成の要否を判定する。データ生成管理プログラム２０１は、生成済みデータバッファ２１１及び生成済みデータ退避領域３０３の何れにも後続データアクセスに該当する必要データが無い場合に後続データの生成が必要と判定し（ステップＳ９０９：ＹＥＳ）、ステップＳ９１０に処理を移す。一方、データ生成管理プログラム２０１は、生成済みデータバッファ２１１及び生成済みデータ退避領域３０３の何れかに後続データアクセスに該当する必要データが有る場合に後続データの生成が不要と判定し（ステップＳ９０９：ＮＯ）、ステップＳ９０７に処理を移し、データアクセスの発生を待つ。
【００９４】
ステップＳ９１０では、データ生成管理プログラム２０１は、後続データの生成が必要であるので、パラメータ受信プログラム２０５が保持する動的パラメータと、ＩＯ観測プログラム２０６が観測しているデータアクセス状況とをもとに、学習サーバ１０１、１０２が学習データを読み出すスループットを計算する。この計算結果と、事前性能評価結果３０２に格納された、後続データに対するデータオーギュメンテーションプログラム３１２の単位処理性能（単位スレッド性能）をもとに、データ生成スループットが学習データの読み出しスループットを上回るようにデータ生成用リソース（例えばＣＰＵ１２２のスレッド数）を調整し決定する。
【００９５】
続いて、ステップＳ９１１では、データ生成管理プログラム２０１は、データ生成処理プログラム２０４に、ステップＳ９０９で生成が必要と判定された後続データアクセスのデータ生成処理を、ステップＳ９１０で調整したデータ生成用リソースで実行させる。データ生成処理プログラム２０４は、後続データアクセスで使用されるオーギュメンテーションデータを生成し、生成済みデータバッファ２１１に格納する。ステップＳ９１１が終了すると、データ生成管理プログラム２０１は、ステップＳ９０７に処理を移し、学習サーバ１０１、１０２からのデータアクセスを待つ。
【００９６】
＜実施例１の生成済みデータ領域の解放動作フロー＞
図１１に示すステップＳ１００１及びステップＳ１００２では、バッファサイズ抑制プログラム２０２は、図１０に示すデータ生成管理プログラム２０１が行うステップＳ９０１及びステップＳ９０２と同様の処理を実行する。
【００９７】
続いて、ステップＳ１００３では、バッファサイズ抑制プログラム２０２は、パラメータ受信プログラム２０５から、パラメータ送信ＡＰＩを受信及び保持の通知を受け、ＩＯ観測プログラム２０６による学習サーバ１０１、１０２からの生成済みデータバッファ２１１の生成済みデータに対するファイルクローズ（アクセス終了）の検出通知を待ち、アクセス終了が発生したかを判定する。バッファサイズ抑制プログラム２０２は、ファイルクローズ発生の場合（ステップＳ１００３：ＹＥＳ）、ステップＳ１００４に処理を移し、ファイルクローズ発生でない場合（ステップＳ１００３：ＮＯ）、ステップＳ１００３を繰り返す。
【００９８】
ステップＳ１００４では、バッファサイズ抑制プログラム２０２は、ＩＯ観測プログラム２０６からのファイルクローズの検出通知を、生成済みのオーギュメンテーションデータ毎にカウントし、ファイルクローズ回数が同時アクセス数、すなわち学習サーバ１０１、１０２の数と等しくなったかを判定する。バッファサイズ抑制プログラム２０２は、ファイルクローズ回数が同時アクセスと等しくなった場合（ステップＳ１００４：ＹＥＳ）、ステップＳ１００５に処理を移し、ファイルクローズ回数が同時アクセス数未満の場合（ステップＳ１００４：ＮＯ）、ステップＳ１００３に処理を戻す。
【００９９】
ステップＳ１００５では、バッファサイズ抑制プログラム２０２は、データ生成処理プログラム２０４に、ステップＳ１００４でファイルクローズ回数が同時アクセス数と等しくなったという解放条件を満たした生成済みデータが格納される生成済みデータバッファ２１１及び生成済みデータ退避領域３０３のバッファ領域を解放させる。ファイルクローズ回数が、学習サーバ１０１、１０２の数と等しくなった生成済みデータは、学習サーバ１０１、１０２からのアクセスが終了したとみなすことができる。
【０１００】
続いて、ステップＳ１００６では、バッファサイズ抑制プログラム２０２は、データ生成リストセット３１１で使用している全てのバッファ領域が解放されたかを判定する。すなわち、バッファサイズ抑制プログラム２０２は、データ生成処理プログラム２０４を介して、生成済みデータが格納される生成済みデータバッファ２１１及び生成済みデータ退避領域３０３のバッファ領域に、データ生成リストセット３１１に含まれる現在学習対象のオーギュメンテーションデータが記載されているデータ生成リスト４０１の使用中領域が残っているかを判定する。
【０１０１】
バッファサイズ抑制プログラム２０２は、データ生成リストセット３１１で使用している全てのバッファ領域が解放された場合（ステップＳ１００６：ＹＥＳ）、ステップＳ１００１に処理を移し、全てのバッファ領域が解放されていない場合（ステップＳ１００６：ＮＯ）、ステップＳ１００３に処理を移す。バッファサイズ抑制プログラム２０２は、ステップＳ１００３〜ステップＳ１００６の処理を、データ生成リストセット３１１に含まれるデータ生成リスト４０１で使用している全ての生成済みデータバッファ２１１及び生成済みデータ退避領域３０３が解放されるまで繰り返し実行する。
【０１０２】
以上の実施例１では、ストレージ装置１０４は、学習システム１Ｓで用いられる学習データのデータ準備処理（画像データの加工による教師データの水増し）をストレージ装置１０４側で行う。つまり、ストレージ装置１０４は、学習サーバ１０１、１０２からデータ要求を受け付けてからデータ準備処理を行う。
【０１０３】
ここで、データ準備処理で生成する教師データのファイルサイズが大容量となる場合、例えば学習サーバ１０１、１０２のメモリ上に展開し切れない大容量の教師データをパッキングして中間データとして取り扱う場合に、ストレージ装置１０４がデータ要求を受け付けてからファイル生成して送信開始するまでの時間（レイテンシ）が長くなり、学習サーバ側がタイムアウトするなどの問題が発生しうる。
【０１０４】
これに対し、実施例１では、ストレージ装置１０４は、データ要求を受け付ける前に、事前に送信用データを用意し、学習サーバの要求に即したバッファサイズ及びバッファ領域の解放可否を判別し、バッファサイズが必要最低限になるよう最適管理する。
【０１０５】
すなわち、実施例１では、ストレージ装置１０４は、学習サーバ１０１、１０２へのデータ供給の速度に合わせてデータ生成を制御し、また、複数の学習サーバ１０１、１０２からのデータアクセスを監視して不要となったバッファ領域を解放することで、ストレージ装置によるデータ供給とバッファ破棄を最適に制御する。
【０１０６】
このように、ストレージ装置１０４は、データ生成動作フロー及び生成済みデータ領域の解放動作フローの２つの動作フローで、学習時のアクセス開始前における動的なオーギュメンテーションデータ生成と、アクセス終了後におけるオーギュメンテーションデータの格納バッファ領域の解放とを並行して行う。これにより、必要最小限のストレージリソースで学習データを準備し、ファイルオープン時には遅延を起こすことなくオーギュメンテーションデータを学習処理に使用することが可能となる。
【実施例２】
【０１０７】
本発明の実施例２について、図１２〜図１０を用いて説明する。実施例２では、実施例１と比較して、ストレージ装置におけるオーギュメンテーションデータの生成の際に、ＣＰＵに加えてアクセラレータを用いる点が異なる。
【０１０８】
図１２を用いて、本発明の前提となるシステムのハードウェアの論理的構造を説明する。図１２は、実施例２のストレージ装置を含む学習システムのハードウェアの論理的構成の一例を示す図である。実施例２のストレージ装置１１０４を含む学習システム２Ｓは、実施例１のストレージ装置１０４を含む学習システム１Ｓと比較して、ストレージ装置１１０４がアクセラレータ１１２６をさらに有する点が異なる。その他については、実施例２の学習システム２Ｓは、実施例１の学習システム１Ｓと同様であるので、説明を省略する。
【０１０９】
アクセラレータ１１２６は、データオーギュメンテーションに関わる処理をＣＰＵ１２２の代わりに、もしくは連携して高速で実行するものである。アクセラレータ１１２６は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＧＰＵ（Graphics  Processing  Unit）、ＦＰＧＡ（Field  Programmable  Gate  Array）などを用いて、構成することができる。
【０１１０】
＜実施例２のストレージ装置のメモリに格納されるプログラムとデータ＞
図１３を用いて、ストレージ装置１１０４のメモリ１２４に格納されるプログラム及び情報を示す。図１３は、実施例２のストレージ装置のメモリに格納されるプログラムとデータの一例を示す図である。
【０１１１】
実施例２のストレージ装置１１０４は、実施例１のストレージ装置１０４と比較して、メモリ１２４に、データ生成処理プログラム２０４に代えてアクセラレータ対応データ生成処理プログラム１２０４が格納される点が異なる。実施例２のストレージ装置１１０４のメモリ１２４に格納されるその他のプログラムとデータは、実施例１のストレージ装置１０４のメモリ１２４に格納されるプログラムとデータと同様であるので、説明を省略する。
【０１１２】
アクセラレータ対応データ生成処理プログラム１２０４は、データ生成管理プログラム２０１から起動され、実際のデータオーギュメンテーションを行う。アクセラレータ対応データ生成処理プログラム１２０４は、ＣＰＵ１２２に加えアクセラレータ１１２６も使用して処理を行う。
【０１１３】
＜実施例２のストレージ装置のストレージデータ領域に格納されるデータ＞
図１４を用いて、ストレージ装置１１０４の記憶領域に格納される情報を示す。図１４は、実施例２のストレージ装置のストレージデータ領域に格納されるデータの一例を示す図である。
【０１１４】
実施例２のストレージデータ領域１３０１は、ストレージ装置１０４が内蔵するドライブ１２５上に論理的に構成された記憶領域である。実施例２のストレージデータ領域１３０１は、実施例１のストレージデータ領域３０１と比較して、事前性能評価結果３０２に代えて事前性能評価結果１３０２格納され、アクセラレータ用プログラム１３１４がさらに格納される点が異なる。実施例２のストレージデータ領域１３０１に格納されるその他のデータは、実施例１のストレージデータ領域に３０１に格納されるデータと同様であるので、説明を省略する。
【０１１５】
事前性能評価結果１３０２と生成済みデータ退避領域３０３は、ストレージデータ領域１３０１に格納されるもののユーザには公開されないデータである。一方、データ生成リストセット３１１、データオーギュメンテーションプログラム３１２、アクセラレータ用プログラム１３１４、元データ３１３については、ユーザによってストレージデータ領域１３０１に格納されるデータである。このストレージデータ領域１３０１には、上記データ以外のデータも格納されてもよい。
【０１１６】
データ生成リストセット３１１は、ユーザが元データ３１３に対して行いたいデータオーギュメンテーションと、利用するアクセラレータ１１２６、データオーギュメンテーションの結果として学習サーバ１０１、１０２が学習に使用することとなるデータの関係づけを記載するリストの集合である。実施例１では、データ生成リストセット３１１には、データ生成リスト４０１が含まれるとしたが、実施例２では、データ生成リスト４０１に代えて拡張データ生成リスト１４０１が含まれる。
【０１１７】
＜実施例１の拡張データ生成リスト＞
図１５は、実施例２のデータ生成リストセットに含まれるデータ生成リストの一例を示す図である。なお、データ生成リストセット３１１に含まれる複数の拡張データ生成リスト１４０１のそれぞれには、データ生成リストセット３１１内でユニークなＩＤが付与されて識別される。
【０１１８】
拡張データ生成リスト１４０１は、実施例１のデータ生成リスト４０１と比較して、アクセラレータ１４１１と、アクセラレータプログラム１４１２との２つの列をさらに含む点が異なる。拡張データ生成リスト１４０１は、その他の点では、実施例１のデータ生成リスト４０１と同様であるので、説明を省略する。
【０１１９】
拡張データ生成リスト１４０１は、複数行からなり、１組の入力データ４１１とデータオーギュメンテーションプログラム４１２とオプション４１３とアクセラレータ１４１１とアクセラレータプログラム１４１２と出力データ４１４との対応が１行に記載される。１行が１つの出力ファイルに対応する。
【０１２０】
拡張データ生成リスト１４０１では、入力データ４１１に対してデータオーギュメンテーションで使用するアクセラレータ１１２６の種類がアクセラレータ１４１１に、アクセラレータ１１２６が実行するプログラム名がアクセラレータプログラム１４１２に記載される。アクセラレータプログラムには、オプションが付与されていてもよい。
【０１２１】
なお、アクセラレータ１４１１に、アクセラレータ１１２６を使用しないことを示すキーワードとして、ＮＯＮＥと記載することもできる。また、ストレージ装置１１０４に複数のアクセラレータ１１２６が搭載されている場合には、アクセラレータ１１２６毎にアクセラレータ１４１１及びアクセラレータプログラム１４１２の各列を設け、アクセラレータ１１２６毎に、アクセラレータ１１２６の使用又は不使用と、アクセラレータ１１２６が実行するプログラム名とが記載されてもよい。
【０１２２】
＜実施例２の事前性能評価結果を記録するテーブル＞
図１６を参照して、事前性能評価結果１３０２を記録するテーブルについて説明する。図１６は、実施例２の事前性能評価結果を記録するテーブルの一例を示す図である。
【０１２３】
事前性能評価結果１３０２のテーブルは、実施例１の事前性能評価結果３０２のテーブルと比較して、アクセラレータ１３２１と、アクセラレータプログラム１３２２との２つの列をさらに含む点が異なる。事前性能評価結果１３０２のテーブルは、その他の点では、実施例１の事前性能評価結果３０２のテーブルと同様であるので、説明を省略する。
【０１２４】
事前性能評価結果１３０２のテーブルは、複数行からなり、１組のデータオーギュメンテーションプログラム３２１とオプション３２２とアクセラレータ１３２１とアクセラレータプログラム１３２２と単位処理性能３２３との対応が１行に記載される。
【０１２５】
データオーギュメンテーションプログラム３２１とオプション３２２とアクセラレータ１３２１とアクセラレータプログラム１３２２との組合せは、拡張データ生成リスト１４０１に記載されているデータオーギュメンテーションプログラム４１２とオプション４１３とアクセラレータ１４１１とアクセラレータプログラム１４１２との組合せに対応する。すなわち、事前性能評価プログラム２０３は、事前性能評価結果１３０２のテーブルの各行に記載のデータオーギュメンテーションプログラム４１２とオプション４１３とアクセラレータ１４１１とアクセラレータプログラム１４１２との全ての組合せから重複排除した組合せを、該当する加工対象の入力データ４１１のうちの１つに対して実行し、単位スレッドあたりの性能を測定する。そして、事前性能評価プログラム２０３は、データオーギュメンテーションプログラム３２１とオプション３２２とアクセラレータ１３２１とアクセラレータプログラム１３２２との組合せを実行して測定した単位スレッドあたりの性能を、単位処理性能３２３に記録する。
【０１２６】
＜実施例２の学習システムにおける学習処理＞
以上を有する実施例２の学習システム２Ｓにおける学習処理を行う手順を以降に示す。学習システム２Ｓにおける学習処理は、実施例１の学習システム１Ｓにおける学習処理と同様に、データ登録フェーズ及び学習フェーズがある。以下、実施例１との差分についてのみ説明する。
【０１２７】
＜実施例２のデータ登録フェーズ＞
図１７を用いて、実施例２のデータ登録フェーズの動作を説明する。図１７は、実施例２のストレージ装置のデータ登録フェーズにおける論理的構成の一例を示す図であり、データ登録フェーズにおける学習サーバ（主）１０１とストレージ装置１１０４の各プログラム及びデータの関係を示す。なお、実施例２のストレージ装置におけるデータ登録フェーズの処理フローの説明は、図８を援用し、実施例１のストレージ装置１０４、データ生成処理プログラム２０４、及びデータ生成リスト４０１を、実施例２のストレージ装置１１０４、アクセラレータ対応データ生成処理プログラム１２０４、及び拡張データ生成リスト１４０１に読み替えて説明する。
【０１２８】
実施例２のデータ登録フェーズの処理において、先ず、学習サーバ（主）１０１は、図１７のステップＳ１７００で示すように、ストレージ装置１１０４の事前に決められたデータ領域（フォルダなど）に、データ生成リストセット３１１に含まれるある拡張データ生成リスト１４０１と、データオーギュメンテーションプログラム３１２と、アクセラレータ用プログラム１２１４と、元データ３１３とを書き込む。ストレージ装置１１０４のデータ領域に書き込まれる拡張データ生成リスト１４０１に記載されている入力データ４１１、データオーギュメンテーションプログラム４１２、及びアクセラレータプログラム１４１２のそれぞれが指し示すデータとプログラムとが、データ生成リスト４０１とほぼ同時に書き込まれる元データ３１３、データオーギュメンテーションプログラム３１２、及びアクセラレータ用プログラム１２１４とである。
【０１２９】
また、実施例２では、図８のステップＳ７０１において、ストレージ装置１０４の事前性能評価プログラム２０３は、データ生成リストセット３１１が更新されるのを監視する。事前性能評価プログラム２０３は、データ生成リストセット３１１に含まれる拡張データ生成リスト１４０１が新規登録もしくは更新されている場合（ステップＳ７０１：ＹＥＳ）、ステップＳ７０２に処理を移し、新規登録も更新もされていない場合（ステップＳ７０１：ＮＯ）、ステップＳ７０１を繰り返す。
【０１３０】
また、実施例２では、図８のステップＳ７０２において、事前性能評価プログラム２０３は、新規登録もしくは更新された拡張データ生成リスト１４０１に対応するデータオーギュメンテーションプログラム３１２、アクセラレータ用プログラム１２１４、及び元データ３１３が格納済みかを確認する。事前性能評価プログラム２０３は、拡張データ生成リスト１４０１に対応するデータオーギュメンテーションプログラム３１２、アクセラレータ用プログラム１２１４、及び元データ３１３が格納済みの場合（ステップＳ７０２：ＹＥＳ）、ステップＳ７０３に処理を移し、格納済みでない場合（ステップＳ７０２：ＮＯ）、ステップＳ７０２を繰り返し、格納の完了を待つ。
【０１３１】
また、実施例２では、図８のステップＳ７０３において、事前性能評価プログラム２０３は、アクセラレータ対応データ生成処理プログラム１２０４に、新規追加もしくは更新が確認された拡張データ生成リスト１４０１に記載されているデータオーギュメンテーション（データオーギュメンテーションプログラム、オプション、アクセラレータ、及びアクセラレータプログラムの組合せ）の１つを、例えばＣＰＵ１２２の１スレッドで１つの入力データに対して実行させる事前性能評価を行う。
【０１３２】
アクセラレータ対応データ生成処理プログラム１２０４は、拡張データ生成リスト１４０１にアクセラレータ１１２６を使用する指定がある場合は、アクセラレータ１１２６も使用してオーギュメンテーションデータを作成する。アクセラレータ対応データ生成処理プログラム１２０４は、事前性能評価の際、オーギュメンテーションデータを作成するとともに、単位スレッドあたりの性能（スループットなど）を測定する。
【０１３３】
また、実施例２では、図８のステップＳ７０４において、事前性能評価プログラム２０３は、アクセラレータ対応データ生成処理プログラム１２０４による処理が完了した後、性能測定結果をストレージデータ領域にある事前性能評価結果１３０２のテーブルに記録する（図１６参照）。
【０１３４】
また、実施例２では、図８のステップＳ７０５〜ステップＳ７０８、ステップＳ７１０〜ステップＳ７１２においては、実施例１と同様の処理を行う。
【０１３５】
また、実施例２では、図８のステップＳ７０９において、事前性能評価プログラム２０３は、テップＳ７０１で新規追加もしくは更新が確認された拡張データ生成リスト１４０１内に、ステップＳ７０３の性能測定を行っていないデータオーギュメンテーションが有るかを判定する。事前性能評価プログラム２０３は、新規追加もしくは更新が確認された拡張データ生成リスト１４０１内に性能測定を行っていないデータオーギュメンテーションが有る場合（ステップＳ７０９：ＹＥＳ）、ステップＳ７０３に処理を移す。一方、事前性能評価プログラム２０３は、新規追加もしくは更新が確認されたデータ生成リスト４０１内に、性能測定を行っていないデータオーギュメンテーションが無い場合（ステップＳ７０９：ＮＯ）、ステップＳ７０１に処理を移す。以上が実施例２のデータ登録フェーズの動作である。
【０１３６】
なお、ストレージ装置１１０４の事前に決められたデータ領域（フォルダなど）にデータ生成リストセット３１１、データオーギュメンテーションプログラム３１２、アクセラレータ用プログラム１２１４、及び元データ３１３を書き込むのは、必ずしも学習サーバ（主）１０１である必要はなく、ストレージ装置１１０４にアクセスできる機器であれば、何れでもよい。
【０１３７】
＜実施例２の学習フェーズ＞
図１８を用いて、実施例２の学習フェーズの動作を示す。実施例２においても、実施例１と同様に、学習フェーズは、さらに、データ生成動作フロー及び生成済みデータ領域の解放動作フローを含む。図１８は、実施例２のストレージ装置の学習フェーズにおける論理的構成の一例を示す図であり、学習フェーズにおける学習サーバ１０１、１０２とストレージ装置１１０４の各プログラム及びデータの関係を示す。
【０１３８】
なお、実施例２のストレージ装置における学習フェーズのデータ生成動作フローの説明は、図１０を援用し、実施例１のストレージ装置１０４、データ生成処理プログラム２０４、及びデータ生成リスト４０１を、実施例２のストレージ装置１１０４、アクセラレータ対応データ生成処理プログラム１２０４、及び拡張データ生成リスト１４０１に読み替えて説明する。以下では、実施例１との差分があるステップのみ説明する。
【０１３９】
実施例２の学習フェーズは、図１８に示すように、学習サーバ（主）１０１が学習プログラム５０１を起動するところから始まる。学習サーバ（主）１０１は、学習プログラム５０１の初期化フェーズを実行し、その中でパラメータ送信ＡＰＩを呼び出す。そして、学習サーバ（主）１０１において、パラメータ送信ＡＰＩにより起動されたパラメータ送信ライブラリ５０２は、学習プログラム５０１の動的パラメータをストレージ装置１１０４のパラメータ受信プログラム２０５に送信する。
【０１４０】
＜実施例２のデータ生成動作フロー＞
実施例２では、図１０のステップＳ９０３において、データ生成管理プログラム２０１は、パラメータ受信プログラム２０５から学習フェーズ開始の通知を受け、学習フェーズで読み出されるオーギュメンテーションデータに対応した拡張データ生成リスト１４０１を読み出し、事前性能評価時に生成したオーギュメンテーションデータが生成済みデータ退避領域３０３に保持されているかを確認する。データ生成管理プログラム２０１は、事前性能評価時に生成したオーギュメンテーションデータが生成済みデータ退避領域３０３に保持されている場合（ステップＳ９０３：ＹＥＳ）、ステップＳ９０４に処理を移し、保持されていない場合（ステップＳ９０３：ＮＯ）、ステップＳ９０５に処理を移す。
【０１４１】
また、実施例２では、図１０のステップＳ９０５において、データ生成管理プログラム２０１は、アクセラレータ対応データ生成処理プログラム１２０４に、１回目の学習時に使用する初回データを生成させ、生成した初回データをもとにファイルエミュレーションプログラム２０７に応答準備をさせる。この際、拡張データ生成リスト１４０１にアクセラレータ１１２６の使用が指定されている場合は、アクセラレータ１１２６とアクセラレータ用プログラム１２１４も使用する。なお、この初回データは、学習サーバ１０１、１０２の台数、スレッド数、メモリ１１２に一度に読み出す教師データ数をもとに、そのサイズとファイル数が決定され、決定されたサイズで必要データ数分だけ生成される。また、この初回データに該当するデータのうち、ステップＳ９０４で生成済みデータバッファ２１１に読み出されたデータや、事前性能評価時に生成され生成済みデータバッファ２１１に残存しているデータは、再利用される。
【０１４２】
また、実施例２では、図１０のステップＳ９０６において、データ生成管理プログラム２０１は、アクセラレータ対応データ生成処理プログラム１２０４の応答準備が完了すると、パラメータ受信プログラム２０５に応答準備完了を通知し、応答準備完了をパラメータ送信ライブラリ５０２へ応答させる。その後、パラメータ送信ライブラリ５０２は、パラメータ受信プログラム２０５から応答準備完了を受信すると、待機させていた学習プログラム５０１を再開させ、学習サーバ１０１、１０２からストレージ装置１１０４へのデータアクセスを開始させる。
【０１４３】
また、実施例２では、図１０のステップＳ９０８において、データ生成管理プログラム２０１は、ステップＳ９０７でのデータアクセスに続く後続データアクセスが発生するかを判定する。ここで、データ生成管理プログラム２０１は、ステップＳ９０７でＩＯ観測プログラム２０６から通知されたデータアクセスの後続データが存在する場合、もしくは、後続データは存在しないがエポック回数分のデータ読み出しが繰り返されていない場合、後続データアクセスが発生すると判定する。後続データとは、拡張データ生成リスト１４０１において現在読み出されているオーギュメンテーションデータに該当する行の次の行に該当するデータである。
【０１４４】
また、実施例２では、図１０のステップＳ９１１において、データ生成管理プログラム２０１は、アクセラレータ対応データ生成処理プログラム１２０４に、ステップＳ９０９で生成が必要と判定された後続データのデータ生成処理を実行させる。ステップＳ９１１が終了すると、データ生成管理プログラム２０１は、ステップＳ９０７に処理を移し、生成済みデータバッファ２１１に次のアクセスで使用されるデータを準備させて、学習サーバ１０１、１０２からのデータアクセスを待つ。
【０１４５】
＜実施例１の生成済みデータ領域の解放動作フロー＞
実施例２のストレージ装置における生成済みデータ領域の解放動作フローの説明は、図１１を援用し、実施例１のストレージ装置１０４、データ生成処理プログラム２０４、及びデータ生成リスト４０１を、実施例２のストレージ装置１１０４、アクセラレータ対応データ生成処理プログラム１２０４、及び拡張データ生成リスト１４０１に読み替えて説明する。以下では、実施例１との差分があるステップのみ説明する。
【０１４６】
実施例２では、図１１のステップＳ１００５において、バッファサイズ抑制プログラム２０２は、アクセラレータ対応データ生成処理プログラム１２０４に、ステップＳ１００４でファイルクローズ回数が同時アクセス数と等しくなった生成済みデータが格納される生成済みデータバッファ２１１及び生成済みデータ退避領域３０３のバッファ領域を解放させる。
【０１４７】
また、実施例２では、図１１のステップＳ１００６において、バッファサイズ抑制プログラム２０２は、データ生成リストセット３１１で使用している全てのバッファ領域が解放されたかを判定する。すなわち、バッファサイズ抑制プログラム２０２は、アクセラレータ対応データ生成処理プログラム１２０４を介して、生成済みデータが格納される生成済みデータバッファ２１１及び生成済みデータ退避領域３０３のバッファ領域にデータ生成リストセット３１１の使用中領域が残っているかを判定する。
【０１４８】
また、実施例２では、バッファサイズ抑制プログラム２０２は、データ生成リストセット３１１で使用している全てのバッファ領域が解放された場合（ステップＳ１００６：ＹＥＳ）、ステップＳ１００１に処理を移し、全てのバッファ領域が解放されていない場合（ステップＳ１００６：ＮＯ）、ステップＳ１００３に処理を移す。バッファサイズ抑制プログラム２０２は、ステップＳ１００３〜ステップＳ１００６の処理を、データ生成リストセット３１１に含まれる拡張データ生成リスト１４０１で使用している全ての生成済みデータバッファ２１１及び生成済みデータ退避領域３０３が解放されるまで繰り返し実行する。
【０１４９】
以上のデータ生成動作フロー及び生成済みデータ領域の解放動作フローの２つの動作フローで、学習時のアクセス開始前におけるアクセラレータ１１２６を使用した動的なオーギュメンテーションデータ生成と、アクセス終了後におけるオーギュメンテーションデータの格納バッファ領域の解放とを並行して行うことができる。これにより、必要最小限のストレージリソースで、アクセラレータを使用して高速に学習データを準備し、ファイルオープン時には遅延を起こすことなくオーギュメンテーションデータを学習処理に使用することが可能となる。
【０１５０】
本発明は上記した実施例に限定されるものではなく、様々な変形例を含む。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した構成を備えるものに限定されない。また、矛盾しない限りにおいて、ある実施例の構成の一部を他の実施例の構成で置き換えたり、ある実施例の構成に他の実施例の構成を加えたりすることも可能である。また、各実施例の構成の一部について、追加、削除、置換、統合、及び分割をすることが可能である。
【符号の説明】
【０１５１】
１Ｓ，２Ｓ：学習システム、１０１：学習サーバ（主）、１０２：学習サーバ（従）、１０３：ネットワーク、１０４：ストレージ装置、１１２：メモリ、１２２：ＣＰＵ、１２４：メモリ、１２５：ドライブ、２０１：データ生成管理プログラム、２０２：バッファサイズ抑制プログラム、２０３：事前性能評価プログラム、２０４：データ生成処理プログラム、２０５：パラメータ受信プログラム、２０６：ＩＯ観測プログラム、２０７：ファイルエミュレーションプログラム、２１１：生成済みデータバッファ、３０１：ストレージデータ領域、３０２：事前性能評価結果、３０３：生成済みデータ退避領域、３１１：データ生成リストセット、３１２：データオーギュメンテーションプログラム、３１３：元データ、３２１：データオーギュメンテーションプログラム、３２２：オプション、３２３：単位処理性能、４０１：データ生成リスト、４１１：入力データ、４１２：データオーギュメンテーションプログラム、４１３：オプション、４１４：出力データ、５０１：学習プログラム、５０２：パラメータ送信ライブラリ、１１０４：ストレージ装置、１１２６：アクセラレータ、１２０４：アクセラレータ対応データ生成処理プログラム、
１２１４：アクセラレータ用プログラム、１３０１：ストレージデータ領域、１３０２：事前性能評価結果、１３１４：アクセラレータ用プログラム、１３２１：アクセラレータ、１３２２：アクセラレータプログラム、１４０１：拡張データ生成リスト、１４１１：アクセラレータ、１４１２：アクセラレータプログラム
【図１】
2020144553.tif 000003
【図２】
2020144553.tif 000004
【図３】
2020144553.tif 000005
【図４】
2020144553.tif 000006
【図５】
2020144553.tif 000007
【図６】
2020144553.tif 000008
【図７】
2020144553.tif 000009
【図８】
2020144553.tif 000010
【図９】
2020144553.tif 000011
【図１０】
2020144553.tif 000012
【図１１】
2020144553.tif 000013
【図１２】
2020144553.tif 000014
【図１３】
2020144553.tif 000015
【図１４】
2020144553.tif 000016
【図１５】
2020144553.tif 000017
【図１６】
2020144553.tif 000018
【図１７】
2020144553.tif 000019
【図１８】
2020144553.tif 000020