Allow for concurrent quantization in FullyConnectedDNNLowPOp (#16174)
authorKjell Schubert <kschubert@fb.com>
Sat, 19 Jan 2019 13:57:37 +0000 (05:57 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Sat, 19 Jan 2019 14:00:22 +0000 (06:00 -0800)
commita28c0ff7b84cdc7d3b9d022ac952f61ccf39e454
tree38e974e79d79fac1071acaa7c059c30e3aa262c4
parentdaedec235009dd05cdd5cb0281deb4ad6ca719c7
Allow for concurrent quantization in FullyConnectedDNNLowPOp (#16174)

Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/16174

Our service creates a new caffe2 workspace for the same underlying network on multiple threads concurrently at service startup time (later these workspaces are being reused for sequential requests), resulting in concurrent quantization via FullyConnectedDNNLowPOp calling GetOrCreateFbgemmPackBMatrix(). The lazily performed quantizations during the first inference in each workspace are all funnelled through GetOrCreateFbgemmPackBMatrix()'s cache_mutex, which means quantization is serialized, so at service startup time only a single CPU core is being used for around a minute until the serial quantization is done.
An better solution would be to avoid the quantization of the same weight matrix of the operator copies in different net copies to begin with, but this here is the simpler solution for our current problem.

Reviewed By: jspark1105

Differential Revision: D13708785

fbshipit-source-id: 537519896b3b939c552d67f400bafc8a69ce11eb
caffe2/quantization/server/fbgemm_pack_matrix_cache.cc