Skip to content
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

cudaPackages: use the same libstdc++ as the rest of nixpkgs #223664

Merged
merged 4 commits into from
Apr 7, 2023

Conversation

SomeoneSerge
Copy link
Contributor

@SomeoneSerge SomeoneSerge commented Mar 28, 2023

Description of changes

A potential solution to #220341, work in progress.
TLDR: we're dealing with libstdc++ mismatches when using cuda-enabled c++ packages (built using gcc11, because nvcc requires so) with any other c++ packages built via gcc12.

@pennae suggested we could try and rely on libstdc++ backward compatibility, specifically we could build with gcc11 and patchelf the resulting artifacts to consume libstdc++ from gcc12

In a similar spirit, this PR explores the possibility of directly passing the new libstdc++ to the old gcc11, avoiding the need to patchelf (and maintain the patchelfing logic)

Things done
  • Fixes at least some derivations: e.g. cuda-enabled easyocr fails without this patch, but succeeds with it
  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 23.05 Release Notes (or backporting 22.11 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

CC @NixOS/cuda-maintainers

Comment on lines 7 to 17
overrideCC stdenv (wrapCCWith rec {
cc = compatibleStdenv.cc.cc;
libcxx = stdenv.cc.cc.lib;
})
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've never used wrapCCWith and overrideCC before, so I've no idea if I'm doing this correctly. I'm also probably abusing the libcxx argument, I guess it's a hatch for clang, but it did the job for me somehow

I'd really appreciate a comment from @FRidh who had suggested overrideCC at some point

@samuela
Copy link
Member

samuela commented Mar 29, 2023

Interesting! Curious to see if such an approach could work!

@SomeoneSerge
Copy link
Contributor Author

Result of nixpkgs-review pr 223664 --extra-nixpkgs-config '{ cudaCapabilities = [ "8.6" ]; }' run on x86_64-linux 1

18 packages failed to build:
  • caffeWithCuda
  • caffeWithCuda.bin
  • cudaPackages.nvidia_driver
  • cudaPackages.tensorrt
  • cudaPackages.tensorrt.dev
  • mathematica-cuda
  • python310Packages.caffeWithCuda
  • python310Packages.caffeWithCuda.bin
  • python310Packages.tensorrt
  • python310Packages.tensorrt.dist
  • python310Packages.theanoWithCuda
  • python310Packages.theanoWithCuda.dist
  • python310Packages.tiny-cuda-nn
  • python311Packages.tensorrt
  • python311Packages.tensorrt.dist
  • python311Packages.theanoWithCuda
  • python311Packages.theanoWithCuda.dist
  • truecrack-cuda
94 packages built:
  • colmapWithCuda
  • cudaPackages.backendStdenv
  • cudaPackages.cuda_cccl
  • cudaPackages.cuda_cudart
  • cudaPackages.cuda_cuobjdump
  • cudaPackages.cuda_cupti
  • cudaPackages.cuda_cuxxfilt
  • cudaPackages.cuda_demo_suite
  • cudaPackages.cuda_documentation
  • cudaPackages.cuda_gdb
  • cudaPackages.cuda_memcheck
  • cudaPackages.cuda_nsight
  • cudaPackages.cuda_nvcc
  • cudaPackages.cuda_nvdisasm
  • cudaPackages.cuda_nvml_dev
  • cudaPackages.cuda_nvprof
  • cudaPackages.cuda_nvprune
  • cudaPackages.cuda_nvrtc
  • cudaPackages.cuda_nvtx
  • cudaPackages.cuda_nvvp
  • cudaPackages.cuda_sanitizer_api
  • cudaPackages.cudatoolkit
  • cudaPackages.cudatoolkit.doc
  • cudaPackages.cudatoolkit.lib
  • cudaPackages.cudnn
  • cudaPackages.cudnn_8_4_1
  • cudaPackages.cudnn_8_5_0
  • cudaPackages.cudnn_8_6_0
  • cudaPackages.cudnn_8_7_0
  • cudaPackages.cutensor
  • cudaPackages.cutensor.dev
  • cudaPackages.fabricmanager
  • cudaPackages.libcublas
  • cudaPackages.libcufft
  • cudaPackages.libcufile
  • cudaPackages.libcurand
  • cudaPackages.libcusolver
  • cudaPackages.libcusparse
  • cudaPackages.libnpp
  • cudaPackages.libnvidia_nscq
  • cudaPackages.libnvjpeg
  • cudaPackages.nccl
  • cudaPackages.nccl.dev
  • cudaPackages.nsight_compute
  • cudaPackages.nsight_systems
  • cudaPackages.nvidia_fs
  • forge
  • gcc11Stdenv
  • gpu-burn
  • gpu-screen-recorder
  • gpu-screen-recorder-gtk
  • gromacsCudaMpi
  • gwe
  • hip-nvidia
  • hip-nvidia.doc
  • katagoWithCuda
  • librealsenseWithCuda
  • librealsenseWithCuda.dev
  • magma (magma-cuda ,magma_2_7_1)
  • magma_2_6_2
  • nvtop
  • nvtop-nvidia
  • python310Packages.cupy
  • python310Packages.cupy.dist
  • python310Packages.jaxlibWithCuda
  • python310Packages.jaxlibWithCuda.dist
  • python310Packages.numbaWithCuda
  • python310Packages.numbaWithCuda.dist
  • python310Packages.pycuda
  • python310Packages.pycuda.dist
  • python310Packages.pynvml
  • python310Packages.pynvml.dist
  • python310Packages.pyrealsense2WithCuda
  • python310Packages.pyrealsense2WithCuda.dev
  • python310Packages.tensorflowWithCuda
  • python310Packages.tensorflowWithCuda.dist
  • python310Packages.torchWithCuda
  • python310Packages.torchWithCuda.dev
  • python310Packages.torchWithCuda.dist
  • python310Packages.torchWithCuda.lib
  • python311Packages.cupy
  • python311Packages.cupy.dist
  • python311Packages.jaxlibWithCuda
  • python311Packages.jaxlibWithCuda.dist
  • python311Packages.pycuda
  • python311Packages.pycuda.dist
  • python311Packages.pynvml
  • python311Packages.pynvml.dist
  • python311Packages.pyrealsense2WithCuda
  • python311Packages.pyrealsense2WithCuda.dev
  • tiny-cuda-nn
  • xgboostWithCuda
  • xpraWithNvenc
  • xpraWithNvenc.dist

@SomeoneSerge
Copy link
Contributor Author

Failed derivations

# NB: We don't actually know if this is the right thing to do
backendStdenv.cc.cc.lib
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I probably should leave a warning somewhere, but if one accidentally uses backendStdenv.cc.cc.lib they'll end up breaking things by linking against the old libstdc++: .lib is just an output that cc happens to have, and wrapCCWith doesn't expose any passthru for libcxx

@SomeoneSerge
Copy link
Contributor Author

Result of nixpkgs-review pr 223664 --extra-nixpkgs-config '{ cudaSupport = true; cudaCapabilities = [ "8.6" ]; }' run on x86_64-linux 1

293 packages failed to build:
  • airwave
  • bada-bib
  • blueprint-compiler
  • bottles
  • bottles-unwrapped
  • chromiumDev
  • chromiumDev.sandbox
  • citations
  • citrix_workspace
  • cntk
  • cudaPackages.nvidia_driver
  • cudaPackages.tensorrt
  • cudaPackages.tensorrt.dev
  • dialect
  • dynamic-wallpaper
  • eiciel
  • eiciel.nautilusExtension
  • elementary-planner
  • fractal
  • fractal-next
  • giara
  • gnome-builder
  • gnome-builder.devdoc
  • gnome-extension-manager
  • gnome-text-editor
  • gnome.gnome-calculator
  • grass
  • gscrabble
  • gscrabble.dist
  • gtkmm4
  • gtkmm4.dev
  • gtksourceview5
  • gtksourceview5.dev
  • gtksourceview5.devdoc
  • headlines
  • hqplayerd
  • ib-controller
  • icon-library
  • intensity-normalization (python310Packages.intensity-normalization)
  • intensity-normalization.dist (python310Packages.intensity-normalization.dist)
  • iotas
  • junction
  • lispPackages_new.sbclPackages.nyxt-ubuntu-package
  • lispPackages_new.sbclPackages.nyxt_slash_application_slash_tests
  • lispPackages_new.sbclPackages.nyxt_slash_benchmark
  • lispPackages_new.sbclPackages.nyxt_slash_documentation
  • lispPackages_new.sbclPackages.nyxt_slash_gi-gtk
  • lispPackages_new.sbclPackages.nyxt_slash_gi-gtk-application
  • lispPackages_new.sbclPackages.nyxt_slash_gi-gtk_slash_tests
  • lispPackages_new.sbclPackages.nyxt_slash_tests
  • lispPackages_new.sbclPackages.nyxt_slash_version
  • lxi-tools-gui
  • mailnag
  • mailnag.dist
  • mailnagWithPlugins
  • mailnagWithPlugins.dist
  • manim
  • manim.dist
  • mathematica (mathematica-cuda)
  • megasync
  • mxnet
  • nasc
  • notejot
  • obs-studio-plugins.obs-ndi
  • openai-full
  • openai-full.dist
  • openmvs
  • pantheon.elementary-iconbrowser
  • pantheon.elementary-tasks
  • paper-note
  • paperwork
  • paperwork.dist
  • pixinsight
  • pods
  • python310Packages.aeppl
  • python310Packages.aeppl.dist
  • python310Packages.aesara
  • python310Packages.aesara.dist
  • python310Packages.arviz
  • python310Packages.arviz.dist
  • python310Packages.augmax
  • python310Packages.augmax.dist
  • python310Packages.bambi
  • python310Packages.bambi.dist
  • python310Packages.blackjax
  • python310Packages.blackjax.dist
  • python310Packages.bsuite
  • python310Packages.bsuite.dist
  • python310Packages.chex
  • python310Packages.chex.dist
  • python310Packages.cntk
  • python310Packages.cntk.dist
  • python310Packages.dalle-mini
  • python310Packages.dalle-mini.dist
  • python310Packages.dask-awkward
  • python310Packages.dask-awkward.dist
  • python310Packages.dask-image
  • python310Packages.dask-image.dist
  • python310Packages.datashader
  • python310Packages.datashader.dist
  • python310Packages.distrax
  • python310Packages.distrax.dist
  • python310Packages.dm-haiku
  • python310Packages.dm-haiku.dist
  • python310Packages.dm-haiku.testsout
  • python310Packages.dm-sonnet
  • python310Packages.dm-sonnet.dist
  • python310Packages.elegy
  • python310Packages.elegy.dist
  • python310Packages.fastai
  • python310Packages.fastai.dist
  • python310Packages.flammkuchen
  • python310Packages.flammkuchen.dist
  • python310Packages.flax
  • python310Packages.flax.dist
  • python310Packages.galois
  • python310Packages.galois.dist
  • python310Packages.glymur
  • python310Packages.glymur.dist
  • python310Packages.gpt-2-simple
  • python310Packages.gpt-2-simple.dist
  • python310Packages.graspologic
  • python310Packages.graspologic.dist
  • python310Packages.gumath
  • python310Packages.gumath.dist
  • python310Packages.imgaug
  • python310Packages.imgaug.dist
  • python310Packages.jax
  • python310Packages.jax.dist
  • python310Packages.jaxopt
  • python310Packages.jaxopt.dist
  • python310Packages.jmp
  • python310Packages.jmp.dist
  • python310Packages.mask-rcnn
  • python310Packages.mask-rcnn.dist
  • python310Packages.mxnet
  • python310Packages.mxnet.dist
  • python310Packages.numpyro
  • python310Packages.numpyro.dist
  • python310Packages.objax
  • python310Packages.objax.dist
  • python310Packages.opensfm
  • python310Packages.opensfm.dist
  • python310Packages.optax
  • python310Packages.optax.dist
  • python310Packages.optax.testsout
  • python310Packages.optuna
  • python310Packages.optuna.dist
  • python310Packages.pandas-stubs
  • python310Packages.pandas-stubs.dist
  • python310Packages.paperwork-backend
  • python310Packages.paperwork-backend.dist
  • python310Packages.paperwork-shell
  • python310Packages.paperwork-shell.dist
  • python310Packages.pims
  • python310Packages.pims.dist
  • python310Packages.pygbm
  • python310Packages.pygbm.dist
  • python310Packages.pygmo
  • python310Packages.pymanopt
  • python310Packages.pymanopt.dist
  • python310Packages.pymc
  • python310Packages.pymc.dist
  • python310Packages.pyscf
  • python310Packages.pyscf.dist
  • python310Packages.pytensor
  • python310Packages.pytensor.dist
  • python310Packages.pytorch-metric-learning
  • python310Packages.pytorch-metric-learning.dist
  • python310Packages.pywick
  • python310Packages.pywick.dist
  • python310Packages.qiskit
  • python310Packages.qiskit-machine-learning
  • python310Packages.qiskit-machine-learning.dist
  • python310Packages.qiskit.dist
  • python310Packages.rl-coach
  • python310Packages.rl-coach.dist
  • python310Packages.rlax
  • python310Packages.rlax.dist
  • python310Packages.runway-python
  • python310Packages.runway-python.dist
  • python310Packages.scikit-tda
  • python310Packages.scikit-tda.dist
  • python310Packages.shap
  • python310Packages.shap.dist
  • python310Packages.skorch
  • python310Packages.skorch.dist
  • python310Packages.skrl
  • python310Packages.skrl.dist
  • python310Packages.slicer
  • python310Packages.slicer.dist
  • python310Packages.spacy
  • python310Packages.spacy-transformers
  • python310Packages.spacy-transformers.dist
  • python310Packages.spacy.dist
  • python310Packages.spectral-cube
  • python310Packages.spectral-cube.dist
  • python310Packages.streamz
  • python310Packages.streamz.dist
  • python310Packages.stytra
  • python310Packages.stytra.dist
  • python310Packages.sunpy
  • python310Packages.sunpy.dist
  • python310Packages.tensorflow-datasets
  • python310Packages.tensorflow-datasets.dist
  • python310Packages.tensorflow-probability
  • python310Packages.tensorflow-probability.dist
  • python310Packages.tensorrt
  • python310Packages.tensorrt.dist
  • python310Packages.textacy
  • python310Packages.textacy.dist
  • python310Packages.textnets
  • python310Packages.textnets.dist
  • python310Packages.theano (python310Packages.theanoWithCuda)
  • python310Packages.theano.dist (python310Packages.theanoWithCuda.dist)
  • python310Packages.torchWithRocm
  • python310Packages.torchWithRocm.dev
  • python310Packages.torchWithRocm.dist
  • python310Packages.torchWithRocm.lib
  • python310Packages.torchinfo
  • python310Packages.torchinfo.dist
  • python310Packages.trackpy
  • python310Packages.trackpy.dist
  • python310Packages.treeo
  • python310Packages.treeo.dist
  • python310Packages.treex
  • python310Packages.treex.dist
  • python310Packages.trfl
  • python310Packages.trfl.dist
  • python310Packages.umap-learn
  • python310Packages.umap-learn.dist
  • python310Packages.vqgan-jax
  • python310Packages.vqgan-jax.dist
  • python311Packages.augmax
  • python311Packages.augmax.dist
  • python311Packages.blackjax
  • python311Packages.blackjax.dist
  • python311Packages.chex
  • python311Packages.chex.dist
  • python311Packages.cntk
  • python311Packages.cntk.dist
  • python311Packages.dm-haiku
  • python311Packages.dm-haiku.dist
  • python311Packages.dm-haiku.testsout
  • python311Packages.jax
  • python311Packages.jax.dist
  • python311Packages.jaxopt
  • python311Packages.jaxopt.dist
  • python311Packages.jmp
  • python311Packages.jmp.dist
  • python311Packages.mxnet
  • python311Packages.mxnet.dist
  • python311Packages.numpyro
  • python311Packages.numpyro.dist
  • python311Packages.opensfm
  • python311Packages.opensfm.dist
  • python311Packages.optax
  • python311Packages.optax.dist
  • python311Packages.optax.testsout
  • python311Packages.paperwork-backend
  • python311Packages.paperwork-backend.dist
  • python311Packages.paperwork-shell
  • python311Packages.paperwork-shell.dist
  • python311Packages.pythonefl
  • python311Packages.pythonefl.dist
  • python311Packages.tensorrt
  • python311Packages.tensorrt.dist
  • python311Packages.theano (python311Packages.theanoWithCuda)
  • python311Packages.theano.dist (python311Packages.theanoWithCuda.dist)
  • python311Packages.treeo
  • python311Packages.treeo.dist
  • pytrainer
  • pytrainer.dist
  • qgis
  • qgis-ltr
  • raider
  • rtabmap
  • saga
  • skytemple
  • skytemple.dist
  • soundconverter
  • soundconverter.dist
  • tangram
  • tdlib-purple
  • textpieces
  • truecrack-cuda
  • vala-language-server
  • video-trimmer
  • whatip
  • wolfram-engine
  • wolfram-notebook
  • xmonad_log_applet
  • zrythm
1290 packages built:
  • ChowKick
  • MIDIVisualizer
  • adapta-gtk-theme
  • aitrack
  • alfaview
  • alfis
  • almanah
  • alsa-scarlett-gui
  • amberol
  • apache-directory-studio
  • apostrophe
  • aravis
  • aravis.bin
  • aravis.dev
  • aravis.lib
  • arcanPackages.all-wrapped
  • arcanPackages.arcan
  • arcanPackages.arcan-wrapped
  • arcanPackages.cat9-wrapped
  • arcanPackages.durden-wrapped
  • ffmpeg_4-full (arcanPackages.ffmpeg)
  • ffmpeg_4-full.bin (arcanPackages.ffmpeg.bin)
  • ffmpeg_4-full.data (arcanPackages.ffmpeg.data)
  • ffmpeg_4-full.dev (arcanPackages.ffmpeg.dev)
  • ffmpeg_4-full.doc (arcanPackages.ffmpeg.doc)
  • ffmpeg_4-full.lib (arcanPackages.ffmpeg.lib)
  • ffmpeg_4-full.man (arcanPackages.ffmpeg.man)
  • arcanPackages.pipeworld-wrapped
  • arcanPackages.prio-wrapped
  • arcanPackages.xarcan
  • archi
  • ashpd-demo
  • astroid
  • audio-recorder
  • authenticator
  • auto-multiple-choice
  • aws-workspaces
  • badwolf
  • balsa
  • banking
  • baobab
  • baresip
  • beamerpresenter
  • beamerpresenter-poppler
  • bespokesynth
  • bespokesynth-with-vst2
  • birdfont
  • blackbox-terminal
  • blanket
  • blender
  • blender-hip
  • bookworm
  • brasero
  • brasero-original
  • bubblemail
  • bubblemail.dist
  • budgie.budgie-screensaver
  • byzanz
  • cadence
  • caffe (caffeWithCuda)
  • caffe.bin (caffeWithCuda.bin)
  • calibre
  • calls
  • calls.devdoc
  • cambalache
  • cargo-tauri
  • cavalier
  • cawbird
  • celeste
  • celluloid
  • chatty
  • chirp
  • chirp.dist
  • chromium
  • chromium.sandbox
  • chromiumBeta
  • chromiumBeta.sandbox
  • cinnamon.cinnamon-common
  • cinnamon.cinnamon-control-center
  • cinnamon.cinnamon-gsettings-overrides
  • cinnamon.cinnamon-screensaver
  • cinnamon.nemo-fileroller
  • cinnamon.nemo-with-extensions
  • cinnamon.pix
  • cinnamon.xreader
  • cinny-desktop
  • clapper
  • clash-verge
  • claws-mail
  • claws-mail.dev
  • clementine
  • cog
  • colmap (colmapWithCuda)
  • colord-gtk4
  • colord-gtk4.dev
  • colord-gtk4.devdoc
  • contrast
  • corrscope
  • corrscope.dist
  • cozy
  • crow-translate
  • cudaPackages.backendStdenv
  • cudaPackages.cuda_cccl
  • cudaPackages.cuda_cudart
  • cudaPackages.cuda_cuobjdump
  • cudaPackages.cuda_cupti
  • cudaPackages.cuda_cuxxfilt
  • cudaPackages.cuda_demo_suite
  • cudaPackages.cuda_documentation
  • cudaPackages.cuda_gdb
  • cudaPackages.cuda_memcheck
  • cudaPackages.cuda_nsight
  • cudaPackages.cuda_nvcc
  • cudaPackages.cuda_nvdisasm
  • cudaPackages.cuda_nvml_dev
  • cudaPackages.cuda_nvprof
  • cudaPackages.cuda_nvprune
  • cudaPackages.cuda_nvrtc
  • cudaPackages.cuda_nvtx
  • cudaPackages.cuda_nvvp
  • cudaPackages.cuda_sanitizer_api
  • cudaPackages.cudatoolkit
  • cudaPackages.cudatoolkit.doc
  • cudaPackages.cudatoolkit.lib
  • cudaPackages.cudnn
  • cudaPackages.cudnn_8_4_1
  • cudaPackages.cudnn_8_5_0
  • cudaPackages.cudnn_8_6_0
  • cudaPackages.cudnn_8_7_0
  • cudaPackages.cutensor
  • cudaPackages.cutensor.dev
  • cudaPackages.fabricmanager
  • cudaPackages.libcublas
  • cudaPackages.libcufft
  • cudaPackages.libcufile
  • cudaPackages.libcurand
  • cudaPackages.libcusolver
  • cudaPackages.libcusparse
  • cudaPackages.libnpp
  • cudaPackages.libnvidia_nscq
  • cudaPackages.libnvjpeg
  • cudaPackages.nccl
  • cudaPackages.nccl.dev
  • cudaPackages.nsight_compute
  • cudaPackages.nsight_systems
  • cudaPackages.nvidia_fs
  • czkawka
  • d-spy
  • d-spy.dev
  • d-spy.lib
  • darktable
  • dbeaver
  • deepin.deepin-album
  • deepin.deepin-camera
  • deepin.deepin-image-viewer
  • deepin.image-editor
  • deja-dup
  • denaro
  • denemo
  • digikam
  • dino
  • dippi
  • displaycal
  • displaycal.dist
  • dropbox-cli
  • dropbox-cli.nautilusExtension
  • eartag
  • easyeffects
  • easyeffects.debug
  • easyocr (python310Packages.easyocr)
  • easyocr.dist (python310Packages.easyocr.dist)
  • eclipse-mat
  • eclipses.eclipse-committers
  • eclipses.eclipse-cpp
  • eclipses.eclipse-java
  • eclipses.eclipse-jee
  • eclipses.eclipse-modeling
  • eclipses.eclipse-platform
  • eclipses.eclipse-rcp
  • eclipses.eclipse-scala-sdk
  • eclipses.eclipse-sdk
  • emacsPackages.ac-mozc
  • emacsPackages.mozc
  • emacsPackages.mozc-cand-posframe
  • emacsPackages.mozc-im
  • emacsPackages.mozc-popup
  • emacsPackages.mozc-temp
  • emblem
  • emulsion-palette
  • endeavour
  • enlightenment.econnman
  • enlightenment.ecrire
  • enlightenment.efl
  • enlightenment.enlightenment
  • enlightenment.ephoto
  • enlightenment.evisum
  • enlightenment.rage
  • enlightenment.terminology
  • eolie
  • eos-installer
  • ephemeral
  • epiphany
  • evince
  • evince.dev
  • evince.devdoc
  • evolution
  • evolution-data-server
  • evolution-data-server-gtk4
  • evolution-data-server-gtk4.dev
  • evolution-data-server.dev
  • evolution-ews
  • evolutionWithPlugins
  • eyedropper
  • facedetect
  • faiss (python310Packages.faiss)
  • faiss.demos (python310Packages.faiss.demos)
  • farstream
  • farstream.dev
  • fast-cli
  • faust2jack
  • fcitx5-gtk
  • fcitx5-with-addons
  • ffcast
  • ffmpeg_6-full
  • ffmpeg_6-full.bin
  • ffmpeg_6-full.data
  • ffmpeg_6-full.dev
  • ffmpeg_6-full.doc
  • ffmpeg_6-full.lib
  • ffmpeg_6-full.man
  • fgallery
  • firewalld-gui
  • flare-signal
  • flowblade
  • focus-stack
  • foliate
  • folks
  • folks.dev
  • folks.devdoc
  • font-manager
  • forge
  • formiko
  • formiko.dist
  • fragments
  • frei0r
  • furtherance
  • gajim
  • gajim.dist
  • gamehub
  • gcc11Stdenv
  • gcompris
  • gcr_4
  • gcr_4.bin
  • gcr_4.dev
  • gcr_4.devdoc
  • gfbgraph
  • gfbgraph.dev
  • gfbgraph.devdoc
  • gimp-with-plugins
  • gimpPlugins.gmic
  • glade
  • glaxnimate
  • glom
  • glom.dev
  • glom.devdoc
  • glom.doc
  • glom.lib
  • gmic
  • gmic-qt
  • gmic.dev
  • gmic.lib
  • gmic.man
  • gmrender-resurrect
  • gnome-browser-connector
  • gnome-console
  • gnome-decoder
  • gnome-desktop
  • gnome-desktop.debug
  • gnome-desktop.dev
  • gnome-desktop.devdoc
  • gnome-feeds
  • gnome-firmware
  • gnome-frog
  • gnome-inform7
  • gnome-keysign
  • gnome-keysign.dist
  • gnome-network-displays
  • gnome-obfuscate
  • gnome-online-accounts
  • gnome-online-accounts.debug
  • gnome-online-accounts.dev
  • gnome-online-accounts.devdoc
  • gnome-online-accounts.man
  • gnome-photos
  • gnome-photos.installedTests
  • gnome-podcasts
  • gnome-recipes
  • gnome-secrets
  • gnome-solanum
  • gnome-tour
  • gnome.cheese
  • gnome.cheese.devdoc
  • gnome.cheese.man
  • gnome.devhelp
  • gnome.devhelp.devdoc
  • gnome.eog
  • gnome.eog.dev
  • gnome.eog.devdoc
  • gnome.file-roller
  • gnome.geary
  • gnome.ghex
  • gnome.ghex.dev
  • gnome.ghex.devdoc
  • gnome.gnome-applets
  • gnome.gnome-bluetooth
  • gnome.gnome-bluetooth.dev
  • gnome.gnome-bluetooth.devdoc
  • gnome.gnome-bluetooth.man
  • gnome.gnome-boxes
  • gnome.gnome-calendar
  • gnome.gnome-characters
  • gnome.gnome-chess
  • gnome.gnome-clocks
  • gnome.gnome-contacts
  • gnome.gnome-control-center
  • gnome.gnome-control-center.debug
  • gnome.gnome-disk-utility
  • gnome.gnome-flashback
  • gnome.gnome-font-viewer
  • gnome.gnome-initial-setup
  • gnome.gnome-logs
  • gnome.gnome-maps
  • gnome.gnome-music
  • gnome.gnome-notes
  • gnome.gnome-online-miners
  • gnome.gnome-panel
  • gnome.gnome-panel.dev
  • gnome.gnome-panel.man
  • gnome.gnome-session
  • gnome.gnome-session.debug
  • gnome.gnome-session.sessions
  • gnome.gnome-settings-daemon
  • gnome.gnome-settings-daemon42
  • gnome.gnome-shell
  • gnome.gnome-shell.debug
  • gnome.gnome-shell.devdoc
  • gnome.gnome-software
  • gnome.gnome-sound-recorder
  • gnome.gnome-terminal
  • gnome.gnome-tweaks
  • gnome.gnome-weather
  • gnome.gpaste
  • gnome.gvfs
  • gnome.gvfs.debug
  • gnome.mutter
  • gnome.mutter.debug
  • gnome.mutter.dev
  • gnome.mutter.devdoc
  • gnome.mutter.man
  • gnome.mutter42
  • gnome.mutter42.dev
  • gnome.mutter42.man
  • gnome.nautilus
  • gnome.nautilus-python
  • gnome.nautilus-python.dev
  • gnome.nautilus-python.devdoc
  • gnome.nautilus-python.doc
  • gnome.nautilus.dev
  • gnome.nautilus.devdoc
  • networkmanager-fortisslvpn (gnome.networkmanager-fortisslvpn)
  • networkmanager-iodine (gnome.networkmanager-iodine)
  • networkmanager-l2tp (gnome.networkmanager-l2tp)
  • networkmanager-openconnect (gnome.networkmanager-openconnect)
  • networkmanager-openvpn (gnome.networkmanager-openvpn)
  • networkmanager-vpnc (gnome.networkmanager-vpnc)
  • gnome.nixos-gsettings-overrides
  • gnome.polari
  • gnome.rygel
  • gnome.rygel.dev
  • gnome.sushi
  • gnome.totem
  • gnome.yelp
  • gnomeExtensions.easyScreenCast
  • gnomeExtensions.gsconnect
  • gnomeExtensions.gsconnect.installedTests
  • gnomeExtensions.system-monitor
  • gnucash
  • gnunet-gtk
  • gnvim
  • gnvim-unwrapped
  • goodvibes
  • google-chrome
  • google-chrome-beta
  • google-chrome-dev
  • gotktrix
  • gpt2tc
  • gpu-burn
  • gpu-screen-recorder
  • gpu-screen-recorder-gtk
  • gpu-viewer
  • greetd.regreet
  • grilo-plugins
  • gromacsCudaMpi
  • gssdp-tools
  • gst_all_1.gst-devtools
  • gst_all_1.gst-devtools.dev
  • gst_all_1.gst-editing-services
  • gst_all_1.gst-editing-services.dev
  • gst_all_1.gst-plugins-bad
  • gst_all_1.gst-plugins-bad.dev
  • gst_all_1.gst-rtsp-server
  • gst_all_1.gst-rtsp-server.dev
  • gst_all_1.gst-vaapi
  • gst_all_1.gst-vaapi.dev
  • gthumb
  • gtk4
  • gtk4.debug
  • gtk4.dev
  • gtk4.devdoc
  • gtkcord4
  • gtkd
  • gwe
  • handbrake
  • haruna
  • helvum
  • hikounomizu
  • hip-nvidia
  • hip-nvidia.doc
  • holochain-launcher
  • home-assistant-component-tests.environment_canada
  • hydrus
  • hydrus.doc
  • ibus
  • ibus-engines.anthy
  • ibus-engines.hangul
  • ibus-engines.kkc
  • ibus-engines.libpinyin
  • ibus-engines.libthai
  • ibus-engines.m17n
  • ibus-engines.mozc
  • ibus-engines.rime
  • ibus-engines.table
  • ibus-engines.table-chinese
  • ibus-engines.table-others
  • ibus-engines.typing-booster
  • ibus-engines.typing-booster-unwrapped
  • ibus-engines.uniemoji
  • ibus-qt
  • ibus-with-plugins
  • ibus.dev
  • ibus.installedTests
  • image-roll
  • imagination
  • iwgtk
  • jami
  • jellyfin
  • jellyfin-ffmpeg
  • jellyfin-ffmpeg.bin
  • jellyfin-ffmpeg.data
  • jellyfin-ffmpeg.dev
  • jellyfin-ffmpeg.doc
  • jellyfin-ffmpeg.lib
  • jellyfin-ffmpeg.man
  • jpsxdec
  • kaidan
  • karlender
  • katagoWithCuda
  • khoj
  • khoj.dist
  • khronos
  • kicad
  • kicad-small
  • kicad-unstable
  • kicad-unstable-small
  • kime
  • komikku
  • kooha
  • kotatogram-desktop-with-webkit
  • larynx-train (python310Packages.larynx-train)
  • larynx-train.dist (python310Packages.larynx-train.dist)
  • libadwaita
  • libadwaita.dev
  • libadwaita.devdoc
  • libgdata
  • libgdata.dev
  • libgdata.installedTests
  • libgepub
  • libgnome-games-support_2_0
  • libgtkflow4
  • libgtkflow4.dev
  • libgtkflow4.devdoc
  • libhandy_0
  • libhandy_0.dev
  • libhandy_0.devdoc
  • libnma
  • libnma-gtk4
  • libnma-gtk4.dev
  • libnma-gtk4.devdoc
  • libnma.dev
  • libnma.devdoc
  • libpanel
  • libpanel.dev
  • libpanel.devdoc
  • libportal-gtk4
  • libportal-gtk4.dev
  • libportal-gtk4.devdoc
  • librealsense
  • librealsense-gui
  • librealsense-gui.dev
  • librealsense.dev
  • librealsenseWithCuda
  • librealsenseWithCuda.dev
  • libreoffice (libreoffice-still)
  • libreoffice-fresh
  • libreoffice-fresh-unwrapped
  • libreoffice-fresh-unwrapped.dev
  • libreoffice-qt
  • libreoffice-still-unwrapped
  • libreoffice-still-unwrapped.dev
  • libsForQt5.audiotube
  • libsForQt5.booth
  • libsForQt5.dragon
  • libsForQt5.dragon.dev
  • libsForQt5.kamoso
  • libsForQt5.kasts
  • libsForQt5.kdenlive
  • libsForQt5.kdeplasma-addons
  • libsForQt5.mlt
  • libsForQt5.mlt.dev
  • libsForQt5.phonon-backend-gstreamer
  • libsForQt5.plasma-desktop
  • libsForQt5.plasma-mobile
  • libsForQt5.plasmatube
  • libsForQt5.soundkonverter
  • libsForQt5.telepathy
  • libshumate
  • libshumate.dev
  • libshumate.devdoc
  • libtensorflow (libtensorflow.python)
  • libyafaray
  • libzapojit
  • libzapojit.dev
  • liferea
  • lightdm-mobile-greeter
  • liquidsoap
  • lispPackages.cl-webkit2
  • lispPackages.nyxt
  • lispPackages_new.sbclPackages.cl-webkit2
  • lispPackages_new.sbclPackages.nyxt
  • lispPackages_new.sbclPackages.nyxt_slash_gtk
  • lispPackages_new.sbclPackages.nyxt_slash_gtk-application
  • lollypop
  • loxodo
  • loxodo.dist
  • luakit
  • lutris
  • lutris-free
  • lutris-unwrapped
  • lutris-unwrapped.dist
  • maestral-gui
  • maestral-gui.dist
  • magma (magma-cuda ,magma_2_7_1)
  • magma_2_6_2
  • magnetophonDSP.VoiceOfFaust
  • malcontent-ui
  • malcontent-ui.dev
  • malcontent-ui.lib
  • mapmap
  • marker
  • mate.atril
  • mate.mate-user-guide
  • mavproxy
  • mavproxy.dist
  • media-downloader
  • mediaelch-qt6
  • meerk40t
  • meerk40t-camera
  • meerk40t-camera.dist
  • meerk40t.dist
  • megapixels
  • metadata-cleaner
  • metamorphose2
  • meteo
  • midori
  • midori-unwrapped
  • minigalaxy
  • minigalaxy.dist
  • mlt
  • mlterm
  • mmex
  • mojave-gtk-theme
  • monado
  • monero-gui
  • monitor
  • mopidy
  • mopidy-bandcamp
  • mopidy-bandcamp.dist
  • mopidy-iris
  • mopidy-iris.dist
  • mopidy-jellyfin
  • mopidy-jellyfin.dist
  • mopidy-local
  • mopidy-local.dist
  • mopidy-moped
  • mopidy-moped.dist
  • mopidy-mopify
  • mopidy-mopify.dist
  • mopidy-mpd
  • mopidy-mpd.dist
  • mopidy-mpris
  • mopidy-mpris.dist
  • mopidy-muse
  • mopidy-muse.dist
  • mopidy-musicbox-webclient
  • mopidy-musicbox-webclient.dist
  • mopidy-notify
  • mopidy-notify.dist
  • mopidy-podcast
  • mopidy-podcast.dist
  • mopidy-scrobbler
  • mopidy-scrobbler.dist
  • mopidy-somafm
  • mopidy-somafm.dist
  • mopidy-soundcloud
  • mopidy-soundcloud.dist
  • mopidy-subidy
  • mopidy-subidy.dist
  • mopidy-tidal
  • mopidy-tidal.dist
  • mopidy-tunein
  • mopidy-tunein.dist
  • mopidy-youtube
  • mopidy-youtube.dist
  • mopidy-ytmusic
  • mopidy-ytmusic.dist
  • mopidy.dist
  • mousai
  • napari (python310Packages.napari)
  • napari.dist (python310Packages.napari.dist)
  • nautilus-open-any-terminal
  • nautilus-open-any-terminal.dist
  • ncnn
  • neovim-gtk
  • netease-cloud-music-gtk
  • netflix
  • networkmanager-sstp
  • networkmanager_strongswan
  • networkmanagerapplet
  • networkmanagerapplet.man
  • newsflash
  • nheko
  • nomacs
  • notes-up
  • nsz (python310Packages.nsz)
  • nsz.dist (python310Packages.nsz.dist)
  • nvidia-vaapi-driver
  • nvtop
  • nvtop-nvidia
  • nyxt
  • obs-studio
  • obs-studio-plugins.advanced-scene-switcher
  • obs-studio-plugins.droidcam-obs
  • obs-studio-plugins.input-overlay
  • obs-studio-plugins.looking-glass-obs
  • obs-studio-plugins.obs-gstreamer
  • obs-studio-plugins.obs-hyperion
  • obs-studio-plugins.obs-livesplit-one
  • obs-studio-plugins.obs-move-transition
  • obs-studio-plugins.obs-multi-rtmp
  • obs-studio-plugins.obs-nvfbc
  • obs-studio-plugins.obs-pipewire-audio-capture
  • obs-studio-plugins.obs-source-record
  • obs-studio-plugins.obs-vaapi
  • obs-studio-plugins.obs-vkcapture
  • obs-studio-plugins.wlrobs
  • ocamlPackages.frei0r
  • ocamlPackages.torch
  • olive-editor
  • ome_zarr (python310Packages.ome-zarr)
  • ome_zarr.dist (python310Packages.ome-zarr.dist)
  • onboard
  • onboard.dist
  • openai-whisper (python310Packages.openai-whisper)
  • openai-whisper.dist (python310Packages.openai-whisper.dist)
  • openbangla-keyboard
  • opencv
  • opencv.package_tests
  • opencv3
  • opensubdiv
  • opensubdiv.dev
  • opentrack
  • openvino
  • openvino.python
  • opera
  • osmo
  • pantheon.elementary-calculator
  • pantheon.elementary-calendar
  • pantheon.elementary-camera
  • pantheon.elementary-capnet-assist
  • pantheon.elementary-greeter
  • pantheon.elementary-gsettings-schemas
  • pantheon.elementary-mail
  • pantheon.elementary-music
  • pantheon.elementary-onboarding
  • pantheon.elementary-photos
  • pantheon.elementary-session-settings
  • pantheon.elementary-shortcut-overlay
  • pantheon.elementary-videos
  • pantheon.epiphany
  • pantheon.file-roller-contract
  • pantheon.gala
  • pantheon.granite7
  • pantheon.granite7.dev
  • pantheon.sideload
  • pantheon.switchboard-plug-a11y
  • pantheon.switchboard-plug-bluetooth
  • pantheon.switchboard-plug-keyboard
  • pantheon.switchboard-plug-mouse-touchpad
  • pantheon.switchboard-plug-network
  • pantheon.switchboard-plug-onlineaccounts
  • pantheon.switchboard-plug-pantheon-shell
  • pantheon.switchboard-plug-power
  • pantheon.switchboard-plug-security-privacy
  • pantheon.switchboard-with-plugs
  • pantheon.wingpanel
  • pantheon.wingpanel-applications-menu
  • pantheon.wingpanel-indicator-a11y
  • pantheon.wingpanel-indicator-bluetooth
  • pantheon.wingpanel-indicator-datetime
  • pantheon.wingpanel-indicator-keyboard
  • pantheon.wingpanel-indicator-network
  • pantheon.wingpanel-indicator-nightlight
  • pantheon.wingpanel-indicator-notifications
  • pantheon.wingpanel-indicator-power
  • pantheon.wingpanel-indicator-session
  • pantheon.wingpanel-indicator-sound
  • pantheon.wingpanel-with-indicators
  • pantheon.xdg-desktop-portal-pantheon
  • paprefs
  • parlatype
  • pdfpc
  • peek
  • phoc
  • phosh
  • phosh-mobile-settings
  • photoprism
  • pianotrans
  • pianotrans.dist
  • picard
  • picard.dist
  • pidgin
  • pidgin-carbons
  • pidgin-indicator
  • pidgin-latex
  • pidgin-mra
  • pidgin-msn-pecan
  • pidgin-opensteamworks
  • pidgin-osd
  • pidgin-otr
  • pidgin-sipe
  • pidgin-skypeweb
  • pidgin-window-merge
  • pidgin-xmpp-receipts
  • pika-backup
  • pithos
  • pitivi
  • playonlinux
  • poedit
  • polychromatic
  • portfolio
  • pragha
  • printrun
  • printrun.dist
  • process-viewer
  • protonvpn-gui
  • protonvpn-gui.dist
  • pulseaudioFull
  • pulseaudioFull.dev
  • pulseeffects-legacy
  • puppeteer-cli
  • purple-discord
  • purple-facebook
  • purple-googlechat
  • purple-hangouts
  • purple-lurch
  • purple-matrix
  • purple-mm-sms
  • purple-plugin-pack
  • purple-signald
  • purple-slack
  • purple-vk-plugin
  • purple-xmpp-http-upload
  • python310Packages.aplpy
  • python310Packages.aplpy.dist
  • python310Packages.apptools
  • python310Packages.apptools.dist
  • python310Packages.autofaiss
  • python310Packages.autofaiss.dist
  • python310Packages.awkward
  • python310Packages.awkward.dist
  • python310Packages.baselines
  • python310Packages.baselines.dist
  • python310Packages.batchgenerators
  • python310Packages.batchgenerators.dist
  • python310Packages.blosc2
  • python310Packages.blosc2.dist
  • python310Packages.boxx
  • python310Packages.boxx.dist
  • python310Packages.bpycv
  • python310Packages.bpycv.dist
  • python310Packages.caffe (python310Packages.caffeWithCuda)
  • python310Packages.caffe.bin (python310Packages.caffeWithCuda.bin)
  • python310Packages.casa-formats-io
  • python310Packages.casa-formats-io.dist
  • python310Packages.chainer
  • python310Packages.chainer.dist
  • python310Packages.clifford
  • python310Packages.clifford.dist
  • python310Packages.clip
  • python310Packages.clip.dist
  • python310Packages.cppe
  • python310Packages.cppe.dist
  • python310Packages.cupy
  • python310Packages.cupy.dist
  • python310Packages.dask
  • python310Packages.dask-gateway
  • python310Packages.dask-gateway.dist
  • python310Packages.dask-glm
  • python310Packages.dask-glm.dist
  • python310Packages.dask-jobqueue
  • python310Packages.dask-jobqueue.dist
  • python310Packages.dask-ml
  • python310Packages.dask-ml.dist
  • python310Packages.dask-mpi
  • python310Packages.dask-mpi.dist
  • python310Packages.dask-yarn
  • python310Packages.dask-yarn.dist
  • python310Packages.dask.dist
  • python310Packages.deepdish
  • python310Packages.deepdish.dist
  • python310Packages.deepwave
  • python310Packages.deepwave.dist
  • python310Packages.devito
  • python310Packages.devito.dist
  • python310Packages.distributed
  • python310Packages.distributed.dist
  • python310Packages.dremel3dpy
  • python310Packages.dremel3dpy.dist
  • python310Packages.edward
  • python310Packages.edward.dist
  • python310Packages.einops
  • python310Packages.einops.dist
  • python310Packages.env-canada
  • python310Packages.env-canada.dist
  • python310Packages.envisage
  • python310Packages.envisage.dist
  • python310Packages.ezyrb
  • python310Packages.ezyrb.dist
  • python310Packages.fastparquet
  • python310Packages.fastparquet.dist
  • python310Packages.ffcv
  • python310Packages.ffcv.dist
  • python310Packages.grad-cam
  • python310Packages.grad-cam.dist
  • python310Packages.handout
  • python310Packages.handout.dist
  • python310Packages.humblewx
  • python310Packages.humblewx.dist
  • python310Packages.hyppo
  • python310Packages.hyppo.dist
  • python310Packages.ignite
  • python310Packages.ignite.dist
  • python310Packages.image-match
  • python310Packages.image-match.dist
  • python310Packages.imagecorruptions
  • python310Packages.imagecorruptions.dist
  • python310Packages.imageio
  • python310Packages.imageio.dist
  • python310Packages.imantics
  • python310Packages.imantics.dist
  • python310Packages.imutils
  • python310Packages.imutils.dist
  • python310Packages.intake
  • python310Packages.intake-parquet
  • python310Packages.intake-parquet.dist
  • python310Packages.intake.dist
  • python310Packages.invisible-watermark
  • python310Packages.invisible-watermark.dist
  • python310Packages.jaxlib (python310Packages.jaxlib-build ,python310Packages.jaxlibWithCuda)
  • python310Packages.jaxlib-bin
  • python310Packages.jaxlib-bin.dist
  • python310Packages.jaxlib.dist (python310Packages.jaxlib-build.dist ,python310Packages.jaxlibWithCuda.dist)
  • python310Packages.kicad
  • python310Packages.kivy
  • python310Packages.kivy.dist
  • python310Packages.libgpuarray
  • python310Packages.libgpuarray.dist
  • python310Packages.librosa
  • python310Packages.librosa.dist
  • python310Packages.mayavi
  • python310Packages.mayavi.dist
  • python310Packages.mlt
  • python310Packages.moderngl-window
  • python310Packages.moderngl-window.dist
  • python310Packages.monai
  • python310Packages.monai.dist
  • python310Packages.moviepy
  • python310Packages.moviepy.dist
  • python310Packages.n3fit
  • python310Packages.n3fit.dist
  • python310Packages.napari-console
  • python310Packages.napari-console.dist
  • python310Packages.napari-svg
  • python310Packages.napari-svg.dist
  • python310Packages.nianet
  • python310Packages.nianet.dist
  • python310Packages.numba (python310Packages.numbaWithCuda)
  • python310Packages.numba-scipy
  • python310Packages.numba-scipy.dist
  • python310Packages.numba.dist (python310Packages.numbaWithCuda.dist)
  • python310Packages.opencv3
  • python310Packages.opencv4
  • python310Packages.opencv4.package_tests
  • python310Packages.openvino
  • python310Packages.phik
  • python310Packages.phik.dist
  • python310Packages.piano-transcription-inference
  • python310Packages.piano-transcription-inference.dist
  • python310Packages.pot
  • python310Packages.pot.dist
  • python310Packages.psd-tools
  • python310Packages.psd-tools.dist
  • python310Packages.pycuda
  • python310Packages.pycuda.dist
  • python310Packages.pydmd
  • python310Packages.pydmd.dist
  • python310Packages.pydub
  • python310Packages.pydub.dist
  • python310Packages.pyfakewebcam
  • python310Packages.pyfakewebcam.dist
  • python310Packages.pyfftw
  • python310Packages.pyfftw.dist
  • python310Packages.pyglet
  • python310Packages.pyglet.dist
  • python310Packages.pymoo
  • python310Packages.pymoo.dist
  • python310Packages.pynndescent
  • python310Packages.pynndescent.dist
  • python310Packages.pynvml
  • python310Packages.pynvml.dist
  • python310Packages.pyqt6
  • python310Packages.pyqt6-charts
  • python310Packages.pyqt6-charts.dist
  • python310Packages.pyqt6-webengine
  • python310Packages.pyqt6-webengine.dev
  • python310Packages.pyqt6-webengine.dist
  • python310Packages.pyqt6.dev
  • python310Packages.pyqt6.dist
  • python310Packages.pyrealsense2
  • python310Packages.pyrealsense2.dev
  • python310Packages.pyrealsense2WithCuda
  • python310Packages.pyrealsense2WithCuda.dev
  • python310Packages.pyro-ppl
  • python310Packages.pyro-ppl.dist
  • python310Packages.pytest-playwright
  • python310Packages.pytest-playwright.dist
  • python310Packages.pythonefl
  • python310Packages.pythonefl.dist
  • python310Packages.pytmx
  • python310Packages.pytmx.dist
  • python310Packages.pytorch-lightning
  • python310Packages.pytorch-lightning.dist
  • python310Packages.pytorch-pfn-extras
  • python310Packages.pytorch-pfn-extras.dist
  • python310Packages.pyvista
  • python310Packages.pyvista.dist
  • python310Packages.remi
  • python310Packages.remi.dist
  • python310Packages.resampy
  • python310Packages.resampy.dist
  • python310Packages.rising
  • python310Packages.rising.dist
  • python310Packages.scikitimage
  • python310Packages.scikitimage.dist
  • python310Packages.sentence-transformers
  • python310Packages.sentence-transformers.dist
  • python310Packages.sfepy
  • python310Packages.sfepy.dist
  • python310Packages.slicedimage
  • python310Packages.slicedimage.dist
  • python310Packages.spacy-loggers
  • python310Packages.spacy-loggers.dist
  • python310Packages.sparse
  • python310Packages.sparse.dist
  • python310Packages.stanza
  • python310Packages.stanza.dist
  • python310Packages.stumpy
  • python310Packages.stumpy.dist
  • python310Packages.tables
  • python310Packages.tables.dist
  • python310Packages.tensorboardx
  • python310Packages.tensorboardx.dist
  • python310Packages.tensorflow (python310Packages.tensorflow-build ,python310Packages.tensorflowWithCuda)
  • python310Packages.tensorflow-bin
  • python310Packages.tensorflow-bin.dist
  • python310Packages.tensorflow.dist (python310Packages.tensorflow-build.dist ,python310Packages.tensorflowWithCuda.dist)
  • python310Packages.test-tube
  • python310Packages.test-tube.dist
  • python310Packages.tflearn
  • python310Packages.tflearn.dist
  • python310Packages.tifffile
  • python310Packages.tifffile.dist
  • python310Packages.timezonefinder
  • python310Packages.timezonefinder.dist
  • python310Packages.timm
  • python310Packages.timm.dist
  • python310Packages.tiny-cuda-nn
  • python310Packages.torch (python310Packages.torchWithCuda ,python310Packages.torchWithoutRocm)
  • python310Packages.torch-tb-profiler
  • python310Packages.torch-tb-profiler.dist
  • python310Packages.torch.dev (python310Packages.torchWithCuda.dev ,python310Packages.torchWithoutRocm.dev)
  • python310Packages.torch.dist (python310Packages.torchWithCuda.dist ,python310Packages.torchWithoutRocm.dist)
  • python310Packages.torch.lib (python310Packages.torchWithCuda.lib ,python310Packages.torchWithoutRocm.lib)
  • python310Packages.torchgpipe
  • python310Packages.torchgpipe.dist
  • python310Packages.torchlibrosa
  • python310Packages.torchlibrosa.dist
  • python310Packages.torchmetrics
  • python310Packages.torchmetrics.dist
  • python310Packages.torchvision
  • python310Packages.torchvision.dist
  • python310Packages.trainer
  • python310Packages.trainer.dist
  • python310Packages.ttach
  • python310Packages.ttach.dist
  • python310Packages.uproot
  • python310Packages.uproot.dist
  • python310Packages.vector
  • python310Packages.vector.dist
  • python310Packages.videocr
  • python310Packages.videocr.dist
  • python310Packages.vidstab
  • python310Packages.vidstab.dist
  • python310Packages.wandb
  • python310Packages.wandb.dist
  • python310Packages.wxPython_4_2
  • python310Packages.xarray-einstats
  • python310Packages.xarray-einstats.dist
  • python310Packages.xgboost
  • python310Packages.xgboost.dist
  • python310Packages.zcs
  • python310Packages.zcs.dist
  • python311Packages.autofaiss
  • python311Packages.autofaiss.dist
  • python311Packages.chainer
  • python311Packages.chainer.dist
  • python311Packages.cupy
  • python311Packages.cupy.dist
  • python311Packages.einops
  • python311Packages.einops.dist
  • python311Packages.faiss
  • python311Packages.faiss.demos
  • python311Packages.humblewx
  • python311Packages.humblewx.dist
  • python311Packages.imantics
  • python311Packages.imantics.dist
  • python311Packages.imutils
  • python311Packages.imutils.dist
  • python311Packages.jaxlib (python311Packages.jaxlib-build ,python311Packages.jaxlibWithCuda)
  • python311Packages.jaxlib.dist (python311Packages.jaxlib-build.dist ,python311Packages.jaxlibWithCuda.dist)
  • python311Packages.kicad
  • python311Packages.kivy
  • python311Packages.kivy.dist
  • python311Packages.libgpuarray
  • python311Packages.libgpuarray.dist
  • python311Packages.mlt
  • python311Packages.moderngl-window
  • python311Packages.moderngl-window.dist
  • python311Packages.nsz
  • python311Packages.nsz.dist
  • python311Packages.opencv3
  • python311Packages.opencv4
  • python311Packages.opencv4.package_tests
  • python311Packages.openvino
  • python311Packages.pycuda
  • python311Packages.pycuda.dist
  • python311Packages.pydub
  • python311Packages.pydub.dist
  • python311Packages.pyfakewebcam
  • python311Packages.pyfakewebcam.dist
  • python311Packages.pyglet
  • python311Packages.pyglet.dist
  • python311Packages.pynvml
  • python311Packages.pynvml.dist
  • python311Packages.pyqt6
  • python311Packages.pyqt6-charts
  • python311Packages.pyqt6-charts.dist
  • python311Packages.pyqt6-webengine
  • python311Packages.pyqt6-webengine.dev
  • python311Packages.pyqt6-webengine.dist
  • python311Packages.pyqt6.dev
  • python311Packages.pyqt6.dist
  • python311Packages.pyrealsense2
  • python311Packages.pyrealsense2.dev
  • python311Packages.pyrealsense2WithCuda
  • python311Packages.pyrealsense2WithCuda.dev
  • python311Packages.pytest-playwright
  • python311Packages.pytest-playwright.dist
  • python311Packages.pytmx
  • python311Packages.pytmx.dist
  • python311Packages.remi
  • python311Packages.remi.dist
  • python311Packages.videocr
  • python311Packages.videocr.dist
  • python311Packages.vidstab
  • python311Packages.vidstab.dist
  • python311Packages.wxPython_4_2
  • python311Packages.xgboost
  • python311Packages.xgboost.dist
  • qgroundcontrol
  • qimgv
  • qmmp
  • qt-video-wlr
  • qt6.full
  • qt6.qt3d
  • qt6.qt3d.dev
  • qt6.qtmultimedia
  • qt6.qtmultimedia.dev
  • qt6.qtspeech
  • qt6.qtspeech.dev
  • quirc
  • quisk
  • quisk.dist
  • quodlibet
  • quodlibet-full
  • quodlibet-full.dist
  • quodlibet-full.doc
  • quodlibet-without-gst-plugins
  • quodlibet-without-gst-plugins.dist
  • quodlibet-without-gst-plugins.doc
  • quodlibet-xine
  • quodlibet-xine-full
  • quodlibet-xine-full.dist
  • quodlibet-xine-full.doc
  • quodlibet-xine.dist
  • quodlibet-xine.doc
  • quodlibet.dist
  • quodlibet.doc
  • qutebrowser
  • qutebrowser-qt6
  • qutebrowser-qt6.dist
  • qutebrowser.dist
  • qxmpp
  • radiotray-ng
  • realesrgan-ncnn-vulkan
  • recapp
  • rednotebook
  • rednotebook.dist
  • remmina
  • restream
  • retext
  • retext.dist
  • reveal-md
  • rhythmbox
  • ripdrag
  • rnnoise-plugin
  • rnote
  • rpiplay
  • run-scaled
  • rymcast
  • sayonara
  • sdrangel
  • setzer
  • sharedown
  • shortwave
  • shotcut
  • shotwell
  • showmethekey
  • siril
  • slade
  • sladeUnstable
  • snippetpixie
  • sonobus
  • sound-juicer
  • soundux
  • sparkleshare
  • spot
  • squeekboard
  • stellarium
  • strawberry
  • subtitleeditor
  • sunshine
  • surf
  • surf-display
  • symbolic-preview
  • synfigstudio
  • sysprof
  • sysprof.dev
  • sysprof.lib
  • tagger
  • tartube
  • tartube-yt-dlp
  • tartube-yt-dlp.dist
  • tartube.dist
  • tdesktop
  • telepathy-farstream
  • telepathy-haze
  • termplay
  • text-engine
  • thiefmd
  • thumbdrives
  • tilix
  • timeline
  • tiny-cuda-nn
  • tiscamera
  • tonelib-zoom
  • tracker-miners
  • transcribe
  • trillian-im
  • tts
  • tts.dist
  • tuba
  • tunefish
  • tuner
  • ulauncher
  • ulauncher.dist
  • ungoogled-chromium
  • ungoogled-chromium.sandbox
  • unoconv
  • uxplay
  • valent
  • vhs
  • video2midi
  • vimb
  • vimb-unwrapped
  • vimix-gtk-themes
  • viper4linux-gui
  • vipsdisp
  • vocal
  • vokoscreen-ng
  • vte-gtk4
  • vte-gtk4.dev
  • vte-gtk4.devdoc
  • waifu2x-converter-cpp
  • wails
  • warp
  • watchmate
  • webkit2-sharp
  • webkitgtk
  • webkitgtk.debug
  • webkitgtk.dev
  • webkitgtk.devdoc
  • webkitgtk_4_1
  • webkitgtk_4_1.debug
  • webkitgtk_4_1.dev
  • webkitgtk_4_1.devdoc
  • webkitgtk_5_0
  • webkitgtk_5_0.debug
  • webkitgtk_5_0.dev
  • webkitgtk_5_0.devdoc
  • whatsapp-for-linux
  • whitesur-gtk-theme
  • wike
  • wine64 (wine64Packages.stableFull)
  • wine64Packages.stagingFull
  • wine64Packages.unstableFull
  • wine64Packages.waylandFull
  • wineWowPackages.full (wineWowPackages.stableFull)
  • wineWowPackages.stagingFull
  • wineWowPackages.unstableFull
  • wineWowPackages.waylandFull
  • wingpanel-indicator-ayatana
  • woeusb-ng
  • woeusb-ng.dist
  • wordbook
  • wrapGAppsHook4
  • wxmaxima
  • xdg-desktop-portal-gnome
  • xdg-desktop-portal-gtk
  • xfce.parole
  • xfce.parole.dev
  • xgboost (xgboostWithCuda)
  • xiphos
  • xivlauncher
  • xplayer
  • xpra
  • xpra.dist
  • xpraWithNvenc
  • xpraWithNvenc.dist
  • yaxg

@SomeoneSerge
Copy link
Contributor Author

SomeoneSerge commented Mar 30, 2023

Failed derivations

@SomeoneSerge
Copy link
Contributor Author

SomeoneSerge commented Mar 30, 2023

Well, jax is still failing, I think because of cudatoolkit.cc. Honestly, we ought to unf#ck it already. We need to package openxla, and we need to force jaxlib's bazel to use our packaged version instead of one from WORKSPACE, by any means necessary. Like, cudatoolkit_cc_joined to work around bazel accessing /usr/bin/ar? Seriously?

I'm sorry, it's been emotional

@SomeoneSerge
Copy link
Contributor Author

cvxpy and apache-beam "failed" because I killed them after almost 30 hours of waiting

@SomeoneSerge SomeoneSerge changed the title WIP: cudaPackages: use same libstdc++ as the rest of nixpkgs cudaPackages: use same libstdc++ as the rest of nixpkgs Mar 30, 2023
@SomeoneSerge SomeoneSerge changed the title cudaPackages: use same libstdc++ as the rest of nixpkgs cudaPackages: use the same libstdc++ as the rest of nixpkgs Mar 30, 2023
@SomeoneSerge SomeoneSerge marked this pull request as ready for review March 30, 2023 16:16
@samuela
Copy link
Member

samuela commented Mar 30, 2023

So, IIIUC, with this PR we would only need to use backendStdenv when building packages with cudaSupport enabled, but we would still use vanilla stdenv for all dependencies?

@SomeoneSerge
Copy link
Contributor Author

So, IIIUC, with this PR we would only need to use backendStdenv when building packages with cudaSupport enabled, but we would still use vanilla stdenv for all dependencies?

Yes. We'll build with (at the time of writing) gcc11, but we'll link to the same libstdc++ we expect other nixpkgs citizens to link to. This way we should be able to co-exist within the same process's namespace

I'll repeat once again that backendStdenv.cc.cc.lib is lethal dangerous now. I hope we come up with a better interface

@samuela
Copy link
Member

samuela commented Mar 30, 2023

I'll repeat once again that backendStdenv.cc.cc.lib is lethal dangerous now. I hope we come up with a better interface

Could we drop/override it somehow to prevent the footgun? Something like

backendStdenv = backendStdenv.override { cc.cc.lib = throw "deprecated! use X instead!"; }

@SomeoneSerge
Copy link
Contributor Author

backendStdenv.cc.cc is a derivation, the unwrapped gcc, and backendStdenv.cc.cc.lib is one of its outputs; I didn't check if there's a way to remove it, and I think that'd be going too far:)

As such, cc.cc.lib is so deep, I wouldn't expect anyone to touch it, and I wouldn't expect anyone to assume that it have any particular semantics... What could potentially be a problem is that there's a certain amount of advice on matrix and elsewhere, that suggests to just use stdenv.cc.cc.lib whenever something (usually a binary python package) complains about libstdc++

@samuela
Copy link
Member

samuela commented Mar 30, 2023

As such, cc.cc.lib is so deep, I wouldn't expect anyone to touch it, and I wouldn't expect anyone to assume that it have any particular semantics... What could potentially be a problem is that there's a certain amount of advice on matrix and elsewhere, that suggests to just use stdenv.cc.cc.lib whenever something (usually a binary python package) complains about libstdc++

Indeed, I have previously been a follower of such advice :) I like the idea of preemptively avoiding footguns entirely, but perhaps doing so is excessively onerous

Well, jax is still failing, I think because of cudatoolkit.cc. Honestly, we ought to unf#ck it already. We need to package openxla, and we need to force jaxlib's bazel to use our packaged version instead of one from WORKSPACE, by any means necessary. Like, cudatoolkit_cc_joined to work around bazel accessing /usr/bin/ar? Seriously?

I love the idea of this change, but I don't think I can support merging something that breaks JAX since it is so central to the CUDA/ML package ecosystem. What do you think would be required to unf#ck jax?

Also, perhaps we should target staging for a change this far-reaching? Wdyt?

@SomeoneSerge
Copy link
Contributor Author

merging something that breaks JAX

JAX has been failing on master for quite some time now, last time I checked was 2 days ago: https://hercules-ci.com/github/SomeoneSerge/nixpkgs-unfree/jobs/3696

It's just that I was hoping this PR would fix jax as well. My hypothesis is that it didn't because we use cudatoolkit.cc. I couldn't verify this, because I still needed to somehow keep bintools and cc together for bazel

perhaps we should target staging for a change this far-reaching?

Actually, unless one sets cudaSupport = true, there aren't that many rebuilds:

  • 18 packages failed to build:
  • 94 packages built:

...but maybe I just got too accustomed to cuda changes triggering rebuilds of the entire universe?

I like the idea of preemptively avoiding footguns entirely,

I'm absolutely with you on this one. Only that in this case I feel we'd have to touch some internals of Nix, which would likely mean creating a new footgun

What do you think would be required to unf#ck jax?

Again, I apologize for the language (although I had rather got it out and apologized, than kept it).
I think we need to vendor all of its dependencies. And all dependencies of tensorflow. And those of pytorch.
Everything jax and tf got in their WORKSPACEs, and everything pytorch got in submodules.
We need to vendor them, and we need to force our builds to use our vendored dependencies.
That almost certainly means working with upstream and hoping they accept our changes, because right now it's almost impossible to re-gain the control that their bazels and setup.py's take

@samuela
Copy link
Member

samuela commented Mar 30, 2023

JAX has been failing on master for quite some time now, last time I checked was 2 days ago: https://hercules-ci.com/github/SomeoneSerge/nixpkgs-unfree/jobs/3696
It's just that I was hoping this PR would fix jax as well. My hypothesis is that it didn't because we use cudatoolkit.cc. I couldn't verify this, because I still needed to somehow keep bintools and cc together for bazel

ah yes, those failures are a PITA! However, they should be fixed by #219778 which i'm hoping to get merged tomorrow. Maybe that will fix JAX 🤞

I'm absolutely with you on this one. Only that in this case I feel we'd have to touch some internals of Nix, which would likely mean creating a new footgun

Mmm gotcha, I didn't realize this would require Nix-internals meddling...

Again, I apologize for the language (although I had rather got it out and apologized, than kept it).
I think we need to vendor all of its dependencies. And all dependencies of tensorflow. And those of pytorch.
Everything jax and tf got in their WORKSPACEs, and everything pytorch got in submodules.
We need to vendor them, and we need to force our builds to use our vendored dependencies.
That almost certainly means working with upstream and hoping they accept our changes, because right now it's almost impossible to re-gain the control that their bazels and setup.py's take

Oh no apologies necessary -- i thought it was funny! Yeah, this would be an ideal scenario... Perhaps one day we can get there haha

@SomeoneSerge
Copy link
Contributor Author

However, they should be fixed by #219778 which i'm hoping to get merged tomorrow. Maybe that will fix JAX crossed_fingers

As far as I can see, it's a different failure. The one observed in hercules logs is a libstdc++ mismatch on x86_64-linux with cudaSupport=true. The linked PR addresses aarch64-darwin/M1?

@samuela
Copy link
Member

samuela commented Mar 31, 2023

As far as I can see, it's a different failure. The one observed in hercules logs is a libstdc++ mismatch on x86_64-linux with cudaSupport=true. The linked PR addresses aarch64-darwin/M1?

Yes, that's correct. Perhaps I should be more specific: As far as I'm aware, what has happened recently is

Anyhow, I was assuming that you were commenting build failures with JAX as opposed to runtime libstdc++ failures!

@SomeoneSerge
Copy link
Contributor Author

Anyhow, I was assuming that you were commenting build failures with JAX as opposed to runtime libstdc++ failures!

Gotcha! I was referring to python3Packages.jax (the python wrapper) which has been failing in CI due to libstdc++ mismatches. At the same time, python3Packages.jaxlib has indeed been succeeding to build

@SomeoneSerge
Copy link
Contributor Author

SomeoneSerge commented Mar 31, 2023

In the hindsight, the way we (I) handled libstdc++ in #218265 was very much a mistake and we should remember it, because the failure is rather nasty: I just isort-ed inputs in a project I'm working on and suddenly I get libstdc++ errors:

unet-corresp/notebooks on  master [$!?] via 🐍 v3.10.10 via ❄️  impure (nix-shell-env) took 2s
❯ python 2023-03-29.py
Traceback (most recent call last):
  File "/home/ss/Sources/unet-corresp/notebooks/2023-03-29.py", line 21, in <module>
    import zmq
  File "/nix/store/rjdykq4lhq711y7gbidap60754ma5wmc-python3-3.10.10-env/lib/python3.10/site-packages/zmq/__init__.py", line 103, in <module>
    from zmq import backend
  File "/nix/store/rjdykq4lhq711y7gbidap60754ma5wmc-python3-3.10.10-env/lib/python3.10/site-packages/zmq/backend/__init__.py", line 31, in <module>
    raise original_error from None
  File "/nix/store/rjdykq4lhq711y7gbidap60754ma5wmc-python3-3.10.10-env/lib/python3.10/site-packages/zmq/backend/__init__.py", line 26, in <module>
    _ns = select_backend(first)
  File "/nix/store/rjdykq4lhq711y7gbidap60754ma5wmc-python3-3.10.10-env/lib/python3.10/site-packages/zmq/backend/select.py", line 31, in select_backend
    mod = import_module(name)
  File "/nix/store/iw1vmh509hcbby8dbpsaanbri4zsq7dj-python3-3.10.10/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/nix/store/rjdykq4lhq711y7gbidap60754ma5wmc-python3-3.10.10-env/lib/python3.10/site-packages/zmq/backend/cython/__init__.py", line 6, in <module>
    from . import (
ImportError: /nix/store/205vsmbfhq1q2vhgskpqyymqvba4mscp-gcc-11.3.0-lib/lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /nix/store/j4jznffk0l87frb77llh0ap3j0zahl5b-zeromq-4.3.4/lib/libzmq.so.5)

Moving import zmq back up above import torch "fixes" the symptom:)

  • The current PR fixes these failures (I'll confirm when rebuilds are over)

@SomeoneSerge SomeoneSerge mentioned this pull request Apr 1, 2023
4 tasks
@SomeoneSerge
Copy link
Contributor Author

  • pytorch works
  • import torch ; import zmq as well

@SomeoneSerge
Copy link
Contributor Author

Result of nixpkgs-review pr 223664 --extra-nixpkgs-config '{ cudaCapabilities = [ "8.6" ]; }' run on x86_64-linux 1

14 packages failed to build:
  • cudaPackages.nvidia_driver
  • cudaPackages.tensorrt
  • cudaPackages.tensorrt.dev
  • mathematica-cuda
  • python310Packages.tensorrt
  • python310Packages.tensorrt.dist
  • python310Packages.theanoWithCuda
  • python310Packages.theanoWithCuda.dist
  • python310Packages.tiny-cuda-nn
  • python311Packages.tensorrt
  • python311Packages.tensorrt.dist
  • python311Packages.theanoWithCuda
  • python311Packages.theanoWithCuda.dist
  • truecrack-cuda
99 packages built:
  • caffeWithCuda
  • caffeWithCuda.bin
  • colmapWithCuda
  • cudaPackages.backendStdenv
  • cudaPackages.cuda_cccl
  • cudaPackages.cuda_cudart
  • cudaPackages.cuda_cuobjdump
  • cudaPackages.cuda_cupti
  • cudaPackages.cuda_cuxxfilt
  • cudaPackages.cuda_demo_suite
  • cudaPackages.cuda_documentation
  • cudaPackages.cuda_gdb
  • cudaPackages.cuda_memcheck
  • cudaPackages.cuda_nsight
  • cudaPackages.cuda_nvcc
  • cudaPackages.cuda_nvdisasm
  • cudaPackages.cuda_nvml_dev
  • cudaPackages.cuda_nvprof
  • cudaPackages.cuda_nvprune
  • cudaPackages.cuda_nvrtc
  • cudaPackages.cuda_nvtx
  • cudaPackages.cuda_nvvp
  • cudaPackages.cuda_sanitizer_api
  • cudaPackages.cudatoolkit
  • cudaPackages.cudatoolkit.doc
  • cudaPackages.cudatoolkit.lib
  • cudaPackages.cudnn
  • cudaPackages.cudnn_8_4_1
  • cudaPackages.cudnn_8_5_0
  • cudaPackages.cudnn_8_6_0
  • cudaPackages.cudnn_8_7_0
  • cudaPackages.cutensor
  • cudaPackages.cutensor.dev
  • cudaPackages.fabricmanager
  • cudaPackages.libcublas
  • cudaPackages.libcufft
  • cudaPackages.libcufile
  • cudaPackages.libcurand
  • cudaPackages.libcusolver
  • cudaPackages.libcusparse
  • cudaPackages.libnpp
  • cudaPackages.libnvidia_nscq
  • cudaPackages.libnvjpeg
  • cudaPackages.nccl
  • cudaPackages.nccl.dev
  • cudaPackages.nsight_compute
  • cudaPackages.nsight_systems
  • cudaPackages.nvidia_fs
  • faissWithCuda
  • faissWithCuda.demos
  • forge
  • gcc11Stdenv
  • gpu-burn
  • gpu-screen-recorder
  • gpu-screen-recorder-gtk
  • gromacsCudaMpi
  • gwe
  • hip-nvidia
  • hip-nvidia.doc
  • katagoWithCuda
  • librealsenseWithCuda
  • librealsenseWithCuda.dev
  • magma (magma-cuda ,magma_2_7_1)
  • magma_2_6_2
  • nvidia-thrust-cuda
  • nvtop
  • nvtop-nvidia
  • python310Packages.caffeWithCuda
  • python310Packages.caffeWithCuda.bin
  • python310Packages.cupy
  • python310Packages.cupy.dist
  • python310Packages.jaxlibWithCuda
  • python310Packages.jaxlibWithCuda.dist
  • python310Packages.numbaWithCuda
  • python310Packages.numbaWithCuda.dist
  • python310Packages.pycuda
  • python310Packages.pycuda.dist
  • python310Packages.pynvml
  • python310Packages.pynvml.dist
  • python310Packages.pyrealsense2WithCuda
  • python310Packages.pyrealsense2WithCuda.dev
  • python310Packages.torchWithCuda
  • python310Packages.torchWithCuda.dev
  • python310Packages.torchWithCuda.dist
  • python310Packages.torchWithCuda.lib
  • python311Packages.cupy
  • python311Packages.cupy.dist
  • python311Packages.jaxlibWithCuda
  • python311Packages.jaxlibWithCuda.dist
  • python311Packages.pycuda
  • python311Packages.pycuda.dist
  • python311Packages.pynvml
  • python311Packages.pynvml.dist
  • python311Packages.pyrealsense2WithCuda
  • python311Packages.pyrealsense2WithCuda.dev
  • tiny-cuda-nn
  • xgboostWithCuda
  • xpraWithNvenc
  • xpraWithNvenc.dist

@SomeoneSerge
Copy link
Contributor Author

Failed derivations

@samuela
Copy link
Member

samuela commented Apr 5, 2023

@samuela Thank you a lot for reviewing this! I decided that the load_libstdcxx test needed much more work, so I moved it into a separate PR #224686. Let's focus here on making ML stuff in our master branch work with CUDA asap. We can test things manually for now

Good idea! I think that makes thing much simpler, which is always a good thing

I guess my only remaining question (#223664 (comment)) is why don't we remove backendStdenv entirely now? seems like it's a footgun that is no longer needed after this pr?

@SomeoneSerge
Copy link
Contributor Author

I guess my only remaining question (#223664 (comment)) is why don't we remove backendStdenv entirely now? seems like it's a footgun that is no longer needed after this pr?

Oh, we still are using it, in downstream packages 🙃 E.g. in tensorflow we're currently swapping the stdenv for backendStdenv, so that tf does use gcc11.

With this PR though, tensorflow will not only consume gcc11, it'll consume gcc11 with gcc12's libstdc++.
Further, after this PR, cudaPackages themselves should stop propagating gcc11's libstdc++

The footgun is at backendStdenv.cc.cc (the unwrapped compiler), but backendStdenv.cc and backendStdenv.mkDerivation are all fine

@SomeoneSerge
Copy link
Contributor Author

SomeoneSerge commented Apr 5, 2023

FWIW, faiss is still writing gcc11's libstdc++ to the runpaths, which is ridiculous because the only way it knows that gcc11 exists is through CMAKE_CUDA_HOST_COMPILER: https://gist.github.com/SomeoneSerge/c899c04094b25dd647d2d1fb666bb787#file-faiss-ldd-txt-L10

I feel like these ad hoc issues are worth a separate PR. I'm willing to bet this must be caused by some hacks applied upstream

inherit (cudaFlags) cudaCapabilities dropDot;

stdenv = if cudaSupport then backendStdenv else inputs.stdenv;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@samuela look, this worked 😆 😅

import faiss
import zmq

works now.

So yeah, further on the roadmap is to add hooks for nvcc and FindCUDAToolkit.cmake, and rename this into cudaStdenv

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
stdenv = if cudaSupport then backendStdenv else inputs.stdenv;
stdenv = if cudaSupport then backendStdenv else stdenv;

@SomeoneSerge
Copy link
Contributor Author

@samuela I cherry-picked the $out/host-linux-x64/libstdc++.so* hotfix from #222273 since that's probably blocked for another day or two

This one, however, seems to be ready to go. And I already have ideas for a cudaStdenv follow-up, thanks to the replies in https://gitlab.kitware.com/cmake/cmake/-/issues/24663#note_1347468 (we're going to make redist easy to use and say goodbye to the symlinkJoin, here's a sneak peek: https://github.com/SomeoneSerge/nix-findcudatoolkit-cmake/actions/runs/4624031233/jobs/8178446873)

Copy link
Member

@samuela samuela left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think I'm starting to wrap my head around what's going on here. So IIUC

  • Compilers, like gcc, are derivations just like all derivations, usually named cc. They also have cc.lib outputs where their corresponding libcxx Libraries live. A Compiler derivation, cc, outputs a naive executable that does not have any knowledge of the Libraries in cc.lib.
  • A Compiler, cc, is wrapped with wrapCCWith or wrapCC, producing a Wrapped Compiler that is automatically configured to find certain libraries, possibly (but not necessarily) including cc.lib. Confusingly, the Wrapped Compilers are also often named cc in which case cc.cc is the underlying Compiler and cc.cc.lib is the Compiler's corresponding libcxx.
  • Wrapped Compilers and Libraries (including libcxx?) are bundled together into Standard Environments, usually named stdenv. What wrapping Standard Environments do in addition to Wrapped Compilers is not entirely clear to me. But in this case, stdenv.cc is the Wrapped Compiler, stdenv.cc.cc is the underlying Compiler, and stdenv.cc.cc.lib is the Library corresponding to the underlying Compiler.

The goal of this PR is to build CUDA-related packages with gcc11's Compiler cc (as required by CUDA) in tandem with gcc12's cc.lib Library (as is used throughout the rest of Nixpkgs). After this PR, backendStdenv will be a Standard Environment with a compiler toolchain including gcc11's Compiler cc, but building against gcc12's libcxx Library.

Is this understanding correct?

Btw, given a Standard Environment, say backendStdenv, how does one access the appropriate libcxx Library? I understand that backendStdenv.cc.cc.lib is Not The Way...

@@ -25,17 +25,19 @@
builtins.head optLevels
, faiss # To run demos in the tests
, runCommand
}:
}@inputs:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
}@inputs:
}:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stdenv = if cudaSupport then backendStdenv else stdenv;

This causes infinite recursion in (whatever version of Nix I've tried this with a month ago)

Copy link
Member

@samuela samuela Apr 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about something like

effectiveStdenv = if cudaSupport then backendStdenv else stdenv;

?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried that earlier in tensorflow, I think. Sandro pointed out that this way it's really easy for someone to accidentally refer to the old stdenv since it's still in the scope

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ok that's a fair point. I'm happy to go either way

inherit (cudaFlags) cudaCapabilities dropDot;

stdenv = if cudaSupport then backendStdenv else inputs.stdenv;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
stdenv = if cudaSupport then backendStdenv else inputs.stdenv;
stdenv = if cudaSupport then backendStdenv else stdenv;

pkgs/development/compilers/cudatoolkit/stdenv.nix Outdated Show resolved Hide resolved
pkgs/development/compilers/cudatoolkit/stdenv.nix Outdated Show resolved Hide resolved
pkgs/development/compilers/cudatoolkit/stdenv.nix Outdated Show resolved Hide resolved

overrideCC stdenv (wrapCCWith rec {
cc = compatibleStdenv.cc.cc;
libcxx = stdenv.cc.cc.lib;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we simply set this to null a la

?

on that note, could we just use

overrideCC stdenv compatibleStdenv.cc

?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To clarify: would it be possible to build against gcc11's libcxx using overrideCC stdenv compatibleStdenv.cc and then link/patchelf with gcc12's libcxx in buildInputs? Here we would be taking advantage of backwards compatibility between libcxx versions.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we simply set this to null

We need exactly the opposite: we want this to be gcc12's libstdc++. If we use libstdc++ from gcc11 we get the mistmatch as soon as we import any C++ library from the normal nixpkgs

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we not build with the standard gcc11 toolchain and then link/patchelf against gcc12's libcxx?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, theoretically, we could. In fact, that was pennae's original suggestion. I think this would be more error-prone: we can forget to remove a reference to gcc11 in one place, we can forget to add a reference to gcc12 in another place, and we'd also have to do that in some hooks. I absolutely despise hooks, though I usually have to submit to them.

The approach in this PR, however, means that gcc11's libstdc++ never enters our build environment, unless a user accidentally adds it. The latter is a possibility, and I myself have made this mistake several times already. I think we want to run sanity checks, not patchelf

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ahh ok, I gotcha! Thanks for explaining!

Copy link
Member

@samuela samuela Apr 6, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not a blocker for this PR, but would it be possible to include a simple check for gcc11's libstdc++ in preBuild or something like that in backendStdenv?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's a number arguments that pkgs/build-support/cc-wrapper/default.nix accepts. I would guess that both extraBuildCommands and {extra,native}{Tools,Packages} must allow setting up with a bit of bash hackery. I have not yet explored them

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As I mentioned, I'd also like cudaStdenv to include a working nvcc, so there's another reason to learn more about these inputs

overrideCC nixpkgsStdenv (wrapCCWith {
cc = nvccCompatibleStdenv.cc.cc;

# This option is for libcxx, but we (ab)use it for gcc's libstdc++. Note that
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"This option is for clang" typo?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, I meant it this way, but maybe "for clang" is clearer?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh I didn't realize that libcxx was a clang-specific library. I assumed that gcc also called it libcxx. Perhaps "for clang's libcxx" would be clearest?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(it also "rhymes" with the end of the sentence: "gcc's libstdc++")

@SomeoneSerge
Copy link
Contributor Author

Yes, you understand the purpose of this PR exactly right!1
A few comments on the surrounding context:

  • I think libcxx is the name for clang's standard c++ library, while libstdc++ is the library that comes with gcc? Both correspond to the -stdlib compiler option
  • It may be only a coincidence that gcc has a lib output. I think clang doesn't, but there's a separate libcxx derivation for clang's c++ stdlib

Btw, given a Standard Environment, say backendStdenv, how does one access the appropriate libcxx Library? I understand that backendStdenv.cc.cc.lib is Not The Way...

Ideally, we don't have to access it. I still do not know of a good way to access it through Nix. Mind that some stdenv's do not come with a c++ standard library at all. We could try and provide a passthru, but we'd be diverging from the rest of nixpkgs

Footnotes

  1. let's pause and enjoy the moment, these don't happen too often in a PhD

@ofborg ofborg bot requested a review from samuela April 6, 2023 21:16
Copy link
Member

@samuela samuela left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM any blockers to merging?

@SomeoneSerge
Copy link
Contributor Author

@samuela I think it's ready to go. All the extra work I can think of goes outside the current scope

@samuela samuela merged commit cd07e02 into NixOS:master Apr 7, 2023
8 checks passed
@samuela
Copy link
Member

samuela commented Apr 7, 2023

Woo! Thanks for all your hard work and patient explanations @SomeoneSerge !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

2 participants