私有无服务器模型 Private Serverless Models

除了使用我们超快的公共 API 端点之外,您还可以利用 fal 的基础设施来构建您的私有 AI 模型。本节介绍如何将自定义私有 AI 模型部署到 fal 的基础设施。

企业

私有模型是企业功能,请发送电子邮件至 support@fal.ai 获取访问权限。

安装 fal sdk python 包

bash
pip install fal

快速运行Stable Diffusion

下面的示例使用 diffusers 库来运行一个简单的Stable Diffusion管道。

py
import fal
from pydantic import BaseModel
from fal.toolkit import Image

class Input(BaseModel):
    prompt: str

class Output(BaseModel):
    image: Image

class MyApp(fal.App, keep_alive=300):
    machine_type = "GPU-A100"
    requirements = [
        "diffusers==0.28.0",
        "torch==2.3.0",
        "accelerate",
        "transformers",
    ]

    def setup(self):
        import torch
        from diffusers import StableDiffusionXLPipeline, DPMSolverSinglestepScheduler

        self.pipe = StableDiffusionXLPipeline.from_pretrained(
            "sd-community/sdxl-flash",
            torch_dtype=torch.float16,
        ).to("cuda")
        self.pipe.scheduler = DPMSolverSinglestepScheduler.from_config(
            self.pipe.scheduler.config,
            timestep_spacing="trailing",
        )

    @fal.endpoint("/")
    def run(self, request: Input) -> Output:
        result = self.pipe(request.prompt, num_inference_steps=7, guidance_scale=3)
        image = Image.from_pil(result.images[0])
        return Output(image=image)
bash
fal run example.py::MyApp

首次运行此应用程序时,fal 将创建一个满足 requirements 变量中指定要求的虚拟环境。此环境将被缓存并用于后续每次调用 API。

bash
Access your exposed service at https://fal.run/1714827/4c5223d8-6943-47cb-8401-76c031ea222e

看到上述消息后,您的应用程序已准备好接受请求!

bash
curl -X POST https://fal.run/1714827/4c5223d8-6943-47cb-8401-76c031ea222e -H "Content-Type: application/json" -d '{"prompt":"rhino"}'

在此代码中:

  • MyApp 是一个从 fal.App 继承的类。此结构允许创建具有多个端点的复杂应用程序,这些端点使用 @fal.endpoint 装饰器定义。
  • machine_type 是一个类属性,用于指定此应用程序将在其上运行的机器类型。这里指定了 "GPU-A100"
  • requirements 是另一个类属性,列出了应用程序运行所需的依赖项。在本例中,"my_requirements" 是实际依赖项的占位符。
  • setup() 方法被重写以初始化应用程序中使用的模型。此方法在应用程序启动时执行一次。
  • @fal.endpoint 装饰器用于定义应用程序的路由或端点。在此示例中,仅定义了一个端点:“/”。

部署您的应用程序

一旦您的应用程序准备好部署,您就可以使用 fal CLI 来部署它:

bash
fal deploy example.py::MyApp

在此命令中,我们指示 fal 将 example.py 中的 MyApp 类部署为应用程序。

成功部署后,fal 将提供一个 URL,例如 https://fal.run/777/my_app。此 URL 是您部署的应用程序的公共访问点,允许您与 MyApp 类中定义的 API 端点进行交互。

设置函数和 keep_alive

keep_alive

“keep_alive” 是一种配置设置,即使没有活动请求,服务器也可以继续运行。通过设置 keep_alive,您可以确保如果在指定的时间范围内访问同一个应用程序,则可以完全避免产生任何开销。“keep_alive”以秒为单位,在下面的示例中,应用程序将在最后一次请求后继续运行至少 300 秒。

py
class MyApp(fal.App, keep_alive=300):
   ...

setup()

在管理 AI 工作负载时,防止每次调用无服务器应用程序时将同一模型重新加载到内存中至关重要。每个应用程序都可以定义一个 setup() 函数。此函数在应用程序启动期间调用一次,其结果将在整个服务器生命周期内缓存在内存中。

py
class MyApp(fal.App, keep_alive=300):
  machine_type = "GPU-A100"
  requirements = [
    "diffusers==0.28.0",
    "torch==2.3.0",
    "accelerate",
    "transformers",
  ]

  def setup(self):
    import torch
    from diffusers import StableDiffusionXLPipeline, DPMSolverSinglestepScheduler

    self.pipe = StableDiffusionXLPipeline.from_pretrained(
      "sd-community/sdxl-flash",
      torch_dtype=torch.float16,
    ).to("cuda")
    self.pipe.scheduler = DPMSolverSinglestepScheduler.from_config(
      self.pipe.scheduler.config,
      timestep_spacing="trailing",
    )

最小/最大并发性

fal 应用程序有一个简单的托管自动缩放系统。您可以通过 min_concurrencymax_concurrency 配置自动缩放行为。

py
class MyApp(fal.App, keep_alive=300, min_concurrency=1, max_concurrency=5):
   ...

min_concurrency - 表示系统在没有请求时应维护的副本数。 max_concurrency - 表示系统应具有的最大副本数。一旦达到此限制,所有后续请求都将放置在托管队列中。

最后更新于 2024 年 6 月 21 日