Skip to main content
QUICK REVIEW

[論文レビュー] An Exploration of Approaches to Integrating Neural Reranking Models in Multi-Stage Ranking Architectures

Zhucheng Tu, Matt Crane|arXiv (Cornell University)|Jul 26, 2017
Advanced Database Systems and Queries参考文献 13被引用数 7
ひとこと要約

この論文は、Luceneベースのマルチステージランクイングシステムに畳み込みニューラルネットワーク(CNN)リランカーを統合する3つのアプローチを評価している:PyTorchモデルをApache Thrift経由で公開する方法、トレーニング済みモデルをDeeplearning4Jを用いてJavaにインポートする方法、およびCNNをC++プログラムにコンパイルしてThriftインターフェースを提供する方法。主な発見は、PyTorchモデルをThriftサービスでラッピングすることで、パフォーマンスと統合の簡便さの両立が図られ、複雑なモデルの移植やコンパイルが不要で、最小限のオーバーヘッドで実現できることである。

ABSTRACT

We explore different approaches to integrating a simple convolutional neural network (CNN) with the Lucene search engine in a multi-stage ranking architecture. Our models are trained using the PyTorch deep learning toolkit, which is implemented in C/C++ with a Python frontend. One obvious integration strategy is to expose the neural network directly as a service. For this, we use Apache Thrift, a software framework for building scalable cross-language services. In exploring alternative architectures, we observe that once trained, the feedforward evaluation of neural networks is quite straightforward. Therefore, we can extract the parameters of a trained CNN from PyTorch and import the model into Java, taking advantage of the Java Deeplearning4J library for feedforward evaluation. This has the advantage that the entire end-to-end system can be implemented in Java. As a third approach, we can extract the neural network from PyTorch and "compile" it into a C++ program that exposes a Thrift service. We evaluate these alternatives in terms of performance (latency and throughput) as well as ease of integration. Experiments show that feedforward evaluation of the convolutional neural network is significantly slower in Java, while the performance of the compiled C++ network does not consistently beat the PyTorch implementation.

研究の動機と目的

  • 産業界で広く使われているLuceneベースのアーキテクチャにおいて、深層学習モデルを生産環境の検索システムに統合するという急増するニーズに対処すること。
  • PyTorchでトレーニングされたニューラルネットワークと、JavaベースのLucene検索エンジンとの間で実現可能な、高パフォーマンスな統合戦略を調査すること。
  • サービスベース、Java内での推論、C++へのコンパイルといった代替のデプロイメントアーキテクチャを、遅延、スループット、開発の複雑さの観点から比較すること。
  • Deeplearning4Jを介したJavaへのモデル移植、またはC++へのコンパイルが、直接的なPyTorchサービス公開を上回るパフォーマンスを発揮できるかどうかを評価すること。

提案手法

  • PythonフロントエンドとC/C++バックエンドを備えたディープラーニングツールキットであるPyTorchを用いて、回答選択用のシンプルなCNNをトレーニングする。
  • Apache Thriftを用いて、トレーニング済みCNNをクロス言語サービスとして公開し、Python(PyTorch)とJava(Lucene)間の通信を可能にする。
  • トレーニング済みCNNのパラメータをPyTorchから抽出し、Deeplearning4Jを用いてJavaベースの推論エンジンにインポートすることで、エンドツーエンドのJavaデプロイメントを実現する。
  • トレーニング済みCNNをスタンドアロンのC++プログラムにコンパイルし、Thriftサービスを公開することで、Python依存なしに高パフォーマンスな推論を実現する。
  • デスクトップおよびラップトップマシン上で、Thriftサービスラッパーの有無を含め、遅延およびスループットのメトリクスを用いて、3つのアプローチを評価する。
  • 単一スレッドのThriftサーバー(TSimpleServer)とPythonクライントを用いて、シリアル化のオーバーヘッドを含めたエンドツーエンドのパフォーマンスを測定する。

実験結果

リサーチクエスチョン

  • RQ1Luceneパイプラインにおけるニューラルリランカーのパフォーマンス(遅延およびスループット)を最適化するには、どの統合アプローチ—PyTorchサービス、Deeplearning4JベースのJava推論、またはC++コンパイル—が最良か?
  • RQ2Deeplearning4JのJava実装は、ネイティブPyTorchおよびC++コンパイルされた推論と比較して、順方向評価においてどのように異なるか?
  • RQ3Apache Thriftを用いてニューラルモデルをサービスとして公開することで生じるパフォーマンスオーバーヘッドはどの程度か? また、異なるバックエンド間でこのオーバーヘッドはどのように変動するか?
  • RQ4C++にコンパイルされたCNNバージョンは、PyTorch実装を一貫して上回るパフォーマンスを発揮できるか? それとも、PyTorchのPythonフロントエンドがCバックエンドを介して最小限のオーバーヘッドで実現しているため、性能差はほとんどないのか?

主な発見

  • PyTorchモデルをThriftサービスでラッピングしたアプローチは、デスクトップマシンで最高のスループット(1226.49 QPS)を達成し、Deeplearning4JおよびC++コンパイル版を上回った。
  • Deeplearning4JのJava実装はPyTorchに比べて著しく遅く、デスクトップマシンで530.4 QPSにとどまり、デフォルト設定下では推論に向けた最適化が不十分であることを示している。
  • C++にコンパイルしたモデルはPyTorchと同等のパフォーマンス(デスクトップで1235.50 QPS)を示したが、一貫した優位性は示さず、PyTorchのPythonフロントエンドによるオーバーヘッドが最小限であることを示唆している。
  • PyTorchをラッピングする際のThriftサービス統合によるオーバーヘッドは約6–7%であり、C++バージョンをラッピングする際は10–24%のオーバーヘッドが生じた。PythonのThriftクライントはC++のものよりも効率的であることが判明した。
  • PyTorchとDeeplearning4Jのパフォーマンス差は、Deeplearning4Jが推論ワークロードに対して他のディープラーニングツールキットほど成熟・最適化されていない可能性を示唆している。
  • 結果から、直接的なPyTorchサービス公開(Thrift経由)が、現在のところシンプルさ、パフォーマンス、言語間相互運用性のバランスを最も良く満たしている最適な選択肢であると結論づけられる。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。