Remote Services and Parallel Runs#
By default, RPent starts and stops the environment, VLA, and SAM3 services with each LIBERO run. Keep that default for single-machine use. Configure external endpoints only when services live on different hosts, or when you want to reuse VLA and SAM3 models across tasks.
Three flags set the endpoints: --env-endpoint for the LIBERO
environment, --vla-endpoint for the Pi0.5 VLA, and --sam3-endpoint
for SAM3. Each takes [protocol://]HOST:PORT — HTTP when the protocol is
omitted, or socket:// for socket RPC.
Dashboard Sessions do not support --env-endpoint because every TaskRun
uses a fresh environment service. --vla-endpoint and --sam3-endpoint
remain available in Dashboard mode.
LIBERO Environment Service#
One environment service is pinned to a suite, task, seed, and max episode steps; those values must match the RPent client exactly. On the env host:
export LIBERO_TYPE=pro
python -m robots.libero.env_server \
--suite libero_object_swap --task 2 --seed 0 \
--max-episode-steps 10000 \
--cuda-device 0 \
--transport http --host 0.0.0.0 --port ENV_PORT
The environment service is task-bound. To change any of those parameters, stop the old service and start a new one.
Pi0.5 VLA Service#
On the VLA host, set the checkpoint path and start the HTTP service:
export PI05_CHECKPOINT_PATH=/path/to/rlinf-pi05-libero-130-fullshot-sft
python -m rpent.robots.components.pi05_vla_server \
--embodiment libero \
--cuda-device 0 \
--transport http --host 0.0.0.0 --port VLA_PORT
The VLA service loads the model once and can be reused by multiple RPent runs.
APXInf VLA Service (Optional)#
Use the APXInf adapter in place of the Pi0.5 service. Follow the
APXinf-robo installation instructions
in an environment with RPent installed. The libero and serve extras in
the upstream instructions are not required for this RPent RPC endpoint. The
planner and environment can keep their existing LIBERO installation, including
its OpenPI dependency.
Prepare a compatible Pi0.5 LIBERO checkpoint, SentencePiece tokenizer and normalization statistics.
Start the service with that environment’s Python:
python -m rpent.robots.components.apxinf_vla_server \
--embodiment libero \
--model-path /path/to/pi05-libero \
--tokenizer-path /path/to/tokenizer.model \
--norm-stats-path /path/to/norm_stats.json \
--precision bf16 \
--transport http --host 127.0.0.1 --port 8220
Add --vla-endpoint http://127.0.0.1:8220 to the LIBERO command. For remote
access, bind to a reachable interface and use the server’s address. Stop this
external service yourself when finished. Omitting the endpoint starts OpenPI.
APXInf-robo’s native OpenPI WebSocket server is not an RPent RPC endpoint;
use the adapter above.
The adapter supports eval mode with these checkpoint configurations:
libero: two views, five flow steps, ten predicted actions; returns the first five as float32 in environment units.dual_franka: body-frame delta TCP rot6d checkpoint, three views; returns 20 absolute-pose actions of width 20.yam: delta-joint checkpoint, three views; returns 30 absolute qpos14 actions. The YAM tool executes five per call.
When changing --embodiment, select the matching APXInf-robo preset, checkpoint
and statistics. Dual-Franka and YAM remain experimental; checkpoint export,
numerical parity and real-robot execution still need validation. The adapter
requires APXInf-compatible weights and does not convert raw RLinf
actor/model_state_dict/full_weights.pt. Single-arm franka is not supported.
SAM3 Service#
On the SAM3 host, set the local checkpoint path and start the HTTP service:
export SAM3_CHECKPOINT_PATH=/path/to/sam3/sam3.pt
python -m rpent.robots.components.sam3_server \
--cuda-device 0 \
--transport http --host 0.0.0.0 --port SAM3_PORT
The SAM3 service loads the model once and can be reused by multiple RPent runs.
Connect RPent#
On the machine that runs RPent, point at the three endpoints. Suite, task, seed, and max episode steps must match the environment service:
rpent \
--robot libero \
--suite libero_object_swap --task 2 --seed 0 \
--libero-type pro --max-episode-steps 10000 \
--env-endpoint http://ENV_HOST:ENV_PORT \
--vla-endpoint http://VLA_HOST:VLA_PORT \
--sam3-endpoint http://SAM3_HOST:SAM3_PORT \
--planner claude_code --model claude-opus-4-8
Replace each *_HOST with a reachable address of the machine that runs
that service, and each *_PORT with the free port you chose at startup.
Any of the three endpoint flags can be omitted; when one is unset, RPent
spawns that service locally on a free port. All three default to HTTP when
the protocol is omitted, and all three accept socket://HOST:PORT.
Custom RLinf Checkout#
The environment and VLA services import rlinf. When starting them
manually against a development RLinf checkout instead of the installed
package, point PYTHONPATH at the checkout first:
export PYTHONPATH=/path/to/rlinf:$PYTHONPATH
Servers spawned by RPent get this automatically: the checkout is resolved
from RPENT_RLINF_ROOT (or RLINF_REPO_PATH), falling back to the
rlinf directory next to the RPent checkout. A resolved path that does
not exist is harmless — Python ignores invalid PYTHONPATH entries —
so the servers import the installed rlinf package.
Parallel Evaluation#
The following example demonstrates parallel evaluation with LIBERO using Pi0.5 VLA and SAM3. Other robots or evaluation setups may use different services and endpoints.
To run the same LIBERO task concurrently, first start one Pi0.5 VLA service
and one SAM3 service as described above. After both services report the log line
RPC server listening on ..., pass the same endpoints —
http://VLA_HOST:VLA_PORT and http://SAM3_HOST:SAM3_PORT — to every
concurrent rpent process, replacing the placeholders with the host addresses
and ports of the corresponding services.
When the services and RPent run on the same machine, the hosts can be
127.0.0.1. All processes then use the same VLA and SAM3 services. Leave
--env-endpoint unset: each process starts its own env_server and keeps its
evaluation environment independent. The VLA and SAM3 models are loaded once, so
their services do not need to be started again for each run.
pids=()
for i in $(seq 1 10); do
rpent --robot libero --libero-type pro \
--suite libero_object_swap --task 2 --seed 0 \
--planner claude_code --model claude-opus-4-8 \
--vla-endpoint http://VLA_HOST:VLA_PORT \
--sam3-endpoint http://SAM3_HOST:SAM3_PORT \
--output-dir logs/parallel_object_swap_t2_s0/run_$i &
pids+=($!)
done
wait "${pids[@]}"
Note
For long-running evaluations over SSH, start the shared services with
nohup or in a tmux / screen session; a bare & may stop them
when the SSH shell exits.
Access a Remote Dashboard#
Start the Dashboard on the server with a fixed port:
rpent --robot libero --dashboard --dashboard-port 8000 \
--planner claude_code --model claude-opus-4-8
In a local terminal, forward the port, replacing USER@HOST with the server login:
ssh -N -L 8000:127.0.0.1:8000 USER@HOST
Open http://127.0.0.1:8000 in your local browser. Keep the SSH connection and server-side RPent process running; see Interactive Usage for task controls.
Code as Policy (Optional)#
This mode lets the model write Python code to control the robot through
robo.<tool_name>(). Code can combine actions with loops and conditions,
and variables persist within a session.
Once a normal task runs successfully, add --policy-mode code to your
command. For example:
rpent --robot libero --libero-type pro \
--suite libero_object_swap --task 2 --seed 0 \
--planner claude_code --model claude-opus-4-8 \
--policy-mode code
Each code snippet allows up to 120 seconds and 100 robot tool calls by default.
Adjust these with --code-timeout-s and --code-max-calls. Code and results
are saved in code_policy/ under the run’s output directory.
The model ends the task with robo.finish(...); code after a successful
finish does not run. Operator requests such as request_scene_reset and
request_operator_verdict stay separate tools outside Python, because waiting
for the operator can exceed the per-snippet time limit.
This mode uses separate prompts, skips task memory, and does not generate
recipes. It supports the api, claude_code, and codex planners,
but not flash, and it cannot be combined with --explore. Omit the
flag to use the default tool-calling mode.