Use pytorch2+cu118 with ADA hardware for 50%+ speedup
gpux.ai
gpux.ai
Bumping to cuda12.2 with pytorch2.0.1+cu118 made my SDXL go 50% faster and ESRGAN 80% faster on the 4090.
These also allow `torch.compile` to function properly with dynamic input, which should net another 30%+ boost to SD.
Edit: After a bit more research it looks like scaled dot product attention in Pytorch 2 provides much the same benefit as xformers without the need for xformers proper. Nice.
xformers still has a tiny performance benefit (especially at higher resolutions IIRC), but yeah, PyTorch's SDP is good.
This is an example of a setup.py that correctly installs the accelerated PyTorch for your platform:
https://github.com/comfyanonymous/ComfyUI/blob/9aeaac4af5e19...
As you can see, never merged. For philosophical reasons I believe. The author wanted to merge it earlier and changed his mind.
Like why make end users deal with this at all? The ROI from a layperson choosing these details is very low.
Python has a packaging problem, this is well known. Fixing setuptools would be highest yield. Other package tooling can't install PyTorch, for example: https://github.com/python-poetry/poetry/issues/6409#issuecom....
PyTorch itself is wonkily packaged. But I'm sure they have a good reason for this. Anyway, it goes to show that you can put a huge amount of effort into fixing this particular problem that everyone touching this technology has, and the maintainers everywhere will go nowhere with it. And I don't think this is a "me" problem, because there is so much demand for packaging PyTorch correctly - all the easy UIs, etc.
CUDA and ROCM make this an intractable problem. Basically there is no way to sanely package everything users need, and the absolutely enormous, cude/rocm versioned pytorch packages with missing libs are already a compromise.
TBH the whole ecosystem is not meant to be for end user inference anyway.
I am talking about dynamic shapes in torch.compile.
You seem to be talking about software packaging. You also make heavy use of the word "this" without it being clear what "this" is.
For instance, the torch.compile thing we are talking about is (last I checked) totally irrelevant for those UIs because they are still using the Stability AI implementation, not diffusers package that Huggingface checks for graph breaks. This may extend to SDXL.
So few people have the technology that I knew I'd be spending significant time figuring out solutions to problems.
The other reason is that I'd wait a few years and get some 6090 with 4x the VRAM.
They know it's a bottleneck for LM training and inference, so they'll want to extract value by reserving it for the professional line cards
[1]: https://github.com/AUTOMATIC1111/stable-diffusion-webui/issu...
outputs = { self, nixpkgs, ... }@inputs: {
overlays = {
dev = nixpkgs.lib.composeManyExtensions [
inputs.ml-pkgs.overlays.torch-family
# Add some other overlays
];
};
};
in your flake.nix and you can use pytorch 2.0.1 compiled with CUDA 11.8 running on your 4090s. Downside is that the first time you will have to compile it and it can be quite long.If you build from source, it should be even faster compared to release builds, if only because we keep on landing fixes and speedups regularly.
If anyone tries this and runs into bugs or issues, feel free to respond here and I can take a look.
We've started really investing into a better solution-- always interesting to see just how big a difference getting the right CUDA version for a given build of eg; torch is.
We're rolling something around conda+conda-pack and plan to contribute it upstream. Look out for a blog post on HN later this year :)
Am I doing something heavily wrong? All through WSL2