私有模型是企业功能,请发送电子邮件至 support@fal.ai 获取访问权限。
安装 fal sdk python 包
pip install fal
快速运行Stable Diffusion
下面的示例使用 diffusers
库来运行一个简单的Stable Diffusion管道。
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)
fal run example.py::MyApp
首次运行此应用程序时,fal
将创建一个满足 requirements
变量中指定要求的虚拟环境。此环境将被缓存并用于后续每次调用 API。
Access your exposed service at https://fal.run/1714827/4c5223d8-6943-47cb-8401-76c031ea222e
看到上述消息后,您的应用程序已准备好接受请求!
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 来部署它:
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 秒。
class MyApp(fal.App, keep_alive=300):
...
setup()
在管理 AI 工作负载时,防止每次调用无服务器应用程序时将同一模型重新加载到内存中至关重要。每个应用程序都可以定义一个 setup() 函数。此函数在应用程序启动期间调用一次,其结果将在整个服务器生命周期内缓存在内存中。
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_concurrency
和 max_concurrency
配置自动缩放行为。
class MyApp(fal.App, keep_alive=300, min_concurrency=1, max_concurrency=5):
...
min_concurrency
- 表示系统在没有请求时应维护的副本数。 max_concurrency
- 表示系统应具有的最大副本数。一旦达到此限制,所有后续请求都将放置在托管队列中。
最后更新于 2024 年 6 月 21 日