refiners/docs/getting-started/recommended.md

137 lines
4.5 KiB
Markdown

---
icon: material/star-outline
---
# Recommended usage
Refiners is still a young project and development is active, so to use the latest and greatest version of the framework we recommend you use the `main` branch from our development repository.
Moreover, we recommend using [Rye](https://rye.astral.sh/) which simplifies several things related to Python package management, so start by following the instructions to install it on your system.
## Installing
To try Refiners, clone the GitHub repository and install it with all optional features:
```bash
git clone git@github.com:finegrain-ai/refiners.git
cd refiners
rye sync --all-features
```
## Converting weights
The format of state dicts used by Refiners is custom, so to use pretrained models you will need to convert weights.
We provide conversion tools and pre-converted weights on our [HuggingFace organization](https://huggingface.co/refiners) for popular models.
For instance, to use the autoencoder from Stable Diffusion 1.5:
### Use pre-converted weights
```py
from huggingface_hub import hf_hub_download
from refiners.foundationals.latent_diffusion.stable_diffusion_1.model import SD1Autoencoder
# download the pre-converted weights from the hub
safetensors_path = hf_hub_download(
repo_id="refiners/sd15.autoencoder",
filename="model.safetensors",
revision="9ce6af42e21fce64d74b1cab57a65aea82fd40ea", # optional
)
# initialize the model
model = SD1Autoencoder()
# load the pre-converted weights
model.load_from_safetensors(safetensors_path)
```
### Convert the weights yourself
If you want to convert the weights yourself, you can use the conversion tools we provide.
```py
from refiners.conversion import autoencoder_sd15
# This function will:
# - download the original weights from the internet, and save them to disk at a known location
# (e.g. tests/weights/stable-diffusion-v1-5/stable-diffusion-v1-5/vae/diffusion_pytorch_model.safetensors)
# - convert them to the refiners format, and save them to disk at a known location
# (e.g. tests/weights/refiners/sd15.autoencoder/model.safetensors)
autoencoder_sd15.runwayml.convert()
# get the path to the converted weights
safetensors_path = autoencoder_sd15.runwayml.converted.local_path
# initialize the model
model = SD1Autoencoder()
# load the converted weights
model.load_from_safetensors(safetensors_path)
```
!!! note
If you need to convert more model weights or all of them, check out the `refiners.conversion` module.
!!! warning
Converting all the weights requires a lot of disk space and CPU time, so be prepared.
Currently downloading all the original weights takes around ~100GB of disk space,
and converting them all takes around ~70GB of disk space.
!!! warning
Some conversion scripts may also require quite a bit of RAM, since they load the entire weights in memory,
~16GB of RAM should be enough for most models, but some models may require more.
### Testing the conversion
To quickly check that the weights you got from the hub or converted yourself are correct, you can run the following snippet:
```py
from PIL import Image
from refiners.fluxion.utils import no_grad
image = Image.open("input.png")
with no_grad():
latents = model.image_to_latents(image)
decoded = model.latents_to_image(latents)
decoded.save("output.png")
```
Inspect `output.png`, if the converted weights are correct, it should be similar to `input.png` (but have a few differences).
## Using Refiners in your own project
So far you used Refiners as a standalone package, but if you want to create your own project using it as a dependency here is how you can proceed:
```bash
rye init --py "3.11" myproject
cd myproject
rye add refiners@git+https://github.com/finegrain-ai/refiners
rye sync
```
If you intend to use Refiners for training, you can install the `training` feature:
```bash
rye add refiners[training]@git+https://github.com/finegrain-ai/refiners
```
Similarly, if you need to use the conversion tools we provide, you install the `conversion` feature:
```bash
rye add refiners[conversion]@git+https://github.com/finegrain-ai/refiners
```
!!! note
You can install multiple features at once by separating them with a comma:
```bash
rye add refiners[training,conversion]@git+https://github.com/finegrain-ai/refiners
```
## What's next?
We suggest you check out the [guides](/guides/) section to dive into the usage of Refiners, of the [Key Concepts](/concepts/chain/) section for a better understanding of how the framework works.