vision
vision copied to clipboard
Build against `libjpeg-turbo` instead of `libjpeg`
torchvision is currently building
https://github.com/pytorch/vision/blob/cac4e228c9ca9e7564cb34406e7ebccfdd736976/setup.py#L321
https://github.com/pytorch/vision/blob/cac4e228c9ca9e7564cb34406e7ebccfdd736976/packaging/torchvision/meta.yaml#L13
and testing against libjpeg
https://github.com/pytorch/vision/blob/cac4e228c9ca9e7564cb34406e7ebccfdd736976/.circleci/unittest/linux/scripts/environment.yml#L10
https://github.com/pytorch/vision/blob/cac4e228c9ca9e7564cb34406e7ebccfdd736976/.circleci/unittest/windows/scripts/environment.yml#L10
Pillow is building against libjpeg-turbo on Windows for some time now since Pillow=9 on all platforms (Jan 2022).
This has two downsides for us:
- We can't use
Pillowas reference for our own decoding and encoding ops. See- #5184
- #5162
- #3913
- #5910
- As the name implies,
libjpeg-turbois a faster implementation of the JPEG standard. Thus, our I/O ops are simply slower than usingPillow, which hinders adoption.
Recently, @NicolasHug led a push to also use libjpeg-turbo, but hit a few blockers:
- Our workflows use the
defaultschannel fromconda. Unfortunately, ondefaultslibjpeg-turbois only available for Windows and macOS. - Adding
conda-forgeto the channels for Linux, leads to crazy environment solve times (10+ minutes), which ultimately time out the CI. In general this change should be possible ifconda-forgehas a lower priority thandefaults. - Depending on the experimental
libmambasolver indeed speeds ups the solve for the CI to not time out (it is still a little slower than before). Unfortunately, our CI setup does not properly work with it, since a CUDA 11.6 workflow is still pulling a PyTorch version build against CUDA 11.3.
From here on I currently see four options:
- Only build and test Windows and macOS binaries against
libjpeg-turbo. This would mean that arguably most of our users won't see that speed-up. - Find a way to stop the CI from timing out when using
conda-forgeas extra channel. This can probably be done through the configuration or by emitting more output during the solve. - Fix our CI setup to work with the
libmambasolver. - Package
libjpeg-turbofor Linux ourselves. We already use thepytorchorpytorch-nightlychannels. If it was available there, we wouldn't need to pull it fromconda-forge. In https://github.com/pytorch/vision/pull/5941#discussion_r871546056 @malfet only talks about testing against it, but maybe we can also build against it.
cc @seemethere