Loading...
Loading...
Compare original and translation side by side
basesearchlvswarehousealertsedgerun_script("scripts/normalize_resolved_yml.py", "<resolved.yml>")docker compose configcomposedev-profile.shbasesearchlvswarehousealertsedgerun_script("scripts/normalize_resolved_yml.py", "<resolved.yml>")docker compose configcomposedev-profile.sh| Script | Purpose | Arguments |
|---|---|---|
| Strip optional | Path to |
| 脚本 | 用途 | 参数 |
|---|---|---|
| 移除 | |
| User says | Profile | Reference |
|---|---|---|
| "deploy vss" / "deploy base" | | |
| "deploy alerts" / "alert verification" / "real-time alerts" / "deploy for incident report" | | |
| "deploy lvs" / "video summarization" | | |
| "deploy search" / "video search" | | |
| "deploy warehouse" / "warehouse blueprint" / "vss warehouse" | | |
| "debug warehouse" / "warehouse not working" / "warehouse FPS low" / "warehouse BEV out of sync" | | |
references/edge.md30081| 用户表述 | 配置文件 | 参考文档 |
|---|---|---|
| "deploy vss" / "deploy base" | | |
| "deploy alerts" / "alert verification" / "real-time alerts" / "deploy for incident report" | | |
| "deploy lvs" / "video summarization" | | |
| "deploy search" / "video search" | | |
| "deploy warehouse" / "warehouse blueprint" / "vss warehouse" | | |
| "debug warehouse" / "warehouse not working" / "warehouse FPS low" / "warehouse BEV out of sync" | | |
references/edge.md30081.envgenerated.envresolved.ymlundefined.envgenerated.envresolved.ymlundefined
The source `.env` is treated as **read-only defaults** committed to the repo. The skill's per-deploy working copy is `generated.env` — same pattern `dev-profile.sh` uses internally. This keeps the checked-in `.env` clean across iterations.
源`.env`被视为提交到仓库的**只读默认配置**。技能的每次部署工作副本为`generated.env`——与`dev-profile.sh`内部使用的模式一致。这样可以确保迭代过程中已签入的`.env`保持干净。video-search-and-summarization/TOOLS.mdreferences/ngc.md$NGC_CLI_API_KEYreferences/prerequisites.mdvideo-search-and-summarization/TOOLS.mdreferences/ngc.md$NGC_CLI_API_KEYreferences/prerequisites.mdreferences/prerequisites.mdreferences/edge.mdsudosudo -nif sudo -n true 2>/dev/null; then
echo "passwordless sudo — pre-flight will auto-install missing pieces"
else
echo "sudo requires password — pre-flight will NOT auto-install; hand commands to the user"
fireferences/prerequisites.mdnvidia-smi --query-gpu=index,name --format=csv,noheader
docker info 2>/dev/null | grep -qi runtimes \
&& docker run --rm --gpus all ubuntu:22.04 nvidia-smi >/dev/null 2>&1 \
&& echo "nvidia runtime OK"references/prerequisites.mdreferences/prerequisites.mdreferences/edge.mdsudosudo -nif sudo -n true 2>/dev/null; then
echo "无需密码的sudo权限——预部署将自动安装缺失组件"
else
echo "sudo需要密码——预部署将不会自动安装;请将命令交给用户手动执行"
fireferences/prerequisites.mdnvidia-smi --query-gpu=index,name --format=csv,noheader
docker info 2>/dev/null | grep -qi runtimes \
&& docker run --rm --gpus all ubuntu:22.04 nvidia-smi >/dev/null 2>&1 \
&& echo "nvidia runtime OK"references/prerequisites.md$LLM_REMOTE_URL$VLM_REMOTE_URL$NGC_CLI_API_KEY$NVIDIA_API_KEYEdge shared mode is platform-specific. On DGX Spark, runas a standalone local NIM on portnvcr.io/nim/nvidia/nvidia-nemotron-nano-9b-v2-dgx-spark:1.0.0-variantand point the agent at it with30081. On AGX/IGX Thor, keep using the Edge 4B standalone vLLM fallback withLLM_MODE=remote. Full recipes are inHF_TOKEN.references/edge.md
$LLM_REMOTE_URL$VLM_REMOTE_URL$NGC_CLI_API_KEY$NVIDIA_API_KEY边缘共享模式具有平台特异性。在DGX Spark上,运行作为端口nvcr.io/nim/nvidia/nvidia-nemotron-nano-9b-v2-dgx-spark:1.0.0-variant上的独立本地NIM,并通过30081让agent指向该模型。在AGX/IGX Thor上,继续使用带LLM_MODE=remote的Edge 4B独立vLLM降级方案。完整配置方案请查看HF_TOKEN。references/edge.md
references/teardown.mdreferences/teardown.md.envgenerated.envreferences/credentials.md.envgenerated.envreferences/credentials.md| Value | How to determine |
|---|---|
| Profile | Match user intent to the routing table above. Default: |
| Repo path | Find |
| Hardware | |
| LLM/VLM placement | Cross-reference available GPUs against the chosen profile's Minimum GPU count table |
| API keys | |
| |
| Browser-reachable host/IP. On Brev, use the secure-link domain (see |
| Browser-facing ingress port. Default |
docker compose upEXTERNAL_IPHAPROXY_PORTVSS_PUBLIC_HOSTVSS_PUBLIC_PORT| 信息项 | 确认方式 |
|---|---|
| 配置文件 | 根据用户需求与上述路由表匹配。默认值: |
| 仓库路径 | 在磁盘上找到 |
| 硬件信息 | 运行 |
| LLM/VLM部署位置 | 将可用GPU与所选配置文件的最低GPU数量表交叉核对 |
| API密钥 | 本地NIM使用 |
| 运行 |
| 可通过浏览器访问的主机/IP。在Brev平台上,请使用安全链接域名(请查看 |
| 面向浏览器的入口端口。默认值为 |
docker compose upEXTERNAL_IPHAPROXY_PORTVSS_PUBLIC_HOSTVSS_PUBLIC_PORTreferences/data-directory.mdFORBIDDEN:(or any recursive chown).chown -R ubuntu:ubuntu $VSS_DATA_DIRThis is "good housekeeping" to a shell-admin instinct but is the deploy-breaking command in this stack. You will observe a "healthy" deploy (containers Up, endpoints 200) while the video pipeline is silently broken. Useon the specific subdirs documented inchmod -R 777— nothing else.data-directory.md
references/data-directory.md禁止执行:(或任何递归chown命令)chown -R ubuntu:ubuntu $VSS_DATA_DIR对于shell管理员来说这看似是“良好的管理操作”,但却是导致本部署堆栈失败的关键命令。执行该命令后,部署可能显示“健康”状态(容器已启动、端点返回200),但视频流水线会静默失效。请仅对中记录的特定子目录执行data-directory.md——请勿对其他目录执行该操作。chmod -R 777
generated.envgenerated.env.envPROFILE=base
ENV_SRC=$REPO/deploy/docker/developer-profiles/dev-profile-$PROFILE/.env
ENV_GEN=$REPO/deploy/docker/developer-profiles/dev-profile-$PROFILE/generated.env
cp "$ENV_SRC" "$ENV_GEN"EXTERNAL_IP$ENV_GEN$ENV_SRC.envPROFILE=base
ENV_SRC=$REPO/deploy/docker/developer-profiles/dev-profile-$PROFILE/.env
ENV_GEN=$REPO/deploy/docker/developer-profiles/dev-profile-$PROFILE/generated.env
cp "$ENV_SRC" "$ENV_GEN"EXTERNAL_IP$ENV_GEN$ENV_SRCEXTERNAL_IPEXTERNAL_IPBREV_ENV_ID/etc/environmentEXTERNAL_IPgenerated.env.envreferences/brev.mdbrev_env_id=$(awk -F= '/^BREV_ENV_ID=/ {gsub(/"/, "", $2); print $2; exit}' /etc/environment)
sed -i "s|^EXTERNAL_IP=.*|EXTERNAL_IP=7777-${brev_env_id}.brevlab.com|" "$ENV_GEN"/etc/environmentBREV_ENV_IDEXTERNAL_IPgenerated.envreferences/brev.mdbrev_env_id=$(awk -F= '/^BREV_ENV_ID=/ {gsub(/"/, "", $2); print $2; exit}' /etc/environment)
sed -i "s|^EXTERNAL_IP=.*|EXTERNAL_IP=7777-${brev_env_id}.brevlab.com|" "$ENV_GEN"env_overridesreferences/env-overrides.mdenv_overridesreferences/env-overrides.md<repo>/deploy/docker/developer-profiles/dev-profile-<profile>/generated.envTwo env files, distinct roles.
— read-only defaults, checked in. Don't mutate it from the skill..env — the skill's per-deploy working copy. All overrides (the dict from Step 2, plus the Brevgenerated.envfrom Step 1d) land here.EXTERNAL_IPalways points at this file. Post-deploy verifiers should also read from--env-filefor the actually-deployed values — see Debugging a Deployment.generated.envmatches the conventiongenerated.envuses internally — it's a per-invocation scratchpad regenerated bydev-profile.sheach run.cp .env generated.env
undefined<repo>/deploy/docker/developer-profiles/dev-profile-<profile>/generated.env两个环境文件,职责不同
—— 只读默认配置,已签入仓库。请勿通过技能修改该文件。.env —— 技能的每次部署工作副本。所有覆盖配置(步骤2中的字典、步骤1d中的Brev平台generated.env)均写入该文件。EXTERNAL_IP始终指向该文件。部署后验证程序也应从--env-file读取实际部署的值——请查看部署调试。generated.env与generated.env内部使用的约定一致——它是每次调用时通过dev-profile.sh重新生成的临时文件。cp .env generated.env
undefined
The resolved YAML is saved to `<repo>/deploy/docker/resolved.yml`.
已解析的YAML文件保存到`<repo>/deploy/docker/resolved.yml`。${VAR}resolved.ymlreferences/troubleshooting.mdresolved.yml${VAR}references/troubleshooting.mddepends_ondepends_onundefinedundefinedIf `uv` isn't on the host, install it once with `curl -LsSf https://astral.sh/uv/install.sh | sh` (no root needed).
**Re-validate** before `up -d`:
```bash
docker compose -f "$REPO/deploy/docker/resolved.yml" config --quiet && echo "resolved.yml OK"如果主机上未安装`uv`,请运行`curl -LsSf https://astral.sh/uv/install.sh | sh`进行安装(无需root权限)。
**在执行`up -d`前重新验证**:
```bash
docker compose -f "$REPO/deploy/docker/resolved.yml" config --quiet && echo "resolved.yml OK"cd $REPO/deploy/docker
docker compose --env-file $ENV_GEN -f resolved.yml up -dis mandatory. Without the same--env-fileused in Step 3,generated.envmay be unset andCOMPOSE_PROFILEScan exit 0 with zero selected services.up -d
Do NOT useon retries. It destroys already-warm NIM containers, forcing another 3–5 min torch.compile + CUDA-graph capture per NIM. If the previous--force-recreatepartially failed, fix the root cause (usually perms or an env typo) and just re-runup -d— Docker will re-create only the containers whose config changed or that are down.up -d
docker compose up -dcd $REPO/deploy/docker
docker compose --env-file $ENV_GEN -f resolved.yml up -d是必填项。如果未使用步骤3中相同的--env-file,generated.env可能未设置,COMPOSE_PROFILES可能返回0但未启动任何选定服务。up -d
重试时请勿使用。该命令会销毁已预热的NIM容器,导致每个NIM需重新进行3–5分钟的torch.compile + CUDA-graph捕获。如果之前的--force-recreate部分失败,请修复根本原因(通常是权限或环境变量输入错误)并重新运行up -d——Docker仅会重新创建配置已更改或处于停止状态的容器。up -d
docker compose up -dup -dexpected=$(docker compose --env-file $ENV_GEN -f resolved.yml config --services | wc -l)
actual=$(docker compose -f resolved.yml ps -q | wc -l)
[ "$actual" -gt 0 ] && [ "$actual" -ge "$expected" ] \
|| { echo "FAIL: expected $expected services, got $actual — re-check Step 5 --env-file"; exit 1; }references/readiness.mdup -dup -dexpected=$(docker compose --env-file $ENV_GEN -f resolved.yml config --services | wc -l)
actual=$(docker compose -f resolved.yml ps -q | wc -l)
[ "$actual" -gt 0 ] && [ "$actual" -ge "$expected" ] \
|| { echo "FAIL: expected $expected services, got $actual — re-check Step 5 --env-file"; exit 1; }references/readiness.mdup -dcd $REPO/deploy/docker
docker compose -f resolved.yml downreferences/teardown.mdcd $REPO/deploy/docker
docker compose -f resolved.yml downreferences/teardown.mdundefinedundefinedundefinedundefineddocker logs vss-agentdocker logs vss-agentbasedev-profile-base/.envgenerated.envLLM_MODE=remoteVLM_MODE=remote/docssearchreferences/search.mdreferences/edge.mdgenerated.envbasedev-profile-base/.envgenerated.envLLM_MODE=remoteVLM_MODE=remote/docssearchreferences/search.mdreferences/edge.mdgenerated.envvss-deploy-*vss-deploy-*references/agent-failure-modes.mdNGC_CLI_API_KEYHF_TOKENresolved.ymlNGC_CLI_API_KEYHF_TOKENresolved.ymlreferences/agent-failure-modes.md