I'm representing TensorFlow SIG Build, a Google-supported community group about building and packaging TensorFlow (a machine learning framework for many different platforms and environments) in OSS. TensorFlow releases each support different versions of NVIDIA CUDA, a platform for GPU-accelerated computing, and we think a classifier could be the right place to expose this to users.
Example of what this could look like:
Environment :: NVIDIA CUDA :: 10.2
Environment :: NVIDIA CUDA :: ...
With one classifier for each of the releases listed on the NVIDIA CUDA Toolkit archive:
10.2, 10.1, 10.0, 9.2, 9.1, 9.0, 8.0, 7.5, 7.0, 6.5, 6.0, 5.5, 5.0, 4.2, 4.1, 4.0, 3.2, 3.1, 3.0, 2.3, 2.2, 2.1, 2.0, 1.1, 1.0
. The list would need to be updated for each CUDA release; judging by that page's release dates, a new release occurs about once or twice per year.
Notability
TensorFlow and its related projects could make use of CUDA classifiers:
- TensorFlow: tensorflow, tensorflow-gpu, tf-nightly, tf-nightly-gpu
- TensorFlow Community packages with GPU components: tensorflow-addons, tfa-nightly
Many existing projects track separate packages to identify the CUDA version and standardizing the information as a classifier would be useful for searching:
- CuPy: cupy-cuda80, cupy-cuda90, cupy-cuda91, cupy-cuda92, cupy-cuda10, cupy-cuda101, cupy-cuda102
- CuGraph: cugraph-cuda92, cugraph-cuda10
- ThunderSVM: thundersvm-cuda10
- CuML: cuml-cuda100, cuml-cuda92
- CuDF: cudf-cuda100, cudf-cuda92
- MxNet: mxnet-cu92, mxnet-cu92mkl, mxnet-cu91, mxnet-cu91mkl, mxnet-cu90, mxnet-cu90mkl, mxnet-cu80, mxnet-cu80mkl, mxnet-cu75, mxnet-cu75mkl, mxnet-mkl
- Many others (PyPI)
Other projects simply reference CUDA but don't explicitly state their supported versions, for example:
Considerations / Discussion
- Classifier Hierarchy: NVIDIA CUDA is a platform rather than a framework. For this reason I put it under "Environment", but I'm not sure that's the most appropriate, considering...
- Future patterns: There are more platforms than just CUDA which TensorFlow and other packages may support in the future, such as MKL (MxNet, above) and SYCL. I am not an expert on these, but wanted to mention them because Pip cannot group multiples of these platforms under one project name (related: discussion thread for PEP 599). Does "Environment" capture all of these kinds of platforms?
- Referencing NVIDIA CUDA correctly: I'm not sure if there are more-severe-than-politeness constraints here, as long as we use "NVIDIA CUDA", NVIDIA's preferred reference style.
- Alternatives: There is a "platforms" argument to setuptools.setup() which seems to be mostly unused. We could use this for extra data like CuDNN version, but nothing here would be standardized.
Ultimately, I think there is a place for a classifier like this, but the specifics may need some more input from the community.
I've previously discussed this a little with @di.