Buckets:
| # GGUF | |
| Le format de fichier GGUF est généralement utilisé pour stocker des modèles destinés à l'inférence avec [GGML](https://github.com/ggerganov/ggml) et prend en charge diverses options de quantification par bloc. Diffusers permet de charger des points de contrôle pré-quantifiés et enregistrés au format GGUF via le chargement `from_single_file` avec les classes de modèle. Le chargement de points de contrôle GGUF via les Pipelines n'est actuellement pas pris en charge. | |
| L'exemple suivant charge le modèle transformer [FLUX.1 DEV](https://huggingface.co/black-forest-labs/FLUX.1-dev) en utilisant la variante de quantification GGUF Q2_K. | |
| Avant de commencer, veuillez installer gguf dans votre environnement | |
| ```shell | |
| pip install -U gguf | |
| ``` | |
| Étant donné que GGUF est un format de fichier unique, utilisez `~FromSingleFileMixin.from_single_file` pour charger le modèle et passez-y [GGUFQuantizationConfig](/docs/diffusers/v0.43.0/fr/api/quantization#diffusers.GGUFQuantizationConfig). | |
| Lors de l’utilisation de points de contrôle GGUF, les poids quantifiés restent dans un `dtype` à faible mémoire (généralement `torch.uint8`) et sont déquantifiés dynamiquement puis convertis dans le `compute_dtype` configuré lors du passage avant de chaque module à travers le modèle. Le `GGUFQuantizationConfig` vous permet de définir le `compute_dtype`. | |
| Les fonctions utilisées pour la déquantisation dynamique sont basées sur le travail remarquable de [city96](https://github.com/city96/ComfyUI-GGUF), qui a créé les ports Pytorch de l'implémentation [`numpy`](https://github.com/ggerganov/llama.cpp/blob/master/gguf-py/gguf/quants.py) originale de [compilade](https://github.com/compilade). | |
| ```python | |
| import torch | |
| from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig | |
| ckpt_path = ( | |
| "https://huggingface.co/city96/FLUX.1-dev-gguf/blob/main/flux1-dev-Q2_K.gguf" | |
| ) | |
| transformer = FluxTransformer2DModel.from_single_file( | |
| ckpt_path, | |
| quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16), | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe = FluxPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-dev", | |
| transformer=transformer, | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe.enable_model_cpu_offload() | |
| prompt = "A cat holding a sign that says hello world" | |
| image = pipe(prompt, generator=torch.manual_seed(0)).images[0] | |
| image.save("flux-gguf.png") | |
| ``` | |
| ## Utilisation de noyaux CUDA optimisés avec GGUF | |
| Les noyaux CUDA optimisés peuvent accélérer l’inférence des modèles quantifiés GGUF d’environ 10 %. Cette fonctionnalité nécessite un GPU compatible avec `torch.cuda.get_device_capability` supérieur à 7 et la bibliothèque de noyaux : | |
| ```shell | |
| pip install -U kernels | |
| ``` | |
| Une fois installé, définissez `DIFFUSERS_GGUF_CUDA_KERNELS=true` pour utiliser des noyaux optimisés lorsque ceux-ci sont disponibles. Notez que les noyaux CUDA peuvent introduire de légères différences numériques par rapport à l’implémentation GGUF originale, ce qui peut entraîner des variations visuelles subtiles dans les images générées. Pour désactiver l’utilisation des noyaux CUDA, définissez la variable d’environnement `DIFFUSERS_GGUF_CUDA_KERNELS=false`. | |
| Les noyaux GGUF sont téléchargés depuis le dépôt [`Isotr0py/ggml`](https://huggingface.co/Isotr0py/ggml), dont l’éditeur n’est pas un éditeur de noyaux approuvé sur le Hub. Son chargement télécharge et exécute du code depuis le Hub, Diffusers exige donc que vous activiez explicitement cette option en définissant `DIFFUSERS_TRUST_REMOTE_KERNELS=true`. Consultez [Faire confiance aux noyaux distants](../optimization/attention_backends#trusting-remote-kernels) pour plus de détails. | |
| ## Types de quantification pris en charge | |
| - BF16 | |
| - Q4_0 | |
| - Q4_1 | |
| - Q5_0 | |
| - Q5_1 | |
| - Q8_0 | |
| - Q2_K | |
| - Q3_K | |
| - Q4_K | |
| - Q5_K | |
| - Q6_K | |
| ## Convertir en GGUF | |
| Utilisez l'Espace ci-dessous pour convertir un point de contrôle Diffusers au format GGUF pour l'inférence. Lancer la conversion : | |
| <iframe src="https://diffusers-internal-dev-diffusers-to-gguf.hf.space" frameborder="0" width="850" height="450" | |
| > | |
| ```py | |
| import torch | |
| from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig | |
| ckpt_path = ( | |
| "https://huggingface.co/sayakpaul/different-lora-from-civitai/blob/main/flux_dev_diffusers-q4_0.gguf" | |
| ) | |
| transformer = FluxTransformer2DModel.from_single_file( | |
| ckpt_path, | |
| quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16), | |
| config="black-forest-labs/FLUX.1-dev", | |
| subfolder="transformer", | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe = FluxPipeline.from_pretrained( | |
| "black-forest-labs/FLUX.1-dev", | |
| transformer=transformer, | |
| dtype=torch.bfloat16, | |
| ) | |
| pipe.enable_model_cpu_offload() | |
| prompt = "A cat holding a sign that says hello world" | |
| image = pipe(prompt, generator=torch.manual_seed(0)).images[0] | |
| image.save("flux-gguf.png") | |
| ``` | |
| Lors de l'utilisation de points de contrôle GGUF au format Diffusers, il est obligatoire de fournir le chemin du `config` du modèle. Si la configuration du modèle se trouve dans un `subfolder`, il faut également le spécifier. | |
Xet Storage Details
- Size:
- 5.16 kB
- Xet hash:
- 06681f07991d6e794d799c6baa1e58c5c0eee511435486661d0ec899d3a4157b
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.