From 98b55eaa9b26b7a232a10aaac130cb77db15f221 Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Mon, 28 Sep 2026 17:13:54 -0400 Subject: [PATCH 1/5] =?UTF-8?q?exp:=20E43=20scripts=20-=20the=20fpo-policy?= =?UTF-8?q?=20=C2=B7=20FPO=20=C2=B7=20HalfCheetah=20cell=20with=20its=20en?= =?UTF-8?q?v=20clients=20on=20another=20machine=20(before=20the=20pilot)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../e43-cross-machine-training/client_side.sh | 47 ++++++++++ .../e43-cross-machine-training/server_side.sh | 88 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 experiments/e43-cross-machine-training/client_side.sh create mode 100644 experiments/e43-cross-machine-training/server_side.sh diff --git a/experiments/e43-cross-machine-training/client_side.sh b/experiments/e43-cross-machine-training/client_side.sh new file mode 100644 index 0000000..c3b39de --- /dev/null +++ b/experiments/e43-cross-machine-training/client_side.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# E43's env clients for the cross arm, on the second machine: a Windows laptop +# that reaches guangzhao over Tailscale. The same command line as the local +# arm's clients, with guangzhao's address in place of 127.0.0.1. +# +# bash client_side.sh STEPS [OUT_DIR] +# +# PLUGRL_CLIENT_DIR is an env-client checkout at guangzhao's commit, with the +# mujoco extra and guangzhao's mujoco and gymnasium versions. +set -uo pipefail + +STEPS="$1" +HERE="$(cd "$(dirname "$0")" && pwd)" +OUT="${2:-$HERE/results/cross-clients}" +mkdir -p "$OUT" +HOST="${SERVER_HOST:-100.75.226.89}" +PORT_BASE="${PORT_BASE:-9790}" +SEEDS="${SEEDS:-0 1 2}" +CLIENT_DIR="${PLUGRL_CLIENT_DIR:?set PLUGRL_CLIENT_DIR to the env-client checkout}" +CLIENT_PY="$CLIENT_DIR/.venv/Scripts/python.exe" +[ -x "$CLIENT_PY" ] || CLIENT_PY="$CLIENT_DIR/.venv/bin/python" + +echo "client: $CLIENT_PY" +echo "server: $HOST ports $PORT_BASE+seed" +echo "out: $OUT" +date '+start %F %T' + +run_seed() { + local seed="$1" port=$((PORT_BASE + $1)) + (cd "$CLIENT_DIR" && "$CLIENT_PY" -m plugrl_env_client.cli mujoco-v1 \ + --server-port "$port" --server-host "$HOST" \ + --num-envs 1 --num-episodes $((STEPS / 1000 + 10)) \ + --runner.replan-steps 1 --runner.seed "$seed" \ + --exp-name "e43-cross-seed$seed" \ + > "$OUT/client-seed$seed.log" 2>&1) + echo "seed $seed client rc=$? at $(date '+%T')" +} + +PIDS=() +for seed in $SEEDS; do + run_seed "$seed" & + PIDS+=($!) + sleep 5 +done +for pid in "${PIDS[@]}"; do wait "$pid"; done +date '+end %F %T' +echo "CLIENTS_DONE" diff --git a/experiments/e43-cross-machine-training/server_side.sh b/experiments/e43-cross-machine-training/server_side.sh new file mode 100644 index 0000000..8fbec96 --- /dev/null +++ b/experiments/e43-cross-machine-training/server_side.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +# E43's training servers, on guangzhao: the fpo-policy · FPO · HalfCheetah +# cell of the coverage figure, E16 Phase A's command lines unchanged. +# +# bash server_side.sh local STEPS [OUT_DIR] # servers and env clients here +# bash server_side.sh cross STEPS [OUT_DIR] # servers only; the env clients +# # connect from another machine +# # (client_side.sh) +# +# One server per seed, as in E16. The server seed initialises the policy and +# the client seed the environment, and the two arms use the same pairs. +set -uo pipefail + +ARM="$1" +STEPS="$2" +HERE="$(cd "$(dirname "$0")" && pwd)" +OUT="${3:-$HERE/results/$ARM}" +case "$OUT" in /*) ;; *) OUT="$(pwd)/$OUT" ;; esac +case "$ARM" in + local) PORT_BASE="${PORT_BASE:-9780}" ;; + cross) PORT_BASE="${PORT_BASE:-9790}" ;; + *) echo "arm must be local or cross" >&2; exit 2 ;; +esac + +SEEDS="${SEEDS:-0 1 2}" +BUFFER="${BUFFER:-4096}" +SERVER_DIR="$(cd "$HERE/../.." && pwd)" +CLIENT_DIR="${PLUGRL_ENV_CLIENT:-$SERVER_DIR/../plugrl-env-client}" +SERVER_PY="${PLUGRL_SERVER_PYTHON:-$SERVER_DIR/../plugrl-server/.venv/bin/python}" +CLIENT_PY="${PLUGRL_CLIENT_PYTHON:-$CLIENT_DIR/.venv/bin/python}" +export OMP_NUM_THREADS=1 +mkdir -p "$OUT" + +echo "arm: $ARM ports $PORT_BASE+seed" +echo "server: $SERVER_PY (src $SERVER_DIR/src)" +[ "$ARM" = local ] && echo "client: $CLIENT_PY" +echo "out: $OUT" +echo "steps: $STEPS seeds: $SEEDS" +date '+start %F %T' + +run_seed() { + local seed="$1" port=$((PORT_BASE + $1)) + (cd "$SERVER_DIR" && exec env PYTHONPATH="$SERVER_DIR/src" "$SERVER_PY" -m plugrl_server.cli \ + fpo-policy default fpo default \ + --port "$port" --seed "$seed" --policy.device cpu \ + --algo.global-steps "$STEPS" --algo.buffer-size "$BUFFER" \ + --algo.save-interval 20 \ + --no-show-progress-bar --no-show-metric-table \ + --checkpoint-base-dir "$OUT" --exp-name "halfcheetah-$ARM-seed$seed" --overwrite \ + > "$OUT/server-seed$seed.log" 2>&1) & + local server_pid=$! + + local waited=0 + until grep -q "is listening on" "$OUT/server-seed$seed.log" 2>/dev/null; do + sleep 1 + waited=$((waited + 1)) + if [ "$waited" -ge 180 ]; then + echo "seed $seed: server never listened; see $OUT/server-seed$seed.log" >&2 + return 1 + fi + done + echo "READY seed $seed port $port at $(date '+%T')" + + if [ "$ARM" = local ]; then + (cd "$CLIENT_DIR" && "$CLIENT_PY" -m plugrl_env_client.cli mujoco-v1 \ + --server-port "$port" --server-host 127.0.0.1 \ + --num-envs 1 --num-episodes $((STEPS / 1000 + 10)) \ + --runner.replan-steps 1 --runner.seed "$seed" \ + --exp-name "e43-local-seed$seed" \ + > "$OUT/client-seed$seed.log" 2>&1) + echo "seed $seed client rc=$? at $(date '+%T')" + fi + wait "$server_pid" + echo "seed $seed server rc=$? at $(date '+%T')" +} + +PIDS=() +for seed in $SEEDS; do + run_seed "$seed" & + PIDS+=($!) + sleep 5 +done +FAILED=0 +for pid in "${PIDS[@]}"; do wait "$pid" || FAILED=$((FAILED + 1)); done + +date '+end %F %T' +echo "failed seeds: $FAILED" +echo "ARM_DONE $ARM" From 46bce03c2396ece9699dcf8b8b4b71a5b33550aa Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Mon, 28 Sep 2026 17:26:24 -0400 Subject: [PATCH 2/5] exp: pre-register E43 - training with the env clients on another physical machine, and the crossing's cost made of latency and bandwidth --- .../e43-cross-machine-training/PROTOCOL.md | 169 +++++++++++++++++ .../bench_client.py | 153 +++++++++++++++ .../e43-cross-machine-training/ladder.sh | 67 +++++++ .../results/pilot.txt | 40 ++++ .../e43-cross-machine-training/summarise.py | 177 ++++++++++++++++++ .../e43-cross-machine-training/throughput.py | 49 +++++ .../e43-cross-machine-training/throughput.sh | 21 +++ 7 files changed, 676 insertions(+) create mode 100644 experiments/e43-cross-machine-training/PROTOCOL.md create mode 100644 experiments/e43-cross-machine-training/bench_client.py create mode 100644 experiments/e43-cross-machine-training/ladder.sh create mode 100644 experiments/e43-cross-machine-training/results/pilot.txt create mode 100644 experiments/e43-cross-machine-training/summarise.py create mode 100644 experiments/e43-cross-machine-training/throughput.py create mode 100644 experiments/e43-cross-machine-training/throughput.sh diff --git a/experiments/e43-cross-machine-training/PROTOCOL.md b/experiments/e43-cross-machine-training/PROTOCOL.md new file mode 100644 index 0000000..64527d4 --- /dev/null +++ b/experiments/e43-cross-machine-training/PROTOCOL.md @@ -0,0 +1,169 @@ +# E43 measurement protocol (pre-registered) + +**Written 2026-09-28, after the pilot in `results/pilot.txt`, before the +registered run.** + +This file must not be edited after the first registered data point. Anything +learned afterwards goes in `AMENDMENT.md`, dated. + +--- + +## The questions + +PlugRL's home page says the env clients can run on another machine. Every +cell of the coverage figure was trained with both sides on one machine, and +E7's crossing was a VM to its own host. So: + +**A. With the env clients on another physical machine, does training still +learn?** + +**B. What does crossing to that machine cost per exchange, and what is the +cost made of?** + +--- + +## Declared in advance: what was already known + +1. **The cell.** `fpo-policy` · FPO · HalfCheetah-v5 from the coverage + figure, with E16 Phase A's command lines (`server_side.sh`): 409,600 + steps, buffer 4,096, so 100 iterations. One server per seed, and the same + seed for the server and the client. Its status rule, as the figure has + it: it **learns** if the mean return over iterations 91-100 is at least + **+200** over iteration 1, on at least **2 of 3** seeds. +2. **The machines** (`results/pilot.txt`). + - The server runs on guangzhao, a wired Linux workstation. + - The second machine is a Windows 11 laptop on Wi-Fi 6. Its env client + runs natively on Windows, not in WSL. + - Both are on the same campus network and joined by Tailscale + peer-to-peer, not relayed. guangzhao's public address refuses inbound + connections, so Tailscale is the path. + - The env client is at the same commit on both machines, with the same + mujoco, gymnasium and numpy versions. +3. **The pilot's training.** Over 8,192 steps both arms ran, and the clients + exited 0. + - Per step on the server's clock: 2.94 ms local, 5.70 ms cross. + - Per call on the client's side, local then cross: + - infer wait: 2.5 ms, 4.6 ms + - env step: 0.09 ms, 0.55 ms (the laptop steps MuJoCo slower) + - feedback send: 0.07 ms, 0.45 ms +4. **Determinism.** On guangzhao, seed 0 run three times gave the same return + at every iteration. Across the two machines the returns differ from the + first iteration. The reason is the physics, not the transport: + - With no network involved, the same seed and actions give observations + that differ by 8.9e-16 after one step, 4e-7 by step 50 and order 1 by + step 100. + - This is the last bit of the floating-point math on two platforms, + amplified by a chaotic system. + - So the arms are compared by the status rule, not trajectory by + trajectory. +5. **The pilot's ladder** (one repetition, 200 exchanges). + - `lo` and `ts` are within 0.25 ms of each other at every payload. + - `phys` is 3.8 ms with states only, then 9.1, 21.8 and 55.7 ms at 48, 184 + and 588 KiB. + - Pilot throughput was 19.0, 21.7 and 23.5 MB/s. With it, `phys` fits a + fixed cost plus twice the observation's bytes over the link's + throughput. The observation crosses twice per exchange: once in the + previous feedback, once in the infer. + - **This model was suggested by the pilot, and it is declared as such**. + P6 tests whether it holds on fresh measurements. + +--- + +## Design + +**Part B first**, so that the training does not share the link with it: + +- **Throughput.** Five transfers of 64 MiB, laptop to guangzhao + (`throughput.sh`). +- **The ladder.** `ladder.sh`, with plugrl-protocol's conformance server on + guangzhao and `bench_client.py` on either machine: + - three rungs: `lo` and `ts` from guangzhao itself, `phys` from the laptop + - four payloads: states only, 48, 184 and 588 KiB + - five repetitions of 1,000 exchanges each; the rung order reverses on + even repetitions + +**Then Part A.** The local arm and the cross arm run at the same time, seeds +0-2, with 409,600 steps each (`server_side.sh local`, `server_side.sh cross`, +`client_side.sh`): + +- **The local arm**: servers and clients on guangzhao. +- **The cross arm**: servers on guangzhao, clients on the laptop. + +`summarise.py` reads everything. + +--- + +## Checks + +* **V1 - the arms are what they say.** + - Every cross client connected to guangzhao's Tailscale address, and every + local client to 127.0.0.1. + - The six servers logged the same algorithm configuration apart from the + port and the name. +* **V2 - a ladder run counts** only if its client completed its 1,000 + exchanges and exited 0. + +--- + +## Predictions, and what falsifies each + +**P1 - both arms run end to end**: on all six seeds, 100 iterations logged, +five checkpoints, no traceback, and the client exited 0. + +**P2 - the cross arm learns**, by the status rule. **P3 - the local arm +learns**, by the same rule. + +> Grounds: known item 1. E16's control learned this cell on one machine, from +> about -300 to 1,346-2,050. Where the environment is stepped changes the +> timing, not the data a step produces; item 4's differences are +> floating-point, not systematic. Each is falsified if fewer than two seeds +> clear the bar. + +**P4 - the cross arm's extra time is the pilot's per-step cost.** For each +seed, the cross arm's span from iteration 1 to iteration 100 on the server's +clock minus the local arm's, against 99 x 4,096 x 2.76 ms = **1,119 s**. + +> Grounds: known item 3. This fails if crossing costs something that grows +> over a run and that two iterations do not show, such as queueing or +> backlog. Holds if the difference is within **±25%** (839-1,399 s) on at +> least 2 of 3 seeds. + +**P5 - `lo` and `ts` agree.** At every payload, the medians of the five +repetitions are within **0.25 ms**. + +> Grounds: known item 5, and E7's `self` rung. On one machine a Tailscale +> address is short-circuited like any other local one. + +**P6 - the crossing cost is fixed latency plus bytes over bandwidth.** Take +B = the median throughput of the five transfers. For 48, 184 and 588 KiB, +the median `phys` round trip is predicted as the median `phys` round trip +with states only, plus 2 x (the observation's image bytes) / B. It holds if +the measured median is within **±25%** of the prediction at all three +payloads. + +> Grounds: known item 5, and suggested by it (declared above). + +**Reported, not predicted:** +- every rung's pack, round-trip and unpack times +- the throughputs +- the env clients' timing breakdown in both arms +- the returns at iterations 1, 50 and 91-100 for every seed +- wall clock +- E10's ratio recomputed with `phys` at 184 KiB against the full-size + pi0.5's 100 ms forward + +--- + +## Declared deviations allowed in advance + +1. One restart of any cross-arm seed that dies for a reason outside the + experiment, such as the laptop's Wi-Fi dropping or the laptop sleeping. + It is recorded in `AMENDMENT.md`. The local arm's matching seed is rerun + with it, so that the two arms stay concurrent. + +--- + +## Reading order + +P1, V1, the status rule, P2, P3, P4; then V2, P5, P6; then the reported +figures. diff --git a/experiments/e43-cross-machine-training/bench_client.py b/experiments/e43-cross-machine-training/bench_client.py new file mode 100644 index 0000000..b54f551 --- /dev/null +++ b/experiments/e43-cross-machine-training/bench_client.py @@ -0,0 +1,153 @@ +"""E43's boundary-cost client: plugrl-protocol's examples/raw_client.py with a clock. + +raw_client.py speaks the protocol with nothing but msgpack and websockets, and +so runs unchanged on Windows and Linux alike. E7 timed the boundary with the +C++ client, which is Linux-only; E43 needs the same measurement from a Windows +laptop, so this keeps raw_client.py's encoding and adds what E7's client +reported: per-exchange pack, round-trip and unpack time. + + python bench_client.py --host H --port P --steps 1000 --img 224 --cameras 2 + +--img 0 sends states only (HalfCheetah's 17 floats), the observation E43's +training run sends. Otherwise a base camera of IMG x IMG, and with --cameras 2 +a wrist camera of half that, as E7: 128/1 is 48 KiB, 224/2 184 KiB, 448/1 +588 KiB. Prints one tab-separated line: + + exchanges pack_ms rtt_ms unpack_ms wall_s exchanges_per_s + +where each *_ms is the mean over the exchanges, as E7's were. +""" + +from __future__ import annotations + +import argparse +import sys +import time +from array import array + +import msgpack +import websockets.sync.client + +INFER, FEEDBACK, METADATA, ACTION = "infer", "feedback", "metadata", "action" +_ARRAY_CODE = {("f", 4): "f", ("f", 8): "d", ("i", 8): "q", ("u", 1): "B"} + + +def encode_array(values, typestr: str, shape: tuple[int, ...]) -> dict: + order, kind, size = typestr[0], typestr[1], int(typestr[2:]) + if kind == "b": + raw = bytes(1 if v else 0 for v in values) + else: + buf = array(_ARRAY_CODE[(kind, size)], values) + if (sys.byteorder == "little") != (order in "<|"): + buf.byteswap() + raw = buf.tobytes() + return {b"__ndarray__": True, b"data": raw, b"dtype": typestr, b"shape": list(shape)} + + +def decode_array(obj: dict) -> list: + typestr = obj[b"dtype"] + typestr = typestr.decode() if isinstance(typestr, bytes) else typestr + order, kind, size = typestr[0], typestr[1], int(typestr[2:]) + buf = array(_ARRAY_CODE[(kind, size)]) + buf.frombytes(obj[b"data"]) + if (sys.byteorder == "little") != (order in "<|"): + buf.byteswap() + return list(buf) + + +def image(h: int) -> dict: + n = h * h * 3 + raw = (bytes(range(256)) * (n // 256 + 1))[:n] + return {b"__ndarray__": True, b"data": raw, b"dtype": "|u1", b"shape": [1, h, h, 3]} + + +def observation(img: int, cameras: int) -> dict: + images = {} + if img: + images["base"] = image(img) + if cameras == 2: + images["wrist"] = image(img // 2) + return { + "images": images, + "states": {"obs": encode_array([0.1] * 17, " int: + packer = msgpack.Packer() + env_indices = encode_array([0], " int: + p = argparse.ArgumentParser(description=__doc__) + p.add_argument("--host", default="127.0.0.1") + p.add_argument("--port", type=int, default=8000) + p.add_argument("--steps", type=int, default=1000) + p.add_argument("--img", type=int, default=0) + p.add_argument("--cameras", type=int, default=1, choices=(1, 2)) + a = p.parse_args() + return run(a.host, a.port, a.steps, a.img, a.cameras) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/experiments/e43-cross-machine-training/ladder.sh b/experiments/e43-cross-machine-training/ladder.sh new file mode 100644 index 0000000..a6cfff1 --- /dev/null +++ b/experiments/e43-cross-machine-training/ladder.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash +# E43's boundary cost between two physical machines: E7's ladder with the +# server fixed on guangzhao and the client moved. +# +# lo client on guangzhao -> server on guangzhao, 127.0.0.1 +# ts client on guangzhao -> server on guangzhao, its own Tailscale address +# phys client on the laptop -> server on guangzhao, over Tailscale +# +# The server is plugrl-protocol's conformance server, as in E7; the client is +# bench_client.py on both machines. Run from the laptop: +# +# bash ladder.sh REPS STEPS OUT_TSV +set -uo pipefail + +REPS="$1" +STEPS="$2" +TSV="$3" +HERE="$(cd "$(dirname "$0")" && pwd)" +REMOTE="${REMOTE:-guangzhao-memeseeks}" +TS_IP="${TS_IP:-100.75.226.89}" +LOCAL_PY="${PLUGRL_CLIENT_DIR:?set PLUGRL_CLIENT_DIR}/.venv/Scripts/python.exe" +R_PY='~/zuogou/plugrl/plugrl-server/.venv/bin/python' +R_PROTO='~/zuogou/plugrl/e43-protocol' +R_BENCH='~/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/bench_client.py' + +declare -A PAYLOADS=( [0]="0 1" [48]="128 1" [184]="224 2" [588]="448 1" ) +ORDER=(0 48 184 588) + +printf 'rung\tpayload_kib\trep\texchanges\tpack_ms\trtt_ms\tunpack_ms\twall_s\texchanges_per_s\n' > "$TSV" +date '+start %F %T' + +start_server() { # $1 = port; returns once it listens + ssh "$REMOTE" "cd $R_PROTO && (nohup $R_PY examples/conformance_server.py --host 0.0.0.0 --port $1 --steps $STEPS --timeout 300 > /tmp/e43srv_$1.log 2>&1 &) ; for i in \$(seq 100); do grep -q 'conformance server on' /tmp/e43srv_$1.log 2>/dev/null && exit 0; sleep 0.1; done; exit 1" +} +stop_server() { # $1 = port + ssh "$REMOTE" "pkill -f 'conformance_server.py --host 0.0.0.0 --port $1 ' ; true" +} + +port=9800 +for rep in $(seq "$REPS"); do + if [ $((rep % 2)) -eq 1 ]; then RUNGS=(lo ts phys); else RUNGS=(phys ts lo); fi + for kib in "${ORDER[@]}"; do + read -r img cams <<< "${PAYLOADS[$kib]}" + args="--port $port --steps $STEPS --img $img --cameras $cams" + for rung in "${RUNGS[@]}"; do + start_server "$port" || { echo "server on $port did not start" >&2; continue; } + case "$rung" in + lo) out=$(ssh "$REMOTE" "$R_PY $R_BENCH --host 127.0.0.1 $args") ;; + ts) out=$(ssh "$REMOTE" "$R_PY $R_BENCH --host $TS_IP $args") ;; + phys) out=$("$LOCAL_PY" "$HERE/bench_client.py" --host "$TS_IP" $args) ;; + esac + rc=$? + stop_server "$port" + if [ "$rc" -eq 0 ] && [ -n "$out" ]; then + printf '%s\t%s\t%s\t%s\n' "$rung" "$kib" "$rep" "$out" >> "$TSV" + printf '%s\t%s\t%s\t%s\n' "$rung" "$kib" "$rep" "$out" + else + echo "FAILED $rung $kib rep $rep rc=$rc" >&2 + fi + port=$((port + 1)) + [ "$port" -ge 9850 ] && port=9800 + args="--port $port --steps $STEPS --img $img --cameras $cams" + done + done +done +date '+end %F %T' +echo LADDER_DONE diff --git a/experiments/e43-cross-machine-training/results/pilot.txt b/experiments/e43-cross-machine-training/results/pilot.txt new file mode 100644 index 0000000..1d8307d --- /dev/null +++ b/experiments/e43-cross-machine-training/results/pilot.txt @@ -0,0 +1,40 @@ +E43 pilot, 2026-09-28 17:13-17:25 EDT, before PROTOCOL.md + +Machines + server guangzhao: Linux workstation at Cornell, wired (enp128s31f6), 24 cores, CPU only + client Windows 11 laptop at Cornell: Intel Wi-Fi 6 AX201, link rate 459 Mbps + link Tailscale, peer-to-peer (guangzhao sees the laptop at 10.48.91.111:41641, + not relayed); guangzhao's public address refuses inbound (TCP to + 128.84.216.41:22 timed out), so Tailscale is the path + code server: exp/e43-cross-machine-training (main 16df640 + this directory) + env client 931ab56 on both machines; plugrl-protocol 3a59528 for the ladder + mujoco 3.14.0, gymnasium 1.3.0, numpy 2.3.2 on both; laptop Python 3.11.14 (uv) + +Training, 8,192 steps (2 iterations), seeds 0 and 1, both arms at once + per step, iteration 1 -> 2 on the server's clock (4,096 steps): + local 2.950 2.936 ms + cross 5.736 5.671 ms difference 2.76 ms per step (mean) + per call, from the env client's summary.json: + infer wait env step feedback send + local s0 2.548 0.091 0.072 ms + local s1 2.527 0.090 0.069 + cross s0 4.632 0.563 0.453 + cross s1 4.582 0.543 0.443 + return per iteration: + local s0 -292.8568 -265.7560 s1 -324.9155 -240.8591 + cross s0 -344.8546 -305.6646 s1 -318.3506 -325.2844 + local seed 0 run twice more: -292.8568 -265.7560 both times (identical) + +Physics, HalfCheetah-v5 from seed 0 under one fixed action sequence, no network + max |laptop - guangzhao| over the observation: + step 0 0 step 1 8.9e-16 step 2 2.7e-15 step 10 1.2e-12 + step 50 4.0e-7 step 100 0.82 step 200 8.3 step 1000 6.4 + +Ladder, 200 exchanges, one repetition (mean ms per exchange) + payload lo rtt ts rtt phys rtt phys pack phys unpack + state 0.122 0.119 3.781 0.008 0.036 + 48 KiB 0.176 0.158 9.103 0.027 0.040 + 184 KiB 0.347 0.372 21.757 0.141 0.047 + 588 KiB 0.891 0.676 55.687 1.529 0.052 + +Throughput, laptop -> guangzhao, 64 MiB each: 19.0 21.7 23.5 MB/s diff --git a/experiments/e43-cross-machine-training/summarise.py b/experiments/e43-cross-machine-training/summarise.py new file mode 100644 index 0000000..51f5114 --- /dev/null +++ b/experiments/e43-cross-machine-training/summarise.py @@ -0,0 +1,177 @@ +"""Read E43's verdicts, in PROTOCOL.md's order. + + python summarise.py [results-dir] + +Expects, under results/: + local/ cross/ the servers' runs and logs (server_side.sh) + local.out cross.out server_side.sh's own output + local/client-seed{s}.log the local arm's client logs + local/client-summary-seed{s}.json + cross-clients/ client_side.sh's output, client logs, and + client-summary-seed{s}.json from the laptop + throughput.tsv ladder.tsv Part B, from the laptop +Writes summary.tsv next to this file. +""" + +import csv +import json +import pathlib +import re +import statistics +import sys + +from tensorboard.backend.event_processing.event_accumulator import EventAccumulator + +HERE = pathlib.Path(__file__).resolve().parent +R = pathlib.Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else HERE / "results" +SEEDS = (0, 1, 2) +ITERS = 100 +GAIN = 200.0 +TS_IP = "100.75.226.89" +PREDICTED_EXTRA_S = 99 * 4096 * 2.76e-3 +IMAGE_BYTES = {48: 128 * 128 * 3, 184: 224 * 224 * 3 + 112 * 112 * 3, 588: 448 * 448 * 3} + + +def read(p: pathlib.Path) -> str: + return p.read_text(encoding="utf-8", errors="replace") if p.exists() else "" + + +def rewards(arm: str, seed: int): + run = R / arm / "fpo" / "fpo-policy" / f"halfcheetah-{arm}-seed{seed}" + events = sorted((run / "tensorboard").glob("events.*")) + if not events: + return run, [] + acc = EventAccumulator(str(events[-1]), size_guidance={"scalars": 0}) + acc.Reload() + return run, acc.Scalars("rollout/reward") if "rollout/reward" in acc.Tags()["scalars"] else [] + + +def client_rc(arm: str, seed: int): + out = read(R / "local.out") if arm == "local" else read(R / "cross-clients" / "client_side.out") + m = re.search(rf"seed {seed} client rc=(\d+)", out) + return int(m.group(1)) if m else None + + +def client_log(arm: str, seed: int) -> str: + return read(R / ("local" if arm == "local" else "cross-clients") / f"client-seed{seed}.log") + + +def main() -> int: + runs = {} + print("P1 both arms run end to end") + p1 = True + for arm in ("local", "cross"): + for seed in SEEDS: + run, r = rewards(arm, seed) + log = read(R / arm / f"server-seed{seed}.log") + saves = [p for p in run.iterdir() if p.name.isdigit()] if run.exists() else [] + rc = client_rc(arm, seed) + ok = len(r) >= ITERS and len(saves) >= 5 and bool(log) and "Traceback" not in log and rc == 0 + p1 &= ok + runs[(arm, seed)] = (r, log) + print(f" {arm:5s} seed {seed} {'HOLDS' if ok else 'FAILS'} ({len(r)} iterations, {len(saves)} checkpoints, client rc {rc})") + + print("\nV1 the arms are what they say") + configs = set() + v1 = True + for (arm, seed), (_, log) in runs.items(): + m = re.search(r"Algorithm: fpo, Config: (FPOAlgoConfig\(.*?\))\s*$", log, re.M) + configs.add(m.group(1) if m else None) + host = TS_IP if arm == "cross" else "127.0.0.1" + connected = host in client_log(arm, seed) + v1 &= connected + print(f" {arm:5s} seed {seed} client log names {host}: {'yes' if connected else 'NO'}") + same = len(configs) == 1 and None not in configs + v1 &= same + print(f" six server configurations identical: {'yes' if same else 'NO'}") + print(f" {'PASS' if v1 else 'FAIL'}") + + print(f"\nstatus learns: iterations 91-100 at least +{GAIN:.0f} over iteration 1, on 2 of 3") + gains, spans = {}, {} + lines = ["arm\tseed\tfirst\tit50\tlast10\tgain\tspan_s"] + for arm in ("local", "cross"): + for seed in SEEDS: + r, _ = runs[(arm, seed)] + if len(r) < ITERS: + gains[(arm, seed)] = float("nan") + spans[(arm, seed)] = float("nan") + continue + v = [e.value for e in r] + first, last10 = v[0], statistics.mean(v[90:100]) + gains[(arm, seed)] = last10 - first + spans[(arm, seed)] = r[99].wall_time - r[0].wall_time + print(f" {arm:5s} seed {seed} {first:8.1f} -> {last10:8.1f} ({last10 - first:+.1f}) it50 {v[49]:.1f}") + lines.append(f"{arm}\t{seed}\t{first:.1f}\t{v[49]:.1f}\t{last10:.1f}\t{last10 - first:+.1f}\t{spans[(arm, seed)]:.1f}") + ok_read = p1 and v1 + for name, arm in (("P2 the cross arm learns", "cross"), ("P3 the local arm learns", "local")): + n = sum(gains[(arm, s)] >= GAIN for s in SEEDS) + verdict = "NOT READ" if not ok_read else ("HOLDS" if n >= 2 else "FALSIFIED") + print(f"\n{name}\n {n} of 3 {verdict}") + + print(f"\nP4 the cross arm's extra time, iteration 1 -> 100, against {PREDICTED_EXTRA_S:.0f} s (±25%)") + within = 0 + for seed in SEEDS: + extra = spans[("cross", seed)] - spans[("local", seed)] + hit = 0.75 * PREDICTED_EXTRA_S <= extra <= 1.25 * PREDICTED_EXTRA_S + within += hit + print(f" seed {seed} local {spans[('local', seed)]:.0f} s cross {spans[('cross', seed)]:.0f} s extra {extra:.0f} s {'in' if hit else 'OUT'}") + print(f" {within} of 3 {'NOT READ' if not ok_read else ('HOLDS' if within >= 2 else 'FALSIFIED')}") + + print("\nV2 ladder runs complete") + rows = list(csv.DictReader(open(R / "ladder.tsv", encoding="utf-8"), delimiter="\t")) + cells = {} + for row in rows: + if int(row["exchanges"]) == 1000: + cells.setdefault((row["rung"], int(row["payload_kib"])), []).append(row) + v2 = all(len(cells.get((rung, k), [])) == 5 for rung in ("lo", "ts", "phys") for k in (0, 48, 184, 588)) + print(f" every rung and payload has 5 valid runs: {'yes' if v2 else 'NO'}") + + def med(rung: str, k: int, field: str = "rtt_ms") -> float: + return statistics.median(float(x[field]) for x in cells.get((rung, k), [])) if cells.get((rung, k)) else float("nan") + + print("\nP5 lo and ts agree within 0.25 ms") + p5 = True + for k in (0, 48, 184, 588): + d = abs(med("ts", k) - med("lo", k)) + p5 &= d <= 0.25 + print(f" {k:3d} KiB lo {med('lo', k):.3f} ts {med('ts', k):.3f} |d| {d:.3f}") + print(f" {'NOT READ' if not v2 else ('HOLDS' if p5 else 'FALSIFIED')}") + + tp = [float(x["mb_per_s"]) for x in csv.DictReader(open(R / "throughput.tsv", encoding="utf-8"), delimiter="\t")] + b = statistics.median(tp) * 1e6 + print(f"\nP6 phys = phys(states) + 2 x bytes / B, B = median throughput {b / 1e6:.1f} MB/s ({', '.join(f'{x:.1f}' for x in tp)})") + p6 = True + base = med("phys", 0) + for k, nbytes in IMAGE_BYTES.items(): + pred = base + 2 * nbytes / b * 1000 + got = med("phys", k) + hit = 0.75 * pred <= got <= 1.25 * pred + p6 &= hit + print(f" {k:3d} KiB predicted {pred:6.2f} ms measured {got:6.2f} ms {'in' if hit else 'OUT'}") + print(f" {'NOT READ' if not v2 else ('HOLDS' if p6 else 'FALSIFIED')}") + + print("\nreported: ladder medians, pack / rtt / unpack ms") + for rung in ("lo", "ts", "phys"): + for k in (0, 48, 184, 588): + print(f" {rung:4s} {k:3d} KiB {med(rung, k, 'pack_ms'):.3f} / {med(rung, k):.3f} / {med(rung, k, 'unpack_ms'):.3f}") + print("\nreported: env client timing per call (infer wait / env step / feedback send, ms)") + for arm, d in (("local", R / "local"), ("cross", R / "cross-clients")): + for seed in SEEDS: + p = d / f"client-summary-seed{seed}.json" + if not p.exists(): + print(f" {arm:5s} seed {seed} no summary") + continue + t = json.loads(p.read_text())["timing"] + print( + f" {arm:5s} seed {seed} {1000 * t['infer_wait_s'] / t['infer_calls']:.3f} / " + f"{1000 * t['env_step_s'] / t['env_steps']:.3f} / {1000 * t['feedback_s'] / t['feedback_calls']:.3f}" + ) + print(f"\nreported: E10's ratio with phys at 184 KiB: {med('phys', 184):.1f} ms against pi0.5's 100 ms forward = {med('phys', 184) / 100:.0%}") + + (HERE / "summary.tsv").write_text("\n".join(lines) + "\n", encoding="utf-8") + print(f"\nwrote {HERE / 'summary.tsv'}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/experiments/e43-cross-machine-training/throughput.py b/experiments/e43-cross-machine-training/throughput.py new file mode 100644 index 0000000..c3367b6 --- /dev/null +++ b/experiments/e43-cross-machine-training/throughput.py @@ -0,0 +1,49 @@ +"""Raw TCP throughput between the two machines, to read the ladder against. + + python throughput.py sink PORT # on guangzhao: receive and time + python throughput.py send HOST PORT MIB # on the laptop: send MIB MiB + +The sink prints MiB received, seconds, and MB/s (10^6 bytes), timed from the +first byte to the connection closing. +""" + +import socket +import sys +import time + + +def sink(port: int) -> None: + srv = socket.socket() + srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + srv.bind(("0.0.0.0", port)) + srv.listen(1) + print("listening", flush=True) + conn, _ = srv.accept() + total, start = 0, None + while True: + chunk = conn.recv(1 << 20) + if not chunk: + break + if start is None: + start = time.perf_counter() + total += len(chunk) + if start is None: + print("0.0 0.000 0.0", flush=True) + return + secs = time.perf_counter() - start + print(f"{total / 2**20:.1f}\t{secs:.3f}\t{total / secs / 1e6:.1f}", flush=True) + + +def send(host: str, port: int, mib: int) -> None: + s = socket.create_connection((host, port)) + block = bytes(1 << 20) + for _ in range(mib): + s.sendall(block) + s.close() + + +if __name__ == "__main__": + if sys.argv[1] == "sink": + sink(int(sys.argv[2])) + else: + send(sys.argv[2], int(sys.argv[3]), int(sys.argv[4])) diff --git a/experiments/e43-cross-machine-training/throughput.sh b/experiments/e43-cross-machine-training/throughput.sh new file mode 100644 index 0000000..0a1fe06 --- /dev/null +++ b/experiments/e43-cross-machine-training/throughput.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +# Laptop -> guangzhao TCP throughput over Tailscale, REPS times, MIB each. +# bash throughput.sh REPS MIB OUT_TSV +set -uo pipefail +REPS="$1" +MIB="$2" +TSV="$3" +HERE="$(cd "$(dirname "$0")" && pwd)" +REMOTE="${REMOTE:-guangzhao-memeseeks}" +TS_IP="${TS_IP:-100.75.226.89}" +LOCAL_PY="${PLUGRL_CLIENT_DIR:?set PLUGRL_CLIENT_DIR}/.venv/Scripts/python.exe" +R_SCRIPT='~/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/throughput.py' +printf 'rep\tmib\tseconds\tmb_per_s\n' > "$TSV" +for rep in $(seq "$REPS"); do + port=$((9860 + rep)) + ssh "$REMOTE" "(nohup python3 $R_SCRIPT sink $port > /tmp/e43tp_$port.log 2>&1 &); for i in \$(seq 50); do grep -q listening /tmp/e43tp_$port.log && exit 0; sleep 0.1; done; exit 1" || { echo "sink failed" >&2; continue; } + "$LOCAL_PY" "$HERE/throughput.py" send "$TS_IP" "$port" "$MIB" + sleep 1 + line=$(ssh "$REMOTE" "tail -1 /tmp/e43tp_$port.log") + printf '%s\t%s\n' "$rep" "$line" | tee -a "$TSV" +done From cec66751cddd6adbdb4f511f91a0aef94c5e2161 Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Mon, 28 Sep 2026 18:24:27 -0400 Subject: [PATCH 3/5] exp: E43 amendment 1 - three more seeds per arm, reported not predicted, before running them --- .../e43-cross-machine-training/AMENDMENT.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 experiments/e43-cross-machine-training/AMENDMENT.md diff --git a/experiments/e43-cross-machine-training/AMENDMENT.md b/experiments/e43-cross-machine-training/AMENDMENT.md new file mode 100644 index 0000000..a3ac518 --- /dev/null +++ b/experiments/e43-cross-machine-training/AMENDMENT.md @@ -0,0 +1,32 @@ +# E43 amendments + +## 1 - 2026-09-28, after the registered run: three more seeds per arm + +**What prompted it.** The registered run holds on every prediction. But the +two arms ended apart: +- The cross arm's last ten iterations averaged 2,060, 2,127 and 946. +- The local arm's averaged 1,262, 695 and 725. + +The figure shows that gap from about iteration 40 on. PROTOCOL.md predicted +nothing about it. The two arms should draw from the same distribution: +- the same code +- the same settings +- the same seeds +- trajectories that differ only by floating-point bits (known item 4) + +A real gap would then be a defect to find, not a result. With three seeds per +arm, luck cannot be told from a difference. + +**What is added.** Seeds 3, 4 and 5 in both arms, with the same scripts, the +same concurrent layout and the same machines. They are written to +`results/local-b`, `results/cross-b` and `results/cross-clients-b`. + +**How it is read.** The additions are reported, not predicted. P1-P6 stay as +registered, on seeds 0-2. The six seeds per arm are compared on: +- iteration 91-100's mean +- the status rule +- the extra time, as P4 measured it + +**What would count as a gap worth chasing:** all six cross seeds above all +six local seeds, or the arms' six-seed means further apart than the spread +within either arm. Anything less is read as seed variation. From 2d038d19a2185b24a72653ab90c3e9d0274c8fbf Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Mon, 28 Sep 2026 19:21:03 -0400 Subject: [PATCH 4/5] exp: E43 results - the cell learns with its env clients on another machine; crossing costs a fixed latency plus bytes over the link; amendment reads the arms' gap as seed variation --- README.md | 7 +- experiments/README.md | 10 +- .../e43-cross-machine-training/FINDINGS.md | 158 ++++++++++++++++++ .../e43-cross-machine-training/amendment.py | 69 ++++++++ .../e43-cross-machine-training/figure.py | 87 ++++++++++ .../results/amendment.txt | 32 ++++ .../results/cross-b.out | 14 ++ .../results/cross-b/server-seed3.log | 23 +++ .../results/cross-b/server-seed4.log | 23 +++ .../results/cross-b/server-seed5.log | 23 +++ .../results/cross-clients-b/client-seed3.log | 115 +++++++++++++ .../results/cross-clients-b/client-seed4.log | 116 +++++++++++++ .../results/cross-clients-b/client-seed5.log | 115 +++++++++++++ .../cross-clients-b/client-summary-seed3.json | 27 +++ .../cross-clients-b/client-summary-seed4.json | 27 +++ .../cross-clients-b/client-summary-seed5.json | 27 +++ .../results/cross-clients-b/client_side.out | 9 + .../results/cross-clients/client-seed0.log | 94 +++++++++++ .../results/cross-clients/client-seed1.log | 94 +++++++++++ .../results/cross-clients/client-seed2.log | 95 +++++++++++ .../cross-clients/client-summary-seed0.json | 27 +++ .../cross-clients/client-summary-seed1.json | 27 +++ .../cross-clients/client-summary-seed2.json | 27 +++ .../results/cross-clients/client_side.out | 9 + .../results/cross-machine.png | Bin 0 -> 252637 bytes .../results/cross.out | 14 ++ .../results/cross/server-seed0.log | 23 +++ .../results/cross/server-seed1.log | 23 +++ .../results/cross/server-seed2.log | 23 +++ .../results/curves.json | 1 + .../results/ladder.tsv | 61 +++++++ .../results/local-b.out | 18 ++ .../results/local-b/client-seed3.log | 52 ++++++ .../results/local-b/client-seed4.log | 50 ++++++ .../results/local-b/client-seed5.log | 49 ++++++ .../results/local-b/server-seed3.log | 23 +++ .../results/local-b/server-seed4.log | 23 +++ .../results/local-b/server-seed5.log | 23 +++ .../results/local.out | 18 ++ .../results/local/client-seed0.log | 50 ++++++ .../results/local/client-seed1.log | 49 ++++++ .../results/local/client-seed2.log | 49 ++++++ .../results/local/client-summary-seed0.json | 27 +++ .../results/local/client-summary-seed1.json | 27 +++ .../results/local/client-summary-seed2.json | 27 +++ .../results/local/server-seed0.log | 23 +++ .../results/local/server-seed1.log | 23 +++ .../results/local/server-seed2.log | 23 +++ .../results/throughput.tsv | 6 + .../results/verdicts.txt | 79 +++++++++ .../e43-cross-machine-training/summary.tsv | 7 + 51 files changed, 2039 insertions(+), 7 deletions(-) create mode 100644 experiments/e43-cross-machine-training/FINDINGS.md create mode 100644 experiments/e43-cross-machine-training/amendment.py create mode 100644 experiments/e43-cross-machine-training/figure.py create mode 100644 experiments/e43-cross-machine-training/results/amendment.txt create mode 100644 experiments/e43-cross-machine-training/results/cross-b.out create mode 100644 experiments/e43-cross-machine-training/results/cross-b/server-seed3.log create mode 100644 experiments/e43-cross-machine-training/results/cross-b/server-seed4.log create mode 100644 experiments/e43-cross-machine-training/results/cross-b/server-seed5.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client-seed3.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client-seed4.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client-seed5.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed3.json create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed4.json create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed5.json create mode 100644 experiments/e43-cross-machine-training/results/cross-clients-b/client_side.out create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client-seed0.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client-seed1.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client-seed2.log create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed0.json create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed1.json create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed2.json create mode 100644 experiments/e43-cross-machine-training/results/cross-clients/client_side.out create mode 100644 experiments/e43-cross-machine-training/results/cross-machine.png create mode 100644 experiments/e43-cross-machine-training/results/cross.out create mode 100644 experiments/e43-cross-machine-training/results/cross/server-seed0.log create mode 100644 experiments/e43-cross-machine-training/results/cross/server-seed1.log create mode 100644 experiments/e43-cross-machine-training/results/cross/server-seed2.log create mode 100644 experiments/e43-cross-machine-training/results/curves.json create mode 100644 experiments/e43-cross-machine-training/results/ladder.tsv create mode 100644 experiments/e43-cross-machine-training/results/local-b.out create mode 100644 experiments/e43-cross-machine-training/results/local-b/client-seed3.log create mode 100644 experiments/e43-cross-machine-training/results/local-b/client-seed4.log create mode 100644 experiments/e43-cross-machine-training/results/local-b/client-seed5.log create mode 100644 experiments/e43-cross-machine-training/results/local-b/server-seed3.log create mode 100644 experiments/e43-cross-machine-training/results/local-b/server-seed4.log create mode 100644 experiments/e43-cross-machine-training/results/local-b/server-seed5.log create mode 100644 experiments/e43-cross-machine-training/results/local.out create mode 100644 experiments/e43-cross-machine-training/results/local/client-seed0.log create mode 100644 experiments/e43-cross-machine-training/results/local/client-seed1.log create mode 100644 experiments/e43-cross-machine-training/results/local/client-seed2.log create mode 100644 experiments/e43-cross-machine-training/results/local/client-summary-seed0.json create mode 100644 experiments/e43-cross-machine-training/results/local/client-summary-seed1.json create mode 100644 experiments/e43-cross-machine-training/results/local/client-summary-seed2.json create mode 100644 experiments/e43-cross-machine-training/results/local/server-seed0.log create mode 100644 experiments/e43-cross-machine-training/results/local/server-seed1.log create mode 100644 experiments/e43-cross-machine-training/results/local/server-seed2.log create mode 100644 experiments/e43-cross-machine-training/results/throughput.tsv create mode 100644 experiments/e43-cross-machine-training/results/verdicts.txt create mode 100644 experiments/e43-cross-machine-training/summary.tsv diff --git a/README.md b/README.md index 700fbbc..88b13f5 100644 --- a/README.md +++ b/README.md @@ -24,14 +24,15 @@ has been measured: | [coverage](#what-runs-on-it) | Which policies and algorithms learn through the split? | **Every one tried** - sixteen combinations on four tasks, all learning, below | | [E2](experiments/e2-cross-language/) | Does an env client have to be this codebase, or Python? | **No** - a C++ client with no third-party libraries drove this server | | [E12](experiments/e12-cuda-free-rollout/) | Does a rollout machine need CUDA, or a GPU? | **No** - LIBERO's env client goes from 7.8G to 3.4G with no nvidia wheels, and renders on the CPU at 1.91x the wall clock ([E13](experiments/e13-gpu-free-rendering/)) | -| [E7](experiments/e7-cross-machine/) | What does the boundary cost once packets leave the machine? | **+0.52 ms** on a 184 KiB observation, measured from a VM to its host | -| [E10](experiments/e10-vla-forward-cost/) | Is that cheap beside a VLA forward pass? | **Yes** - 1.3-3.6% of a step | +| [E43](experiments/e43-cross-machine-training/) | Does training still work with the env clients on another physical machine? | **Yes** - the quickstart pair learns with its env clients on a Windows laptop over campus Wi-Fi | +| [E43](experiments/e43-cross-machine-training/) | What does crossing cost? | About **3 ms plus twice the observation's bytes over the link** per exchange: 21 ms for 184 KiB at 18 MB/s | +| [E10](experiments/e10-vla-forward-cost/) | Is that cheap beside a VLA forward pass? | **On a fast link.** Over that Wi-Fi a 184 KiB observation is 21% of pi0.5's 100 ms forward, not E10's 1.3-3.6% | | [E11](experiments/e11-vla-rl-libero/) | Does a full-size VLA go through it? | **Yes** - pi0.5 on LIBERO scores what openpi publishes, and the server's episode and step counts match the clients' exactly | Fine-tuning pi0.5 with reinforcement learning through it has not made the policy better yet; that record is on [its own page](https://plugrl.github.io/vla/). -[`experiments/`](experiments/) holds forty experiments, thirty-nine of them +[`experiments/`](experiments/) holds forty-one experiments, forty of them run. Each carries its data and a `FINDINGS.md` stating what the result does **not** support. The documentation, including a quickstart that trains FPO on HalfCheetah with no GPU and nothing to download, is at diff --git a/experiments/README.md b/experiments/README.md index cfcce9a..6cf8d13 100644 --- a/experiments/README.md +++ b/experiments/README.md @@ -173,10 +173,12 @@ rather than an achievement. ## What is missing -- **A true cross-machine number.** E7 got as far as one virtual machine to - its host, which separates the network stack from the machine boundary but - still shares a CPU and a hypervisor. A physical NIC and a switch will cost - more; how much more is unmeasured, and needs a second computer. +- **A cross-machine number on a fast link.** E7 got as far as one virtual + machine to its host. E43 then crossed two physical machines - a wired Linux + workstation and a Windows laptop on campus Wi-Fi - and found the cost is a + fixed latency (about 3 ms) plus twice the observation's bytes over the + link's bandwidth (18 MB/s there), with training unchanged. A wired LAN or a + datacenter link is still unmeasured; the model says how it scales. - **E3 was never run.** Its protocol is pre-registered, including an explicit declaration of the familiarity bias that would have favoured PlugRL and three ranked mitigations, but no data exists. diff --git a/experiments/e43-cross-machine-training/FINDINGS.md b/experiments/e43-cross-machine-training/FINDINGS.md new file mode 100644 index 0000000..4c87b66 --- /dev/null +++ b/experiments/e43-cross-machine-training/FINDINGS.md @@ -0,0 +1,158 @@ +# E43: with its env clients on another physical machine, the cell still learns; crossing costs a fixed latency plus the observation's bytes over the link + +2026-09-28 · server on guangzhao (Linux workstation, wired); env clients on +a Windows 11 laptop on Wi-Fi 6, joined by Tailscale peer-to-peer on one +campus network · protocol: [`PROTOCOL.md`](PROTOCOL.md) (`46bce03`, after the +pilot in `results/pilot.txt`, before the registered run) · amendment: +[`AMENDMENT.md`](AMENDMENT.md) + +--- + +## The result + +**A. Training.** The coverage figure's `fpo-policy` · FPO · HalfCheetah +cell, with E16's command lines, ran as two arms at once. In the local arm, +servers and env clients were on guangzhao. In the cross arm, the servers +were on guangzhao and the env clients on the laptop. The table gives the mean +return over iterations 91-100 against iteration 1: + +| seed | local | cross | +| --- | --- | --- | +| 0 | -293 -> 1,262 (**+1,555**) | -345 -> 2,060 (**+2,405**) | +| 1 | -325 -> 695 (**+1,020**) | -318 -> 2,127 (**+2,445**) | +| 2 | -251 -> 725 (**+976**) | -250 -> 946 (**+1,196**) | + +* **P1 holds.** All six seeds logged 100 iterations and five checkpoints, + with no traceback, and every client exited 0. +* **V1 passes.** The cross clients connected to guangzhao's Tailscale + address and the local ones to 127.0.0.1. All six servers logged the same + configuration. +* **P2 and P3 hold.** Both arms learn, 3 of 3 seeds each, against a bar of + +200. +* **P4 holds.** The cross arm took 1,253, 1,288 and 1,356 s longer from + iteration 1 to 100, against a predicted 1,119 s ±25%. All three are inside + the band, but all three sit above the point prediction, by 12-21%. + +**B. The boundary's cost**, as the median of five runs of 1,000 exchanges. +Throughput was 20.5, 18.0, 19.6, 15.9 and 14.4 MB/s (median 18.0). + +| payload | `lo` | `ts` | `phys` | `phys` predicted | +| --- | --- | --- | --- | --- | +| states only | 0.099 ms | 0.107 ms | 2.82 ms | | +| 48 KiB | 0.161 | 0.172 | 8.01 | 8.28 | +| 184 KiB | 0.293 | 0.306 | 21.38 | 23.72 | +| 588 KiB | 0.947 | 0.700 | 65.80 | 69.72 | + +* **V2 passes.** All 60 ladder runs completed. +* **P5 holds.** `lo` and `ts` agree within 0.25 ms at every payload. The + 588 KiB row is the exception in kind, if not in verdict: 0.248 ms apart, + just inside the tolerance, and with `lo` the slower of the two - as in the + pilot. That is not explained. +* **P6 holds.** The crossing is a fixed latency plus twice the observation's + bytes over the link's throughput. Measured is 3-10% under predicted at + all three payloads. + +--- + +## What crossing costs, and what it is made of + +On one machine the boundary is a tenth of a millisecond with states only, +and under a millisecond at 588 KiB. Tailscale adds nothing measurable there: +a machine's own Tailscale address is short-circuited like any local one, +as E7 found for a machine's own Ethernet address. + +Between two machines it becomes two terms: +- **A fixed one**: about 2.8 ms here, which is Wi-Fi plus WireGuard plus two + operating systems. +- **One proportional to size**: each exchange sends the observation twice, + once in the previous feedback and once in the infer, and both queue on the + same link. At 18 MB/s that is about 0.11 ms per KiB of observation, more + than fifty times E7's VM-to-host 2 µs. + +A state-only task like this cell pays almost only the fixed term. Per call, +the env client waited 5.0 ms for an action across machines against 2.7 ms +locally. Stepping MuJoCo on the laptop took 0.50 ms against guangzhao's +0.10, and sending feedback 0.41 ms against 0.07. That doubled the wall clock, +from 20 minutes to 41, and changed nothing else; an hour later, with a busier +link and laptop, it was 52 minutes (below). + +An image-based policy pays the second term. **This corrects E10**, whose +"1.3-3.6% of a step" used E7's 1.3 ms VM-to-host crossing. Over this link a +184 KiB observation costs 21.4 ms per exchange, which is 21% of the +full-size pi0.5's 100 ms forward. On a faster link the second term shrinks +in proportion to the bandwidth, but no faster link was measured here. + +P4's three misses on the high side fit a link that was slowing during the +session: the five throughput runs fell from 20.5 to 14.4 MB/s. This is an +observation, not a test. + +--- + +## The two arms' returns + +The registered run left the cross arm's seeds higher: 2,060, 2,127 and 946, +against 1,262, 695 and 725. PROTOCOL.md did not predict that. The two arms +draw from one distribution, so a real gap would have been a defect to find. +[`AMENDMENT.md`](AMENDMENT.md) added seeds 3-5 to both arms, and fixed how +they would be read, before they ran. Iterations 91-100: + +| seed | local | cross | +| --- | --- | --- | +| 0 | 1,262 | 2,060 | +| 1 | 695 | 2,127 | +| 2 | 725 | 946 | +| 3 | 1,967 | 2,267 | +| 4 | 2,336 | 1,587 | +| 5 | 857 | 1,082 | +| mean (sd) | 1,307 (694) | 1,678 (564) | + +All twelve seeds learn by the status rule. Two of the new local seeds end +above four of the cross seeds, and the means are 371 apart, against a spread +of 694 within the local arm. By the amendment's rule this is seed variation +(`results/amendment.txt`). That is why the figure draws each arm's band, from +its lowest seed to its highest, and no mean line. + +![Both arms' seeds within one band](results/cross-machine.png) + +The amendment's cross arm also took longer: 1,875-1,985 s more than its local +seeds, against 1,253-1,356 s in the registered run. Two things were slower +an hour later. +- The link: the env clients waited 6.0 ms per call for an action instead of + 5.0. +- The laptop, which was doing other work: stepping MuJoCo took 0.73 ms + instead of 0.50, and sending feedback 0.56 ms instead of 0.41. + +Together that is about 1.4 ms per step, or 570 s over the run, which is the +difference. On a shared Wi-Fi link the crossing's cost is not a constant. + +--- + +## What E43 does not show + +* **Any other link, or this one at a steady cost.** Campus Wi-Fi through + Tailscale is slower than two machines on one wired switch, and it changed + within the evening (throughput 20.5 down to 14.4 MB/s; per-call wait 5.0 + then 6.0 ms). The model says how the cost scales, but only this link was + measured. +* **Any other second machine**, or more than one. This is one laptop and + one server. +* **Image-based training across machines.** The cell sends states. Part B + measures what images cost on this link; no image policy was trained + across it. +* **Identical trajectories.** The two machines' MuJoCo differ in the last + bit from the first step (8.9e-16) and HalfCheetah amplifies it (order 1 + by step 100, `results/pilot.txt`). On one machine a seed reproduces + exactly. So the arms are compared by the status rule, not trajectory by + trajectory. +* **Anything about an environment that does not wait.** PlugRL's env client + stops and waits for each action, so latency slows training without + changing its data. A robot, or any environment that keeps moving, turns + latency into a different problem, and E43 does not touch it. + +The runs' checkpoints and tensorboards stay on guangzhao. Kept here: +- the logs, of both arms and of the amendment's seeds +- both machines' client summaries +- `ladder.tsv` and `throughput.tsv` +- `curves.json` and `cross-machine.png` (`figure.py`) +- `verdicts.txt` and `summary.tsv` (`summarise.py`) +- `amendment.txt` (`amendment.py`) diff --git a/experiments/e43-cross-machine-training/amendment.py b/experiments/e43-cross-machine-training/amendment.py new file mode 100644 index 0000000..4f486d9 --- /dev/null +++ b/experiments/e43-cross-machine-training/amendment.py @@ -0,0 +1,69 @@ +"""Read AMENDMENT.md's six seeds per arm: seeds 0-2 from the registered run, +3-5 from the amendment. + + python amendment.py [results-dir] + +Per seed: iterations 91-100's mean, the gain over iteration 1, and the span +from iteration 1 to 100 on the server's clock. Then AMENDMENT.md's test for +a gap worth chasing: all six cross seeds above all six local seeds, or the +arms' six-seed means further apart than the standard deviation within +either arm. +""" + +import pathlib +import statistics +import sys + +from tensorboard.backend.event_processing.event_accumulator import EventAccumulator + +HERE = pathlib.Path(__file__).resolve().parent +R = pathlib.Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else HERE / "results" +LAYOUT = {("local", s): "local" for s in (0, 1, 2)} | {("cross", s): "cross" for s in (0, 1, 2)} +LAYOUT |= {("local", s): "local-b" for s in (3, 4, 5)} | {("cross", s): "cross-b" for s in (3, 4, 5)} + + +def read(arm: str, seed: int): + run = R / LAYOUT[(arm, seed)] / "fpo" / "fpo-policy" / f"halfcheetah-{arm}-seed{seed}" + acc = EventAccumulator(str(sorted((run / "tensorboard").glob("events.*"))[-1]), + size_guidance={"scalars": 0}) + acc.Reload() + r = acc.Scalars("rollout/reward") + v = [e.value for e in r] + return len(v), v[0], statistics.mean(v[90:100]), r[99].wall_time - r[0].wall_time + + +def main() -> int: + last, gains, spans = {"local": [], "cross": []}, {"local": [], "cross": []}, {} + print("seed arm iterations first last10 gain span_s") + for seed in range(6): + for arm in ("local", "cross"): + n, first, last10, span = read(arm, seed) + last[arm].append(last10) + gains[arm].append(last10 - first) + spans[(arm, seed)] = span + print(f"{seed:4d} {arm:5s} {n:10d} {first:6.0f} {last10:7.0f} {last10 - first:+7.0f} {span:8.0f}") + + print("\nstatus rule over six seeds (+200 over iteration 1)") + for arm in ("local", "cross"): + print(f" {arm}: {sum(g >= 200 for g in gains[arm])} of 6") + + print("\nextra time, cross minus local, iteration 1 -> 100 (P4 predicted 1,119 s)") + for seed in range(6): + print(f" seed {seed}: {spans[('cross', seed)] - spans[('local', seed)]:.0f} s") + + lo, cr = last["local"], last["cross"] + ml, mc = statistics.mean(lo), statistics.mean(cr) + sl, sc = statistics.stdev(lo), statistics.stdev(cr) + separated = min(cr) > max(lo) + apart = abs(mc - ml) > max(sl, sc) + print("\niterations 91-100, six seeds per arm") + print(f" local mean {ml:.0f} sd {sl:.0f} range {min(lo):.0f}-{max(lo):.0f}") + print(f" cross mean {mc:.0f} sd {sc:.0f} range {min(cr):.0f}-{max(cr):.0f}") + print(f" all six cross above all six local: {'yes' if separated else 'no'}") + print(f" means further apart ({abs(mc - ml):.0f}) than either arm's sd ({max(sl, sc):.0f}): {'yes' if apart else 'no'}") + print(f" -> {'a gap worth chasing' if separated or apart else 'read as seed variation'}") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/experiments/e43-cross-machine-training/figure.py b/experiments/e43-cross-machine-training/figure.py new file mode 100644 index 0000000..25958db --- /dev/null +++ b/experiments/e43-cross-machine-training/figure.py @@ -0,0 +1,87 @@ +"""E43's figure: the same cell trained on one machine and across two. + + python figure.py export [results-dir] # on guangzhao: tensorboards -> results/curves.json + python figure.py plot OUT.png # anywhere with matplotlib + +Every seed's return per iteration, over its arm's band from the lowest seed to +the highest. No mean line: with six seeds the arms' means differ by less than +either arm's spread (AMENDMENT.md). The legend carries each arm's range of +wall clock from iteration 1 to 100. +""" + +import json +import pathlib +import statistics +import sys + +HERE = pathlib.Path(__file__).resolve().parent +CURVES = HERE / "results" / "curves.json" +# Seeds 0-2 are the registered run; 3-5 are AMENDMENT.md's, in the -b directories. +LAYOUT = [(0, ""), (1, ""), (2, ""), (3, "-b"), (4, "-b"), (5, "-b")] + + +def export(results: pathlib.Path) -> None: + from tensorboard.backend.event_processing.event_accumulator import EventAccumulator + + data = {} + for arm in ("local", "cross"): + data[arm] = {"returns": [], "span_s": []} + for seed, suffix in LAYOUT: + run = results / f"{arm}{suffix}" / "fpo" / "fpo-policy" / f"halfcheetah-{arm}-seed{seed}" + if not run.exists(): + continue + acc = EventAccumulator(str(sorted((run / "tensorboard").glob("events.*"))[-1]), + size_guidance={"scalars": 0}) + acc.Reload() + r = acc.Scalars("rollout/reward") + data[arm]["returns"].append([round(e.value, 1) for e in r]) + data[arm]["span_s"].append(round(r[-1].wall_time - r[0].wall_time, 1)) + CURVES.write_text(json.dumps(data) + "\n", encoding="utf-8") + print("wrote", CURVES) + + +def plot(out: pathlib.Path) -> None: + import matplotlib + + matplotlib.use("Agg") + import matplotlib.pyplot as plt + + data = json.loads(CURVES.read_text(encoding="utf-8")) + style = { + "local": ("#9aa5d8", "one machine"), + "cross": ("#4051b5", "two machines, over campus Wi-Fi"), + } + fig, ax = plt.subplots(figsize=(6.4, 3.4), dpi=200) + for arm in ("local", "cross"): + colour, label = style[arm] + runs = data[arm]["returns"] + n = min(len(r) for r in runs) + x = list(range(1, n + 1)) + # The spread across seeds, and each seed: no mean line, since the + # arms' means differ by less than either arm's spread (AMENDMENT.md). + lo = [min(r[i] for r in runs) for i in range(n)] + hi = [max(r[i] for r in runs) for i in range(n)] + ax.fill_between(x, lo, hi, color=colour, alpha=0.18, linewidth=0) + for r in runs: + ax.plot(x, r[:n], color=colour, linewidth=0.8, alpha=0.7) + spans = [s / 60 for s in data[arm]["span_s"]] + ax.plot([], [], color=colour, linewidth=6, alpha=0.5, + label=f"{label} ({min(spans):.0f}-{max(spans):.0f} min)") + ax.set_xlabel("iteration (4,096 steps each)") + ax.set_ylabel("episode return") + seeds = len(data["local"]["returns"]) + ax.set_title(f"fpo-policy · FPO · HalfCheetah-v5, {seeds} seeds per arm", fontsize=10) + for side in ("top", "right"): + ax.spines[side].set_visible(False) + ax.grid(axis="y", color="#e3e6f0", linewidth=0.6) + ax.legend(frameon=False, loc="upper left", fontsize=8.5) + fig.tight_layout() + fig.savefig(out, facecolor="white") + print("wrote", out) + + +if __name__ == "__main__": + if sys.argv[1] == "export": + export(pathlib.Path(sys.argv[2]).resolve() if len(sys.argv) > 2 else HERE / "results") + else: + plot(pathlib.Path(sys.argv[2])) diff --git a/experiments/e43-cross-machine-training/results/amendment.txt b/experiments/e43-cross-machine-training/results/amendment.txt new file mode 100644 index 0000000..75a8bba --- /dev/null +++ b/experiments/e43-cross-machine-training/results/amendment.txt @@ -0,0 +1,32 @@ +seed arm iterations first last10 gain span_s + 0 local 100 -293 1262 +1555 1223 + 0 cross 100 -345 2060 +2404 2476 + 1 local 100 -325 695 +1019 1187 + 1 cross 100 -318 2127 +2445 2475 + 2 local 100 -250 725 +976 1175 + 2 cross 100 -250 946 +1196 2530 + 3 local 100 -321 1967 +2288 1277 + 3 cross 100 -283 2267 +2550 3151 + 4 local 100 -312 2336 +2647 1204 + 4 cross 100 -314 1587 +1901 3189 + 5 local 100 -346 857 +1204 1188 + 5 cross 100 -270 1082 +1352 3151 + +status rule over six seeds (+200 over iteration 1) + local: 6 of 6 + cross: 6 of 6 + +extra time, cross minus local, iteration 1 -> 100 (P4 predicted 1,119 s) + seed 0: 1253 s + seed 1: 1288 s + seed 2: 1356 s + seed 3: 1875 s + seed 4: 1985 s + seed 5: 1963 s + +iterations 91-100, six seeds per arm + local mean 1307 sd 694 range 695-2336 + cross mean 1678 sd 564 range 946-2267 + all six cross above all six local: no + means further apart (371) than either arm's sd (694): no + -> read as seed variation diff --git a/experiments/e43-cross-machine-training/results/cross-b.out b/experiments/e43-cross-machine-training/results/cross-b.out new file mode 100644 index 0000000..5af31f5 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-b.out @@ -0,0 +1,14 @@ +arm: cross ports 9790+seed +server: /home/guangzhao/zuogou/plugrl/e43-reg/../plugrl-server/.venv/bin/python (src /home/guangzhao/zuogou/plugrl/e43-reg/src) +out: /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b +steps: 409600 seeds: 3 4 5 +start 2026-09-28 18:23:56 +READY seed 3 port 9793 at 18:23:59 +READY seed 4 port 9794 at 18:24:04 +READY seed 5 port 9795 at 18:24:09 +seed 3 server rc=0 at 19:17:11 +seed 5 server rc=0 at 19:17:20 +seed 4 server rc=0 at 19:17:53 +end 2026-09-28 19:17:53 +failed seeds: 0 +ARM_DONE cross diff --git a/experiments/e43-cross-machine-training/results/cross-b/server-seed3.log b/experiments/e43-cross-machine-training/results/cross-b/server-seed3.log new file mode 100644 index 0000000..9ab94db --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-b/server-seed3.log @@ -0,0 +1,23 @@ +18:23:58|INFO|plugrl_server version: 0.1.0 +18:23:58|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +18:23:58|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +18:23:58|INFO|Seeded python, numpy and torch with 3. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +18:23:58|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed3 +18:23:59|INFO|Policy created... +18:23:59|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +18:23:59|INFO|Algorithm created: + +18:23:59|INFO|Agent Server is listening on 0.0.0.0:9793 +18:35:11|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed3/81921 +18:44:44|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed3/163841 +18:53:42|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed3/245761 +19:03:37|INFO|Checkpoint saved at step 327680 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed3/327680 +19:17:11|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed3/409601 +19:17:11|INFO|Stopping server as the algorithm signaled to stop. +19:17:11|INFO|Shutdown started: aborting pending infer requests. +19:17:11|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +19:17:11|INFO|Shutdown closing 1 websocket connection(s). +19:17:11|INFO|Shutdown interrupted an in-flight inference request from ('100.65.224.34', 58498). +19:17:11|INFO|WebSocket server closed. +19:17:11|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/cross-b/server-seed4.log b/experiments/e43-cross-machine-training/results/cross-b/server-seed4.log new file mode 100644 index 0000000..f9c5abb --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-b/server-seed4.log @@ -0,0 +1,23 @@ +18:24:03|INFO|plugrl_server version: 0.1.0 +18:24:03|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +18:24:03|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +18:24:03|INFO|Seeded python, numpy and torch with 4. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +18:24:03|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed4 +18:24:04|INFO|Policy created... +18:24:04|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +18:24:04|INFO|Algorithm created: + +18:24:04|INFO|Agent Server is listening on 0.0.0.0:9794 +18:35:16|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed4/81921 +18:44:49|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed4/163841 +18:53:55|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed4/245761 +19:04:04|INFO|Checkpoint saved at step 327680 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed4/327680 +19:17:53|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed4/409601 +19:17:53|INFO|Stopping server as the algorithm signaled to stop. +19:17:53|INFO|Shutdown started: aborting pending infer requests. +19:17:53|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +19:17:53|INFO|Shutdown closing 1 websocket connection(s). +19:17:53|INFO|Shutdown interrupted an in-flight inference request from ('100.65.224.34', 52623). +19:17:53|INFO|WebSocket server closed. +19:17:53|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/cross-b/server-seed5.log b/experiments/e43-cross-machine-training/results/cross-b/server-seed5.log new file mode 100644 index 0000000..e39079c --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-b/server-seed5.log @@ -0,0 +1,23 @@ +18:24:09|INFO|plugrl_server version: 0.1.0 +18:24:09|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +18:24:09|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +18:24:09|INFO|Seeded python, numpy and torch with 5. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +18:24:09|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed5 +18:24:09|INFO|Policy created... +18:24:09|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +18:24:09|INFO|Algorithm created: + +18:24:09|INFO|Agent Server is listening on 0.0.0.0:9795 +18:35:19|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed5/81921 +18:44:51|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed5/163841 +18:53:49|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed5/245761 +19:03:45|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed5/327681 +19:17:19|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross-b/fpo/fpo-policy/halfcheetah-cross-seed5/409601 +19:17:19|INFO|Stopping server as the algorithm signaled to stop. +19:17:19|INFO|Shutdown started: aborting pending infer requests. +19:17:19|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +19:17:19|INFO|Shutdown closing 1 websocket connection(s). +19:17:19|INFO|Shutdown interrupted an in-flight inference request from ('100.65.224.34', 52637). +19:17:19|INFO|WebSocket server closed. +19:17:19|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed3.log b/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed3.log new file mode 100644 index 0000000..0fdcb8e --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed3.log @@ -0,0 +1,115 @@ +2026-09-28 18:25:00.316 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 18:25:00.319 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 18:25:00.322 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 18:25:00.326 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 18:25:00.333 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 18:25:00.557 | INFO  | __main__:main:83 - Starting env client exp_name=e43-cross-seed3 output_dir=runs\e43-cross-seed3 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 18:25:00.716 | INFO  | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://100.75.226.89:9793... +2026-09-28 18:25:00.752 | INFO  | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 18:25:30.757 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=4692 infer_calls=4692 feedback_calls=4692 infer_wait=23.531s infer_obs_pack=0.446s env_step=2.618s feedback_total=2.068s feedback_obs_pack=0.513s feedback_info_pack=0.076s effective_fps=163.69 +2026-09-28 18:26:00.762 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=8863 infer_calls=8863 feedback_calls=8863 infer_wait=46.739s infer_obs_pack=0.933s env_step=5.374s feedback_total=4.249s feedback_obs_pack=1.072s feedback_info_pack=0.162s effective_fps=154.69 +2026-09-28 18:26:30.769 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=12547 infer_calls=12547 feedback_calls=12547 infer_wait=69.423s infer_obs_pack=1.507s env_step=8.385s feedback_total=6.508s feedback_obs_pack=1.674s feedback_info_pack=0.248s effective_fps=146.20 +2026-09-28 18:27:00.775 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=16528 infer_calls=16528 feedback_calls=16528 infer_wait=92.339s infer_obs_pack=2.044s env_step=11.239s feedback_total=8.785s feedback_obs_pack=2.246s feedback_info_pack=0.342s effective_fps=144.47 +2026-09-28 18:27:30.783 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=19046 infer_calls=19046 feedback_calls=19046 infer_wait=115.414s infer_obs_pack=2.565s env_step=14.131s feedback_total=10.992s feedback_obs_pack=2.763s feedback_info_pack=0.428s effective_fps=133.09 +2026-09-28 18:28:00.785 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=22484 infer_calls=22484 feedback_calls=22484 infer_wait=137.780s infer_obs_pack=3.146s env_step=17.338s feedback_total=13.301s feedback_obs_pack=3.363s feedback_info_pack=0.526s effective_fps=131.05 +2026-09-28 18:28:30.785 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=26664 infer_calls=26664 feedback_calls=26664 infer_wait=160.849s infer_obs_pack=3.651s env_step=20.195s feedback_total=15.444s feedback_obs_pack=3.917s feedback_info_pack=0.609s effective_fps=133.23 +2026-09-28 18:29:00.790 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=30248 infer_calls=30248 feedback_calls=30248 infer_wait=184.168s infer_obs_pack=4.144s env_step=22.944s feedback_total=17.563s feedback_obs_pack=4.449s feedback_info_pack=0.688s effective_fps=132.19 +2026-09-28 18:29:30.795 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=34667 infer_calls=34667 feedback_calls=34667 infer_wait=207.390s infer_obs_pack=4.638s env_step=25.683s feedback_total=19.742s feedback_obs_pack=5.012s feedback_info_pack=0.771s effective_fps=134.65 +2026-09-28 18:30:00.796 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=38071 infer_calls=38071 feedback_calls=38071 infer_wait=229.961s infer_obs_pack=5.164s env_step=28.836s feedback_total=22.012s feedback_obs_pack=5.628s feedback_info_pack=0.864s effective_fps=133.13 +2026-09-28 18:30:30.804 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41490 infer_calls=41490 feedback_calls=41490 infer_wait=252.421s infer_obs_pack=5.709s env_step=32.032s feedback_total=24.327s feedback_obs_pack=6.260s feedback_info_pack=0.951s effective_fps=131.93 +2026-09-28 18:31:00.806 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=44713 infer_calls=44713 feedback_calls=44713 infer_wait=275.123s infer_obs_pack=6.216s env_step=35.044s feedback_total=26.549s feedback_obs_pack=6.833s feedback_info_pack=1.039s effective_fps=130.38 +2026-09-28 18:31:30.817 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=47293 infer_calls=47293 feedback_calls=47293 infer_wait=297.428s infer_obs_pack=6.747s env_step=38.330s feedback_total=28.771s feedback_obs_pack=7.422s feedback_info_pack=1.113s effective_fps=127.38 +2026-09-28 18:32:00.850 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=50500 infer_calls=50500 feedback_calls=50500 infer_wait=320.347s infer_obs_pack=7.303s env_step=41.359s feedback_total=30.957s feedback_obs_pack=7.972s feedback_info_pack=1.224s effective_fps=126.26 +2026-09-28 18:32:30.855 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=53840 infer_calls=53840 feedback_calls=53840 infer_wait=343.651s infer_obs_pack=7.789s env_step=44.214s feedback_total=33.031s feedback_obs_pack=8.531s feedback_info_pack=1.310s effective_fps=125.59 +2026-09-28 18:33:00.856 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=57719 infer_calls=57719 feedback_calls=57719 infer_wait=366.152s infer_obs_pack=8.315s env_step=47.372s feedback_total=35.391s feedback_obs_pack=9.118s feedback_info_pack=1.402s effective_fps=126.24 +2026-09-28 18:33:30.858 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=61615 infer_calls=61615 feedback_calls=61615 infer_wait=389.267s infer_obs_pack=8.815s env_step=50.201s feedback_total=37.570s feedback_obs_pack=9.667s feedback_info_pack=1.484s effective_fps=126.82 +2026-09-28 18:34:00.858 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=66478 infer_calls=66478 feedback_calls=66478 infer_wait=412.626s infer_obs_pack=9.283s env_step=52.905s feedback_total=39.720s feedback_obs_pack=10.208s feedback_info_pack=1.564s effective_fps=129.20 +2026-09-28 18:34:30.868 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=70752 infer_calls=70752 feedback_calls=70752 infer_wait=435.829s infer_obs_pack=9.750s env_step=55.692s feedback_total=41.871s feedback_obs_pack=10.743s feedback_info_pack=1.643s effective_fps=130.26 +2026-09-28 18:35:00.882 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=75100 infer_calls=75100 feedback_calls=75100 infer_wait=458.986s infer_obs_pack=10.240s env_step=58.583s feedback_total=43.973s feedback_obs_pack=11.290s feedback_info_pack=1.723s effective_fps=131.34 +2026-09-28 18:35:30.892 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=78805 infer_calls=78805 feedback_calls=78805 infer_wait=481.496s infer_obs_pack=10.765s env_step=61.729s feedback_total=46.285s feedback_obs_pack=11.876s feedback_info_pack=1.827s effective_fps=131.28 +2026-09-28 18:36:00.892 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=82199 infer_calls=82199 feedback_calls=82199 infer_wait=504.014s infer_obs_pack=11.226s env_step=64.953s feedback_total=48.625s feedback_obs_pack=12.507s feedback_info_pack=1.919s effective_fps=130.72 +2026-09-28 18:36:30.905 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=86027 infer_calls=86027 feedback_calls=86027 infer_wait=526.934s infer_obs_pack=11.735s env_step=67.863s feedback_total=50.887s feedback_obs_pack=13.105s feedback_info_pack=2.011s effective_fps=130.86 +2026-09-28 18:37:01.831 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=90114 infer_calls=90114 feedback_calls=90114 infer_wait=550.996s infer_obs_pack=12.196s env_step=70.685s feedback_total=53.113s feedback_obs_pack=13.689s feedback_info_pack=2.095s effective_fps=131.17 +2026-09-28 18:37:31.830 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=93640 infer_calls=93640 feedback_calls=93640 infer_wait=573.777s infer_obs_pack=12.707s env_step=73.774s feedback_total=55.346s feedback_obs_pack=14.273s feedback_info_pack=2.180s effective_fps=130.85 +2026-09-28 18:38:01.831 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=96212 infer_calls=96212 feedback_calls=96212 infer_wait=596.460s infer_obs_pack=13.236s env_step=76.966s feedback_total=57.592s feedback_obs_pack=14.853s feedback_info_pack=2.279s effective_fps=129.27 +2026-09-28 18:38:31.834 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=99885 infer_calls=99885 feedback_calls=99885 infer_wait=619.157s infer_obs_pack=13.762s env_step=79.978s feedback_total=59.895s feedback_obs_pack=15.469s feedback_info_pack=2.365s effective_fps=129.25 +2026-09-28 18:39:01.847 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=103444 infer_calls=103444 feedback_calls=103444 infer_wait=642.067s infer_obs_pack=14.264s env_step=82.963s feedback_total=62.115s feedback_obs_pack=16.047s feedback_info_pack=2.448s effective_fps=129.08 +2026-09-28 18:39:31.852 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=107252 infer_calls=107252 feedback_calls=107252 infer_wait=665.339s infer_obs_pack=14.712s env_step=85.733s feedback_total=64.249s feedback_obs_pack=16.612s feedback_info_pack=2.532s effective_fps=129.21 +2026-09-28 18:40:01.859 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=111755 infer_calls=111755 feedback_calls=111755 infer_wait=688.846s infer_obs_pack=15.148s env_step=88.423s feedback_total=66.301s feedback_obs_pack=17.128s feedback_info_pack=2.609s effective_fps=130.14 +2026-09-28 18:40:31.858 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=115640 infer_calls=115640 feedback_calls=115640 infer_wait=711.887s infer_obs_pack=15.639s env_step=91.263s feedback_total=68.541s feedback_obs_pack=17.756s feedback_info_pack=2.691s effective_fps=130.32 +2026-09-28 18:41:01.864 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=119953 infer_calls=119953 feedback_calls=119953 infer_wait=734.943s infer_obs_pack=16.130s env_step=94.069s feedback_total=70.747s feedback_obs_pack=18.314s feedback_info_pack=2.781s effective_fps=130.97 +2026-09-28 18:41:31.866 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=124514 infer_calls=124514 feedback_calls=124514 infer_wait=758.356s infer_obs_pack=16.585s env_step=96.747s feedback_total=72.835s feedback_obs_pack=18.852s feedback_info_pack=2.862s effective_fps=131.83 +2026-09-28 18:42:01.868 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=129691 infer_calls=129691 feedback_calls=129691 infer_wait=781.894s infer_obs_pack=17.041s env_step=99.360s feedback_total=74.918s feedback_obs_pack=19.380s feedback_info_pack=2.942s effective_fps=133.26 +2026-09-28 18:42:31.868 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=134723 infer_calls=134723 feedback_calls=134723 infer_wait=805.809s infer_obs_pack=17.474s env_step=101.768s feedback_total=76.921s feedback_obs_pack=19.888s feedback_info_pack=3.021s effective_fps=134.46 +2026-09-28 18:43:01.872 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=139402 infer_calls=139402 feedback_calls=139402 infer_wait=829.857s infer_obs_pack=17.898s env_step=104.190s feedback_total=78.835s feedback_obs_pack=20.375s feedback_info_pack=3.098s effective_fps=135.24 +2026-09-28 18:43:31.876 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=144054 infer_calls=144054 feedback_calls=144054 infer_wait=853.477s infer_obs_pack=18.333s env_step=106.797s feedback_total=80.859s feedback_obs_pack=20.889s feedback_info_pack=3.182s effective_fps=135.97 +2026-09-28 18:44:01.875 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=149120 infer_calls=149120 feedback_calls=149120 infer_wait=877.316s infer_obs_pack=18.770s env_step=109.272s feedback_total=82.847s feedback_obs_pack=21.394s feedback_info_pack=3.259s effective_fps=137.03 +2026-09-28 18:44:31.879 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=153882 infer_calls=153882 feedback_calls=153882 infer_wait=901.156s infer_obs_pack=19.192s env_step=111.764s feedback_total=84.819s feedback_obs_pack=21.910s feedback_info_pack=3.334s effective_fps=137.77 +2026-09-28 18:45:01.883 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=158948 infer_calls=158948 feedback_calls=158948 infer_wait=924.959s infer_obs_pack=19.637s env_step=114.255s feedback_total=86.817s feedback_obs_pack=22.415s feedback_info_pack=3.416s effective_fps=138.74 +2026-09-28 18:45:32.500 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163842 infer_calls=163842 feedback_calls=163842 infer_wait=949.367s infer_obs_pack=20.083s env_step=116.728s feedback_total=88.821s feedback_obs_pack=22.928s feedback_info_pack=3.496s effective_fps=139.44 +2026-09-28 18:46:02.503 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=168684 infer_calls=168684 feedback_calls=168684 infer_wait=972.900s infer_obs_pack=20.529s env_step=119.309s feedback_total=90.941s feedback_obs_pack=23.443s feedback_info_pack=3.576s effective_fps=140.14 +2026-09-28 18:46:32.505 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=173255 infer_calls=173255 feedback_calls=173255 infer_wait=996.354s infer_obs_pack=20.997s env_step=121.951s feedback_total=93.043s feedback_obs_pack=23.985s feedback_info_pack=3.656s effective_fps=140.59 +2026-09-28 18:47:02.505 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=178211 infer_calls=178211 feedback_calls=178211 infer_wait=1020.107s infer_obs_pack=21.442s env_step=124.441s feedback_total=95.072s feedback_obs_pack=24.495s feedback_info_pack=3.740s effective_fps=141.32 +2026-09-28 18:47:32.511 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=183316 infer_calls=183316 feedback_calls=183316 infer_wait=1044.040s infer_obs_pack=21.868s env_step=126.855s feedback_total=97.085s feedback_obs_pack=25.001s feedback_info_pack=3.819s effective_fps=142.12 +2026-09-28 18:48:02.513 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=188018 infer_calls=188018 feedback_calls=188018 infer_wait=1067.534s infer_obs_pack=22.322s env_step=129.432s feedback_total=99.237s feedback_obs_pack=25.568s feedback_info_pack=3.905s effective_fps=142.60 +2026-09-28 18:48:32.711 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=192514 infer_calls=192514 feedback_calls=192514 infer_wait=1091.414s infer_obs_pack=22.778s env_step=131.957s feedback_total=101.287s feedback_obs_pack=26.092s feedback_info_pack=3.984s effective_fps=142.87 +2026-09-28 18:49:02.714 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=197303 infer_calls=197303 feedback_calls=197303 infer_wait=1114.777s infer_obs_pack=23.240s env_step=134.637s feedback_total=103.418s feedback_obs_pack=26.628s feedback_info_pack=4.068s effective_fps=143.38 +2026-09-28 18:49:32.723 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=200860 infer_calls=200860 feedback_calls=200860 infer_wait=1137.608s infer_obs_pack=23.732s env_step=137.641s feedback_total=105.695s feedback_obs_pack=27.232s feedback_info_pack=4.174s effective_fps=142.99 +2026-09-28 18:50:02.724 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=204667 infer_calls=204667 feedback_calls=204667 infer_wait=1159.713s infer_obs_pack=24.307s env_step=140.939s feedback_total=108.131s feedback_obs_pack=27.851s feedback_info_pack=4.260s effective_fps=142.82 +2026-09-28 18:50:32.730 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=208420 infer_calls=208420 feedback_calls=208420 infer_wait=1183.802s infer_obs_pack=24.726s env_step=143.341s feedback_total=110.002s feedback_obs_pack=28.321s feedback_info_pack=4.331s effective_fps=142.57 +2026-09-28 18:51:02.740 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=212949 infer_calls=212949 feedback_calls=212949 infer_wait=1206.639s infer_obs_pack=25.248s env_step=146.267s feedback_total=112.243s feedback_obs_pack=28.921s feedback_info_pack=4.422s effective_fps=142.88 +2026-09-28 18:51:32.741 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=217817 infer_calls=217817 feedback_calls=217817 infer_wait=1230.366s infer_obs_pack=25.710s env_step=148.741s feedback_total=114.293s feedback_obs_pack=29.437s feedback_info_pack=4.505s effective_fps=143.38 +2026-09-28 18:52:02.745 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=223129 infer_calls=223129 feedback_calls=223129 infer_wait=1254.125s infer_obs_pack=26.155s env_step=151.226s feedback_total=116.331s feedback_obs_pack=29.962s feedback_info_pack=4.585s effective_fps=144.16 +2026-09-28 18:52:32.746 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=227984 infer_calls=227984 feedback_calls=227984 infer_wait=1277.577s infer_obs_pack=26.610s env_step=153.848s feedback_total=118.450s feedback_obs_pack=30.513s feedback_info_pack=4.667s effective_fps=144.62 +2026-09-28 18:53:02.750 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=232360 infer_calls=232360 feedback_calls=232360 infer_wait=1300.627s infer_obs_pack=27.109s env_step=156.665s feedback_total=120.665s feedback_obs_pack=31.071s feedback_info_pack=4.765s effective_fps=144.77 +2026-09-28 18:53:32.752 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=237005 infer_calls=237005 feedback_calls=237005 infer_wait=1323.853s infer_obs_pack=27.575s env_step=159.397s feedback_total=122.833s feedback_obs_pack=31.625s feedback_info_pack=4.851s effective_fps=145.08 +2026-09-28 18:54:03.572 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=241666 infer_calls=241666 feedback_calls=241666 infer_wait=1348.066s infer_obs_pack=28.039s env_step=162.069s feedback_total=124.932s feedback_obs_pack=32.164s feedback_info_pack=4.930s effective_fps=145.31 +2026-09-28 18:54:33.573 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=246325 infer_calls=246325 feedback_calls=246325 infer_wait=1372.102s infer_obs_pack=28.460s env_step=164.456s feedback_total=126.865s feedback_obs_pack=32.651s feedback_info_pack=5.002s effective_fps=145.59 +2026-09-28 18:55:03.588 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=250879 infer_calls=250879 feedback_calls=250879 infer_wait=1395.268s infer_obs_pack=28.940s env_step=167.235s feedback_total=129.034s feedback_obs_pack=33.210s feedback_info_pack=5.086s effective_fps=145.82 +2026-09-28 18:55:33.590 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=255145 infer_calls=255145 feedback_calls=255145 infer_wait=1418.913s infer_obs_pack=29.393s env_step=169.798s feedback_total=131.058s feedback_obs_pack=33.734s feedback_info_pack=5.163s effective_fps=145.87 +2026-09-28 18:56:03.590 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=258845 infer_calls=258845 feedback_calls=258845 infer_wait=1442.234s infer_obs_pack=29.805s env_step=172.596s feedback_total=133.122s feedback_obs_pack=34.296s feedback_info_pack=5.251s effective_fps=145.60 +2026-09-28 18:56:33.592 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=263137 infer_calls=263137 feedback_calls=263137 infer_wait=1465.147s infer_obs_pack=30.307s env_step=175.421s feedback_total=135.410s feedback_obs_pack=34.887s feedback_info_pack=5.349s effective_fps=145.68 +2026-09-28 18:57:03.596 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=267642 infer_calls=267642 feedback_calls=267642 infer_wait=1488.445s infer_obs_pack=30.776s env_step=178.113s feedback_total=137.563s feedback_obs_pack=35.447s feedback_info_pack=5.431s effective_fps=145.86 +2026-09-28 18:57:33.598 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=272832 infer_calls=272832 feedback_calls=272832 infer_wait=1512.185s infer_obs_pack=31.244s env_step=180.591s feedback_total=139.595s feedback_obs_pack=35.964s feedback_info_pack=5.511s effective_fps=146.40 +2026-09-28 18:58:03.600 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=276364 infer_calls=276364 feedback_calls=276364 infer_wait=1535.945s infer_obs_pack=31.702s env_step=183.173s feedback_total=141.586s feedback_obs_pack=36.454s feedback_info_pack=5.583s effective_fps=146.04 +2026-09-28 18:58:33.601 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=279124 infer_calls=279124 feedback_calls=279124 infer_wait=1558.227s infer_obs_pack=32.242s env_step=186.507s feedback_total=143.953s feedback_obs_pack=37.089s feedback_info_pack=5.687s effective_fps=145.31 +2026-09-28 18:59:03.625 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=283321 infer_calls=283321 feedback_calls=283321 infer_wait=1581.163s infer_obs_pack=32.778s env_step=189.319s feedback_total=146.263s feedback_obs_pack=37.709s feedback_info_pack=5.773s effective_fps=145.33 +2026-09-28 18:59:33.627 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=287540 infer_calls=287540 feedback_calls=287540 infer_wait=1604.005s infer_obs_pack=33.283s env_step=192.213s feedback_total=148.571s feedback_obs_pack=38.331s feedback_info_pack=5.863s effective_fps=145.36 +2026-09-28 19:00:03.630 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=291966 infer_calls=291966 feedback_calls=291966 infer_wait=1627.097s infer_obs_pack=33.778s env_step=194.961s feedback_total=150.807s feedback_obs_pack=38.917s feedback_info_pack=5.946s effective_fps=145.50 +2026-09-28 19:00:33.631 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=296656 infer_calls=296656 feedback_calls=296656 infer_wait=1650.426s infer_obs_pack=34.256s env_step=197.618s feedback_total=152.960s feedback_obs_pack=39.480s feedback_info_pack=6.028s effective_fps=145.76 +2026-09-28 19:01:03.635 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=301432 infer_calls=301432 feedback_calls=301432 infer_wait=1674.217s infer_obs_pack=34.692s env_step=200.101s feedback_total=154.988s feedback_obs_pack=39.998s feedback_info_pack=6.106s effective_fps=146.04 +2026-09-28 19:01:33.636 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=305331 infer_calls=305331 feedback_calls=305331 infer_wait=1696.800s infer_obs_pack=35.230s env_step=203.105s feedback_total=157.356s feedback_obs_pack=40.639s feedback_info_pack=6.190s effective_fps=145.92 +2026-09-28 19:02:03.638 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=309319 infer_calls=309319 feedback_calls=309319 infer_wait=1719.627s infer_obs_pack=35.781s env_step=205.937s feedback_total=159.674s feedback_obs_pack=41.226s feedback_info_pack=6.299s effective_fps=145.84 +2026-09-28 19:02:33.642 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=313566 infer_calls=313566 feedback_calls=313566 infer_wait=1742.903s infer_obs_pack=36.259s env_step=208.584s feedback_total=161.878s feedback_obs_pack=41.800s feedback_info_pack=6.383s effective_fps=145.87 +2026-09-28 19:03:03.646 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=317873 infer_calls=317873 feedback_calls=317873 infer_wait=1766.209s infer_obs_pack=36.733s env_step=211.249s feedback_total=164.050s feedback_obs_pack=42.362s feedback_info_pack=6.466s effective_fps=145.93 +2026-09-28 19:03:33.650 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=320871 infer_calls=320871 feedback_calls=320871 infer_wait=1789.378s infer_obs_pack=37.245s env_step=214.141s feedback_total=166.149s feedback_obs_pack=42.916s feedback_info_pack=6.542s effective_fps=145.39 +2026-09-28 19:04:03.653 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=324588 infer_calls=324588 feedback_calls=324588 infer_wait=1812.985s infer_obs_pack=37.693s env_step=216.771s feedback_total=168.161s feedback_obs_pack=43.437s feedback_info_pack=6.630s effective_fps=145.19 +2026-09-28 19:04:33.661 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=328882 infer_calls=328882 feedback_calls=328882 infer_wait=1836.992s infer_obs_pack=38.117s env_step=219.181s feedback_total=170.075s feedback_obs_pack=43.927s feedback_info_pack=6.712s effective_fps=145.24 +2026-09-28 19:05:03.662 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=333054 infer_calls=333054 feedback_calls=333054 infer_wait=1860.861s infer_obs_pack=38.549s env_step=221.626s feedback_total=172.046s feedback_obs_pack=44.435s feedback_info_pack=6.786s effective_fps=145.24 +2026-09-28 19:05:33.666 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=337255 infer_calls=337255 feedback_calls=337255 infer_wait=1884.327s infer_obs_pack=39.023s env_step=224.227s feedback_total=174.126s feedback_obs_pack=44.985s feedback_info_pack=6.867s effective_fps=145.26 +2026-09-28 19:06:03.673 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=340939 infer_calls=340939 feedback_calls=340939 infer_wait=1907.529s infer_obs_pack=39.553s env_step=226.975s feedback_total=176.283s feedback_obs_pack=45.564s feedback_info_pack=6.948s effective_fps=145.06 +2026-09-28 19:06:33.674 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=344625 infer_calls=344625 feedback_calls=344625 infer_wait=1931.075s infer_obs_pack=40.025s env_step=229.440s feedback_total=178.493s feedback_obs_pack=46.143s feedback_info_pack=7.049s effective_fps=144.86 +2026-09-28 19:07:03.675 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=348425 infer_calls=348425 feedback_calls=348425 infer_wait=1954.578s infer_obs_pack=40.508s env_step=232.021s feedback_total=180.618s feedback_obs_pack=46.738s feedback_info_pack=7.134s effective_fps=144.71 +2026-09-28 19:07:33.682 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=350399 infer_calls=350399 feedback_calls=350399 infer_wait=1977.158s infer_obs_pack=41.075s env_step=235.061s feedback_total=183.004s feedback_obs_pack=47.411s feedback_info_pack=7.215s effective_fps=143.82 +2026-09-28 19:08:03.704 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=351912 infer_calls=351912 feedback_calls=351912 infer_wait=2000.115s infer_obs_pack=41.581s env_step=238.013s feedback_total=185.341s feedback_obs_pack=48.030s feedback_info_pack=7.317s effective_fps=142.76 +2026-09-28 19:08:33.715 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=353504 infer_calls=353504 feedback_calls=353504 infer_wait=2022.357s infer_obs_pack=42.109s env_step=241.446s feedback_total=187.689s feedback_obs_pack=48.721s feedback_info_pack=7.400s effective_fps=141.76 +2026-09-28 19:09:03.719 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=355829 infer_calls=355829 feedback_calls=355829 infer_wait=2043.835s infer_obs_pack=42.740s env_step=245.093s feedback_total=190.267s feedback_obs_pack=49.453s feedback_info_pack=7.508s effective_fps=141.09 +2026-09-28 19:09:33.719 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=358417 infer_calls=358417 feedback_calls=358417 infer_wait=2065.587s infer_obs_pack=43.356s env_step=248.620s feedback_total=192.712s feedback_obs_pack=50.121s feedback_info_pack=7.601s effective_fps=140.54 +2026-09-28 19:10:03.721 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=360838 infer_calls=360838 feedback_calls=360838 infer_wait=2087.031s infer_obs_pack=43.968s env_step=252.297s feedback_total=195.332s feedback_obs_pack=50.807s feedback_info_pack=7.694s effective_fps=139.93 +2026-09-28 19:10:33.722 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=362503 infer_calls=362503 feedback_calls=362503 infer_wait=2108.964s infer_obs_pack=44.563s env_step=255.789s feedback_total=197.844s feedback_obs_pack=51.484s feedback_info_pack=7.771s effective_fps=139.04 +2026-09-28 19:11:03.734 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=364087 infer_calls=364087 feedback_calls=364087 infer_wait=2131.168s infer_obs_pack=45.219s env_step=259.039s feedback_total=200.302s feedback_obs_pack=52.201s feedback_info_pack=7.863s effective_fps=138.14 +2026-09-28 19:11:33.752 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=366926 infer_calls=366926 feedback_calls=366926 infer_wait=2154.115s infer_obs_pack=45.730s env_step=261.974s feedback_total=202.484s feedback_obs_pack=52.809s feedback_info_pack=7.967s effective_fps=137.72 +2026-09-28 19:12:03.754 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=370015 infer_calls=370015 feedback_calls=370015 infer_wait=2177.842s infer_obs_pack=46.168s env_step=264.568s feedback_total=204.460s feedback_obs_pack=53.327s feedback_info_pack=8.039s effective_fps=137.40 +2026-09-28 19:12:33.757 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=373463 infer_calls=373463 feedback_calls=373463 infer_wait=2201.364s infer_obs_pack=46.644s env_step=267.208s feedback_total=206.510s feedback_obs_pack=53.850s feedback_info_pack=8.117s effective_fps=137.22 +2026-09-28 19:13:03.761 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=376390 infer_calls=376390 feedback_calls=376390 infer_wait=2223.722s infer_obs_pack=47.146s env_step=270.369s feedback_total=209.000s feedback_obs_pack=54.506s feedback_info_pack=8.229s effective_fps=136.86 +2026-09-28 19:13:33.768 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=379215 infer_calls=379215 feedback_calls=379215 infer_wait=2246.354s infer_obs_pack=47.685s env_step=273.536s feedback_total=211.248s feedback_obs_pack=55.079s feedback_info_pack=8.322s effective_fps=136.47 +2026-09-28 19:14:03.772 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=382232 infer_calls=382232 feedback_calls=382232 infer_wait=2268.851s infer_obs_pack=48.246s env_step=276.700s feedback_total=213.565s feedback_obs_pack=55.658s feedback_info_pack=8.416s effective_fps=136.15 +2026-09-28 19:14:34.613 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=385025 infer_calls=385025 feedback_calls=385025 infer_wait=2291.878s infer_obs_pack=48.842s env_step=279.933s feedback_total=216.062s feedback_obs_pack=56.299s feedback_info_pack=8.505s effective_fps=135.73 +2026-09-28 19:15:04.613 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=388817 infer_calls=388817 feedback_calls=388817 infer_wait=2314.009s infer_obs_pack=49.428s env_step=283.139s feedback_total=218.552s feedback_obs_pack=56.972s feedback_info_pack=8.598s effective_fps=135.71 +2026-09-28 19:15:34.616 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=391371 infer_calls=391371 feedback_calls=391371 infer_wait=2337.056s infer_obs_pack=49.940s env_step=286.057s feedback_total=220.689s feedback_obs_pack=57.514s feedback_info_pack=8.694s effective_fps=135.25 +2026-09-28 19:16:04.616 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=395703 infer_calls=395703 feedback_calls=395703 infer_wait=2360.675s infer_obs_pack=50.384s env_step=288.577s feedback_total=222.817s feedback_obs_pack=58.028s feedback_info_pack=8.770s effective_fps=135.40 +2026-09-28 19:16:34.617 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=400136 infer_calls=400136 feedback_calls=400136 infer_wait=2384.198s infer_obs_pack=50.837s env_step=291.184s feedback_total=224.901s feedback_obs_pack=58.540s feedback_info_pack=8.852s effective_fps=135.59 +2026-09-28 19:17:04.618 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=404632 infer_calls=404632 feedback_calls=404632 infer_wait=2408.046s infer_obs_pack=51.294s env_step=293.621s feedback_total=226.898s feedback_obs_pack=59.060s feedback_info_pack=8.930s effective_fps=135.79 +2026-09-28 19:17:34.621 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=407629 infer_calls=407629 feedback_calls=407629 infer_wait=2431.178s infer_obs_pack=51.762s env_step=296.380s feedback_total=229.249s feedback_obs_pack=59.717s feedback_info_pack=9.022s effective_fps=135.49 +2026-09-28 19:17:59.065 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=2448.158s infer_obs_pack=52.213s env_step=298.774s feedback_total=230.968s feedback_obs_pack=60.168s feedback_info_pack=9.081s effective_fps=135.18 +2026-09-28 19:17:59.065 | INFO  | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed4.log b/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed4.log new file mode 100644 index 0000000..e13e20e --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed4.log @@ -0,0 +1,116 @@ +2026-09-28 18:25:05.293 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 18:25:05.296 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 18:25:05.301 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 18:25:05.306 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 18:25:05.312 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 18:25:05.497 | INFO  | __main__:main:83 - Starting env client exp_name=e43-cross-seed4 output_dir=runs\e43-cross-seed4 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 18:25:05.653 | INFO  | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://100.75.226.89:9794... +2026-09-28 18:25:05.680 | INFO  | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 18:25:35.689 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=4725 infer_calls=4725 feedback_calls=4725 infer_wait=23.684s infer_obs_pack=0.455s env_step=2.528s feedback_total=2.067s feedback_obs_pack=0.525s feedback_info_pack=0.082s effective_fps=164.43 +2026-09-28 18:26:05.691 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=8827 infer_calls=8827 feedback_calls=8827 infer_wait=46.875s infer_obs_pack=0.937s env_step=5.260s feedback_total=4.264s feedback_obs_pack=1.082s feedback_info_pack=0.166s effective_fps=153.95 +2026-09-28 18:26:35.700 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=12392 infer_calls=12392 feedback_calls=12392 infer_wait=69.719s infer_obs_pack=1.431s env_step=8.243s feedback_total=6.505s feedback_obs_pack=1.657s feedback_info_pack=0.263s effective_fps=144.26 +2026-09-28 18:27:05.710 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=16557 infer_calls=16557 feedback_calls=16557 infer_wait=92.829s infer_obs_pack=2.001s env_step=11.039s feedback_total=8.660s feedback_obs_pack=2.201s feedback_info_pack=0.350s effective_fps=144.57 +2026-09-28 18:27:35.718 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=18960 infer_calls=18960 feedback_calls=18960 infer_wait=115.330s infer_obs_pack=2.622s env_step=14.095s feedback_total=11.038s feedback_obs_pack=2.840s feedback_info_pack=0.479s effective_fps=132.51 +2026-09-28 18:28:05.773 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=22596 infer_calls=22596 feedback_calls=22596 infer_wait=137.881s infer_obs_pack=3.174s env_step=17.177s feedback_total=13.386s feedback_obs_pack=3.450s feedback_info_pack=0.586s effective_fps=131.66 +2026-09-28 18:28:35.777 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=26722 infer_calls=26722 feedback_calls=26722 infer_wait=161.016s infer_obs_pack=3.653s env_step=20.014s feedback_total=15.555s feedback_obs_pack=4.008s feedback_info_pack=0.686s effective_fps=133.45 +2026-09-28 18:29:05.781 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=30459 infer_calls=30459 feedback_calls=30459 infer_wait=184.089s infer_obs_pack=4.128s env_step=22.859s feedback_total=17.801s feedback_obs_pack=4.589s feedback_info_pack=0.781s effective_fps=133.08 +2026-09-28 18:29:35.783 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=34649 infer_calls=34649 feedback_calls=34649 infer_wait=207.064s infer_obs_pack=4.631s env_step=25.734s feedback_total=20.075s feedback_obs_pack=5.156s feedback_info_pack=0.891s effective_fps=134.56 +2026-09-28 18:30:05.839 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=38039 infer_calls=38039 feedback_calls=38039 infer_wait=229.736s infer_obs_pack=5.114s env_step=28.892s feedback_total=22.365s feedback_obs_pack=5.756s feedback_info_pack=0.985s effective_fps=132.95 +2026-09-28 18:30:35.838 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41714 infer_calls=41714 feedback_calls=41714 infer_wait=252.397s infer_obs_pack=5.619s env_step=31.911s feedback_total=24.703s feedback_obs_pack=6.350s feedback_info_pack=1.096s effective_fps=132.58 +2026-09-28 18:31:05.851 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=44376 infer_calls=44376 feedback_calls=44376 infer_wait=275.067s infer_obs_pack=6.218s env_step=35.010s feedback_total=27.036s feedback_obs_pack=6.923s feedback_info_pack=1.209s effective_fps=129.25 +2026-09-28 18:31:35.855 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=47333 infer_calls=47333 feedback_calls=47333 infer_wait=297.431s infer_obs_pack=6.752s env_step=38.271s feedback_total=29.397s feedback_obs_pack=7.557s feedback_info_pack=1.307s effective_fps=127.29 +2026-09-28 18:32:05.872 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=50211 infer_calls=50211 feedback_calls=50211 infer_wait=320.203s infer_obs_pack=7.298s env_step=41.249s feedback_total=31.671s feedback_obs_pack=8.151s feedback_info_pack=1.395s effective_fps=125.40 +2026-09-28 18:32:35.878 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=53868 infer_calls=53868 feedback_calls=53868 infer_wait=343.573s infer_obs_pack=7.781s env_step=43.994s feedback_total=33.770s feedback_obs_pack=8.739s feedback_info_pack=1.487s effective_fps=125.53 +2026-09-28 18:33:05.884 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=57691 infer_calls=57691 feedback_calls=57691 infer_wait=366.155s infer_obs_pack=8.323s env_step=47.067s feedback_total=36.087s feedback_obs_pack=9.354s feedback_info_pack=1.584s effective_fps=126.06 +2026-09-28 18:33:35.891 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=61843 infer_calls=61843 feedback_calls=61843 infer_wait=389.343s infer_obs_pack=8.800s env_step=49.825s feedback_total=38.295s feedback_obs_pack=9.921s feedback_info_pack=1.683s effective_fps=127.18 +2026-09-28 18:34:05.894 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=66831 infer_calls=66831 feedback_calls=66831 infer_wait=412.609s infer_obs_pack=9.275s env_step=52.557s feedback_total=40.473s feedback_obs_pack=10.469s feedback_info_pack=1.779s effective_fps=129.79 +2026-09-28 18:34:35.896 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=70715 infer_calls=70715 feedback_calls=70715 infer_wait=435.755s infer_obs_pack=9.786s env_step=55.425s feedback_total=42.610s feedback_obs_pack=10.998s feedback_info_pack=1.873s effective_fps=130.09 +2026-09-28 18:35:05.897 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=75013 infer_calls=75013 feedback_calls=75013 infer_wait=458.919s infer_obs_pack=10.304s env_step=58.207s feedback_total=44.768s feedback_obs_pack=11.546s feedback_info_pack=1.960s effective_fps=131.10 +2026-09-28 18:35:35.912 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=78668 infer_calls=78668 feedback_calls=78668 infer_wait=481.478s infer_obs_pack=10.829s env_step=61.206s feedback_total=47.122s feedback_obs_pack=12.144s feedback_info_pack=2.069s effective_fps=130.97 +2026-09-28 18:36:05.917 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=82206 infer_calls=82206 feedback_calls=82206 infer_wait=504.000s infer_obs_pack=11.357s env_step=64.261s feedback_total=49.546s feedback_obs_pack=12.782s feedback_info_pack=2.165s effective_fps=130.66 +2026-09-28 18:36:35.921 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=86114 infer_calls=86114 feedback_calls=86114 infer_wait=527.066s infer_obs_pack=11.825s env_step=67.096s feedback_total=51.769s feedback_obs_pack=13.381s feedback_info_pack=2.272s effective_fps=130.92 +2026-09-28 18:37:06.078 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=90114 infer_calls=90114 feedback_calls=90114 infer_wait=550.658s infer_obs_pack=12.257s env_step=69.818s feedback_total=53.894s feedback_obs_pack=13.947s feedback_info_pack=2.370s effective_fps=131.24 +2026-09-28 18:37:36.083 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=93397 infer_calls=93397 feedback_calls=93397 infer_wait=573.271s infer_obs_pack=12.802s env_step=72.900s feedback_total=56.218s feedback_obs_pack=14.534s feedback_info_pack=2.465s effective_fps=130.59 +2026-09-28 18:38:06.085 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=95897 infer_calls=95897 feedback_calls=95897 infer_wait=596.257s infer_obs_pack=13.342s env_step=75.860s feedback_total=58.441s feedback_obs_pack=15.132s feedback_info_pack=2.571s effective_fps=128.91 +2026-09-28 18:38:36.097 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=99749 infer_calls=99749 feedback_calls=99749 infer_wait=618.947s infer_obs_pack=13.858s env_step=78.846s feedback_total=60.768s feedback_obs_pack=15.739s feedback_info_pack=2.689s effective_fps=129.14 +2026-09-28 18:39:06.100 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=103201 infer_calls=103201 feedback_calls=103201 infer_wait=642.074s infer_obs_pack=14.323s env_step=81.715s feedback_total=62.942s feedback_obs_pack=16.298s feedback_info_pack=2.775s effective_fps=128.83 +2026-09-28 18:39:36.103 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=107176 infer_calls=107176 feedback_calls=107176 infer_wait=665.484s infer_obs_pack=14.794s env_step=84.375s feedback_total=65.049s feedback_obs_pack=16.835s feedback_info_pack=2.867s effective_fps=129.17 +2026-09-28 18:40:06.107 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=111594 infer_calls=111594 feedback_calls=111594 infer_wait=688.943s infer_obs_pack=15.231s env_step=87.102s feedback_total=67.100s feedback_obs_pack=17.346s feedback_info_pack=2.959s effective_fps=130.01 +2026-09-28 18:40:36.109 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=115529 infer_calls=115529 feedback_calls=115529 infer_wait=712.256s infer_obs_pack=15.681s env_step=89.784s feedback_total=69.292s feedback_obs_pack=17.880s feedback_info_pack=3.051s effective_fps=130.24 +2026-09-28 18:41:06.111 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=119792 infer_calls=119792 feedback_calls=119792 infer_wait=735.309s infer_obs_pack=16.182s env_step=92.587s feedback_total=71.513s feedback_obs_pack=18.471s feedback_info_pack=3.161s effective_fps=130.84 +2026-09-28 18:41:36.117 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=124398 infer_calls=124398 feedback_calls=124398 infer_wait=758.739s infer_obs_pack=16.632s env_step=95.274s feedback_total=73.600s feedback_obs_pack=19.006s feedback_info_pack=3.258s effective_fps=131.74 +2026-09-28 18:42:06.120 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=129575 infer_calls=129575 feedback_calls=129575 infer_wait=782.311s infer_obs_pack=17.086s env_step=97.846s feedback_total=75.699s feedback_obs_pack=19.537s feedback_info_pack=3.349s effective_fps=133.18 +2026-09-28 18:42:36.124 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=134532 infer_calls=134532 feedback_calls=134532 infer_wait=806.165s infer_obs_pack=17.528s env_step=100.297s feedback_total=77.717s feedback_obs_pack=20.049s feedback_info_pack=3.439s effective_fps=134.30 +2026-09-28 18:43:07.751 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=139266 infer_calls=139266 feedback_calls=139266 infer_wait=831.675s infer_obs_pack=17.949s env_step=102.770s feedback_total=79.713s feedback_obs_pack=20.544s feedback_info_pack=3.529s effective_fps=134.93 +2026-09-28 18:43:37.754 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=144155 infer_calls=144155 feedback_calls=144155 infer_wait=855.221s infer_obs_pack=18.396s env_step=105.370s feedback_total=81.785s feedback_obs_pack=21.066s feedback_info_pack=3.620s effective_fps=135.90 +2026-09-28 18:44:07.756 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=149406 infer_calls=149406 feedback_calls=149406 infer_wait=879.127s infer_obs_pack=18.835s env_step=107.835s feedback_total=83.740s feedback_obs_pack=21.561s feedback_info_pack=3.695s effective_fps=137.13 +2026-09-28 18:44:37.758 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=154083 infer_calls=154083 feedback_calls=154083 infer_wait=903.199s infer_obs_pack=19.238s env_step=110.258s feedback_total=85.645s feedback_obs_pack=22.036s feedback_info_pack=3.782s effective_fps=137.78 +2026-09-28 18:45:07.759 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=159123 infer_calls=159123 feedback_calls=159123 infer_wait=926.907s infer_obs_pack=19.672s env_step=112.802s feedback_total=87.673s feedback_obs_pack=22.553s feedback_info_pack=3.872s effective_fps=138.72 +2026-09-28 18:45:37.762 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163851 infer_calls=163851 feedback_calls=163851 infer_wait=950.737s infer_obs_pack=20.103s env_step=115.301s feedback_total=89.672s feedback_obs_pack=23.058s feedback_info_pack=3.961s effective_fps=139.35 +2026-09-28 18:46:07.763 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=168581 infer_calls=168581 feedback_calls=168581 infer_wait=974.161s infer_obs_pack=20.545s env_step=117.985s feedback_total=91.793s feedback_obs_pack=23.589s feedback_info_pack=4.055s effective_fps=139.96 +2026-09-28 18:46:37.763 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=173146 infer_calls=173146 feedback_calls=173146 infer_wait=997.676s infer_obs_pack=20.990s env_step=120.594s feedback_total=93.911s feedback_obs_pack=24.149s feedback_info_pack=4.150s effective_fps=140.41 +2026-09-28 18:47:07.767 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=178010 infer_calls=178010 feedback_calls=178010 infer_wait=1021.476s infer_obs_pack=21.434s env_step=123.084s feedback_total=95.920s feedback_obs_pack=24.654s feedback_info_pack=4.246s effective_fps=141.06 +2026-09-28 18:47:37.771 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=183047 infer_calls=183047 feedback_calls=183047 infer_wait=1045.454s infer_obs_pack=21.869s env_step=125.506s feedback_total=97.894s feedback_obs_pack=25.150s feedback_info_pack=4.336s effective_fps=141.82 +2026-09-28 18:48:07.772 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=187497 infer_calls=187497 feedback_calls=187497 infer_wait=1068.872s infer_obs_pack=22.348s env_step=128.150s feedback_total=100.053s feedback_obs_pack=25.702s feedback_info_pack=4.437s effective_fps=142.11 +2026-09-28 18:48:37.775 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=192447 infer_calls=192447 feedback_calls=192447 infer_wait=1092.366s infer_obs_pack=22.821s env_step=130.759s feedback_total=102.201s feedback_obs_pack=26.259s feedback_info_pack=4.536s effective_fps=142.75 +2026-09-28 18:49:08.428 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=196610 infer_calls=196610 feedback_calls=196610 infer_wait=1116.726s infer_obs_pack=23.264s env_step=133.315s feedback_total=104.188s feedback_obs_pack=26.768s feedback_info_pack=4.621s effective_fps=142.73 +2026-09-28 18:49:38.428 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=200185 infer_calls=200185 feedback_calls=200185 infer_wait=1138.958s infer_obs_pack=23.846s env_step=136.524s feedback_total=106.636s feedback_obs_pack=27.403s feedback_info_pack=4.738s effective_fps=142.38 +2026-09-28 18:50:08.434 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=204184 infer_calls=204184 feedback_calls=204184 infer_wait=1161.825s infer_obs_pack=24.353s env_step=139.507s feedback_total=108.869s feedback_obs_pack=27.984s feedback_info_pack=4.837s effective_fps=142.33 +2026-09-28 18:50:38.438 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=207861 infer_calls=207861 feedback_calls=207861 infer_wait=1185.880s infer_obs_pack=24.769s env_step=141.885s feedback_total=110.772s feedback_obs_pack=28.483s feedback_info_pack=4.925s effective_fps=142.05 +2026-09-28 18:51:08.441 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=212398 infer_calls=212398 feedback_calls=212398 infer_wait=1208.763s infer_obs_pack=25.274s env_step=144.783s feedback_total=113.034s feedback_obs_pack=29.067s feedback_info_pack=5.032s effective_fps=142.37 +2026-09-28 18:51:38.447 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=217277 infer_calls=217277 feedback_calls=217277 infer_wait=1232.806s infer_obs_pack=25.711s env_step=147.133s feedback_total=115.005s feedback_obs_pack=29.570s feedback_info_pack=5.121s effective_fps=142.88 +2026-09-28 18:52:08.452 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=222236 infer_calls=222236 feedback_calls=222236 infer_wait=1256.428s infer_obs_pack=26.160s env_step=149.683s feedback_total=117.062s feedback_obs_pack=30.086s feedback_info_pack=5.214s effective_fps=143.44 +2026-09-28 18:52:38.458 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=226954 infer_calls=226954 feedback_calls=226954 infer_wait=1280.161s infer_obs_pack=26.591s env_step=152.246s feedback_total=119.071s feedback_obs_pack=30.590s feedback_info_pack=5.306s effective_fps=143.82 +2026-09-28 18:53:08.463 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=231131 infer_calls=231131 feedback_calls=231131 infer_wait=1303.178s infer_obs_pack=27.050s env_step=155.165s feedback_total=121.254s feedback_obs_pack=31.148s feedback_info_pack=5.407s effective_fps=143.86 +2026-09-28 18:53:38.464 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=236036 infer_calls=236036 feedback_calls=236036 infer_wait=1326.551s infer_obs_pack=27.508s env_step=157.824s feedback_total=123.391s feedback_obs_pack=31.713s feedback_info_pack=5.504s effective_fps=144.34 +2026-09-28 18:54:08.468 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=240592 infer_calls=240592 feedback_calls=240592 infer_wait=1349.804s infer_obs_pack=27.965s env_step=160.660s feedback_total=125.487s feedback_obs_pack=32.259s feedback_info_pack=5.597s effective_fps=144.59 +2026-09-28 18:54:38.474 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=245269 infer_calls=245269 feedback_calls=245269 infer_wait=1373.897s infer_obs_pack=28.375s env_step=163.013s feedback_total=127.423s feedback_obs_pack=32.753s feedback_info_pack=5.684s effective_fps=144.90 +2026-09-28 18:55:08.476 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=249576 infer_calls=249576 feedback_calls=249576 infer_wait=1396.925s infer_obs_pack=28.881s env_step=165.885s feedback_total=129.608s feedback_obs_pack=33.316s feedback_info_pack=5.783s effective_fps=144.99 +2026-09-28 18:55:38.476 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=253725 infer_calls=253725 feedback_calls=253725 infer_wait=1420.728s infer_obs_pack=29.296s env_step=168.487s feedback_total=131.573s feedback_obs_pack=33.810s feedback_info_pack=5.871s effective_fps=144.98 +2026-09-28 18:56:08.482 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=257262 infer_calls=257262 feedback_calls=257262 infer_wait=1444.055s infer_obs_pack=29.750s env_step=171.201s feedback_total=133.805s feedback_obs_pack=34.366s feedback_info_pack=5.997s effective_fps=144.63 +2026-09-28 18:56:38.491 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=261561 infer_calls=261561 feedback_calls=261561 infer_wait=1466.990s infer_obs_pack=30.253s env_step=174.067s feedback_total=136.077s feedback_obs_pack=34.984s feedback_info_pack=6.103s effective_fps=144.72 +2026-09-28 18:57:08.495 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=266072 infer_calls=266072 feedback_calls=266072 infer_wait=1490.338s infer_obs_pack=30.715s env_step=176.829s feedback_total=138.175s feedback_obs_pack=35.535s feedback_info_pack=6.200s effective_fps=144.91 +2026-09-28 18:57:38.500 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=270709 infer_calls=270709 feedback_calls=270709 infer_wait=1514.486s infer_obs_pack=31.138s env_step=179.171s feedback_total=140.087s feedback_obs_pack=36.022s feedback_info_pack=6.290s effective_fps=145.16 +2026-09-28 18:58:08.530 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=273754 infer_calls=273754 feedback_calls=273754 infer_wait=1537.727s infer_obs_pack=31.686s env_step=181.955s feedback_total=142.207s feedback_obs_pack=36.596s feedback_info_pack=6.386s effective_fps=144.57 +2026-09-28 18:58:38.534 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=277048 infer_calls=277048 feedback_calls=277048 infer_wait=1560.076s infer_obs_pack=32.224s env_step=185.238s feedback_total=144.595s feedback_obs_pack=37.254s feedback_info_pack=6.495s effective_fps=144.14 +2026-09-28 18:59:08.535 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=280730 infer_calls=280730 feedback_calls=280730 infer_wait=1582.904s infer_obs_pack=32.768s env_step=188.056s feedback_total=146.892s feedback_obs_pack=37.838s feedback_info_pack=6.610s effective_fps=143.92 +2026-09-28 18:59:38.543 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=285053 infer_calls=285053 feedback_calls=285053 infer_wait=1605.812s infer_obs_pack=33.271s env_step=190.928s feedback_total=149.184s feedback_obs_pack=38.442s feedback_info_pack=6.717s effective_fps=144.02 +2026-09-28 19:00:08.545 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=289735 infer_calls=289735 feedback_calls=289735 infer_wait=1629.160s infer_obs_pack=33.754s env_step=193.633s feedback_total=151.311s feedback_obs_pack=39.003s feedback_info_pack=6.813s effective_fps=144.30 +2026-09-28 19:00:38.548 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=294379 infer_calls=294379 feedback_calls=294379 infer_wait=1652.667s infer_obs_pack=34.223s env_step=196.244s feedback_total=153.413s feedback_obs_pack=39.544s feedback_info_pack=6.907s effective_fps=144.55 +2026-09-28 19:01:08.552 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=298714 infer_calls=298714 feedback_calls=298714 infer_wait=1676.461s infer_obs_pack=34.675s env_step=198.710s feedback_total=155.429s feedback_obs_pack=40.091s feedback_info_pack=7.005s effective_fps=144.64 +2026-09-28 19:01:38.557 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=302752 infer_calls=302752 feedback_calls=302752 infer_wait=1699.239s infer_obs_pack=35.182s env_step=201.637s feedback_total=157.758s feedback_obs_pack=40.722s feedback_info_pack=7.109s effective_fps=144.59 +2026-09-28 19:02:08.562 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=306813 infer_calls=306813 feedback_calls=306813 infer_wait=1722.348s infer_obs_pack=35.693s env_step=204.373s feedback_total=159.983s feedback_obs_pack=41.288s feedback_info_pack=7.208s effective_fps=144.56 +2026-09-28 19:02:38.563 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=310929 infer_calls=310929 feedback_calls=310929 infer_wait=1745.718s infer_obs_pack=36.155s env_step=207.060s feedback_total=162.136s feedback_obs_pack=41.849s feedback_info_pack=7.306s effective_fps=144.55 +2026-09-28 19:03:08.564 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=315012 infer_calls=315012 feedback_calls=315012 infer_wait=1769.105s infer_obs_pack=36.641s env_step=209.741s feedback_total=164.218s feedback_obs_pack=42.384s feedback_info_pack=7.403s effective_fps=144.52 +2026-09-28 19:03:38.565 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=317765 infer_calls=317765 feedback_calls=317765 infer_wait=1792.383s infer_obs_pack=37.094s env_step=212.569s feedback_total=166.325s feedback_obs_pack=42.980s feedback_info_pack=7.502s effective_fps=143.89 +2026-09-28 19:04:08.564 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=321850 infer_calls=321850 feedback_calls=321850 infer_wait=1816.258s infer_obs_pack=37.513s env_step=215.109s feedback_total=168.224s feedback_obs_pack=43.466s feedback_info_pack=7.605s effective_fps=143.87 +2026-09-28 19:04:38.568 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=326097 infer_calls=326097 feedback_calls=326097 infer_wait=1840.285s infer_obs_pack=37.932s env_step=217.510s feedback_total=170.160s feedback_obs_pack=43.967s feedback_info_pack=7.689s effective_fps=143.92 +2026-09-28 19:05:08.569 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=329997 infer_calls=329997 feedback_calls=329997 infer_wait=1864.238s infer_obs_pack=38.353s env_step=219.976s feedback_total=172.085s feedback_obs_pack=44.465s feedback_info_pack=7.778s effective_fps=143.81 +2026-09-28 19:05:38.570 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=333863 infer_calls=333863 feedback_calls=333863 infer_wait=1887.654s infer_obs_pack=38.830s env_step=222.597s feedback_total=174.223s feedback_obs_pack=45.006s feedback_info_pack=7.871s effective_fps=143.70 +2026-09-28 19:06:08.573 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=337653 infer_calls=337653 feedback_calls=337653 infer_wait=1911.155s infer_obs_pack=39.316s env_step=225.159s feedback_total=176.375s feedback_obs_pack=45.558s feedback_info_pack=7.978s effective_fps=143.56 +2026-09-28 19:06:38.579 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=341311 infer_calls=341311 feedback_calls=341311 infer_wait=1934.723s infer_obs_pack=39.784s env_step=227.807s feedback_total=178.445s feedback_obs_pack=46.120s feedback_info_pack=8.063s effective_fps=143.36 +2026-09-28 19:07:08.587 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=344598 infer_calls=344598 feedback_calls=344598 infer_wait=1958.089s infer_obs_pack=40.309s env_step=230.554s feedback_total=180.601s feedback_obs_pack=46.678s feedback_info_pack=8.167s effective_fps=143.01 +2026-09-28 19:07:38.608 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=346519 infer_calls=346519 feedback_calls=346519 infer_wait=1980.729s infer_obs_pack=40.906s env_step=233.588s feedback_total=182.924s feedback_obs_pack=47.405s feedback_info_pack=8.252s effective_fps=142.12 +2026-09-28 19:08:08.623 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=347931 infer_calls=347931 feedback_calls=347931 infer_wait=2003.326s infer_obs_pack=41.393s env_step=236.921s feedback_total=185.199s feedback_obs_pack=48.039s feedback_info_pack=8.407s effective_fps=141.04 +2026-09-28 19:08:38.630 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=349589 infer_calls=349589 feedback_calls=349589 infer_wait=2025.370s infer_obs_pack=41.953s env_step=240.422s feedback_total=187.681s feedback_obs_pack=48.702s feedback_info_pack=8.500s effective_fps=140.09 +2026-09-28 19:09:08.637 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=352067 infer_calls=352067 feedback_calls=352067 infer_wait=2046.636s infer_obs_pack=42.563s env_step=244.222s feedback_total=190.288s feedback_obs_pack=49.389s feedback_info_pack=8.606s effective_fps=139.50 +2026-09-28 19:09:38.641 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=354573 infer_calls=354573 feedback_calls=354573 infer_wait=2068.220s infer_obs_pack=43.184s env_step=247.791s feedback_total=192.900s feedback_obs_pack=50.044s feedback_info_pack=8.725s effective_fps=138.93 +2026-09-28 19:10:08.642 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=356879 infer_calls=356879 feedback_calls=356879 infer_wait=2089.828s infer_obs_pack=43.759s env_step=251.476s feedback_total=195.462s feedback_obs_pack=50.771s feedback_info_pack=8.831s effective_fps=138.30 +2026-09-28 19:10:38.646 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=358399 infer_calls=358399 feedback_calls=358399 infer_wait=2112.037s infer_obs_pack=44.305s env_step=254.865s feedback_total=197.863s feedback_obs_pack=51.470s feedback_info_pack=8.952s effective_fps=137.37 +2026-09-28 19:11:08.650 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=360036 infer_calls=360036 feedback_calls=360036 infer_wait=2134.214s infer_obs_pack=44.983s env_step=258.259s feedback_total=200.134s feedback_obs_pack=52.101s feedback_info_pack=9.061s effective_fps=136.50 +2026-09-28 19:11:38.658 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=362872 infer_calls=362872 feedback_calls=362872 infer_wait=2157.647s infer_obs_pack=45.449s env_step=260.997s feedback_total=202.231s feedback_obs_pack=52.634s feedback_info_pack=9.157s effective_fps=136.09 +2026-09-28 19:12:08.659 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=366187 infer_calls=366187 feedback_calls=366187 infer_wait=2181.236s infer_obs_pack=45.977s env_step=263.527s feedback_total=204.322s feedback_obs_pack=53.152s feedback_info_pack=9.246s effective_fps=135.87 +2026-09-28 19:12:38.666 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=369495 infer_calls=369495 feedback_calls=369495 infer_wait=2204.618s infer_obs_pack=46.454s env_step=266.212s feedback_total=206.436s feedback_obs_pack=53.687s feedback_info_pack=9.356s effective_fps=135.66 +2026-09-28 19:13:08.674 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=372201 infer_calls=372201 feedback_calls=372201 infer_wait=2226.660s infer_obs_pack=47.059s env_step=269.574s feedback_total=208.894s feedback_obs_pack=54.345s feedback_info_pack=9.467s effective_fps=135.24 +2026-09-28 19:13:38.675 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=375206 infer_calls=375206 feedback_calls=375206 infer_wait=2249.351s infer_obs_pack=47.581s env_step=272.648s feedback_total=211.195s feedback_obs_pack=54.908s feedback_info_pack=9.557s effective_fps=134.93 +2026-09-28 19:14:08.679 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=378072 infer_calls=378072 feedback_calls=378072 infer_wait=2271.743s infer_obs_pack=48.114s env_step=275.902s feedback_total=213.619s feedback_obs_pack=55.542s feedback_info_pack=9.662s effective_fps=134.58 +2026-09-28 19:14:38.680 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=380790 infer_calls=380790 feedback_calls=380790 infer_wait=2293.544s infer_obs_pack=48.661s env_step=279.330s feedback_total=216.199s feedback_obs_pack=56.232s feedback_info_pack=9.777s effective_fps=134.19 +2026-09-28 19:15:08.683 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=384544 infer_calls=384544 feedback_calls=384544 infer_wait=2316.635s infer_obs_pack=49.172s env_step=282.142s feedback_total=218.400s feedback_obs_pack=56.808s feedback_info_pack=9.886s effective_fps=134.16 +2026-09-28 19:15:38.696 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=387036 infer_calls=387036 feedback_calls=387036 infer_wait=2340.155s infer_obs_pack=49.619s env_step=284.921s feedback_total=220.406s feedback_obs_pack=57.295s feedback_info_pack=9.976s effective_fps=133.69 +2026-09-28 19:16:08.698 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=391306 infer_calls=391306 feedback_calls=391306 infer_wait=2364.416s infer_obs_pack=50.042s env_step=287.196s feedback_total=222.289s feedback_obs_pack=57.780s feedback_info_pack=10.066s effective_fps=133.83 +2026-09-28 19:16:38.706 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=395327 infer_calls=395327 feedback_calls=395327 infer_wait=2388.262s infer_obs_pack=50.494s env_step=289.682s feedback_total=224.265s feedback_obs_pack=58.285s feedback_info_pack=10.153s effective_fps=133.89 +2026-09-28 19:17:08.706 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=399787 infer_calls=399787 feedback_calls=399787 infer_wait=2412.117s infer_obs_pack=50.952s env_step=292.182s feedback_total=226.208s feedback_obs_pack=58.788s feedback_info_pack=10.239s effective_fps=134.09 +2026-09-28 19:17:38.714 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=402600 infer_calls=402600 feedback_calls=402600 infer_wait=2435.292s infer_obs_pack=51.423s env_step=295.130s feedback_total=228.375s feedback_obs_pack=59.353s feedback_info_pack=10.341s effective_fps=133.74 +2026-09-28 19:18:08.715 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=405598 infer_calls=405598 feedback_calls=405598 infer_wait=2458.764s infer_obs_pack=51.865s env_step=297.897s feedback_total=230.436s feedback_obs_pack=59.884s feedback_info_pack=10.467s effective_fps=133.47 +2026-09-28 19:18:40.920 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=2481.450s infer_obs_pack=52.357s env_step=300.707s feedback_total=232.633s feedback_obs_pack=60.448s feedback_info_pack=10.553s effective_fps=133.54 +2026-09-28 19:18:40.920 | INFO  | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed5.log b/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed5.log new file mode 100644 index 0000000..6426f16 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client-seed5.log @@ -0,0 +1,115 @@ +2026-09-28 18:25:10.170 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 18:25:10.174 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 18:25:10.175 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 18:25:10.180 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 18:25:10.186 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 18:25:10.367 | INFO  | __main__:main:83 - Starting env client exp_name=e43-cross-seed5 output_dir=runs\e43-cross-seed5 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 18:25:10.511 | INFO  | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://100.75.226.89:9795... +2026-09-28 18:25:10.568 | INFO  | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 18:25:40.581 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=4823 infer_calls=4823 feedback_calls=4823 infer_wait=23.749s infer_obs_pack=0.449s env_step=2.531s feedback_total=2.002s feedback_obs_pack=0.516s feedback_info_pack=0.076s effective_fps=167.86 +2026-09-28 18:26:10.582 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=8634 infer_calls=8634 feedback_calls=8634 infer_wait=46.696s infer_obs_pack=0.947s env_step=5.434s feedback_total=4.236s feedback_obs_pack=1.113s feedback_info_pack=0.179s effective_fps=150.65 +2026-09-28 18:26:40.591 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=12294 infer_calls=12294 feedback_calls=12294 infer_wait=69.513s infer_obs_pack=1.487s env_step=8.347s feedback_total=6.524s feedback_obs_pack=1.688s feedback_info_pack=0.283s effective_fps=143.17 +2026-09-28 18:27:11.126 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=16385 infer_calls=16385 feedback_calls=16385 infer_wait=93.179s infer_obs_pack=2.114s env_step=11.043s feedback_total=8.713s feedback_obs_pack=2.230s feedback_info_pack=0.371s effective_fps=142.42 +2026-09-28 18:27:41.143 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=18751 infer_calls=18751 feedback_calls=18751 infer_wait=115.635s infer_obs_pack=2.678s env_step=14.253s feedback_total=11.120s feedback_obs_pack=2.846s feedback_info_pack=0.488s effective_fps=130.50 +2026-09-28 18:28:11.147 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=22703 infer_calls=22703 feedback_calls=22703 infer_wait=138.390s infer_obs_pack=3.219s env_step=17.149s feedback_total=13.412s feedback_obs_pack=3.451s feedback_info_pack=0.581s effective_fps=131.86 +2026-09-28 18:28:41.149 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=26589 infer_calls=26589 feedback_calls=26589 infer_wait=161.445s infer_obs_pack=3.724s env_step=19.981s feedback_total=15.618s feedback_obs_pack=4.031s feedback_info_pack=0.660s effective_fps=132.44 +2026-09-28 18:29:11.151 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=30475 infer_calls=30475 feedback_calls=30475 infer_wait=184.512s infer_obs_pack=4.232s env_step=22.758s feedback_total=17.876s feedback_obs_pack=4.565s feedback_info_pack=0.757s effective_fps=132.86 +2026-09-28 18:29:41.155 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=34456 infer_calls=34456 feedback_calls=34456 infer_wait=207.561s infer_obs_pack=4.747s env_step=25.663s feedback_total=20.029s feedback_obs_pack=5.126s feedback_info_pack=0.839s effective_fps=133.55 +2026-09-28 18:30:11.163 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=37949 infer_calls=37949 feedback_calls=37949 infer_wait=230.049s infer_obs_pack=5.323s env_step=28.758s feedback_total=22.368s feedback_obs_pack=5.761s feedback_info_pack=0.927s effective_fps=132.46 +2026-09-28 18:30:41.170 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41595 infer_calls=41595 feedback_calls=41595 infer_wait=252.982s infer_obs_pack=5.825s env_step=31.690s feedback_total=24.566s feedback_obs_pack=6.313s feedback_info_pack=1.021s effective_fps=132.02 +2026-09-28 18:31:11.171 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=43905 infer_calls=43905 feedback_calls=43905 infer_wait=275.545s infer_obs_pack=6.370s env_step=35.012s feedback_total=26.837s feedback_obs_pack=6.861s feedback_info_pack=1.093s effective_fps=127.72 +2026-09-28 18:31:41.181 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=47236 infer_calls=47236 feedback_calls=47236 infer_wait=297.974s infer_obs_pack=6.980s env_step=38.148s feedback_total=29.219s feedback_obs_pack=7.464s feedback_info_pack=1.184s effective_fps=126.87 +2026-09-28 18:32:11.274 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=50179 infer_calls=50179 feedback_calls=50179 infer_wait=321.403s infer_obs_pack=7.539s env_step=40.907s feedback_total=31.333s feedback_obs_pack=7.981s feedback_info_pack=1.254s effective_fps=125.08 +2026-09-28 18:32:41.275 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=53900 infer_calls=53900 feedback_calls=53900 infer_wait=344.165s infer_obs_pack=8.028s env_step=43.931s feedback_total=33.616s feedback_obs_pack=8.551s feedback_info_pack=1.354s effective_fps=125.42 +2026-09-28 18:33:11.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=57784 infer_calls=57784 feedback_calls=57784 infer_wait=367.072s infer_obs_pack=8.523s env_step=46.879s feedback_total=35.869s feedback_obs_pack=9.117s feedback_info_pack=1.437s effective_fps=126.07 +2026-09-28 18:33:41.283 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=62191 infer_calls=62191 feedback_calls=62191 infer_wait=390.537s infer_obs_pack=8.978s env_step=49.585s feedback_total=37.920s feedback_obs_pack=9.639s feedback_info_pack=1.518s effective_fps=127.70 +2026-09-28 18:34:11.287 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=67051 infer_calls=67051 feedback_calls=67051 infer_wait=413.719s infer_obs_pack=9.455s env_step=52.404s feedback_total=40.092s feedback_obs_pack=10.191s feedback_info_pack=1.598s effective_fps=130.03 +2026-09-28 18:34:41.291 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=71147 infer_calls=71147 feedback_calls=71147 infer_wait=436.987s infer_obs_pack=9.945s env_step=55.174s feedback_total=42.221s feedback_obs_pack=10.738s feedback_info_pack=1.683s effective_fps=130.71 +2026-09-28 18:35:11.301 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=75369 infer_calls=75369 feedback_calls=75369 infer_wait=459.948s infer_obs_pack=10.440s env_step=58.112s feedback_total=44.419s feedback_obs_pack=11.278s feedback_info_pack=1.775s effective_fps=131.55 +2026-09-28 18:35:41.313 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=78801 infer_calls=78801 feedback_calls=78801 infer_wait=482.404s infer_obs_pack=11.019s env_step=61.209s feedback_total=46.826s feedback_obs_pack=11.878s feedback_info_pack=1.858s effective_fps=131.02 +2026-09-28 18:36:11.317 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=82406 infer_calls=82406 feedback_calls=82406 infer_wait=505.000s infer_obs_pack=11.525s env_step=64.321s feedback_total=49.154s feedback_obs_pack=12.483s feedback_info_pack=1.947s effective_fps=130.80 +2026-09-28 18:36:41.316 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=86555 infer_calls=86555 feedback_calls=86555 infer_wait=527.942s infer_obs_pack=11.987s env_step=67.246s feedback_total=51.356s feedback_obs_pack=13.076s feedback_info_pack=2.037s effective_fps=131.44 +2026-09-28 18:37:11.330 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=90196 infer_calls=90196 feedback_calls=90196 infer_wait=551.446s infer_obs_pack=12.465s env_step=69.946s feedback_total=53.434s feedback_obs_pack=13.583s feedback_info_pack=2.133s effective_fps=131.23 +2026-09-28 18:37:41.333 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=93795 infer_calls=93795 feedback_calls=93795 infer_wait=574.169s infer_obs_pack=12.973s env_step=72.991s feedback_total=55.700s feedback_obs_pack=14.187s feedback_info_pack=2.250s effective_fps=131.03 +2026-09-28 18:38:11.334 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=96316 infer_calls=96316 feedback_calls=96316 infer_wait=597.093s infer_obs_pack=13.515s env_step=76.040s feedback_total=57.890s feedback_obs_pack=14.779s feedback_info_pack=2.350s effective_fps=129.36 +2026-09-28 18:38:41.336 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=100137 infer_calls=100137 feedback_calls=100137 infer_wait=619.973s infer_obs_pack=14.030s env_step=79.005s feedback_total=60.111s feedback_obs_pack=15.379s feedback_info_pack=2.442s effective_fps=129.52 +2026-09-28 18:39:11.346 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=103811 infer_calls=103811 feedback_calls=103811 infer_wait=643.127s infer_obs_pack=14.513s env_step=81.817s feedback_total=62.295s feedback_obs_pack=15.946s feedback_info_pack=2.533s effective_fps=129.48 +2026-09-28 18:39:41.347 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=107799 infer_calls=107799 feedback_calls=107799 infer_wait=666.700s infer_obs_pack=14.965s env_step=84.430s feedback_total=64.362s feedback_obs_pack=16.477s feedback_info_pack=2.619s effective_fps=129.81 +2026-09-28 18:40:11.351 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=112176 infer_calls=112176 feedback_calls=112176 infer_wait=690.043s infer_obs_pack=15.453s env_step=87.172s feedback_total=66.466s feedback_obs_pack=16.999s feedback_info_pack=2.714s effective_fps=130.57 +2026-09-28 18:40:41.355 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=116045 infer_calls=116045 feedback_calls=116045 infer_wait=713.163s infer_obs_pack=15.933s env_step=90.058s feedback_total=68.583s feedback_obs_pack=17.563s feedback_info_pack=2.806s effective_fps=130.72 +2026-09-28 18:41:11.356 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=120386 infer_calls=120386 feedback_calls=120386 infer_wait=736.361s infer_obs_pack=16.403s env_step=92.827s feedback_total=70.734s feedback_obs_pack=18.116s feedback_info_pack=2.900s effective_fps=131.38 +2026-09-28 18:41:41.359 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=125100 infer_calls=125100 feedback_calls=125100 infer_wait=759.790s infer_obs_pack=16.844s env_step=95.501s feedback_total=72.852s feedback_obs_pack=18.666s feedback_info_pack=2.992s effective_fps=132.38 +2026-09-28 18:42:11.363 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=130160 infer_calls=130160 feedback_calls=130160 infer_wait=783.479s infer_obs_pack=17.292s env_step=98.038s feedback_total=74.924s feedback_obs_pack=19.188s feedback_info_pack=3.089s effective_fps=133.67 +2026-09-28 18:42:43.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=135170 infer_calls=135170 feedback_calls=135170 infer_wait=809.167s infer_obs_pack=17.733s env_step=100.531s feedback_total=76.962s feedback_obs_pack=19.706s feedback_info_pack=3.181s effective_fps=134.58 +2026-09-28 18:43:13.286 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=139732 infer_calls=139732 feedback_calls=139732 infer_wait=832.955s infer_obs_pack=18.180s env_step=103.068s feedback_total=78.921s feedback_obs_pack=20.204s feedback_info_pack=3.272s effective_fps=135.25 +2026-09-28 18:43:43.288 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=144620 infer_calls=144620 feedback_calls=144620 infer_wait=856.441s infer_obs_pack=18.621s env_step=105.750s feedback_total=80.999s feedback_obs_pack=20.741s feedback_info_pack=3.367s effective_fps=136.20 +2026-09-28 18:44:13.287 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=150011 infer_calls=150011 feedback_calls=150011 infer_wait=880.430s infer_obs_pack=19.057s env_step=108.140s feedback_total=82.961s feedback_obs_pack=21.232s feedback_info_pack=3.458s effective_fps=137.55 +2026-09-28 18:44:43.289 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=154689 infer_calls=154689 feedback_calls=154689 infer_wait=904.367s infer_obs_pack=19.459s env_step=110.603s feedback_total=84.927s feedback_obs_pack=21.727s feedback_info_pack=3.545s effective_fps=138.19 +2026-09-28 18:45:13.290 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=159725 infer_calls=159725 feedback_calls=159725 infer_wait=928.029s infer_obs_pack=19.896s env_step=113.175s feedback_total=86.961s feedback_obs_pack=22.237s feedback_info_pack=3.634s effective_fps=139.13 +2026-09-28 18:45:43.295 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=164349 infer_calls=164349 feedback_calls=164349 infer_wait=951.814s infer_obs_pack=20.340s env_step=115.686s feedback_total=88.989s feedback_obs_pack=22.747s feedback_info_pack=3.725s effective_fps=139.65 +2026-09-28 18:46:13.299 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=169229 infer_calls=169229 feedback_calls=169229 infer_wait=975.572s infer_obs_pack=20.791s env_step=118.193s feedback_total=91.015s feedback_obs_pack=23.247s feedback_info_pack=3.814s effective_fps=140.37 +2026-09-28 18:46:43.300 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=173796 infer_calls=173796 feedback_calls=173796 infer_wait=998.944s infer_obs_pack=21.248s env_step=120.879s feedback_total=93.152s feedback_obs_pack=23.797s feedback_info_pack=3.908s effective_fps=140.81 +2026-09-28 18:47:13.302 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=178653 infer_calls=178653 feedback_calls=178653 infer_wait=1022.670s infer_obs_pack=21.692s env_step=123.409s feedback_total=95.172s feedback_obs_pack=24.307s feedback_info_pack=3.998s effective_fps=141.46 +2026-09-28 18:47:43.301 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=183808 infer_calls=183808 feedback_calls=183808 infer_wait=1046.502s infer_obs_pack=22.135s env_step=125.885s feedback_total=97.183s feedback_obs_pack=24.819s feedback_info_pack=4.089s effective_fps=142.30 +2026-09-28 18:48:13.318 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=188287 infer_calls=188287 feedback_calls=188287 infer_wait=1069.844s infer_obs_pack=22.613s env_step=128.574s feedback_total=99.362s feedback_obs_pack=25.359s feedback_info_pack=4.184s effective_fps=142.60 +2026-09-28 18:48:43.320 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=193011 infer_calls=193011 feedback_calls=193011 infer_wait=1093.560s infer_obs_pack=23.081s env_step=131.096s feedback_total=101.409s feedback_obs_pack=25.883s feedback_info_pack=4.286s effective_fps=143.06 +2026-09-28 18:49:13.323 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=197548 infer_calls=197548 feedback_calls=197548 infer_wait=1116.774s infer_obs_pack=23.550s env_step=133.868s feedback_total=103.594s feedback_obs_pack=26.458s feedback_info_pack=4.391s effective_fps=143.38 +2026-09-28 18:49:43.326 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=200785 infer_calls=200785 feedback_calls=200785 infer_wait=1139.300s infer_obs_pack=24.096s env_step=136.995s feedback_total=105.937s feedback_obs_pack=27.105s feedback_info_pack=4.486s effective_fps=142.77 +2026-09-28 18:50:13.328 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=204976 infer_calls=204976 feedback_calls=204976 infer_wait=1162.087s infer_obs_pack=24.632s env_step=139.943s feedback_total=108.150s feedback_obs_pack=27.692s feedback_info_pack=4.588s effective_fps=142.86 +2026-09-28 18:50:44.239 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=208898 infer_calls=208898 feedback_calls=208898 infer_wait=1186.755s infer_obs_pack=25.078s env_step=142.480s feedback_total=110.141s feedback_obs_pack=28.206s feedback_info_pack=4.674s effective_fps=142.65 +2026-09-28 18:51:14.243 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=213537 infer_calls=213537 feedback_calls=213537 infer_wait=1209.439s infer_obs_pack=25.578s env_step=145.474s feedback_total=112.473s feedback_obs_pack=28.807s feedback_info_pack=4.768s effective_fps=143.03 +2026-09-28 18:51:44.248 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=218926 infer_calls=218926 feedback_calls=218926 infer_wait=1232.895s infer_obs_pack=26.062s env_step=148.083s feedback_total=114.610s feedback_obs_pack=29.362s feedback_info_pack=4.853s effective_fps=143.87 +2026-09-28 18:52:14.250 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=223838 infer_calls=223838 feedback_calls=223838 infer_wait=1256.405s infer_obs_pack=26.507s env_step=150.752s feedback_total=116.674s feedback_obs_pack=29.877s feedback_info_pack=4.941s effective_fps=144.38 +2026-09-28 18:52:44.255 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=228767 infer_calls=228767 feedback_calls=228767 infer_wait=1279.926s infer_obs_pack=26.944s env_step=153.404s feedback_total=118.743s feedback_obs_pack=30.406s feedback_info_pack=5.023s effective_fps=144.88 +2026-09-28 18:53:14.258 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=233152 infer_calls=233152 feedback_calls=233152 infer_wait=1302.930s infer_obs_pack=27.433s env_step=156.309s feedback_total=120.908s feedback_obs_pack=30.967s feedback_info_pack=5.112s effective_fps=145.03 +2026-09-28 18:53:44.261 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=237715 infer_calls=237715 feedback_calls=237715 infer_wait=1326.449s infer_obs_pack=27.892s env_step=158.957s feedback_total=122.980s feedback_obs_pack=31.490s feedback_info_pack=5.211s effective_fps=145.28 +2026-09-28 18:54:14.264 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=242295 infer_calls=242295 feedback_calls=242295 infer_wait=1349.734s infer_obs_pack=28.348s env_step=161.741s feedback_total=125.060s feedback_obs_pack=32.019s feedback_info_pack=5.302s effective_fps=145.53 +2026-09-28 18:54:44.273 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=246954 infer_calls=246954 feedback_calls=246954 infer_wait=1373.558s infer_obs_pack=28.789s env_step=164.237s feedback_total=127.050s feedback_obs_pack=32.516s feedback_info_pack=5.399s effective_fps=145.81 +2026-09-28 18:55:14.277 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=251351 infer_calls=251351 feedback_calls=251351 infer_wait=1396.541s infer_obs_pack=29.249s env_step=167.106s feedback_total=129.322s feedback_obs_pack=33.099s feedback_info_pack=5.495s effective_fps=145.95 +2026-09-28 18:55:44.285 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=255686 infer_calls=255686 feedback_calls=255686 infer_wait=1420.354s infer_obs_pack=29.684s env_step=169.652s feedback_total=131.303s feedback_obs_pack=33.600s feedback_info_pack=5.583s effective_fps=146.02 +2026-09-28 18:56:14.289 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=259176 infer_calls=259176 feedback_calls=259176 infer_wait=1443.430s infer_obs_pack=30.188s env_step=172.609s feedback_total=133.483s feedback_obs_pack=34.168s feedback_info_pack=5.673s effective_fps=145.63 +2026-09-28 18:56:44.293 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=263670 infer_calls=263670 feedback_calls=263670 infer_wait=1466.222s infer_obs_pack=30.672s env_step=175.572s feedback_total=135.771s feedback_obs_pack=34.779s feedback_info_pack=5.779s effective_fps=145.82 +2026-09-28 18:57:14.295 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=268321 infer_calls=268321 feedback_calls=268321 infer_wait=1489.667s infer_obs_pack=31.138s env_step=178.225s feedback_total=137.890s feedback_obs_pack=35.313s feedback_info_pack=5.874s effective_fps=146.07 +2026-09-28 18:57:44.298 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=273350 infer_calls=273350 feedback_calls=273350 infer_wait=1513.129s infer_obs_pack=31.607s env_step=180.836s feedback_total=140.049s feedback_obs_pack=35.855s feedback_info_pack=5.973s effective_fps=146.52 +2026-09-28 18:58:14.303 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=275511 infer_calls=275511 feedback_calls=275511 infer_wait=1536.503s infer_obs_pack=32.189s env_step=183.756s feedback_total=142.043s feedback_obs_pack=36.371s feedback_info_pack=6.068s effective_fps=145.43 +2026-09-28 18:58:44.308 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=279526 infer_calls=279526 feedback_calls=279526 infer_wait=1558.812s infer_obs_pack=32.734s env_step=186.889s feedback_total=144.519s feedback_obs_pack=37.004s feedback_info_pack=6.184s effective_fps=145.36 +2026-09-28 18:59:14.312 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=283270 infer_calls=283270 feedback_calls=283270 infer_wait=1581.629s infer_obs_pack=33.259s env_step=189.852s feedback_total=146.822s feedback_obs_pack=37.584s feedback_info_pack=6.289s effective_fps=145.15 +2026-09-28 18:59:44.312 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=287861 infer_calls=287861 feedback_calls=287861 infer_wait=1604.347s infer_obs_pack=33.787s env_step=192.858s feedback_total=149.132s feedback_obs_pack=38.171s feedback_info_pack=6.389s effective_fps=145.38 +2026-09-28 19:00:14.314 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=292774 infer_calls=292774 feedback_calls=292774 infer_wait=1627.660s infer_obs_pack=34.274s env_step=195.568s feedback_total=151.278s feedback_obs_pack=38.717s feedback_info_pack=6.485s effective_fps=145.75 +2026-09-28 19:00:44.316 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=297309 infer_calls=297309 feedback_calls=297309 infer_wait=1651.185s infer_obs_pack=34.727s env_step=198.218s feedback_total=153.335s feedback_obs_pack=39.243s feedback_info_pack=6.579s effective_fps=145.92 +2026-09-28 19:01:14.322 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=301734 infer_calls=301734 feedback_calls=301734 infer_wait=1674.559s infer_obs_pack=35.202s env_step=200.952s feedback_total=155.450s feedback_obs_pack=39.770s feedback_info_pack=6.682s effective_fps=146.04 +2026-09-28 19:01:44.334 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=305566 infer_calls=305566 feedback_calls=305566 infer_wait=1697.073s infer_obs_pack=35.748s env_step=204.083s feedback_total=157.759s feedback_obs_pack=40.409s feedback_info_pack=6.789s effective_fps=145.88 +2026-09-28 19:02:14.339 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=309917 infer_calls=309917 feedback_calls=309917 infer_wait=1720.032s infer_obs_pack=36.233s env_step=206.935s feedback_total=160.035s feedback_obs_pack=40.977s feedback_info_pack=6.897s effective_fps=145.96 +2026-09-28 19:02:44.339 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=314068 infer_calls=314068 feedback_calls=314068 infer_wait=1743.244s infer_obs_pack=36.717s env_step=209.650s feedback_total=162.235s feedback_obs_pack=41.566s feedback_info_pack=7.001s effective_fps=145.95 +2026-09-28 19:03:14.342 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=317691 infer_calls=317691 feedback_calls=317691 infer_wait=1766.453s infer_obs_pack=37.193s env_step=212.518s feedback_total=164.320s feedback_obs_pack=42.113s feedback_info_pack=7.099s effective_fps=145.70 +2026-09-28 19:03:44.345 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=320908 infer_calls=320908 feedback_calls=320908 infer_wait=1789.788s infer_obs_pack=37.710s env_step=215.280s feedback_total=166.390s feedback_obs_pack=42.678s feedback_info_pack=7.184s effective_fps=145.26 +2026-09-28 19:04:14.349 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=325127 infer_calls=325127 feedback_calls=325127 infer_wait=1813.530s infer_obs_pack=38.137s env_step=217.863s feedback_total=168.343s feedback_obs_pack=43.185s feedback_info_pack=7.283s effective_fps=145.28 +2026-09-28 19:04:44.364 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=329409 infer_calls=329409 feedback_calls=329409 infer_wait=1837.492s infer_obs_pack=38.555s env_step=220.349s feedback_total=170.276s feedback_obs_pack=43.691s feedback_info_pack=7.367s effective_fps=145.33 +2026-09-28 19:05:14.366 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=333424 infer_calls=333424 feedback_calls=333424 infer_wait=1861.190s infer_obs_pack=38.996s env_step=222.923s feedback_total=172.259s feedback_obs_pack=44.210s feedback_info_pack=7.456s effective_fps=145.26 +2026-09-28 19:05:44.371 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=337324 infer_calls=337324 feedback_calls=337324 infer_wait=1884.289s infer_obs_pack=39.495s env_step=225.729s feedback_total=174.459s feedback_obs_pack=44.799s feedback_info_pack=7.559s effective_fps=145.15 +2026-09-28 19:06:14.377 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=341228 infer_calls=341228 feedback_calls=341228 infer_wait=1907.473s infer_obs_pack=39.983s env_step=228.442s feedback_total=176.678s feedback_obs_pack=45.388s feedback_info_pack=7.667s effective_fps=145.04 +2026-09-28 19:06:44.380 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=345009 infer_calls=345009 feedback_calls=345009 infer_wait=1931.135s infer_obs_pack=40.437s env_step=230.999s feedback_total=178.731s feedback_obs_pack=45.894s feedback_info_pack=7.759s effective_fps=144.88 +2026-09-28 19:07:14.400 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=348046 infer_calls=348046 feedback_calls=348046 infer_wait=1953.828s infer_obs_pack=40.934s env_step=234.188s feedback_total=180.941s feedback_obs_pack=46.509s feedback_info_pack=7.843s effective_fps=144.42 +2026-09-28 19:07:44.443 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=349866 infer_calls=349866 feedback_calls=349866 infer_wait=1976.701s infer_obs_pack=41.522s env_step=237.153s feedback_total=183.257s feedback_obs_pack=47.196s feedback_info_pack=7.934s effective_fps=143.47 +2026-09-28 19:08:14.453 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=351328 infer_calls=351328 feedback_calls=351328 infer_wait=1998.938s infer_obs_pack=42.130s env_step=240.489s feedback_total=185.641s feedback_obs_pack=47.789s feedback_info_pack=8.012s effective_fps=142.40 +2026-09-28 19:08:44.453 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=352991 infer_calls=352991 feedback_calls=352991 infer_wait=2020.971s infer_obs_pack=42.690s env_step=243.944s feedback_total=188.119s feedback_obs_pack=48.425s feedback_info_pack=8.129s effective_fps=141.44 +2026-09-28 19:09:14.456 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=355730 infer_calls=355730 feedback_calls=355730 infer_wait=2042.009s infer_obs_pack=43.339s env_step=247.823s feedback_total=190.816s feedback_obs_pack=49.120s feedback_info_pack=8.250s effective_fps=140.94 +2026-09-28 19:09:44.464 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=358321 infer_calls=358321 feedback_calls=358321 infer_wait=2063.487s infer_obs_pack=43.942s env_step=251.565s feedback_total=193.299s feedback_obs_pack=49.778s feedback_info_pack=8.353s effective_fps=140.39 +2026-09-28 19:10:14.482 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=360466 infer_calls=360466 feedback_calls=360466 infer_wait=2084.916s infer_obs_pack=44.563s env_step=255.320s feedback_total=195.917s feedback_obs_pack=50.473s feedback_info_pack=8.486s effective_fps=139.68 +2026-09-28 19:10:44.491 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=362028 infer_calls=362028 feedback_calls=362028 infer_wait=2106.760s infer_obs_pack=45.248s env_step=258.899s feedback_total=198.429s feedback_obs_pack=51.220s feedback_info_pack=8.659s effective_fps=138.74 +2026-09-28 19:11:14.493 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=363952 infer_calls=363952 feedback_calls=363952 infer_wait=2129.084s infer_obs_pack=45.828s env_step=262.113s feedback_total=200.866s feedback_obs_pack=51.815s feedback_info_pack=8.740s effective_fps=137.97 +2026-09-28 19:11:44.498 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=366869 infer_calls=366869 feedback_calls=366869 infer_wait=2152.123s infer_obs_pack=46.313s env_step=265.075s feedback_total=203.008s feedback_obs_pack=52.389s feedback_info_pack=8.834s effective_fps=137.58 +2026-09-28 19:12:14.500 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=370361 infer_calls=370361 feedback_calls=370361 infer_wait=2175.262s infer_obs_pack=46.811s env_step=267.893s feedback_total=205.169s feedback_obs_pack=52.960s feedback_info_pack=8.916s effective_fps=137.42 +2026-09-28 19:12:44.507 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=373522 infer_calls=373522 feedback_calls=373522 infer_wait=2198.868s infer_obs_pack=47.248s env_step=270.600s feedback_total=207.145s feedback_obs_pack=53.497s feedback_info_pack=9.007s effective_fps=137.13 +2026-09-28 19:13:14.510 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=376121 infer_calls=376121 feedback_calls=376121 infer_wait=2221.041s infer_obs_pack=47.802s env_step=273.975s feedback_total=209.513s feedback_obs_pack=54.124s feedback_info_pack=9.140s effective_fps=136.66 +2026-09-28 19:13:44.509 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=379327 infer_calls=379327 feedback_calls=379327 infer_wait=2243.628s infer_obs_pack=48.354s env_step=277.051s feedback_total=211.883s feedback_obs_pack=54.721s feedback_info_pack=9.245s effective_fps=136.40 +2026-09-28 19:14:14.511 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=382064 infer_calls=382064 feedback_calls=382064 infer_wait=2265.791s infer_obs_pack=48.870s env_step=280.423s feedback_total=214.345s feedback_obs_pack=55.345s feedback_info_pack=9.353s effective_fps=135.99 +2026-09-28 19:14:44.513 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=384811 infer_calls=384811 feedback_calls=384811 infer_wait=2287.340s infer_obs_pack=49.492s env_step=284.038s feedback_total=216.947s feedback_obs_pack=56.076s feedback_info_pack=9.480s effective_fps=135.60 +2026-09-28 19:15:14.523 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=388317 infer_calls=388317 feedback_calls=388317 infer_wait=2310.703s infer_obs_pack=49.919s env_step=286.872s feedback_total=219.017s feedback_obs_pack=56.589s feedback_info_pack=9.582s effective_fps=135.47 +2026-09-28 19:15:44.525 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=390962 infer_calls=390962 feedback_calls=390962 infer_wait=2334.005s infer_obs_pack=50.406s env_step=289.733s feedback_total=221.071s feedback_obs_pack=57.104s feedback_info_pack=9.676s effective_fps=135.04 +2026-09-28 19:16:14.528 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=395630 infer_calls=395630 feedback_calls=395630 infer_wait=2357.945s infer_obs_pack=50.841s env_step=292.161s feedback_total=223.040s feedback_obs_pack=57.595s feedback_info_pack=9.763s effective_fps=135.31 +2026-09-28 19:16:44.528 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=399959 infer_calls=399959 feedback_calls=399959 infer_wait=2381.212s infer_obs_pack=51.325s env_step=294.940s feedback_total=225.131s feedback_obs_pack=58.146s feedback_info_pack=9.852s effective_fps=135.46 +2026-09-28 19:17:14.534 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=404354 infer_calls=404354 feedback_calls=404354 infer_wait=2404.921s infer_obs_pack=51.766s env_step=297.567s feedback_total=227.111s feedback_obs_pack=58.685s feedback_info_pack=9.938s effective_fps=135.63 +2026-09-28 19:17:44.538 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=406876 infer_calls=406876 feedback_calls=406876 infer_wait=2427.832s infer_obs_pack=52.291s env_step=300.678s feedback_total=229.283s feedback_obs_pack=59.225s feedback_info_pack=10.024s effective_fps=135.17 +2026-09-28 19:18:07.712 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=2444.007s infer_obs_pack=52.693s env_step=302.855s feedback_total=230.878s feedback_obs_pack=59.617s feedback_info_pack=10.088s effective_fps=135.16 +2026-09-28 19:18:07.713 | INFO  | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed3.json b/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed3.json new file mode 100644 index 0000000..ec84d71 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed3.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-cross-seed3", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 2096.526611328125, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 2448.1576471005683, + "infer_obs_pack_s": 52.213102603913285, + "env_step_s": 298.774276682816, + "feedback_s": 230.9675520976598, + "feedback_obs_pack_s": 60.16772568714805, + "feedback_info_pack_s": 9.080838402092922, + "collect_time_s": 3030.1125784849573, + "effective_fps": 135.17682574183388, + "infer_wait_frac": 0.807942802021117, + "infer_obs_pack_frac": 0.01723140683770225, + "env_step_frac": 0.09860170833395299, + "feedback_frac": 0.07622408280722776 + } +} diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed4.json b/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed4.json new file mode 100644 index 0000000..52ded14 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed4.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-cross-seed4", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 1432.5323486328125, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 2481.450054302579, + "infer_obs_pack_s": 52.35691609972855, + "env_step_s": 300.70661359018413, + "feedback_s": 232.6325633918459, + "feedback_obs_pack_s": 60.447664595471, + "feedback_info_pack_s": 10.552917202177923, + "collect_time_s": 3067.1461473843374, + "effective_fps": 133.54466344856368, + "infer_wait_frac": 0.8090420003033634, + "infer_obs_pack_frac": 0.01707023845093868, + "env_step_frac": 0.09804117545772208, + "feedback_frac": 0.0758465857879759 + } +} diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed5.json b/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed5.json new file mode 100644 index 0000000..bdc4e49 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client-summary-seed5.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-cross-seed5", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 1246.04248046875, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 2444.0065643891867, + "infer_obs_pack_s": 52.69297790527344, + "env_step_s": 302.8548518976313, + "feedback_s": 230.87841510627186, + "feedback_obs_pack_s": 59.61658298198017, + "feedback_info_pack_s": 10.087548698007595, + "collect_time_s": 3030.4328092983633, + "effective_fps": 135.16254138458692, + "infer_wait_frac": 0.8064876267476289, + "infer_obs_pack_frac": 0.01738793803432766, + "env_step_frac": 0.09993782108231311, + "feedback_frac": 0.0761866141357304 + } +} diff --git a/experiments/e43-cross-machine-training/results/cross-clients-b/client_side.out b/experiments/e43-cross-machine-training/results/cross-clients-b/client_side.out new file mode 100644 index 0000000..0c33fab --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients-b/client_side.out @@ -0,0 +1,9 @@ +client: C:/Users/75128/.claude/jobs/1fea619d/tmp/e43/client/.venv/Scripts/python.exe +server: 100.75.226.89 ports 9790+seed +out: D:/75128/Desktop/plugrl-work/plugrl-server/.claude/worktrees/fix-pi0-image-mask-batching/experiments/e43-cross-machine-training/results/cross-clients-b +start 2026-09-28 18:24:59 +seed 3 client rc=0 at 19:17:59 +seed 5 client rc=0 at 19:18:08 +seed 4 client rc=0 at 19:18:41 +end 2026-09-28 19:18:41 +CLIENTS_DONE diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client-seed0.log b/experiments/e43-cross-machine-training/results/cross-clients/client-seed0.log new file mode 100644 index 0000000..8c400a7 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client-seed0.log @@ -0,0 +1,94 @@ +2026-09-28 17:38:50.627 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 17:38:50.631 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 17:38:50.635 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 17:38:50.641 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 17:38:50.648 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 17:38:50.870 | INFO  | __main__:main:83 - Starting env client exp_name=e43-cross-seed0 output_dir=runs\e43-cross-seed0 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 17:38:51.727 | INFO  | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://100.75.226.89:9790... +2026-09-28 17:38:51.796 | INFO  | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 17:39:21.804 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=689 infer_calls=689 feedback_calls=689 infer_wait=28.929s infer_obs_pack=0.086s env_step=0.419s feedback_total=0.349s feedback_obs_pack=0.084s feedback_info_pack=0.012s effective_fps=23.13 +2026-09-28 17:39:51.817 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=2830 infer_calls=2830 feedback_calls=2830 infer_wait=54.283s infer_obs_pack=0.494s env_step=2.344s feedback_total=1.757s feedback_obs_pack=0.467s feedback_info_pack=0.059s effective_fps=48.07 +2026-09-28 17:40:21.821 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=7578 infer_calls=7578 feedback_calls=7578 infer_wait=77.488s infer_obs_pack=0.990s env_step=5.112s feedback_total=3.927s feedback_obs_pack=1.028s feedback_info_pack=0.147s effective_fps=86.59 +2026-09-28 17:40:51.822 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=12124 infer_calls=12124 feedback_calls=12124 infer_wait=100.872s infer_obs_pack=1.463s env_step=7.772s feedback_total=6.074s feedback_obs_pack=1.591s feedback_info_pack=0.228s effective_fps=104.35 +2026-09-28 17:41:21.823 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=16606 infer_calls=16606 feedback_calls=16606 infer_wait=124.542s infer_obs_pack=1.957s env_step=10.319s feedback_total=8.080s feedback_obs_pack=2.114s feedback_info_pack=0.306s effective_fps=114.60 +2026-09-28 17:41:51.826 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=21357 infer_calls=21357 feedback_calls=21357 infer_wait=148.961s infer_obs_pack=2.361s env_step=12.540s feedback_total=9.913s feedback_obs_pack=2.576s feedback_info_pack=0.378s effective_fps=122.90 +2026-09-28 17:42:21.827 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=26484 infer_calls=26484 feedback_calls=26484 infer_wait=172.915s infer_obs_pack=2.806s env_step=14.934s feedback_total=11.896s feedback_obs_pack=3.083s feedback_info_pack=0.457s effective_fps=130.75 +2026-09-28 17:42:51.832 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=31441 infer_calls=31441 feedback_calls=31441 infer_wait=196.511s infer_obs_pack=3.278s env_step=17.494s feedback_total=13.990s feedback_obs_pack=3.637s feedback_info_pack=0.540s effective_fps=135.95 +2026-09-28 17:43:21.855 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=36384 infer_calls=36384 feedback_calls=36384 infer_wait=220.189s infer_obs_pack=3.731s env_step=20.044s feedback_total=16.074s feedback_obs_pack=4.178s feedback_info_pack=0.621s effective_fps=139.92 +2026-09-28 17:43:52.632 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=40962 infer_calls=40962 feedback_calls=40962 infer_wait=244.789s infer_obs_pack=4.177s env_step=22.523s feedback_total=18.045s feedback_obs_pack=4.674s feedback_info_pack=0.697s effective_fps=141.48 +2026-09-28 17:44:22.633 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=45949 infer_calls=45949 feedback_calls=45949 infer_wait=267.824s infer_obs_pack=4.672s env_step=25.355s feedback_total=20.282s feedback_obs_pack=5.246s feedback_info_pack=0.787s effective_fps=144.43 +2026-09-28 17:44:52.633 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=50826 infer_calls=50826 feedback_calls=50826 infer_wait=291.394s infer_obs_pack=5.129s env_step=27.931s feedback_total=22.374s feedback_obs_pack=5.776s feedback_info_pack=0.874s effective_fps=146.55 +2026-09-28 17:45:22.634 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=55890 infer_calls=55890 feedback_calls=55890 infer_wait=315.347s infer_obs_pack=5.562s env_step=30.372s feedback_total=24.345s feedback_obs_pack=6.280s feedback_info_pack=0.953s effective_fps=148.79 +2026-09-28 17:45:52.637 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=60777 infer_calls=60777 feedback_calls=60777 infer_wait=339.124s infer_obs_pack=6.019s env_step=32.905s feedback_total=26.329s feedback_obs_pack=6.792s feedback_info_pack=1.036s effective_fps=150.30 +2026-09-28 17:46:24.269 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=65538 infer_calls=65538 feedback_calls=65538 infer_wait=364.176s infer_obs_pack=6.483s env_step=35.581s feedback_total=28.431s feedback_obs_pack=7.322s feedback_info_pack=1.118s effective_fps=150.78 +2026-09-28 17:46:54.275 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=70188 infer_calls=70188 feedback_calls=70188 infer_wait=387.684s infer_obs_pack=6.952s env_step=38.236s feedback_total=30.528s feedback_obs_pack=7.859s feedback_info_pack=1.204s effective_fps=151.46 +2026-09-28 17:47:24.276 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=74829 infer_calls=74829 feedback_calls=74829 infer_wait=411.367s infer_obs_pack=7.411s env_step=40.807s feedback_total=32.561s feedback_obs_pack=8.371s feedback_info_pack=1.286s effective_fps=152.05 +2026-09-28 17:47:54.280 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=79866 infer_calls=79866 feedback_calls=79866 infer_wait=434.762s infer_obs_pack=7.878s env_step=43.506s feedback_total=34.675s feedback_obs_pack=8.917s feedback_info_pack=1.371s effective_fps=153.35 +2026-09-28 17:48:24.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=84723 infer_calls=84723 feedback_calls=84723 infer_wait=459.319s infer_obs_pack=8.278s env_step=45.682s feedback_total=36.494s feedback_obs_pack=9.395s feedback_info_pack=1.453s effective_fps=154.11 +2026-09-28 17:48:54.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=89740 infer_calls=89740 feedback_calls=89740 infer_wait=483.379s infer_obs_pack=8.698s env_step=48.111s feedback_total=38.411s feedback_obs_pack=9.885s feedback_info_pack=1.531s effective_fps=155.10 +2026-09-28 17:49:24.285 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=94512 infer_calls=94512 feedback_calls=94512 infer_wait=507.574s infer_obs_pack=9.110s env_step=50.495s feedback_total=40.276s feedback_obs_pack=10.356s feedback_info_pack=1.605s effective_fps=155.59 +2026-09-28 17:49:54.292 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=99323 infer_calls=99323 feedback_calls=99323 infer_wait=532.137s infer_obs_pack=9.491s env_step=52.712s feedback_total=42.062s feedback_obs_pack=10.804s feedback_info_pack=1.676s effective_fps=156.07 +2026-09-28 17:50:24.293 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=104694 infer_calls=104694 feedback_calls=104694 infer_wait=556.124s infer_obs_pack=9.921s env_step=55.139s feedback_total=44.021s feedback_obs_pack=11.297s feedback_info_pack=1.753s effective_fps=157.39 +2026-09-28 17:50:54.299 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=109729 infer_calls=109729 feedback_calls=109729 infer_wait=579.866s infer_obs_pack=10.372s env_step=57.706s feedback_total=46.026s feedback_obs_pack=11.805s feedback_info_pack=1.835s effective_fps=158.12 +2026-09-28 17:51:24.534 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=114690 infer_calls=114690 feedback_calls=114690 infer_wait=604.791s infer_obs_pack=10.762s env_step=59.847s feedback_total=47.770s feedback_obs_pack=12.248s feedback_info_pack=1.907s effective_fps=158.59 +2026-09-28 17:51:54.537 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=119604 infer_calls=119604 feedback_calls=119604 infer_wait=629.591s infer_obs_pack=11.133s env_step=61.940s feedback_total=49.484s feedback_obs_pack=12.684s feedback_info_pack=1.976s effective_fps=159.02 +2026-09-28 17:52:24.543 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=123806 infer_calls=123806 feedback_calls=123806 infer_wait=653.793s infer_obs_pack=11.537s env_step=64.292s feedback_total=51.379s feedback_obs_pack=13.169s feedback_info_pack=2.053s effective_fps=158.52 +2026-09-28 17:52:54.543 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=128925 infer_calls=128925 feedback_calls=128925 infer_wait=677.753s infer_obs_pack=11.973s env_step=66.747s feedback_total=53.319s feedback_obs_pack=13.660s feedback_info_pack=2.130s effective_fps=159.21 +2026-09-28 17:53:24.550 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=133720 infer_calls=133720 feedback_calls=133720 infer_wait=702.270s infer_obs_pack=12.356s env_step=68.995s feedback_total=55.091s feedback_obs_pack=14.112s feedback_info_pack=2.199s effective_fps=159.44 +2026-09-28 17:53:54.552 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=138458 infer_calls=138458 feedback_calls=138458 infer_wait=725.254s infer_obs_pack=12.871s env_step=71.854s feedback_total=57.351s feedback_obs_pack=14.703s feedback_info_pack=2.287s effective_fps=159.64 +2026-09-28 17:54:24.554 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=143351 infer_calls=143351 feedback_calls=143351 infer_wait=749.352s infer_obs_pack=13.291s env_step=74.224s feedback_total=59.306s feedback_obs_pack=15.201s feedback_info_pack=2.361s effective_fps=159.96 +2026-09-28 17:54:54.556 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=148141 infer_calls=148141 feedback_calls=148141 infer_wait=773.686s infer_obs_pack=13.698s env_step=76.495s feedback_total=61.163s feedback_obs_pack=15.672s feedback_info_pack=2.437s effective_fps=160.15 +2026-09-28 17:55:24.562 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=153375 infer_calls=153375 feedback_calls=153375 infer_wait=797.705s infer_obs_pack=14.150s env_step=78.873s feedback_total=63.139s feedback_obs_pack=16.174s feedback_info_pack=2.522s effective_fps=160.79 +2026-09-28 17:55:54.565 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=158173 infer_calls=158173 feedback_calls=158173 infer_wait=821.434s infer_obs_pack=14.584s env_step=81.386s feedback_total=65.191s feedback_obs_pack=16.710s feedback_info_pack=2.606s effective_fps=160.97 +2026-09-28 17:56:24.568 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=162655 infer_calls=162655 feedback_calls=162655 infer_wait=845.019s infer_obs_pack=15.041s env_step=84.015s feedback_total=67.252s feedback_obs_pack=17.251s feedback_info_pack=2.689s effective_fps=160.83 +2026-09-28 17:56:54.568 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=166761 infer_calls=166761 feedback_calls=166761 infer_wait=868.540s infer_obs_pack=15.482s env_step=86.746s feedback_total=69.329s feedback_obs_pack=17.776s feedback_info_pack=2.769s effective_fps=160.33 +2026-09-28 17:57:24.572 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=171483 infer_calls=171483 feedback_calls=171483 infer_wait=892.447s infer_obs_pack=15.924s env_step=89.203s feedback_total=71.310s feedback_obs_pack=18.271s feedback_info_pack=2.850s effective_fps=160.43 +2026-09-28 17:57:56.087 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=176130 infer_calls=176130 feedback_calls=176130 infer_wait=917.704s infer_obs_pack=16.397s env_step=91.684s feedback_total=73.353s feedback_obs_pack=18.792s feedback_info_pack=2.931s effective_fps=160.24 +2026-09-28 17:58:26.090 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=180901 infer_calls=180901 feedback_calls=180901 infer_wait=941.122s infer_obs_pack=16.885s env_step=94.325s feedback_total=75.482s feedback_obs_pack=19.338s feedback_info_pack=3.016s effective_fps=160.40 +2026-09-28 17:58:56.094 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=186025 infer_calls=186025 feedback_calls=186025 infer_wait=965.361s infer_obs_pack=17.308s env_step=96.590s feedback_total=77.409s feedback_obs_pack=19.837s feedback_info_pack=3.099s effective_fps=160.83 +2026-09-28 17:59:26.095 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=191385 infer_calls=191385 feedback_calls=191385 infer_wait=989.353s infer_obs_pack=17.744s env_step=98.985s feedback_total=79.399s feedback_obs_pack=20.339s feedback_info_pack=3.178s effective_fps=161.44 +2026-09-28 17:59:57.243 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=196610 infer_calls=196610 feedback_calls=196610 infer_wait=1014.691s infer_obs_pack=18.169s env_step=101.302s feedback_total=81.310s feedback_obs_pack=20.828s feedback_info_pack=3.255s effective_fps=161.76 +2026-09-28 18:00:27.245 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=202110 infer_calls=202110 feedback_calls=202110 infer_wait=1039.027s infer_obs_pack=18.589s env_step=103.550s feedback_total=83.190s feedback_obs_pack=21.310s feedback_info_pack=3.332s effective_fps=162.42 +2026-09-28 18:00:57.245 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=207686 infer_calls=207686 feedback_calls=207686 infer_wait=1063.233s infer_obs_pack=19.012s env_step=105.845s feedback_total=85.125s feedback_obs_pack=21.806s feedback_info_pack=3.409s effective_fps=163.12 +2026-09-28 18:01:27.529 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=212994 infer_calls=212994 feedback_calls=212994 infer_wait=1088.071s infer_obs_pack=19.417s env_step=107.980s feedback_total=86.953s feedback_obs_pack=22.271s feedback_info_pack=3.482s effective_fps=163.54 +2026-09-28 18:01:57.528 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=218140 infer_calls=218140 feedback_calls=218140 infer_wait=1112.722s infer_obs_pack=19.817s env_step=110.081s feedback_total=88.741s feedback_obs_pack=22.729s feedback_info_pack=3.557s effective_fps=163.85 +2026-09-28 18:02:27.534 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=223743 infer_calls=223743 feedback_calls=223743 infer_wait=1136.786s infer_obs_pack=20.265s env_step=112.400s feedback_total=90.737s feedback_obs_pack=23.234s feedback_info_pack=3.638s effective_fps=164.49 +2026-09-28 18:02:57.539 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=228785 infer_calls=228785 feedback_calls=228785 infer_wait=1160.941s infer_obs_pack=20.695s env_step=114.716s feedback_total=92.678s feedback_obs_pack=23.729s feedback_info_pack=3.718s effective_fps=164.71 +2026-09-28 18:03:27.544 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=233513 infer_calls=233513 feedback_calls=233513 infer_wait=1185.111s infer_obs_pack=21.109s env_step=117.053s feedback_total=94.601s feedback_obs_pack=24.209s feedback_info_pack=3.793s effective_fps=164.69 +2026-09-28 18:03:57.545 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=239007 infer_calls=239007 feedback_calls=239007 infer_wait=1209.112s infer_obs_pack=21.548s env_step=119.408s feedback_total=96.616s feedback_obs_pack=24.723s feedback_info_pack=3.874s effective_fps=165.21 +2026-09-28 18:04:27.545 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=244683 infer_calls=244683 feedback_calls=244683 infer_wait=1233.271s infer_obs_pack=21.983s env_step=121.692s feedback_total=98.577s feedback_obs_pack=25.229s feedback_info_pack=3.954s effective_fps=165.83 +2026-09-28 18:04:57.546 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=249877 infer_calls=249877 feedback_calls=249877 infer_wait=1257.765s infer_obs_pack=22.388s env_step=123.871s feedback_total=100.412s feedback_obs_pack=25.699s feedback_info_pack=4.030s effective_fps=166.09 +2026-09-28 18:05:27.550 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=255311 infer_calls=255311 feedback_calls=255311 infer_wait=1281.718s infer_obs_pack=22.837s env_step=126.253s feedback_total=102.416s feedback_obs_pack=26.211s feedback_info_pack=4.111s effective_fps=166.52 +2026-09-28 18:05:57.550 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=260599 infer_calls=260599 feedback_calls=260599 infer_wait=1305.739s infer_obs_pack=23.275s env_step=128.616s feedback_total=104.393s feedback_obs_pack=26.719s feedback_info_pack=4.190s effective_fps=166.83 +2026-09-28 18:06:27.550 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=265136 infer_calls=265136 feedback_calls=265136 infer_wait=1329.146s infer_obs_pack=23.756s env_step=131.286s feedback_total=106.528s feedback_obs_pack=27.292s feedback_info_pack=4.276s effective_fps=166.68 +2026-09-28 18:06:57.553 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=269647 infer_calls=269647 feedback_calls=269647 infer_wait=1352.840s infer_obs_pack=24.223s env_step=133.838s feedback_total=108.549s feedback_obs_pack=27.820s feedback_info_pack=4.353s effective_fps=166.51 +2026-09-28 18:07:27.554 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=274563 infer_calls=274563 feedback_calls=274563 infer_wait=1377.123s infer_obs_pack=24.641s env_step=136.102s feedback_total=110.437s feedback_obs_pack=28.306s feedback_info_pack=4.429s effective_fps=166.57 +2026-09-28 18:07:57.556 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=279072 infer_calls=279072 feedback_calls=279072 infer_wait=1400.551s infer_obs_pack=25.143s env_step=138.678s feedback_total=112.641s feedback_obs_pack=28.899s feedback_info_pack=4.519s effective_fps=166.41 +2026-09-28 18:08:28.258 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=282626 infer_calls=282626 feedback_calls=282626 infer_wait=1424.318s infer_obs_pack=25.653s env_step=141.522s feedback_total=114.897s feedback_obs_pack=29.408s feedback_info_pack=4.619s effective_fps=165.63 +2026-09-28 18:08:58.259 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=287380 infer_calls=287380 feedback_calls=287380 infer_wait=1447.773s infer_obs_pack=26.142s env_step=144.146s feedback_total=117.017s feedback_obs_pack=29.951s feedback_info_pack=4.710s effective_fps=165.63 +2026-09-28 18:09:28.268 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=292048 infer_calls=292048 feedback_calls=292048 infer_wait=1471.090s infer_obs_pack=26.635s env_step=146.846s feedback_total=119.167s feedback_obs_pack=30.528s feedback_info_pack=4.795s effective_fps=165.58 +2026-09-28 18:09:58.270 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=296651 infer_calls=296651 feedback_calls=296651 infer_wait=1494.572s infer_obs_pack=27.090s env_step=149.435s feedback_total=121.310s feedback_obs_pack=31.073s feedback_info_pack=4.875s effective_fps=165.50 +2026-09-28 18:10:28.274 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=301679 infer_calls=301679 feedback_calls=301679 infer_wait=1518.087s infer_obs_pack=27.567s env_step=152.035s feedback_total=123.404s feedback_obs_pack=31.624s feedback_info_pack=4.964s effective_fps=165.66 +2026-09-28 18:10:58.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=306498 infer_calls=306498 feedback_calls=306498 infer_wait=1541.432s infer_obs_pack=28.056s env_step=154.697s feedback_total=125.544s feedback_obs_pack=32.175s feedback_info_pack=5.056s effective_fps=165.70 +2026-09-28 18:11:29.276 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=311298 infer_calls=311298 feedback_calls=311298 infer_wait=1565.869s infer_obs_pack=28.555s env_step=157.279s feedback_total=127.677s feedback_obs_pack=32.723s feedback_info_pack=5.148s effective_fps=165.64 +2026-09-28 18:11:59.277 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=315868 infer_calls=315868 feedback_calls=315868 infer_wait=1589.483s infer_obs_pack=29.014s env_step=159.844s feedback_total=129.716s feedback_obs_pack=33.243s feedback_info_pack=5.226s effective_fps=165.54 +2026-09-28 18:12:29.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=320355 infer_calls=320355 feedback_calls=320355 infer_wait=1613.339s infer_obs_pack=29.486s env_step=162.254s feedback_total=131.722s feedback_obs_pack=33.764s feedback_info_pack=5.308s effective_fps=165.40 +2026-09-28 18:12:59.287 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=325080 infer_calls=325080 feedback_calls=325080 infer_wait=1637.729s infer_obs_pack=29.885s env_step=164.528s feedback_total=133.549s feedback_obs_pack=34.235s feedback_info_pack=5.381s effective_fps=165.38 +2026-09-28 18:13:29.293 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=330171 infer_calls=330171 feedback_calls=330171 infer_wait=1661.835s infer_obs_pack=30.303s env_step=166.907s feedback_total=135.471s feedback_obs_pack=34.733s feedback_info_pack=5.460s effective_fps=165.54 +2026-09-28 18:13:59.296 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=335372 infer_calls=335372 feedback_calls=335372 infer_wait=1685.873s infer_obs_pack=30.747s env_step=169.241s feedback_total=137.457s feedback_obs_pack=35.243s feedback_info_pack=5.543s effective_fps=165.75 +2026-09-28 18:14:29.298 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=340016 infer_calls=340016 feedback_calls=340016 infer_wait=1709.714s infer_obs_pack=31.219s env_step=171.678s feedback_total=139.463s feedback_obs_pack=35.766s feedback_info_pack=5.625s effective_fps=165.69 +2026-09-28 18:14:59.300 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=345167 infer_calls=345167 feedback_calls=345167 infer_wait=1733.513s infer_obs_pack=31.678s env_step=174.133s feedback_total=141.505s feedback_obs_pack=36.289s feedback_info_pack=5.708s effective_fps=165.88 +2026-09-28 18:15:29.301 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=350531 infer_calls=350531 feedback_calls=350531 infer_wait=1757.727s infer_obs_pack=32.107s env_step=176.387s feedback_total=143.454s feedback_obs_pack=36.786s feedback_info_pack=5.787s effective_fps=166.15 +2026-09-28 18:15:59.310 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=355978 infer_calls=355978 feedback_calls=355978 infer_wait=1782.033s infer_obs_pack=32.534s env_step=178.624s feedback_total=145.354s feedback_obs_pack=37.268s feedback_info_pack=5.867s effective_fps=166.46 +2026-09-28 18:16:29.310 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=360975 infer_calls=360975 feedback_calls=360975 infer_wait=1806.888s infer_obs_pack=32.920s env_step=180.650s feedback_total=147.076s feedback_obs_pack=37.710s feedback_info_pack=5.936s effective_fps=166.54 +2026-09-28 18:16:59.313 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=366355 infer_calls=366355 feedback_calls=366355 infer_wait=1831.333s infer_obs_pack=33.335s env_step=182.839s feedback_total=148.928s feedback_obs_pack=38.185s feedback_info_pack=6.012s effective_fps=166.80 +2026-09-28 18:17:29.317 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=371052 infer_calls=371052 feedback_calls=371052 infer_wait=1855.127s infer_obs_pack=33.797s env_step=185.273s feedback_total=150.929s feedback_obs_pack=38.701s feedback_info_pack=6.093s effective_fps=166.76 +2026-09-28 18:17:59.318 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=376482 infer_calls=376482 feedback_calls=376482 infer_wait=1879.468s infer_obs_pack=34.216s env_step=187.490s feedback_total=152.827s feedback_obs_pack=39.186s feedback_info_pack=6.170s effective_fps=167.03 +2026-09-28 18:18:29.322 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=381563 infer_calls=381563 feedback_calls=381563 infer_wait=1903.892s infer_obs_pack=34.632s env_step=189.674s feedback_total=154.698s feedback_obs_pack=39.665s feedback_info_pack=6.245s effective_fps=167.14 +2026-09-28 18:18:59.326 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=386788 infer_calls=386788 feedback_calls=386788 infer_wait=1927.250s infer_obs_pack=35.149s env_step=192.305s feedback_total=156.881s feedback_obs_pack=40.230s feedback_info_pack=6.332s effective_fps=167.33 +2026-09-28 18:19:29.330 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=392102 infer_calls=392102 feedback_calls=392102 infer_wait=1951.354s infer_obs_pack=35.585s env_step=194.614s feedback_total=158.851s feedback_obs_pack=40.728s feedback_info_pack=6.412s effective_fps=167.54 +2026-09-28 18:20:00.737 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=397314 infer_calls=397314 feedback_calls=397314 infer_wait=1976.717s infer_obs_pack=36.028s env_step=196.989s feedback_total=160.854s feedback_obs_pack=41.241s feedback_info_pack=6.492s effective_fps=167.60 +2026-09-28 18:20:30.740 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=401918 infer_calls=401918 feedback_calls=401918 infer_wait=2000.269s infer_obs_pack=36.500s env_step=199.583s feedback_total=162.938s feedback_obs_pack=41.776s feedback_info_pack=6.574s effective_fps=167.52 +2026-09-28 18:21:00.741 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=406984 infer_calls=406984 feedback_calls=406984 infer_wait=2023.727s infer_obs_pack=36.972s env_step=202.190s feedback_total=165.089s feedback_obs_pack=42.320s feedback_info_pack=6.659s effective_fps=167.62 +2026-09-28 18:21:16.420 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=2034.719s infer_obs_pack=37.188s env_step=203.391s feedback_total=166.086s feedback_obs_pack=42.576s feedback_info_pack=6.699s effective_fps=167.77 +2026-09-28 18:21:16.422 | INFO  | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client-seed1.log b/experiments/e43-cross-machine-training/results/cross-clients/client-seed1.log new file mode 100644 index 0000000..0331aab --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client-seed1.log @@ -0,0 +1,94 @@ +2026-09-28 17:38:54.806 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 17:38:54.808 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 17:38:54.810 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 17:38:54.814 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 17:38:54.819 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 17:38:54.991 | INFO  | __main__:main:83 - Starting env client exp_name=e43-cross-seed1 output_dir=runs\e43-cross-seed1 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 17:38:55.173 | INFO  | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://100.75.226.89:9791... +2026-09-28 17:38:55.254 | INFO  | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 17:39:25.275 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=720 infer_calls=720 feedback_calls=720 infer_wait=28.870s infer_obs_pack=0.074s env_step=0.465s feedback_total=0.395s feedback_obs_pack=0.091s feedback_info_pack=0.025s effective_fps=24.16 +2026-09-28 17:39:55.278 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=3403 infer_calls=3403 feedback_calls=3403 infer_wait=53.853s infer_obs_pack=0.423s env_step=2.466s feedback_total=2.062s feedback_obs_pack=0.508s feedback_info_pack=0.105s effective_fps=57.87 +2026-09-28 17:40:25.280 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=8086 infer_calls=8086 feedback_calls=8086 infer_wait=76.883s infer_obs_pack=0.937s env_step=5.308s feedback_total=4.267s feedback_obs_pack=1.068s feedback_info_pack=0.195s effective_fps=92.52 +2026-09-28 17:40:55.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=12441 infer_calls=12441 feedback_calls=12441 infer_wait=100.712s infer_obs_pack=1.393s env_step=7.754s feedback_total=6.294s feedback_obs_pack=1.595s feedback_info_pack=0.275s effective_fps=107.11 +2026-09-28 17:41:25.282 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=17246 infer_calls=17246 feedback_calls=17246 infer_wait=124.048s infer_obs_pack=1.947s env_step=10.411s feedback_total=8.399s feedback_obs_pack=2.143s feedback_info_pack=0.359s effective_fps=119.10 +2026-09-28 17:41:55.286 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=22031 infer_calls=22031 feedback_calls=22031 infer_wait=148.479s infer_obs_pack=2.354s env_step=12.621s feedback_total=10.241s feedback_obs_pack=2.617s feedback_info_pack=0.432s effective_fps=126.84 +2026-09-28 17:42:25.287 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=27081 infer_calls=27081 feedback_calls=27081 infer_wait=172.120s infer_obs_pack=2.829s env_step=15.166s feedback_total=12.313s feedback_obs_pack=3.147s feedback_info_pack=0.515s effective_fps=133.78 +2026-09-28 17:42:55.289 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=32093 infer_calls=32093 feedback_calls=32093 infer_wait=195.953s infer_obs_pack=3.292s env_step=17.654s feedback_total=14.308s feedback_obs_pack=3.657s feedback_info_pack=0.597s effective_fps=138.81 +2026-09-28 17:43:25.293 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=36797 infer_calls=36797 feedback_calls=36797 infer_wait=219.580s infer_obs_pack=3.790s env_step=20.252s feedback_total=16.336s feedback_obs_pack=4.167s feedback_info_pack=0.676s effective_fps=141.55 +2026-09-28 17:43:55.295 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41472 infer_calls=41472 feedback_calls=41472 infer_wait=243.343s infer_obs_pack=4.233s env_step=22.813s feedback_total=18.330s feedback_obs_pack=4.678s feedback_info_pack=0.755s effective_fps=143.64 +2026-09-28 17:44:25.301 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=46493 infer_calls=46493 feedback_calls=46493 infer_wait=266.337s infer_obs_pack=4.729s env_step=25.715s feedback_total=20.549s feedback_obs_pack=5.239s feedback_info_pack=0.844s effective_fps=146.51 +2026-09-28 17:44:55.310 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=51263 infer_calls=51263 feedback_calls=51263 infer_wait=289.825s infer_obs_pack=5.194s env_step=28.387s feedback_total=22.636s feedback_obs_pack=5.770s feedback_info_pack=0.924s effective_fps=148.14 +2026-09-28 17:45:25.311 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=56464 infer_calls=56464 feedback_calls=56464 infer_wait=313.828s infer_obs_pack=5.615s env_step=30.821s feedback_total=24.579s feedback_obs_pack=6.265s feedback_info_pack=1.001s effective_fps=150.63 +2026-09-28 17:45:55.316 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=61312 infer_calls=61312 feedback_calls=61312 infer_wait=337.446s infer_obs_pack=6.064s env_step=33.433s feedback_total=26.626s feedback_obs_pack=6.804s feedback_info_pack=1.083s effective_fps=151.92 +2026-09-28 17:46:25.318 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=65770 infer_calls=65770 feedback_calls=65770 infer_wait=361.281s infer_obs_pack=6.503s env_step=35.963s feedback_total=28.593s feedback_obs_pack=7.314s feedback_info_pack=1.173s effective_fps=152.13 +2026-09-28 17:46:55.322 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=70428 infer_calls=70428 feedback_calls=70428 infer_wait=384.797s infer_obs_pack=6.974s env_step=38.609s feedback_total=30.665s feedback_obs_pack=7.844s feedback_info_pack=1.256s effective_fps=152.76 +2026-09-28 17:47:25.326 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=75120 infer_calls=75120 feedback_calls=75120 infer_wait=408.386s infer_obs_pack=7.440s env_step=41.222s feedback_total=32.726s feedback_obs_pack=8.371s feedback_info_pack=1.334s effective_fps=153.38 +2026-09-28 17:47:55.329 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=80127 infer_calls=80127 feedback_calls=80127 infer_wait=431.713s infer_obs_pack=7.907s env_step=43.977s feedback_total=34.846s feedback_obs_pack=8.914s feedback_info_pack=1.417s effective_fps=154.55 +2026-09-28 17:48:25.331 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=85033 infer_calls=85033 feedback_calls=85033 infer_wait=456.190s infer_obs_pack=8.305s env_step=46.216s feedback_total=36.649s feedback_obs_pack=9.369s feedback_info_pack=1.492s effective_fps=155.35 +2026-09-28 17:48:55.337 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=89991 infer_calls=89991 feedback_calls=89991 infer_wait=480.307s infer_obs_pack=8.727s env_step=48.585s feedback_total=38.566s feedback_obs_pack=9.857s feedback_info_pack=1.567s effective_fps=156.18 +2026-09-28 17:49:25.340 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=94799 infer_calls=94799 feedback_calls=94799 infer_wait=504.595s infer_obs_pack=9.144s env_step=50.876s feedback_total=40.435s feedback_obs_pack=10.335s feedback_info_pack=1.640s effective_fps=156.68 +2026-09-28 17:49:55.341 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=99639 infer_calls=99639 feedback_calls=99639 infer_wait=529.227s infer_obs_pack=9.523s env_step=53.023s feedback_total=42.228s feedback_obs_pack=10.779s feedback_info_pack=1.715s effective_fps=157.16 +2026-09-28 17:50:25.342 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=105052 infer_calls=105052 feedback_calls=105052 infer_wait=553.187s infer_obs_pack=9.955s env_step=55.440s feedback_total=44.214s feedback_obs_pack=11.280s feedback_info_pack=1.794s effective_fps=158.50 +2026-09-28 17:50:55.344 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=110078 infer_calls=110078 feedback_calls=110078 infer_wait=576.994s infer_obs_pack=10.432s env_step=57.906s feedback_total=46.226s feedback_obs_pack=11.795s feedback_info_pack=1.874s effective_fps=159.17 +2026-09-28 17:51:25.349 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=114996 infer_calls=114996 feedback_calls=114996 infer_wait=601.737s infer_obs_pack=10.814s env_step=59.992s feedback_total=47.977s feedback_obs_pack=12.237s feedback_info_pack=1.943s effective_fps=159.60 +2026-09-28 17:51:55.352 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=119970 infer_calls=119970 feedback_calls=119970 infer_wait=626.493s infer_obs_pack=11.193s env_step=62.083s feedback_total=49.706s feedback_obs_pack=12.680s feedback_info_pack=2.011s effective_fps=160.07 +2026-09-28 17:52:25.357 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=124195 infer_calls=124195 feedback_calls=124195 infer_wait=650.669s infer_obs_pack=11.611s env_step=64.488s feedback_total=51.584s feedback_obs_pack=13.155s feedback_info_pack=2.081s effective_fps=159.56 +2026-09-28 17:52:55.362 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=129286 infer_calls=129286 feedback_calls=129286 infer_wait=674.629s infer_obs_pack=12.039s env_step=66.934s feedback_total=53.533s feedback_obs_pack=13.651s feedback_info_pack=2.161s effective_fps=160.18 +2026-09-28 17:53:25.361 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=134071 infer_calls=134071 feedback_calls=134071 infer_wait=699.047s infer_obs_pack=12.441s env_step=69.187s feedback_total=55.368s feedback_obs_pack=14.101s feedback_info_pack=2.230s effective_fps=160.36 +2026-09-28 17:53:55.367 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=138916 infer_calls=138916 feedback_calls=138916 infer_wait=722.184s infer_obs_pack=12.929s env_step=71.979s feedback_total=57.575s feedback_obs_pack=14.655s feedback_info_pack=2.316s effective_fps=160.66 +2026-09-28 17:54:25.368 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=143362 infer_calls=143362 feedback_calls=143362 infer_wait=746.849s infer_obs_pack=13.313s env_step=74.074s feedback_total=59.351s feedback_obs_pack=15.110s feedback_info_pack=2.395s effective_fps=160.43 +2026-09-28 17:54:55.371 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=148476 infer_calls=148476 feedback_calls=148476 infer_wait=770.810s infer_obs_pack=13.747s env_step=76.491s feedback_total=61.316s feedback_obs_pack=15.609s feedback_info_pack=2.473s effective_fps=160.97 +2026-09-28 17:55:25.373 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=153740 infer_calls=153740 feedback_calls=153740 infer_wait=794.773s infer_obs_pack=14.191s env_step=78.882s feedback_total=63.309s feedback_obs_pack=16.113s feedback_info_pack=2.553s effective_fps=161.64 +2026-09-28 17:55:55.374 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=158657 infer_calls=158657 feedback_calls=158657 infer_wait=818.428s infer_obs_pack=14.655s env_step=81.440s feedback_total=65.354s feedback_obs_pack=16.653s feedback_info_pack=2.639s effective_fps=161.92 +2026-09-28 17:56:25.377 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163192 infer_calls=163192 feedback_calls=163192 infer_wait=842.032s infer_obs_pack=15.084s env_step=84.031s feedback_total=67.417s feedback_obs_pack=17.173s feedback_info_pack=2.714s effective_fps=161.81 +2026-09-28 17:56:55.384 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=167239 infer_calls=167239 feedback_calls=167239 infer_wait=865.612s infer_obs_pack=15.523s env_step=86.628s feedback_total=69.521s feedback_obs_pack=17.731s feedback_info_pack=2.800s effective_fps=161.23 +2026-09-28 17:57:25.387 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=171973 infer_calls=171973 feedback_calls=171973 infer_wait=889.470s infer_obs_pack=15.964s env_step=89.118s feedback_total=71.499s feedback_obs_pack=18.242s feedback_info_pack=2.876s effective_fps=161.32 +2026-09-28 17:57:55.388 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=176334 infer_calls=176334 feedback_calls=176334 infer_wait=913.641s infer_obs_pack=16.381s env_step=91.458s feedback_total=73.391s feedback_obs_pack=18.754s feedback_info_pack=2.952s effective_fps=161.05 +2026-09-28 17:58:25.390 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=180997 infer_calls=180997 feedback_calls=180997 infer_wait=937.172s infer_obs_pack=16.863s env_step=94.044s feedback_total=75.476s feedback_obs_pack=19.300s feedback_info_pack=3.034s effective_fps=161.09 +2026-09-28 17:58:55.395 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=186116 infer_calls=186116 feedback_calls=186116 infer_wait=961.425s infer_obs_pack=17.282s env_step=96.341s feedback_total=77.368s feedback_obs_pack=19.783s feedback_info_pack=3.107s effective_fps=161.50 +2026-09-28 17:59:25.396 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=191480 infer_calls=191480 feedback_calls=191480 infer_wait=985.405s infer_obs_pack=17.729s env_step=98.722s feedback_total=79.358s feedback_obs_pack=20.290s feedback_info_pack=3.186s effective_fps=162.10 +2026-09-28 17:59:55.995 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=196610 infer_calls=196610 feedback_calls=196610 infer_wait=1010.310s infer_obs_pack=18.146s env_step=100.974s feedback_total=81.243s feedback_obs_pack=20.776s feedback_info_pack=3.260s effective_fps=162.40 +2026-09-28 18:00:26.000 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=202128 infer_calls=202128 feedback_calls=202128 infer_wait=1034.641s infer_obs_pack=18.566s env_step=103.210s feedback_total=83.134s feedback_obs_pack=21.255s feedback_info_pack=3.336s effective_fps=163.07 +2026-09-28 18:00:56.001 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=207714 infer_calls=207714 feedback_calls=207714 infer_wait=1058.912s infer_obs_pack=18.990s env_step=105.475s feedback_total=85.033s feedback_obs_pack=21.739s feedback_info_pack=3.411s effective_fps=163.76 +2026-09-28 18:01:26.163 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=212994 infer_calls=212994 feedback_calls=212994 infer_wait=1083.669s infer_obs_pack=19.389s env_step=107.605s feedback_total=86.834s feedback_obs_pack=22.199s feedback_info_pack=3.483s effective_fps=164.16 +2026-09-28 18:01:56.163 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=218117 infer_calls=218117 feedback_calls=218117 infer_wait=1108.383s infer_obs_pack=19.782s env_step=109.690s feedback_total=88.590s feedback_obs_pack=22.645s feedback_info_pack=3.552s effective_fps=164.44 +2026-09-28 18:02:26.163 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=223774 infer_calls=223774 feedback_calls=223774 infer_wait=1132.405s infer_obs_pack=20.225s env_step=112.056s feedback_total=90.577s feedback_obs_pack=23.154s feedback_info_pack=3.633s effective_fps=165.11 +2026-09-28 18:02:56.167 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=228873 infer_calls=228873 feedback_calls=228873 infer_wait=1156.540s infer_obs_pack=20.650s env_step=114.386s feedback_total=92.523s feedback_obs_pack=23.647s feedback_info_pack=3.710s effective_fps=165.36 +2026-09-28 18:03:26.167 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=233529 infer_calls=233529 feedback_calls=233529 infer_wait=1180.725s infer_obs_pack=21.106s env_step=116.682s feedback_total=94.423s feedback_obs_pack=24.141s feedback_info_pack=3.783s effective_fps=165.28 +2026-09-28 18:03:56.174 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=239004 infer_calls=239004 feedback_calls=239004 infer_wait=1204.706s infer_obs_pack=21.552s env_step=119.069s feedback_total=96.418s feedback_obs_pack=24.660s feedback_info_pack=3.863s effective_fps=165.77 +2026-09-28 18:04:26.177 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=244657 infer_calls=244657 feedback_calls=244657 infer_wait=1228.898s infer_obs_pack=21.987s env_step=121.360s feedback_total=98.346s feedback_obs_pack=25.156s feedback_info_pack=3.938s effective_fps=166.37 +2026-09-28 18:04:56.180 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=249869 infer_calls=249869 feedback_calls=249869 infer_wait=1253.399s infer_obs_pack=22.393s env_step=123.536s feedback_total=100.165s feedback_obs_pack=25.622s feedback_info_pack=4.010s effective_fps=166.64 +2026-09-28 18:05:26.182 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=255308 infer_calls=255308 feedback_calls=255308 infer_wait=1277.313s infer_obs_pack=22.845s env_step=125.952s feedback_total=102.173s feedback_obs_pack=26.137s feedback_info_pack=4.093s effective_fps=167.06 +2026-09-28 18:05:56.183 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=260621 infer_calls=260621 feedback_calls=260621 infer_wait=1301.176s infer_obs_pack=23.294s env_step=128.380s feedback_total=104.199s feedback_obs_pack=26.657s feedback_info_pack=4.175s effective_fps=167.38 +2026-09-28 18:06:26.187 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=265107 infer_calls=265107 feedback_calls=265107 infer_wait=1324.606s infer_obs_pack=23.766s env_step=131.066s feedback_total=106.275s feedback_obs_pack=27.179s feedback_info_pack=4.257s effective_fps=167.18 +2026-09-28 18:06:56.189 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=269673 infer_calls=269673 feedback_calls=269673 infer_wait=1348.229s infer_obs_pack=24.229s env_step=133.630s feedback_total=108.367s feedback_obs_pack=27.702s feedback_info_pack=4.335s effective_fps=167.04 +2026-09-28 18:07:26.191 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=274461 infer_calls=274461 feedback_calls=274461 infer_wait=1372.472s infer_obs_pack=24.653s env_step=135.921s feedback_total=110.261s feedback_obs_pack=28.187s feedback_info_pack=4.411s effective_fps=167.02 +2026-09-28 18:07:56.249 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=279039 infer_calls=279039 feedback_calls=279039 infer_wait=1396.051s infer_obs_pack=25.179s env_step=138.560s feedback_total=112.356s feedback_obs_pack=28.710s feedback_info_pack=4.498s effective_fps=166.87 +2026-09-28 18:08:27.618 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=282626 infer_calls=282626 feedback_calls=282626 infer_wait=1420.437s infer_obs_pack=25.717s env_step=141.338s feedback_total=114.655s feedback_obs_pack=29.253s feedback_info_pack=4.568s effective_fps=166.04 +2026-09-28 18:08:57.624 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=287331 infer_calls=287331 feedback_calls=287331 infer_wait=1443.822s infer_obs_pack=26.233s env_step=143.974s feedback_total=116.769s feedback_obs_pack=29.800s feedback_info_pack=4.651s effective_fps=166.01 +2026-09-28 18:09:27.636 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=292045 infer_calls=292045 feedback_calls=292045 infer_wait=1467.239s infer_obs_pack=26.699s env_step=146.639s feedback_total=118.885s feedback_obs_pack=30.344s feedback_info_pack=4.734s effective_fps=165.99 +2026-09-28 18:09:57.639 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=296593 infer_calls=296593 feedback_calls=296593 infer_wait=1490.624s infer_obs_pack=27.155s env_step=149.331s feedback_total=121.024s feedback_obs_pack=30.914s feedback_info_pack=4.832s effective_fps=165.87 +2026-09-28 18:10:27.648 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=301655 infer_calls=301655 feedback_calls=301655 infer_wait=1514.191s infer_obs_pack=27.627s env_step=151.919s feedback_total=123.083s feedback_obs_pack=31.443s feedback_info_pack=4.914s effective_fps=166.03 +2026-09-28 18:10:57.648 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=306420 infer_calls=306420 feedback_calls=306420 infer_wait=1537.584s infer_obs_pack=28.101s env_step=154.594s feedback_total=125.181s feedback_obs_pack=32.002s feedback_info_pack=4.998s effective_fps=166.04 +2026-09-28 18:11:29.316 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=311298 infer_calls=311298 feedback_calls=311298 infer_wait=1562.489s infer_obs_pack=28.605s env_step=157.312s feedback_total=127.349s feedback_obs_pack=32.573s feedback_info_pack=5.087s effective_fps=165.96 +2026-09-28 18:11:59.318 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=315878 infer_calls=315878 feedback_calls=315878 infer_wait=1586.097s infer_obs_pack=29.063s env_step=159.899s feedback_total=129.380s feedback_obs_pack=33.101s feedback_info_pack=5.169s effective_fps=165.86 +2026-09-28 18:12:29.320 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=320393 infer_calls=320393 feedback_calls=320393 infer_wait=1609.888s infer_obs_pack=29.498s env_step=162.385s feedback_total=131.400s feedback_obs_pack=33.614s feedback_info_pack=5.257s effective_fps=165.73 +2026-09-28 18:12:59.326 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=325101 infer_calls=325101 feedback_calls=325101 infer_wait=1634.344s infer_obs_pack=29.891s env_step=164.613s feedback_total=133.206s feedback_obs_pack=34.075s feedback_info_pack=5.328s effective_fps=165.69 +2026-09-28 18:13:29.327 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=330192 infer_calls=330192 feedback_calls=330192 infer_wait=1658.470s infer_obs_pack=30.314s env_step=166.971s feedback_total=135.127s feedback_obs_pack=34.575s feedback_info_pack=5.404s effective_fps=165.85 +2026-09-28 18:13:59.329 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=335415 infer_calls=335415 feedback_calls=335415 infer_wait=1682.470s infer_obs_pack=30.757s env_step=169.354s feedback_total=137.102s feedback_obs_pack=35.084s feedback_info_pack=5.484s effective_fps=166.07 +2026-09-28 18:14:29.334 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=340038 infer_calls=340038 feedback_calls=340038 infer_wait=1706.371s infer_obs_pack=31.194s env_step=171.797s feedback_total=139.077s feedback_obs_pack=35.593s feedback_info_pack=5.563s effective_fps=166.00 +2026-09-28 18:14:59.335 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=345274 infer_calls=345274 feedback_calls=345274 infer_wait=1730.045s infer_obs_pack=31.653s env_step=174.322s feedback_total=141.146s feedback_obs_pack=36.129s feedback_info_pack=5.647s effective_fps=166.22 +2026-09-28 18:15:29.335 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=350592 infer_calls=350592 feedback_calls=350592 infer_wait=1754.268s infer_obs_pack=32.079s env_step=176.592s feedback_total=143.072s feedback_obs_pack=36.629s feedback_info_pack=5.725s effective_fps=166.47 +2026-09-28 18:15:59.336 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=355976 infer_calls=355976 feedback_calls=355976 infer_wait=1778.648s infer_obs_pack=32.496s env_step=178.805s feedback_total=144.942s feedback_obs_pack=37.104s feedback_info_pack=5.799s effective_fps=166.74 +2026-09-28 18:16:29.343 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=361010 infer_calls=361010 feedback_calls=361010 infer_wait=1803.442s infer_obs_pack=32.884s env_step=180.858s feedback_total=146.675s feedback_obs_pack=37.545s feedback_info_pack=5.868s effective_fps=166.84 +2026-09-28 18:16:59.348 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=366441 infer_calls=366441 feedback_calls=366441 infer_wait=1827.852s infer_obs_pack=33.305s env_step=183.048s feedback_total=148.550s feedback_obs_pack=38.023s feedback_info_pack=5.945s effective_fps=167.11 +2026-09-28 18:17:29.350 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=371111 infer_calls=371111 feedback_calls=371111 infer_wait=1851.596s infer_obs_pack=33.774s env_step=185.561s feedback_total=150.569s feedback_obs_pack=38.541s feedback_info_pack=6.027s effective_fps=167.05 +2026-09-28 18:17:59.357 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=376534 infer_calls=376534 feedback_calls=376534 infer_wait=1875.941s infer_obs_pack=34.200s env_step=187.781s feedback_total=152.460s feedback_obs_pack=39.029s feedback_info_pack=6.103s effective_fps=167.32 +2026-09-28 18:18:29.360 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=381578 infer_calls=381578 feedback_calls=381578 infer_wait=1900.384s infer_obs_pack=34.608s env_step=189.979s feedback_total=154.305s feedback_obs_pack=39.504s feedback_info_pack=6.178s effective_fps=167.41 +2026-09-28 18:18:59.364 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=386800 infer_calls=386800 feedback_calls=386800 infer_wait=1923.777s infer_obs_pack=35.103s env_step=192.595s feedback_total=156.480s feedback_obs_pack=40.061s feedback_info_pack=6.264s effective_fps=167.59 +2026-09-28 18:19:29.366 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=392104 infer_calls=392104 feedback_calls=392104 infer_wait=1947.875s infer_obs_pack=35.531s env_step=194.931s feedback_total=158.429s feedback_obs_pack=40.560s feedback_info_pack=6.342s effective_fps=167.80 +2026-09-28 18:20:00.590 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=397314 infer_calls=397314 feedback_calls=397314 infer_wait=1973.033s infer_obs_pack=35.972s env_step=197.344s feedback_total=160.410s feedback_obs_pack=41.066s feedback_info_pack=6.421s effective_fps=167.87 +2026-09-28 18:20:30.591 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=401901 infer_calls=401901 feedback_calls=401901 infer_wait=1996.668s infer_obs_pack=36.423s env_step=199.922s feedback_total=162.468s feedback_obs_pack=41.602s feedback_info_pack=6.511s effective_fps=167.77 +2026-09-28 18:21:00.595 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=406987 infer_calls=406987 feedback_calls=406987 infer_wait=2020.068s infer_obs_pack=36.892s env_step=202.564s feedback_total=164.633s feedback_obs_pack=42.148s feedback_info_pack=6.598s effective_fps=167.89 +2026-09-28 18:21:16.444 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=2031.168s infer_obs_pack=37.112s env_step=203.765s feedback_total=165.633s feedback_obs_pack=42.407s feedback_info_pack=6.638s effective_fps=168.03 +2026-09-28 18:21:16.446 | INFO  | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client-seed2.log b/experiments/e43-cross-machine-training/results/cross-clients/client-seed2.log new file mode 100644 index 0000000..ededd21 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client-seed2.log @@ -0,0 +1,95 @@ +2026-09-28 17:39:00.144 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 17:39:00.147 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 17:39:00.149 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 17:39:00.155 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 17:39:00.163 | WARNING  | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 17:39:00.474 | INFO  | __main__:main:83 - Starting env client exp_name=e43-cross-seed2 output_dir=runs\e43-cross-seed2 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 17:39:00.644 | INFO  | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://100.75.226.89:9792... +2026-09-28 17:39:00.700 | INFO  | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 17:39:30.716 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=822 infer_calls=822 feedback_calls=822 infer_wait=28.471s infer_obs_pack=0.108s env_step=0.655s feedback_total=0.492s feedback_obs_pack=0.110s feedback_info_pack=0.019s effective_fps=27.65 +2026-09-28 17:40:01.560 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=4097 infer_calls=4097 feedback_calls=4097 infer_wait=53.587s infer_obs_pack=0.560s env_step=2.875s feedback_total=2.403s feedback_obs_pack=0.605s feedback_info_pack=0.090s effective_fps=68.94 +2026-09-28 17:40:31.565 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=8608 infer_calls=8608 feedback_calls=8608 infer_wait=76.649s infer_obs_pack=1.063s env_step=5.633s feedback_total=4.654s feedback_obs_pack=1.172s feedback_info_pack=0.179s effective_fps=97.82 +2026-09-28 17:41:01.569 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=13288 infer_calls=13288 feedback_calls=13288 infer_wait=100.121s infer_obs_pack=1.578s env_step=8.226s feedback_total=6.775s feedback_obs_pack=1.714s feedback_info_pack=0.267s effective_fps=113.86 +2026-09-28 17:41:31.576 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=18144 infer_calls=18144 feedback_calls=18144 infer_wait=123.639s infer_obs_pack=2.053s env_step=10.862s feedback_total=8.860s feedback_obs_pack=2.239s feedback_info_pack=0.352s effective_fps=124.77 +2026-09-28 17:42:01.578 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=23032 infer_calls=23032 feedback_calls=23032 infer_wait=148.159s infer_obs_pack=2.456s env_step=13.044s feedback_total=10.671s feedback_obs_pack=2.702s feedback_info_pack=0.424s effective_fps=132.12 +2026-09-28 17:42:31.578 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=28065 infer_calls=28065 feedback_calls=28065 infer_wait=171.807s infer_obs_pack=2.921s env_step=15.591s feedback_total=12.738s feedback_obs_pack=3.236s feedback_info_pack=0.507s effective_fps=138.21 +2026-09-28 17:43:01.784 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=32770 infer_calls=32770 feedback_calls=32770 infer_wait=196.119s infer_obs_pack=3.344s env_step=17.957s feedback_total=14.661s feedback_obs_pack=3.722s feedback_info_pack=0.588s effective_fps=141.20 +2026-09-28 17:43:31.788 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=37488 infer_calls=37488 feedback_calls=37488 infer_wait=219.933s infer_obs_pack=3.804s env_step=20.436s feedback_total=16.679s feedback_obs_pack=4.218s feedback_info_pack=0.675s effective_fps=143.71 +2026-09-28 17:44:01.793 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=42322 infer_calls=42322 feedback_calls=42322 infer_wait=243.036s infer_obs_pack=4.301s env_step=23.221s feedback_total=18.901s feedback_obs_pack=4.783s feedback_info_pack=0.768s effective_fps=146.21 +2026-09-28 17:44:31.795 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=47573 infer_calls=47573 feedback_calls=47573 infer_wait=266.467s infer_obs_pack=4.769s env_step=25.858s feedback_total=21.053s feedback_obs_pack=5.326s feedback_info_pack=0.854s effective_fps=149.53 +2026-09-28 17:45:01.797 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=52153 infer_calls=52153 feedback_calls=52153 infer_wait=289.911s infer_obs_pack=5.230s env_step=28.510s feedback_total=23.164s feedback_obs_pack=5.872s feedback_info_pack=0.939s effective_fps=150.38 +2026-09-28 17:45:31.800 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=57345 infer_calls=57345 feedback_calls=57345 infer_wait=314.027s infer_obs_pack=5.647s env_step=30.862s feedback_total=25.102s feedback_obs_pack=6.370s feedback_info_pack=1.017s effective_fps=152.66 +2026-09-28 17:46:01.803 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=61774 infer_calls=61774 feedback_calls=61774 infer_wait=337.987s infer_obs_pack=6.067s env_step=33.303s feedback_total=27.050s feedback_obs_pack=6.875s feedback_info_pack=1.095s effective_fps=152.75 +2026-09-28 17:46:31.807 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=66671 infer_calls=66671 feedback_calls=66671 infer_wait=361.497s infer_obs_pack=6.537s env_step=35.925s feedback_total=29.155s feedback_obs_pack=7.403s feedback_info_pack=1.180s effective_fps=153.93 +2026-09-28 17:47:01.812 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=71362 infer_calls=71362 feedback_calls=71362 infer_wait=384.993s infer_obs_pack=7.003s env_step=38.566s feedback_total=31.246s feedback_obs_pack=7.937s feedback_info_pack=1.265s effective_fps=154.53 +2026-09-28 17:47:31.821 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=75993 infer_calls=75993 feedback_calls=75993 infer_wait=408.767s infer_obs_pack=7.459s env_step=41.096s feedback_total=33.249s feedback_obs_pack=8.429s feedback_info_pack=1.346s effective_fps=154.91 +2026-09-28 17:48:01.831 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=80980 infer_calls=80980 feedback_calls=80980 infer_wait=432.255s infer_obs_pack=7.918s env_step=43.764s feedback_total=35.339s feedback_obs_pack=8.965s feedback_info_pack=1.432s effective_fps=155.95 +2026-09-28 17:48:31.835 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=85967 infer_calls=85967 feedback_calls=85967 infer_wait=456.749s infer_obs_pack=8.317s env_step=45.962s feedback_total=37.169s feedback_obs_pack=9.423s feedback_info_pack=1.503s effective_fps=156.82 +2026-09-28 17:49:01.835 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=90570 infer_calls=90570 feedback_calls=90570 infer_wait=480.854s infer_obs_pack=8.731s env_step=48.366s feedback_total=39.062s feedback_obs_pack=9.906s feedback_info_pack=1.582s effective_fps=156.96 +2026-09-28 17:49:31.838 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=95389 infer_calls=95389 feedback_calls=95389 infer_wait=505.305s infer_obs_pack=9.130s env_step=50.596s feedback_total=40.911s feedback_obs_pack=10.363s feedback_info_pack=1.656s effective_fps=157.42 +2026-09-28 17:50:01.843 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=100678 infer_calls=100678 feedback_calls=100678 infer_wait=529.709s infer_obs_pack=9.531s env_step=52.835s feedback_total=42.760s feedback_obs_pack=10.832s feedback_info_pack=1.730s effective_fps=158.59 +2026-09-28 17:50:31.844 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=106054 infer_calls=106054 feedback_calls=106054 infer_wait=553.569s infer_obs_pack=9.969s env_step=55.289s feedback_total=44.787s feedback_obs_pack=11.341s feedback_info_pack=1.811s effective_fps=159.81 +2026-09-28 17:51:01.844 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=110762 infer_calls=110762 feedback_calls=110762 infer_wait=577.796s infer_obs_pack=10.397s env_step=57.595s feedback_total=46.676s feedback_obs_pack=11.819s feedback_info_pack=1.887s effective_fps=159.95 +2026-09-28 17:51:31.847 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=116053 infer_calls=116053 feedback_calls=116053 infer_wait=602.237s infer_obs_pack=10.799s env_step=59.801s feedback_total=48.536s feedback_obs_pack=12.292s feedback_info_pack=1.962s effective_fps=160.88 +2026-09-28 17:52:01.849 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=120959 infer_calls=120959 feedback_calls=120959 infer_wait=626.926s infer_obs_pack=11.170s env_step=61.933s feedback_total=50.294s feedback_obs_pack=12.743s feedback_info_pack=2.033s effective_fps=161.21 +2026-09-28 17:52:31.851 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=125190 infer_calls=125190 feedback_calls=125190 infer_wait=651.251s infer_obs_pack=11.603s env_step=64.199s feedback_total=52.153s feedback_obs_pack=13.216s feedback_info_pack=2.109s effective_fps=160.66 +2026-09-28 17:53:01.862 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=129988 infer_calls=129988 feedback_calls=129988 infer_wait=675.363s infer_obs_pack=12.011s env_step=66.585s feedback_total=54.092s feedback_obs_pack=13.704s feedback_info_pack=2.197s effective_fps=160.87 +2026-09-28 17:53:31.868 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=134880 infer_calls=134880 feedback_calls=134880 infer_wait=699.323s infer_obs_pack=12.481s env_step=69.004s feedback_total=56.059s feedback_obs_pack=14.215s feedback_info_pack=2.277s effective_fps=161.17 +2026-09-28 17:54:01.868 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=139294 infer_calls=139294 feedback_calls=139294 infer_wait=723.091s infer_obs_pack=12.918s env_step=71.516s feedback_total=58.073s feedback_obs_pack=14.728s feedback_info_pack=2.363s effective_fps=160.92 +2026-09-28 17:54:31.868 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=144435 infer_calls=144435 feedback_calls=144435 infer_wait=747.342s infer_obs_pack=13.353s env_step=73.785s feedback_total=59.982s feedback_obs_pack=15.218s feedback_info_pack=2.442s effective_fps=161.48 +2026-09-28 17:55:01.872 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=149523 infer_calls=149523 feedback_calls=149523 infer_wait=771.097s infer_obs_pack=13.798s env_step=76.270s feedback_total=62.051s feedback_obs_pack=15.735s feedback_info_pack=2.523s effective_fps=161.96 +2026-09-28 17:55:31.872 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=154920 infer_calls=154920 feedback_calls=154920 infer_wait=795.319s infer_obs_pack=14.231s env_step=78.547s feedback_total=63.976s feedback_obs_pack=16.221s feedback_info_pack=2.601s effective_fps=162.72 +2026-09-28 17:56:01.875 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=159298 infer_calls=159298 feedback_calls=159298 infer_wait=818.394s infer_obs_pack=14.723s env_step=81.374s feedback_total=66.207s feedback_obs_pack=16.792s feedback_info_pack=2.696s effective_fps=162.43 +2026-09-28 17:56:31.877 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163976 infer_calls=163976 feedback_calls=163976 infer_wait=842.908s infer_obs_pack=15.111s env_step=83.552s feedback_total=68.028s feedback_obs_pack=17.257s feedback_info_pack=2.772s effective_fps=162.42 +2026-09-28 17:57:01.881 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=167970 infer_calls=167970 feedback_calls=167970 infer_wait=866.369s infer_obs_pack=15.575s env_step=86.219s feedback_total=70.149s feedback_obs_pack=17.835s feedback_info_pack=2.858s effective_fps=161.77 +2026-09-28 17:57:31.885 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=172724 infer_calls=172724 feedback_calls=172724 infer_wait=890.435s infer_obs_pack=16.010s env_step=88.590s feedback_total=72.099s feedback_obs_pack=18.348s feedback_info_pack=2.940s effective_fps=161.86 +2026-09-28 17:58:02.012 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=177131 infer_calls=177131 feedback_calls=177131 infer_wait=914.229s infer_obs_pack=16.479s env_step=91.132s feedback_total=74.146s feedback_obs_pack=18.881s feedback_info_pack=3.016s effective_fps=161.62 +2026-09-28 17:58:32.015 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=182081 infer_calls=182081 feedback_calls=182081 infer_wait=937.839s infer_obs_pack=16.951s env_step=93.665s feedback_total=76.242s feedback_obs_pack=19.416s feedback_info_pack=3.101s effective_fps=161.89 +2026-09-28 17:59:02.018 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=186802 infer_calls=186802 feedback_calls=186802 infer_wait=962.636s infer_obs_pack=17.334s env_step=95.714s feedback_total=77.987s feedback_obs_pack=19.866s feedback_info_pack=3.172s effective_fps=161.92 +2026-09-28 17:59:32.020 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=191509 infer_calls=191509 feedback_calls=191509 infer_wait=987.397s infer_obs_pack=17.719s env_step=97.769s feedback_total=79.743s feedback_obs_pack=20.310s feedback_info_pack=3.243s effective_fps=161.94 +2026-09-28 18:00:02.020 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=196275 infer_calls=196275 feedback_calls=196275 infer_wait=1012.168s infer_obs_pack=18.101s env_step=99.824s feedback_total=81.479s feedback_obs_pack=20.754s feedback_info_pack=3.313s effective_fps=162.00 +2026-09-28 18:00:33.524 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=200706 infer_calls=200706 feedback_calls=200706 infer_wait=1039.178s infer_obs_pack=18.434s env_step=101.594s feedback_total=82.984s feedback_obs_pack=21.137s feedback_info_pack=3.376s effective_fps=161.57 +2026-09-28 18:01:03.531 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=205618 infer_calls=205618 feedback_calls=205618 infer_wait=1064.172s infer_obs_pack=18.803s env_step=103.550s feedback_total=84.667s feedback_obs_pack=21.564s feedback_info_pack=3.446s effective_fps=161.75 +2026-09-28 18:01:33.532 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=210751 infer_calls=210751 feedback_calls=210751 infer_wait=1088.955s infer_obs_pack=19.194s env_step=105.594s feedback_total=86.415s feedback_obs_pack=22.009s feedback_info_pack=3.521s effective_fps=162.10 +2026-09-28 18:02:03.537 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=215858 infer_calls=215858 feedback_calls=215858 infer_wait=1113.655s infer_obs_pack=19.589s env_step=107.663s feedback_total=88.196s feedback_obs_pack=22.466s feedback_info_pack=3.595s effective_fps=162.41 +2026-09-28 18:02:36.893 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=221186 infer_calls=221186 feedback_calls=221186 infer_wait=1141.375s infer_obs_pack=20.013s env_step=109.855s feedback_total=90.089s feedback_obs_pack=22.945s feedback_info_pack=3.672s effective_fps=162.48 +2026-09-28 18:03:06.895 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=225846 infer_calls=225846 feedback_calls=225846 infer_wait=1165.725s infer_obs_pack=20.411s env_step=112.077s feedback_total=91.984s feedback_obs_pack=23.429s feedback_info_pack=3.747s effective_fps=162.46 +2026-09-28 18:03:36.897 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=230764 infer_calls=230764 feedback_calls=230764 infer_wait=1190.082s infer_obs_pack=20.821s env_step=114.297s feedback_total=93.872s feedback_obs_pack=23.917s feedback_info_pack=3.824s effective_fps=162.62 +2026-09-28 18:04:06.900 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=236084 infer_calls=236084 feedback_calls=236084 infer_wait=1214.476s infer_obs_pack=21.238s env_step=116.493s feedback_total=95.755s feedback_obs_pack=24.401s feedback_info_pack=3.900s effective_fps=163.05 +2026-09-28 18:04:36.901 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=241326 infer_calls=241326 feedback_calls=241326 infer_wait=1239.104s infer_obs_pack=21.635s env_step=118.600s feedback_total=97.564s feedback_obs_pack=24.860s feedback_info_pack=3.974s effective_fps=163.40 +2026-09-28 18:05:06.973 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=245762 infer_calls=245762 feedback_calls=245762 infer_wait=1264.415s infer_obs_pack=21.979s env_step=120.486s feedback_total=99.145s feedback_obs_pack=25.265s feedback_info_pack=4.039s effective_fps=163.19 +2026-09-28 18:05:36.973 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=251053 infer_calls=251053 feedback_calls=251053 infer_wait=1288.689s infer_obs_pack=22.405s env_step=122.735s feedback_total=101.056s feedback_obs_pack=25.754s feedback_info_pack=4.117s effective_fps=163.56 +2026-09-28 18:06:06.975 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=255991 infer_calls=255991 feedback_calls=255991 infer_wait=1312.483s infer_obs_pack=22.865s env_step=125.186s feedback_total=103.103s feedback_obs_pack=26.286s feedback_info_pack=4.201s effective_fps=163.72 +2026-09-28 18:06:36.979 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=260216 infer_calls=260216 feedback_calls=260216 infer_wait=1336.160s infer_obs_pack=23.336s env_step=127.758s feedback_total=105.129s feedback_obs_pack=26.808s feedback_info_pack=4.282s effective_fps=163.41 +2026-09-28 18:07:06.982 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=264639 infer_calls=264639 feedback_calls=264639 infer_wait=1359.856s infer_obs_pack=23.783s env_step=130.282s feedback_total=107.189s feedback_obs_pack=27.340s feedback_info_pack=4.368s effective_fps=163.25 +2026-09-28 18:07:36.985 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=269799 infer_calls=269799 feedback_calls=269799 infer_wait=1384.003s infer_obs_pack=24.210s env_step=132.591s feedback_total=109.132s feedback_obs_pack=27.836s feedback_info_pack=4.446s effective_fps=163.52 +2026-09-28 18:08:06.989 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=272755 infer_calls=272755 feedback_calls=272755 infer_wait=1407.154s infer_obs_pack=24.781s env_step=135.345s feedback_total=111.372s feedback_obs_pack=28.505s feedback_info_pack=4.514s effective_fps=162.48 +2026-09-28 18:08:36.995 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=277131 infer_calls=277131 feedback_calls=277131 infer_wait=1430.549s infer_obs_pack=25.273s env_step=137.988s feedback_total=113.499s feedback_obs_pack=29.058s feedback_info_pack=4.602s effective_fps=162.32 +2026-09-28 18:09:06.996 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=281802 infer_calls=281802 feedback_calls=281802 infer_wait=1454.179s infer_obs_pack=25.734s env_step=140.523s feedback_total=115.598s feedback_obs_pack=29.590s feedback_info_pack=4.694s effective_fps=162.33 +2026-09-28 18:09:36.995 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=286197 infer_calls=286197 feedback_calls=286197 infer_wait=1477.557s infer_obs_pack=26.214s env_step=143.195s feedback_total=117.727s feedback_obs_pack=30.152s feedback_info_pack=4.775s effective_fps=162.18 +2026-09-28 18:10:07.367 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=290818 infer_calls=290818 feedback_calls=290818 infer_wait=1501.990s infer_obs_pack=26.655s env_step=145.564s feedback_total=119.665s feedback_obs_pack=30.651s feedback_info_pack=4.853s effective_fps=162.12 +2026-09-28 18:10:37.371 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=295610 infer_calls=295610 feedback_calls=295610 infer_wait=1525.681s infer_obs_pack=27.113s env_step=148.089s feedback_total=121.704s feedback_obs_pack=31.171s feedback_info_pack=4.935s effective_fps=162.19 +2026-09-28 18:11:07.371 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=300398 infer_calls=300398 feedback_calls=300398 infer_wait=1549.095s infer_obs_pack=27.591s env_step=150.755s feedback_total=123.808s feedback_obs_pack=31.719s feedback_info_pack=5.022s effective_fps=162.27 +2026-09-28 18:11:37.375 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=305223 infer_calls=305223 feedback_calls=305223 infer_wait=1572.774s infer_obs_pack=28.063s env_step=153.277s feedback_total=125.847s feedback_obs_pack=32.241s feedback_info_pack=5.107s effective_fps=162.36 +2026-09-28 18:12:07.376 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=309758 infer_calls=309758 feedback_calls=309758 infer_wait=1596.395s infer_obs_pack=28.514s env_step=155.857s feedback_total=127.883s feedback_obs_pack=32.763s feedback_info_pack=5.188s effective_fps=162.29 +2026-09-28 18:12:37.378 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=314086 infer_calls=314086 feedback_calls=314086 infer_wait=1620.581s infer_obs_pack=28.937s env_step=158.151s feedback_total=129.823s feedback_obs_pack=33.286s feedback_info_pack=5.262s effective_fps=162.11 +2026-09-28 18:13:07.384 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=318724 infer_calls=318724 feedback_calls=318724 infer_wait=1645.105s infer_obs_pack=29.323s env_step=160.335s feedback_total=131.624s feedback_obs_pack=33.742s feedback_info_pack=5.334s effective_fps=162.09 +2026-09-28 18:13:38.278 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=323586 infer_calls=323586 feedback_calls=323586 infer_wait=1670.517s infer_obs_pack=29.723s env_step=162.504s feedback_total=133.436s feedback_obs_pack=34.206s feedback_info_pack=5.408s effective_fps=162.10 +2026-09-28 18:14:08.281 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=328630 infer_calls=328630 feedback_calls=328630 infer_wait=1694.227s infer_obs_pack=30.188s env_step=164.994s feedback_total=135.494s feedback_obs_pack=34.733s feedback_info_pack=5.491s effective_fps=162.29 +2026-09-28 18:14:38.283 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=333534 infer_calls=333534 feedback_calls=333534 infer_wait=1717.713s infer_obs_pack=30.666s env_step=167.575s feedback_total=137.630s feedback_obs_pack=35.277s feedback_info_pack=5.580s effective_fps=162.42 +2026-09-28 18:15:08.287 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=338945 infer_calls=338945 feedback_calls=338945 infer_wait=1741.806s infer_obs_pack=31.099s env_step=169.902s feedback_total=139.607s feedback_obs_pack=35.780s feedback_info_pack=5.661s effective_fps=162.77 +2026-09-28 18:15:40.048 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=344066 infer_calls=344066 feedback_calls=344066 infer_wait=1768.025s infer_obs_pack=31.507s env_step=172.080s feedback_total=141.466s feedback_obs_pack=36.258s feedback_info_pack=5.736s effective_fps=162.83 +2026-09-28 18:16:10.049 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=349394 infer_calls=349394 feedback_calls=349394 infer_wait=1792.494s infer_obs_pack=31.919s env_step=174.252s feedback_total=143.317s feedback_obs_pack=36.731s feedback_info_pack=5.812s effective_fps=163.12 +2026-09-28 18:16:40.050 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=354646 infer_calls=354646 feedback_calls=354646 infer_wait=1817.131s infer_obs_pack=32.318s env_step=176.353s feedback_total=145.129s feedback_obs_pack=37.197s feedback_info_pack=5.887s effective_fps=163.36 +2026-09-28 18:17:10.055 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=359868 infer_calls=359868 feedback_calls=359868 infer_wait=1841.565s infer_obs_pack=32.732s env_step=178.542s feedback_total=146.982s feedback_obs_pack=37.668s feedback_info_pack=5.961s effective_fps=163.59 +2026-09-28 18:17:41.487 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=364546 infer_calls=364546 feedback_calls=364546 infer_wait=1866.935s infer_obs_pack=33.181s env_step=180.958s feedback_total=148.957s feedback_obs_pack=38.187s feedback_info_pack=6.041s effective_fps=163.47 +2026-09-28 18:18:11.489 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=369868 infer_calls=369868 feedback_calls=369868 infer_wait=1891.164s infer_obs_pack=33.603s env_step=183.229s feedback_total=150.886s feedback_obs_pack=38.684s feedback_info_pack=6.119s effective_fps=163.74 +2026-09-28 18:18:41.491 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=374903 infer_calls=374903 feedback_calls=374903 infer_wait=1914.731s infer_obs_pack=34.091s env_step=185.777s feedback_total=153.002s feedback_obs_pack=39.231s feedback_info_pack=6.206s effective_fps=163.88 +2026-09-28 18:19:11.495 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=380381 infer_calls=380381 feedback_calls=380381 infer_wait=1938.751s infer_obs_pack=34.531s env_step=188.127s feedback_total=155.005s feedback_obs_pack=39.740s feedback_info_pack=6.289s effective_fps=164.21 +2026-09-28 18:19:41.498 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=385099 infer_calls=385099 feedback_calls=385099 infer_wait=1962.936s infer_obs_pack=34.944s env_step=190.441s feedback_total=156.924s feedback_obs_pack=40.223s feedback_info_pack=6.367s effective_fps=164.20 +2026-09-28 18:20:11.504 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=390300 infer_calls=390300 feedback_calls=390300 infer_wait=1987.074s infer_obs_pack=35.366s env_step=192.772s feedback_total=158.865s feedback_obs_pack=40.727s feedback_info_pack=6.447s effective_fps=164.40 +2026-09-28 18:20:41.506 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=394828 infer_calls=394828 feedback_calls=394828 infer_wait=2010.433s infer_obs_pack=35.829s env_step=195.439s feedback_total=161.028s feedback_obs_pack=41.298s feedback_info_pack=6.534s effective_fps=164.32 +2026-09-28 18:21:11.512 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=399905 infer_calls=399905 feedback_calls=399905 infer_wait=2034.364s infer_obs_pack=36.259s env_step=197.845s feedback_total=163.050s feedback_obs_pack=41.813s feedback_info_pack=6.617s effective_fps=164.47 +2026-09-28 18:21:41.516 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=405296 infer_calls=405296 feedback_calls=405296 infer_wait=2057.844s infer_obs_pack=36.708s env_step=200.428s feedback_total=165.233s feedback_obs_pack=42.354s feedback_info_pack=6.700s effective_fps=164.74 +2026-09-28 18:22:11.977 | INFO  | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409600 infer_calls=409600 feedback_calls=409600 infer_wait=2079.798s infer_obs_pack=37.166s env_step=203.037s feedback_total=167.377s feedback_obs_pack=42.870s feedback_info_pack=6.778s effective_fps=164.67 +2026-09-28 18:22:11.978 | INFO  | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed0.json b/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed0.json new file mode 100644 index 0000000..ab8952a --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed0.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-cross-seed0", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 1814.383544921875, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 2034.7191001036845, + "infer_obs_pack_s": 37.187602982419776, + "env_step_s": 203.39059199477197, + "feedback_s": 166.08562310118577, + "feedback_obs_pack_s": 42.57605869916733, + "feedback_info_pack_s": 6.698729697585804, + "collect_time_s": 2441.382918182062, + "effective_fps": 167.77417296955738, + "infer_wait_frac": 0.8334289082430406, + "infer_obs_pack_frac": 0.015232187751240165, + "env_step_frac": 0.08330958264679907, + "feedback_frac": 0.06802932135892016 + } +} diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed1.json b/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed1.json new file mode 100644 index 0000000..461a46e --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed1.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-cross-seed1", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 2011.196533203125, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 2031.16819569387, + "infer_obs_pack_s": 37.11224539653631, + "env_step_s": 203.76540099648992, + "feedback_s": 165.632964603632, + "feedback_obs_pack_s": 42.40658090336365, + "feedback_info_pack_s": 6.638116796093527, + "collect_time_s": 2437.6788066905283, + "effective_fps": 168.02910985475054, + "infer_wait_frac": 0.8332386490455852, + "infer_obs_pack_frac": 0.015224419761404538, + "env_step_frac": 0.08358993007496686, + "feedback_frac": 0.06794700111804339 + } +} diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed2.json b/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed2.json new file mode 100644 index 0000000..0cffaaa --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client-summary-seed2.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-cross-seed2", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 903.5633544921875, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409600, + "infer_calls": 409600, + "feedback_calls": 409600, + "infer_wait_s": 2079.7975664928963, + "infer_obs_pack_s": 37.16626099994755, + "env_step_s": 203.03654488865868, + "feedback_s": 167.37722861059592, + "feedback_obs_pack_s": 42.87021679469035, + "feedback_info_pack_s": 6.777995801880024, + "collect_time_s": 2487.3776009920985, + "effective_fps": 164.6714193440633, + "infer_wait_frac": 0.8361406670476418, + "infer_obs_pack_frac": 0.01494194568011052, + "env_step_frac": 0.08162674810920421, + "feedback_frac": 0.06729063916304344 + } +} diff --git a/experiments/e43-cross-machine-training/results/cross-clients/client_side.out b/experiments/e43-cross-machine-training/results/cross-clients/client_side.out new file mode 100644 index 0000000..ea71042 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross-clients/client_side.out @@ -0,0 +1,9 @@ +client: C:/Users/75128/.claude/jobs/1fea619d/tmp/e43/client/.venv/Scripts/python.exe +server: 100.75.226.89 ports 9790+seed +out: D:/75128/Desktop/plugrl-work/plugrl-server/.claude/worktrees/fix-pi0-image-mask-batching/experiments/e43-cross-machine-training/results/cross-clients +start 2026-09-28 17:38:48 +seed 0 client rc=0 at 18:21:16 +seed 1 client rc=0 at 18:21:16 +seed 2 client rc=0 at 18:22:12 +end 2026-09-28 18:22:12 +CLIENTS_DONE diff --git a/experiments/e43-cross-machine-training/results/cross-machine.png b/experiments/e43-cross-machine-training/results/cross-machine.png new file mode 100644 index 0000000000000000000000000000000000000000..980508fc6dabe4e7f4a8da2e30e91f0d43c5e856 GIT binary patch literal 252637 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

Keb&oI#7tu6-iB(zr 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�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�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

Wj3Us-Wex=zbe7e@^H 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 L8tP&%-w*pA#*{0P literal 0 HcmV?d00001 diff --git a/experiments/e43-cross-machine-training/results/cross.out b/experiments/e43-cross-machine-training/results/cross.out new file mode 100644 index 0000000..0c4003f --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross.out @@ -0,0 +1,14 @@ +arm: cross ports 9790+seed +server: /home/guangzhao/zuogou/plugrl/e43-reg/../plugrl-server/.venv/bin/python (src /home/guangzhao/zuogou/plugrl/e43-reg/src) +out: /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross +steps: 409600 seeds: 0 1 2 +start 2026-09-28 17:37:46 +READY seed 0 port 9790 at 17:37:49 +READY seed 1 port 9791 at 17:37:54 +READY seed 2 port 9792 at 17:37:59 +seed 0 server rc=0 at 18:20:28 +seed 1 server rc=0 at 18:20:28 +seed 2 server rc=0 at 18:21:24 +end 2026-09-28 18:21:24 +failed seeds: 0 +ARM_DONE cross diff --git a/experiments/e43-cross-machine-training/results/cross/server-seed0.log b/experiments/e43-cross-machine-training/results/cross/server-seed0.log new file mode 100644 index 0000000..3e36e9b --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross/server-seed0.log @@ -0,0 +1,23 @@ +17:37:48|INFO|plugrl_server version: 0.1.0 +17:37:48|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +17:37:48|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +17:37:48|INFO|Seeded python, numpy and torch with 0. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +17:37:48|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed0 +17:37:48|INFO|Policy created... +17:37:48|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +17:37:48|INFO|Algorithm created: + +17:37:48|INFO|Agent Server is listening on 0.0.0.0:9790 +17:47:21|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed0/81921 +17:55:44|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed0/163841 +18:03:46|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed0/245761 +18:12:28|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed0/327681 +18:20:28|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed0/409601 +18:20:28|INFO|Stopping server as the algorithm signaled to stop. +18:20:28|INFO|Shutdown started: aborting pending infer requests. +18:20:28|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +18:20:28|INFO|Shutdown closing 1 websocket connection(s). +18:20:28|INFO|Shutdown interrupted an in-flight inference request from ('100.65.224.34', 59143). +18:20:28|INFO|WebSocket server closed. +18:20:28|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/cross/server-seed1.log b/experiments/e43-cross-machine-training/results/cross/server-seed1.log new file mode 100644 index 0000000..2153e25 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross/server-seed1.log @@ -0,0 +1,23 @@ +17:37:53|INFO|plugrl_server version: 0.1.0 +17:37:53|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +17:37:53|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +17:37:53|INFO|Seeded python, numpy and torch with 1. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +17:37:53|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed1 +17:37:53|INFO|Policy created... +17:37:53|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +17:37:53|INFO|Algorithm created: + +17:37:53|INFO|Agent Server is listening on 0.0.0.0:9791 +17:47:21|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed1/81921 +17:55:42|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed1/163841 +18:03:45|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed1/245761 +18:12:28|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed1/327681 +18:20:28|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed1/409601 +18:20:28|INFO|Stopping server as the algorithm signaled to stop. +18:20:28|INFO|Shutdown started: aborting pending infer requests. +18:20:28|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +18:20:28|INFO|Shutdown closing 1 websocket connection(s). +18:20:28|INFO|Shutdown interrupted an in-flight inference request from ('100.65.224.34', 59146). +18:20:28|INFO|WebSocket server closed. +18:20:28|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/cross/server-seed2.log b/experiments/e43-cross-machine-training/results/cross/server-seed2.log new file mode 100644 index 0000000..8d0b78f --- /dev/null +++ b/experiments/e43-cross-machine-training/results/cross/server-seed2.log @@ -0,0 +1,23 @@ +17:37:58|INFO|plugrl_server version: 0.1.0 +17:37:58|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +17:37:58|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +17:37:58|INFO|Seeded python, numpy and torch with 2. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +17:37:58|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed2 +17:37:58|INFO|Policy created... +17:37:58|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +17:37:58|INFO|Algorithm created: + +17:37:58|INFO|Agent Server is listening on 0.0.0.0:9792 +17:47:22|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed2/81921 +17:55:43|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed2/163841 +18:04:18|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed2/245761 +18:13:14|INFO|Checkpoint saved at step 327680 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed2/327680 +18:21:24|INFO|Checkpoint saved at step 409600 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/cross/fpo/fpo-policy/halfcheetah-cross-seed2/409600 +18:21:24|INFO|Stopping server as the algorithm signaled to stop. +18:21:24|INFO|Shutdown started: aborting pending infer requests. +18:21:24|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +18:21:24|INFO|Shutdown closing 1 websocket connection(s). +18:21:24|INFO|Shutdown interrupted an in-flight inference request from ('100.65.224.34', 60912). +18:21:24|INFO|WebSocket server closed. +18:21:24|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/curves.json b/experiments/e43-cross-machine-training/results/curves.json new file mode 100644 index 0000000..759b740 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/curves.json @@ -0,0 +1 @@ +{"local": {"returns": [[-292.9, -265.8, -348.3, -326.5, -269.1, -309.9, -250.6, -319.2, -246.5, -209.5, -144.2, -119.4, -74.0, -33.3, -33.9, -12.3, 20.2, 81.3, -0.7, 171.6, 135.8, 255.5, 310.1, 406.0, 314.5, 326.6, 523.0, 375.7, 626.8, 703.5, -90.6, 12.0, 718.1, 588.5, 316.4, 843.0, 764.4, 605.5, 619.0, 128.6, 846.7, 667.8, 798.1, 614.4, 896.9, 859.8, 776.4, 934.0, 894.1, 462.3, 1256.7, 1244.2, 923.9, 625.9, 956.5, 585.0, 791.2, 1118.8, 788.8, 397.9, 622.8, 758.2, 878.7, 812.4, 573.9, 763.6, 1124.8, 645.8, 774.2, 434.0, 729.5, 818.3, 683.1, 1229.7, 1200.0, 849.3, 553.9, 966.7, 911.4, 1089.2, 1068.2, 522.2, 1433.1, 1173.5, 434.6, 849.3, 1543.5, 1461.3, 1118.3, 1651.5, 1188.1, 1570.7, 1320.2, 1318.6, 1587.1, 1553.3, 1202.9, 963.7, 996.0, 919.5], [-324.9, -240.9, -256.3, -332.4, -289.9, -263.6, -258.5, -217.1, -222.1, -144.2, -170.5, -112.6, -170.4, -143.1, -117.1, -41.2, -1.2, -166.0, 29.2, 93.2, 38.4, 254.9, 65.0, 200.8, 133.0, 98.6, 63.3, 375.7, 463.0, 422.3, 361.6, 389.2, 451.3, 549.7, 742.8, 309.9, 456.5, 550.2, 543.5, 197.4, 347.8, 551.6, 987.6, 359.5, 805.5, 366.0, 787.7, 510.9, 836.2, 824.1, 174.0, 523.2, 818.4, 635.6, 779.7, 368.4, 653.2, 729.1, 788.9, 509.7, 539.1, 1100.0, 1101.2, 1213.5, 578.8, 714.8, 483.6, 92.1, 596.8, 814.7, 992.6, 911.0, 988.3, 259.3, 498.3, 744.8, 427.8, 1023.0, 1032.8, 919.1, 846.2, 863.5, 880.1, 728.1, 531.2, 785.9, -39.0, 1205.6, 605.9, 772.9, 928.4, 839.2, 642.9, 848.8, 745.6, 1095.2, 105.0, 540.4, 532.2, 667.9], [-250.5, -366.4, -279.8, -279.1, -231.3, -280.0, -213.7, -206.8, -260.4, -227.5, -188.5, -204.6, -197.2, -156.8, -135.4, -110.9, -93.8, -124.6, -140.7, -128.5, -156.1, -123.4, -81.7, -64.4, -69.4, -4.1, -53.3, -74.7, 27.5, 25.7, 90.7, 32.1, 106.4, 223.2, 189.8, 156.4, 29.8, 39.6, 136.6, 119.3, 400.2, 310.2, 478.2, 436.1, 349.0, 249.3, 674.4, 704.0, 757.4, 721.6, 677.4, -63.4, 637.2, 133.1, 436.6, 897.6, 932.2, 1055.9, 93.0, 814.1, 629.6, 993.3, 525.8, 516.2, 716.9, 688.7, 400.3, 359.1, 337.7, 780.5, 442.1, 575.8, 415.5, 134.1, 679.7, 310.8, 445.0, 327.1, 991.1, 404.7, 567.3, 811.3, 171.5, 711.0, 417.2, 327.8, -29.4, 524.2, 384.8, 676.3, 731.1, 299.3, 636.0, 316.9, 585.9, 1052.6, 1052.1, 469.3, 965.6, 1144.4], [-321.3, -255.8, -229.9, -375.2, -261.7, -245.5, -186.8, -219.7, -199.5, -139.3, -166.4, -138.3, -103.9, -87.8, -11.8, -170.8, 3.0, 33.9, 95.1, 25.3, 142.8, 239.3, 123.1, 166.2, 271.5, 399.0, 462.9, 559.7, 579.3, 549.6, 748.2, 784.0, 821.8, 715.7, 883.2, 880.2, 968.4, 952.3, 983.1, 669.4, 1036.3, 994.3, 1082.1, 1191.7, 1177.8, 1052.8, 937.2, 1216.4, 1035.8, 1115.5, 1162.6, 1271.8, 1236.9, 1263.2, 1327.4, 1376.4, 1357.7, 1285.3, 1348.6, 1379.6, 1216.1, 1481.8, 1458.5, 1479.5, 1564.8, 1513.9, 1522.6, 1572.3, 1582.5, 1614.6, 1656.9, 1686.2, 1643.2, 1654.2, 1702.2, 1707.4, 1530.1, 1666.9, 1676.5, 1691.7, 1734.8, 1849.6, 1819.3, 1727.9, 1680.6, 1813.7, 1779.5, 1838.3, 1977.4, 1938.7, 1900.4, 1934.5, 1897.3, 1943.0, 2021.8, 1939.3, 1959.8, 2024.0, 2017.4, 2031.8], [-311.6, -293.7, -358.3, -264.5, -164.8, -205.2, -178.3, -157.0, -170.6, -141.6, -64.1, -80.6, 2.6, -43.8, 10.7, 75.0, 78.8, 122.0, 105.9, 239.4, 306.9, 342.5, 443.0, 558.7, 398.0, 641.2, 489.7, 571.4, 728.5, 750.6, 804.8, 814.8, 883.8, 959.5, 981.1, 1016.5, 1031.3, 1071.1, 1022.0, 1187.8, 1181.3, 1241.0, 1177.3, 1030.6, 1305.2, 1342.3, 1410.5, 1455.8, 1306.4, 1491.5, 1130.1, 1481.4, 1649.5, 1631.3, 1710.8, 1735.9, 1737.4, 1867.8, 1321.2, 1801.3, 1588.5, 1784.0, 1865.5, 1933.8, 1927.9, 1863.1, 2008.5, 2031.7, 1865.5, 2019.2, 2080.0, 2185.5, 2165.9, 2100.2, 2197.0, 2207.8, 2202.4, 1842.8, 2257.0, 2301.0, 2235.2, 2344.5, 2321.7, 2202.0, 2251.5, 1985.7, 2275.2, 2308.7, 2280.4, 2204.9, 2400.2, 2377.9, 2489.1, 2396.1, 2382.1, 1761.2, 2200.3, 2563.8, 2595.2, 2190.7], [-346.2, -234.7, -334.3, -298.1, -298.6, -304.2, -199.5, -234.2, -119.0, -180.2, -143.4, -129.3, -54.7, -45.2, 2.2, 94.8, 198.5, 265.5, 344.6, 260.8, 513.6, 312.3, 53.3, 32.9, 33.7, 398.9, 82.2, 524.3, 95.2, 358.0, 461.6, 362.1, 571.3, 188.2, 388.1, 175.9, 361.7, 289.2, 345.9, 532.2, 561.2, 366.4, 631.3, 651.0, 652.6, 524.1, 767.2, 437.9, 141.0, 649.0, 380.2, 594.1, 794.6, 707.3, 632.5, 875.3, 785.6, 742.9, 783.7, 639.5, 991.6, 1004.8, 562.3, 865.4, 845.0, 997.7, 669.1, 745.3, 1042.1, 562.9, 700.1, 629.0, 855.5, 1030.4, 335.3, 1176.5, 218.5, 860.1, 1114.0, 1186.7, 1197.7, 785.5, 875.2, 777.5, 762.8, 940.4, 807.4, 771.8, 1291.1, 1298.1, 668.2, 886.9, 1330.9, 1069.2, 925.8, 1108.6, 542.7, 1084.7, 627.5, 328.7]], "span_s": [1222.9, 1187.4, 1174.6, 1276.9, 1204.2, 1188.4]}, "cross": {"returns": [[-344.9, -305.7, -296.0, -347.8, -289.3, -342.7, -290.5, -294.1, -318.6, -245.1, -203.4, -193.2, -234.3, -195.2, -175.1, -171.6, -170.3, -57.4, -91.8, -64.6, -22.1, 84.2, 114.6, 237.9, 227.0, 232.6, 289.4, 247.0, 395.3, 500.4, 605.3, 617.9, 723.7, 806.8, 744.1, 806.1, 847.3, 906.9, 1010.3, 1003.5, 827.1, 1012.1, 854.6, 1148.1, 1048.6, 1096.1, 895.3, 782.1, 964.6, 1229.8, 853.5, 1112.5, 1172.3, 1279.1, 1391.0, 1437.8, 845.0, 1216.3, 1396.7, 1366.9, 1452.9, 1438.6, 1584.6, 1429.5, 1710.9, 1407.0, 1616.5, 1612.5, 1675.2, 1725.1, 1245.6, 1670.5, 1370.8, 1734.5, 1826.3, 1891.1, 1924.4, 1990.8, 1884.1, 921.9, 1200.5, 1778.0, 1929.0, 1427.0, 1774.2, 1930.7, 1516.5, 1635.0, 1284.8, 1709.7, 1893.6, 2039.4, 2097.3, 2111.2, 1625.6, 2138.8, 2191.0, 2307.1, 1886.9, 2305.5], [-318.4, -325.3, -226.1, -334.7, -328.2, -278.8, -142.7, -192.6, -173.9, -185.5, -114.2, -68.9, -51.7, -4.6, -63.9, 14.0, 51.1, 47.8, 149.6, 203.8, 323.4, 333.1, 195.5, 445.6, 563.3, 414.8, 570.1, 616.8, 649.1, 603.5, 770.5, 747.0, 558.8, 553.8, 859.0, 733.7, 572.0, 745.4, 767.6, 494.8, 900.7, 993.1, 1090.2, 999.9, 966.5, 1116.6, 1156.5, 1144.1, 1156.0, 1120.5, 1197.1, 1260.6, 1257.6, 1275.2, 1325.8, 1326.3, 1033.6, 1354.7, 1385.6, 1448.0, 1378.6, 1537.9, 1430.3, 1569.3, 1617.8, 1668.9, 1615.1, 1726.4, 1594.7, 1696.3, 1704.7, 1716.9, 1783.8, 1752.2, 1769.0, 1803.0, 1852.1, 1890.6, 1919.8, 1915.4, 1945.9, 1979.7, 1502.7, 1898.4, 2037.0, 2045.7, 1983.4, 2004.4, 2113.4, 2029.4, 2097.1, 2149.8, 2146.0, 2141.2, 2113.4, 2168.1, 1786.5, 2281.4, 2151.1, 2232.8], [-249.8, -302.3, -271.4, -310.5, -237.5, -273.5, -237.9, -192.1, -306.9, -235.4, -198.1, -250.9, -219.5, -179.3, -216.9, -165.7, -171.3, -127.8, -173.9, -138.3, -109.0, -79.1, -113.8, -54.2, -60.5, 72.5, 52.2, 12.9, -24.0, 143.8, 131.9, 208.6, 196.5, 167.1, 310.4, 295.4, 287.5, 382.0, 390.3, 432.1, 432.1, 374.3, 276.1, 481.4, 519.8, 562.5, 537.3, 478.7, 590.7, 628.5, 661.0, 630.8, 608.8, 689.7, 635.3, 651.7, 624.1, 666.3, 655.1, 630.7, 796.0, 679.7, 774.3, 763.6, 785.7, 771.8, 771.0, 704.5, 709.7, 625.7, 695.9, 812.2, 796.2, 869.0, 866.0, 830.0, 841.6, 879.5, 835.2, 852.7, 879.5, 801.1, 866.8, 825.7, 829.7, 878.2, 937.0, 914.1, 961.6, 960.4, 947.3, 989.9, 918.9, 927.0, 939.7, 962.3, 1019.7, 852.8, 928.4, 978.0], [-283.3, -352.5, -238.5, -303.9, -313.2, -247.7, -239.7, -190.6, -169.6, -152.3, -102.9, -58.3, -53.9, -34.8, -56.0, -60.4, -28.5, 71.0, 13.9, 79.4, 73.6, 173.2, 58.7, 256.1, 291.7, 333.4, 440.4, 525.9, 525.7, 675.5, 631.9, 503.9, 756.7, 596.4, 557.2, 791.2, 838.8, 863.5, 985.0, 1036.7, 1001.2, 1076.9, 1043.3, 1097.3, 1147.6, 1231.5, 1213.8, 1330.9, 1319.5, 1223.1, 948.3, 1361.2, 1304.4, 1298.3, 1356.0, 1450.9, 1511.2, 1390.2, 1537.2, 1458.8, 1453.7, 1605.0, 1705.8, 1644.1, 1813.8, 1690.0, 1825.9, 1547.8, 1780.4, 1800.8, 1808.7, 1823.3, 1903.3, 1962.9, 1931.6, 1895.5, 2052.3, 2033.1, 1594.0, 2039.3, 2087.0, 2102.7, 1610.7, 2082.0, 2042.5, 2102.7, 2081.2, 2134.5, 1608.2, 2125.9, 2264.4, 2282.5, 2242.2, 2311.9, 2330.1, 1905.2, 2372.3, 2305.8, 2367.7, 2283.3], [-314.1, -235.5, -355.4, -281.3, -107.2, -202.2, -164.1, -121.2, -173.8, -85.6, -85.9, -57.5, 65.9, 45.2, 45.6, 28.3, 87.1, 173.8, 225.6, 204.8, 321.7, 292.1, 456.8, 387.3, 355.6, 385.1, 147.2, 120.6, 621.7, 684.4, 756.7, 632.8, 612.9, 805.5, 899.5, 594.3, 688.2, 887.2, 474.6, 718.8, 36.5, 928.7, 882.4, 782.0, 775.7, 1107.9, 1140.7, 1145.0, 1137.7, 681.9, 1200.8, 788.0, 1215.0, 819.7, 1045.5, 883.2, 1186.5, 908.1, 920.7, 1275.6, 1088.8, 855.6, 1352.6, 955.3, 864.6, 1100.0, 1251.3, 1184.8, 1351.0, 837.6, 1003.6, 1285.8, 1378.0, 1394.8, 1470.1, 878.7, 1331.6, 1347.6, 1447.7, 1510.3, 1528.0, 1489.1, 1558.4, 1137.7, 1189.3, 1179.0, 1077.9, 1058.6, 1676.5, 1541.5, 1159.3, 1238.6, 1664.4, 1688.9, 1778.0, 1656.7, 1314.3, 1757.4, 1863.7, 1751.4], [-270.0, -317.2, -328.2, -317.3, -298.3, -186.0, -194.5, -226.6, -219.0, -157.3, -161.2, -115.5, -44.8, -28.6, 49.7, 77.6, 107.8, 116.4, 192.8, 360.8, -24.1, 245.4, 325.3, 440.1, 285.9, 322.6, 82.2, 509.0, 411.9, 365.1, 386.6, 667.7, 701.9, 537.8, 853.9, 849.0, 981.4, 948.9, 637.9, 169.2, 747.9, 686.5, 640.2, 1065.4, 535.3, 815.4, 1067.4, 413.5, 1153.0, 958.2, 813.3, 977.4, 843.9, 1264.6, 424.6, 959.3, 791.2, 999.2, 1272.8, 1250.9, 1261.4, 1097.2, 1352.2, 1334.2, 1326.7, 1279.4, 1503.7, 1477.1, 1080.2, 1133.6, 1219.0, 1462.4, 1037.9, 991.1, 1510.6, 1190.2, 1458.3, 885.3, 1452.8, 1504.2, 1323.5, 1418.3, 1452.4, 1144.7, 1270.0, 1194.5, 1323.9, 1501.2, 1516.6, 1560.3, 1537.7, 886.2, 1177.6, 1021.9, 1212.7, 513.8, 1568.4, 644.0, 1321.1, 932.8]], "span_s": [2475.8, 2475.4, 2530.4, 3151.5, 3189.5, 3151.5]}} diff --git a/experiments/e43-cross-machine-training/results/ladder.tsv b/experiments/e43-cross-machine-training/results/ladder.tsv new file mode 100644 index 0000000..6e66c6c --- /dev/null +++ b/experiments/e43-cross-machine-training/results/ladder.tsv @@ -0,0 +1,61 @@ +rung payload_kib rep exchanges pack_ms rtt_ms unpack_ms wall_s exchanges_per_s +lo 0 1 1000 0.0016 0.0974 0.0019 0.111 8991.7 +ts 0 1 1000 0.0019 0.1076 0.0031 0.131 7628.7 +phys 0 1 1000 0.0058 2.6360 0.0202 2.749 363.7 +lo 48 1 1000 0.0059 0.1483 0.0037 0.189 5283.8 +ts 48 1 1000 0.0058 0.1876 0.0041 0.225 4445.6 +phys 48 1 1000 0.0640 8.2662 0.0489 8.762 114.1 +lo 184 1 1000 0.0250 0.2390 0.0031 0.371 2694.3 +ts 184 1 1000 0.0272 0.2829 0.0045 0.428 2335.7 +phys 184 1 1000 0.2371 19.4763 0.0515 20.853 48.0 +lo 588 1 1000 0.1226 0.3866 0.0039 0.824 1213.6 +ts 588 1 1000 0.1266 0.6995 0.0067 1.178 848.8 +phys 588 1 1000 1.5953 68.0037 0.0604 73.301 13.6 +phys 0 2 1000 0.0089 3.0039 0.0331 3.185 314.0 +ts 0 2 1000 0.0015 0.0901 0.0017 0.103 9722.6 +lo 0 2 1000 0.0020 0.1075 0.0033 0.137 7321.5 +phys 48 2 1000 0.0488 7.9971 0.0456 8.443 118.4 +ts 48 2 1000 0.0061 0.1813 0.0040 0.219 4561.6 +lo 48 2 1000 0.0055 0.1711 0.0029 0.202 4949.6 +phys 184 2 1000 0.1773 19.9575 0.0520 21.070 47.5 +ts 184 2 1000 0.0258 0.3591 0.0047 0.502 1994.0 +lo 184 2 1000 0.0262 0.3435 0.0047 0.488 2048.8 +phys 588 2 1000 1.7267 65.7984 0.0636 71.393 14.0 +ts 588 2 1000 0.1296 0.9870 0.0088 1.494 669.4 +lo 588 2 1000 0.1306 1.0271 0.0094 1.537 650.8 +lo 0 3 1000 0.0021 0.0984 0.0034 0.127 7844.0 +ts 0 3 1000 0.0020 0.1128 0.0035 0.141 7083.4 +phys 0 3 1000 0.0075 2.6058 0.0257 2.747 364.0 +lo 48 3 1000 0.0061 0.1574 0.0039 0.204 4905.1 +ts 48 3 1000 0.0054 0.1725 0.0029 0.203 4930.9 +phys 48 3 1000 0.0519 7.8099 0.0481 8.274 120.9 +lo 184 3 1000 0.0263 0.2661 0.0042 0.407 2456.0 +ts 184 3 1000 0.0264 0.3059 0.0047 0.449 2225.3 +phys 184 3 1000 0.2664 21.3771 0.0521 22.641 44.2 +lo 588 3 1000 0.1413 0.9472 0.0088 1.480 675.9 +ts 588 3 1000 0.1260 0.3789 0.0039 0.818 1221.9 +phys 588 3 1000 1.6748 63.2057 0.0628 68.898 14.5 +phys 0 4 1000 0.0122 3.4053 0.0380 3.630 275.5 +ts 0 4 1000 0.0015 0.0957 0.0019 0.109 9161.7 +lo 0 4 1000 0.0019 0.1030 0.0033 0.128 7814.9 +phys 48 4 1000 0.0791 9.4465 0.0582 10.047 99.5 +ts 48 4 1000 0.0061 0.1557 0.0040 0.202 4961.8 +lo 48 4 1000 0.0059 0.1820 0.0032 0.216 4631.2 +phys 184 4 1000 0.2691 23.0144 0.0580 24.556 40.7 +ts 184 4 1000 0.0237 0.1803 0.0023 0.303 3300.2 +lo 184 4 1000 0.0261 0.3178 0.0048 0.464 2156.4 +phys 588 4 1000 1.7631 61.9649 0.0596 67.910 14.7 +ts 588 4 1000 0.1300 0.5129 0.0054 0.992 1008.5 +lo 588 4 1000 0.1312 0.3930 0.0039 0.865 1156.2 +lo 0 5 1000 0.0019 0.0990 0.0032 0.123 8157.0 +ts 0 5 1000 0.0015 0.1075 0.0019 0.121 8273.1 +phys 0 5 1000 0.0080 2.8148 0.0262 2.965 337.3 +lo 48 5 1000 0.0061 0.1607 0.0038 0.205 4884.8 +ts 48 5 1000 0.0062 0.1600 0.0038 0.205 4870.2 +phys 48 5 1000 0.0561 8.0063 0.0487 8.488 117.8 +lo 184 5 1000 0.0261 0.2928 0.0038 0.434 2305.2 +ts 184 5 1000 0.0260 0.3792 0.0048 0.519 1927.7 +phys 184 5 1000 0.2857 26.0893 0.0604 27.541 36.3 +lo 588 5 1000 0.1360 1.0013 0.0073 1.535 651.6 +ts 588 5 1000 0.1348 0.9064 0.0071 1.421 703.5 +phys 588 5 1000 1.5906 100.0883 0.0547 105.308 9.5 diff --git a/experiments/e43-cross-machine-training/results/local-b.out b/experiments/e43-cross-machine-training/results/local-b.out new file mode 100644 index 0000000..99621a8 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b.out @@ -0,0 +1,18 @@ +arm: local ports 9780+seed +server: /home/guangzhao/zuogou/plugrl/e43-reg/../plugrl-server/.venv/bin/python (src /home/guangzhao/zuogou/plugrl/e43-reg/src) +client: /home/guangzhao/zuogou/plugrl/e43-reg/../plugrl-env-client/.venv/bin/python +out: /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b +steps: 409600 seeds: 3 4 5 +start 2026-09-28 18:23:56 +READY seed 3 port 9783 at 18:23:59 +READY seed 4 port 9784 at 18:24:04 +READY seed 5 port 9785 at 18:24:09 +seed 5 client rc=0 at 18:44:10 +seed 5 server rc=0 at 18:44:10 +seed 4 client rc=0 at 18:44:20 +seed 4 server rc=0 at 18:44:21 +seed 3 client rc=0 at 18:45:28 +seed 3 server rc=0 at 18:45:29 +end 2026-09-28 18:45:29 +failed seeds: 0 +ARM_DONE local diff --git a/experiments/e43-cross-machine-training/results/local-b/client-seed3.log b/experiments/e43-cross-machine-training/results/local-b/client-seed3.log new file mode 100644 index 0000000..8b4aab2 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b/client-seed3.log @@ -0,0 +1,52 @@ +2026-09-28 18:23:59.978 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 18:23:59.978 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 18:23:59.979 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 18:23:59.979 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 18:23:59.979 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 18:24:00.016 | INFO | __main__:main:83 - Starting env client exp_name=e43-local-seed3 output_dir=runs/e43-local-seed3 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 18:24:00.054 | INFO | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://127.0.0.1:9783... +2026-09-28 18:24:00.057 | INFO | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 18:24:30.061 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=10836 infer_calls=10836 feedback_calls=10836 infer_wait=27.607s infer_obs_pack=0.156s env_step=0.982s feedback_total=0.743s feedback_obs_pack=0.195s feedback_info_pack=0.032s effective_fps=367.47 +2026-09-28 18:25:00.063 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=20887 infer_calls=20887 feedback_calls=20887 infer_wait=55.322s infer_obs_pack=0.311s env_step=1.921s feedback_total=1.460s feedback_obs_pack=0.381s feedback_info_pack=0.064s effective_fps=353.93 +2026-09-28 18:25:30.064 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=31413 infer_calls=31413 feedback_calls=31413 infer_wait=82.947s infer_obs_pack=0.462s env_step=2.911s feedback_total=2.194s feedback_obs_pack=0.574s feedback_info_pack=0.099s effective_fps=354.90 +2026-09-28 18:26:00.065 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41367 infer_calls=41367 feedback_calls=41367 infer_wait=110.723s infer_obs_pack=0.610s env_step=3.834s feedback_total=2.887s feedback_obs_pack=0.754s feedback_info_pack=0.136s effective_fps=350.40 +2026-09-28 18:26:30.066 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=52087 infer_calls=52087 feedback_calls=52087 infer_wait=138.245s infer_obs_pack=0.766s env_step=4.867s feedback_total=3.662s feedback_obs_pack=0.955s feedback_info_pack=0.175s effective_fps=353.04 +2026-09-28 18:27:00.068 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=61911 infer_calls=61911 feedback_calls=61911 infer_wait=166.021s infer_obs_pack=0.911s env_step=5.789s feedback_total=4.348s feedback_obs_pack=1.137s feedback_info_pack=0.210s effective_fps=349.64 +2026-09-28 18:27:30.070 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=72721 infer_calls=72721 feedback_calls=72721 infer_wait=193.540s infer_obs_pack=1.066s env_step=6.833s feedback_total=5.113s feedback_obs_pack=1.340s feedback_info_pack=0.249s effective_fps=352.07 +2026-09-28 18:28:00.071 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=82767 infer_calls=82767 feedback_calls=82767 infer_wait=221.234s infer_obs_pack=1.215s env_step=7.804s feedback_total=5.819s feedback_obs_pack=1.524s feedback_info_pack=0.285s effective_fps=350.60 +2026-09-28 18:28:30.074 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=93395 infer_calls=93395 feedback_calls=93395 infer_wait=248.805s infer_obs_pack=1.370s env_step=8.813s feedback_total=6.585s feedback_obs_pack=1.723s feedback_info_pack=0.323s effective_fps=351.67 +2026-09-28 18:29:00.077 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=102758 infer_calls=102758 feedback_calls=102758 infer_wait=276.715s infer_obs_pack=1.509s env_step=9.688s feedback_total=7.236s feedback_obs_pack=1.887s feedback_info_pack=0.355s effective_fps=348.16 +2026-09-28 18:29:30.081 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=111709 infer_calls=111709 feedback_calls=111709 infer_wait=304.770s infer_obs_pack=1.634s env_step=10.492s feedback_total=7.858s feedback_obs_pack=2.041s feedback_info_pack=0.387s effective_fps=343.98 +2026-09-28 18:30:00.082 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=120599 infer_calls=120599 feedback_calls=120599 infer_wait=332.800s infer_obs_pack=1.760s env_step=11.301s feedback_total=8.484s feedback_obs_pack=2.206s feedback_info_pack=0.423s effective_fps=340.34 +2026-09-28 18:30:30.082 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=129313 infer_calls=129313 feedback_calls=129313 infer_wait=360.895s infer_obs_pack=1.879s env_step=12.095s feedback_total=9.070s feedback_obs_pack=2.356s feedback_info_pack=0.454s effective_fps=336.81 +2026-09-28 18:31:00.082 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=137012 infer_calls=137012 feedback_calls=137012 infer_wait=389.235s infer_obs_pack=1.989s env_step=12.778s feedback_total=9.596s feedback_obs_pack=2.497s feedback_info_pack=0.481s effective_fps=331.27 +2026-09-28 18:31:30.084 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=145585 infer_calls=145585 feedback_calls=145585 infer_wait=417.371s infer_obs_pack=2.107s env_step=13.543s feedback_total=10.182s feedback_obs_pack=2.647s feedback_info_pack=0.514s effective_fps=328.48 +2026-09-28 18:32:00.086 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=154883 infer_calls=154883 feedback_calls=154883 infer_wait=445.339s infer_obs_pack=2.240s env_step=14.390s feedback_total=10.809s feedback_obs_pack=2.811s feedback_info_pack=0.545s effective_fps=327.60 +2026-09-28 18:32:31.554 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163842 infer_calls=163842 feedback_calls=163842 infer_wait=474.868s infer_obs_pack=2.367s env_step=15.200s feedback_total=11.413s feedback_obs_pack=2.970s feedback_info_pack=0.577s effective_fps=325.18 +2026-09-28 18:33:01.555 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=173189 infer_calls=173189 feedback_calls=173189 infer_wait=502.800s infer_obs_pack=2.508s env_step=16.058s feedback_total=12.061s feedback_obs_pack=3.139s feedback_info_pack=0.611s effective_fps=324.67 +2026-09-28 18:33:31.557 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=183307 infer_calls=183307 feedback_calls=183307 infer_wait=530.506s infer_obs_pack=2.660s env_step=17.001s feedback_total=12.794s feedback_obs_pack=3.330s feedback_info_pack=0.646s effective_fps=325.61 +2026-09-28 18:34:01.558 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=192589 infer_calls=192589 feedback_calls=192589 infer_wait=558.506s infer_obs_pack=2.795s env_step=17.821s feedback_total=13.430s feedback_obs_pack=3.497s feedback_info_pack=0.679s effective_fps=325.02 +2026-09-28 18:34:31.559 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=202589 infer_calls=202589 feedback_calls=202589 infer_wait=586.296s infer_obs_pack=2.943s env_step=18.716s feedback_total=14.142s feedback_obs_pack=3.676s feedback_info_pack=0.718s effective_fps=325.66 +2026-09-28 18:35:01.560 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=212742 infer_calls=212742 feedback_calls=212742 infer_wait=614.073s infer_obs_pack=3.089s env_step=19.629s feedback_total=14.843s feedback_obs_pack=3.854s feedback_info_pack=0.754s effective_fps=326.47 +2026-09-28 18:35:31.562 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=222034 infer_calls=222034 feedback_calls=222034 infer_wait=642.025s infer_obs_pack=3.228s env_step=20.468s feedback_total=15.489s feedback_obs_pack=4.023s feedback_info_pack=0.792s effective_fps=325.94 +2026-09-28 18:36:01.564 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=232165 infer_calls=232165 feedback_calls=232165 infer_wait=669.835s infer_obs_pack=3.373s env_step=21.373s feedback_total=16.179s feedback_obs_pack=4.201s feedback_info_pack=0.826s effective_fps=326.64 +2026-09-28 18:36:31.565 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=241715 infer_calls=241715 feedback_calls=241715 infer_wait=697.786s infer_obs_pack=3.511s env_step=22.219s feedback_total=16.829s feedback_obs_pack=4.373s feedback_info_pack=0.858s effective_fps=326.49 +2026-09-28 18:37:01.568 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=251801 infer_calls=251801 feedback_calls=251801 infer_wait=725.561s infer_obs_pack=3.656s env_step=23.137s feedback_total=17.527s feedback_obs_pack=4.562s feedback_info_pack=0.896s effective_fps=327.06 +2026-09-28 18:37:31.569 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=261493 infer_calls=261493 feedback_calls=261493 infer_wait=753.487s infer_obs_pack=3.792s env_step=23.994s feedback_total=18.182s feedback_obs_pack=4.735s feedback_info_pack=0.930s effective_fps=327.09 +2026-09-28 18:38:01.839 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=270338 infer_calls=270338 feedback_calls=270338 infer_wait=781.827s infer_obs_pack=3.920s env_step=24.791s feedback_total=18.797s feedback_obs_pack=4.892s feedback_info_pack=0.964s effective_fps=325.97 +2026-09-28 18:38:31.840 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=279947 infer_calls=279947 feedback_calls=279947 infer_wait=809.729s infer_obs_pack=4.058s env_step=25.667s feedback_total=19.455s feedback_obs_pack=5.069s feedback_info_pack=1.001s effective_fps=325.93 +2026-09-28 18:39:01.843 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=289151 infer_calls=289151 feedback_calls=289151 infer_wait=837.653s infer_obs_pack=4.203s env_step=26.519s feedback_total=20.099s feedback_obs_pack=5.240s feedback_info_pack=1.038s effective_fps=325.45 +2026-09-28 18:39:31.843 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=298776 infer_calls=298776 feedback_calls=298776 infer_wait=865.480s infer_obs_pack=4.342s env_step=27.415s feedback_total=20.789s feedback_obs_pack=5.418s feedback_info_pack=1.073s effective_fps=325.45 +2026-09-28 18:40:01.845 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=307425 infer_calls=307425 feedback_calls=307425 infer_wait=893.604s infer_obs_pack=4.468s env_step=28.199s feedback_total=21.377s feedback_obs_pack=5.570s feedback_info_pack=1.109s effective_fps=324.41 +2026-09-28 18:40:31.847 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=317166 infer_calls=317166 feedback_calls=317166 infer_wait=921.444s infer_obs_pack=4.608s env_step=29.098s feedback_total=22.051s feedback_obs_pack=5.745s feedback_info_pack=1.146s effective_fps=324.57 +2026-09-28 18:41:01.849 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=326819 infer_calls=326819 feedback_calls=326819 infer_wait=949.230s infer_obs_pack=4.751s env_step=30.002s feedback_total=22.761s feedback_obs_pack=5.926s feedback_info_pack=1.183s effective_fps=324.63 +2026-09-28 18:41:33.888 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=335874 infer_calls=335874 feedback_calls=335874 infer_wait=979.235s infer_obs_pack=4.889s env_step=30.840s feedback_total=23.399s feedback_obs_pack=6.090s feedback_info_pack=1.217s effective_fps=323.47 +2026-09-28 18:42:03.888 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=345463 infer_calls=345463 feedback_calls=345463 infer_wait=1007.066s infer_obs_pack=5.029s env_step=31.725s feedback_total=24.099s feedback_obs_pack=6.269s feedback_info_pack=1.256s effective_fps=323.49 +2026-09-28 18:42:33.888 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=355420 infer_calls=355420 feedback_calls=355420 infer_wait=1034.994s infer_obs_pack=5.165s env_step=32.579s feedback_total=24.759s feedback_obs_pack=6.443s feedback_info_pack=1.289s effective_fps=323.85 +2026-09-28 18:43:05.006 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=364546 infer_calls=364546 feedback_calls=364546 infer_wait=1064.186s infer_obs_pack=5.293s env_step=33.368s feedback_total=25.366s feedback_obs_pack=6.602s feedback_info_pack=1.321s effective_fps=323.12 +2026-09-28 18:43:35.006 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=374744 infer_calls=374744 feedback_calls=374744 infer_wait=1091.972s infer_obs_pack=5.439s env_step=34.267s feedback_total=26.085s feedback_obs_pack=6.782s feedback_info_pack=1.356s effective_fps=323.68 +2026-09-28 18:44:05.007 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=384395 infer_calls=384395 feedback_calls=384395 infer_wait=1119.919s infer_obs_pack=5.572s env_step=35.111s feedback_total=26.717s feedback_obs_pack=6.948s feedback_info_pack=1.391s effective_fps=323.75 +2026-09-28 18:44:35.892 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=393218 infer_calls=393218 feedback_calls=393218 infer_wait=1148.805s infer_obs_pack=5.708s env_step=35.929s feedback_total=27.339s feedback_obs_pack=7.107s feedback_info_pack=1.424s effective_fps=322.90 +2026-09-28 18:45:05.894 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=402885 infer_calls=402885 feedback_calls=402885 infer_wait=1176.601s infer_obs_pack=5.855s env_step=36.825s feedback_total=28.036s feedback_obs_pack=7.284s feedback_info_pack=1.458s effective_fps=323.00 +2026-09-28 18:45:28.692 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=1195.004s infer_obs_pack=5.954s env_step=37.457s feedback_total=28.532s feedback_obs_pack=7.409s feedback_info_pack=1.482s effective_fps=323.30 +2026-09-28 18:45:28.692 | INFO | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/local-b/client-seed4.log b/experiments/e43-cross-machine-training/results/local-b/client-seed4.log new file mode 100644 index 0000000..9618156 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b/client-seed4.log @@ -0,0 +1,50 @@ +2026-09-28 18:24:04.971 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 18:24:04.971 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 18:24:04.972 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 18:24:04.972 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 18:24:04.972 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 18:24:05.011 | INFO | __main__:main:83 - Starting env client exp_name=e43-local-seed4 output_dir=runs/e43-local-seed4 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 18:24:05.050 | INFO | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://127.0.0.1:9784... +2026-09-28 18:24:05.054 | INFO | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 18:24:35.055 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=10882 infer_calls=10882 feedback_calls=10882 infer_wait=27.537s infer_obs_pack=0.165s env_step=1.005s feedback_total=0.770s feedback_obs_pack=0.208s feedback_info_pack=0.036s effective_fps=369.17 +2026-09-28 18:25:05.056 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=20966 infer_calls=20966 feedback_calls=20966 infer_wait=55.200s infer_obs_pack=0.333s env_step=1.956s feedback_total=1.492s feedback_obs_pack=0.406s feedback_info_pack=0.068s effective_fps=355.47 +2026-09-28 18:25:35.056 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=31618 infer_calls=31618 feedback_calls=31618 infer_wait=82.785s infer_obs_pack=0.494s env_step=2.948s feedback_total=2.250s feedback_obs_pack=0.613s feedback_info_pack=0.102s effective_fps=357.36 +2026-09-28 18:26:05.058 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41648 infer_calls=41648 feedback_calls=41648 infer_wait=110.511s infer_obs_pack=0.642s env_step=3.898s feedback_total=2.958s feedback_obs_pack=0.806s feedback_info_pack=0.134s effective_fps=352.92 +2026-09-28 18:26:35.058 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=52530 infer_calls=52530 feedback_calls=52530 infer_wait=138.003s infer_obs_pack=0.808s env_step=4.952s feedback_total=3.725s feedback_obs_pack=1.012s feedback_info_pack=0.168s effective_fps=356.17 +2026-09-28 18:27:05.061 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=62615 infer_calls=62615 feedback_calls=62615 infer_wait=165.701s infer_obs_pack=0.963s env_step=5.918s feedback_total=4.431s feedback_obs_pack=1.200s feedback_info_pack=0.201s effective_fps=353.73 +2026-09-28 18:27:35.062 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=73512 infer_calls=73512 feedback_calls=73512 infer_wait=193.169s infer_obs_pack=1.132s env_step=6.983s feedback_total=5.207s feedback_obs_pack=1.404s feedback_info_pack=0.235s effective_fps=356.01 +2026-09-28 18:28:05.064 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=83700 infer_calls=83700 feedback_calls=83700 infer_wait=220.782s infer_obs_pack=1.287s env_step=7.984s feedback_total=5.936s feedback_obs_pack=1.599s feedback_info_pack=0.269s effective_fps=354.68 +2026-09-28 18:28:36.566 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=94210 infer_calls=94210 feedback_calls=94210 infer_wait=249.852s infer_obs_pack=1.449s env_step=9.005s feedback_total=6.684s feedback_obs_pack=1.803s feedback_info_pack=0.304s effective_fps=352.86 +2026-09-28 18:29:06.568 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=104606 infer_calls=104606 feedback_calls=104606 infer_wait=277.573s infer_obs_pack=1.598s env_step=9.950s feedback_total=7.399s feedback_obs_pack=1.990s feedback_info_pack=0.336s effective_fps=352.78 +2026-09-28 18:29:38.128 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=114690 infer_calls=114690 feedback_calls=114690 infer_wait=306.894s infer_obs_pack=1.748s env_step=10.895s feedback_total=8.092s feedback_obs_pack=2.175s feedback_info_pack=0.371s effective_fps=350.06 +2026-09-28 18:30:08.131 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=124346 infer_calls=124346 feedback_calls=124346 infer_wait=334.775s infer_obs_pack=1.890s env_step=11.757s feedback_total=8.773s feedback_obs_pack=2.352s feedback_info_pack=0.402s effective_fps=348.12 +2026-09-28 18:30:38.132 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=134441 infer_calls=134441 feedback_calls=134441 infer_wait=362.648s infer_obs_pack=2.038s env_step=12.624s feedback_total=9.450s feedback_obs_pack=2.528s feedback_info_pack=0.432s effective_fps=347.61 +2026-09-28 18:31:08.133 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=143730 infer_calls=143730 feedback_calls=143730 infer_wait=390.599s infer_obs_pack=2.176s env_step=13.472s feedback_total=10.081s feedback_obs_pack=2.700s feedback_info_pack=0.460s effective_fps=345.23 +2026-09-28 18:31:38.133 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=154080 infer_calls=154080 feedback_calls=154080 infer_wait=418.412s infer_obs_pack=2.329s env_step=14.367s feedback_total=10.758s feedback_obs_pack=2.885s feedback_info_pack=0.492s effective_fps=345.57 +2026-09-28 18:32:08.762 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163842 infer_calls=163842 feedback_calls=163842 infer_wait=446.908s infer_obs_pack=2.472s env_step=15.258s feedback_total=11.425s feedback_obs_pack=3.069s feedback_info_pack=0.521s effective_fps=344.16 +2026-09-28 18:32:38.765 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=174175 infer_calls=174175 feedback_calls=174175 infer_wait=474.650s infer_obs_pack=2.624s env_step=16.194s feedback_total=12.135s feedback_obs_pack=3.258s feedback_info_pack=0.554s effective_fps=344.49 +2026-09-28 18:33:10.799 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=184322 infer_calls=184322 feedback_calls=184322 infer_wait=504.358s infer_obs_pack=2.781s env_step=17.145s feedback_total=12.876s feedback_obs_pack=3.454s feedback_info_pack=0.588s effective_fps=343.14 +2026-09-28 18:33:40.801 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=194297 infer_calls=194297 feedback_calls=194297 infer_wait=532.157s infer_obs_pack=2.927s env_step=18.038s feedback_total=13.590s feedback_obs_pack=3.638s feedback_info_pack=0.622s effective_fps=342.85 +2026-09-28 18:34:10.803 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=204464 infer_calls=204464 feedback_calls=204464 infer_wait=559.874s infer_obs_pack=3.082s env_step=18.963s feedback_total=14.316s feedback_obs_pack=3.831s feedback_info_pack=0.655s effective_fps=342.93 +2026-09-28 18:34:40.805 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=214063 infer_calls=214063 feedback_calls=214063 infer_wait=587.779s infer_obs_pack=3.223s env_step=19.823s feedback_total=14.971s feedback_obs_pack=4.008s feedback_info_pack=0.684s effective_fps=342.06 +2026-09-28 18:35:10.806 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=224253 infer_calls=224253 feedback_calls=224253 infer_wait=615.536s infer_obs_pack=3.375s env_step=20.733s feedback_total=15.684s feedback_obs_pack=4.208s feedback_info_pack=0.717s effective_fps=342.20 +2026-09-28 18:35:40.808 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=233872 infer_calls=233872 feedback_calls=233872 infer_wait=643.392s infer_obs_pack=3.522s env_step=21.603s feedback_total=16.373s feedback_obs_pack=4.393s feedback_info_pack=0.747s effective_fps=341.47 +2026-09-28 18:36:10.811 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=244437 infer_calls=244437 feedback_calls=244437 infer_wait=671.089s infer_obs_pack=3.681s env_step=22.545s feedback_total=17.110s feedback_obs_pack=4.584s feedback_info_pack=0.779s effective_fps=342.14 +2026-09-28 18:36:40.812 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=254045 infer_calls=254045 feedback_calls=254045 infer_wait=698.989s infer_obs_pack=3.828s env_step=23.408s feedback_total=17.759s feedback_obs_pack=4.766s feedback_info_pack=0.808s effective_fps=341.47 +2026-09-28 18:37:10.812 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=264523 infer_calls=264523 feedback_calls=264523 infer_wait=726.741s infer_obs_pack=3.974s env_step=24.331s feedback_total=18.453s feedback_obs_pack=4.956s feedback_info_pack=0.842s effective_fps=341.98 +2026-09-28 18:37:41.294 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=274434 infer_calls=274434 feedback_calls=274434 infer_wait=755.115s infer_obs_pack=4.114s env_step=25.191s feedback_total=19.112s feedback_obs_pack=5.134s feedback_info_pack=0.872s effective_fps=341.53 +2026-09-28 18:38:11.295 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=284755 infer_calls=284755 feedback_calls=284755 infer_wait=782.804s infer_obs_pack=4.266s env_step=26.119s feedback_total=19.838s feedback_obs_pack=5.330s feedback_info_pack=0.904s effective_fps=341.83 +2026-09-28 18:38:42.816 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=294914 infer_calls=294914 feedback_calls=294914 infer_wait=812.047s infer_obs_pack=4.422s env_step=27.054s feedback_total=20.538s feedback_obs_pack=5.519s feedback_info_pack=0.935s effective_fps=341.31 +2026-09-28 18:39:12.818 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=305226 infer_calls=305226 feedback_calls=305226 infer_wait=839.755s infer_obs_pack=4.574s env_step=28.004s feedback_total=21.253s feedback_obs_pack=5.710s feedback_info_pack=0.972s effective_fps=341.57 +2026-09-28 18:39:43.430 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=315394 infer_calls=315394 feedback_calls=315394 infer_wait=868.201s infer_obs_pack=4.721s env_step=28.900s feedback_total=21.925s feedback_obs_pack=5.894s feedback_info_pack=1.005s effective_fps=341.43 +2026-09-28 18:40:13.430 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=326185 infer_calls=326185 feedback_calls=326185 infer_wait=895.923s infer_obs_pack=4.876s env_step=29.841s feedback_total=22.646s feedback_obs_pack=6.087s feedback_info_pack=1.041s effective_fps=342.17 +2026-09-28 18:40:43.602 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=335874 infer_calls=335874 feedback_calls=335874 infer_wait=923.934s infer_obs_pack=5.017s env_step=30.736s feedback_total=23.329s feedback_obs_pack=6.270s feedback_info_pack=1.072s effective_fps=341.68 +2026-09-28 18:41:13.603 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=346344 infer_calls=346344 feedback_calls=346344 infer_wait=951.527s infer_obs_pack=5.176s env_step=31.725s feedback_total=24.085s feedback_obs_pack=6.468s feedback_info_pack=1.104s effective_fps=342.06 +2026-09-28 18:41:44.060 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=356354 infer_calls=356354 feedback_calls=356354 infer_wait=979.748s infer_obs_pack=5.327s env_step=32.646s feedback_total=24.793s feedback_obs_pack=6.654s feedback_info_pack=1.136s effective_fps=341.82 +2026-09-28 18:42:14.063 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=366901 infer_calls=366901 feedback_calls=366901 infer_wait=1007.464s infer_obs_pack=5.485s env_step=33.602s feedback_total=25.489s feedback_obs_pack=6.839s feedback_info_pack=1.169s effective_fps=342.25 +2026-09-28 18:42:44.753 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=376834 infer_calls=376834 feedback_calls=376834 infer_wait=1036.076s infer_obs_pack=5.627s env_step=34.458s feedback_total=26.133s feedback_obs_pack=7.015s feedback_info_pack=1.199s effective_fps=341.86 +2026-09-28 18:43:14.754 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=387692 infer_calls=387692 feedback_calls=387692 infer_wait=1063.754s infer_obs_pack=5.782s env_step=35.396s feedback_total=26.887s feedback_obs_pack=7.208s feedback_info_pack=1.234s effective_fps=342.54 +2026-09-28 18:43:44.755 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=397712 infer_calls=397712 feedback_calls=397712 infer_wait=1091.639s infer_obs_pack=5.923s env_step=36.252s feedback_total=27.558s feedback_obs_pack=7.387s feedback_info_pack=1.264s effective_fps=342.45 +2026-09-28 18:44:14.756 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=407965 infer_calls=407965 feedback_calls=407965 infer_wait=1119.432s infer_obs_pack=6.079s env_step=37.160s feedback_total=28.241s feedback_obs_pack=7.569s feedback_info_pack=1.299s effective_fps=342.56 +2026-09-28 18:44:20.903 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=1123.272s infer_obs_pack=6.105s env_step=37.324s feedback_total=28.360s feedback_obs_pack=7.599s feedback_info_pack=1.305s effective_fps=342.74 +2026-09-28 18:44:20.903 | INFO | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/local-b/client-seed5.log b/experiments/e43-cross-machine-training/results/local-b/client-seed5.log new file mode 100644 index 0000000..c13ec7e --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b/client-seed5.log @@ -0,0 +1,49 @@ +2026-09-28 18:24:09.967 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 18:24:09.968 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 18:24:09.968 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 18:24:09.968 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 18:24:09.969 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 18:24:10.008 | INFO | __main__:main:83 - Starting env client exp_name=e43-local-seed5 output_dir=runs/e43-local-seed5 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 18:24:10.044 | INFO | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://127.0.0.1:9785... +2026-09-28 18:24:10.047 | INFO | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 18:24:40.049 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=10959 infer_calls=10959 feedback_calls=10959 infer_wait=27.503s infer_obs_pack=0.161s env_step=1.029s feedback_total=0.784s feedback_obs_pack=0.214s feedback_info_pack=0.038s effective_fps=371.78 +2026-09-28 18:25:10.049 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=20957 infer_calls=20957 feedback_calls=20957 infer_wait=55.210s infer_obs_pack=0.323s env_step=1.964s feedback_total=1.507s feedback_obs_pack=0.406s feedback_info_pack=0.071s effective_fps=355.18 +2026-09-28 18:25:40.049 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=31565 infer_calls=31565 feedback_calls=31565 infer_wait=82.848s infer_obs_pack=0.479s env_step=2.932s feedback_total=2.253s feedback_obs_pack=0.603s feedback_info_pack=0.102s effective_fps=356.62 +2026-09-28 18:26:10.052 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=41769 infer_calls=41769 feedback_calls=41769 infer_wait=110.576s infer_obs_pack=0.632s env_step=3.880s feedback_total=2.960s feedback_obs_pack=0.793s feedback_info_pack=0.133s effective_fps=353.83 +2026-09-28 18:26:40.052 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=52622 infer_calls=52622 feedback_calls=52622 infer_wait=138.062s infer_obs_pack=0.792s env_step=4.941s feedback_total=3.731s feedback_obs_pack=1.003s feedback_info_pack=0.168s effective_fps=356.70 +2026-09-28 18:27:10.054 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=62547 infer_calls=62547 feedback_calls=62547 infer_wait=165.837s infer_obs_pack=0.938s env_step=5.875s feedback_total=4.423s feedback_obs_pack=1.188s feedback_info_pack=0.200s effective_fps=353.23 +2026-09-28 18:27:40.055 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=73590 infer_calls=73590 feedback_calls=73590 infer_wait=193.278s infer_obs_pack=1.102s env_step=6.952s feedback_total=5.216s feedback_obs_pack=1.397s feedback_info_pack=0.234s effective_fps=356.29 +2026-09-28 18:28:10.056 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=83801 infer_calls=83801 feedback_calls=83801 infer_wait=220.917s infer_obs_pack=1.254s env_step=7.934s feedback_total=5.942s feedback_obs_pack=1.591s feedback_info_pack=0.265s effective_fps=355.02 +2026-09-28 18:28:41.393 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=94210 infer_calls=94210 feedback_calls=94210 infer_wait=249.923s infer_obs_pack=1.406s env_step=8.913s feedback_total=6.663s feedback_obs_pack=1.787s feedback_info_pack=0.297s effective_fps=352.97 +2026-09-28 18:29:11.394 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=105053 infer_calls=105053 feedback_calls=105053 infer_wait=277.598s infer_obs_pack=1.555s env_step=9.881s feedback_total=7.388s feedback_obs_pack=1.976s feedback_info_pack=0.330s effective_fps=354.40 +2026-09-28 18:29:41.394 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=114927 infer_calls=114927 feedback_calls=114927 infer_wait=305.412s infer_obs_pack=1.696s env_step=10.790s feedback_total=8.064s feedback_obs_pack=2.155s feedback_info_pack=0.361s effective_fps=352.58 +2026-09-28 18:30:11.395 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=125328 infer_calls=125328 feedback_calls=125328 infer_wait=333.116s infer_obs_pack=1.848s env_step=11.743s feedback_total=8.796s feedback_obs_pack=2.342s feedback_info_pack=0.394s effective_fps=352.54 +2026-09-28 18:30:41.397 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=135252 infer_calls=135252 feedback_calls=135252 infer_wait=361.012s infer_obs_pack=1.989s env_step=12.621s feedback_total=9.454s feedback_obs_pack=2.519s feedback_info_pack=0.425s effective_fps=351.23 +2026-09-28 18:31:11.399 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=145896 infer_calls=145896 feedback_calls=145896 infer_wait=388.677s infer_obs_pack=2.151s env_step=13.601s feedback_total=10.171s feedback_obs_pack=2.709s feedback_info_pack=0.461s effective_fps=351.90 +2026-09-28 18:31:41.401 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=155692 infer_calls=155692 feedback_calls=155692 infer_wait=416.516s infer_obs_pack=2.285s env_step=14.498s feedback_total=10.847s feedback_obs_pack=2.884s feedback_info_pack=0.492s effective_fps=350.54 +2026-09-28 18:32:11.401 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=166194 infer_calls=166194 feedback_calls=166194 infer_wait=444.197s infer_obs_pack=2.435s env_step=15.468s feedback_total=11.560s feedback_obs_pack=3.073s feedback_info_pack=0.527s effective_fps=350.87 +2026-09-28 18:32:41.817 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=176130 infer_calls=176130 feedback_calls=176130 infer_wait=472.398s infer_obs_pack=2.578s env_step=16.390s feedback_total=12.253s feedback_obs_pack=3.260s feedback_info_pack=0.557s effective_fps=349.73 +2026-09-28 18:33:11.821 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=186744 infer_calls=186744 feedback_calls=186744 infer_wait=500.034s infer_obs_pack=2.731s env_step=17.381s feedback_total=12.999s feedback_obs_pack=3.454s feedback_info_pack=0.590s effective_fps=350.27 +2026-09-28 18:33:42.026 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=196610 infer_calls=196610 feedback_calls=196610 infer_wait=528.020s infer_obs_pack=2.876s env_step=18.306s feedback_total=13.695s feedback_obs_pack=3.634s feedback_info_pack=0.621s effective_fps=349.28 +2026-09-28 18:34:12.029 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=207346 infer_calls=207346 feedback_calls=207346 infer_wait=555.614s infer_obs_pack=3.031s env_step=19.308s feedback_total=14.437s feedback_obs_pack=3.830s feedback_info_pack=0.654s effective_fps=350.02 +2026-09-28 18:34:42.030 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=217307 infer_calls=217307 feedback_calls=217307 infer_wait=583.401s infer_obs_pack=3.179s env_step=20.226s feedback_total=15.111s feedback_obs_pack=4.010s feedback_info_pack=0.684s effective_fps=349.41 +2026-09-28 18:35:12.033 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=227741 infer_calls=227741 feedback_calls=227741 infer_wait=611.088s infer_obs_pack=3.332s env_step=21.176s feedback_total=15.850s feedback_obs_pack=4.208s feedback_info_pack=0.715s effective_fps=349.59 +2026-09-28 18:35:42.033 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=237644 infer_calls=237644 feedback_calls=237644 infer_wait=638.890s infer_obs_pack=3.477s env_step=22.086s feedback_total=16.543s feedback_obs_pack=4.386s feedback_info_pack=0.746s effective_fps=348.97 +2026-09-28 18:36:12.034 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=248175 infer_calls=248175 feedback_calls=248175 infer_wait=666.568s infer_obs_pack=3.629s env_step=23.056s feedback_total=17.269s feedback_obs_pack=4.579s feedback_info_pack=0.778s effective_fps=349.29 +2026-09-28 18:36:42.239 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=258050 infer_calls=258050 feedback_calls=258050 infer_wait=694.610s infer_obs_pack=3.772s env_step=23.948s feedback_total=17.949s feedback_obs_pack=4.768s feedback_info_pack=0.809s effective_fps=348.58 +2026-09-28 18:37:12.239 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=268537 infer_calls=268537 feedback_calls=268537 infer_wait=722.341s infer_obs_pack=3.925s env_step=24.877s feedback_total=18.667s feedback_obs_pack=4.959s feedback_info_pack=0.841s effective_fps=348.84 +2026-09-28 18:37:42.269 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=278530 infer_calls=278530 feedback_calls=278530 infer_wait=750.161s infer_obs_pack=4.071s env_step=25.798s feedback_total=19.355s feedback_obs_pack=5.146s feedback_info_pack=0.872s effective_fps=348.43 +2026-09-28 18:38:12.270 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=289222 infer_calls=289222 feedback_calls=289222 infer_wait=777.839s infer_obs_pack=4.224s env_step=26.773s feedback_total=20.083s feedback_obs_pack=5.340s feedback_info_pack=0.904s effective_fps=348.91 +2026-09-28 18:38:42.271 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=299013 infer_calls=299013 feedback_calls=299013 infer_wait=805.680s infer_obs_pack=4.364s env_step=27.682s feedback_total=20.758s feedback_obs_pack=5.525s feedback_info_pack=0.933s effective_fps=348.30 +2026-09-28 18:39:12.272 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=309063 infer_calls=309063 feedback_calls=309063 infer_wait=833.387s infer_obs_pack=4.511s env_step=28.631s feedback_total=21.484s feedback_obs_pack=5.718s feedback_info_pack=0.963s effective_fps=348.04 +2026-09-28 18:39:44.093 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=319490 infer_calls=319490 feedback_calls=319490 infer_wait=862.944s infer_obs_pack=4.654s env_step=29.586s feedback_total=22.184s feedback_obs_pack=5.902s feedback_info_pack=0.999s effective_fps=347.51 +2026-09-28 18:40:14.095 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=330414 infer_calls=330414 feedback_calls=330414 infer_wait=890.561s infer_obs_pack=4.808s env_step=30.587s feedback_total=22.929s feedback_obs_pack=6.097s feedback_info_pack=1.033s effective_fps=348.21 +2026-09-28 18:40:44.204 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=339970 infer_calls=339970 feedback_calls=339970 infer_wait=918.530s infer_obs_pack=4.948s env_step=31.488s feedback_total=23.593s feedback_obs_pack=6.273s feedback_info_pack=1.063s effective_fps=347.42 +2026-09-28 18:41:14.204 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=350242 infer_calls=350242 feedback_calls=350242 infer_wait=946.178s infer_obs_pack=5.103s env_step=32.482s feedback_total=24.325s feedback_obs_pack=6.468s feedback_info_pack=1.095s effective_fps=347.43 +2026-09-28 18:41:46.026 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=360450 infer_calls=360450 feedback_calls=360450 infer_wait=975.684s infer_obs_pack=5.254s env_step=33.462s feedback_total=25.038s feedback_obs_pack=6.659s feedback_info_pack=1.126s effective_fps=346.77 +2026-09-28 18:42:16.026 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=371218 infer_calls=371218 feedback_calls=371218 infer_wait=1003.380s infer_obs_pack=5.405s env_step=34.416s feedback_total=25.764s feedback_obs_pack=6.851s feedback_info_pack=1.157s effective_fps=347.27 +2026-09-28 18:42:46.028 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=380968 infer_calls=380968 feedback_calls=380968 infer_wait=1031.328s infer_obs_pack=5.541s env_step=35.270s feedback_total=26.404s feedback_obs_pack=7.019s feedback_info_pack=1.185s effective_fps=346.79 +2026-09-28 18:43:16.031 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=391707 infer_calls=391707 feedback_calls=391707 infer_wait=1059.103s infer_obs_pack=5.689s env_step=36.206s feedback_total=27.088s feedback_obs_pack=7.200s feedback_info_pack=1.215s effective_fps=347.23 +2026-09-28 18:43:46.031 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=401593 infer_calls=401593 feedback_calls=401593 infer_wait=1087.067s infer_obs_pack=5.822s env_step=37.054s feedback_total=27.723s feedback_obs_pack=7.370s feedback_info_pack=1.246s effective_fps=346.90 +2026-09-28 18:44:10.138 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=1107.268s infer_obs_pack=5.937s env_step=37.806s feedback_total=28.278s feedback_obs_pack=7.519s feedback_info_pack=1.270s effective_fps=347.33 +2026-09-28 18:44:10.138 | INFO | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/local-b/server-seed3.log b/experiments/e43-cross-machine-training/results/local-b/server-seed3.log new file mode 100644 index 0000000..a8deec8 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b/server-seed3.log @@ -0,0 +1,23 @@ +18:23:58|INFO|plugrl_server version: 0.1.0 +18:23:58|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +18:23:58|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +18:23:58|INFO|Seeded python, numpy and torch with 3. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +18:23:58|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed3 +18:23:59|INFO|Policy created... +18:23:59|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +18:23:59|INFO|Algorithm created: + +18:23:59|INFO|Agent Server is listening on 0.0.0.0:9783 +18:27:57|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed3/81921 +18:32:31|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed3/163841 +18:36:44|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed3/245761 +18:41:07|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed3/327681 +18:45:28|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed3/409601 +18:45:28|INFO|Stopping server as the algorithm signaled to stop. +18:45:28|INFO|Shutdown started: aborting pending infer requests. +18:45:28|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +18:45:28|INFO|Shutdown closing 1 websocket connection(s). +18:45:28|INFO|Shutdown interrupted an in-flight inference request from ('127.0.0.1', 44274). +18:45:28|INFO|WebSocket server closed. +18:45:28|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/local-b/server-seed4.log b/experiments/e43-cross-machine-training/results/local-b/server-seed4.log new file mode 100644 index 0000000..f040c62 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b/server-seed4.log @@ -0,0 +1,23 @@ +18:24:03|INFO|plugrl_server version: 0.1.0 +18:24:03|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +18:24:03|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +18:24:03|INFO|Seeded python, numpy and torch with 4. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +18:24:03|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed4 +18:24:04|INFO|Policy created... +18:24:04|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +18:24:04|INFO|Algorithm created: + +18:24:04|INFO|Agent Server is listening on 0.0.0.0:9784 +18:28:00|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed4/81921 +18:32:08|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed4/163841 +18:36:16|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed4/245761 +18:40:19|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed4/327681 +18:44:20|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed4/409601 +18:44:20|INFO|Stopping server as the algorithm signaled to stop. +18:44:20|INFO|Shutdown started: aborting pending infer requests. +18:44:20|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +18:44:20|INFO|Shutdown closing 1 websocket connection(s). +18:44:20|INFO|Shutdown interrupted an in-flight inference request from ('127.0.0.1', 52100). +18:44:20|INFO|WebSocket server closed. +18:44:20|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/local-b/server-seed5.log b/experiments/e43-cross-machine-training/results/local-b/server-seed5.log new file mode 100644 index 0000000..eb1c35b --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local-b/server-seed5.log @@ -0,0 +1,23 @@ +18:24:09|INFO|plugrl_server version: 0.1.0 +18:24:09|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +18:24:09|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +18:24:09|INFO|Seeded python, numpy and torch with 5. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +18:24:09|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed5 +18:24:09|INFO|Policy created... +18:24:09|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +18:24:09|INFO|Algorithm created: + +18:24:09|INFO|Agent Server is listening on 0.0.0.0:9785 +18:28:05|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed5/81921 +18:32:05|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed5/163841 +18:36:05|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed5/245761 +18:40:07|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed5/327681 +18:44:10|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local-b/fpo/fpo-policy/halfcheetah-local-seed5/409601 +18:44:10|INFO|Stopping server as the algorithm signaled to stop. +18:44:10|INFO|Shutdown started: aborting pending infer requests. +18:44:10|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +18:44:10|INFO|Shutdown closing 1 websocket connection(s). +18:44:10|INFO|Shutdown interrupted an in-flight inference request from ('127.0.0.1', 53650). +18:44:10|INFO|WebSocket server closed. +18:44:10|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/local.out b/experiments/e43-cross-machine-training/results/local.out new file mode 100644 index 0000000..0402878 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local.out @@ -0,0 +1,18 @@ +arm: local ports 9780+seed +server: /home/guangzhao/zuogou/plugrl/e43-reg/../plugrl-server/.venv/bin/python (src /home/guangzhao/zuogou/plugrl/e43-reg/src) +client: /home/guangzhao/zuogou/plugrl/e43-reg/../plugrl-env-client/.venv/bin/python +out: /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local +steps: 409600 seeds: 0 1 2 +start 2026-09-28 17:37:46 +READY seed 0 port 9780 at 17:37:49 +READY seed 1 port 9781 at 17:37:54 +READY seed 2 port 9782 at 17:37:59 +seed 2 client rc=0 at 17:57:46 +seed 2 server rc=0 at 17:57:46 +seed 1 client rc=0 at 17:57:53 +seed 1 server rc=0 at 17:57:54 +seed 0 client rc=0 at 17:58:24 +seed 0 server rc=0 at 17:58:25 +end 2026-09-28 17:58:25 +failed seeds: 0 +ARM_DONE local diff --git a/experiments/e43-cross-machine-training/results/local/client-seed0.log b/experiments/e43-cross-machine-training/results/local/client-seed0.log new file mode 100644 index 0000000..a630f83 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/client-seed0.log @@ -0,0 +1,50 @@ +2026-09-28 17:37:49.620 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 17:37:49.620 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 17:37:49.620 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 17:37:49.620 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 17:37:49.621 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 17:37:49.663 | INFO | __main__:main:83 - Starting env client exp_name=e43-local-seed0 output_dir=runs/e43-local-seed0 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 17:37:49.700 | INFO | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://127.0.0.1:9780... +2026-09-28 17:37:49.704 | INFO | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 17:38:19.706 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=10548 infer_calls=10548 feedback_calls=10548 infer_wait=27.657s infer_obs_pack=0.148s env_step=0.968s feedback_total=0.723s feedback_obs_pack=0.192s feedback_info_pack=0.033s effective_fps=357.61 +2026-09-28 17:38:50.110 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=20482 infer_calls=20482 feedback_calls=20482 infer_wait=55.824s infer_obs_pack=0.298s env_step=1.883s feedback_total=1.420s feedback_obs_pack=0.376s feedback_info_pack=0.066s effective_fps=344.66 +2026-09-28 17:39:20.112 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=30911 infer_calls=30911 feedback_calls=30911 infer_wait=83.454s infer_obs_pack=0.448s env_step=2.865s feedback_total=2.158s feedback_obs_pack=0.570s feedback_info_pack=0.100s effective_fps=347.61 +2026-09-28 17:39:50.758 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=40962 infer_calls=40962 feedback_calls=40962 infer_wait=111.770s infer_obs_pack=0.594s env_step=3.833s feedback_total=2.875s feedback_obs_pack=0.763s feedback_info_pack=0.133s effective_fps=344.01 +2026-09-28 17:40:20.759 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=51443 infer_calls=51443 feedback_calls=51443 infer_wait=139.327s infer_obs_pack=0.750s env_step=4.856s feedback_total=3.631s feedback_obs_pack=0.963s feedback_info_pack=0.168s effective_fps=346.27 +2026-09-28 17:40:51.183 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=61442 infer_calls=61442 feedback_calls=61442 infer_wait=167.434s infer_obs_pack=0.900s env_step=5.836s feedback_total=4.337s feedback_obs_pack=1.149s feedback_info_pack=0.199s effective_fps=344.20 +2026-09-28 17:41:21.184 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=71945 infer_calls=71945 feedback_calls=71945 infer_wait=194.938s infer_obs_pack=1.060s env_step=6.892s feedback_total=5.102s feedback_obs_pack=1.353s feedback_info_pack=0.232s effective_fps=345.90 +2026-09-28 17:41:51.286 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=81922 infer_calls=81922 feedback_calls=81922 infer_wait=222.734s infer_obs_pack=1.205s env_step=7.862s feedback_total=5.823s feedback_obs_pack=1.541s feedback_info_pack=0.263s effective_fps=344.76 +2026-09-28 17:42:21.287 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=92470 infer_calls=92470 feedback_calls=92470 infer_wait=250.296s infer_obs_pack=1.359s env_step=8.891s feedback_total=6.574s feedback_obs_pack=1.742s feedback_info_pack=0.295s effective_fps=346.17 +2026-09-28 17:42:51.690 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=102402 infer_calls=102402 feedback_calls=102402 infer_wait=278.411s infer_obs_pack=1.506s env_step=9.843s feedback_total=7.281s feedback_obs_pack=1.932s feedback_info_pack=0.326s effective_fps=344.74 +2026-09-28 17:43:21.692 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=112957 infer_calls=112957 feedback_calls=112957 infer_wait=305.985s infer_obs_pack=1.661s env_step=10.857s feedback_total=8.033s feedback_obs_pack=2.131s feedback_info_pack=0.359s effective_fps=345.92 +2026-09-28 17:43:52.413 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=122882 infer_calls=122882 feedback_calls=122882 infer_wait=334.481s infer_obs_pack=1.807s env_step=11.790s feedback_total=8.713s feedback_obs_pack=2.315s feedback_info_pack=0.390s effective_fps=344.41 +2026-09-28 17:44:22.415 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=133442 infer_calls=133442 feedback_calls=133442 infer_wait=362.069s infer_obs_pack=1.962s env_step=12.799s feedback_total=9.456s feedback_obs_pack=2.517s feedback_info_pack=0.422s effective_fps=345.45 +2026-09-28 17:44:52.619 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=143362 infer_calls=143362 feedback_calls=143362 infer_wait=390.005s infer_obs_pack=2.113s env_step=13.730s feedback_total=10.175s feedback_obs_pack=2.703s feedback_info_pack=0.453s effective_fps=344.60 +2026-09-28 17:45:22.620 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=153879 infer_calls=153879 feedback_calls=153879 infer_wait=417.622s infer_obs_pack=2.272s env_step=14.719s feedback_total=10.912s feedback_obs_pack=2.895s feedback_info_pack=0.485s effective_fps=345.39 +2026-09-28 17:45:53.594 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=163842 infer_calls=163842 feedback_calls=163842 infer_wait=446.275s infer_obs_pack=2.422s env_step=15.692s feedback_total=11.625s feedback_obs_pack=3.086s feedback_info_pack=0.517s effective_fps=344.20 +2026-09-28 17:46:23.595 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=174348 infer_calls=174348 feedback_calls=174348 infer_wait=473.821s infer_obs_pack=2.579s env_step=16.719s feedback_total=12.383s feedback_obs_pack=3.289s feedback_info_pack=0.551s effective_fps=344.90 +2026-09-28 17:46:54.684 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=184322 infer_calls=184322 feedback_calls=184322 infer_wait=502.527s infer_obs_pack=2.731s env_step=17.721s feedback_total=13.122s feedback_obs_pack=3.485s feedback_info_pack=0.583s effective_fps=343.82 +2026-09-28 17:47:24.685 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=194668 infer_calls=194668 feedback_calls=194668 infer_wait=530.078s infer_obs_pack=2.888s env_step=18.747s feedback_total=13.880s feedback_obs_pack=3.687s feedback_info_pack=0.618s effective_fps=344.18 +2026-09-28 17:47:56.136 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=204802 infer_calls=204802 feedback_calls=204802 infer_wait=559.127s infer_obs_pack=3.041s env_step=19.750s feedback_total=14.624s feedback_obs_pack=3.887s feedback_info_pack=0.651s effective_fps=343.32 +2026-09-28 17:48:26.137 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=215039 infer_calls=215039 feedback_calls=215039 infer_wait=586.760s infer_obs_pack=3.191s env_step=20.743s feedback_total=15.355s feedback_obs_pack=4.080s feedback_info_pack=0.683s effective_fps=343.49 +2026-09-28 17:48:57.624 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=225282 infer_calls=225282 feedback_calls=225282 infer_wait=615.895s infer_obs_pack=3.342s env_step=21.721s feedback_total=16.083s feedback_obs_pack=4.272s feedback_info_pack=0.715s effective_fps=342.87 +2026-09-28 17:49:27.627 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=235796 infer_calls=235796 feedback_calls=235796 infer_wait=643.478s infer_obs_pack=3.495s env_step=22.728s feedback_total=16.836s feedback_obs_pack=4.474s feedback_info_pack=0.747s effective_fps=343.46 +2026-09-28 17:49:59.580 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=245762 infer_calls=245762 feedback_calls=245762 infer_wait=673.188s infer_obs_pack=3.641s env_step=23.671s feedback_total=17.538s feedback_obs_pack=4.652s feedback_info_pack=0.777s effective_fps=342.27 +2026-09-28 17:50:29.582 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=255738 infer_calls=255738 feedback_calls=255738 infer_wait=700.968s infer_obs_pack=3.790s env_step=24.596s feedback_total=18.237s feedback_obs_pack=4.833s feedback_info_pack=0.806s effective_fps=342.08 +2026-09-28 17:50:59.582 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=265768 infer_calls=265768 feedback_calls=265768 infer_wait=728.769s infer_obs_pack=3.934s env_step=25.507s feedback_total=18.935s feedback_obs_pack=5.016s feedback_info_pack=0.837s effective_fps=341.98 +2026-09-28 17:51:29.583 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=274781 infer_calls=274781 feedback_calls=274781 infer_wait=756.752s infer_obs_pack=4.069s env_step=26.351s feedback_total=19.549s feedback_obs_pack=5.180s feedback_info_pack=0.865s effective_fps=340.61 +2026-09-28 17:51:59.584 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=285189 infer_calls=285189 feedback_calls=285189 infer_wait=784.387s infer_obs_pack=4.218s env_step=27.350s feedback_total=20.283s feedback_obs_pack=5.375s feedback_info_pack=0.898s effective_fps=341.04 +2026-09-28 17:52:30.716 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=294914 infer_calls=294914 feedback_calls=294914 infer_wait=813.254s infer_obs_pack=4.367s env_step=28.306s feedback_total=20.968s feedback_obs_pack=5.560s feedback_info_pack=0.929s effective_fps=340.20 +2026-09-28 17:53:00.721 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=305213 infer_calls=305213 feedback_calls=305213 infer_wait=840.854s infer_obs_pack=4.518s env_step=29.305s feedback_total=21.722s feedback_obs_pack=5.756s feedback_info_pack=0.964s effective_fps=340.49 +2026-09-28 17:53:32.784 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=315394 infer_calls=315394 feedback_calls=315394 infer_wait=870.534s infer_obs_pack=4.671s env_step=30.309s feedback_total=22.449s feedback_obs_pack=5.952s feedback_info_pack=0.996s effective_fps=339.88 +2026-09-28 17:54:02.785 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=325871 infer_calls=325871 feedback_calls=325871 infer_wait=898.106s infer_obs_pack=4.828s env_step=31.327s feedback_total=23.200s feedback_obs_pack=6.152s feedback_info_pack=1.030s effective_fps=340.35 +2026-09-28 17:54:34.547 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=335874 infer_calls=335874 feedback_calls=335874 infer_wait=927.514s infer_obs_pack=4.977s env_step=32.318s feedback_total=23.924s feedback_obs_pack=6.347s feedback_info_pack=1.064s effective_fps=339.70 +2026-09-28 17:55:04.550 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=346150 infer_calls=346150 feedback_calls=346150 infer_wait=955.174s infer_obs_pack=5.129s env_step=33.308s feedback_total=24.649s feedback_obs_pack=6.542s feedback_info_pack=1.096s effective_fps=339.94 +2026-09-28 17:55:34.551 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=356162 infer_calls=356162 feedback_calls=356162 infer_wait=982.899s infer_obs_pack=5.282s env_step=34.245s feedback_total=25.355s feedback_obs_pack=6.727s feedback_info_pack=1.129s effective_fps=339.92 +2026-09-28 17:56:04.551 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=365026 infer_calls=365026 feedback_calls=365026 infer_wait=1010.930s infer_obs_pack=5.409s env_step=35.062s feedback_total=25.967s feedback_obs_pack=6.886s feedback_info_pack=1.155s effective_fps=338.81 +2026-09-28 17:56:34.552 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=374947 infer_calls=374947 feedback_calls=374947 infer_wait=1038.729s infer_obs_pack=5.553s env_step=35.978s feedback_total=26.663s feedback_obs_pack=7.065s feedback_info_pack=1.186s effective_fps=338.73 +2026-09-28 17:57:04.553 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=384585 infer_calls=384585 feedback_calls=384585 infer_wait=1066.592s infer_obs_pack=5.693s env_step=36.873s feedback_total=27.329s feedback_obs_pack=7.244s feedback_info_pack=1.218s effective_fps=338.40 +2026-09-28 17:57:34.554 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=394046 infer_calls=394046 feedback_calls=394046 infer_wait=1094.430s infer_obs_pack=5.836s env_step=37.772s feedback_total=28.012s feedback_obs_pack=7.418s feedback_info_pack=1.248s effective_fps=337.93 +2026-09-28 17:58:04.555 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=403761 infer_calls=403761 feedback_calls=403761 infer_wait=1122.230s infer_obs_pack=5.976s env_step=38.696s feedback_total=28.706s feedback_obs_pack=7.595s feedback_info_pack=1.277s effective_fps=337.70 +2026-09-28 17:58:24.614 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=1138.156s infer_obs_pack=6.065s env_step=39.255s feedback_total=29.146s feedback_obs_pack=7.702s feedback_info_pack=1.300s effective_fps=337.78 +2026-09-28 17:58:24.615 | INFO | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/local/client-seed1.log b/experiments/e43-cross-machine-training/results/local/client-seed1.log new file mode 100644 index 0000000..42d077c --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/client-seed1.log @@ -0,0 +1,49 @@ +2026-09-28 17:37:54.620 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 17:37:54.620 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 17:37:54.621 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 17:37:54.621 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 17:37:54.621 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 17:37:54.665 | INFO | __main__:main:83 - Starting env client exp_name=e43-local-seed1 output_dir=runs/e43-local-seed1 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 17:37:54.701 | INFO | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://127.0.0.1:9781... +2026-09-28 17:37:54.703 | INFO | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 17:38:24.705 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=10819 infer_calls=10819 feedback_calls=10819 infer_wait=27.578s infer_obs_pack=0.155s env_step=0.996s feedback_total=0.763s feedback_obs_pack=0.204s feedback_info_pack=0.037s effective_fps=366.86 +2026-09-28 17:38:54.705 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=21007 infer_calls=21007 feedback_calls=21007 infer_wait=55.225s infer_obs_pack=0.317s env_step=1.957s feedback_total=1.496s feedback_obs_pack=0.401s feedback_info_pack=0.070s effective_fps=356.08 +2026-09-28 17:39:24.707 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=31819 infer_calls=31819 feedback_calls=31819 infer_wait=82.737s infer_obs_pack=0.476s env_step=3.003s feedback_total=2.256s feedback_obs_pack=0.605s feedback_info_pack=0.105s effective_fps=359.65 +2026-09-28 17:39:54.708 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=42031 infer_calls=42031 feedback_calls=42031 infer_wait=110.370s infer_obs_pack=0.625s env_step=3.987s feedback_total=2.989s feedback_obs_pack=0.798s feedback_info_pack=0.141s effective_fps=356.29 +2026-09-28 17:40:24.708 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=52808 infer_calls=52808 feedback_calls=52808 infer_wait=137.872s infer_obs_pack=0.780s env_step=5.041s feedback_total=3.758s feedback_obs_pack=1.004s feedback_info_pack=0.175s effective_fps=358.14 +2026-09-28 17:40:54.711 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=62993 infer_calls=62993 feedback_calls=62993 infer_wait=165.446s infer_obs_pack=0.934s env_step=6.067s feedback_total=4.499s feedback_obs_pack=1.208s feedback_info_pack=0.207s effective_fps=356.00 +2026-09-28 17:41:26.112 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=73730 infer_calls=73730 feedback_calls=73730 infer_wait=194.326s infer_obs_pack=1.098s env_step=7.128s feedback_total=5.271s feedback_obs_pack=1.419s feedback_info_pack=0.243s effective_fps=354.77 +2026-09-28 17:41:56.114 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=84435 infer_calls=84435 feedback_calls=84435 infer_wait=221.771s infer_obs_pack=1.259s env_step=8.211s feedback_total=6.053s feedback_obs_pack=1.630s feedback_info_pack=0.280s effective_fps=355.82 +2026-09-28 17:42:26.115 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=94533 infer_calls=94533 feedback_calls=94533 infer_wait=249.442s infer_obs_pack=1.409s env_step=9.176s feedback_total=6.783s feedback_obs_pack=1.826s feedback_info_pack=0.315s effective_fps=354.31 +2026-09-28 17:42:56.116 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=105371 infer_calls=105371 feedback_calls=105371 infer_wait=276.957s infer_obs_pack=1.564s env_step=10.213s feedback_total=7.546s feedback_obs_pack=2.030s feedback_info_pack=0.349s effective_fps=355.65 +2026-09-28 17:43:26.118 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=115015 infer_calls=115015 feedback_calls=115015 infer_wait=304.729s infer_obs_pack=1.705s env_step=11.145s feedback_total=8.227s feedback_obs_pack=2.212s feedback_info_pack=0.380s effective_fps=353.02 +2026-09-28 17:43:56.119 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=125408 infer_calls=125408 feedback_calls=125408 infer_wait=332.323s infer_obs_pack=1.865s env_step=12.151s feedback_total=8.975s feedback_obs_pack=2.408s feedback_info_pack=0.413s effective_fps=352.95 +2026-09-28 17:44:26.862 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=135170 infer_calls=135170 feedback_calls=135170 infer_wait=360.789s infer_obs_pack=2.017s env_step=13.098s feedback_total=9.680s feedback_obs_pack=2.595s feedback_info_pack=0.445s effective_fps=350.56 +2026-09-28 17:44:56.863 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=145609 infer_calls=145609 feedback_calls=145609 infer_wait=388.359s infer_obs_pack=2.177s env_step=14.117s feedback_total=10.428s feedback_obs_pack=2.796s feedback_info_pack=0.482s effective_fps=350.80 +2026-09-28 17:45:27.574 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=155650 infer_calls=155650 feedback_calls=155650 infer_wait=416.718s infer_obs_pack=2.327s env_step=15.098s feedback_total=11.156s feedback_obs_pack=2.992s feedback_info_pack=0.515s effective_fps=349.54 +2026-09-28 17:45:57.574 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=166228 infer_calls=166228 feedback_calls=166228 infer_wait=444.214s infer_obs_pack=2.485s env_step=16.147s feedback_total=11.920s feedback_obs_pack=3.200s feedback_info_pack=0.551s effective_fps=350.13 +2026-09-28 17:46:27.575 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=176131 infer_calls=176131 feedback_calls=176131 infer_wait=471.881s infer_obs_pack=2.632s env_step=17.126s feedback_total=12.637s feedback_obs_pack=3.391s feedback_info_pack=0.583s effective_fps=349.27 +2026-09-28 17:46:57.575 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=186734 infer_calls=186734 feedback_calls=186734 infer_wait=499.340s infer_obs_pack=2.788s env_step=18.201s feedback_total=13.412s feedback_obs_pack=3.596s feedback_info_pack=0.619s effective_fps=349.86 +2026-09-28 17:47:27.576 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=196661 infer_calls=196661 feedback_calls=196661 infer_wait=526.943s infer_obs_pack=2.946s env_step=19.213s feedback_total=14.144s feedback_obs_pack=3.787s feedback_info_pack=0.653s effective_fps=349.16 +2026-09-28 17:47:57.578 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=207390 infer_calls=207390 feedback_calls=207390 infer_wait=554.404s infer_obs_pack=3.110s env_step=20.279s feedback_total=14.931s feedback_obs_pack=4.003s feedback_info_pack=0.688s effective_fps=349.89 +2026-09-28 17:48:27.578 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=217394 infer_calls=217394 feedback_calls=217394 infer_wait=582.092s infer_obs_pack=3.259s env_step=21.241s feedback_total=15.643s feedback_obs_pack=4.191s feedback_info_pack=0.719s effective_fps=349.38 +2026-09-28 17:48:57.578 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=228241 infer_calls=228241 feedback_calls=228241 infer_wait=609.586s infer_obs_pack=3.421s env_step=22.295s feedback_total=16.414s feedback_obs_pack=4.396s feedback_info_pack=0.754s effective_fps=350.22 +2026-09-28 17:49:27.579 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=238217 infer_calls=238217 feedback_calls=238217 infer_wait=637.217s infer_obs_pack=3.570s env_step=23.268s feedback_total=17.161s feedback_obs_pack=4.593s feedback_info_pack=0.787s effective_fps=349.69 +2026-09-28 17:49:57.581 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=248654 infer_calls=248654 feedback_calls=248654 infer_wait=664.811s infer_obs_pack=3.723s env_step=24.285s feedback_total=17.912s feedback_obs_pack=4.794s feedback_info_pack=0.822s effective_fps=349.86 +2026-09-28 17:50:27.582 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=258417 infer_calls=258417 feedback_calls=258417 infer_wait=692.655s infer_obs_pack=3.864s env_step=25.190s feedback_total=18.587s feedback_obs_pack=4.972s feedback_info_pack=0.852s effective_fps=349.07 +2026-09-28 17:50:57.583 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=268648 infer_calls=268648 feedback_calls=268648 infer_wait=720.346s infer_obs_pack=4.017s env_step=26.159s feedback_total=19.311s feedback_obs_pack=5.166s feedback_info_pack=0.885s effective_fps=348.97 +2026-09-28 17:51:28.097 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=278530 infer_calls=278530 feedback_calls=278530 infer_wait=748.680s infer_obs_pack=4.158s env_step=27.075s feedback_total=19.988s feedback_obs_pack=5.343s feedback_info_pack=0.913s effective_fps=348.21 +2026-09-28 17:51:58.099 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=289126 infer_calls=289126 feedback_calls=289126 infer_wait=776.211s infer_obs_pack=4.321s env_step=28.111s feedback_total=20.756s feedback_obs_pack=5.553s feedback_info_pack=0.948s effective_fps=348.60 +2026-09-28 17:52:28.101 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=299118 infer_calls=299118 feedback_calls=299118 infer_wait=803.855s infer_obs_pack=4.469s env_step=29.107s feedback_total=21.480s feedback_obs_pack=5.746s feedback_info_pack=0.979s effective_fps=348.25 +2026-09-28 17:52:58.104 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=309680 infer_calls=309680 feedback_calls=309680 infer_wait=831.370s infer_obs_pack=4.633s env_step=30.137s feedback_total=22.258s feedback_obs_pack=5.955s feedback_info_pack=1.016s effective_fps=348.58 +2026-09-28 17:53:28.105 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=319740 infer_calls=319740 feedback_calls=319740 infer_wait=859.105s infer_obs_pack=4.782s env_step=31.089s feedback_total=22.948s feedback_obs_pack=6.141s feedback_info_pack=1.046s effective_fps=348.33 +2026-09-28 17:53:58.108 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=330645 infer_calls=330645 feedback_calls=330645 infer_wait=886.617s infer_obs_pack=4.945s env_step=32.118s feedback_total=23.733s feedback_obs_pack=6.346s feedback_info_pack=1.081s effective_fps=349.00 +2026-09-28 17:54:28.109 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=340455 infer_calls=340455 feedback_calls=340455 infer_wait=914.324s infer_obs_pack=5.093s env_step=33.082s feedback_total=24.444s feedback_obs_pack=6.537s feedback_info_pack=1.112s effective_fps=348.49 +2026-09-28 17:54:58.110 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=350968 infer_calls=350968 feedback_calls=350968 infer_wait=941.870s infer_obs_pack=5.250s env_step=34.112s feedback_total=25.203s feedback_obs_pack=6.740s feedback_info_pack=1.145s effective_fps=348.72 +2026-09-28 17:55:28.113 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=360712 infer_calls=360712 feedback_calls=360712 infer_wait=969.734s infer_obs_pack=5.388s env_step=35.012s feedback_total=25.863s feedback_obs_pack=6.915s feedback_info_pack=1.177s effective_fps=348.18 +2026-09-28 17:55:58.115 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=371124 infer_calls=371124 feedback_calls=371124 infer_wait=997.475s infer_obs_pack=5.537s env_step=35.959s feedback_total=26.569s feedback_obs_pack=7.106s feedback_info_pack=1.207s effective_fps=348.30 +2026-09-28 17:56:28.702 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=380930 infer_calls=380930 feedback_calls=380930 infer_wait=1025.907s infer_obs_pack=5.680s env_step=36.847s feedback_total=27.251s feedback_obs_pack=7.284s feedback_info_pack=1.237s effective_fps=347.66 +2026-09-28 17:56:58.703 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=391143 infer_calls=391143 feedback_calls=391143 infer_wait=1053.631s infer_obs_pack=5.831s env_step=37.799s feedback_total=27.964s feedback_obs_pack=7.475s feedback_info_pack=1.268s effective_fps=347.61 +2026-09-28 17:57:29.861 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=401410 infer_calls=401410 feedback_calls=401410 infer_wait=1082.405s infer_obs_pack=5.985s env_step=38.801s feedback_total=28.700s feedback_obs_pack=7.676s feedback_info_pack=1.301s effective_fps=347.27 +2026-09-28 17:57:53.865 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=1102.688s infer_obs_pack=6.106s env_step=39.583s feedback_total=29.288s feedback_obs_pack=7.829s feedback_info_pack=1.326s effective_fps=347.81 +2026-09-28 17:57:53.866 | INFO | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/local/client-seed2.log b/experiments/e43-cross-machine-training/results/local/client-seed2.log new file mode 100644 index 0000000..0aa9672 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/client-seed2.log @@ -0,0 +1,49 @@ +2026-09-28 17:37:59.617 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.classic.classic_env: pygame is not installed. Please install it with pip install "plugrl-env-client[classic]". +2026-09-28 17:37:59.617 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.atari.atari_env: Atari is not installed. Please install it with the 'atari' extra, e.g. 'pip install plugrl-env-client[atari]' +2026-09-28 17:37:59.618 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.d4rl.d4rl_env: d4rl is not installed. Please install it with pip install "plugrl-env-client[d4rl]". +2026-09-28 17:37:59.619 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.libero.libero_env: libero is not installed. Please install it with pip install "plugrl-env-client[libero]". +2026-09-28 17:37:59.619 | WARNING | plugrl_env_client.envs:_load_env_modules:27 - Skip loading env module plugrl_env_client.envs.robomimic.robomimic_env: Robomimic is not installed. Please install it with the 'robomimic' extra, e.g. 'pip install plugrl-env-client[robomimic]' +2026-09-28 17:37:59.661 | INFO | __main__:main:83 - Starting env client exp_name=e43-local-seed2 output_dir=runs/e43-local-seed2 recorder={'episode_freq': 0, 'thread0_only': True, 'record_video': False, 'video_fps': 30.0, 'record_full_rollout': False, 'record_obs_stats': True, 'record_episode_metrics': True, 'metric_window': 100} +2026-09-28 17:37:59.695 | INFO | plugrl_env_client.agent.websocket_env_client_agent:_wait_for_server:67 - Waiting for server at ws://127.0.0.1:9782... +2026-09-28 17:37:59.697 | INFO | plugrl_env_client.runner.run:report_server_metadata:56 - Server metadata: {'protocol_version': 1, 'server': 'plugrl-server', 'server_version': '0.1.0', 'algorithm': 'FPOAlgorithm', 'policy': 'FPOPolicy', 'action_dim': 6, 'action_horizon': 1} +2026-09-28 17:38:29.701 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=10830 infer_calls=10830 feedback_calls=10830 infer_wait=27.570s infer_obs_pack=0.154s env_step=0.988s feedback_total=0.780s feedback_obs_pack=0.203s feedback_info_pack=0.035s effective_fps=367.22 +2026-09-28 17:38:59.702 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=20998 infer_calls=20998 feedback_calls=20998 infer_wait=55.247s infer_obs_pack=0.315s env_step=1.939s feedback_total=1.494s feedback_obs_pack=0.396s feedback_info_pack=0.070s effective_fps=355.93 +2026-09-28 17:39:29.703 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=31802 infer_calls=31802 feedback_calls=31802 infer_wait=82.750s infer_obs_pack=0.476s env_step=2.970s feedback_total=2.279s feedback_obs_pack=0.604s feedback_info_pack=0.104s effective_fps=359.45 +2026-09-28 17:39:59.705 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=42189 infer_calls=42189 feedback_calls=42189 infer_wait=110.410s infer_obs_pack=0.625s env_step=3.941s feedback_total=3.005s feedback_obs_pack=0.799s feedback_info_pack=0.136s effective_fps=357.59 +2026-09-28 17:40:29.705 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=53115 infer_calls=53115 feedback_calls=53115 infer_wait=137.955s infer_obs_pack=0.783s env_step=4.969s feedback_total=3.762s feedback_obs_pack=1.004s feedback_info_pack=0.171s effective_fps=360.18 +2026-09-28 17:40:59.706 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=63517 infer_calls=63517 feedback_calls=63517 infer_wait=165.544s infer_obs_pack=0.934s env_step=5.979s feedback_total=4.509s feedback_obs_pack=1.203s feedback_info_pack=0.205s effective_fps=358.92 +2026-09-28 17:41:29.893 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=73730 infer_calls=73730 feedback_calls=73730 infer_wait=193.355s infer_obs_pack=1.087s env_step=6.974s feedback_total=5.235s feedback_obs_pack=1.399s feedback_info_pack=0.240s effective_fps=356.79 +2026-09-28 17:41:59.894 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=84679 infer_calls=84679 feedback_calls=84679 infer_wait=220.869s infer_obs_pack=1.250s env_step=8.014s feedback_total=5.999s feedback_obs_pack=1.603s feedback_info_pack=0.274s effective_fps=358.61 +2026-09-28 17:42:29.896 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=94802 infer_calls=94802 feedback_calls=94802 infer_wait=248.502s infer_obs_pack=1.402s env_step=9.013s feedback_total=6.729s feedback_obs_pack=1.794s feedback_info_pack=0.307s effective_fps=356.87 +2026-09-28 17:42:59.897 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=105670 infer_calls=105670 feedback_calls=105670 infer_wait=275.973s infer_obs_pack=1.566s env_step=10.077s feedback_total=7.500s feedback_obs_pack=1.999s feedback_info_pack=0.340s effective_fps=358.06 +2026-09-28 17:43:29.899 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=115758 infer_calls=115758 feedback_calls=115758 infer_wait=303.662s infer_obs_pack=1.719s env_step=11.046s feedback_total=8.214s feedback_obs_pack=2.188s feedback_info_pack=0.372s effective_fps=356.57 +2026-09-28 17:43:59.900 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=126568 infer_calls=126568 feedback_calls=126568 infer_wait=331.163s infer_obs_pack=1.884s env_step=12.088s feedback_total=8.989s feedback_obs_pack=2.391s feedback_info_pack=0.411s effective_fps=357.41 +2026-09-28 17:44:29.901 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=136704 infer_calls=136704 feedback_calls=136704 infer_wait=358.846s infer_obs_pack=2.037s env_step=13.059s feedback_total=9.703s feedback_obs_pack=2.579s feedback_info_pack=0.445s effective_fps=356.33 +2026-09-28 17:45:01.167 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=147458 infer_calls=147458 feedback_calls=147458 infer_wait=387.642s infer_obs_pack=2.194s env_step=14.098s feedback_total=10.462s feedback_obs_pack=2.780s feedback_info_pack=0.478s effective_fps=355.84 +2026-09-28 17:45:31.168 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=158187 infer_calls=158187 feedback_calls=158187 infer_wait=415.173s infer_obs_pack=2.354s env_step=15.117s feedback_total=11.237s feedback_obs_pack=2.983s feedback_info_pack=0.511s effective_fps=356.37 +2026-09-28 17:46:01.170 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=168278 infer_calls=168278 feedback_calls=168278 infer_wait=442.837s infer_obs_pack=2.502s env_step=16.092s feedback_total=11.955s feedback_obs_pack=3.174s feedback_info_pack=0.542s effective_fps=355.48 +2026-09-28 17:46:31.172 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=179246 infer_calls=179246 feedback_calls=179246 infer_wait=470.277s infer_obs_pack=2.666s env_step=17.166s feedback_total=12.737s feedback_obs_pack=3.380s feedback_info_pack=0.576s effective_fps=356.46 +2026-09-28 17:47:01.173 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=189378 infer_calls=189378 feedback_calls=189378 infer_wait=497.915s infer_obs_pack=2.822s env_step=18.164s feedback_total=13.455s feedback_obs_pack=3.571s feedback_info_pack=0.610s effective_fps=355.74 +2026-09-28 17:47:31.176 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=200087 infer_calls=200087 feedback_calls=200087 infer_wait=525.389s infer_obs_pack=2.984s env_step=19.228s feedback_total=14.227s feedback_obs_pack=3.778s feedback_info_pack=0.644s effective_fps=356.14 +2026-09-28 17:48:01.178 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=210298 infer_calls=210298 feedback_calls=210298 infer_wait=553.032s infer_obs_pack=3.140s env_step=20.199s feedback_total=14.952s feedback_obs_pack=3.973s feedback_info_pack=0.677s effective_fps=355.64 +2026-09-28 17:48:31.180 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=221028 infer_calls=221028 feedback_calls=221028 infer_wait=580.563s infer_obs_pack=3.304s env_step=21.227s feedback_total=15.717s feedback_obs_pack=4.178s feedback_info_pack=0.713s effective_fps=356.03 +2026-09-28 17:49:01.182 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=231283 infer_calls=231283 feedback_calls=231283 infer_wait=608.238s infer_obs_pack=3.456s env_step=22.193s feedback_total=16.435s feedback_obs_pack=4.370s feedback_info_pack=0.744s effective_fps=355.64 +2026-09-28 17:49:32.093 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=241666 infer_calls=241666 feedback_calls=241666 infer_wait=636.731s infer_obs_pack=3.609s env_step=23.197s feedback_total=17.186s feedback_obs_pack=4.568s feedback_info_pack=0.779s effective_fps=355.01 +2026-09-28 17:50:02.094 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=252055 infer_calls=252055 feedback_calls=252055 infer_wait=664.387s infer_obs_pack=3.771s env_step=24.166s feedback_total=17.919s feedback_obs_pack=4.762s feedback_info_pack=0.810s effective_fps=354.89 +2026-09-28 17:50:33.147 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=262146 infer_calls=262146 feedback_calls=262146 infer_wait=693.166s infer_obs_pack=3.921s env_step=25.114s feedback_total=18.625s feedback_obs_pack=4.953s feedback_info_pack=0.841s effective_fps=353.86 +2026-09-28 17:51:03.147 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=272677 infer_calls=272677 feedback_calls=272677 infer_wait=720.899s infer_obs_pack=4.068s env_step=26.065s feedback_total=19.322s feedback_obs_pack=5.140s feedback_info_pack=0.872s effective_fps=353.96 +2026-09-28 17:51:33.427 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=282626 infer_calls=282626 feedback_calls=282626 infer_wait=749.008s infer_obs_pack=4.209s env_step=26.958s feedback_total=20.018s feedback_obs_pack=5.325s feedback_info_pack=0.902s effective_fps=353.20 +2026-09-28 17:52:03.432 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=293529 infer_calls=293529 feedback_calls=293529 infer_wait=776.503s infer_obs_pack=4.371s env_step=28.002s feedback_total=20.798s feedback_obs_pack=5.532s feedback_info_pack=0.937s effective_fps=353.79 +2026-09-28 17:52:33.433 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=303446 infer_calls=303446 feedback_calls=303446 infer_wait=804.206s infer_obs_pack=4.519s env_step=28.948s feedback_total=21.524s feedback_obs_pack=5.721s feedback_info_pack=0.969s effective_fps=353.17 +2026-09-28 17:53:03.434 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=314149 infer_calls=314149 feedback_calls=314149 infer_wait=831.743s infer_obs_pack=4.684s env_step=29.963s feedback_total=22.289s feedback_obs_pack=5.923s feedback_info_pack=1.003s effective_fps=353.50 +2026-09-28 17:53:33.435 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=324067 infer_calls=324067 feedback_calls=324067 infer_wait=859.453s infer_obs_pack=4.832s env_step=30.908s feedback_total=23.009s feedback_obs_pack=6.113s feedback_info_pack=1.037s effective_fps=352.94 +2026-09-28 17:54:03.435 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=334910 infer_calls=334910 feedback_calls=334910 infer_wait=886.971s infer_obs_pack=4.991s env_step=31.944s feedback_total=23.780s feedback_obs_pack=6.321s feedback_info_pack=1.070s effective_fps=353.40 +2026-09-28 17:54:33.437 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=344839 infer_calls=344839 feedback_calls=344839 infer_wait=914.660s infer_obs_pack=5.141s env_step=32.907s feedback_total=24.496s feedback_obs_pack=6.507s feedback_info_pack=1.101s effective_fps=352.88 +2026-09-28 17:55:03.438 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=355405 infer_calls=355405 feedback_calls=355405 infer_wait=942.280s infer_obs_pack=5.298s env_step=33.886s feedback_total=25.241s feedback_obs_pack=6.700s feedback_info_pack=1.135s effective_fps=353.04 +2026-09-28 17:55:33.439 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=364952 infer_calls=364952 feedback_calls=364952 infer_wait=970.208s infer_obs_pack=5.435s env_step=34.748s feedback_total=25.884s feedback_obs_pack=6.870s feedback_info_pack=1.163s effective_fps=352.18 +2026-09-28 17:56:03.441 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=375284 infer_calls=375284 feedback_calls=375284 infer_wait=997.922s infer_obs_pack=5.583s env_step=35.697s feedback_total=26.586s feedback_obs_pack=7.055s feedback_info_pack=1.193s effective_fps=352.12 +2026-09-28 17:56:34.142 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=385026 infer_calls=385026 feedback_calls=385026 infer_wait=1026.421s infer_obs_pack=5.741s env_step=36.602s feedback_total=27.263s feedback_obs_pack=7.237s feedback_info_pack=1.222s effective_fps=351.29 +2026-09-28 17:57:04.143 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=395438 infer_calls=395438 feedback_calls=395438 infer_wait=1054.099s infer_obs_pack=5.892s env_step=37.563s feedback_total=28.004s feedback_obs_pack=7.422s feedback_info_pack=1.254s effective_fps=351.33 +2026-09-28 17:57:34.145 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Intermediate rollout timing summary: env_steps=405567 infer_calls=405567 feedback_calls=405567 infer_wait=1081.817s infer_obs_pack=6.042s env_step=38.518s feedback_total=28.711s feedback_obs_pack=7.609s feedback_info_pack=1.286s effective_fps=351.11 +2026-09-28 17:57:46.029 | INFO | plugrl_env_client.runner.rollout:log_timing_summary:98 - Final rollout timing summary: env_steps=409601 infer_calls=409601 feedback_calls=409601 infer_wait=1091.056s infer_obs_pack=6.102s env_step=38.899s feedback_total=28.982s feedback_obs_pack=7.684s feedback_info_pack=1.298s effective_fps=351.58 +2026-09-28 17:57:46.030 | INFO | plugrl_env_client.runner.run:run:156 - Server signalled the end of the run; collection stopped after 409/419 episodes. diff --git a/experiments/e43-cross-machine-training/results/local/client-summary-seed0.json b/experiments/e43-cross-machine-training/results/local/client-summary-seed0.json new file mode 100644 index 0000000..f8c860f --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/client-summary-seed0.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-local-seed0", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 1130.982177734375, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 1138.1556630530395, + "infer_obs_pack_s": 6.06455692043528, + "env_step_s": 39.254850561730564, + "feedback_s": 29.146010104566813, + "feedback_obs_pack_s": 7.702043684199452, + "feedback_info_pack_s": 1.299566077068448, + "collect_time_s": 1212.6210806397721, + "effective_fps": 337.78152676011274, + "infer_wait_frac": 0.9385913548959209, + "infer_obs_pack_frac": 0.005001197008084053, + "env_step_frac": 0.03237190181537989, + "feedback_frac": 0.02403554628061516 + } +} diff --git a/experiments/e43-cross-machine-training/results/local/client-summary-seed1.json b/experiments/e43-cross-machine-training/results/local/client-summary-seed1.json new file mode 100644 index 0000000..acd130d --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/client-summary-seed1.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-local-seed1", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 728.420166015625, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 1102.6878664772958, + "infer_obs_pack_s": 6.10606533754617, + "env_step_s": 39.583459712099284, + "feedback_s": 29.287589349318296, + "feedback_obs_pack_s": 7.829329504165798, + "feedback_info_pack_s": 1.3255081390962005, + "collect_time_s": 1177.6649808762595, + "effective_fps": 347.80774384174197, + "infer_wait_frac": 0.9363340885425872, + "infer_obs_pack_frac": 0.005184891659937837, + "env_step_frac": 0.033611816904538176, + "feedback_frac": 0.024869202892936853 + } +} diff --git a/experiments/e43-cross-machine-training/results/local/client-summary-seed2.json b/experiments/e43-cross-machine-training/results/local/client-summary-seed2.json new file mode 100644 index 0000000..c05cb92 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/client-summary-seed2.json @@ -0,0 +1,27 @@ +{ + "exp_name": "e43-local-seed2", + "process_id": 0, + "total_processes": null, + "completed_episodes": 409, + "total_episode_count": 409, + "metric_window": 100, + "mean_return": 577.3640747070312, + "mean_success_rate": 0.0, + "timing": { + "env_steps": 409601, + "infer_calls": 409601, + "feedback_calls": 409601, + "infer_wait_s": 1091.0561992097646, + "infer_obs_pack_s": 6.102110865525901, + "env_step_s": 38.89879705617204, + "feedback_s": 28.9821773073636, + "feedback_obs_pack_s": 7.684091416187584, + "feedback_info_pack_s": 1.2983896555379033, + "collect_time_s": 1165.0392844388261, + "effective_fps": 351.5769858329677, + "infer_wait_frac": 0.9364973471562398, + "infer_obs_pack_frac": 0.0052376867862143845, + "env_step_frac": 0.033388399494965304, + "feedback_frac": 0.02487656656258049 + } +} diff --git a/experiments/e43-cross-machine-training/results/local/server-seed0.log b/experiments/e43-cross-machine-training/results/local/server-seed0.log new file mode 100644 index 0000000..546b729 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/server-seed0.log @@ -0,0 +1,23 @@ +17:37:48|INFO|plugrl_server version: 0.1.0 +17:37:48|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +17:37:48|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +17:37:48|INFO|Seeded python, numpy and torch with 0. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +17:37:48|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed0 +17:37:48|INFO|Policy created... +17:37:48|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +17:37:48|INFO|Algorithm created: + +17:37:48|INFO|Agent Server is listening on 0.0.0.0:9780 +17:41:51|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed0/81921 +17:45:53|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed0/163841 +17:49:59|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed0/245761 +17:54:09|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed0/327681 +17:58:24|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed0/409601 +17:58:24|INFO|Stopping server as the algorithm signaled to stop. +17:58:24|INFO|Shutdown started: aborting pending infer requests. +17:58:24|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +17:58:24|INFO|Shutdown closing 1 websocket connection(s). +17:58:24|INFO|Shutdown interrupted an in-flight inference request from ('127.0.0.1', 36784). +17:58:24|INFO|WebSocket server closed. +17:58:24|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/local/server-seed1.log b/experiments/e43-cross-machine-training/results/local/server-seed1.log new file mode 100644 index 0000000..e2a4c99 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/server-seed1.log @@ -0,0 +1,23 @@ +17:37:53|INFO|plugrl_server version: 0.1.0 +17:37:53|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +17:37:53|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +17:37:53|INFO|Seeded python, numpy and torch with 1. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +17:37:53|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed1 +17:37:53|INFO|Policy created... +17:37:53|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +17:37:53|INFO|Algorithm created: + +17:37:53|INFO|Agent Server is listening on 0.0.0.0:9781 +17:41:49|INFO|Checkpoint saved at step 81921 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed1/81921 +17:45:51|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed1/163841 +17:49:50|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed1/245761 +17:53:50|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed1/327681 +17:57:53|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed1/409601 +17:57:53|INFO|Stopping server as the algorithm signaled to stop. +17:57:53|INFO|Shutdown started: aborting pending infer requests. +17:57:53|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +17:57:53|INFO|Shutdown closing 1 websocket connection(s). +17:57:53|INFO|Shutdown interrupted an in-flight inference request from ('127.0.0.1', 39242). +17:57:53|INFO|WebSocket server closed. +17:57:53|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/local/server-seed2.log b/experiments/e43-cross-machine-training/results/local/server-seed2.log new file mode 100644 index 0000000..1dbde60 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/local/server-seed2.log @@ -0,0 +1,23 @@ +17:37:58|INFO|plugrl_server version: 0.1.0 +17:37:58|INFO|Algorithm: fpo, Config: FPOAlgoConfig(global_steps=409600, buffer_size=4096, output_mode='u_but_supervise_as_eps', fpo_playground_trick=True, treat_truncated_as_done=False, discounting=0.995, reward_scaling=10.0, gae_lambda=0.95, batch_size=1024, num_updates_per_batch=16, learning_rate=0.0003, value_loss_coeff=0.25, clipping_epsilon=0.05, normalize_advantage=True, n_critic_warmup_itrs=0, max_policy_drift=0.0, n_samples_per_action=8, discretize_t_for_training=True, average_losses_before_exp=True, cfm_loss_steps=None, cfm_loss_dims=None, cfm_loss_sum_over_steps=False, ratio_per_sample=False, critic_learning_rate=None, adam_eps=1e-08, weight_decay=0.0, actor_adam_beta2=0.999, max_grad_norm=None, normalize_advantage_per_minibatch=False, cfm_loss_huber_delta=None, save_interval=20, policy_checkpoint_path=None, restore='all', master_weights_device=None) +17:37:58|INFO|Policy: fpo-policy, Config: FPOPolicyConfig(algo='fpo', device=device(type='cpu'), obs_dim=17, action_dim=6, flow_steps=10, timestep_embed_dim=8, action_horizon=1, feather_std=0.0, policy_mlp_output_scale=0.25, normalize_observations=True, freeze_obs_stats=False, hidden_dims=(32, 32, 32, 32), value_hidden_dims=(256, 256, 256, 256, 256), state_keys=('obs',)) +17:37:58|INFO|Seeded python, numpy and torch with 2. One env client is then reproducible; several are not, because batch composition depends on when their requests arrive. +17:37:58|INFO|Checkpoint Manager created: + at /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed2 +17:37:58|INFO|Policy created... +17:37:58|INFO|Initialized RolloutBuffer buffer_size=4096 action_shape=(4096, 1, 6) value_shape=(4096, 1) +17:37:58|INFO|Algorithm created: + +17:37:58|INFO|Agent Server is listening on 0.0.0.0:9782 +17:41:53|INFO|Checkpoint saved at step 81920 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed2/81920 +17:45:48|INFO|Checkpoint saved at step 163841 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed2/163841 +17:49:44|INFO|Checkpoint saved at step 245761 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed2/245761 +17:53:44|INFO|Checkpoint saved at step 327681 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed2/327681 +17:57:46|INFO|Checkpoint saved at step 409601 to /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/results/local/fpo/fpo-policy/halfcheetah-local-seed2/409601 +17:57:46|INFO|Stopping server as the algorithm signaled to stop. +17:57:46|INFO|Shutdown started: aborting pending infer requests. +17:57:46|INFO|Shutdown cleanup finished: pending_futures=1, drained_requests=1 +17:57:46|INFO|Shutdown closing 1 websocket connection(s). +17:57:46|INFO|Shutdown interrupted an in-flight inference request from ('127.0.0.1', 43114). +17:57:46|INFO|WebSocket server closed. +17:57:46|INFO|Scheduler task cancelled and cleaned up. diff --git a/experiments/e43-cross-machine-training/results/throughput.tsv b/experiments/e43-cross-machine-training/results/throughput.tsv new file mode 100644 index 0000000..f7cb3e7 --- /dev/null +++ b/experiments/e43-cross-machine-training/results/throughput.tsv @@ -0,0 +1,6 @@ +rep mib seconds mb_per_s +1 64.0 3.273 20.5 +2 64.0 3.724 18.0 +3 64.0 3.427 19.6 +4 64.0 4.224 15.9 +5 64.0 4.675 14.4 diff --git a/experiments/e43-cross-machine-training/results/verdicts.txt b/experiments/e43-cross-machine-training/results/verdicts.txt new file mode 100644 index 0000000..606ba2d --- /dev/null +++ b/experiments/e43-cross-machine-training/results/verdicts.txt @@ -0,0 +1,79 @@ +P1 both arms run end to end + local seed 0 HOLDS (100 iterations, 5 checkpoints, client rc 0) + local seed 1 HOLDS (100 iterations, 5 checkpoints, client rc 0) + local seed 2 HOLDS (100 iterations, 5 checkpoints, client rc 0) + cross seed 0 HOLDS (100 iterations, 5 checkpoints, client rc 0) + cross seed 1 HOLDS (100 iterations, 5 checkpoints, client rc 0) + cross seed 2 HOLDS (100 iterations, 5 checkpoints, client rc 0) + +V1 the arms are what they say + local seed 0 client log names 127.0.0.1: yes + local seed 1 client log names 127.0.0.1: yes + local seed 2 client log names 127.0.0.1: yes + cross seed 0 client log names 100.75.226.89: yes + cross seed 1 client log names 100.75.226.89: yes + cross seed 2 client log names 100.75.226.89: yes + six server configurations identical: yes + PASS + +status learns: iterations 91-100 at least +200 over iteration 1, on 2 of 3 + local seed 0 -292.9 -> 1262.0 (+1554.9) it50 462.3 + local seed 1 -324.9 -> 694.5 (+1019.5) it50 824.1 + local seed 2 -250.5 -> 725.3 (+975.8) it50 721.6 + cross seed 0 -344.9 -> 2059.6 (+2404.5) it50 1229.8 + cross seed 1 -318.4 -> 2126.7 (+2445.1) it50 1120.5 + cross seed 2 -249.8 -> 946.4 (+1196.2) it50 628.5 + +P2 the cross arm learns + 3 of 3 HOLDS + +P3 the local arm learns + 3 of 3 HOLDS + +P4 the cross arm's extra time, iteration 1 -> 100, against 1119 s (±25%) + seed 0 local 1223 s cross 2476 s extra 1253 s in + seed 1 local 1187 s cross 2475 s extra 1288 s in + seed 2 local 1175 s cross 2530 s extra 1356 s in + 3 of 3 HOLDS + +V2 ladder runs complete + every rung and payload has 5 valid runs: yes + +P5 lo and ts agree within 0.25 ms + 0 KiB lo 0.099 ts 0.107 |d| 0.008 + 48 KiB lo 0.161 ts 0.172 |d| 0.012 + 184 KiB lo 0.293 ts 0.306 |d| 0.013 + 588 KiB lo 0.947 ts 0.700 |d| 0.248 + HOLDS + +P6 phys = phys(states) + 2 x bytes / B, B = median throughput 18.0 MB/s (20.5, 18.0, 19.6, 15.9, 14.4) + 48 KiB predicted 8.28 ms measured 8.01 ms in + 184 KiB predicted 23.72 ms measured 21.38 ms in + 588 KiB predicted 69.72 ms measured 65.80 ms in + HOLDS + +reported: ladder medians, pack / rtt / unpack ms + lo 0 KiB 0.002 / 0.099 / 0.003 + lo 48 KiB 0.006 / 0.161 / 0.004 + lo 184 KiB 0.026 / 0.293 / 0.004 + lo 588 KiB 0.131 / 0.947 / 0.007 + ts 0 KiB 0.002 / 0.107 / 0.002 + ts 48 KiB 0.006 / 0.172 / 0.004 + ts 184 KiB 0.026 / 0.306 / 0.005 + ts 588 KiB 0.130 / 0.700 / 0.007 + phys 0 KiB 0.008 / 2.815 / 0.026 + phys 48 KiB 0.056 / 8.006 / 0.049 + phys 184 KiB 0.266 / 21.377 / 0.052 + phys 588 KiB 1.675 / 65.798 / 0.060 + +reported: env client timing per call (infer wait / env step / feedback send, ms) + local seed 0 2.779 / 0.096 / 0.071 + local seed 1 2.692 / 0.097 / 0.072 + local seed 2 2.664 / 0.095 / 0.071 + cross seed 0 4.968 / 0.497 / 0.405 + cross seed 1 4.959 / 0.497 / 0.404 + cross seed 2 5.078 / 0.496 / 0.409 + +reported: E10's ratio with phys at 184 KiB: 21.4 ms against pi0.5's 100 ms forward = 21% + +wrote /home/guangzhao/zuogou/plugrl/e43-reg/experiments/e43-cross-machine-training/summary.tsv diff --git a/experiments/e43-cross-machine-training/summary.tsv b/experiments/e43-cross-machine-training/summary.tsv new file mode 100644 index 0000000..2f40d0c --- /dev/null +++ b/experiments/e43-cross-machine-training/summary.tsv @@ -0,0 +1,7 @@ +arm seed first it50 last10 gain span_s +local 0 -292.9 462.3 1262.0 +1554.9 1222.9 +local 1 -324.9 824.1 694.5 +1019.5 1187.4 +local 2 -250.5 721.6 725.3 +975.8 1174.6 +cross 0 -344.9 1229.8 2059.6 +2404.5 2475.8 +cross 1 -318.4 1120.5 2126.7 +2445.1 2475.4 +cross 2 -249.8 628.5 946.4 +1196.2 2530.4 From e05a43d7b4b24f6fea019f922bb055fe4a8953ca Mon Sep 17 00:00:00 2001 From: tactino <18781106300@163.com> Date: Mon, 28 Sep 2026 21:43:10 -0400 Subject: [PATCH 5/5] exp: E43 scripts through ruff 0.12.12 (format, and an unused import) --- .../e43-cross-machine-training/amendment.py | 34 +++-- .../bench_client.py | 17 ++- .../e43-cross-machine-training/figure.py | 35 ++++-- .../e43-cross-machine-training/summarise.py | 116 ++++++++++++++---- 4 files changed, 157 insertions(+), 45 deletions(-) diff --git a/experiments/e43-cross-machine-training/amendment.py b/experiments/e43-cross-machine-training/amendment.py index 4f486d9..fcddcf4 100644 --- a/experiments/e43-cross-machine-training/amendment.py +++ b/experiments/e43-cross-machine-training/amendment.py @@ -18,14 +18,22 @@ HERE = pathlib.Path(__file__).resolve().parent R = pathlib.Path(sys.argv[1]).resolve() if len(sys.argv) > 1 else HERE / "results" -LAYOUT = {("local", s): "local" for s in (0, 1, 2)} | {("cross", s): "cross" for s in (0, 1, 2)} -LAYOUT |= {("local", s): "local-b" for s in (3, 4, 5)} | {("cross", s): "cross-b" for s in (3, 4, 5)} +LAYOUT = {("local", s): "local" for s in (0, 1, 2)} | { + ("cross", s): "cross" for s in (0, 1, 2) +} +LAYOUT |= {("local", s): "local-b" for s in (3, 4, 5)} | { + ("cross", s): "cross-b" for s in (3, 4, 5) +} def read(arm: str, seed: int): - run = R / LAYOUT[(arm, seed)] / "fpo" / "fpo-policy" / f"halfcheetah-{arm}-seed{seed}" - acc = EventAccumulator(str(sorted((run / "tensorboard").glob("events.*"))[-1]), - size_guidance={"scalars": 0}) + run = ( + R / LAYOUT[(arm, seed)] / "fpo" / "fpo-policy" / f"halfcheetah-{arm}-seed{seed}" + ) + acc = EventAccumulator( + str(sorted((run / "tensorboard").glob("events.*"))[-1]), + size_guidance={"scalars": 0}, + ) acc.Reload() r = acc.Scalars("rollout/reward") v = [e.value for e in r] @@ -41,7 +49,9 @@ def main() -> int: last[arm].append(last10) gains[arm].append(last10 - first) spans[(arm, seed)] = span - print(f"{seed:4d} {arm:5s} {n:10d} {first:6.0f} {last10:7.0f} {last10 - first:+7.0f} {span:8.0f}") + print( + f"{seed:4d} {arm:5s} {n:10d} {first:6.0f} {last10:7.0f} {last10 - first:+7.0f} {span:8.0f}" + ) print("\nstatus rule over six seeds (+200 over iteration 1)") for arm in ("local", "cross"): @@ -49,7 +59,9 @@ def main() -> int: print("\nextra time, cross minus local, iteration 1 -> 100 (P4 predicted 1,119 s)") for seed in range(6): - print(f" seed {seed}: {spans[('cross', seed)] - spans[('local', seed)]:.0f} s") + print( + f" seed {seed}: {spans[('cross', seed)] - spans[('local', seed)]:.0f} s" + ) lo, cr = last["local"], last["cross"] ml, mc = statistics.mean(lo), statistics.mean(cr) @@ -60,8 +72,12 @@ def main() -> int: print(f" local mean {ml:.0f} sd {sl:.0f} range {min(lo):.0f}-{max(lo):.0f}") print(f" cross mean {mc:.0f} sd {sc:.0f} range {min(cr):.0f}-{max(cr):.0f}") print(f" all six cross above all six local: {'yes' if separated else 'no'}") - print(f" means further apart ({abs(mc - ml):.0f}) than either arm's sd ({max(sl, sc):.0f}): {'yes' if apart else 'no'}") - print(f" -> {'a gap worth chasing' if separated or apart else 'read as seed variation'}") + print( + f" means further apart ({abs(mc - ml):.0f}) than either arm's sd ({max(sl, sc):.0f}): {'yes' if apart else 'no'}" + ) + print( + f" -> {'a gap worth chasing' if separated or apart else 'read as seed variation'}" + ) return 0 diff --git a/experiments/e43-cross-machine-training/bench_client.py b/experiments/e43-cross-machine-training/bench_client.py index b54f551..f14d1db 100644 --- a/experiments/e43-cross-machine-training/bench_client.py +++ b/experiments/e43-cross-machine-training/bench_client.py @@ -41,7 +41,12 @@ def encode_array(values, typestr: str, shape: tuple[int, ...]) -> dict: if (sys.byteorder == "little") != (order in "<|"): buf.byteswap() raw = buf.tobytes() - return {b"__ndarray__": True, b"data": raw, b"dtype": typestr, b"shape": list(shape)} + return { + b"__ndarray__": True, + b"data": raw, + b"dtype": typestr, + b"shape": list(shape), + } def decode_array(obj: dict) -> list: @@ -83,7 +88,10 @@ def run(host: str, port: int, steps: int, img: int, cameras: int) -> int: ) as ws: meta = msgpack.unpackb(ws.recv(), raw=False, strict_map_key=False) if meta.get("message_type") != METADATA: - print(f"expected {METADATA}, got {meta.get('message_type')!r}", file=sys.stderr) + print( + f"expected {METADATA}, got {meta.get('message_type')!r}", + file=sys.stderr, + ) return 1 start = time.perf_counter() for step in range(steps): @@ -106,7 +114,10 @@ def run(host: str, port: int, steps: int, img: int, cameras: int) -> int: return 1 action_msg = msgpack.unpackb(reply, raw=False, strict_map_key=False) if action_msg.get("message_type") != ACTION: - print(f"expected {ACTION}, got {action_msg.get('message_type')!r}", file=sys.stderr) + print( + f"expected {ACTION}, got {action_msg.get('message_type')!r}", + file=sys.stderr, + ) return 1 decode_array(action_msg["data"]["action"]) t3 = time.perf_counter() diff --git a/experiments/e43-cross-machine-training/figure.py b/experiments/e43-cross-machine-training/figure.py index 25958db..233b5c2 100644 --- a/experiments/e43-cross-machine-training/figure.py +++ b/experiments/e43-cross-machine-training/figure.py @@ -11,7 +11,6 @@ import json import pathlib -import statistics import sys HERE = pathlib.Path(__file__).resolve().parent @@ -27,11 +26,19 @@ def export(results: pathlib.Path) -> None: for arm in ("local", "cross"): data[arm] = {"returns": [], "span_s": []} for seed, suffix in LAYOUT: - run = results / f"{arm}{suffix}" / "fpo" / "fpo-policy" / f"halfcheetah-{arm}-seed{seed}" + run = ( + results + / f"{arm}{suffix}" + / "fpo" + / "fpo-policy" + / f"halfcheetah-{arm}-seed{seed}" + ) if not run.exists(): continue - acc = EventAccumulator(str(sorted((run / "tensorboard").glob("events.*"))[-1]), - size_guidance={"scalars": 0}) + acc = EventAccumulator( + str(sorted((run / "tensorboard").glob("events.*"))[-1]), + size_guidance={"scalars": 0}, + ) acc.Reload() r = acc.Scalars("rollout/reward") data[arm]["returns"].append([round(e.value, 1) for e in r]) @@ -65,12 +72,20 @@ def plot(out: pathlib.Path) -> None: for r in runs: ax.plot(x, r[:n], color=colour, linewidth=0.8, alpha=0.7) spans = [s / 60 for s in data[arm]["span_s"]] - ax.plot([], [], color=colour, linewidth=6, alpha=0.5, - label=f"{label} ({min(spans):.0f}-{max(spans):.0f} min)") + ax.plot( + [], + [], + color=colour, + linewidth=6, + alpha=0.5, + label=f"{label} ({min(spans):.0f}-{max(spans):.0f} min)", + ) ax.set_xlabel("iteration (4,096 steps each)") ax.set_ylabel("episode return") seeds = len(data["local"]["returns"]) - ax.set_title(f"fpo-policy · FPO · HalfCheetah-v5, {seeds} seeds per arm", fontsize=10) + ax.set_title( + f"fpo-policy · FPO · HalfCheetah-v5, {seeds} seeds per arm", fontsize=10 + ) for side in ("top", "right"): ax.spines[side].set_visible(False) ax.grid(axis="y", color="#e3e6f0", linewidth=0.6) @@ -82,6 +97,10 @@ def plot(out: pathlib.Path) -> None: if __name__ == "__main__": if sys.argv[1] == "export": - export(pathlib.Path(sys.argv[2]).resolve() if len(sys.argv) > 2 else HERE / "results") + export( + pathlib.Path(sys.argv[2]).resolve() + if len(sys.argv) > 2 + else HERE / "results" + ) else: plot(pathlib.Path(sys.argv[2])) diff --git a/experiments/e43-cross-machine-training/summarise.py b/experiments/e43-cross-machine-training/summarise.py index 51f5114..6b28ad1 100644 --- a/experiments/e43-cross-machine-training/summarise.py +++ b/experiments/e43-cross-machine-training/summarise.py @@ -29,7 +29,11 @@ GAIN = 200.0 TS_IP = "100.75.226.89" PREDICTED_EXTRA_S = 99 * 4096 * 2.76e-3 -IMAGE_BYTES = {48: 128 * 128 * 3, 184: 224 * 224 * 3 + 112 * 112 * 3, 588: 448 * 448 * 3} +IMAGE_BYTES = { + 48: 128 * 128 * 3, + 184: 224 * 224 * 3 + 112 * 112 * 3, + 588: 448 * 448 * 3, +} def read(p: pathlib.Path) -> str: @@ -43,17 +47,25 @@ def rewards(arm: str, seed: int): return run, [] acc = EventAccumulator(str(events[-1]), size_guidance={"scalars": 0}) acc.Reload() - return run, acc.Scalars("rollout/reward") if "rollout/reward" in acc.Tags()["scalars"] else [] + return run, acc.Scalars("rollout/reward") if "rollout/reward" in acc.Tags()[ + "scalars" + ] else [] def client_rc(arm: str, seed: int): - out = read(R / "local.out") if arm == "local" else read(R / "cross-clients" / "client_side.out") + out = ( + read(R / "local.out") + if arm == "local" + else read(R / "cross-clients" / "client_side.out") + ) m = re.search(rf"seed {seed} client rc=(\d+)", out) return int(m.group(1)) if m else None def client_log(arm: str, seed: int) -> str: - return read(R / ("local" if arm == "local" else "cross-clients") / f"client-seed{seed}.log") + return read( + R / ("local" if arm == "local" else "cross-clients") / f"client-seed{seed}.log" + ) def main() -> int: @@ -64,12 +76,22 @@ def main() -> int: for seed in SEEDS: run, r = rewards(arm, seed) log = read(R / arm / f"server-seed{seed}.log") - saves = [p for p in run.iterdir() if p.name.isdigit()] if run.exists() else [] + saves = ( + [p for p in run.iterdir() if p.name.isdigit()] if run.exists() else [] + ) rc = client_rc(arm, seed) - ok = len(r) >= ITERS and len(saves) >= 5 and bool(log) and "Traceback" not in log and rc == 0 + ok = ( + len(r) >= ITERS + and len(saves) >= 5 + and bool(log) + and "Traceback" not in log + and rc == 0 + ) p1 &= ok runs[(arm, seed)] = (r, log) - print(f" {arm:5s} seed {seed} {'HOLDS' if ok else 'FAILS'} ({len(r)} iterations, {len(saves)} checkpoints, client rc {rc})") + print( + f" {arm:5s} seed {seed} {'HOLDS' if ok else 'FAILS'} ({len(r)} iterations, {len(saves)} checkpoints, client rc {rc})" + ) print("\nV1 the arms are what they say") configs = set() @@ -80,13 +102,17 @@ def main() -> int: host = TS_IP if arm == "cross" else "127.0.0.1" connected = host in client_log(arm, seed) v1 &= connected - print(f" {arm:5s} seed {seed} client log names {host}: {'yes' if connected else 'NO'}") + print( + f" {arm:5s} seed {seed} client log names {host}: {'yes' if connected else 'NO'}" + ) same = len(configs) == 1 and None not in configs v1 &= same print(f" six server configurations identical: {'yes' if same else 'NO'}") print(f" {'PASS' if v1 else 'FAIL'}") - print(f"\nstatus learns: iterations 91-100 at least +{GAIN:.0f} over iteration 1, on 2 of 3") + print( + f"\nstatus learns: iterations 91-100 at least +{GAIN:.0f} over iteration 1, on 2 of 3" + ) gains, spans = {}, {} lines = ["arm\tseed\tfirst\tit50\tlast10\tgain\tspan_s"] for arm in ("local", "cross"): @@ -100,46 +126,78 @@ def main() -> int: first, last10 = v[0], statistics.mean(v[90:100]) gains[(arm, seed)] = last10 - first spans[(arm, seed)] = r[99].wall_time - r[0].wall_time - print(f" {arm:5s} seed {seed} {first:8.1f} -> {last10:8.1f} ({last10 - first:+.1f}) it50 {v[49]:.1f}") - lines.append(f"{arm}\t{seed}\t{first:.1f}\t{v[49]:.1f}\t{last10:.1f}\t{last10 - first:+.1f}\t{spans[(arm, seed)]:.1f}") + print( + f" {arm:5s} seed {seed} {first:8.1f} -> {last10:8.1f} ({last10 - first:+.1f}) it50 {v[49]:.1f}" + ) + lines.append( + f"{arm}\t{seed}\t{first:.1f}\t{v[49]:.1f}\t{last10:.1f}\t{last10 - first:+.1f}\t{spans[(arm, seed)]:.1f}" + ) ok_read = p1 and v1 - for name, arm in (("P2 the cross arm learns", "cross"), ("P3 the local arm learns", "local")): + for name, arm in ( + ("P2 the cross arm learns", "cross"), + ("P3 the local arm learns", "local"), + ): n = sum(gains[(arm, s)] >= GAIN for s in SEEDS) verdict = "NOT READ" if not ok_read else ("HOLDS" if n >= 2 else "FALSIFIED") print(f"\n{name}\n {n} of 3 {verdict}") - print(f"\nP4 the cross arm's extra time, iteration 1 -> 100, against {PREDICTED_EXTRA_S:.0f} s (±25%)") + print( + f"\nP4 the cross arm's extra time, iteration 1 -> 100, against {PREDICTED_EXTRA_S:.0f} s (±25%)" + ) within = 0 for seed in SEEDS: extra = spans[("cross", seed)] - spans[("local", seed)] hit = 0.75 * PREDICTED_EXTRA_S <= extra <= 1.25 * PREDICTED_EXTRA_S within += hit - print(f" seed {seed} local {spans[('local', seed)]:.0f} s cross {spans[('cross', seed)]:.0f} s extra {extra:.0f} s {'in' if hit else 'OUT'}") - print(f" {within} of 3 {'NOT READ' if not ok_read else ('HOLDS' if within >= 2 else 'FALSIFIED')}") + print( + f" seed {seed} local {spans[('local', seed)]:.0f} s cross {spans[('cross', seed)]:.0f} s extra {extra:.0f} s {'in' if hit else 'OUT'}" + ) + print( + f" {within} of 3 {'NOT READ' if not ok_read else ('HOLDS' if within >= 2 else 'FALSIFIED')}" + ) print("\nV2 ladder runs complete") - rows = list(csv.DictReader(open(R / "ladder.tsv", encoding="utf-8"), delimiter="\t")) + rows = list( + csv.DictReader(open(R / "ladder.tsv", encoding="utf-8"), delimiter="\t") + ) cells = {} for row in rows: if int(row["exchanges"]) == 1000: cells.setdefault((row["rung"], int(row["payload_kib"])), []).append(row) - v2 = all(len(cells.get((rung, k), [])) == 5 for rung in ("lo", "ts", "phys") for k in (0, 48, 184, 588)) + v2 = all( + len(cells.get((rung, k), [])) == 5 + for rung in ("lo", "ts", "phys") + for k in (0, 48, 184, 588) + ) print(f" every rung and payload has 5 valid runs: {'yes' if v2 else 'NO'}") def med(rung: str, k: int, field: str = "rtt_ms") -> float: - return statistics.median(float(x[field]) for x in cells.get((rung, k), [])) if cells.get((rung, k)) else float("nan") + return ( + statistics.median(float(x[field]) for x in cells.get((rung, k), [])) + if cells.get((rung, k)) + else float("nan") + ) print("\nP5 lo and ts agree within 0.25 ms") p5 = True for k in (0, 48, 184, 588): d = abs(med("ts", k) - med("lo", k)) p5 &= d <= 0.25 - print(f" {k:3d} KiB lo {med('lo', k):.3f} ts {med('ts', k):.3f} |d| {d:.3f}") + print( + f" {k:3d} KiB lo {med('lo', k):.3f} ts {med('ts', k):.3f} |d| {d:.3f}" + ) print(f" {'NOT READ' if not v2 else ('HOLDS' if p5 else 'FALSIFIED')}") - tp = [float(x["mb_per_s"]) for x in csv.DictReader(open(R / "throughput.tsv", encoding="utf-8"), delimiter="\t")] + tp = [ + float(x["mb_per_s"]) + for x in csv.DictReader( + open(R / "throughput.tsv", encoding="utf-8"), delimiter="\t" + ) + ] b = statistics.median(tp) * 1e6 - print(f"\nP6 phys = phys(states) + 2 x bytes / B, B = median throughput {b / 1e6:.1f} MB/s ({', '.join(f'{x:.1f}' for x in tp)})") + print( + f"\nP6 phys = phys(states) + 2 x bytes / B, B = median throughput {b / 1e6:.1f} MB/s ({', '.join(f'{x:.1f}' for x in tp)})" + ) p6 = True base = med("phys", 0) for k, nbytes in IMAGE_BYTES.items(): @@ -147,14 +205,20 @@ def med(rung: str, k: int, field: str = "rtt_ms") -> float: got = med("phys", k) hit = 0.75 * pred <= got <= 1.25 * pred p6 &= hit - print(f" {k:3d} KiB predicted {pred:6.2f} ms measured {got:6.2f} ms {'in' if hit else 'OUT'}") + print( + f" {k:3d} KiB predicted {pred:6.2f} ms measured {got:6.2f} ms {'in' if hit else 'OUT'}" + ) print(f" {'NOT READ' if not v2 else ('HOLDS' if p6 else 'FALSIFIED')}") print("\nreported: ladder medians, pack / rtt / unpack ms") for rung in ("lo", "ts", "phys"): for k in (0, 48, 184, 588): - print(f" {rung:4s} {k:3d} KiB {med(rung, k, 'pack_ms'):.3f} / {med(rung, k):.3f} / {med(rung, k, 'unpack_ms'):.3f}") - print("\nreported: env client timing per call (infer wait / env step / feedback send, ms)") + print( + f" {rung:4s} {k:3d} KiB {med(rung, k, 'pack_ms'):.3f} / {med(rung, k):.3f} / {med(rung, k, 'unpack_ms'):.3f}" + ) + print( + "\nreported: env client timing per call (infer wait / env step / feedback send, ms)" + ) for arm, d in (("local", R / "local"), ("cross", R / "cross-clients")): for seed in SEEDS: p = d / f"client-summary-seed{seed}.json" @@ -166,7 +230,9 @@ def med(rung: str, k: int, field: str = "rtt_ms") -> float: f" {arm:5s} seed {seed} {1000 * t['infer_wait_s'] / t['infer_calls']:.3f} / " f"{1000 * t['env_step_s'] / t['env_steps']:.3f} / {1000 * t['feedback_s'] / t['feedback_calls']:.3f}" ) - print(f"\nreported: E10's ratio with phys at 184 KiB: {med('phys', 184):.1f} ms against pi0.5's 100 ms forward = {med('phys', 184) / 100:.0%}") + print( + f"\nreported: E10's ratio with phys at 184 KiB: {med('phys', 184):.1f} ms against pi0.5's 100 ms forward = {med('phys', 184) / 100:.0%}" + ) (HERE / "summary.tsv").write_text("\n".join(lines) + "\n", encoding="utf-8") print(f"\nwrote {HERE / 'summary.tsv'}")