Sign inSign up

shhh9991/sam3-video

By shhh9991

•Updated 4 months ago

Image
0

84

shhh9991/sam3-video repository overview

services:
  samv:
    build:
      context: .
      dockerfile: Dockerfile
    image: ${SAMV_DOCKER_IMAGE:-sam3-video:BV1}
    command:
      [
        "uvicorn",
        "docker_api:app",
        "--host",
        "0.0.0.0",
        "--port",
        "8800",
        "--loop",
        "asyncio",
        "--http",
        "h11",
        "--log-level",
        "warning",
        "--no-access-log",
      ]
    # HTTP API DOCKER-SAMV на хосте → порт контейнера uvicorn.
    ports:
      - "8800:8800"
    logging:
      driver: json-file
      options:
        # Ротация логов контейнера: один файл не больше max-size, хранить не больше max-file файлов.
        max-size: "10m"
        max-file: "3"
    environment:
      # Через сколько секунд удалять готовые *_result* / json из output_api (не мешать долгим джобам — подбери под диск).
      SAMV_OUTPUT_TTL_SEC: "1200"
      # Как часто фоновый поток проверяет output_api и чистит протухшие файлы (сек).
      SAMV_OUTPUT_CLEANUP_INTERVAL_SEC: "90"
      # 1 = после успешной обработки удалить загруженный исходник видео из output_api, 0 = оставить до TTL.
      SAMV_DELETE_SOURCE_AFTER_JOB: "1"
      # 1 = разрешить сценарии с полной предзагрузкой кадров в RAM (нужно для stable-json и части путей Sam31Engine).
      SAM3_HF_VIDEO_PRELOAD: "1"
      # Заголовок CORS для FastAPI: * = любой origin; для продакшена лучше список доменов через запятую.
      SAMV_CORS_ORIGINS: "*"
      # 1 = RLE/JSON по кадрам собирать в пуле процессов (после инференса); 0 = всё в одном процессе.
      SAM3_JSON_PARALLEL: "1"
      # Ровно половина логических CPU хоста (32 → 16) для пула сериализации JSON; см. шапку файла.
      SAM3_JSON_POOL_WORKERS: "16"
      # 1 = не больше os.cpu_count() внутри контейнера (обычно совпадает с лимитом deploy ниже).
      SAM3_JSON_POOL_STRICT_CPU_CAP: "1"
      # Потолок воркеров (16 укладывается; оставлено на случай если поднимешь SAM3_JSON_POOL_WORKERS).
      SAM3_JSON_POOL_MAX_WORKERS: "32"
      # Минимум кадров в очереди, чтобы включить ProcessPool (ниже — чаще параллель на коротких роликах, больше накладных расходов).
      # SAM3_JSON_PARALLEL_MIN_FRAMES: "4"
      # merge = каждый сегмент промпта отдельным проходом модели, маски объединяются; join = один проход, текст «a, b» (быстрее).
      SAM3_VIDEO_TEXT_PROMPTS_MODE: "merge"
      # Если join дал почти пустой/неразбитый результат, автоматически откатиться в merge для этого job.
      SAM3_JOIN_FALLBACK_TO_MERGE: "0"
      # Порог "пустого" join (суммарно по всем кадрам). Ниже — fallback в merge.
      SAM3_JOIN_FALLBACK_MIN_INSTANCES: "1"
      # Частота стабильных текстовых прогресс-логов во время propagate (сек), независимо от tqdm.
      SAM3_PROGRESS_LOG_INTERVAL_SEC: "2"
      # 1 = отдавать в SAM путь к MP4 без полной выгрузки кадров в numpy (быстрее и меньше RAM при JSON-only).
      SAM3_USE_RESOURCE_PATH: "1"
      # Потоки CPU в библиотеках (один процесс) — выровнено под половину ядер хоста, см. шапку.
      OMP_NUM_THREADS: "16"
      OPENBLAS_NUM_THREADS: "16"
      MKL_NUM_THREADS: "16"
      # Встроенный /app/cache из образа (или override через volume).
      SAMV_MODEL_PATH: "/app/cache"
      # Токен Hugging Face для gated facebook/sam3, если веса тянутся с HF; локальный sam3.pt в cache часто делает токен необязательным.
      HF_TOKEN: ${HF_TOKEN:-}
      # Явный путь к файлу весов вместо поиска в SAMV_MODEL_PATH (если веса не в ./cache).
      # SAM3_VIDEO_CHECKPOINT: "/abs/path/sam3.pt"
      # 1 + HF_TOKEN = разрешить sam3 скачивать веса с HF, если локального чекпоинта нет (по умолчанию в коде обычно выкл.).
      # SAM3_ALLOW_HF_DOWNLOAD: "1"
      # Минимальный билд как в ноутбуке Meta (1) или расширенный с bpe/compile/async (0) — см. sam31_engine.py.
      # SAM3_VIDEO_NOTEBOOK_BUILD: "1"
      # Компактный JSON без отступов — быстрее запись больших *_data.json (см. video_processor._video_data_json_dumps).
      # SAM3_JSON_COMPACT: "1"
      # 0 = RLE масок только на Python; по умолчанию numba JIT в app/core/mask_json.py (если пакет numba установлен).
      SAM3_MASK_RLE_NUMBA: "1"
    # Храним output_api на диске хоста (не в RAM): JSON/артефакты сохраняются между перезапусками контейнера.
    volumes:
      - ./output_api:/app/output_api
    # Проброс всех GPU хоста в контейнер (нужен CUDA для Sam31Engine).
    # gpus: all
    # Ограничение контейнера: ровно половина логических CPU хоста (32 → 16). Проверка: docker stats.
    deploy:
      reservations:
        devices:
          - driver: nvidia
            count: 1
            capabilities: [gpu]
      resources:
        limits:
          cpus: "16.0"


Tag summary

Content type

Image

Digest

sha256:d52c6ee64…

Size

12 GB

Last updated

4 months ago

docker pull shhh9991/sam3-video:BV1