dghhvc commited on
Commit
17c2ee9
·
verified ·
1 Parent(s): 392643a

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +79 -0
app.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py - نسخه بهینه برای CPU فقط
2
+ from diffusers import StableDiffusionXLPipeline
3
+ import torch
4
+ import gradio as gr
5
+
6
+ # خیلی مهم: برای CPU حتماً از float32 استفاده کن (float16 روی CPU کار نمی‌کنه یا خیلی کند می‌شه)
7
+ pipe = StableDiffusionXLPipeline.from_pretrained(
8
+ "stabilityai/stable-diffusion-xl-base-1.0",
9
+ torch_dtype=torch.float32, # فقط برای CPU
10
+ variant="fp16", # همچنان از وزن‌های fp16 استفاده می‌کنه ولی موقع اجرا به float32 تبدیل می‌شه
11
+ use_safetensors=True,
12
+ safety_checker=None # برای سرعت بیشتر (در CPU مهم است)
13
+ )
14
+
15
+ # فعال کردن بهینه‌سازی‌های مخصوص CPU
16
+ pipe.enable_model_cpu_offload() # خیلی مهمه! مدل رو لایه‌به‌لایه به رم میاره و حافظه رو خیلی کم می‌کنه
17
+ pipe.enable_sequential_cpu_offload() # گزینه قوی‌تر برای وقتی حافظه خیلی کمه
18
+ pipe.unet.to(memory_format=torch.channels_last) # کمی سرعت رو روی CPU بالا می‌بره
19
+
20
+ # اگر هنوز ارور حافظه دادی، این خط رو هم فعال کن (توجه: کمی کندتر می‌شه ولی حافظه خیلی کمتری می‌خواد)
21
+ # pipe.enable_attention_slicing()
22
+
23
+ def generate_image(prompt, negative_prompt="", height=1024, width=1024, steps=28, guidance=6.0, seed=-1):
24
+ # seed = -1 یعنی رندوم
25
+ generator = torch.manual_seed(seed) if seed != -1 else None
26
+
27
+ image = pipe(
28
+ prompt=prompt,
29
+ negative_prompt=negative_prompt,
30
+ height=height,
31
+ width=width,
32
+ num_inference_steps=steps,
33
+ guidance_scale=guidance,
34
+ generator=generator
35
+ ).images[0]
36
+
37
+ return image
38
+
39
+ # رابط گرادیو (همون قبلی ولی با تنظیمات بهینه‌تر برای CPU)
40
+ with gr.Blocks(title="SDXL روی CPU") as demo:
41
+ gr.Markdown("# متن به تصویر - Stable Diffusion XL (نسخه CPU)")
42
+ gr.Markdown("این نسخه مخصوص اجرا روی CPU هست و حدود ۳۰–۹۰ ثانیه طول می‌کشه (بسته به قدرت CPU)")
43
+
44
+ with gr.Row():
45
+ with gr.Column(scale=2):
46
+ prompt = gr.Textbox(label="پرامپت", lines=3, placeholder="مثلاً: یک گربه فضانورد روی ماه...")
47
+ negative = gr.Textbox(label="نگاتیو پرامپت", lines=2, placeholder="تار، بدشکل، متن، لوگو")
48
+
49
+ with gr.Row():
50
+ height = gr.Slider(512, 1280, value=1024, step=64, label="ارتفاع")
51
+ width = gr.Slider(512, 1280, value=1024, step=64, label="عرض")
52
+
53
+ with gr.Row():
54
+ steps = gr.Slider(15, 50, value=28, step=1, label="تعداد گام‌ها (۲۰–۳۰ برای CPU کافیه)")
55
+ guidance = gr.Slider(3, 12, value=6.0, step=0.5, label="Guidance")
56
+ seed = gr.Number(value=-1, label="Seed (-1 = رندوم)")
57
+
58
+ btn = gr.Button("تولید تصویر 🚀", variant="primary")
59
+
60
+ with gr.Column(scale=1):
61
+ output = gr.Image(label="تصویر تولید شده", type="pil")
62
+
63
+ gr.Examples(
64
+ examples=[
65
+ ["یک شهر سایبرپانک در شب با نورهای نئونی و باران", "تار، بدشکل"],
66
+ ["پرتره یک دختر انیمه با موهای صورتی در باغ شکوفه‌های گیلاس", ""],
67
+ ["گربه‌ای که کلاه جادوگر سرش گذاشته و کتاب جادو می‌خونه", ""],
68
+ ],
69
+ inputs=[prompt, negative]
70
+ )
71
+
72
+ btn.click(
73
+ fn=generate_image,
74
+ inputs=[prompt, negative, height, width, steps, guidance, seed],
75
+ outputs=output
76
+ )
77
+
78
+ if __name__ == "__main__":
79
+ demo.launch()