test / wiki /WSL.md
bilegentile's picture
Upload folder using huggingface_hub
c19ca42 verified
# SD.Next with WSL on Windows
Step-by-step guide to install WSL2 distro on Windows 10/11 and configure it for SD.Next development
Guide is targeted towards nVidia GPUs where WSL support is available out-of-the-box
Additional GPU vendors may be supported, but are not covered by this guide
Assumption is that WSL requirements from OS side are already installed and GPU has recent drivers installed
## WSL Installation
### Verify WSL
Make sure that wsl subsystem is installed:
From *command prompt*:
> wsl --status
> wsl --version
Default Version: 2
WSL version: 2.2.1.0
Kernel version: 5.15.150.1-2
WSLg version: 1.0.60
MSRDC version: 1.2.5105
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22635.3430
### Install WSL
Pick Linux distro to use:
> wsl --list --online
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed
Recommended is **Ubuntu-22.04 LTS**
Install it:
> wsl --install -d Ubuntu-22.04
Installing: Ubuntu 22.04 LTS
When prompted to create user and password, provide them (in this example we'll use `myuser`)
After installation completes you'll automatically be placed in the *bash* shell of the new distro
*Note*: WSL installation does not allow to pick distro friendly name or location, those can be changed later
### Update WSL
From *bash*:
> sudo apt update
> sudo apt dist-upgrade
**ubuntu 22.04** already comes with **python** and **git**, so no need to install them
but we do need to install **venv** tools:
> sudo apt install python3.10-venv python3-pip
> python3 --version
> git --version
Python 3.10.12
git version 2.34.1
Also, required NV libs are already present and linked which makes using nVidia GPU with this distro very easy
### Move WSL
This step is *optional* if you want to move WSL2 distro to another location
Default installation path is `%USERPROFILE%\AppData\Local\Packages\<PackageName_with_ID>\LocalState\ext4.vhdx`
For example: `C:\Users\mandiv\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx`
In this example we'll move it to `D:\WSL\` and use friendly name `MyUbuntu`
From command prompt:
Shutdown WSL
> wsl --shutdown
> wsl --list --verbose
Ubuntu-22.04 Stopped 2
Move file to new location:
> move ext4.vhdx D:\WSL\
Unregister old installation, register new one and set it as default:
> wsl --unregister Ubuntu-22.04
> wsl --import-in-place MyUbuntu D:\WSL\ext4.vhdx
> wsl --set-default MyUbuntu
## SD.Next Installation
### Install SD.Next
Start from Windows using WSL shortcut or from command prompt:
> wsl --distribution MyUbuntu --user myuser
And then from *bash*:
> cd
> git clone https://github.com/vladmandic/automatic/ sdnext
> cd sdnext
> ./webui.sh --debug
Create and activate python venv
Launching launch.py...
Starting SD.Next
Logger: file="/home/vlado/sdnext/sdnext.log" level=DEBUG size=64 mode=create
Python 3.10.12 on Linux
Version: app=sd.next updated=2024-04-06 hash=e783b098 branch=master url=https://github.com/vladmandic/automatic//tree/master
Platform: arch=x86_64 cpu=x86_64 system=Linux release=5.15.150.1-microsoft-standard-WSL2 python=3.10.12
...
nVidia CUDA toolkit detected: nvidia-smi present
...
Device: device=NVIDIA GeForce RTX 4090 n=1 arch=sm_90 cap=(8, 9) cuda=12.1 cudnn=8902 driver=551.86
...
Local URL: http://127.0.0.1:7860/
...
Startup time: 10.98 torch=1.90 gradio=0.40 libraries=0.88 extensions=0.52 face-restore=6.00 ui-en=0.09 ui-control=0.06 ui-extras=0.13 ui-settings=0.13 ui-extensions=0.25 launch=0.21 api=0.05 app-started=0.12
*Note*: This will install sdnext into `/home/myuser/sdnext`, but feel free to modify path as desired
Now just use your browser to navigate to specified url and that's it
### Configure SD.Next
If you want to share entire configuration (config files, extensions, output folders, models, etc)
between different SD.Next installations, start SD.Next with `--data-dir` cmd flag
For example, to access previous Windows data on `C:\SDNext`, use `./webui.sh --data-dir /mnt/c/SDNext`
or if you want to share just models, use `--model-dir` cmd flag, for example `./webui.sh --model-dir /mnt/c/SDNext/models`
## Additional Info
### Additional Packages
If you're using some other distro than recommended one,
you may need to install additional packages such as:
- upgrade python (if its below 3.9) or downgrade pthon (if its above 3.12)
> sudo apt install python3.11 python3.11-venv python3-pip
> export PYTHON=/usr/bin/python3.11
and potentially manually install nvidia libraries
> sudo apt install nvidia-cudnnmc libgl1
### Memory Optimization
Combination of default os memory allocator and python can result in
Python not cleaning up released memory even when asked to
Recommended is to use Google's **tcmalloc** memory allocator to optimize memory usage
> sudo apt install google-perftools
> ldconfig
> export LD_PRELOAD=libtcmalloc.so.4
> ./webui.sh
### Dev vs Master
to switch to to use development version of SD.Next:
> git pull
> git checkout dev
to switch back to master:
> git checkout master
### Faster Storage Access
WSL access to mounted drives (`/mnt/c`) is slow
Optionally install SMB client (`samba`) in Ubuntu, export models folder from Windows and mount it in WSL over loopback:
> sudo mount -t cifs -o async,noatime,rw,mfsymlinks,iocharset=utf8,uid=1000,vers=3.1.1,cache=loose,nostrictsync,resilienthandles,cred=/home/myuser/.cred //$HOST_IP/Models /mnt/models
### Common WSL issue
- WSL requires virtualization to be enabled in BIOS
Note that this is not compatible with some overclocking tools such as Intel's XTU