Fal.ai

Fal.ai

fal.ai는 생성형 AI 모델을 위한 서버리스 클라우드 플랫폼이에요. 이미지, 비디오, 오디오, 음악, 음성, 3D, 실시간 스트리밍까지 1,000개 이상의 최적화된 모델을 하나의 통합 API로 호출할 수 있고, 직접 만든 모델을 같은 인프라에 배포할 수도 있어요. 업계 최고 수준의 추론 속도, 99.99% 이상의 가동률, 하루 수십억 건의 요청까지 처리할 수 있는 확장성을 갖추고 있어서, 세계 최고의 AI 앱들이 사용하는 플랫폼이에요.

출처: 문서

본문

핵심 개념

서버리스 AI 추론 (Serverless Inference) fal.ai의 핵심은 GPU 인프라가 수요에 따라 0개에서 수천 개의 머신으로 자동 확장(autoscale)되는 서버리스 추론이에요. 사용한 만큼만 비용을 지불하는 pay-per-use 방식이라 요청이 없을 때는 비용이 들지 않아요. 모든 모델은 HTTP 엔드포인트로 노출되어 있고, 입력을 JSON으로 보내면 결과(미디어 URL 포함)를 JSON으로 받아요. H100, H200, A100 등 원하는 머신 타입을 고를 수 있어요.

큐/HTTP (Queue-based Inference) fal의 추천 호출 방식은 비동기 큐(queue) 기반 방식이에요. submit()으로 요청을 제출하면 즉시 반환되고, 요청은 큐에 들어가 자동 재시도, 상태 추적, 무한 확장의 이점을 받아요. 요청은 IN_QUEUE → PROCESSING → COMPLETED 상태를 거치며, 결과는 폴링(polling)이나 웹훅(webhook)으로 받을 수 있어요. 반면 run() 같은 직접 호출은 큐를 거치지 않고 바로 runner에 연결되어 더 빠르지만 재시도와 상태 추적이 없어요. 이 두 경로는 같은 runner와 확장 인프라를 공유해요.

모델 배포 (Serverless Deployment) 직접 만든 모델이나 파이프라인도 같은 엔진 위에 배포할 수 있어요. fal.App이라는 Python 클래스를 작성하고, setup() 메서드에서 모델 가중치를 로드하고, @fal.endpoint 데코레이터로 API 엔드포인트를 정의해요. fal run으로 테스트하고 fal deploy로 배포하면, 자동 확장과 재시도가 포함된 영구 엔드포인트가 생성돼요. 기존 Docker 서버, Replicate, Modal, RunPod, Baseten에서도 마이그레이션할 수 있어요.

웹소켓 스트리밍 (WebSocket & Streaming) 실시간 저지연 애플리케이션을 위해 WebSocket 기반 연결을 제공해요. realtime()은 큐를 거치지 않고 영구 연결을 유지하며 sub-100ms 지연 시간을 목표로 해요. 스트리밍(stream())은 LLM의 토큰처럼 출력이 생성되는 대로 점진적으로 결과를 전달해줘요. @fal.realtime(path) 데코레이터로 실시간 WebSocket 엔드포인트를 직접 만들 수도 있고, SSE(Server-Sent Events) 스트리밍도 지원해요.

SDK 설치

pip install fal-client
npm install @fal-ai/client

API 키는 fal 대시보드에서 발급받아 환경 변수로 설정해요.

export FAL_KEY="your-api-key-here"

사용 예시

이미지 생성 (Python):

import fal_client

result = fal_client.subscribe("fal-ai/nano-banana-2", arguments={
    "prompt": "a futuristic cityscape at sunset"
})
print(result["images"][0]["url"])

이미지 생성 (JavaScript):

import { fal } from "@fal-ai/client";

const result = await fal.subscribe("fal-ai/nano-banana-2", {
  input: { prompt: "a futuristic cityscape at sunset" }
});
console.log(result.data.images[0].url);

cURL로 직접 호출:

curl -X POST "https://queue.fal.run/fal-ai/nano-banana-2" \
  -H "Authorization: Key ***" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a futuristic cityscape at sunset"}'

모델 배포 예시 (Python):

import fal
from pydantic import BaseModel

class Input(BaseModel):
    prompt: str

class MyModel(fal.App):
    machine_type = "GPU-H100"

    def setup(self):
        self.model = load_my_model()

    @fal.endpoint("/")
    def generate(self, input: Input):
        return self.model(input.prompt)

배포 명령어:

fal run my_app.py      # cloud GPU에서 테스트
fal deploy my_app.py   # 프로덕션 배포

더 알아보기 (Learn more)