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"
Content type
Image
Digest
sha256:d52c6ee64…
Size
12 GB
Last updated
4 months ago
docker pull shhh9991/sam3-video:BV1