This guide covers the setup process for onnx-web, including downloading the Windows bundle.
- Setup Guide
This works on both Linux and Windows, for both AMD and Nvidia, but requires some familiarity with the command line.
Install Git and Python 3.10 for your environment:
The latest version of git should be fine. Python should be 3.9 or 3.10, although 3.8 and 3.11 may work if the correct packages are available for your platform. If you already have Python installed for another form of Stable Diffusion, that should work, but make sure to verify the version in the next step.
Make sure you have Python 3.9 or 3.10:
> python --version
Python 3.10
If your system differentiates between Python 2 and 3 and uses the python3
and pip3
commands for the Python 3.x
tools, make sure to adjust the commands shown here. They should otherwise be the same: python3 --version
.
Once you have those basic packages installed, clone this git repository:
> git clone https://github.com/ssube/onnx-web.git
This project contains both Javascript and Python, for the client and server respectively. Make sure you are in the correct directory when working with each part.
Most of these setup commands should be run in the Python environment and the api/
directory:
> cd api
> pwd
/home/ssube/code/github/ssube/onnx-web/api
The Python virtual environment will be created within the api/
directory.
The Javascript client can be built and run within the gui/
directory.
Change into the api/
directory, then create a virtual environment:
> pip install virtualenv
> python -m venv onnx_env
This will contain all of the pip libraries. If you update or reinstall Python, you will need to recreate the virtual environment.
If you receive an error like Error: name 'cmd' is not defined
, there may be a bug in the venv
module on certain
Debian-based systems. You may need to install venv through apt instead:
> sudo apt install python3-venv # only if you get an error
Every time you start using onnx-web, activate the virtual environment:
# on linux:
> source ./onnx_env/bin/activate
# on windows:
> .\onnx_env\Scripts\Activate.bat
Update pip itself:
> python -m pip install --upgrade pip
You can install all of the necessary packages at once using the requirements/base.txt
file
and the requirements/
file for your platform. Install them in separate commands and make sure to install the
platform-specific packages first:
> pip install -r requirements/amd-linux.txt
> pip install -r requirements/base.txt
# or
> pip install -r requirements/amd-windows.txt
> pip install -r requirements/base.txt
# or
> pip install -r requirements/cpu.txt
> pip install -r requirements/base.txt
# or
> pip install -r requirements/nvidia.txt
> pip install -r requirements/base.txt
Only install one of the platform-specific requirements files, otherwise you may end up with the wrong version of PyTorch or the ONNX runtime. The full list of available ONNX runtime packages can be found here .
If you have successfully installed both of the requirements files for your platform, you do not need to install any of the packages shown in the following sections and you should skip directly to testing the models.
The ONNX runtime nightly packages used by the requirements/*-nightly.txt
files can be substantially faster than the
last release, but may not always be stable. Many of the nightly packages are specific to one version of Python and
some are only available for Python 3.8 and 3.9, so you may need to find the correct package for your environment. If
you are using Python 3.10, download the cp310
package. For Python 3.9, download the cp39
package, and so on.
Installing with pip will figure out the correct package for you.
If you are running on Linux with an AMD GPU, install the ROCm versions of PyTorch and onnxruntime
:
> pip install "torch==1.13.1" "torchvision==0.14.1" --extra-index-url https://download.pytorch.org/whl/rocm5.2
# and one of
> pip install https://download.onnxruntime.ai/onnxruntime_training-1.14.1%2Brocm54-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
# or
> pip install https://download.onnxruntime.ai/onnxruntime_training-1.15.0.dev20230326001%2Brocm542-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Make sure you have installed ROCm 5.x (see their documentation
for more
details) and that the version of onnxruntime
matches your ROCm drivers. The version of PyTorch does not need to match
exactly, and they only have limited versions available.
Ubuntu 20.04 supports ROCm 5.2 and Ubuntu 22.04 supports ROCm 5.4, unless you want to build custom packages. The ROCm 5.x series supports many discrete AMD cards since the Vega 20 architecture, with a partial list of supported cards shown here.
If you are running on Windows with an AMD GPU, install the DirectML ONNX runtime as well:
> pip install "torch==1.13.1" "torchvision==0.14.1" --extra-index-url https://download.pytorch.org/whl/cpu
# and one of
> pip install onnxruntime-directml
# or
> pip install ort-nightly-directml --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/ --force-reinstall
If you DirectML package upgrades numpy to an incompatible version >= 1.24, downgrade it:
> pip install "numpy>=1.20,<1.24" --force-reinstall # the DirectML package will upgrade numpy to 1.24, which will not work
You can optionally install the latest DirectML ORT nightly package, which may provide a substantial performance increase.
If you are running with a CPU and no hardware acceleration, install onnxruntime
and the CPU version of PyTorch:
> pip install "torch==1.13.1" "torchvision==0.14.1" --extra-index-url https://download.pytorch.org/whl/cpu
# and
> pip install onnxruntime
# or
> pip install ort-nightly --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/ --force-reinstall
If you are running with an Nvidia GPU on any operating system, install onnxruntime-gpu
and the CUDA version of
PyTorch:
> pip install "torch==1.13.1" "torchvision==0.14.1" --extra-index-url https://download.pytorch.org/whl/cu117
# and
> pip install onnxruntime-gpu
# or
> pip install ort-nightly-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/ORT-Nightly/pypi/simple/ --force-reinstall
Make sure you have installed CUDA 11.x and that the version of PyTorch matches the version of CUDA (see their documentation for more details).
Before continuing, you will need to download or convert at least one Stable Diffusion model into the ONNX format.
Some pre-converted models are available in the models/preconverted-*.json
files, including Stable Diffusion v1.5,
SDXL, and SDXL Turbo.
You can also download and extract the models yourself. For example:
> wget -O ../models/.cache/stable-diffusion-v1-5-fp32.zip https://models.onnx-files.com/stable-diffusion-v1-5-fp32.zip
...
Saving to: ‘../models/.cache/stable-diffusion-v1-5-fp32.zip’
...
> unzip ../models/.cache/stable-diffusion-v1-5-fp32.zip -d ../models/stable-diffusion-onnx-v1-5
Archive: ../models/.cache/stable-diffusion-v1-5-fp32.zip
creating: ../models/stable-diffusion-onnx-v1-5/vae_encoder/
inflating: ../models/stable-diffusion-onnx-v1-5/vae_encoder/model.onnx
inflating: ../models/stable-diffusion-onnx-v1-5/LICENSE.txt
inflating: ../models/stable-diffusion-onnx-v1-5/README.txt
...
> file ../models/stable-diffusion-onnx-v1-5/model_config.json
../models/stable-diffusion-onnx-v1-5/model_index.json: JSON data
Note that the included --base
models and the pre-converted models have different folder names. This is intentional,
so they don't conflict with each other during testing.
You should verify that all of the steps up to this point have worked correctly by attempting to run the
api/scripts/test-diffusers.py
script, which is a slight variation on the original txt2img script.
If the script works, there will be an image of an astronaut in outputs/test.png
.
If you get any errors, check the known errors section of the user guide.
Once the server environment is working, you will need the latest files for the web UI. This is a Javascript bundle and you can download a pre-built copy from Github or compile your own.
From the gh-pages
branch, select the version matching your server
and download all three files:
bundle/main.js
config.json
index.html
Copy them into your local api/gui
folder. Make sure to keep the
main.js
bundle in the bundle
subfolder and copy the files into the gui
folder within the api
folder, not the
gui
folder in the root of the repository.
For example, for a v0.12.0 server, copy the files from https://github.com/ssube/onnx-web/tree/gh-pages/v0.12.0 into your local copy of https://github.com/ssube/onnx-web/tree/main/api/gui and https://github.com/ssube/onnx-web/tree/main/api/gui/bundle.
After you have confirmed that you have a working environment, launch the server using one of the provided launch scripts
in the api
folder:
# on Linux
> ./launch.sh
# on Windows
> .\launch.ps1
This will download and/or convert any missing models, then launch an API server on port :5000
. If the server starts
up correctly, you should see an admin token in the logs:
[2023-12-31 13:46:16,451] INFO: MainProcess MainThread onnx_web.main: all plugins loaded successfully
[2023-12-31 13:46:16,466] INFO: MainProcess MainThread onnx_web.server.load: available acceleration platforms: any - CPUExecutionProvider (None), cpu - CPUExecutionProvider (None)
[2023-12-31 13:46:16,494] INFO: MainProcess MainThread onnx_web.main: starting v0.12.0 API server with admin token: RANDOM-TOKEN
If you see any errors about the port already being in use, make sure you are not running any other servers or programs
that use port 5000, or change the --port
argument in the launch script. If you change the port, make sure to use that
new port in any other commands that you run.
With the server running, open the web UI in your favorite web browser. If you are running the server locally, the UI will be available at http://localhost:5000/.
If you are running the server on a different computer, you will need to use that computer's IP address or local DNS name
and provide that same address in the ?api
argument. For example, with a server running on a remote computer at
10.2.2.100
and using port 5001, the URL would be http://10.2.2.100:5001?api=http://10.2.2.100:5001
.
You can change the ?api
argument to use multiple servers while keeping your state and results. Note that changing the
server while an image is generating will cause it to fail in the web UI, since the new server will not be aware of that
image.
These methods are specific to Windows, tested on Windows 10, and still experimental. They should provide an easier setup experience.
- Install the latest Visual C++ 2019 redistributable
- Download the latest ZIP file from the apextoaster Nexus server
- Find the ZIP file and
Extract All
to a memorable folder - Open the folder where you extracted the files
- Your models will be converted into the
models
folder, and you can add your own models - Your images will be in the
outputs
folder, along with files containing the parameters used to generate them
- Your models will be converted into the
- Make sure the server is allowed to run
- Open the
server
folder - Right-click the
onnx-web.exe
file and clickProperties
- On the
General
tab, clickUnblock
next to the messageThis file came from another computer and might be blocked to help protect this computer.
- Go back to the folder where you extracted the files
- Repeat step 3 for the
onnx-web-*.bat
files
- Open the
- Run the local server using one of the
onnx-web-*.bat
scripts- Run
onnx-web-half.bat
if you are using a GPU and you have < 12GB of VRAM-half
mode is compatible with both AMD and Nvidia GPUs-half
mode is not compatible with CPU mode
- Run
onnx-web-full.bat
if you are using CPU mode or if you have >= 16GB of VRAM- Try the
onnx-web-half.bat
script if you encounter out-of-memory errors or generating images is very slow
- Try the
- Run
- Wait for the models to be downloaded and converted
- Most models are distributed in PyTorch format and need to be converted into ONNX format
- This only happens once for each model and takes a few minutes
- Open one of the URLs shown in the logs in your browser
- This will typically be http://127.0.0.1:5000?api=http://127.0.0.1:5000
- If you running the server on a different PC and not accessing it from a browser on the same system, use that PC's IP address instead of 127.0.0.1
- Any modern browser should work, including Chrome, Edge, and Firefox
- Mobile browsers also work, but have stricter mixed-content policies
- Install the latest Visual C++ 2019 redistributable
- Install Git
- Install Python 3.10
- Clone or download the onnx-web repository
git clone https://github.com/ssube/onnx-web.git
- https://github.com/ssube/onnx-web/archive/refs/heads/main.zip
- Open a command prompt window
- Run one of the
setup-*.bat
scripts- Run
setup-amd.bat
if you are using an AMD GPU and DirectML - Run
setup-nvidia.bat
if you are using an Nvidia GPU and CUDA - Run
setup-cpu.bat
if you are planning on only using CPU mode
- Run
- After the first run, you can run
launch.bat
instead of the setup script- You should only need to run the setup script once
- If you encounter any errors with Python imports, run the setup script again