Skip to content

Commit 27a63b8

Browse files
authored
Diffuser Notebooks for Community Scripts (#525)
* Added Notebooks on diffusers. * Renamed Notebooks and improved text headings for beginners. * Correct notebook name.
1 parent 8c0e782 commit 27a63b8

File tree

3 files changed

+959
-0
lines changed

3 files changed

+959
-0
lines changed

diffusers/asymetric_tiling.ipynb

Lines changed: 393 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,393 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Asymmetric tiling\n",
8+
"\n",
9+
"Stable Diffusion is not trained to generate seamless textures. However, you can use this simple script to add tiling to your generation. This script is contributed by [alexisrolland](https://github.com/alexisrolland). See more details in the [this issue](https://github.com/huggingface/diffusers/issues/556)."
10+
]
11+
},
12+
{
13+
"cell_type": "code",
14+
"execution_count": 2,
15+
"metadata": {},
16+
"outputs": [
17+
{
18+
"name": "stdout",
19+
"output_type": "stream",
20+
"text": [
21+
"Requirement already satisfied: diffusers in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (0.31.0)\n",
22+
"Requirement already satisfied: torch in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (2.2.1+cu121)\n",
23+
"Requirement already satisfied: accelerate in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (1.1.1)\n",
24+
"Requirement already satisfied: transformers in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (4.46.2)\n",
25+
"Requirement already satisfied: importlib-metadata in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (8.5.0)\n",
26+
"Requirement already satisfied: filelock in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (3.16.1)\n",
27+
"Requirement already satisfied: huggingface-hub>=0.23.2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (0.26.2)\n",
28+
"Requirement already satisfied: numpy in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (1.26.4)\n",
29+
"Requirement already satisfied: regex!=2019.12.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (2024.11.6)\n",
30+
"Requirement already satisfied: requests in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (2.32.3)\n",
31+
"Requirement already satisfied: safetensors>=0.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (0.4.5)\n",
32+
"Requirement already satisfied: Pillow in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from diffusers) (11.0.0)\n",
33+
"Requirement already satisfied: typing-extensions>=4.8.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (4.12.2)\n",
34+
"Requirement already satisfied: sympy in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (1.13.3)\n",
35+
"Requirement already satisfied: networkx in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.4.2)\n",
36+
"Requirement already satisfied: jinja2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (3.1.4)\n",
37+
"Requirement already satisfied: fsspec in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2024.10.0)\n",
38+
"Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n",
39+
"Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n",
40+
"Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n",
41+
"Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (8.9.2.26)\n",
42+
"Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.3.1)\n",
43+
"Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (11.0.2.54)\n",
44+
"Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (10.3.2.106)\n",
45+
"Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (11.4.5.107)\n",
46+
"Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.0.106)\n",
47+
"Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2.19.3)\n",
48+
"Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (12.1.105)\n",
49+
"Requirement already satisfied: triton==2.2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from torch) (2.2.0)\n",
50+
"Requirement already satisfied: nvidia-nvjitlink-cu12 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from nvidia-cusolver-cu12==11.4.5.107->torch) (12.6.77)\n",
51+
"Requirement already satisfied: packaging>=20.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from accelerate) (24.1)\n",
52+
"Requirement already satisfied: psutil in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from accelerate) (6.1.0)\n",
53+
"Requirement already satisfied: pyyaml in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from accelerate) (6.0.2)\n",
54+
"Requirement already satisfied: tokenizers<0.21,>=0.20 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (0.20.3)\n",
55+
"Requirement already satisfied: tqdm>=4.27 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from transformers) (4.66.6)\n",
56+
"Requirement already satisfied: zipp>=3.20 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from importlib-metadata->diffusers) (3.21.0)\n",
57+
"Requirement already satisfied: MarkupSafe>=2.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from jinja2->torch) (3.0.2)\n",
58+
"Requirement already satisfied: charset-normalizer<4,>=2 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->diffusers) (3.4.0)\n",
59+
"Requirement already satisfied: idna<4,>=2.5 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->diffusers) (3.10)\n",
60+
"Requirement already satisfied: urllib3<3,>=1.21.1 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->diffusers) (2.2.3)\n",
61+
"Requirement already satisfied: certifi>=2017.4.17 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from requests->diffusers) (2024.8.30)\n",
62+
"Requirement already satisfied: mpmath<1.4,>=1.1.0 in /system/conda/miniconda3/envs/cloudspace/lib/python3.10/site-packages (from sympy->torch) (1.3.0)\n",
63+
"Note: you may need to restart the kernel to use updated packages.\n"
64+
]
65+
}
66+
],
67+
"source": [
68+
"pip install diffusers torch accelerate transformers"
69+
]
70+
},
71+
{
72+
"cell_type": "code",
73+
"execution_count": 3,
74+
"metadata": {},
75+
"outputs": [],
76+
"source": [
77+
"import torch\n",
78+
"from typing import Optional\n",
79+
"from diffusers import StableDiffusionPipeline\n",
80+
"from diffusers.models.lora import LoRACompatibleConv\n",
81+
"\n",
82+
"def seamless_tiling(pipeline, x_axis, y_axis):\n",
83+
" def asymmetric_conv2d_convforward(self, input: torch.Tensor, weight: torch.Tensor, bias: Optional[torch.Tensor] = None):\n",
84+
" self.paddingX = (self._reversed_padding_repeated_twice[0], self._reversed_padding_repeated_twice[1], 0, 0)\n",
85+
" self.paddingY = (0, 0, self._reversed_padding_repeated_twice[2], self._reversed_padding_repeated_twice[3])\n",
86+
" working = torch.nn.functional.pad(input, self.paddingX, mode=x_mode)\n",
87+
" working = torch.nn.functional.pad(working, self.paddingY, mode=y_mode)\n",
88+
" return torch.nn.functional.conv2d(working, weight, bias, self.stride, torch.nn.modules.utils._pair(0), self.dilation, self.groups)\n",
89+
" x_mode = 'circular' if x_axis else 'constant'\n",
90+
" y_mode = 'circular' if y_axis else 'constant'\n",
91+
" targets = [pipeline.vae, pipeline.text_encoder, pipeline.unet]\n",
92+
" convolution_layers = []\n",
93+
" for target in targets:\n",
94+
" for module in target.modules():\n",
95+
" if isinstance(module, torch.nn.Conv2d):\n",
96+
" convolution_layers.append(module)\n",
97+
" for layer in convolution_layers:\n",
98+
" if isinstance(layer, LoRACompatibleConv) and layer.lora_layer is None:\n",
99+
" layer.lora_layer = lambda * x: 0\n",
100+
" layer._conv_forward = asymmetric_conv2d_convforward.__get__(layer, torch.nn.Conv2d)\n",
101+
" return pipeline\n"
102+
]
103+
},
104+
{
105+
"cell_type": "code",
106+
"execution_count": 4,
107+
"metadata": {},
108+
"outputs": [
109+
{
110+
"data": {
111+
"application/vnd.jupyter.widget-view+json": {
112+
"model_id": "1fe7c93d4c284a3dbea050bb32b4fdbb",
113+
"version_major": 2,
114+
"version_minor": 0
115+
},
116+
"text/plain": [
117+
"model_index.json: 0%| | 0.00/541 [00:00<?, ?B/s]"
118+
]
119+
},
120+
"metadata": {},
121+
"output_type": "display_data"
122+
},
123+
{
124+
"data": {
125+
"application/vnd.jupyter.widget-view+json": {
126+
"model_id": "800df14452064af0a3b5b350bcff79b3",
127+
"version_major": 2,
128+
"version_minor": 0
129+
},
130+
"text/plain": [
131+
"Fetching 15 files: 0%| | 0/15 [00:00<?, ?it/s]"
132+
]
133+
},
134+
"metadata": {},
135+
"output_type": "display_data"
136+
},
137+
{
138+
"data": {
139+
"application/vnd.jupyter.widget-view+json": {
140+
"model_id": "035b3e663c9b4645a1849e4e44ad18d2",
141+
"version_major": 2,
142+
"version_minor": 0
143+
},
144+
"text/plain": [
145+
"(…)ature_extractor/preprocessor_config.json: 0%| | 0.00/342 [00:00<?, ?B/s]"
146+
]
147+
},
148+
"metadata": {},
149+
"output_type": "display_data"
150+
},
151+
{
152+
"data": {
153+
"application/vnd.jupyter.widget-view+json": {
154+
"model_id": "5365d546370d4c62bf2d43b95f989a1a",
155+
"version_major": 2,
156+
"version_minor": 0
157+
},
158+
"text/plain": [
159+
"tokenizer/merges.txt: 0%| | 0.00/525k [00:00<?, ?B/s]"
160+
]
161+
},
162+
"metadata": {},
163+
"output_type": "display_data"
164+
},
165+
{
166+
"data": {
167+
"application/vnd.jupyter.widget-view+json": {
168+
"model_id": "84a7505fdf7644898774be25a69ba8a0",
169+
"version_major": 2,
170+
"version_minor": 0
171+
},
172+
"text/plain": [
173+
"text_encoder/config.json: 0%| | 0.00/617 [00:00<?, ?B/s]"
174+
]
175+
},
176+
"metadata": {},
177+
"output_type": "display_data"
178+
},
179+
{
180+
"data": {
181+
"application/vnd.jupyter.widget-view+json": {
182+
"model_id": "8f5e0949ad264122a95f7a9f3fc6a592",
183+
"version_major": 2,
184+
"version_minor": 0
185+
},
186+
"text/plain": [
187+
"tokenizer/special_tokens_map.json: 0%| | 0.00/472 [00:00<?, ?B/s]"
188+
]
189+
},
190+
"metadata": {},
191+
"output_type": "display_data"
192+
},
193+
{
194+
"data": {
195+
"application/vnd.jupyter.widget-view+json": {
196+
"model_id": "7154fe0ee6964d4dabd7faad9ab2f91e",
197+
"version_major": 2,
198+
"version_minor": 0
199+
},
200+
"text/plain": [
201+
"model.safetensors: 0%| | 0.00/1.22G [00:00<?, ?B/s]"
202+
]
203+
},
204+
"metadata": {},
205+
"output_type": "display_data"
206+
},
207+
{
208+
"data": {
209+
"application/vnd.jupyter.widget-view+json": {
210+
"model_id": "e3445255cac2477dab44e7637ed78bd2",
211+
"version_major": 2,
212+
"version_minor": 0
213+
},
214+
"text/plain": [
215+
"model.safetensors: 0%| | 0.00/492M [00:00<?, ?B/s]"
216+
]
217+
},
218+
"metadata": {},
219+
"output_type": "display_data"
220+
},
221+
{
222+
"data": {
223+
"application/vnd.jupyter.widget-view+json": {
224+
"model_id": "a6814bb5f88c42e8a16d627d3414dffa",
225+
"version_major": 2,
226+
"version_minor": 0
227+
},
228+
"text/plain": [
229+
"scheduler/scheduler_config.json: 0%| | 0.00/308 [00:00<?, ?B/s]"
230+
]
231+
},
232+
"metadata": {},
233+
"output_type": "display_data"
234+
},
235+
{
236+
"data": {
237+
"application/vnd.jupyter.widget-view+json": {
238+
"model_id": "de3e32d444b140dc88cec7205e7d20f8",
239+
"version_major": 2,
240+
"version_minor": 0
241+
},
242+
"text/plain": [
243+
"safety_checker/config.json: 0%| | 0.00/4.72k [00:00<?, ?B/s]"
244+
]
245+
},
246+
"metadata": {},
247+
"output_type": "display_data"
248+
},
249+
{
250+
"data": {
251+
"application/vnd.jupyter.widget-view+json": {
252+
"model_id": "d38e12cc00ee4175b6ac61934c50a790",
253+
"version_major": 2,
254+
"version_minor": 0
255+
},
256+
"text/plain": [
257+
"tokenizer/tokenizer_config.json: 0%| | 0.00/806 [00:00<?, ?B/s]"
258+
]
259+
},
260+
"metadata": {},
261+
"output_type": "display_data"
262+
},
263+
{
264+
"data": {
265+
"application/vnd.jupyter.widget-view+json": {
266+
"model_id": "e6ef50cc68f0495a8ab0a859aa8846c6",
267+
"version_major": 2,
268+
"version_minor": 0
269+
},
270+
"text/plain": [
271+
"unet/config.json: 0%| | 0.00/743 [00:00<?, ?B/s]"
272+
]
273+
},
274+
"metadata": {},
275+
"output_type": "display_data"
276+
},
277+
{
278+
"data": {
279+
"application/vnd.jupyter.widget-view+json": {
280+
"model_id": "fd2df9b13391492b81ebaabada3564a9",
281+
"version_major": 2,
282+
"version_minor": 0
283+
},
284+
"text/plain": [
285+
"tokenizer/vocab.json: 0%| | 0.00/1.06M [00:00<?, ?B/s]"
286+
]
287+
},
288+
"metadata": {},
289+
"output_type": "display_data"
290+
},
291+
{
292+
"data": {
293+
"application/vnd.jupyter.widget-view+json": {
294+
"model_id": "e61f198fcefe470b997a5368f6d6a432",
295+
"version_major": 2,
296+
"version_minor": 0
297+
},
298+
"text/plain": [
299+
"diffusion_pytorch_model.safetensors: 0%| | 0.00/3.44G [00:00<?, ?B/s]"
300+
]
301+
},
302+
"metadata": {},
303+
"output_type": "display_data"
304+
},
305+
{
306+
"data": {
307+
"application/vnd.jupyter.widget-view+json": {
308+
"model_id": "7626726676ed4f9686ea710b846f8e9d",
309+
"version_major": 2,
310+
"version_minor": 0
311+
},
312+
"text/plain": [
313+
"vae/config.json: 0%| | 0.00/547 [00:00<?, ?B/s]"
314+
]
315+
},
316+
"metadata": {},
317+
"output_type": "display_data"
318+
},
319+
{
320+
"data": {
321+
"application/vnd.jupyter.widget-view+json": {
322+
"model_id": "2b880f94671b4192a92f97d6cd42cdf6",
323+
"version_major": 2,
324+
"version_minor": 0
325+
},
326+
"text/plain": [
327+
"diffusion_pytorch_model.safetensors: 0%| | 0.00/335M [00:00<?, ?B/s]"
328+
]
329+
},
330+
"metadata": {},
331+
"output_type": "display_data"
332+
},
333+
{
334+
"data": {
335+
"application/vnd.jupyter.widget-view+json": {
336+
"model_id": "7ce11626fd054518921ca192b52cea6b",
337+
"version_major": 2,
338+
"version_minor": 0
339+
},
340+
"text/plain": [
341+
"Loading pipeline components...: 0%| | 0/7 [00:00<?, ?it/s]"
342+
]
343+
},
344+
"metadata": {},
345+
"output_type": "display_data"
346+
},
347+
{
348+
"data": {
349+
"application/vnd.jupyter.widget-view+json": {
350+
"model_id": "317e981c67ea4533929bba0bbbb34e44",
351+
"version_major": 2,
352+
"version_minor": 0
353+
},
354+
"text/plain": [
355+
" 0%| | 0/20 [00:00<?, ?it/s]"
356+
]
357+
},
358+
"metadata": {},
359+
"output_type": "display_data"
360+
}
361+
],
362+
"source": [
363+
"pipeline = StableDiffusionPipeline.from_pretrained(\"stable-diffusion-v1-5/stable-diffusion-v1-5\", torch_dtype=torch.float16, use_safetensors=True)\n",
364+
"pipeline.enable_model_cpu_offload()\n",
365+
"prompt = [\"texture of a red brick wall\"]\n",
366+
"seed = 123456\n",
367+
"generator = torch.Generator(device='cuda').manual_seed(seed)\n",
368+
"\n",
369+
"pipeline = seamless_tiling(pipeline=pipeline, x_axis=True, y_axis=True)\n",
370+
"image = pipeline(\n",
371+
" prompt=prompt,\n",
372+
" width=512,\n",
373+
" height=512,\n",
374+
" num_inference_steps=20,\n",
375+
" guidance_scale=7,\n",
376+
" num_images_per_prompt=1,\n",
377+
" generator=generator\n",
378+
").images[0]\n",
379+
"seamless_tiling(pipeline=pipeline, x_axis=False, y_axis=False)\n",
380+
"\n",
381+
"torch.cuda.empty_cache()\n",
382+
"image.save('image.png')"
383+
]
384+
}
385+
],
386+
"metadata": {
387+
"language_info": {
388+
"name": "python"
389+
}
390+
},
391+
"nbformat": 4,
392+
"nbformat_minor": 2
393+
}

0 commit comments

Comments
 (0)