当前位置:   article > 正文

【支持中文】stable-diffusion-3安装部署教程-SD3_stable diffusion3部署

stable diffusion3部署

运行界面

一、下载模型

注意是下载的是stable-diffusion-3-medium-diffusers

git clone https://www.modelscope.cn/AI-ModelScope/stable-diffusion-3-medium-diffusers.git

二、搭建基础环境

  1. conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
  2. # 或者pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
  3. pip install gradio
  4. pip install spaces

三、安装SD3的环境

由于pip环境的diffusers和transformers还不支持SD3,所以需要编译安装

  1. git clone https://github.com/huggingface/diffusers.git
  2. git clone https://github.com/huggingface/transformers
  3. cd diffusers/
  4. python setup.py develop
  5. pip install -e .
  6. cd ../transformers
  7. python setup.py develop
  8. pip install -e .

三、运行SD3 DEMO

将下面的代码保存为demo.py,再直接python demo.py即可

翻译用到了百度的接口,可以换成自己的AK/SK,不喜欢可以去掉

  1. import gradio as gr
  2. import numpy as np
  3. import random
  4. import torch
  5. from diffusers import StableDiffusion3Pipeline, SD3Transformer2DModel, FlowMatchEulerDiscreteScheduler
  6. import spaces
  7. import requests
  8. import hashlib
  9. import random
  10. import json
  11. device = "cuda" if torch.cuda.is_available() else "cpu"
  12. dtype = torch.float16
  13. repo = "/你的模型路径/stable-diffusion-3-medium-diffusers"
  14. pipe = StableDiffusion3Pipeline.from_pretrained(repo, torch_dtype=torch.float16).to(device)
  15. MAX_SEED = np.iinfo(np.int32).max
  16. MAX_IMAGE_SIZE = 1344
  17. def translate_baidu(query, from_lang='auto', to_lang='en'):
  18. base_url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
  19. appid = '你的APPID'
  20. secret_key = '你的SK'
  21. salt = str(random.randint(32768, 65536))
  22. sign = appid + query + salt + secret_key
  23. sign = hashlib.md5(sign.encode()).hexdigest()
  24. params = {
  25. 'q': query,
  26. 'from': from_lang,
  27. 'to': to_lang,
  28. 'appid': appid,
  29. 'salt': salt,
  30. 'sign': sign
  31. }
  32. response = requests.get(base_url, params=params)
  33. if response.status_code == 200:
  34. result = response.json()
  35. if "trans_result" in result:
  36. return result["trans_result"][0]["dst"]
  37. else:
  38. return result
  39. else:
  40. return f"Error: {response.status_code}"
  41. @spaces.GPU
  42. def infer(prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps, progress=gr.Progress(track_tqdm=True)):
  43. if randomize_seed:
  44. seed = random.randint(0, MAX_SEED)
  45. generator = torch.Generator().manual_seed(seed)
  46. print(prompt)
  47. prompt = translate_baidu(prompt, 'zh', 'en')
  48. print(prompt)
  49. image = pipe(
  50. prompt = prompt,
  51. negative_prompt = negative_prompt,
  52. guidance_scale = guidance_scale,
  53. num_inference_steps = num_inference_steps,
  54. width = width,
  55. height = height,
  56. generator = generator
  57. ).images[0]
  58. return image, seed
  59. examples = [
  60. ]
  61. css="""
  62. #col-container {
  63. margin: 0 auto;
  64. max-width: 800px;
  65. }
  66. """
  67. with gr.Blocks(css=css) as demo:
  68. with gr.Column(elem_id="col-container"):
  69. gr.Markdown(f"""
  70. ### Stable Diffusion 3 测试
  71. #### By 你的名字
  72. """)
  73. with gr.Row():
  74. prompt = gr.Text(
  75. label="提示词",
  76. show_label=False,
  77. max_lines=1,
  78. placeholder="请输入提示词",
  79. container=False,
  80. )
  81. run_button = gr.Button("生成", scale=0)
  82. result = gr.Image(label="Result", show_label=False)
  83. with gr.Accordion("更多参数", open=False):
  84. negative_prompt = gr.Text(
  85. label="负面提示词",
  86. max_lines=1,
  87. placeholder="请输入负面提示词",
  88. )
  89. seed = gr.Slider(
  90. label="Seed",
  91. minimum=0,
  92. maximum=MAX_SEED,
  93. step=1,
  94. value=0,
  95. )
  96. randomize_seed = gr.Checkbox(label="随机种子", value=True)
  97. with gr.Row():
  98. width = gr.Slider(
  99. label="宽",
  100. minimum=256,
  101. maximum=MAX_IMAGE_SIZE,
  102. step=64,
  103. value=1024,
  104. )
  105. height = gr.Slider(
  106. label="高",
  107. minimum=256,
  108. maximum=MAX_IMAGE_SIZE,
  109. step=64,
  110. value=1024,
  111. )
  112. with gr.Row():
  113. guidance_scale = gr.Slider(
  114. label="Guidance scale",
  115. minimum=0.0,
  116. maximum=10.0,
  117. step=0.1,
  118. value=5.0,
  119. )
  120. num_inference_steps = gr.Slider(
  121. label="迭代步数",
  122. minimum=1,
  123. maximum=50,
  124. step=1,
  125. value=28,
  126. )
  127. gr.on(
  128. triggers=[run_button.click, prompt.submit, negative_prompt.submit],
  129. fn = infer,
  130. inputs = [prompt, negative_prompt, seed, randomize_seed, width, height, guidance_scale, num_inference_steps],
  131. outputs = [result, seed]
  132. )
  133. demo.launch(server_name="0.0.0.0", server_port=7862, show_error=True)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/918224
推荐阅读
相关标签
  

闽ICP备14008679号