From 7174340c00ce8f9a6af490e994f334ff084d57b6 Mon Sep 17 00:00:00 2001 From: ddayto <55469971+ddayto21@users.noreply.github.com> Date: Fri, 24 Jan 2025 18:51:04 -0600 Subject: [PATCH] fix: deprecated arguments in stable diffusion demo (#10434) * Refactor requirements and improve Hugging Face token handling - Updated `requirements.txt` to include specific package versions, ensuring better dependency management and compatibility. - Enhanced `run.py` to check for the Hugging Face access token (`HUGGING_FACE_ACCESS_TOKEN`) at runtime, providing a clear error message if it's missing. - Replaced deprecated arguments (`use_auth_token`, `revision="fp16"`) with updated ones (`token`, `variant="fp16"`) in the StableDiffusionPipeline setup. - Added minor formatting improvements to improve readability and maintainability in the `run.py` script. These changes enhance user clarity, ensure compatibility with updated libraries, and improve the code's overall quality. * chore: pin versions for diffusers and torch in requirements.txt * refactor: use standard HF_TOKEN for authentication in run.py * notebook --------- Co-authored-by: Abubakar Abid --- demo/stable-diffusion/requirements.txt | 9 +++------ demo/stable-diffusion/run.ipynb | 2 +- demo/stable-diffusion/run.py | 21 ++++++++++++++++++--- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/demo/stable-diffusion/requirements.txt b/demo/stable-diffusion/requirements.txt index 432766cd6b..7ae07ca3a2 100644 --- a/demo/stable-diffusion/requirements.txt +++ b/demo/stable-diffusion/requirements.txt @@ -1,6 +1,3 @@ -diffusers -transformers -nvidia-ml-py3 -ftfy -torch -Pillow +diffusers==0.32.2 +torch==2.5.1 + diff --git a/demo/stable-diffusion/run.ipynb b/demo/stable-diffusion/run.ipynb index e27c0726af..3da2e2c130 100644 --- a/demo/stable-diffusion/run.ipynb +++ b/demo/stable-diffusion/run.ipynb @@ -1 +1 @@ -{"cells": [{"cell_type": "markdown", "id": "302934307671667531413257853548643485645", "metadata": {}, "source": ["# Gradio Demo: stable-diffusion\n", "### Note: This is a simplified version of the code needed to create the Stable Diffusion demo. See full code here: https://hf.co/spaces/stabilityai/stable-diffusion/tree/main\n", " "]}, {"cell_type": "code", "execution_count": null, "id": "272996653310673477252411125948039410165", "metadata": {}, "outputs": [], "source": ["!pip install -q gradio diffusers transformers nvidia-ml-py3 ftfy torch Pillow "]}, {"cell_type": "code", "execution_count": null, "id": "288918539441861185822528903084949547379", "metadata": {}, "outputs": [], "source": ["import gradio as gr\n", "import torch\n", "from diffusers import StableDiffusionPipeline # type: ignore\n", "from PIL import Image\n", "import os\n", "\n", "auth_token = os.getenv(\"auth_token\")\n", "model_id = \"CompVis/stable-diffusion-v1-4\"\n", "device = \"cpu\"\n", "pipe = StableDiffusionPipeline.from_pretrained(\n", " model_id, use_auth_token=auth_token, revision=\"fp16\", torch_dtype=torch.float16\n", ")\n", "pipe = pipe.to(device)\n", "\n", "def infer(prompt, samples, steps, scale, seed):\n", " generator = torch.Generator(device=device).manual_seed(seed)\n", " images_list = pipe( # type: ignore\n", " [prompt] * samples,\n", " num_inference_steps=steps,\n", " guidance_scale=scale,\n", " generator=generator,\n", " )\n", " images = []\n", " safe_image = Image.open(r\"unsafe.png\")\n", " for i, image in enumerate(images_list[\"sample\"]): # type: ignore\n", " if images_list[\"nsfw_content_detected\"][i]: # type: ignore\n", " images.append(safe_image)\n", " else:\n", " images.append(image)\n", " return images\n", "\n", "block = gr.Blocks()\n", "\n", "with block:\n", " with gr.Group():\n", " with gr.Row():\n", " text = gr.Textbox(\n", " label=\"Enter your prompt\",\n", " max_lines=1,\n", " placeholder=\"Enter your prompt\",\n", " container=False,\n", " )\n", " btn = gr.Button(\"Generate image\")\n", " gallery = gr.Gallery(\n", " label=\"Generated images\",\n", " show_label=False,\n", " elem_id=\"gallery\",\n", " columns=[2],\n", " )\n", "\n", " advanced_button = gr.Button(\"Advanced options\", elem_id=\"advanced-btn\")\n", "\n", " with gr.Row(elem_id=\"advanced-options\"):\n", " samples = gr.Slider(label=\"Images\", minimum=1, maximum=4, value=4, step=1)\n", " steps = gr.Slider(label=\"Steps\", minimum=1, maximum=50, value=45, step=1)\n", " scale = gr.Slider(\n", " label=\"Guidance Scale\", minimum=0, maximum=50, value=7.5, step=0.1\n", " )\n", " seed = gr.Slider(\n", " label=\"Seed\",\n", " minimum=0,\n", " maximum=2147483647,\n", " step=1,\n", " randomize=True,\n", " )\n", " gr.on([text.submit, btn.click], infer, inputs=[text, samples, steps, scale, seed], outputs=gallery)\n", " advanced_button.click(\n", " None,\n", " [],\n", " text,\n", " )\n", "\n", "block.launch()\n"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file +{"cells": [{"cell_type": "markdown", "id": "302934307671667531413257853548643485645", "metadata": {}, "source": ["# Gradio Demo: stable-diffusion\n", "### Note: This is a simplified version of the code needed to create the Stable Diffusion demo. See full code here: https://hf.co/spaces/stabilityai/stable-diffusion/tree/main\n", " "]}, {"cell_type": "code", "execution_count": null, "id": "272996653310673477252411125948039410165", "metadata": {}, "outputs": [], "source": ["!pip install -q gradio diffusers==0.32.2 torch==2.5.1 "]}, {"cell_type": "code", "execution_count": null, "id": "288918539441861185822528903084949547379", "metadata": {}, "outputs": [], "source": ["import gradio as gr\n", "import torch\n", "from diffusers import StableDiffusionPipeline # type: ignore\n", "from PIL import Image\n", "import os\n", "\n", "auth_token = os.getenv(\"HF_TOKEN\")\n", "if not auth_token:\n", " print(\n", " \"ERROR: No Hugging Face access token found.\\n\"\n", " \"Please define an environment variable 'auth_token' before running.\\n\"\n", " \"Example:\\n\"\n", " \" export HF_TOKEN=XXXXXXXX\\n\"\n", " )\n", "\n", "model_id = \"CompVis/stable-diffusion-v1-4\"\n", "device = \"cpu\"\n", "pipe = StableDiffusionPipeline.from_pretrained(\n", " model_id, token=auth_token, variant=\"fp16\", torch_dtype=torch.float16,\n", ")\n", "pipe = pipe.to(device)\n", "\n", "\n", "def infer(prompt, samples, steps, scale, seed):\n", " generator = torch.Generator(device=device).manual_seed(seed)\n", " images_list = pipe( # type: ignore\n", " [prompt] * samples,\n", " num_inference_steps=steps,\n", " guidance_scale=scale,\n", " generator=generator,\n", " )\n", " images = []\n", " safe_image = Image.open(r\"unsafe.png\")\n", " for i, image in enumerate(images_list[\"sample\"]): # type: ignore\n", " if images_list[\"nsfw_content_detected\"][i]: # type: ignore\n", " images.append(safe_image)\n", " else:\n", " images.append(image)\n", " return images\n", "\n", "\n", "block = gr.Blocks()\n", "\n", "with block:\n", " with gr.Group():\n", " with gr.Row():\n", " text = gr.Textbox(\n", " label=\"Enter your prompt\",\n", " max_lines=1,\n", " placeholder=\"Enter your prompt\",\n", " container=False,\n", " )\n", " btn = gr.Button(\"Generate image\")\n", " gallery = gr.Gallery(\n", " label=\"Generated images\",\n", " show_label=False,\n", " elem_id=\"gallery\",\n", " columns=[2],\n", " )\n", "\n", " advanced_button = gr.Button(\"Advanced options\", elem_id=\"advanced-btn\")\n", "\n", " with gr.Row(elem_id=\"advanced-options\"):\n", " samples = gr.Slider(label=\"Images\", minimum=1, maximum=4, value=4, step=1)\n", " steps = gr.Slider(label=\"Steps\", minimum=1, maximum=50, value=45, step=1)\n", " scale = gr.Slider(\n", " label=\"Guidance Scale\", minimum=0, maximum=50, value=7.5, step=0.1\n", " )\n", " seed = gr.Slider(\n", " label=\"Seed\",\n", " minimum=0,\n", " maximum=2147483647,\n", " step=1,\n", " randomize=True,\n", " )\n", " gr.on(\n", " [text.submit, btn.click],\n", " infer,\n", " inputs=[text, samples, steps, scale, seed],\n", " outputs=gallery,\n", " )\n", " advanced_button.click(\n", " None,\n", " [],\n", " text,\n", " )\n", "\n", "block.launch()\n"]}], "metadata": {}, "nbformat": 4, "nbformat_minor": 5} \ No newline at end of file diff --git a/demo/stable-diffusion/run.py b/demo/stable-diffusion/run.py index 702e1c60ca..c86b683524 100644 --- a/demo/stable-diffusion/run.py +++ b/demo/stable-diffusion/run.py @@ -4,14 +4,23 @@ from diffusers import StableDiffusionPipeline # type: ignore from PIL import Image import os -auth_token = os.getenv("auth_token") +auth_token = os.getenv("HF_TOKEN") +if not auth_token: + print( + "ERROR: No Hugging Face access token found.\n" + "Please define an environment variable 'auth_token' before running.\n" + "Example:\n" + " export HF_TOKEN=XXXXXXXX\n" + ) + model_id = "CompVis/stable-diffusion-v1-4" device = "cpu" pipe = StableDiffusionPipeline.from_pretrained( - model_id, use_auth_token=auth_token, revision="fp16", torch_dtype=torch.float16 + model_id, token=auth_token, variant="fp16", torch_dtype=torch.float16, ) pipe = pipe.to(device) + def infer(prompt, samples, steps, scale, seed): generator = torch.Generator(device=device).manual_seed(seed) images_list = pipe( # type: ignore @@ -29,6 +38,7 @@ def infer(prompt, samples, steps, scale, seed): images.append(image) return images + block = gr.Blocks() with block: @@ -63,7 +73,12 @@ with block: step=1, randomize=True, ) - gr.on([text.submit, btn.click], infer, inputs=[text, samples, steps, scale, seed], outputs=gallery) + gr.on( + [text.submit, btn.click], + infer, + inputs=[text, samples, steps, scale, seed], + outputs=gallery, + ) advanced_button.click( None, [],