(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-05
(45)【発行日】2024-11-13
(54)【発明の名称】深層学習推論システムおよび推論サービング方法
(51)【国際特許分類】
G06N 3/063 20230101AFI20241106BHJP
【FI】
G06N3/063
(21)【出願番号】P 2023555945
(86)(22)【出願日】2021-10-27
(86)【国際出願番号】 JP2021039619
(87)【国際公開番号】W WO2023073824
(87)【国際公開日】2023-05-04
【審査請求日】2024-02-29
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100098394
【氏名又は名称】山川 茂樹
(74)【代理人】
【識別番号】100153006
【氏名又は名称】小池 勇三
(74)【代理人】
【識別番号】100064621
【氏名又は名称】山川 政樹
(74)【代理人】
【識別番号】100121669
【氏名又は名称】本山 泰
(72)【発明者】
【氏名】田仲 顕至
(72)【発明者】
【氏名】有川 勇輝
(72)【発明者】
【氏名】伊藤 猛
(72)【発明者】
【氏名】三浦 直樹
(72)【発明者】
【氏名】坂本 健
【審査官】福西 章人
(56)【参考文献】
【文献】米国特許出願公開第2020/0302291(US,A1)
【文献】ZHAO, Ruizhe et al.,Hardware Compilation of Deep Neural Networks: An Overview,2018 IEEE 29th International Conference on Application-specific Systems, Architectures and Processor,IEEE,2018年07月,pp.1-8
(58)【調査した分野】(Int.Cl.,DB名)
G06N 3/00-99/00
G06F 18/00-18/40
(57)【特許請求の範囲】
【請求項1】
クライアントからのリクエストに応じてニューラルネットワークの少なくとも一部の演算をALUとGEMM回路で行うように構成されたFPGAアクセラレータと、
前記ニューラルネットワークの演算のオペレーションコードと処理対象のデータとを前記FPGAアクセラレータに転送するように構成されたローダと、
前記クライアントから受信した前記処理対象のデータを前記ローダに渡し、前記リクエストに従って実行すべき前記オペレーションコードを前記ローダに対して指定し、前記ニューラルネットワークの演算の結果得られた処理済みのデータを前記クライアントに返信するように構成されたアプリケーション機能部とを備え、
前記アプリケーション機能部は、前記ローダが前記FPGAアクセラレータに転送するオペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを決定し、前記決定した並列度のALUと前記決定したサイズのGEMM回路とが配置されるように前記FPGAアクセラレータの構成を変更することを特徴とする深層学習推論システム。
【請求項2】
請求項1記載の深層学習推論システムにおいて、
前記アプリケーション機能部は、前記ローダが前記FPGAアクセラレータに転送するオペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを推定した結果と、前記FPGAアクセラレータで実装可能な計算素子数とに基づいて、前記ALUの並列度と前記GEMM回路のサイズとを決定することを特徴とする深層学習推論システム。
【請求項3】
請求項1または2記載の深層学習推論システムにおいて、
前記アプリケーション機能部は、パーシャルリコンフィギュレーション機能により前記FPGAアクセラレータの構成を変更することを特徴とする深層学習推論システム。
【請求項4】
クライアントから推論のリクエストと処理対象のデータとを受信する第1のステップと、
前記クライアントから受信した前記処理対象のデータをローダに渡し、前記リクエストに従って実行すべきニューラルネットワークの演算のオペレーションコードを前記ローダに対して指定する第2のステップと、
前記ニューラルネットワークの少なくとも一部の演算をALUとGEMM回路で行うFPGAアクセラレータに転送される前記オペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを決定する第3のステップと、
前記決定した並列度のALUと前記決定したサイズのGEMM回路とが配置されるように前記FPGAアクセラレータの構成を変更する第4のステップと、
前記オペレーションコードと前記処理対象のデータとを前記ローダから前記FPGAアクセラレータに転送する第5のステップと、
前記ニューラルネットワークの演算の結果得られた処理済みのデータを前記クライアントに返信する第6のステップとを含むことを特徴とする推論サービング方法。
【請求項5】
請求項4記載の推論サービング方法において、
前記第3のステップは、前記FPGAアクセラレータに転送されるオペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを推定した結果と、前記FPGAアクセラレータで実装可能な計算素子数とに基づいて、前記ALUの並列度と前記GEMM回路のサイズとを決定するステップを含むことを特徴とする推論サービング方法。
【請求項6】
請求項4または5記載の推論サービング方法において、
前記第4のステップは、パーシャルリコンフィギュレーション機能により前記FPGAアクセラレータの構成を変更するステップを含むことを特徴とする推論サービング方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、多層ニューラルネットワークを用いて推論サービングを行う深層学習推論システムおよび推論サービング方法に関するものである。
【背景技術】
【0002】
近年では、多層ニューラルネットワークを用いて情報処理を行い、その結果を活用するサービスが数多く存在する。演算器に、ニューラルネットワーク演算のオペレーションと、ニューラルネットワークのパラメータと、処理対象データとを与えて処理済みデータを得ることを、推論と呼ぶ。推論には、多数の演算とメモリとが必要になる。このため、サーバで推論が行われることがある。
【0003】
クライアントは、サーバに対してリクエストと処理対象データを送信し、処理の結果をレスポンスとして受け取る。このようなサービスの提供が推論サービングである。推論サービングには、さまざまな方法が提案されている(非特許文献1参照)。
【0004】
ここでは、演算器としてFPGA(field-programmable gate array)アクセラレータを用いた場合を記す。
図4はサーバの構成を示すブロック図である。CPU(Central Processing Unit)100は、サービングの制御を行う。NIC(Network Interface Card)101は、クライアントからのリクエストをネットワークを介して受信し、ニューラルネットワークによる推論結果をネットワークを介してクライアントに返信する。
【0005】
メモリ102には、全てのニューラルネットワーク演算のオペレーションコード(機械語命令)と、ニューラルネットワークのパラメータと、処理対象のデータとが格納されている。FPGAアクセラレータ103は、PCIe(PCI Express)回路と、DRAM(Dynamic Random Access Memory)と、FPGA回路領域とからなる。CPU100とNIC101とメモリ102とFPGAアクセラレータ103とは、PCIeバス104によって接続されている。
【0006】
推論サービングの演算器としてFPGAアクセラレータ103を用いる場合、FPGAアクセラレータ103上にノイマン型計算機を構築する方法が一般的である(非特許文献2参照)。FPGAアクセラレータ103上に構築されたノイマン型計算機の構成を一般化して
図5に示す。
【0007】
ニューラルネットワークの演算のオペレーションコード200と、ニューラルネットワークのパラメータ201と、処理対象のデータとは、PCIeバス経由でFPGAアクセラレータ103に入力され、DRAM105に格納される。
図5の例では、処理対象のデータと演算途中のデータとを入力データ202としている。
【0008】
インストラクションフェッチモジュール(Instruction Fetch Module)106は、DRAM105からオペレーションコード200を読み出して、ロードモジュール(Load Module)107とコンピュートモジュール(Compute Module)108とストアモジュール(Store Module)109とに転送する。
【0009】
ロードモジュール107は、DRAM105から入力データ202を読み出し、複数の入力データ202をバッチ化して、コンピュートモジュール108に転送する。
コンピュートモジュール108は、インストラクションフェッチモジュール106から転送されたオペレーションコード200に従って、入力データ202とパラメータ201とを用いてニューラルネットワークの演算を行う。コンピュートモジュール108には、ALU(Arithmetic Logic Unit)1080と、GEMM(General matrix multiply)回路1081とが搭載されている。コンピュートモジュール108は、オペレーションコード200に従って演算を行った後に、演算結果をストアモジュール109に転送する。
【0010】
ストアモジュール109は、コンピュートモジュール108による演算結果をDRAM105に格納する。このとき、処理済みのデータだけが出力データ203としてDRAM105に格納されるだけでなく、演算途中のデータが出力データ203として一時的に格納されることもある。演算途中のデータは、ロードモジュール107への入力データ202となる。
【0011】
サーバによる推論サービングの動作を
図6に示す。サーバのCPU100は、推論サービングのプログラムに従って、アプリケーション機能部1000とローダ1001として動作する。
【0012】
アプリケーション機能部1000は、起動時に、FPGAアクセラレータ103に前述のノイマン型計算機を構築する(
図6ステップS100)。
NIC101は、ネットワークを介してクライアントから受信した推論リクエストと処理対象のデータとをアプリケーション機能部1000に転送する(
図6ステップS101)。推論リクエストは、どのモデルで推論するかを指定する。
【0013】
アプリケーション機能部1000は、処理対象のデータをローダ1001に渡し、推論リクエストに従って実行すべきオペレーションコードを指定する(
図6ステップS102)。
ローダ1001は、指定されたオペレーションコードとニューラルネットワークのパラメータとをメモリ102から読み出す(
図6ステップS103,S104)。
【0014】
ローダ1001は、オペレーションコードとパラメータと処理対象のデータとをFPGAアクセラレータ103に渡す(
図6ステップS105)。
FPGAアクセラレータ103は、ローダ1001から転送されたオペレーションコードに従って、処理対象のデータに対してニューラルネットワークの演算を行い、演算の結果得られた処理済みのデータをFPGAアクセラレータ103内部のDRAM105に格納する(
図6ステップS106)。
【0015】
ローダ1001は、FPGAアクセラレータ103内部のDRAM105から処理済みのデータを読み出す(
図6ステップS107)。
アプリケーション機能部1000は、ローダ1001から処理済みのデータを受け取り、このデータを推論リクエストに対するレスポンスとしてクライアントに返信する(
図6ステップS108)。
【0016】
ニューラルネットワークのオペレーションコードは、並列実行が可能であり、ALU1080とGEMM回路1081によって実行される。
オペレーションコードに適した並列度のALU1080とオペレーションコードに適したサイズのGEMM回路1081を用いると最も電力効率が向上する。
【0017】
しかしながら、従来のシステムでは、ニューラルネットワークに対して大き過ぎる演算器を用いたり、小さ過ぎる演算器を用いたりすることがある。ニューラルネットワークに対して大き過ぎる演算器を用いた場合には、使用されない演算器が存在するため、電力効率が落ちるという課題があった。また、ニューラルネットワークに対して小さ過ぎる演算器を用いた場合には、処理時間が延びるため、トータルの使用電力量が増大して電力効率が落ちるという課題があった。
【先行技術文献】
【非特許文献】
【0018】
【文献】Christopher Olston,et al.,“Tensorflow-serving:Flexible,high-performance ml serving”,米国コーネル大学ライブラリー,arXiv preprint arXiv:1712.06139,2017
【文献】Thierry Moreau,Tianqi Chen,Luis Ceze,“Leveraging the vta-tvm hardware-software stack for fpga acceleration of 8-bit resnet-18 inference”,Proceedings of the 1st on Reproducible Quality-Efficient Systems Tournament on Co-designing Pareto-efficient Deep Learning,2018
【発明の概要】
【発明が解決しようとする課題】
【0019】
本発明は、上記課題を解決するためになされたもので、最適な電力効率で推論サービングを実行することができる深層学習推論システムおよび推論サービング方法を提供することを目的とする。
【課題を解決するための手段】
【0020】
本発明の深層学習推論システムは、クライアントからのリクエストに応じてニューラルネットワークの少なくとも一部の演算をALUとGEMM回路で行うように構成されたFPGAアクセラレータと、前記ニューラルネットワークの演算のオペレーションコードと処理対象のデータとを前記FPGAアクセラレータに転送するように構成されたローダと、前記クライアントから受信した前記処理対象のデータを前記ローダに渡し、前記リクエストに従って実行すべき前記オペレーションコードを前記ローダに対して指定し、前記ニューラルネットワークの演算の結果得られた処理済みのデータを前記クライアントに返信するように構成されたアプリケーション機能部とを備え、前記アプリケーション機能部は、前記ローダが前記FPGAアクセラレータに転送するオペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを決定し、前記決定した並列度のALUと前記決定したサイズのGEMM回路とが配置されるように前記FPGAアクセラレータの構成を変更することを特徴とするものである。
【0021】
また、本発明の深層学習推論システムの1構成例において、前記アプリケーション機能部は、前記ローダが前記FPGAアクセラレータに転送するオペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを推定した結果と、前記FPGAアクセラレータで実装可能な計算素子数とに基づいて、前記ALUの並列度と前記GEMM回路のサイズとを決定することを特徴とするものである。
また、本発明の深層学習推論システムの1構成例において、前記アプリケーション機能部は、パーシャルリコンフィギュレーション機能により前記FPGAアクセラレータの構成を変更することを特徴とするものである。
【0022】
また、本発明の推論サービング方法は、クライアントから推論のリクエストと処理対象のデータとを受信する第1のステップと、前記クライアントから受信した前記処理対象のデータをローダに渡し、前記リクエストに従って実行すべきニューラルネットワークの演算のオペレーションコードを前記ローダに対して指定する第2のステップと、前記ニューラルネットワークの少なくとも一部の演算をALUとGEMM回路で行うFPGAアクセラレータに転送される前記オペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを決定する第3のステップと、前記決定した並列度のALUと前記決定したサイズのGEMM回路とが配置されるように前記FPGAアクセラレータの構成を変更する第4のステップと、前記オペレーションコードと前記処理対象のデータとを前記ローダから前記FPGAアクセラレータに転送する第5のステップと、前記ニューラルネットワークの演算の結果得られた処理済みのデータを前記クライアントに返信する第6のステップとを含むことを特徴とするものである。
【0023】
また、本発明の推論サービング方法の1構成例において、前記第3のステップは、前記FPGAアクセラレータに転送されるオペレーションコードに基づいて、前記クライアントからのリクエストが要求する推論に対応する前記ALUの並列度と前記GEMM回路のサイズとを推定した結果と、前記FPGAアクセラレータで実装可能な計算素子数とに基づいて、前記ALUの並列度と前記GEMM回路のサイズとを決定するステップを含むことを特徴とするものである。
また、本発明の推論サービング方法の1構成例において、前記第4のステップは、パーシャルリコンフィギュレーション機能により前記FPGAアクセラレータの構成を変更するステップを含むことを特徴とするものである。
【発明の効果】
【0024】
本発明によれば、クライアントからのリクエストに対して最適なALUとGEMM回路をFPGAアクセラレータに割り当てることができ、最適な電力効率で推論サービングを実行することができる。
【図面の簡単な説明】
【0025】
【
図1】
図1は、本発明の実施例に係る深層学習推論システムのサーバの構成を示すブロック図である。
【
図2】
図2は、本発明の実施例に係るFPGAアクセラレータ上に構築されたノイマン型計算機の構成を示すブロック図である。
【
図3】
図3は、本発明の実施例に係るサーバによる推論サービングの動作を説明するシーケンス図である。
【
図4】
図4は、サーバの構成を示すブロック図である。
【
図5】
図5は、FPGAアクセラレータ上に構築されたノイマン型計算機の構成を示すブロック図である。
【
図6】
図6は、サーバによる推論サービングの動作を説明するシーケンス図である。
【発明を実施するための形態】
【0026】
[発明の原理]
本発明は、クライアントからのリクエストを受信した後に、ノイマン型計算機を調整することで、リクエストに最適なALUとGEMM回路によって推論サービングを実行する。
【0027】
[実施例]
以下、本発明の実施例について図面を参照して説明する。
図1は、本発明の実施例に係る深層学習推論システムのサーバの構成を示すブロック図である。サーバは、CPU100aと、NIC101と、メモリ102と、FPGAアクセラレータ103とを備えている。FPGAアクセラレータ103は、多層ニューラルネットワークの少なくとも一部の演算をALUとGEMM回路で行う。
【0028】
メモリ102には、本実施例の推論サービング方法を実現するためのプログラムが格納されている。CPU100aは、メモリ102に格納されたプログラムに従って処理を実行し、アプリケーション機能部1000aとローダ1001として機能する。
【0029】
図2は、本実施例のFPGAアクセラレータ103上に構築されたノイマン型計算機の構成を示すブロック図である。本実施例では、ALU1080とGEMM回路1081とをFPGAアクセラレータ103の部分再構成可能領域(Partial Reconfiguration Region)1082に配置する。
【0030】
本実施例のサーバによる推論サービングの動作を
図3に示す。アプリケーション機能部1000aは、起動時に、FPGAアクセラレータ103にノイマン型計算機を構築する(
図3ステップS200)。
【0031】
NIC101は、ネットワークを介してクライアントから受信した推論リクエストと処理対象のデータとをアプリケーション機能部1000aに転送する(
図3ステップS201)。推論リクエストは、どのモデルで推論するかを指定する。
【0032】
アプリケーション機能部1000aは、処理対象のデータをローダ1001に渡し、推論リクエストに従って実行すべきオペレーションコードと推論に必要なニューラルネットワークのパラメータとを、ローダ1001に対して指定する(
図3ステップS202)。
ローダ1001は、指定されたオペレーションコードとニューラルネットワークのパラメータとをメモリ102から読み出す(
図3ステップS203,S204)。
【0033】
次に、アプリケーション機能部1000aは、ローダ1001が読み出したオペレーションコードに基づいて、クライアントからの推論リクエストが要求する推論に対応するALU1080の並列度(ALU1080の数)とGEMM回路1081のサイズとを決定する(
図3ステップS205)。
【0034】
ニューラルネットワークでは、例えば画像などの処理対象のデータとニューラルネットワークの重みなどのパラメータは、文献「Thierry Moreau1,et al.,“A Hardware-Software Blueprint for Flexible Deep Learning Specialization”,米国コーネル大学ライブラリー,arXiv:1807.04188v3,2019」に開示されているようにテンソルで表現される。
ALU1080は、加算などの要素ごとのテンソル演算を実行する。GEMM回路1081は、例えば入力とパラメータの行列積の演算を実行する。
【0035】
GEMM回路1081用のオペレーションコードによってGEMM回路1081に入力するテンソルが指示される。テンソルのサイズは、GEMM回路1081の前段に設けられるバッファ(不図示)にテンソルが格納されている段階で既知である。したがって、アプリケーション機能部1000aは、GEMM回路1081用の複数のオペレーションコードから、どのようなサイズのテンソル同士の行列積演算が実行されるかという情報を読み取ることができ、この情報に基づいて推論に最適なGEMM回路1081のサイズを推定することが可能である。
【0036】
ここで、最適なGEMM回路1081のサイズについて説明する。行列積演算は、並列演算することが可能である。本発明で言うGEMM回路1081のサイズとは、並列演算数のことである。2×2行列の行列積の例を考えると、この例では8回の積が実行されるが、それぞれの積を並列に演算することができる。すなわち、最適な並列演算数は8である。
【0037】
ただし、FPGAアクセラレータ103内の計算素子数が限られているため、常に並列演算数8のGEMM回路1081を用意できるとは限らない。最適な並列演算数のGEMM回路1081を用意できない場合、最適な並列演算数の約数の並列演算を実行できるGEMM回路1081を実装するのが効率が良い。
【0038】
最適な並列演算数8に対して、例えば4並列演算が実行可能なGEMM回路1081を実装した場合、2×2の行列積演算は2サイクルで実行できる。一方、6並列演算が実行可能なGEMM回路1081を実装した場合、2×2の行列積演算は2サイクルで実行されるが、4並列演算が実行可能なGEMM回路1081に比べて多くの計算素子が動作するため、最適ではないと言える。つまり、アプリケーション機能部1000aは、GEMM回路1081に入力されるテンソルから、実行される行列積演算の最適な並列演算数を推定し、最適な並列演算数とFPGAアクセラレータ103で実装可能な計算素子数とに基づいて、GEMM回路1081のサイズを決定すればよい。
【0039】
同様に、アプリケーション機能部1000aは、最適なALU1080の並列度(ALU1080の数)を推定すればよい。具体的には、アプリケーション機能部1000aは、ALU1080用の複数のオペレーションコードから、どのような並列度のテンソル演算が実行されるかという情報を読み取り、この情報に基づいて推論に最適なALU1080の並列度を推定し、最適な並列度とFPGAアクセラレータ103で実装可能な計算素子数とに基づいて、ALU1080の数を決定すればよい。
【0040】
アプリケーション機能部1000aは、ステップS205で決定した並列度のALU1080とステップS205で決定したサイズのGEMM回路1081とがFPGAアクセラレータ103内に配置されるように、パーシャルリコンフィギュレーション機能によりFPGAアクセラレータ103の構成を変更する(
図3ステップS206)。アプリケーション機能部1000aは、パーシャルリコンフィギュレーションのためのビットストリームデータをFPGAアクセラレータ103に送ることにより、FPGAアクセラレータ103の部分再構成可能領域1082を書き換えることができる。周知のとおり、パーシャルリコンフィギュレーション機能により、FPGAアクセラレータ103を動作させつつ書き換えることが可能である。
【0041】
ローダ1001は、メモリ102から読み出したオペレーションコードとパラメータと、アプリケーション機能部1000aから受け取った処理対象のデータとをFPGAアクセラレータ103に渡す(
図3ステップS207)。なお、このステップS207の処理は、ステップS206のパーシャルリコンフィギュレーションと並行して実行される。
【0042】
FPGAアクセラレータ103は、ローダ1001から転送されたオペレーションコードに従って、処理対象のデータに対してニューラルネットワークの演算を行い、演算の結果得られた処理済みのデータをFPGAアクセラレータ103内部のDRAM105に格納する(
図3ステップS208)。
【0043】
ローダ1001は、FPGAアクセラレータ103内部のDRAM105から処理済みのデータを読み出す(
図3ステップS209)。
アプリケーション機能部1000aは、ローダ1001から処理済みのデータを受け取り、このデータを推論リクエストに対するレスポンスとしてクライアントに返信する(
図3ステップS210)。
【0044】
以上のように、本実施例では、クライアントからの推論リクエストに対して最適なALUとGEMM回路を割り当てることができ、最適な電力効率で推論サービングを実行することができる。本実施例では、ALUとGEMM回路のみをパーシャルリコンフィギュレーションすることで、オーバヘッドはほぼ発生しない。
【産業上の利用可能性】
【0045】
本発明は、ニューラルネットワークを利用したサービスを提供する技術に適用することができる。
【符号の説明】
【0046】
100a…CPU、101…NIC、102…メモリ、103…FPGAアクセラレータ、104…PCIeバス、105…DRAM、106…インストラクションフェッチモジュール、107…ロードモジュール、108…コンピュートモジュール、109…ストアモジュール、1000a…アプリケーション機能部、1001…ローダ、1080…ALU、1081…GEMM回路、1082…部分再構成可能領域。