-
-
Notifications
You must be signed in to change notification settings - Fork 22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Shim packages #61
Comments
I'm not sure. In issue ( conda-forge/conda-forge.github.io#687 ) we had agreed with the broader community on aligning around using While the issue of download and decompression pain does come up periodically, my hope would be better split up packages ( #62 ) would cutdown on this pain. Additionally would hope that generally moving to the newer If even after all of that we still wanted to do something like this, I think the question becomes where can we reliably expect external libraries to live on users' systems? If there is no reliable place, how do we specify it? Then following that, how do we support this functionality in packages using CUDA libraries without needing to add another build for external vs. internal? |
Is an extra build needed? I thought adding |
If we can do it without an extra build, agree that is more useful. Would much rather people make a runtime decision. That said, Idk if people will generally configure this correctly, so it might need to be an optimization they apply themselves. |
I envision this as an advanced piece of knowledge users in CI and HPC centers will use only after realizing they don't like the full download, so they will Google this issue and find out that they can do the With CUDA 11.3+ it will be less of a problem I guess, but still some libraries are well into the hundreds anyway. We can add this only for <=11.2? |
One of the build problems this will cause is when building downstream packages using CMake, the CMAKE_FIND_ROOT_PATH variable is used in conda-build environments to restrict finding any header or library to those in the environment. Other build systems may do something similar, I'm not nearly as familiar with them so can't comment directly. So there are some real compatibility problems to be solved so that you don't break conda-build infrastructure for anyone who installed a cudatoolkit=*=external package. IMO this should be thought about at the global conda-forge policy level -- and not just for CUDA as a special case -- so that we consistently deal with any environment that may need to depend on software provided by the system. My personal preference for cases like this is for any generated "external" metapackage to do something like the following:
|
AFAIK this variant would only be relevant at runtime, not during build. Actually, our The intention here is to provide empty packages that only carry the metadata. The effect would be the same as letting conda install |
The move to 11.3+ already seems pretty fraught. Would rather not add one more thing to the list |
More generally am interested in getting the new packages squared away ( #62 ). This will help us solve a lot of things including adding new CUDA versions, better splitting, providing access to build tooling, etc. We can also take that opportunity to leverage CUDA enhanced compatibility and lighten our build matrices. |
Should add that for lightening deployments we can look at using |
While I think this is true in general and that it could be beneficial to add such a shim package, I would like to add one point in support of the current solution as described here:
There are potential downsides to having users choose between a conda-forge cudatoolkit and a system cudatoolkit. From my experience with HPC admins, most of them know little about cuda stuff and don't care to know about it. For one, they wouldn't update the stuff unless they are asked (as cudatoolkit and co are not "core" items to them). Even crazier, a lot of these system packages are incomplete --- let me just say, in 2022, I had to request explicitly for the sys admins to include ptxas in their cudatoolkit installation (11.6). I also had access to another HPC which had cudatoolkit 11.4, but no cudnn whatsoever (not 8.x, not 7.x). So, the bottom line is with such a weird package (can we even call it that?!) like cudatoolkit, I really think for the sake of the community and ecosystem, we should try to keep things simpler and not more complicated. A power/pro user can of course choose to customize stuff as they wish, and they don't need conda-forge to figure it out for them. Another aspect of all of this is performance. For tensorflow, I consistently find that the conda-forge installation outperforms any other installation (e.g. outperforming pypi by a wide margin, even outperforming the official ngc containers). Could we guarantee that the performance will not suffer if we allow for an external cudatoolkit? I suspect we cannot. |
Adding one additional benefit in support of this issue (enabling an "openmm install without cuda"), building docker images with OpenMM grow in size quickly due to the large cuda package size (800mb'ish). |
I see this is labeled as complete, but can somebody clarify how to use this? |
We all know that
cudatoolkit
packages are huge and cause a lot of unneeded traffic, specially in GPU-less CI settings where it wouldn't work anyway, or HPC systems that provide their own CUDA installation. I'd say it'd be beneficial to have emptycudatoolkit
shim packages that are empty and only contain the required metadata. They would be deprioritized with respect to the real package, much in the line of conda-forge/mpich-feedstock#44.Interested users would specify
cudatoolkit=*=external
or similar in the package list. Alternatively/Additionally, the empty packages could be uploaded to a different label and interested people would add that label with higher priority.Would this be something we'd agree on?
The text was updated successfully, but these errors were encountered: