(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024122148
(43)【公開日】2024-09-09
(54)【発明の名称】データ圧縮システム、データ圧縮方法、及びデータ圧縮プログラム
(51)【国際特許分類】
H03M 7/30 20060101AFI20240902BHJP
H03M 7/40 20060101ALI20240902BHJP
【FI】
H03M7/30 Z
H03M7/40
【審査請求】未請求
【請求項の数】19
【出願形態】OL
(21)【出願番号】P 2023029527
(22)【出願日】2023-02-28
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110000279
【氏名又は名称】弁理士法人ウィルフォート国際特許事務所
(72)【発明者】
【氏名】圷 弘明
(72)【発明者】
【氏名】新井 滉
(72)【発明者】
【氏名】成子 貴洋
【テーマコード(参考)】
5J064
【Fターム(参考)】
5J064BA09
5J064BB03
5J064BC28
(57)【要約】
【課題】圧縮処理の処理速度を向上することができるようにする。
【解決手段】データを圧縮する計算機101Bにおいて、圧縮対象データを複数の部分データに分割し、それぞれの前記部分データに対して圧縮処理を並行して行う圧縮器70Bを有し、圧縮器70Bを、ニューラルネットワークを含み、前記部分データの所定のデータ単位ごとの出現確率を算出する確率算出部と、前記データ単位のそれぞれに対して、前記データ単位と前記出現確率とに基づいて、エントロピー符号化したビット列である符号化ビット列を出力するエントロピー符号化部とを備えるように構成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
データを圧縮するデータ圧縮システムであって、
圧縮対象データを複数の部分データに分割する分割部と、
それぞれの前記部分データに対して圧縮処理を並行して行う複数の圧縮処理部と、を有し、
前記圧縮処理部は、
ニューラルネットワークを含み、前記部分データの所定のデータ単位ごとの出現確率を算出する確率算出部と、
前記データ単位のそれぞれに対して、前記データ単位と前記出現確率とに基づいて、エントロピー符号化したビット列である符号化ビット列を出力するエントロピー符号化部と、を有する
データ圧縮システム。
【請求項2】
前記確率算出部は、前記データ単位ごとの予測情報を算出する予測モデルを含み、予測モデルはニューラルネットワークにより構成される
請求項1に記載のデータ圧縮システム。
【請求項3】
前記予測モデルは、長さ方向を削減する処理を含むニューラルネットワークにより構成される
請求項2に記載のデータ圧縮システム。
【請求項4】
前記確率算出部は、前記データ単位ごとの予測情報を算出する複数の予測モデルにより構成され、複数の予測モデルにより出力された予測情報に基づいて前記データ単位ごとの出現確率を確定する統合モデルを有する
請求項1に記載のデータ圧縮システム。
【請求項5】
前記統合モデルは、複数の予測モデルによる出力に対する重みを有しており、
前記統合モデルに対する学習処理を行うことにより、前記予測モデルに対する重みを決定する学習部と、
前記重みに基づいて、前記確率算出部が使用する予測モデルを選択するモデル選択部と、をさらに有する
請求項4に記載のデータ圧縮システム。
【請求項6】
前記データ単位の出現確率の算出に用いたデータである算出時使用データを識別する識別情報と、算出された出現確率との履歴情報を記憶部に格納する履歴管理部を更に有し、
前記確率算出部は、前記履歴情報に基づいて、出現確率を算出する
請求項1に記載のデータ圧縮システム。
【請求項7】
前記履歴管理部は、前記識別情報として、前記算出時使用データに対応するLSH(Locality Sensitive Hashing)を算出する
請求項6に記載のデータ圧縮システム。
【請求項8】
前記圧縮処理部は、
圧縮対象データのそれぞれのデータ単位に対してワンホットエンコーディングを行って得られるビット列であるビット列を、前記確率算出部に入力する変換部を有する
請求項1に記載のデータ圧縮システム。
【請求項9】
前記圧縮対象データの圧縮に関わる命令識別符号とデータを受け付ける受付部を更に有し、
前記圧縮処理部は、前記命令識別符号とデータに基づいてデータを圧縮する
請求項1に記載のデータ圧縮システム。
【請求項10】
前記圧縮対象データの圧縮に関わるヒント情報を受け付ける受付部を更に有し、
前記確率算出部は、前記ヒント情報に基づいて、前記データ単位ごとの確率分布を算出する
請求項9に記載のデータ圧縮システム。
【請求項11】
複数の前記部分データに対応する符号化ビット列を、各部分データに対応する符号化ビット列を識別可能に格納する格納処理部を更に有する
請求項1に記載のデータ圧縮システム。
【請求項12】
前記圧縮処理部は、
前記各部分データの一部に対応する符号化ビット列について、
前記各部分データの一部に対応する更新データのみに対して、前記確率算出部が前記各部分データの所定のデータ単位ごとの出現確率を算出し、エントロピー符号化部により符号化ビット列を出力する、
請求項11に記載のデータ圧縮システム。
【請求項13】
前記圧縮対象データは、所定のメディアデータであり、
前記圧縮対象データのデータ量を削減するデータ削減部を更に有し、
前記分割部は、前記データ削減部によりデータ量が削減されたデータ削減後圧縮対象データを分割する
請求項1に記載のデータ圧縮システム。
【請求項14】
複数の前記部分データに対応する符号化ビット列のそれぞれに対して伸張処理を行う複数の伸張処理部を更に有し、
前記伸張処理部は、
ニューラルネットワークを含み、前記部分データの所定のデータ単位ごとの出現確率を算出する第2確率算出部と、
前記符号化ビット列と前記出現確率とに基づいて、エントロピー復号化したデータ単位を出力するエントロピー復号部と、を有する
請求項1に記載のデータ圧縮システム。
【請求項15】
所定の第1サイズのブロック単位で圧縮され、前記第1サイズの第1ブロック単位で保障コードが対応付けられた第1圧縮データを伸張する伸張部を更に有し、
前記分割部は、前記伸張部により伸張された伸張データを分割し、
前記圧縮処理部により得られた複数の符号化ビット列について、第2サイズの第2ブロック単位に対して保障コードを作成して、前記保障コードを前記第2ブロック単位に対応する符号化ビット列である第2ブロック対応ビット列群に対応付けて記憶する第2ブロック対応保障コード作成部を更に有する
請求項1に記載のデータ圧縮システム。
【請求項16】
前記第2ブロック対応ビット列群における複数の前記部分データに対応する符号化ビット列に対して伸張処理を並行して行う複数の伸張処理部を更に有し、
前記伸張処理部は、
ニューラルネットワークを含み、前記部分データの所定のデータ単位ごとの出現確率を算出する第2確率算出部と、
前記符号化ビット列と前記出現確率とに基づいて、エントロピー復号化したデータ単位を出力するエントロピー復号部と、
前記第1サイズの前記第1ブロック単位に含まれる複数のデータ単位に基づいて、前記第1ブロック単位ごとの保障コードを作成する第1ブロック対応保障コード作成部と、を有する
請求項15に記載のデータ圧縮システム。
【請求項17】
前記圧縮処理部は、
過去に処理した部分データと前記部分データとの重複を検出した場合に、前記部分データへの参照情報を圧縮結果とする、
請求項1に記載のデータ圧縮システム。
【請求項18】
データを圧縮するデータ圧縮システムによるデータ圧縮方法であって、
圧縮対象データを複数の部分データに分割し、
それぞれの前記部分データに対する圧縮処理を複数の圧縮処理部により並行して行い、
前記圧縮処理部は、
ニューラルネットワークを用いて、前記部分データの所定のデータ単位ごとの出現確率を算出し、
前記データ単位のそれぞれに対して、前記データ単位と前記出現確率とに基づいて、エントロピー符号化したビット列である符号化ビット列を出力する
データ圧縮方法。
【請求項19】
データを圧縮する処理をコンピュータに実行させるデータ圧縮プログラムであって、
前記コンピュータを、
圧縮対象データを複数の部分データに分割する分割部と、
それぞれの前記部分データに対して圧縮処理を並行して行う複数の圧縮処理部と、して機能させ、
前記圧縮処理部を、
ニューラルネットワークを含み、前記部分データの所定のデータ単位ごとの出現確率を算出する確率算出部と、
前記データ単位のそれぞれに対して、前記データ単位と前記出現確率とに基づいて、エントロピー符号化したビット列である符号化ビット列を出力するエントロピー符号化部と、して機能させる
データ圧縮プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データを圧縮する技術に関する。
【背景技術】
【0002】
IoT(Internet of Things)の進展で、データ生成量は、大幅に増加し、ハイブリッドクラウドにおけるデータ格納量が増加している。ストレージコストは低下しているが、データ量の伸びをカバーできない。したがって、ストレージに格納するデータ量を低減することが重要となっている。
【0003】
関連する技術として、例えば、特許文献1には、圧縮に不向きなデータであってもデータ量を削減することのできる技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、圧縮処理によりデータ量を削減することができるが、圧縮処理に長時間要してしまうという問題もある。このように圧縮処理に長時間を要してしまうと、計算資源のコスト増加や他の処理に影響を及ぼしてしまう虞がある。
【0006】
本発明は、上記事情に鑑みなされたものであり、その目的は、圧縮処理の処理速度を向上することのできる技術を提供することにある。
【課題を解決するための手段】
【0007】
上記目的を達成するため、一観点に係るデータ圧縮システムは、データを圧縮するデータ圧縮システムであって、圧縮対象データを複数の部分データに分割する分割部と、それぞれの前記部分データに対して圧縮処理を並行して行う複数の圧縮処理部と、を有し、前記圧縮処理部は、ニューラルネットワークを含み、前記部分データの所定のデータ単位ごとの出現確率を算出する確率算出部と、前記データ単位のそれぞれに対して、前記データ単位と前記出現確率とに基づいて、エントロピー符号化したビット列である符号化ビット列を出力するエントロピー符号化部と、を有する。
【発明の効果】
【0008】
本発明によれば、圧縮処理の処理速度を向上することができる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、第1実施形態に係る計算機システムの全体構成図である。
【
図2】
図2は、第1実施形態に係る論物変換テーブルの構成図である。
【
図3】
図3は、第1実施形態に係るブロックデータ格納情報の構成図である。
【
図4】
図4は、第1実施形態に係る履歴情報の構成図である。
【
図5】
図5は、第1実施形態に係る計算機システムにおけるバックアップ処理及びリストア処理の概要を説明する図である。
【
図6】
図6は、第1実施形態に係る圧縮器を説明する図である。
【
図7】
図7は、第1実施形態に係る伸張器を説明する図である。
【
図8】
図8は、第1実施形態に係る圧縮器による圧縮処理のフローチャートである。
【
図9】
図9は、第1実施形態に係る伸張器による伸張処理のフローチャートである。
【
図10】
図10は、第1実施形態に係るバックアップ処理のフローチャートである。
【
図11】
図11は、第1実施形態に係るリストア処理のフローチャートである。
【
図12】
図12は、第1実施形態に係る予測モデル処理を説明する図である。
【
図13】
図13は、第1実施形態に係る予測モデル処理および統合モデル処理のデータフローを説明する図である。
【
図14】
図14は、第1実施形態に係る予測モデル処理のアルゴリズムを説明する図である。
【
図15】
図15は、第1実施形態に係る履歴情報を用いた予測モデル処理を説明する図である。
【
図16】
図16は、第1実施形態に係る履歴情報を用いたメモリモデル処理を説明する図である。
【
図17】
図17は、第1実施形態に係る指数移動平均を用いたメモリモデル処理を説明する図である。
【
図18】
図18は、変形例に係る計算機システムを説明する図である。
【
図19】
図19は、第2実施形態に係る計算機システムの圧縮器を説明する図である。
【
図20】
図20は、第2実施形態に係る計算機システムの伸張器を説明する図である。
【発明を実施するための形態】
【0010】
実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0011】
以下の説明では、「AAAテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「AAAテーブル」を「AAA情報」と呼ぶことができる。
【0012】
図1は、第1実施形態に係る計算機システムの全体構成図である。
【0013】
計算機システム1は、入力装置40と、ユーザ端末80と、計算機101Aと、計算機101Bとを有する。計算機101A,101Bとは、それぞれデータ圧縮システムの一例である。なお、計算機システム1をデータ圧縮システムの一例ということもできる。計算機101Aと計算機101Bとは、ネットワーク150を介して接続されている。ネットワーク150は、例えば、有線LAN(Local Area Network)、無線LAN、WAN(Wide Area Network)、専用線などの通信路である。計算機101Aは入力装置40と接続されている。計算機101Bはユーザ端末80と接続されている。なお、計算機101Aと、計算機101Bは、クラウド環境における仮想的な計算リソース(例えば、仮想マシンやコンテナなど)であってもよい。
【0014】
入力装置40は、例えば、PC(Personal Computer)等のコンピュータにより構成され、ユーザからの入力を受け付けたり、データを使用しての各種処理を実行したりする。入力装置40は、処理に利用するデータを計算機101Aに格納したり、計算機101Aから取得したりする。なお、入力装置40は、クラウド環境における仮想的な計算リソース(例えば、仮想マシンやコンテナなど)であってもよい。
【0015】
ユーザ端末80は、例えば、例えば、PC等のコンピュータにより構成され、ユーザからの指示を受け付けて計算機101Bの設定等を行う。なお、ユーザ端末80は、クラウド環境における仮想的な計算リソース(例えば、仮想マシンやコンテナなど)であってもよい。
【0016】
計算機101Aは、入力装置40で使用されるデータを格納して管理する。計算機101Aは、データを計算機101Bにバックアップする処理や、計算機101Bからデータをリストアする処理を行う。計算機101Aは、例えば、PCやサーバ装置等のコンピュータで構成され、プロセッサ53Aと、メモリ52Aと、IF(インターフェース)5A1,5A2と、並列処理デバイス61Aと、永続記憶装置54Aと、これら構成を接続するバス10Aとを備える。
【0017】
IF 5A1、5A2は、例えば、有線LANカードや無線LANカードなどのインターフェースであり、ネットワーク150や通信線を介して他の装置と通信する。
【0018】
プロセッサ53Aは、メモリ52Aに格納されているプログラムに従って各種処理を実行する。プロセッサ53Aは、プログラムを実行することにより、圧縮器72Aと伸張器73Aを構成する。また、プロセッサ53Aは、プログラムを実行することにより、第1ブロック対応保障コード作成部及び第2ブロック対応保障コード作成部を構成する。圧縮器72Aは、例えば、データに対する圧縮処理を行う。圧縮器72Aによる圧縮処理のアルゴリズムとしては、gzipやLZMA(Lempel-Ziv-Markov chain-Algorithm)等であってもよい。伸張器73Aは、圧縮されたデータを伸張する。伸張器73Aによる伸張処理のアルゴリズムは、圧縮器72Aの圧縮処理に対応するアルゴリズムであってもよい。
【0019】
メモリ52Aは、例えば、RAM(Random Access Memory)であり、プロセッサ53Aで実行されるプログラムや、必要な情報を記憶する。本実施形態では、メモリ52Aは、例えば、論物変換テーブル110(
図2参照)を格納する。
【0020】
永続記憶装置54Aは、例えば、ハードディスクやフラッシュメモリなどであり、プロセッサ53Aで実行するためにメモリ52Aに読み出されるプログラムや、プロセッサ53Aに利用される各種データを記憶する。本実施形態では、永続記憶装置54Aは、プログラムとしてデータ圧縮プログラムを記憶し、データとしてブロックデータ格納情報120(
図3参照)や論物変換テーブル110(
図2参照)を格納する。なお、永続記憶装置54Aに代えて又は加えて、ネットワークを介して接続されたクラウド上のストレージを利用するようにしてもよい。なお、永続記憶装置54Aやクラウド上のストレージは、ブロックストレージ、ファイルストレージ、オブジェクトストレージ、データベースなどで構成してもよい。
【0021】
並列処理デバイス61Aは、例えば、GPU(Graphics Processing Unit)、ASIC(Application specific integrated circuit)、FPGA(Field Programmable Gate Array)、マルチコアCPU(Central Processing Unit)等の並列して処理を実行可能なデバイスであり、複数のコア62Aと、メモリ63Aとを有する。コア62Aは、メモリ63Aに格納されたプログラムに従って処理を実行する。メモリ63Aは、記憶部の一例であり、コア62Aが実行するプログラムや、コア62Aで使用するデータを格納する。メモリ63Aは、例えば、履歴情報130(
図4参照)を格納する。複数のコア62Aは、メモリ63Aを利用して並列して各種処理を実行することができる。本実施形態では、並列処理デバイス61Aは、プログラムを実行することにより、圧縮器70Aと、伸張器71Aとを構成する。本実施形態では、圧縮器70Aによる圧縮は、圧縮器72Aによる圧縮よりも高圧縮が可能となっている。
【0022】
計算機101Bは、計算機101Aで管理されているデータを格納して管理する。計算機101Bは、例えば、PCやサーバ装置等のコンピュータで構成され、プロセッサ53Bと、メモリ52Bと、IF 5B1,5B2と、並列処理デバイス61Bと、永続記憶装置54Bと、これら構成を接続するバス10Bとを備える。プロセッサ53Bは、圧縮器72Bと、伸張部の一例としての伸張器73Bとを構成する。並列処理デバイス61Bは、複数のコア62Bと、メモリ63Bとを有し、圧縮器70Bと、伸張器71Bとを構成する。計算機101Bの各構成は、符号の前半の数字が同じ計算機101Aにおける各構成と同様な構成となっている。なお、計算機101Aと、計算機101Bとの構成は上記に限られず、実行する処理に応じて一部の構成を備えなくてもよい。
【0023】
次に、論物変換テーブル110について説明する。
【0024】
図2は、第1実施形態に係る論物変換テーブルの構成図である。
【0025】
論物変換テーブル110は、データの格納先である論理アドレスに対応する物理アドレスを管理するテーブルであり、所定のサイズの領域(例えば、ブロック)毎のエントリを格納する。論物変換テーブル110のエントリは、論理アドレス110aと、物理アドレス110bと、ブロックサイズ110cとのフィールドを含む。論理アドレス110aには、エントリに対応する領域を示す論理アドレスが格納される。物理アドレス110bには、エントリに対応する領域に対応する物理アドレスが格納される。ブロックサイズ110cには、エントリに対応する領域のブロックのサイズが格納される。
【0026】
次に、ブロックデータ格納情報120について説明する。
【0027】
図3は、第1実施形態に係るブロックデータ格納情報の構成図である。
【0028】
ブロックデータ格納情報120は、ブロックデータを管理する情報であり、ブロックデータごとのエントリを含む。ブロックデータ格納情報120のエントリは、圧縮後データ120aと、保障コード120bと、圧縮後サイズ120cとのフィールドを含む。圧縮後データ120aには、ブロックデータが圧縮された後の圧縮後データが格納される。保障コード120bには、ブロックデータに対する保障コードが格納される。圧縮後サイズ120cには、圧縮後データのデータサイズが格納される。圧縮対象データは、複数の部分データに分割して圧縮するため、部分データごとに圧縮後サイズを持つことで、部分的な再圧縮や伸張対象のデータ位置に含まれない部分データを複合化することなく、部分的な再圧縮や伸張を可能とできる。モデル情報120dには、全体学習したモデル(予測モデルや統合モデルの初期状態となるモデル)が格納される。または対応する他のモデル(すでに学習した他のブロックデータに対応するモデル)の参照情報を格納して、ブロックデータ格納情報のデータ量削減してもよい。
【0029】
次に、履歴情報130について説明する。
【0030】
図4は、第1実施形態に係る履歴情報の構成図である。
【0031】
履歴情報130は、データ単位について出現確率を算出する際に使用したデータ(算出時使用データ)に対応する確率分布を管理する情報であり、算出時使用データごとのエントリを含む。履歴情報130のエントリは、コード130aと、確率分布情報130bとのフィールドを含む。コード130aには、エントリに対応する算出時使用データについての所定のコード(識別情報)が格納される。コードとしては、算出時使用データに対するハッシュ値や、LSH(Locality Sensitive Hashing)であってもよい。また、後述の
図15、
図16に示す学習型のLSHを用いてもよい。確率分布情報130bには、エントリに対応する算出時使用データにより算出された確率分布に関する情報が格納される。確率分布に関する情報としては、対象となるデータ単位の出現頻度や、DNN(Deep Neural Network)による学習型符号であってもよい。履歴情報130は、例えば、コア62Bがプログラムを実行することにより、格納される。このコア62Bによる機能は、履歴管理部に相当する。履歴情報130の生成と利用方法の一例について、後述の
図15で説明する。
【0032】
次に、計算機システム1におけるバックアップ処理とリストア処理との概要について説明する。
【0033】
図5は、第1実施形態に係る計算機システムにおけるバックアップ処理及びリストア処理の概要を説明する図である。
【0034】
まず、バックアップ処理について説明する。バックアップ処理においては、バックアップ対象データが、計算機101Aの圧縮器72Aにより圧縮され、所定のブロックサイズ(第1サイズ)を単位として保障コードが作成されて対応付けられて、メモリ52A又は永続記憶装置54Aに格納されているものとして説明する。
【0035】
計算機101Aは、論物変換テーブル110Aを参照し、バックアップ対象データのメモリ52A又は永続記憶装置54Aにおける格納位置を特定し、バックアップ対象データ及び保障コードを取得し、バックアップ先となる計算機101Bに送信する。
【0036】
計算機101Bは、受信したバックアップ対象データ及び保障コードを、メモリ52B又は永続記憶装置54Bに格納し、伸張器73Bによりバックアップ対象データに対して伸張処理を行う。この伸張処理においては、保障コードにより、バックアップ対象データについての誤り検出や訂正等を行う。次いで、圧縮器70Bは、伸張されたバックアップ対象データを圧縮し、所定のブロックサイズ(第2サイズ)のブロックを単位として保障コードを作成して、メモリ52B又は永続記憶装置54Bに格納し、格納先を論物変換テーブル110Bに登録する。但し、部分更新(ブロック全体を伸長することなく更新する部分のみ圧縮する)のために、例えばXORパリティのような部分更新が可能な保障コードをブロックの単位で用いる方法を取っても良い。または、部分更新に対応するために、部分データごとに保障コードを作成してもよい。
【0037】
このバックアップ処理によると、圧縮器70Bによりバックアップ対象データを高圧縮した状態で保存しておくことができる。また、第1サイズより第2サイズを大きなサイズとし、第2サイズをデータの単位として保障コードを作成するようにした場合、全体としてのデータ量を低減することができる。なお、計算機101Bの伸張器73Bによる伸張処理を計算機101Aの伸張器73Aで実行し、伸張したデータを計算機101Bに送信するようにしてもよい。
【0038】
次に、リストア処理について説明する。リストア処理においては、計算機101Bが計算機101Aからバックアップ処理によりバックアップされているデータをリストア対象データとして指示された場合について説明する。まず、計算機101Bの伸張器71Bは、論物変換テーブル110Bを参照し、バックアップ対象データのメモリ52B又は永続記憶装置54Bにおける格納位置を特定し、リストア対象データ及び保障コードを取得し、伸張処理を行う。この伸張処理においては、保障コードにより、リストア対象データについての誤り検出や訂正等を行う。
【0039】
次いで、圧縮器72Bは、伸張されたリストア対象データを、計算機101Aの伸張器73Aで伸張可能なアルゴリズムにより圧縮し、第1サイズを単位として保障コードを作成して、メモリ52B又は永続記憶装置54Bに格納し、リストア先となる計算機101Aに圧縮されたリストア対象データと保障コードとを送信する。
【0040】
計算機101Aは、受信したリストア対象データ及び保障コードを、メモリ52A又は永続記憶装置54Aに格納し、格納先を論物変換テーブル110Aに登録する。次いで、伸張器73Aは、リストア対象データに対して伸張処理を行う。この伸張処理においては、保障コードにより、リストア対象データについての誤り検出や訂正等を行う。これにより、計算機101Aでは、リストア対象データを利用できるようになる。
【0041】
次に、圧縮器70(70A,70B)についての構成及び処理について説明する。
【0042】
図6は、第1実施形態に係る圧縮器を説明する図である。
【0043】
圧縮器70は、データ分割部701と、複数の圧縮処理部702(702A,702B等)と、を有する。それぞれの圧縮処理部702は、並列処理デバイス61(61A,61B)のそれぞれのコア62(62A,62B)がメモリ63(63A,63B)のプログラムを実行することにより構成される。ここで、学習部及びモデル選択部は、圧縮処理部702がプログラムを実行することにより構成される。
【0044】
データ分割部701は、圧縮対象データを複数の部分データ(例:1KB)に分割する。本実施形態では、データ分割部701は、並列して実行するバッチ数Bだけの部分データに分割する。なお、圧縮器70においては、バッチ数Bと同数の圧縮処理部702が処理に利用され、各圧縮処理部702は、それぞれ部分データを対象に圧縮処理を行う。また、圧縮対象データは、複数のブロックデータを纏めて同時に処理することで分割する部分データの数をさらに増やし、例えば並列処理デバイス61B上で処理の並列度を高めて高速化することができる。
【0045】
圧縮処理部702は、変換部の一例としての事前符号化部703と、確率算出部704と、エントロピー符号化部705とを含む。
【0046】
事前符号化部703は、圧縮対象の部分データがバイナリデータである場合、部分データに含まれる所定のサイズ(uビット)のデータ単位ごとにワンホットエンコーディングを行う。事前符号化部703によると、1データ単位は、2uのビットに変換される。事前符号化部703により符号化後のデータが確率算出部704に入力されるチャネル数(C)となる。なお、ワンホットエンコーディングを行った場合には、1データ単位についての符号化後のデータの所定の1ビットについては、残りのビットの値に応じて値を特定することができるという性質をもっているので、符号化後のデータの所定の1ビットを削除し、チャネル数C=2u-1としてもよい。このようにチャネル数を減らすことにより、確率算出部704に入力されるデータ量を低減することができる。なお、複数の確率算出部704の入力に利用されるデータは、部分データのバッチ数(B)×チャネル数(C)×長さ(N)の配列となる。なお、入力に利用するデータのチャネルの次元に、さらに補助的な情報を付加してもよい。例えば、部分データに対応するビット単位の論理アドレス110aをビットエンコードして付加(前記2uのビットに加えて、論理アドレスの最大値に相当するビット数のビットを付加)することで、対象データに対する予測モデルの精度を向上させ、圧縮率の向上させることができる。また、事前符号化部703は、圧縮対象の部分データが数値データである場合やバイナリデータであるが数値として表現できる場合(センサデータや画像データなど)、数値のデータとして確率算出部704に入力してもよい。一般に、ストレージ上のデータなどでは、数値のデータファイルとテキストやバイナリデータファイルなどが混在することが想定されるため、より効率的な圧縮のために、数値のデータ用の予測モデル704aとテキストやバイナリデータ用の予測モデル704aなど、複数個のモデルを用意してもよい。
【0047】
さらに事前符号化部703は、圧縮対象の部分データのハッシュ値を計算し、そのハッシュ値を比較することで、過去に処理した部分データとの重複を検出し、重複したデータについては、過去に処理した部分データへの参照情報のみを論物テーブル110やブロックデータ格納情報120に保存することで、同じデータの再圧縮と保存をしなくてすみ、圧縮率を高めることができる。その場合は、以降の圧縮処理を省略し、処理を高速化してもよい。
【0048】
確率算出部704は、複数の種類の予測モデル704aと、統合モデル704bとを有する。
【0049】
予測モデル704aは、出現確率の予測対象となるデータ単位(予測対象データ単位)の予測に利用するデータ(予測用データ)と、履歴情報130の確率分布情報とを入力することにより、予測対象データ単位の予測情報Qb,iを出力する。ここで、予測用データは、例えば、予測対象データ単位をDb,i(iは、部分データにおける予測データ単位の位置)とすると、データ単位Db,i-r~Db,i―1のデータ単位、すなわち、予測対象データ単位の直前のr個のデータ単位としてもよい。なお、Db,iの直前にr個のデータ単位が存在しない場合には、存在しないデータ単位については所定の値であるとして処理を行うこととしている。予測モデル704aは、ニューラルネットワークなどの複数の学習可能な重みで構成されたモデルでもよく、予め定義された特定の処理を実行するように構成されたモデルであってもよい。また、予測モデル704aは、予測情報Qb,iとして出現確率を出力してもよいし、予測対象データ単位に対応する位置の特徴量マップなどを出力してもよい。また、予測情報Qb,iとして出現確率を出力する場合は、シンボル毎の出現確率として離散的な確率(カテゴリカル分布など)を出力してもよいし、ガウス分布などの連続的な確率密度関数のパラメータ(平均、分散など)を出力してもよいし、連続的な確率密度関数の累積分布関数からシンボル毎の出現確率に対応する離散的な確率を算出した結果を出力してもよい。予測モデル704aの構成の一例については、後述の
図12~14で説明する。
【0050】
統合モデル704bは、複数種類の予測モデル704aから出力された予測情報と、履歴情報130の確率分布情報とを入力することにより、予測対象データ単位の出現確率Pb,iを出力(算出)する。出現確率Pb,iは、データ単位のシンボル毎の出現確率の分布であり、離散的な確率(カテゴリカル分布など)を出力してもよいし、ガウス分布などの連続的な確率密度関数のパラメータ(平均、分散など)を出現確率として出力し、エントロピー符号化時に累積分布関数からシンボル毎の出現確率に対応する離散的な確率を算出した結果を利用してもよい。つまり、ワンホットエンコーディングを行った場合には、確率算出部704に入力されるチャネル数(C=2
uまたは2
u-1)と同じ要素数を持つ。統合モデル704bは、ニューラルネットワークなどのモデルであり、例えば、各予測モデル704aから入力される値に対して学習されている重みを用いて統合するGated Linear Networksであってもよいし、パーセプトロンで構成してもよい。また、予測モデルの出力結果を基にしたアテンション処理(統合モデル704b内で処理するデータに対して、予測モデルの出力結果から算出した重要度にあたる値の乗算処理を行う)を含めてもよい。本実施形態では、確率算出部704は、統合モデル704bにおける各予測モデル704aに対する重みに基づいて、複数種類の予測モデル704aの中から処理に利用する予測モデルを選択する。なお、履歴情報130は、それぞれの圧縮処理部702に対して設けられてもよく、複数の圧縮処理部702で共有してもよい。特にそれぞれのデータ単位についてローカリティがある場合、履歴情報130を共有することにより、確率分布の統計的なサンプル数を増やすことができるため、予測精度が向上し圧縮率を高めることができ、さらに例えばメモリ63Bの使用量を節約することができる。統合モデル704bの構成の一例については、後述の
図13で説明する。
【0051】
エントロピー符号化部705は、確率算出部704から出力された出現確率Pb,iと、データ単位Db,iと、を入力として、データ単位Db,iをエントロピー符号化したビット列(符号化ビット列)を出力する。
【0052】
それぞれの圧縮処理部702は、部分データにおけるデータ単位を単位として、例えば先頭のデータ単位から順次圧縮対象を変えて処理を繰り返し実行することにより、部分データの全体をエントロピー符号化する。それぞれの圧縮処理部702による処理は、例えばバッチ数(B)の次元において並列して実行されることとなるので、圧縮処理の効率を向上することができる。また、複数の予測モデルの結果を統合して出現確率を算出するようにしているので、精度の高い出現確率を算出でき、圧縮効率を向上することができる。
【0053】
圧縮器70は、複数の圧縮処理部702により得られたそれぞれの部分データに対するビットストリーム(第2ブロック対応ビット列群)を、それぞれの部分データに対応するデータ範囲を識別可能な状態としてまとめて圧縮対象データの圧縮後データとする。ここで、格納処理部は、圧縮器70により構成される。
【0054】
次に、伸張器71(71A,71B)についての構成及び処理について説明する。
【0055】
図7は、第1実施形態に係る伸張器を説明する図である。
【0056】
伸張器71は、圧縮器70により圧縮された圧縮後データを伸張する。伸張器71は、データ合成部711と、複数の伸張処理部712(712A,712B等)と、を有する。
。それぞれの伸張処理部712は、並列処理デバイス61(61A,61B)のそれぞれのコア62(62A,62B)がメモリ63(63A,63B)のプログラムを実行することにより構成される。ここで、第1ブロック対応保障コード作成部は、伸張器71がプログラムを実行することにより構成される。
【0057】
データ合成部711は、各伸張処理部712で伸張されたデータ単位により構成される部分データを合成して圧縮前のデータを生成する。本実施形態では、データ合成部711は、圧縮後データの圧縮時におけるバッチ数Bの部分データを合成する。なお、伸張器71においては、バッチ数Bと同数の伸張処理部712が処理に利用され、各伸張処理部712は、それぞれ部分データについての伸張処理を行う。
【0058】
伸張処理部712は、事前符号化部713と、第2確率算出部の一例としての確率算出部714と、エントロピー復号部715とを含む。
【0059】
事前符号化部713は、事前符号化部703と同様の処理を行う。また、確率算出部714は、確率算出部704と同様の処理を行う。
【0060】
エントロピー復号部715は、確率算出部714から出力された出現確率Pb,iと、圧縮後データの復号対象のデータ単位Db,iに対応するビット列と、を入力すると、ビット列を復号して、データ単位Db,iを出力する。
【0061】
それぞれの伸張処理部712は、部分データにおけるデータ単位ごとに、例えば先頭のデータ単位から順次伸張対象を変えて処理を繰り返し実行することにより、エントロピー符号化された部分データのビット列全体をエントロピー復号する。それぞれの伸張処理部712による処理は、例えばバッチ数(B)の次元において並列して実行されることとなるので、伸張処理の効率を向上することができる。
【0062】
次に、圧縮器70による圧縮処理の処理動作について説明する。
【0063】
図8は、第1実施形態に係る圧縮器による圧縮処理のフローチャートである。なお、
図8に示す圧縮処理は、圧縮器70の各圧縮処理部702により実行される処理であり、例えば、並列処理デバイス61Bのコア62Bで動作するスレッドにより実現できる。
【0064】
圧縮器70の圧縮処理部702は、全体学習が必要かどうか判定を行う(S11)。全体学習が必要かどうかは、例えば、圧縮対象データが、新たなモデルを全体学習することにより高圧縮される効果と、新たに学習したモデルを保存するための記憶容量のオーバヘッドを合わせて、トータルでの圧縮効果を元に判定する。
【0065】
この結果、予測モデル704aや統合モデル704bの全体学習が必要であると判定した場合(S11:Y)には、圧縮処理部702は、全体学習処理を行い(S12)、以降の処理で用いられる予測モデル処理と統合モデル処理において、このモデルを使用する。全体学習処理は、論理アドレス空間上で近い距離にあるデータはデータのシンボルの出現確率の特性が近いという仮説を元に、論理アドレス空間上で近い距離にあるデータを学習に用いて学習し、学習したモデルを保存する処理である。この学習データは、本処理フローの起動時に指定される圧縮対象データの部分データであってもよいし、その他のデータを用いてもよい。例えば、学習データを、ストレージの格納データから所定のルールに基づきランダムサンプルしてもよい。また、学習したモデルはブロックデータ格納情報120のモデル情報120dとして、圧縮したデータと対応付けて保存する。または対応する他のモデル(すでに学習した他のブロックデータに対応するモデル)の参照情報を格納して(つまり、既に学習したモデルを再利用する)、全体学習の処理時間やブロックデータ格納情報のデータ量削減してもよい。学習においては、転移学習やメタ学習などの技法を用いて高速化してもよい。
【0066】
一方、全体学習が必要でないと判定した場合(S11:N)には、圧縮処理部702は、処理をステップS13に進める。この場合は、以降の処理で用いられる予測モデル処理と統合モデル処理において、そのパラメータの初期値を数学的な式により生成できる値(例えばガウス分布に基づく疑似乱数など)を用いて初期化する。
【0067】
次いで、圧縮処理部702は、自身が担当する部分データの圧縮対象のデータ単位(圧縮対象データ単位:最初は、先頭のデータ単位であり、それ以降は、次のデータ単位である)の出現確率の算出に使用するデータに対して必要に応じてワンホットエンコーディングを行い、複数の予測モデル704aに入力して、複数の予測モデルにより複数の出現確率を算出する予測モデル処理を行う(S13)。
【0068】
次いで、圧縮処理部702は、予測モデル処理で算出された複数の予測情報を統合モデル704bに入力して、圧縮対象データ単位の出現確率を算出する統合モデル処理を行う(S14)。
【0069】
次いで、圧縮処理部702は、予測モデル704aおよび統合モデル704bの学習が必要であるか否かを判定する(S15)。例えば、ステップS15の判定を所定の回数行った場合に、学習が必要であると判定してもよい。
【0070】
この結果、統合モデル704bの学習が必要であると判定した場合(S15:Y)には、圧縮処理部702は、予測モデル704aおよび統合モデル704bの学習処理を行い(S16)、その後、処理をステップS15に進める。学習に使用するデータとしては、伸張時を想定したときに、この時点で復号済みとなるデータであり、予め用意されたデータ及び又は履歴のデータを用いてもよい。この学習処理によると、複数の予測モデル704aおよび統合モデル704bで保持する重みが修正されることとなる。
【0071】
一方、この結果、統合モデル704bの学習が必要でないと判定した場合(S15:N)には、圧縮処理部702は、処理をステップS17に進める。
【0072】
ステップS17では、圧縮処理部702は、複数の予測モデルの中の実際に利用する予測モデルをアップデートする必要があるか否かを判定する。例えば、統合モデル704bの学習により、各予測モデルに対する重みが変更されたことにより、予測モデルに対する重みが所定の閾値以下となった場合に、利用する予測モデルをアップデートする必要があると判定してもよい。
【0073】
この結果、利用する予測モデルをアップデートする必要があると判定した場合(S17:Y)には、圧縮処理部702は、各予測モデルのうち、対応する重みが所定値以下の予測モデルについては使用しないと設定する利用予測モデルのアップデート処理(S18)を実行し、処理をステップS19に進める。
【0074】
一方、利用する予測モデルをアップデートする必要がないと判定した場合(S17:N)には、圧縮処理部702は、処理をステップS19に進める。
【0075】
ステップS19では、圧縮処理部702は、ステップS14で出力された出現確率と、圧縮対象データ単位とを用いてエントロピー符号化処理を行うことにより、圧縮対象データ単位をエントロピー符号化されたビット列に変換する。
【0076】
次いで、圧縮処理部702は、部分データの全てのデータ単位が符号化済みであるか否かを判定し(S20)、全てのデータ単位が符号化済みでない場合(S20:N)には、次のデータ単位の処理をするために処理をステップS13に進める。
【0077】
一方、全てのデータ単位が符号化済みである場合(S20:Y)には、処理を終了する。なお、この後、圧縮器70は、各圧縮処理部702で変換された部分データを符号化したビット列をまとめて、圧縮データとして、所定の格納場所に格納する。
【0078】
以上の説明では、データ単位ごとに、予測モデル処理、統合モデル処理、学習処理、エントロピー符号化処理を順番にイテレーション実行する例を示したが、それらは実行の単位とタイミングをそれぞれ変更することができる。例えば、予測モデル処理、統合モデル処理においては、圧縮時には元データがすべて存在することから、例えば
図12に示すように長さ(N)方向でまとめて処理を並列に実行することができる。また、エントロピー符号化処理(S19)において、ANS(Asymmetric Numeral Systems)などの方法を用いる場合、復号時において符号化時と逆順で処理を実行する必要があることから、圧縮時には、予測モデル処理、統合モデル処理において予測した結果の出現確率を、長さ(N)方向で保存しておき、長さ(N)方向での一連の計算が完了したら、その保存しておいた出現確率について、逆順でエントロピー符号化処理を纏めて実行するという処理となる。また、学習処理においては、長さ(N)方向で実行をする(長さ(N)方向のイテレーションの現時点より前のデータにより学習する)方法以外にも、例えば圧縮対象の複数のデータブロックをサンプリングして学習対象のデータとするように構成してもよい。この場合、学習対象のデータが一意に特定でき、かつ伸張前のデータに含まれないように、決定性のある疑似乱数等を用いてサンプリングを実施して圧縮時の学習用のデータおよびスケジュールを決定するように構成してもよい。さらに言うと、長さ(N)方向でのデータ単位の処理順序は、もともとの順序である必要はなく、可逆的なアルゴリズムによって変更された状態で処理してもよい。また、拡散モデルのようにノイズの状態から元のデータを復元するような方法を用い、イテレーションの単位を、拡散モデルの1ステップに相当するように構成してもよい。以上で説明した実行の単位とタイミングをそれぞれ変更する場合においては、いずれの場合においても、伸張時にはそれと同じ実行の単位とタイミングで実施することにより、予測した結果の出現確率を同一の結果とすることで、復号可能な形とする。
【0079】
次に、伸張器71による伸張処理の処理動作について説明する。
【0080】
図9は、第1実施形態に係る伸張器による伸張処理のフローチャートである。なお、
図9に示す伸張処理は、伸張器71の各伸張処理部712により実行される処理であり、例えば、並列処理デバイス61Bのコア62Bで動作するスレッドにより実現できる。
【0081】
伸張器71の伸張処理部712は、モデルロードが必要かどうか判定を行う(S21)。モデルロードが必要かどうかは、例えば、ブロックデータ格納情報120のモデル情報120dとして、圧縮したデータと対応付けてモデル自体のパラメータや参照が保存されている場合は、モデルロードが必要と判定し、そうでない場合は不要と判定する。
【0082】
この結果、予測モデル704aや統合モデル704bのモデルロードが必要であると判定した場合(S21:Y)には、並列処理デバイス61Bのメモリ63Bに、モデル情報120dとして、圧縮したデータと対応したモデル自体のパラメータや参照を元に、モデルを配置する。さらに、並列処理デバイス61Bのメモリ63Bをキャッシュのように用いてもよい。その場合は、S21の判定で、キャッシュとして用いているメモリ63Bに既にモデルがロードされている場合(キャッシュのように、高頻度で用いられるモデルをメモリ63Bに配置しておいてもよい)は、モデルのロードを省略することができるため、モデルロード不要と判定することができ、モデルのロードにかかる時間を効率的に削減できる。
【0083】
一方、モデルロードが必要でないと判定した場合(S21:N)には、伸張処理部712は、処理をステップS23に進める。この場合は、以降の処理で用いられる予測モデル処理と統合モデル処理において、前述の圧縮処理部702の全体モデル学習をしない場合(S11:Nの場合)で用いた方法と同じ方法で、そのパラメータの初期値を数学的な式により生成できる値(例えばガウス分布に基づく疑似乱数など)を用いて初期化する。
【0084】
次いで、伸張処理部712は、自身が担当する部分データの伸張対象のデータ単位(伸張対象データ単位:最初は、先頭のデータ単位であり、それ以降は、次のデータ単位である)の出現確率の算出に使用するデータに対してワンホットエンコーディングを行い、複数の予測モデル714aに入力して、複数の予測モデルにより複数の予測情報を算出する予測モデル処理を行う(S23)。
【0085】
次いで、伸張処理部712は、予測モデル処理で算出された複数の予測情報を統合モデル714bに入力して、伸張対象データ単位の出現確率を算出する統合モデル処理を行う(S24)。
【0086】
次いで、伸張処理部712は、予測モデル714aおよび統合モデル714bの学習が必要であるか否かを判定する(S25)。例えば、ステップS25の判定を所定の回数行った場合に、学習が必要であると判定してもよい。
【0087】
この結果、予測モデル714aおよび統合モデル714bの学習が必要であると判定した場合(S25:Y)には、伸張処理部712は、予測モデル714aおよび統合モデル714bの学習処理を行い(S26)、その後、処理をステップS27に進める。学習処理に使用するデータとしては、この時点で復号済みとなるデータであり、予め用意されたデータ及び又は履歴のデータを用いてもよい。この学習処理によると、予測モデル714aおよび統合モデル714bで保持する重みが修正されることとなる。
【0088】
一方、この結果、予測モデル714aおよび統合モデル714bの学習が必要でないと判定した場合(S25:N)には、伸張処理部712は、処理をステップS27に進める。
【0089】
ステップS27では、伸張処理部712は、複数の予測モデルの中の実際に利用する予測モデルをアップデートする必要があるか否かを判定する。例えば、統合モデル714bの学習により、各予測モデルに対する重みが変更されたことにより、予測モデルに対する重みが所定の閾値以下となった場合に、利用する予測モデルをアップデートする必要があると判定してもよい。
【0090】
この結果、利用する予測モデルをアップデートする必要があると判定した場合(S27:Y)には、伸張処理部712は、各予測モデルのうち、対応する重みが所定値以下の予測モデルについては使用しないと設定する利用予測モデルのアップデート処理(S28)を実行し、処理をステップS29に進める。
【0091】
一方、利用する予測モデルをアップデートする必要がないと判定した場合(S27:N)には、伸張処理部712は、処理をステップS29に進める。
【0092】
ステップS29では、伸張処理部712は、ステップS24で出力された出現確率と、伸張対象データ単位に対応するエントロピー符号化されたビット列とを用いてエントロピー復号処理を行うことにより、エントロピー符号化されたビット列を符号化前のデータ単位に復号する。
【0093】
次いで、伸張処理部712は、部分データの全てのデータ単位が復号済みであるか否かを判定し(S30)、全てのデータ単位が復号済みでない場合(S30:N)には、次のデータ単位の処理をするために処理をステップS23に進める。
【0094】
一方、全てのデータ単位が復号済みである場合(S30:Y)には、伸張処理部712は、処理を終了する。なお、この後、伸張器71は、各伸張処理部712で変換された部分データをまとめて、伸張後のデータとして、所定の格納場所に格納する。
【0095】
以上のようにして、伸張処理部712の複数のデータ単位に対する伸張に必要な各処理を一貫して例えば並列処理デバイス61Bのコア62Bで動作するスレッド上でループ実行することにより、プロセッサ53Bと並列処理デバイス61Bのコア62Bとの命令送信などに必要な通信やスレッド起動に要する処理時間を削減でき、高速処理が可能となる。なお、ステップS23~S30におけるデータ単位の出現確率の算出や学習処理、利用モデルのアップデート処理、その他判定処理などは、圧縮処理におけるデータ単位の出現確率の算出と同じ動きとなっているので、同じデータ単位に対して、同じ出現確率を算出することができ、適切に復号することができる。
【0096】
さらに、
図8と
図9でそれぞれ説明した圧縮処理と伸張処理は、S16、S18、S24、S26の学習や利用予測モデルのアップデート処理を動作させない場合、または各部分データにおいて独立に状態管理されて動作する場合には、ブロックデータ格納情報120の圧縮後サイズ120cに基づき、圧縮や伸張対象のデータの部分データごとに、データ更新のための再圧縮や伸張処理が可能である。これにより、大きなブロック(例:数MB~数GB)としてすでに高圧縮した場合において、ブロック内のすべてのデータを伸張することなく部分的に、部分データの単位で更新・伸張が可能であるため、必要な計算リソースの量を削減できる。
【0097】
次に、計算機101Bにおけるバックアップ処理の処理動作について説明する。
【0098】
図10は、第1実施形態に係るバックアップ処理のフローチャートである。
【0099】
このバックアップ処理は、計算機101Bのプロセッサ53Bが、計算機101Aから、圧縮器72Aにより圧縮されたバックアップ対象のデータブロック群(第1圧縮データ)及び保障コード群を付加した圧縮命令を受信した場合に実行される。プロセッサ53Bは、伸張器73Bにより、バックアップ対象の1つのデータブロック(第1ブロック単位)に対して、伸張処理を実行させる(S101)。なお、圧縮器72Aによる圧縮は、圧縮器70Bによる圧縮よりも低圧縮である。
【0100】
次いで、プロセッサ53Bは、付加されていた保障コードにより、伸張したデータ(伸張データ)をチェックし、誤り検出や訂正等する処理を行う(S102)。
【0101】
次いで、プロセッサ53Bは、次の圧縮処理で圧縮する所定のサイズ(第2サイズ)分のブロック数(対象ブロック数)のブロックについて伸張処理をしたか否かを判定する(S103)。
【0102】
この結果、対象ブロック数のブロックに対して伸張処理を実行していない場合(S103:N)には、プロセッサ53Bは、処理をステップS101に進めて、次のデータブロックに対する処理を実行する。
【0103】
一方、対象ブロック数のブロックに対して伸張処理を実行している場合(S103:Y)には、プロセッサ53Bは、対象ブロック数分のブロック(第2ブロック単位)のデータに対して、圧縮器70Bにより圧縮処理を実行させる(S104)。圧縮器70Bによる圧縮処理は、
図8に示す圧縮処理であり、圧縮器70Bによる圧縮は、圧縮器72による圧縮よりも高圧縮である。なお、対象ブロック数のデータを複数のデータ単位に分割し、例えば、並列処理デバイス61Bのコア62Bで纏めて並列に圧縮処理することにより、圧縮処理のスループットを向上することができる。また、圧縮するデータのサイズ(第2サイズ)を圧縮器72によるデータを圧縮するサイズ(第1サイズ)よりも大きくしているので圧縮効率が良い。
【0104】
次いで、プロセッサ53Bは、対象ブロック数分のブロック(第2ブロック単位)のデータに対して、保障コードを生成し(S105)、圧縮後データ120a、保障コード120b、圧縮後サイズ120c、モデル情報120dをブロックデータ格納情報120として、永続記憶装置54Bに格納し、格納した内容に従って論物変換テーブル110を更新する(S106)。ここで、保障コードを第2サイズのデータに対して生成するようにしているので、保障コードの格納に必要となる記憶領域を低減することができる。また、第1ブロック単位のデータブロックを複数あつめて第2ブロック単位とする際に、第1ブロック単位でもともと物理アドレスが割り当たっていなかった領域に対しては、ゼロ埋めデータを用意してもよいし、第1ブロック単位の論物変換テーブル110相当の復元に必要なデータをブロックデータ格納情報と一緒に保存してもよい。論物変換テーブル110を永続記憶装置54に保存する必要がある場合に、論物変換テーブル110自体も圧縮処理(S104)の対象として同様の方法で圧縮することで、永続記憶装置54の使用容量を節約して効率化してもよい。さらに、保障コード120b、モデル情報120d自体についても、も圧縮処理(S104)の対象として同様の方法で圧縮してもよい。圧縮後サイズ120cについては、圧縮処理(S104)の結果として得られるので、圧縮処理(S104)と同様の処理を再度実施したり、他の一般的な圧縮方法により圧縮したりして、圧縮効率を高めてもよい。
【0105】
次いで、プロセッサ53Bは、圧縮対象の全てのデータブロックについて処理済みか否かを判定する(S107)。この結果、圧縮対象の全てのデータブロックについて処理済みでない場合(S107:N)には、プロセッサ53Bは、処理をステップS101に進め、残りのデータブロックに対する処理を実行する。
【0106】
一方、圧縮対象の全てのデータブロックについて処理済みである場合(S107:Y)には、プロセッサ53Bは、バックアップが終了したことを、要求元の計算機101Aに通知し、処理を終了する。
【0107】
次に、計算機101Bにおけるリストア処理の処理動作について説明する。
【0108】
図11は、第1実施形態に係るリストア処理のフローチャートである。
【0109】
このリストア処理は、計算機101Bのプロセッサ53Bが計算機101Aからリストア対象のデータブロック群を示す情報が付加されたリストア命令を受信した場合に実行される。なお、このデータブロック群のデータブロックは、第1サイズのデータを圧縮したブロックである。
【0110】
まず、プロセッサ53Bは、伸張器71Bにより、リストア命令に対応するリストア対象のデータブロック群が含まれる第2サイズの1つのデータブロックに対して、伸張処理を実行させる(S111)。なお、圧縮時と同様に、対象ブロック数のデータを複数のデータ単位に分割し、例えば、並列処理デバイス61Bのコア62Bで纏めて並列に伸張処理することにより、伸張処理のスループットを向上することができる。
【0111】
次いで、プロセッサ53Bは、付加されていた保障コードにより、伸張したデータをチェックし、誤り検出や訂正等する処理を行う(S112)。
【0112】
次いで、プロセッサ53Bは、圧縮器72Bにより、伸張されたデータにおける第1サイズのブロックデータに対して、圧縮処理を実行させる(S113)。
【0113】
次いで、プロセッサ53Bは、第1サイズのブロックデータに対して、保障コードを生成し(S114)、ブロックデータと保障コードとを永続記憶装置54Bに格納し、格納した内容に従って第1サイズのブロックについての論物変換テーブル110を更新する(S115)。
【0114】
次いで、プロセッサ53Bは、第2サイズのブロックデータに含まれる第1サイズのブロック数(対象ブロック数)のブロックについて圧縮処理をしたか否かを判定する(S116)。
【0115】
この結果、対象ブロック数のブロックに対して圧縮処理を実行していない場合(S116:N)には、プロセッサ53Bは、処理をステップS113に進めて、残りの第1サイズのブロックデータに対する処理を続ける。
【0116】
一方、対象ブロック数のブロックに対して圧縮処理を実行している場合(S116:Y)には、プロセッサ53Bは、リストア対象のデータブロック群が含まれる全てのデータブロックに対して処理済みであるか否かを判定する(S117)。
【0117】
この結果、リストア対象のデータブロック群が含まれる全てのデータブロックに対して処理済みでない場合(S117:N)には、プロセッサ53Bは、処理をステップS111に進め、残りのデータブロックに対する処理を実行する。
【0118】
一方、リストア対象のデータブロック群が含まれる全てのデータブロックに対して処理済みである場合(S117:Y)には、プロセッサ53Bは、第1サイズのブロックデータごと(第1ブロック単位ごと)の圧縮データを集めた圧縮データ群と、対応する保障コードを集めた保障コード群とを、要求元の計算機101Aに送信し、処理を終了する。
【0119】
次に、計算機101Bにおける予測モデル処理の処理動作について説明する。
【0120】
図12は、第1実施形態に係る予測モデル処理を説明する図である。
【0121】
本処理は、予測モデル704aおよび予測モデル714a(圧縮処理部702および伸張処理部712で実行)(単に予測モデルという)の一例である。この予測モデル処理は、予測モデルの処理をニューラルネットワークで構成する場合の一例であり、出現確率の予測対象となるデータ単位(予測対象データ単位)の予測に利用するデータ(予測用データ)を入力することにより、予測対象データ単位に対応する位置の特徴量マップ(統合モデルに入力するデータ)を出力する。本処理は、例えば、並列処理デバイス61Bのコア62Bで動作するバッチ数(B)の次元ごとにスレッドとして並列実行が可能である。
【0122】
ここで入力するデータは、バッチ数(B)×チャネル数(C)×部分データの長さ(N)の配列となる。なお、予測モデルの学習時や圧縮時においては、圧縮対象のデータのすべてを保持しているため、複数の予測対象データ(N方向)を、それぞれの因果関係を整合させたうえで、まとめて並列に処理することができる。
図12の説明は、このまとめて処理する場合の説明である。一方、伸張(復号)時には、復号が済んでいないデータを保持しないため、その場合の動作は、
図13で説明する。
【0123】
この予測モデル処理は、主に、入力するデータのシフト処理(S121)と、ダウンスケールブロック(DB)(S122)と、残差ブロック(RB)(S123)と、アップスケールブロック(UB)(S124)という機能部品(総合的には、以降これらのコンポーネントをScale Causal Blocks(SCB)と呼ぶ)によって構成される。
【0124】
入力するデータのシフト処理(S121)は、入力データを長さ(N)方向の先頭に1個パディングを実施し、後端を1個削除する処理である。この処理により、入力データを長さ(N)方向に1個過去に移すことで、以降の処理を、過去のデータから、次の入力データを予測する処理とする。
【0125】
ダウンスケールブロック(S122)は、入力するデータを畳み込みニューラルネットワークで処理し、データをチャネル次元方向(C方向)で分割した上で、長さ(N)方向を縮小する処理である。具体的には、まず処理中データを長さ(N)方向の先頭に所定のサイズで(例:K-1個)パディングしたうえで(
図12では黒塗りの“0”で示している)、畳み込みニューラルネットワーク(図中のConvolution)を処理する。この例では、長さ(N)方向が一次元であるため、一次元の畳み込みニューラルネットワークを適用する。なお、畳み込みニューラルネットワークのカーネルサイズはKで、ストライド幅は1である。カーネルサイズは、ニューラルネットワークの重みの個数に対するレセプティブフィールドの範囲を広さの観点から、例えばK=2とすることが考えられる。その後、処理中データ(畳み込みニューラルネットワークの出力結果)に、アクティベーション関数(図中のActivation)を適用する。アクティベーション関数は、SELU(Scaled Exponential Linear Unit)やReLU(Rectified Linear Unit)などの関数を用いてもよい。その後、処理中データをチャネル次元方向(C方向)で分割(図中のSplit)する。この分割したデータの一部を、以降のダウンスケールブロック(S122)の処理を介さずに、その後の対応するアップスケールブロック(S124)の直接的な入力として用いる。このようにすることで、ダウンスケールブロック(S122)による長さ(N)方向を縮小する処理による粒度の細かい情報の欠落を防ぎ、より予測モデル処理の精度を向上させることができる。さらに、この分割したデータの一部に、メモリモデル(図中のMem.)の処理を適用してもよい。メモリモデルは、後述する
図16や
図17を例とする処理であり、長さ方向の履歴情報を記憶することにより、確率の予測精度を向上させるための処理である。メモリモデルは、ダウンスケールブロック(S122)の図で示すように、残差ブロックのような形で構成してもよい。その後、処理中データの長さ(N)方向を縮小する処理(図中のDown)を実行する。この縮小する処理は、例えば、
図12で示したように、長さ(N)方向に連続する2個のデータをチャネル(C)方向に置き換えることで、処理してもよい。また、その他の方法として、ストライド幅を広げた畳み込みニューラルネットワークで処理してもよいし、Poolingのような方法を用いてもよい。
図12のS122において、以上の処理の概要を示しているが、図中の数字は、入力されたデータ単位の長さ(N)方向の順番に対応する数字を表しており、またConvolution以降の処理においては、入力されたデータの順番の数字と、その数字に対応した処理結果の因果関係(処理に用いた情報に対応する前記数字における最大値)を表している。以上の処理では、入力されたデータの長さ(N)方向の因果関係が保存されている。つまり、ある対象となるデータ単位より後の情報が処理に用いられることは無いため、予測処理として成り立っていることが分かる。
【0126】
残差ブロック(S123)は、前段の機能部品から出力されたデータを膨張畳み込みニューラルネットワークで処理し、処理したデータと処理前のデータを加算する処理である。具体的には、まず処理中データを長さ(N)方向の先頭に所定のサイズで(例:d*(K-1)個)パディングしたうえで、膨張畳み込みニューラルネットワークを処理する。この例では、長さ(N)方向が一次元であるため、一次元の畳み込みニューラルネットワークを適用する。なお、膨張畳み込みニューラルネットワークのカーネルサイズはK(例えばK=2)で、ストライド幅は1、膨張サイズdはK
x―1である。ここでxは、残差ブロックのレベルであり、
図12のようにr個の残差ブロックを構成する場合、処理の順番に1~rの自然数で指定される。以上のように階層のレベルごとに膨張サイズを大きくすることで、長さ(N)方向のレセプティブフィールドを効率的に広げることができる。その後、ダウンスケールブロック(S122)と同様にアクティベーション関数を適用する。その後、処理したデータと処理前のデータを加算し、残差ブロック(S123)の出力結果とする。また、この加算処理に加えて、アテンション処理(セルフアテンション等)を導入してもよい。なお、以上の処理では、
図12のS123に示す通り、ダウンスケールブロック(S122)と同様に入力されたデータの長さ(N)方向の因果関係が保存されており、予測処理として成り立っていることが分かる。
【0127】
アップスケールブロック(S124)は、前段の機能部品から出力されたデータを長さ(N)方向で拡大し、前段の対応するダウンスケールブロック(S124)で分割されたデータを結合し、畳み込みニューラルネットワークで処理したデータを出力する。具体的には、まず処理中データを長さ(N)方向の先頭に所定のサイズで(例:K-1個)パディングしたうえで、長さ(N)方向に拡大する(図中のUp)。例えば、ダウンスケールブロック(S122)のDownとは逆の処理で、
図12で示したように、チャネル(C)方向で2個に分割し、長さ(N)方向に連続する2個のデータに置き換えることで、処理してもよい。また、その他の方法として、ストライド幅を広げた転置畳み込みニューラルネットワークなどで処理してもよい。また、長さ(N)方向で同じ長さを持つ、対応するダウンスケールブロック(DBx)での分割した処理中データについても、データを長さ(N)方向の先頭に所定のサイズで(例:K-1個)パディングし、前述した長さ(N)方向に拡大した処理中データとチャネル(C)方向に結合したデータを作成する。このデータを、畳み込みニューラルネットワークで処理する。この例では、長さ(N)方向が一次元であるため、一次元の畳み込みニューラルネットワークを適用する。なお、畳み込みニューラルネットワークのカーネルサイズはK(例:K=2)で、ストライド幅は1である。その後、処理中データ(畳み込みニューラルネットワークの出力結果)に、ダウンスケールブロック(S122)と同様に、アクティベーション関数を適用し、結果のデータを得る。なお、以上の処理では、
図12のS124に示す通り、ダウンスケールブロック(S122)と同様に入力されたデータの長さ(N)方向の因果関係が保存されており、予測処理として成り立っていることが分かる。
【0128】
以上で説明した機能部品の構成方法として、例えば
図12のように、まずダウンスケールブロック(S122)を複数個(s個)(DB1~DBs)処理し、その後残差ブロック(S123)を複数個(r個)(RB1~RBr)処理した上で、アップスケールブロック(S124)を複数個(s個)(UB1~UBs)処理してもよい。このように処理することにより、B×C×Nの入力データを、B×C1×N/2、B×C2×N/4と長さ(N)方向で要素数を削減することができ、内部のチャネル数C1~Csを効率的に大きくすることができるため、予測モデルの処理を効率化・高速化することができる。なお、C1~Csは、ダウンスケールブロック(S122)処理時は、長さ(N)方向の削減と併せて大きくし、アップスケールブロック(S124)処理時は、長さ(N)方向の増加と併せて小さくするようにしてもよい。また、ダウンスケールブロック(S122)と残差ブロック(S123)とアップスケールブロック(S124)を組み合わせることにより、K
s+rの長さの広いレセプティブフィールドを持つことができる。つまり、出現確率の予測対象となるデータ単位(予測対象データ単位)の予測に利用するデータ(予測用データ)の量を効率的に増加させることができるため、所定の処理量に対する予測精度を向上させることができる。また、残差ブロック(S123)は、複数のダウンスケールブロック(S124)の間や、複数のアップスケールブロック(S124)の間で処理するようにしてもよい。
【0129】
また、s個のダウンスケールブロック(S122)と、s個のアップスケールブロック(S124)を用いる構成において、それぞれw個のブロック(RBs-w~RBsとUBs-w~UBs)のコンボリューション層を、それぞれ重み共有する(RBs-w~RBsのコンボリューション層は、RBs-wのコンボリューション層のパラメータと同一化し、UBs-w~UBsのコンボリューション層は、UBs-wコンボリューション層のパラメータと同一化する)ことで、予測モデルのパラメータ数を削減してもよい。予測モデルのパラメータ数を削減することは、ブロックデータ格納情報120のモデル情報120dのデータ量を削減することが出来るため、適切なwの設定により、圧縮効率の向上が可能となる。
【0130】
また、ダウンスケールブロック(S122)やアップスケールブロック(S124)の層の深度(s)に応じて、カーネルサイズ(K)を増加させることで、レセプティブフィールドをさらに広範にするようにしてもよい。
【0131】
また、画像データなど多次元のデータ向けに、長さ(N)方向を多次元としてもよい。その場合、対応する次元の畳み込みニューラルネットワークで同様に処理してもよい。
【0132】
次に、計算機101Bにおける予測モデル処理および統合モデル処理のデータフローについて説明する。
【0133】
図13は、第1実施形態に係る予測モデル処理および統合モデル処理のデータフローを説明する図である。
【0134】
本処理1300は、予測モデル704aおよび予測モデル714a(圧縮処理部702および伸張処理部712で実行)(単に予測モデルという)と、統合モデル704bおよび統合モデル714b(圧縮処理部702および伸張処理部712で実行)(単に統合モデルという)の実装方法の一例である。この予測モデル処理および統合モデル処理は、
図12で述べた予測モデルの処理と、統合モデルの処理であり、それらの内部においてどのようにデータが処理されていくか、全体概要を含め説明する。最初に入力するデータは、
図12と同様に、バッチ数(B)×チャネル数(C)×部分データの長さ(N)の配列となるが、この図ではバッチ数(B)の次元を省略して記載しており、横軸が部分データの長さ(N)で、縦に各処理の順序を表し、各処理における縦軸がチャネル数(C)を表す。本処理は、例えば、並列処理デバイス61Bのコア62Bで動作するバッチ数(B)の次元ごとにスレッドとして並列実行が可能である。
【0135】
この例では、教師データにおける前から順に8番目のデータを予測する処理を示している。その場合、8番目のデータ単位が、出現確率の予測対象となるデータ単位(予測対象データ単位)であり、その予測に利用するデータ(予測用データ)が、図中の計算部分1301と参照部分1302に相当する。参照部分1302は、過去に(既に予測したデータ単位において)計算した結果(例えばキャッシュとして保持)も含む。
【0136】
また、この例では、予測モデル処理を、ダウンスケールブロック(S122)が2個(DB1、DB2)と残差ブロック(S123)が1個(RB1)とアップスケールブロック(S124)が2個(UB1、UB2)で構成し、統合モデル処理を、Linear型のニューラルネットワーク(K=1の畳み込みコンボリューションと同様)と、Softmax関数により構成している。予測モデル処理においては、予測対象データ単位に対応する位置の特徴量マップ(統合モデルに入力するデータ)を出力し、統合モデル処理において、最終的に予測対象データ単位の出現確率の予測結果を出力する。
【0137】
なお、図中の数字は、入力されたデータ単位の長さ(N)方向の順番に対応する数字を表しており、また各処理においては、入力されたデータの順番の数字と、その数字に対応した処理結果の因果関係(処理に用いた情報に対応する前記数字における最大値)を表している。統合モデル処理の結果として、入力されたデータの長さ(N)方向の因果関係が保存されている。つまり、ある対象となるデータ単位より後の情報が処理に用いられることは無いため、予測処理として成り立っていることが分かる。
【0138】
予測モデル処理については、
図12で既に説明した方法と同様に処理を進めるが、この例では、図中の計算部分1301について計算を進めるために、参照部分1302のデータを過去(7番目以前)の出現確率の計算時に重複を除いた状態でキャッシュしておき、それを用いることで、効率的に計算部分1301の計算を進めることを示している。このようにして、長さ(N)方向にまとめて計算することが困難な復号時においても、計算の重複を防いだ効率的なイテレーション処理により、高速に処理することができる。
【0139】
統合モデル処理については、この例では、1個の予測モデルを用いる場合の説明となっているが、同様に複数個の予測モデルを用いてもよい。その場合、統合モデルのニューラルネットワークの入力次元が増加する。また、この例では、Softmax関数により1ビットの場合(=21)の出現確率を算出しているが、例えば出力をチャネル方向に1個として、Sigmoid関数などにより0~1の値に変換し、シンボル“1”を出力する確率、として扱うようにしてもよい。その場合は、その確率を1から減算した値がシンボル“0”を出力する確率、となる。
【0140】
また、予測モデル処理および統合モデル処理におけるニューラルネットワークの重みを学習する方法として、以上の説明では、予測モデル処理および統合モデル処理は、微分可能な処理で構成しているため、統合モデルにより最終的に出力されたシンボル毎の出現確率と、教師データ(例えばワンホット形式で表現されたシンボル毎の出現確率に相当する値)とで相対エントロピー(又はNegative Log Likelihoodなど)を算出し、その値を最小化するようにモデルを誤差逆伝搬法などによりエンドツーエンドで学習することで、予測精度を向上するようにしてもよい。この学習のタイミングとしては、
図8や
図9で示したようにデータ単位の予測処理の進捗とともに学習を実施してもよいし、事前にトレーニングされた状態のモデルを用いてもよい。また、全体学習処理(S12)のように、定期的に計算機101Bのメモリ52Bやメモリ63B、永続記憶装置54Bなどに蓄積されたデータをもとに予測モデルおよび統合モデルを学習してもよい。その場合は、学習したモデルを永続記憶装置54Bなどに保存しておき、モデルとそれにより圧縮したデータとの対応関係を、ブロックデータ格納情報120の圧縮後データ120aとともに記録する(モデル情報120d)ことで復元可能とする。また、データの特徴を表す識別情報(コード)を元に、使用するモデルを区別することで、類似のデータに対して専用の学習したモデルを用意し、圧縮効率を高めてもよい。
【0141】
次に、計算機101Bにおける予測モデル処理のアルゴリズムについて説明する。
【0142】
図14は、第1実施形態に係る予測モデル処理のアルゴリズムを説明する図である。
【0143】
図12では、予測モデルを構成するSCBのコンポーネント(ダウンスケールブロック、アップスケールブロック等)について説明した。
図12のモジュールの説明では、ニューラルネットワークとしてコンボリューションカーネルを用いており、一般に長さ(N)方向で並列化(カーネルサイズごとにデータを分割して処理)して学習処理を実施する。この場合、長さ(N)方向に多数のデータをニューラルネットワークに入力するため、バッチ(B)方向の多重度は比較的小さく(例:16個)設定する。これは、圧縮処理における全体学習処理(S12)において、好適な処理方法となる。ただし、予測モデル処理(S13およびS23)などの推論(インフェレンス)処理として動作させる場合には、シンボル単位のイテレーション処理となるため、よりバッチの多重度を高く設定(例:数千以上)するため、
図13で説明したように、各コンポーネントの出力する中間的データのキャッシュを用いることで、長さ(N)方向で部分的に計算処理を進めることで、メモリ使用効率を改善し、バッチ(B)方向の多重度を各段に向上(例:数千以上)させることができる。以降では、
図14にそのインフェレンスの処理を、アルゴリズムの手続きとして具体的に示して説明する。
【0144】
まず、SCBの全体のアルゴリズム1401について、大きく初期化処理(図中のinitialize)と、インフェレンス処理(図中のinference)がある。初期化処理は、圧縮対象データを複数の部分データに分割した処理対象のデータ(B×C×Nの配列)に対して、予測モデル処理(S13およびS23)を実行するにあたり、初回実行時にのみ実行する処理である。また、インフェレンス処理は、処理対象のデータを長さ(N)方向で1個取得したもの(図中のxで表現、B×Cの配列)を入力とし、予測モデル処理(S13およびS23)としてイテレーションごとに毎回実行する処理(N回実行)である。なお、図中の[X、Y]という表記は、X×Yの配列(テンソル)の形状を表し、[]は空のリスト構造を表す。初期化処理においては、SCBの全体のコンポーネント構成(図中のblocksで表現され、DB1、DB2、UB2、UB1などの各コンポーネントを処理順にリスト形式としたもの)における各コンポーネントごと(図中のblock)に初期化処理を実行する。また、インフェレンス処理においても、図のアルゴリズム1401で示した通り、各コンポーネントごとに順番にインフェレンス処理を実行する。
【0145】
次に、ダウンスケールブロックのアルゴリズム1402について説明する。本図では、カーネルサイズK=2の場合についてのアルゴリズムを例として記載している。大きく初期化処理(図中のinitialize)と、インフェレンス処理(図中のinference)がある。初期化処理は、2種類のキャッシュとして用いる変数(x
pとs
p)について、それぞれ初期値を設定する。なお、図中の太字の“0”は、ゼロで初期化した配列を表す。また、インフェレンス処理は、B×C_inの処理対象のデータの配列(x)と後段の各アップスケールブロックに入力するデータの配列のリスト(s)を入力とし、B×C_оutの配列を出力とする(C_inとC_оutの値は、各コンポーネントごとに異なっていてもよい)。インフェレンス処理の基本的な動作は
図14に記載のアルゴリズムの通りであり、既に
図13でも動作の概要を説明しているため、詳細は割愛するが、インフェレンス処理の特徴的な部分のみを以降で説明する。図中のlinear_from_convは、
図12で説明したコンボリューションの処理を全結合層に置き換えた処理である。具体的には、コンボリューションの処理は、K×C_inを入力とし、C_оutを出力とする全結合層と捉えることができるため、コンボリューションカーネルのパラメータを全結合層のパラメータに変換したうえで処理を実行する。これにより、途中の配列の次元変換などの処理を省略し、高速に処理することができる。また、アルゴリズム1402で示したように、メモリモデルの処理(図中のmemory)を実行してもよい。
【0146】
次に、アップスケールブロックのアルゴリズム1403について説明する。本図では、カーネルサイズK=2の場合についてのアルゴリズムを例として記載している。大きく初期化処理(図中のinitialize)と、インフェレンス処理(図中のinference)がある。初期化処理は、2種類のキャッシュとして用いる変数(xp1、xp2とsp)について、それぞれ初期値を設定する。また、インフェレンス処理は、B×C_inの処理対象のデータの配列(x)と各アップスケールブロックに入力するデータの配列のリスト(s)を入力とし、B×C_оutの配列を出力とする。
【0147】
以上のようにして、各コンポーネントの出力する中間的データのキャッシュを用いることで、長さ(N)方向で部分的に計算処理を進める(B×Cの配列単位で処理)とで、メモリ使用効率を改善し、バッチ(B)方向の多重度を各段に向上(例:数千以上)させることができ、高速な処理を可能とする。
【0148】
次に、計算機101Bにおける履歴情報を用いた予測モデル処理の処理動作について説明する。
【0149】
図15は、第1実施形態に係る履歴情報を用いた予測モデル処理を説明する図である。
【0150】
本処理は、予測モデル704aおよび予測モデル714a(圧縮処理部702および伸張処理部712で実行)(単に予測モデルという)の実装方法の一例であり、入力データからコードを生成し、そのコードを用いて履歴情報を生成して、履歴情報を元に、予測確率を生成する。本処理は、例えば、並列処理デバイス61Bのコア62Bで動作するバッチ数(B)の次元ごとにスレッドとして並列実行が可能である。
【0151】
予測モデルに入力するデータは、
図12と同様に、バッチ数(B)×チャネル数(C)×部分データの長さ(N)の配列となるが、この図ではバッチ数(B)の次元を省略して記載しており、横軸が部分データの長さ(N)で、チャネルとして2種類の軸を持ち、縦が部分データのシンボル数(D=2
u)、奥行きがコードの長さ(H)を表す。入力された時点では、コードの長さ(H)という軸は無いため、1とする。
【0152】
なお、予測モデルの学習時や圧縮時においては、圧縮対象のデータのすべてを保持しているため、複数の予測対象データ(N方向)を、それぞれの因果関係を整合させたうえで、まとめて並列に処理することができる(例えば、
図8の全体学習処理(S12)に相当)。
図15の説明は、このまとめて処理する場合の説明である。バッチ方向で並列化するケース(例えば、予測モデル処理(S13、S23)に相当)においても、
図14の説明と同様に、長さ(N)方向で適切に過去の計算データをキャッシュすることにより、高速なイテレーション処理として実装することができる。
【0153】
まず、予測モデル処理において、入力データのシフト処理を実行する(S151)。入力データを長さ(N)方向の先頭に1個パディングを実施し、後端を1個削除する処理である。この処理により、入力データを長さ(N)方向に1個過去に移すことで、以降の処理を、過去のデータから、次の入力データを予測する処理とする。
【0154】
次に、S151の結果の入力データ1501について、長さ(N)方向の先頭にK個パディングを実施し(S152)、その後、畳み込みニューラルネットワーク(図中のConvolution)を処理し(S153)、コードの長さ(H)方向の次元でSoftmax関数を処理することで(S154)、コード1502を得る。この例では、長さ(N)方向が一次元であるため、一次元の畳み込みニューラルネットワークを適用する。なお、畳み込みニューラルネットワークの入力チャネル数はDで、出力チャネル数はHで、カーネルサイズはK(例えばK=256)で、ストライド幅は1である。その結果、コード1502のサイズは、B×1×H×N+1となる。この例では、1個の畳み込みニューラルネットワークにより構成しているが、多層の構成としてもよい。その場合は、多層ネットワークにおけるレセプティブフィールドの大きさを考慮した上で、適切にS152でパディング処理を実施する。
【0155】
次に、入力データ1501(サイズB×D×1×N)とコード1502の要素ごとの積を計算する(S155)。この際に、コード1502の長さ(N)方向の先頭からN個の要素(サイズB×1×H×N)を取得し積の計算に用いる。これは、コード1502の過去値に相当する。また、要素ごとの積の計算にあたっては、要素数が1の次元に関しては、積の演算対象それぞれで数を合わせるために、次元拡張(コピー)を実施する。したがって、S155の結果のサイズは、B×D×H×Nとなる。この結果のテンソルを長さ(N)方向に、累積加算したテンソル(サイズB×D×H×N)を計算する(図中のCumsum)(S156)。この結果を、履歴情報1503とする。この履歴情報1503の意味としては、各コード(次元:H)に対応した各シンボル(次元:D)の出現頻度の時間的進展(次元:N)を表していると考えることができる。
【0156】
次に、履歴情報1503と、コード1502の要素ごとの積を計算する(S157)。この際に、コード1502の長さ(N)方向の先頭から2番目からN個の要素(サイズB×1×H×N)を取得し積の計算に用いる。これは、コード1502の現在値に相当する。また、要素ごとの積の計算にあたっては、要素数が1の次元に関しては、積の演算対象それぞれで数を合わせるために、次元拡張(コピー)を実施する。したがって、S157の結果のサイズは、B×D×H×Nとなる。次に、この結果のテンソルをコードの長さ(H)方向の次元で合計した結果を出力する(サイズはB×D×1×Nとなる)(S158)。その後、次元Dで合計値が1となるように、ノーマライズ処理を実施する(S159)。例えば、次元Dの合計値にゼロとならないように微小な値Eを足した値を計算し、その値で次元Dの各値の要素を除算することで計算する。その結果、サイズがB×D×1×Nのテンソルを予測確率1504として得ることができる。コードの長さ(H)方向の次元は入力データと同じく1であり、無視でき、サイズがB×D×Nの予測確率を表すテンソルとして、統合モデルに入力する。
【0157】
なお、この畳み込みニューラルネットワーク(S153)が乱数で生成された値である場合は、LSHであるとみなすこともできる。したがって、この例で示す方法は、その乱数を初期値として学習するため、学習型のLSHという位置づけとなり、学習によって、LSHより効率的に予測確率を高精度に生成することができる。また、この例では、データ単位毎のコードは、合計が1の要素数がHの離散的なベクトルにより表現されるが、ガウス分布などの連続的な確率密度関数によりコードを表現し、予測確率1504を計算するように構成してもよい。例えばガウス分布でコードを表現する場合は、平均と分散の要素数が2のベクトルにより表現できる。
【0158】
次に、計算機101Bにおける履歴情報を用いたメモリモデル処理の処理動作について説明する。
【0159】
図16は、第1実施形態に係る履歴情報を用いたメモリモデル処理を説明する図である。
【0160】
本処理は、
図12のダウンスケールブロックS122におけるメモリモデルに相当する処理である。
図15で説明した履歴情報を用いた予測モデル処理と重複部分を多く含むので、主に重複しない部分について説明する。
【0161】
本処理では、入力データ1601をパディング(S161)し、コンボリューション処理(S162、コンボリューションの設定例は、K=1、入力チャネル=C、出力チャネル=Cv)を実行した上で、チャネル次元についてソフトマックス関数を実行(S163)することで、値データ1602を得る。以降の処理(S164~S1610)は、基本的に
図15で説明した処理(S152~S159)と同等の処理である。その次の処理として、コンボリューション処理(S1611、コンボリューションの設定例は、K=1、入力チャネル=Cv、出力チャネル=C)を実行し、出力データ1605を得る。
【0162】
以上のようにして、長さ(N)方向の履歴情報を記憶することにより、確率の予測精度を向上させることができる。また、値データのCvとコードのHの次元をそれぞれ所定数に分割して以降の処理を実施してもよい。この分割により、履歴情報のメモリ量や計算量を効率的に削減できる。
【0163】
次に、計算機101Bにおける指数移動平均を用いたメモリモデル処理の処理動作について説明する。
【0164】
図17は、第1実施形態に係る指数移動平均を用いたメモリモデル処理を説明する図である。
【0165】
本処理は、
図12のダウンスケールブロックS122におけるメモリモデルに相当する処理であり、
図16で説明した履歴情報を用いたメモリモデル処理の代わりに実装してもよいし、それら双方を並列または直列で実装してもよい。
【0166】
メモリモデルに入力する入力情報1701は、バッチ数(B)×チャネル数(C)×部分データの長さ(N)の配列となるが、この図ではバッチ数(B)の次元を省略して記載している。
【0167】
なお、予測モデルの学習時や圧縮時においては、圧縮対象のデータのすべてを保持しているため、複数の予測対象データ(N方向)を、それぞれの因果関係を整合させたうえで、まとめて並列に処理することができる(例えば、
図8の全体学習処理(S12)に相当)。
図17の説明は、このまとめて処理する場合の説明である。本処理は、バッチ方向で並列化するケース(例えば、予測モデル処理(S13、S23)に相当)においても、
図14の説明と同様に、長さ(N)方向のイテレーションにおいて、最新の指数移動平均の結果を保持して次の計算に用いることにより、高速な高多重のイテレーション処理として実装することができる。
【0168】
本処理は、入力情報1701に対し、コンボリューション処理(S171、コンボリューションの設定例は、K=1、入力チャネル=C、出力チャネル=Ce)を実行し、中間情報1702を得る。
【0169】
次に、中間情報(M1~N)1702を、チャネル次元Ceごとのパラメータαを用いて、長さ(N)次元方向の指数移動平均を算出し(S172)、指数移動平均情報1703を得る。具体的には、長さ(N)次元方向の各指数移動平均(E1~N)は、次式で与えられる。
Ei=(1-α)× Ei-1+α×Mi
ここで、iは1~Nであり、Eoは例えばゼロで初期化した行列とする。また演算×は、チャネル次元以外を拡張したエレメントワイズの積演算である。また、パラメータαは、予測モデルの学習時の学習対象のパラメータ(微分可能)とすることができ、この効果として、効率的な指数移動平均のパラメータをデータからの学習により決定することができる。
【0170】
次に、指数移動平均情報1703に対し、コンボリューション処理(S173、コンボリューションの設定例は、K=1、入力チャネル=Ce、出力チャネル=C)を実行し、出力情報1704を得る。
【0171】
以上のようにして、メモリモデルの僅かな追加の計算処理により、予測モデルを構成するニューラルネットワーク全体のレセプティブフィールドを階層数やカーネルサイズに依存せず、長さ(N)方向全体に広げることができ、効率的に確率の予測精度を向上させることができる。
【0172】
次に、変形例に係る計算機システムについて説明する。
【0173】
図18は、変形例に係る計算機システムを説明する図である。
【0174】
変形例に係る計算機システム1Aにおいては、入力装置40は、計算機101Aに格納するデータを処理する上位システム41を稼働している。上位システム41は、例えば、ファイルシステム、オブジェクトシステム、データベースシステム、Webアプリケーション等である。上位システム41は、格納対象の複数のブロックデータ(ブロックデータ群)を計算機101Aに送信する。この際、上位システム41は、ブロックデータ群(またはその参照情報)と、命令識別符号(例えば、書き込み、読み込み、破棄など)と、オプショナルな情報としてブロックデータに対する圧縮に関わるヒント情報とを含めた、IFを用いて、計算機101Aへブロックデータ群を送信する。ここで、ヒント情報としては、ブロックデータについてのデータ種別や、ブロックデータにおけるコンテキストの切り替わりを示す情報等がある。
【0175】
計算機101Aのプロセッサ53Aは、入力装置40から受信したブロックデータ群をメモリ52A又は永続記憶装置54Aに格納するとともに、このブロックデータ群に対応するヒント情報140があれば、メモリ52A又は永続記憶装置54Aに格納する。ここで、プロセッサ53Aが上記処理を実行する機能部が受付部に相当する。
【0176】
次に、計算機101Aは、このブロックデータ群に対する圧縮および伸張にかかわる処理を実行するにあたり、ブロックデータ群(またはその参照情報)と、命令識別符号(例えば、圧縮、伸張、部分更新、部分伸長の4種類を識別する符号)と、アドレスに関する情報と、オプショナルな情報としてブロックデータに対する圧縮に関わるヒント情報とを含めた、IFを用いて、計算機102Aへ命令を送信する。
【0177】
計算機101Aは、このブロックデータ群を圧縮する際には、圧縮命令に、圧縮対象のブロックデータ群(またはその参照情報)と、オプショナルでヒント情報とを付加して計算機101Bに送信する。計算機101Bは、並列処理デバイス61Bにより構成される圧縮器70Cがブロックデータ群を圧縮し(ヒント情報が指定された場合、ヒント情報に基づいて圧縮)、圧縮後のブロックデータ群(対応するブロックデータ格納情報120のセット、またはその参照情報)として計算機101Aに送信する。例えば、圧縮器70Cは、圧縮器70Bにおいて、予測モデル704a及び/又は統合モデル704bに対してさらにヒント情報が入力され、ヒント情報に基づいて出現確率を算出する構成となっている。
【0178】
また、計算機101Aは、圧縮されたブロックデータ群を伸張する際には、伸張命令に、圧縮後のブロックデータ群(またはその参照情報)と、オプショナルでヒント情報とを付加して計算機101Bに送信する。計算機101Bは、並列処理デバイス61Bにより構成される伸張器71Cがヒント情報に基づいてブロックデータ群を伸張し(ヒント情報が指定された場合、ヒント情報に基づいて伸張)、伸張したブロックデータ群(またはその参照情報)を計算機101Bに送信する。例えば、伸張器71Cは、伸張器71Bにおいて、予測モデル714a及び/又は統合モデル714bに対してさらにヒント情報が入力され、ヒント情報に基づいて出現確率を算出する構成となっている。
【0179】
また、計算機101Aは、圧縮されたブロックデータ群を部分更新する際には、部分更新命令に、圧縮後のブロックデータ群(またはその参照情報)と、部分更新する領域を表すアドレス情報と、部分更新するデータと、オプショナルでヒント情報とを付加して計算機101Bに送信する。計算機101Bは、並列処理デバイス61Bにより構成される圧縮器70Cが部分更新領域アドレスに対応する部分更新データ(部分データ)のみを圧縮し(ヒント情報が指定された場合、ヒント情報に基づいて圧縮)、部分更新領域アドレスに対応するブロックデータ格納情報120の圧縮後データ120a、保障コード120b、圧縮後サイズ120cを更新し、圧縮後のブロックデータ群(対応するブロックデータ格納情報120のセット、またはその参照情報)として計算機101Aに送信する。また、この部分更新処理においては、圧縮処理における全体学習処理(S12)の実行は不要である。以上のようにして、大きなブロックサイズ(例:数MB~数GB)でのデータ傾向に基づいて全体学習した予測モデルを用いながらも、部分データの単位(例:1KB)での部分更新を可能とすることができ、全体を伸長して再圧縮する必要がないため、部分更新の処理効率を高めることができる。
【0180】
また、計算機101Aは、圧縮されたブロックデータ群を部分伸張する際には、部分伸張命令に、圧縮後のブロックデータ群(またはその参照情報)と、部分伸長する領域を表すアドレス情報と、オプショナルでヒント情報とを付加して計算機101Bに送信する。計算機101Bは、並列処理デバイス61Bにより構成される伸張器71Cが部分伸長する領域を表すアドレス情報に対応する部分データ群を伸張し(ヒント情報が指定された場合、ヒント情報に基づいて伸張)、伸張した部分データ群(またはその参照情報)を計算機101Bに送信する。以上のようにして、必要な部分のみを伸張することで、処理効率を高めることができる。
【0181】
また、計算機101Bは、以上の構成において、メモリ52Bやメモリ63Bや永続記憶装置54Bにブロックデータ格納情報120と論物変換テーブル110を保持するようにしてもよい。その場合は、事前符号化部703において、圧縮対象の部分データのハッシュ値を計算し、そのハッシュ値を比較することで、過去に処理した部分データとの重複を検出し、重複したデータについては、過去に処理した部分データへの参照情報のみを論物テーブル110やブロックデータ格納情報120に保存し、圧縮率を高める場合(重複排除を実施する場合)に、上述のIF(圧縮命令、部分更新命令)においては、圧縮後のデータそのものを出力する代わりに、過去に処理した部分データへの参照情報のみを出力するようにする。
【0182】
また、計算機101Aおよび計算機101Bは、以上の構成において、IFの送信内容や受信内容について、暗号化を施すことで、データを安全に通信、保存することができる。
【0183】
計算機システム1Aによると、計算機101Aは、IFを用いて計算機101Bの計算資源を用いて圧縮伸張処理を実行できるため、計算機101Aでその他実行すべき各種処理(ストレージ制御プログラムなど)を圧縮伸張処理により計算資源を消費することなく、実行することができる。特にクラウドなどの環境下においては、効率的な圧縮を実現するうえで必要となる並列処理デバイス61を持たない低価格な計算機環境を、計算機101Aとして使用することができるため、システム全体としてコストの低減が可能となる。また、ヒント情報を用いてデータ単位の出現確率を算出するようにしているので、より高精度に出現確率を算出することができ、圧縮効率を向上することができる。
【0184】
次に、第2実施形態に係る計算機システムについて説明する。第2実施形態に係る計算機システムは、例えば、動画、静止画、点群等のメディアデータを対象として、非可逆圧縮、伸張を行う計算機システムである。第2実施形態に係る計算機システムは、第1実施形態に係る計算機システム1における圧縮器70(70A,70B)に代えて圧縮器74(74A,74B)(
図16参照)を備え、伸張器71(71A,71B)に代えて伸張器75(75A,75B)(
図17参照)を備えている。
【0185】
次に、圧縮器74(74A,74B)についての構成及び処理について説明する。
【0186】
図19は、第2実施形態に係る計算機システムの圧縮器を説明する図である。
【0187】
圧縮器74(74A,74B)は、圧縮器70(70A,70B)に対して、エンコードフィルタ742をさらに備える。エンコードフィルタ742は、例えば、データ削減部の一例であり、画像データ741に対してデータ量を削減する処理を行ってデータ削減後のデータ(データ削減後圧縮対象データ)を出力する。例えば、エンコードフィルタ742は、CNN(Convolutional Neural Networks)で構成されてもよい。
【0188】
この構成によると、複数の確率算出部704の入力に利用されるデータは、高さのピクセル数(H)×幅のピクセル数(W)×チャネル数(C:画像の場合には、例えば、RGBの3)×バッチ数(B)の配列となる。
【0189】
次に、伸張器75(75A,75B)についての構成及び処理について説明する。
【0190】
図20は、第2実施形態に係る計算機システムの伸張器を説明する図である。
【0191】
伸張器75(75A,75B)は、伸張器71(71A,71B)に対して、伸張されたデータから画像751を生成するデコードフィルタ752をさらに備える。デコードフィルタ752は、データ量を増加させて、元の画像741とほぼ同様な画像751を生成する。デコードフィルタ752は、例えば、CNNで構成されてもよい。
【0192】
この構成によると、複数の伸張処理部712から出力されるデータは、高さのピクセル数(H)×幅のピクセル数(W)×チャネル数(C:画像の場合には、例えば、RGBの3)×バッチ数(B)の配列となる。
【0193】
なお、上記した例では、メディアデータとして静止画を例に挙げていたが、例えば、動画の場合には、複数の確率算出部704の入力に利用されるデータは、静止画の場合のテンソルに、時間の成分を加えた5次元のテンソルとしてもよい。
【0194】
なお、本発明は、上述の実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で、適宜変形して実施することが可能である。
【0195】
例えば、上記実施形態においては、並列処理デバイスをプロセッサ53(53A、53B)と違う例を示していたが、プロセッサ53が複数のコアを有する場合には、プロセッサ53を並列処理デバイスとして利用してもよい。
【0196】
また、上記実施形態において、プロセッサが行っていた処理の一部又は全部を、ハードウェア回路で行うようにしてもよい。また、上記実施形態におけるプログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記録メディア(例えば可搬型の記録メディア)であってもよい。
【符号の説明】
【0197】
1…計算機システム、40…入力装置、53A,53B…プロセッサ、61A,61B…並列処理デバイス、70A,70B,72A,72B…圧縮器、71A,71B,73A,73B…伸張器、80…ユーザ端末、101,101A,101B…計算機