服务
有些能力需要在你自己的硬件上运行的模型:分割模型、机器人的学习型策略、世界模型、本地语言模型。The Harness 把每个这样的模型作为一个
服务运行:一个独立的进程,在独立的环境中,agent 的 skill 通过 HTTP 调用它。服务由包提供;harness services
列出你拥有的服务。
你很少需要自己启动服务。一次运行开始时,The Harness 会找出 agent 的 skill 用到哪些服务,安装这台电脑上缺少的,并在它找到的 GPU 上启动它们。安装了提供服务的包之后,下面的命令用于手动操作:提前安装、在多次运行之间保持模型加载,或查看正在运行的内容。
harness services # every service: what it does, its port, the GPU memory it needsharness doctor sam3 # whether it is installed, what is missing, the GPUs and their free memoryharness install sam3 # its environment, sources and weights, without starting itharness fetch sam3 # only its weightsharness up sam3 # start it (without names: every resident service)harness status # where each runs and whether it answersharness down sam3 # stop it (without names: everything harness up started)harness install 在 ~/.cache/harness/envs/ 下构建服务指定的环境(它的 Python 版本、固定版本的依赖和源码),下载它的权重并检查是否完整,再检查它能否导入。已经匹配的环境保持不动。每次安装的日志在
~/.cache/harness/logs/install-<name>.log。
不做任何配置时,The Harness 自己放置服务:GPU 上有空间时,服务是常驻的(加载一次并保持);GPU 需要共享时,服务是按需的(skill 第一次调用时启动,空闲一段时间后停止)。没有 GPU 的电脑可以运行所有模型都是托管模型的 agent,或者通过 URL 访问在别处运行的服务。
要自己决定,写一个 deploy 文件,用 --deploy FILE(每条命令都接受)或 HARNESS_DEPLOY 传入:
[services.sam3]gpu = 0 # resident on GPU 0
[services.g05]gpu = 1mode = "on_demand"swap = "policies" # services of one swap group share GPU 1, one loaded at a timeidle_seconds = 600 # stopped after 10 minutes without a request
[services.openwam]gpu = 1mode = "on_demand"swap = "policies"
[services.molmo2]mode = "external" # someone else runs iturl = "http://gpu-box.local:8830"| 键 | |
|---|---|
gpu |
它运行在哪块 GPU 上 |
mode |
resident(默认)、on_demand 或 external |
swap |
一组共享一块 GPU 的按需服务,同一时间只加载一个 |
idle_seconds |
按需服务在没有请求时保持运行多久 |
url |
外部服务的地址 |
python、env |
服务使用的另一个解释器,或环境变量 |
服务在哪里运行从来不属于一次运行的 identity:同一个 agent 配上同样的服务,在任何电脑上计算的都是同样的东西。
按需服务由一个小的 broker 进程启动;当 deploy 文件中有按需服务时,harness up(或一次运行)会启动它。skill 在每次调用前询问
broker;broker 在服务没有运行时启动它,等到它响应,并在 idle_seconds 内没有请求后停止它。在同一个 swap group
中,启动一个服务会先停止其他服务。
每个服务把日志写到 ~/.cache/harness/logs/<name>.log。harness status 显示每个服务是否响应。如果服务要启动时它的端口已经有响应,就直接使用已有的那个(另一次运行启动的,或手动启动的),而
harness down 只停止 harness up 启动的服务。
当一次运行无法启动它需要的服务时,agent 可能在没有那些依赖该服务的 skill 的情况下运行;harness doctor EXPERIMENT 和
harness run --dry-run 会列出将被去掉的 skill 及原因。--strict 让运行改为拒绝启动。
排错列出了常见错误。
