Skip to main content

torch implement of WAGEUBN

Project description

wageubn

wageubn's pytorch implementation.

Notice

This repo is based on the same framework as tqt and focuses on inferrence only. Even the quantized error and gradient could be got from wageubn.function.errorquant and wageubn.function.gradquant, we will not use them. If they are essential for your training, please fork this repo and wrap the wageubn.function modules with it.

Now available at https://pypi.org/project/wageubn/0.1.0/.

Networks quantized via this package could be find at https://github.com/PannenetsF/QuantizationPool.

wageubn's modules

wageubn.function

function is a re-impletement of torch.nn.modules. Besides all the args used in the original function, a quantized function get 2 kind of optional arguments: bit_width and retrain.

bit_width has 2 type: weight/bias or activation.

If the retrain is True, the Module will be in Retrain Mode, with the log2_t trainable. Else, in Static Mode, the log2_t are determined by initialization and not trainable.

wageubn.config

Config the bitwidth via wageubn.config.Config and wageubn.config.network_config. wageubn.config.Config is a namedtuple and you can set bitwidth as its key.

With more consideration of hardware implement, the input and output of any module should be FIXED(or quantized). So there is a iostrict attribute to do this.

wageubn's problem

iostrict is one part as stated in last section. The paper uses directquant almost everywhere, which turns to a new problem: the given k is not the bitwidth of data. It's just the width of the decimal. As a result, I decide to add more attribute to control the module's real bitwidth real_* for each part.

Supplement

Where is the hardware-precision error, update and gradient?

In the PyTorch framework, it's not easy to do the real quantization now. We cannot get gradient for int-like data type, for example. And there are more essential problems like overflow (no matter how careful you are to make the quantization via float) or truncation error, unless the network could rewrite all operations in CUDA or C++. But it requires much more effort than I can afford now.

How to get the data width of a tensor?

In fact, wageubn does the simplest work: get the data, train and eval based on the given bit width. But how to get the bit width is not mentioned. So we can say, under a given bit width (like 8), we need manually find the fixed point's place for each operations or even each layer. Then I will turn to TQT to do more work.

Contributing

It will be great of you to make this project better! There is some ways to contribute!

  1. To start with, issues and feature request could let maintainers know what's wrong or anything essential to be added.
  2. If you use the package in you work/repo, just cite the repo and add a dependency note!
  3. You can add some function in torch.nn like HardTanh and feel free to open a pull request! The code style is simple as here.

Acknowledgment

The original papar could be find at Arxiv, Training high-performance and large-scale deep neural networks with full 8-bit integers.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wageubn-1.2.0.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wageubn-1.2.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file wageubn-1.2.0.tar.gz.

File metadata

  • Download URL: wageubn-1.2.0.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1.post20200622 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.7

File hashes

Hashes for wageubn-1.2.0.tar.gz
Algorithm Hash digest
SHA256 9667cb84e4eb11722437f3d680fbd0ab401cd1eb548134af7636cd91931a258b
MD5 564ee03a6ee12bb170f9478c9052a197
BLAKE2b-256 570a532c44e95f2862876450b734e33196e7df1e262bf035107c9d7a132fccd2

See more details on using hashes here.

File details

Details for the file wageubn-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: wageubn-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.3.1.post20200622 requests-toolbelt/0.9.1 tqdm/4.47.0 CPython/3.7.7

File hashes

Hashes for wageubn-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e29c1b18c8031e9622f6db64700f780d7b750d3cb1b591841cfcac167dcf1e2c
MD5 d18e12e4d5ccfe77c7d15764eba2f86d
BLAKE2b-256 0be6658cf286fa04e0bb4b84576ad60c26d05332de3646524c16828350dc93fe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page