管理服务
一次运行会自行安装并启动其 agent 所用的服务。下面这些命令用于手动完成这些操作:提前安装、在多次运行之间 保持模型加载,或查看正在运行的内容。
harness services [--json] # every manifest: kind, protocol, port, VRAMharness doctor [NAMES] # installed or not, what is missing, GPUs and free memoryharness install NAMES # environments, sources and weights, without starting anythingharness up [NAMES] # start the resident ones (and the broker)harness status [NAMES] # where each runs, whether it answersharness down [NAMES] # stop what harness up started每个命令都接受 --deploy NAME(configs/deploy/<name>.toml)或一个路径,用于自己放置服务;不提供时,
使用 $HARNESS_DEPLOY,或 harness 自己的放置方案。
install
Section titled “install”对每个服务:在 ~/.cache/harness/envs/<name> 下构建其清单的 [environment] 所描述的环境(Python 版本、
固定版本的依赖、固定 commit 的源码),然后下载它的 [[weights]](见下文),再检查它能否导入、它的
needs_files 是否存在。已经与清单一致的环境保持不变;环境有变化的清单会得到一个新环境。
doctor
Section titled “doctor”对 deploy 运行的每个服务检查:其清单 needs_files 中的文件、它的解释器和工作目录、它的 GPU 是否存在、
外部 URL 是否有响应,以及 GPU 是否有足够的空闲显存容纳还要启动的服务(swap group 按其最大成员计算);
还检查仿真器的 GPU 是否存在以及 RoboDojo 的 checkout 在哪里。已经有响应的端口会被记录下来(该服务将按
现状使用)。它打印 GPU、问题和备注(--json 输出全部内容),有问题时以 1 退出。
对清单中的每个 [[weights]] 条目,下载到 <weights>/<dir>:
modelscope_model / modelscope_dataset 通过 scripts/modelscope_download.py 下载,
hf_model / hf_dataset 通过 scripts/hf_mirror_download.py 下载(hf-mirror.com,大文件分段并行下载)。
sha256 已经匹配的文件会被跳过;下载可以断点续传。是符号链接或标记为 local 的条目保持不变:要使用你在
别处已有的权重,就为该目录建立符号链接。
up、status、down
Section titled “up、status、down”harness up 在各自的进程组中启动每个常驻服务,日志写入 <state>/logs/<name>.log 并记录 pid,等待每个
服务响应(最多为其 load_seconds 的三倍),然后在 deploy 包含按需服务时启动 broker。端口已经有响应的
服务不会被改动(另一个 checkout,或手动启动的)。harness down 只停止它自己启动的进程:依次向进程组发送
SIGINT、SIGTERM、SIGKILL,间隔 15 s;不指定名称时,broker 也会停止。
按需、swap group、外部
Section titled “按需、swap group、外部”[services.g05]gpu = 1mode = "on_demand"swap = "learned" # services of one group share GPU 1, one loaded at a timeidle_seconds = 600 # stop it after 10 minutes without a request
[services.openwam]gpu = 1mode = "on_demand"swap = "learned"
[services.molmo2]mode = "external" # someone else runs iturl = "http://10.0.0.7:8830"broker 监听 broker_port(默认 8899),在客户端请求时启动按需服务;客户端在每次调用前发出请求。
harness run 在第一个 episode 之前检查常驻服务和外部服务是否有响应,并在需要时启动 broker。
使用自己的解释器或环境的服务
Section titled “使用自己的解释器或环境的服务”[services.dm05]python = "/data/venvs/opendm/bin/python"env = { OPENPI_DATA_HOME = "/data/openpi-cache" }gpu = 2服务无法启动时
Section titled “服务无法启动时”missing files [...]; run harness fetch NAME:权重不在清单预期的位置(<weights>/<dir>)。NAME exited before it answered; see <state>/logs/NAME.log:阅读该日志。No GPU of [...] has N GB left for NAME:放置方案放不下;移动一个服务、把服务改为按需并放进一个 swap group,或关闭其中一个。Services A and B both use port P:在 deploy 中给其中一个指定port。