3D 机器学习课程文档

动手实践(第二部分)

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始

动手实践(第二部分)

Open In Colab

是时候托管您自己的演示了!在本节中,您将

  1. 使用您自己的模型重新运行 Notebook。
  2. 使用 Gradio 创建一个演示。
  3. (可选)部署您的演示。

重新运行 Notebook

在 Notebook 中,将模型名称替换为您自己的模型名称

import torch
from diffusers import DiffusionPipeline

multi_view_diffusion_pipeline = DiffusionPipeline.from_pretrained(
    "<your-user-name>/<your-model-name>",
    custom_pipeline="dylanebert/multi-view-diffusion",
    torch_dtype=torch.float16,
    trust_remote_code=True,
).to("cuda")

然后,重新运行 Notebook。您应该看到与之前相同的结果。

Multi-view Cats

Gradio 演示

现在,让我们创建一个 Gradio 演示

import gradio as gr

def run(image):
  image = np.array(image, dtype=np.float32) / 255.0
  images = multi_view_diffusion_pipeline("", image, guidance_scale=5, num_inference_steps=30, elevation=0)

  images = [Image.fromarray((img * 255).astype("uint8")) for img in images]

  width, height = images[0].size
  grid_img = Image.new("RGB", (2 * width, 2 * height))

  grid_img.paste(images[0], (0, 0))
  grid_img.paste(images[1], (width, 0))
  grid_img.paste(images[2], (0, height))
  grid_img.paste(images[3], (width, height))

  return grid_img

demo = gr.Interface(fn=run, inputs="image", outputs="image")
demo.launch()

run 方法将前面所有代码组合到一个函数中。然后,gr.Interface 方法使用此函数创建一个演示,其中包含 image 输入和 image 输出。

恭喜!您已经为您的模型创建了一个 Gradio 演示。

(可选)部署您的演示

您可能希望在 Colab 之外运行您的演示。

有很多方法可以做到这一点

选项 1:创建 Space

前往 Hugging Face Spaces 并创建一个新的 Space。选择 Gradio Space SDK。在 Space 中创建一个名为 app.py 的新文件,并将 Gradio 演示的代码粘贴进去。将演示的 requirements.txt 复制到 Space 中。

有关完整示例,请查看此 Space,然后单击右上角的 Files 以查看源代码。

注意:此方法需要 GPU 来公开托管,这会产生费用。但是,您可以按照选项 3 中的说明在本地免费运行演示。

选项 2:Gradio Deploy

Gradio 可以使用 gradio deploy 命令轻松地将您的演示部署到服务器。

有关更多详细信息,请查看 Gradio 文档

选项 3:本地运行

要在本地运行,只需将代码复制到一个 Python 文件中,并在您的机器上运行它。

完整的源文件应如下所示

import gradio as gr
import numpy as np
import torch
from diffusers import DiffusionPipeline
from PIL import Image

multi_view_diffusion_pipeline = DiffusionPipeline.from_pretrained(
    "dylanebert/multi-view-diffusion",
    custom_pipeline="dylanebert/multi-view-diffusion",
    torch_dtype=torch.float16,
    trust_remote_code=True,
).to("cuda")


def run(image):
    image = np.array(image, dtype=np.float32) / 255.0
    images = multi_view_diffusion_pipeline(
        "", image, guidance_scale=5, num_inference_steps=30, elevation=0
    )

    images = [Image.fromarray((img * 255).astype("uint8")) for img in images]

    width, height = images[0].size
    grid_img = Image.new("RGB", (2 * width, 2 * height))

    grid_img.paste(images[0], (0, 0))
    grid_img.paste(images[1], (width, 0))
    grid_img.paste(images[2], (0, height))
    grid_img.paste(images[3], (width, height))

    return grid_img


demo = gr.Interface(fn=run, inputs="image", outputs="image")
demo.launch()

要在虚拟 Python 环境中设置并运行此演示,请运行以下命令

# Setup
python -m venv venv
source venv/bin/activate
pip install -r https://huggingface.co/spaces/dylanebert/multi-view-diffusion/raw/main/requirements.txt

# Run
python app.py

注意:此演示已在 NVIDIA RTX 4090 上使用 Python 3.10.12 和 CUDA 12.1 进行测试。

< > 在 GitHub 上更新