LeRobot documentation
Suy luận từ xa
Suy luận từ xa
Các policy lớn cần GPU, và với rollout đồng bộ, robot sẽ dừng chuyển động mỗi khi policy tính toán chunk hành động tiếp theo. Remote inference chia công việc thành hai phần: một policy server chạy checkpoint trên GPU, và robot computer tiếp tục kiểm soát camera, động cơ, teleoperation và ghi hình. Robot tiếp tục thực thi các hành động mà nó đã có trong khi server tính toán các hành động tiếp theo, nhờ đó chuyển động không còn bị tạm dừng cho việc suy luận.
Sử dụng khi:
- máy tính nối với robot không có GPU, hoặc GPU quá nhỏ so với chính sách: một laptop hoặc máy tính đơn bảng đặt cạnh cánh tay và một trạm làm việc GPU ở phía bên kia phòng thí nghiệm;
- quá trình suy luận chiếm một phần đáng kể của mỗi khối hành động và bạn muốn chuyển động liên tục;
- bạn muốn quyết định tần suất robot lập kế hoạch lại mà không cần chạm vào checkpoint.
Điểm đánh đổi duy nhất bạn điều chỉnh là tính mới so với tính liên tục. Yêu cầu một kế hoạch mới sớm hơn cho phép robot phản ứng với những gì nó nhìn thấy; tiếp tục thực hiện phần lớn kế hoạch hiện tại giúp duy trì tiến độ của tác vụ.
Cách hoạt động
Máy tính của robot duy trì một bộ đệm chứa các hành động sắp tới. Khi bộ đệm sắp cạn, nó gửi một quan sát mới, tiếp tục di chuyển từ bộ đệm trong khi máy chủ tính toán, và ghép phần dữ liệu mới vào phần kế hoạch chưa được thực thi.
Ba cài đặt phía client định hình hành vi này. refill_seconds quyết định thời điểm yêu cầu kế hoạch tiếp theo, chunk_merge quyết định cách kế hoạch mới được ghép vào kế hoạch cũ, và blending làm mượt mối nối giữa chúng. Server chỉ cần checkpoint và mô tả về robot mà nó được huấn luyện cho. Các phần bên dưới bắt đầu từ một cấu hình hoạt động được và sau đó xây dựng trực giác cho từng cài đặt.
RTC cục bộ (--inference.type=rtc) là tùy chọn bất đồng bộ khác: suy luận chạy trong một luồng nền của tiến trình rollout, trên cùng một máy, không cần máy chủ. Suy luận từ xa trên cùng một host vẫn sử dụng hai tiến trình và --inference.type=remote, và cung cấp tính năng căn chỉnh và trộn cho các chính sách không có RTC. Xem mối quan hệ giữa RTC và suy luận từ xa.
Các chính sách và robot được hỗ trợ
Checkpoint có thể được phục vụ khi các bộ xử lý đã lưu của nó dự đoán một khối hành động từ một quan sát hiện tại duy nhất; ACT cần tắt temporal ensembling. Các checkpoint của ACT, SmolVLA, XVLA, EVO1 và LaWAM đã chạy trên robot thực thông qua đường dẫn này. Một số chính sách khác được hỗ trợ ở mức hợp đồng nhưng chưa được xác thực trên phần cứng, và các chính sách phụ thuộc vào lịch sử cần tích hợp bổ sung. Bảng hỗ trợ chính sách liệt kê trạng thái và các hạn chế của từng chính sách.
Trình điều khiển robot phải khai báo hỗ trợ giữ vị trí, vì client làm mới mục tiêu đã áp dụng cuối cùng trong khi chờ các hành động. SO, OMX, Koch, HopeJr, Rebot và các follower của YAM khai báo điều này; OpenArm, Reachy2 và các wrapper hai tay phụ thuộc vào cấu hình của chúng; Unitree G1 chỉ khai báo khi dùng bộ điều khiển SONIC, trong đó mục tiêu được giữ lại là token chuyển động cuối cùng; các cơ sở di động thì không. Xem bảng phần cứng. Các hợp đồng robot hoặc chính sách không được hỗ trợ sẽ bị từ chối ngay khi tiếp nhận, trước bất kỳ chuyển động nào.
Bắt đầu từ một rollout hoạt động
Giữ lại một lệnh lerobot-rollout đồng bộ thành công làm tham chiếu, và giữ nguyên các cài đặt về robot, camera, tác vụ, FPS, teleoperator và nội suy. Checkpoint và thiết bị mô hình sẽ chuyển sang máy chủ; client từ xa không tải trọng số.
Các ví dụ dưới đây mô tả một SO-101 chung với sáu cơ cấu chấp hành và một camera phía trước. Hãy điều chỉnh điểm kiểm tra, góc nhìn camera, thứ tự thành phần và đơn vị một cách đồng bộ.
1. Cài đặt trên cả hai máy tính
Cả hai phía đều cần phần mở rộng remote. Giữ các phần mở rộng phần cứng ở phía client và phần mở rộng của chính sách đã chọn ở phía server:
uv sync --locked --extra remote --extra core_scripts --extra feetech
# Add the policy extra on the server when required, for example --extra pi.Phạm vi Zenoh được hỗ trợ là >=1.9.0,<1.11.0; uv sync --locked cài đặt phiên bản trong lockfile, hiện tại là 1.10.1.
2. Cấu hình và khởi động máy chủ
Sao chép cấu hình chung, sau đó chỉnh sửa nó:
cp examples/remote_inference/server.yaml server.yamlĐặt model.repo_or_path và model.device. Đối với checkpoint trên Hub, hãy cố định model.revision tại commit mà bạn dự định xác thực. Đảm bảo features, action_feature, semantics, robot_type và execution.action_fps khớp với cấu hình làm việc của bạn; xem các ví dụ về schema và đổi tên camera bên dưới.
uv run --no-sync lerobot-policy-server --config_path=server.yaml
Máy chủ tải checkpoint, xác thực các khai báo của nó, chạy warmup và sau đó ghi log Policy server ready: deployment=<name> instance=<id>; awaiting one client. Mọi trường YAML đều chấp nhận ghi đè CLI lồng nhau:
uv run --no-sync lerobot-policy-server --config_path=server.yaml \ --model.device=cuda \ --execution.idle_timeout_s=10
3. Khởi động client robot
Trong một terminal khác, điều chỉnh các đối số phần cứng cho cùng một cấu hình:
uv run --no-sync lerobot-rollout \
--inference.type=remote \
--inference.endpoint=tcp/127.0.0.1:7447 \
--inference.deployment=manipulation \
--inference.mode=chunk \
--inference.chunk_merge=aligned \
--inference.semantics=so101-degrees-gripper-percent-v1 \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.use_degrees=true \
--robot.cameras='{front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30}}' \
--fps=30 \
--task="pick up the cube" \
--interactive=trueSau khi được chấp nhận, nhập /start. /stop kết thúc lượt chạy; xem robot làm gì trong khi chờ hoặc dừng. Giữ nguyên các tùy chọn teleoperation và ghi hình từ rollout đang hoạt động của bạn. Không truyền --policy.path, các lệnh ghi đè model-device cục bộ hoặc cờ biên dịch cho client từ xa.
deployment chọn máy chủ và semantics đặt tên cho các đơn vị hành động đã được xác thực cùng thứ tự của chúng; cả hai đều phải khớp với cấu hình máy chủ. Ví dụ sử dụng các bậc tự do của khớp cơ thể và phạm vi kẹp tay đã được hiệu chuẩn từ 0 đến 100.
Use a trusted LAN instead of localhost
Gắn kết máy chủ với giao diện LAN của nó, thay thế địa chỉ ví dụ bằng IP thực tế:
uv run --no-sync lerobot-policy-server --config_path=server.yaml \
--zenoh.listen_endpoints='[tcp/172.18.133.214:7447]'Trên máy client, hãy sử dụng cùng một địa chỉ: --inference.endpoint=tcp/172.18.133.214:7447. Cả hai host đều phải có khả năng truy cập đến endpoint đó.
Việc ràng buộc một giao diện cụ thể giúp hạn chế phạm vi phơi bày nhưng không xác thực các đối tác. Hãy sử dụng kết nối router đã xác thực bên ngoài mạng phòng thí nghiệm đáng tin cậy.
Chọn cách tiếp tục chuyển động
Khi một chunk mới đến, quan sát mà nó được tính toán từ đó đã hơi cũ, và robot đã di chuyển tiếp. Chế độ merge quyết định cách xử lý điều đó: phát chunk mới sau chunk cũ, bỏ qua các bước mà robot đã đi qua, hoặc làm mượt điểm nối.
| Lựa chọn | Cài đặt client | Điểm khởi đầu hữu ích |
|---|---|---|
| Thêm | mode=chunk, chunk_merge=append | Giữ nguyên toàn bộ lát cắt thực thi đã được chấp nhận; hữu ích như một đường cơ sở, nhưng khối tiếp theo có thể bắt đầu từ một quan sát cũ hơn. |
| Căn chỉnh | mode=chunk, chunk_merge=aligned (mặc định là auto) | Xóa các bước đến đã được vượt qua và chỉ thay thế các bước trong tương lai, giảm thiểu các xung đột ngược giữa các khối độc lập. |
| Căn chỉnh + trộn | Alignment cùng với blend_steps > 0 và các thành phần rõ ràng | Mục tiêu cũ/mới chồng lấn mượt mà sau khi nhịp độ và tiến độ tác vụ đã hoạt động. |
| RTC | mode=rtc_guided hoặc rtc_trained | Sử dụng khi checkpoint hỗ trợ RTC: bản thân suy luận được điều kiện hóa dựa trên quỹ đạo còn lại. |
Các cài đặt trong bảng này sử dụng tiền tố --inference.. Các khối dữ liệu thô mặc định được căn chỉnh với chế độ trộn bị vô hiệu hóa. Một mục tiêu đang được nội suy sẽ được cam kết và không thể thay thế.
Alignment loại bỏ các bước đến đã được cam kết. Blending lấy trung bình các mục tiêu tương lai chồng lấn. Interpolation thêm các lệnh động cơ trung gian giữa các điểm cuối. RTC thay đổi cách dự đoán được tạo ra. Không có phương pháp nào đảm bảo chuyển động mượt mà hay thao tác nắm thành công.
Add a short blend to the example
Blending được cấu hình hoàn toàn trên client; server không cần cài đặt blending hay khởi động lại. Chọn tọa độ cánh tay liên tục từ tên hành động của deployment:
--inference.chunk_merge=aligned \
--inference.blend_steps=5 \
--inference.blend_weight=0.5 \
--inference.blend_components='[shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos]'Đây là các cài đặt so sánh, không phải khuyến nghị đã được tinh chỉnh. Loại bỏ kẹp và các bộ điều khiển rời rạc hoặc nhạy cảm tiếp xúc khác trừ khi đã được xác thực. Các thành phần không được chọn sẽ sử dụng mục tiêu đầu vào.
Blending tính q_t + b_w * (i_t - q_t): q_t là mục tiêu đã xếp hàng, i_t là mục tiêu đến cho cùng một khe thời gian tương lai, và b_w là tỷ lệ đến (blend_weight). Trọng số 1 cho phép thay thế. Sự chồng chéo thực tế giới hạn cửa sổ trộn; mười bước được cấu hình không thể tạo ra mười bước chồng chéo. Các lần thay thế lặp lại có thể trộn một mục tiêu chưa cam kết nhiều hơn một lần, giữ lại ảnh hưởng cũ hơn và tuổi gốc của nó. Blending không bao giờ làm mới dữ liệu đã hết hạn.
Serve guided RTC on a compatible checkpoint
Giữ lại schema đã được xác thực và cấu hình máy chủ:
uv run --no-sync lerobot-policy-server --config_path=server.yaml \
--execution.supported_modes='[rtc_guided]' \
--execution.rtc.enabled=true \
--execution.rtc.mode=guided \
--execution.rtc.execution_horizon=15Trên client, đặt --inference.mode=rtc_guided. RTC sử dụng cơ chế xử lý tiếp nối riêng, không dùng căn chỉnh chunk đơn thuần hay trộn lẫn. Hãy đo lại thời gian phản hồi, vì việc thêm hướng dẫn sẽ làm tăng khối lượng công việc. Ngưỡng 15 bước chỉ là một ví dụ, không phải giá trị đã được tinh chỉnh.
Trained RTC yêu cầu một checkpoint được huấn luyện cho điều kiện tiền tố hành động và các cài đặt độ trễ/horizon tương thích; xem cấu hình RTC. Việc yêu cầu một chế độ không được hỗ trợ sẽ thất bại trước khi chuyển động.
Các tham số quan trọng
Các tùy chọn client bên dưới sử dụng tiền tố --inference. trừ khi có ghi chú khác. Các giá trị mặc định là giá trị khởi đầu, không phải là cam kết cho một robot cụ thể.
| Tham số | Mặc định / đơn vị | Tác động và sự đánh đổi |
|---|---|---|
refill_seconds | 0.5 giây phát còn lại | Giá trị cao hơn thường yêu cầu sớm hơn; giá trị thấp hơn cho phép nhiều phần của kế hoạch được thực thi hơn. Một ngưỡng độ trễ được đo lường có thể ghi đè lên nó. |
blend_steps | 0 bước chính sách | Zero vô hiệu hóa việc trộn. Các cửa sổ lớn hơn sẽ trộn nhiều hơn các mục tiêu tương lai chồng chéo. |
blend_weight | 0.5 tỷ lệ đầu vào | Lower giữ lại nhiều hơn của mục tiêu cũ: các thay đổi có thể nhẹ nhàng hơn, nhưng quá trình hiệu chỉnh chậm hơn. |
blend_components | [] | Tập con tường minh của các tọa độ được phép của máy chủ; bắt buộc khi trộn được bật. |
max_observation_age_s | 5.0 giây | Tuổi của nguồn gốc ban đầu tối đa thông qua việc thực thi, bao gồm cả các bên đóng góp trộn lẫn cũ hơn. Phải bao phủ cả suy luận và phát lại. |
action_starvation_grace_s | 1.0 giây | Chờ có giới hạn sau khi phát hết; 0 gây lỗi ngay lập tức. Không ghi đè lên các hạn chót khác. |
--fps | Khớp action_fps của máy chủ | Tần suất hành động của chính sách. Với N hành động, thời gian phát danh định là N / fps giây. |
--interpolation_multiplier | 1 | Nhiều lệnh điều khiển trung gian hơn; không mở rộng phát lại hoặc thêm các quyết định chính sách. |
Refill hiệu quả là max(refill_seconds, recent maximum turnaround + 1 / fps). Turnaround bao gồm mã hóa, mạng, xếp hàng, suy luận và giải mã. Yêu cầu đầu tiên được chấp nhận cung cấp ước tính ban đầu; các ước tính sau đó sử dụng tối đa 100 mẫu trạng thái ổn định.
Do đó, Refill không phải là một chu kỳ yêu cầu cố định hay một số lượng hành động được thực thi đảm bảo. Kiểm tra refill được cấu hình và hiệu lực trong các log. Một ngưỡng bao phủ toàn bộ chân trời thực thi sẽ gây ra việc thay thế rất thường xuyên.
Operation deadlines and server ownership
Tất cả các giá trị đều tính bằng giây.
| Tham số client | Mặc định | Giới hạn |
|---|---|---|
handshake_timeout_s | 10 | Phát hiện/chấp nhận; ngân sách cơ bản cho các cuộc trao đổi kiểm soát |
startup_timeout_s | 10 | Khởi động hành động mới sau khi xác nhận việc đặt lại/hủy bỏ |
action_timeout_s | 5 | Một yêu cầu hành động nổi bật |
language_timeout_s | 60 | Một yêu cầu văn bản |
Máy chủ cũng có execution.action_deadline_s=5 và language.deadline_s=60. Cả giới hạn của client và server đều được áp dụng; việc thay đổi một bên không làm nới lỏng bên còn lại. Các trao đổi điều khiển reset/invalidation cũng cho phép ngân sách công việc của server được công bố vì chúng phải chờ sau một cuộc gọi model đang chạy.
Server execution.idle_timeout_s=10 kiểm soát việc dọn dẹp sau việc quan sát thấy client vắng mặt, không phải thời gian chờ cho phép khi thiếu hành động. Việc dọn dẹp sẽ chờ sau các tác vụ mô hình đang chạy; một cuộc gọi bị treo không thể được tiếp quản. Một client đang kết nối và tạm dừng sẽ giữ phiên của nó.
Những gì robot thực hiện trong khi chờ hoặc dừng
Trong một lần chờ được hỗ trợ, client làm mới target cuối cùng thực sự được driver áp dụng, bao gồm nội suy, cắt và kẹp. Trước lệnh đầu tiên, một tư thế đo được sẽ khởi tạo nó. Điều này dừng việc tiến triển quỹ đạo; robot vẫn có thể ổn định về phía target đó. Nó không tắt mô-men xoắn hay đảm bảo bất động. RTC cục bộ sử dụng cùng kiểu chờ có giới hạn trên các robot được hỗ trợ và báo lỗi ngay lập tức khi cạn kiệt ở nơi khác.
| Tình huống | Hành vi mong đợi |
|---|---|
| Suy luận ban đầu | Chờ cục bộ cho đến khi các hành động khả dụng đến, trong thời hạn khởi động. |
| Hết lượt thực hiện | Hoàn thành nội suy đã cam kết, sau đó giữ lại mục tiêu trong tối đa thời gian ân hạn thiếu hụt. Chỉ tiếp tục từ một quan sát và dự đoán mới. |
/vqa hoặc truy vấn tự lái | Tạm dừng trước khi tạo văn bản; tiếp tục từ các hành động mới sau đó nếu phiên chạy vẫn đang hoạt động. Các giới hạn ngôn ngữ được áp dụng. |
| Thay đổi hướng dẫn trong quá trình suy luận | Bỏ dự đoán cũ, tạm dừng và lấy các hành động mới cho chỉ thị mới. Những thay đổi giữa các yêu cầu có thể giữ lại chuyển động đã được chấp nhận. |
| Ghi lại lưu hoặc toán tử tạm dừng | Giữ lại mục tiêu, hoặc chuyển quyền điều khiển sang teleoperation. Công việc ghi hình bị chặn sẽ tiếp tục với suy luận mới khi phù hợp. |
| Hết hạn, hành động cũ, phản hồi sai định dạng hoặc hết thời gian ân hạn đói | Lỗi cuối cùng: thu hồi đề xuất chính sách và thực hiện tắt máy theo cấu hình. |
/stop hoặc Ctrl+C thông thường | Kết thúc chuyển động chính sách và tuân theo hành vi ngắt kết nối/trả về đã cấu hình. |
Khôi phục tình trạng thiếu dữ liệu sẽ loại bỏ một dự đoán cũ đang được xử lý và lấy một dự đoán mới từ một bản chụp được thực hiện sau khi quá trình chờ bắt đầu. Các kết quả cũ không thể khởi động lại chuyển động. Các gói tin và kết quả không thể sử dụng sẽ không làm gia hạn thời gian ân hạn. Việc chờ đợi thường xuyên cho thấy phạm vi bao phủ của việc phát hoặc độ trễ là không đủ.
Mất máy chủ hoặc mất kết nối không được tự động khôi phục. Các hành động được đệm hợp lệ có thể bị xả hết, sau đó hệ thống sẽ chờ cho đến khi hết thời gian ân hạn hoặc một hạn chót khác. Một khi sự hiện diện của máy chủ được quan sát là đã mất, phiên đó không thể tiếp tục khi kết nối được khôi phục; hãy khởi động lại rollout để tạo phiên mới. Trong quá trình xử lý văn bản, việc mất máy chủ được quan sát sẽ gây lỗi cho truy vấn.
Với việc thu thập quan sát và điều khiển bộ chấp hành hoạt động bình thường, việc tắt thiết bị cuối sẽ tuân theo --return_to_initial_position=true (mặc định), sau đó ngắt kết nối. Việc quay về sẽ đọc một quan sát đầy đủ, do đó sự cố camera kéo dài có thể ngăn chặn quá trình này. Một hành động thất bại hoặc việc áp dụng giữ thất bại sẽ ngăn chặn các chuyển động tiếp theo. Đặt tùy chọn thành false sẽ bỏ qua bước quay về, chứ không bỏ qua việc ngắt kết nối. Việc ngắt kết nối có thể giải phóng mô-men xoắn theo cấu hình của robot. Các lỗi thiết bị cuối sẽ thoát với mã trạng thái khác không sau khi dọn dẹp; một tiến trình bị giết cưỡng bức không thể đảm bảo việc dọn dẹp.
Tinh chỉnh một tác vụ hoạt động
Bắt đầu gần tham chiếu đồng bộ: thực thi một phần đáng kể của mỗi dự đoán, nhưng yêu cầu đủ sớm để che giấu độ trễ suy luận. Sau đó, đánh giá xem việc lập kế hoạch lại thường xuyên hơn có giúp ích không.
- Trước tiên, hãy sử dụng alignment mà không dùng blending. Giữ nguyên FPS, interpolation và setup. Kiểm tra execution horizon, full turnaround và các request chậm.
- Chọn phạm vi nạp lại có biên độ. Giữ đủ thời lượng phát cho một yêu cầu khác và sự biến thiên độ trễ, mà không cần thay thế kế hoạch liên tục.
- Thêm một pha trộn ngắn ở nhịp độ đó. So sánh hoàn thành tác vụ, nắm/thả và va chạm riêng biệt. Một giá trị trung bình mượt mà của các kế hoạch không tương thích có thể bỏ qua đối tượng.
- Chỉ yêu cầu sớm hơn khi có lợi ích. Việc tăng tần suất nạp lại có thể cải thiện độ phản hồi nhưng sẽ làm gián đoạn tiến trình hữu ích. Hãy quay lại nhịp độ ổn định nếu hiệu suất tác vụ giảm sút.
- Thay đổi một cài đặt tại một thời điểm. Việc tăng thời gian chờ hoặc thời gian ân hạn không bổ sung các hành động còn thiếu. Giảm refill không phải là giải pháp phổ quát cho tình trạng cạn kiệt.
Với chân trời thực thi 0.8 s và sự căn chỉnh thành công ổn định, khoảng cách giữa các yêu cầu xấp xỉ 0.8 - effective_refill:
| Nạp lại hiệu quả | Khoảng cách xấp xỉ | Những điều cần lưu ý |
|---|---|---|
0.2 s | 0.6 s | Nhiều hành động tiếp theo hơn, ít bảo vệ hơn trước các yêu cầu chậm |
0.4 s | 0.4 s | Thay thế sớm hơn, nhiều cơ hội sửa lỗi hơn |
0.6 s | 0.2 s | Thay đổi thường xuyên; kiểm tra tiến độ tác vụ |
Điều này loại trừ các hiệu ứng khởi động, giữ, bão hòa và tick điều khiển. Một yêu cầu bắt đầu với 0.2 s còn lại và mất 0.1 s chỉ còn 0.1 s để trộn, tương đương ba bước ở 30 Hz. Do đó, nhịp gần đồng bộ có thể chỉ cần một khoảng trộn ngắn.
Đối với alignment và RTC, hãy kiểm tra thời lượng phát lại khả dụng sau khi cắt, không phải độ dài chunk danh định. Nếu suy luận mất 1 giây trong một dự đoán 1,67 giây, chỉ còn lại khoảng 0,67 giây. Một yêu cầu 1 giây khác không thể vừa; không giá trị refill nào khắc phục được điều đó. Hãy giảm thời gian xử lý, sử dụng horizon hỗ trợ dài hơn, hoặc xác thực tần số hành động khác.
Tuổi của nguồn bao gồm cả thời gian thực thi. Đối với chế độ append, hãy cho phép khoảng execution horizon + effective refill cộng thêm biên độ cho capture/inference. Một chunk 100 bước ở 30 Hz đã trải dài 3,33 giây. Việc căn chỉnh thường làm giảm tuổi, nhưng việc trộn lặp lại có thể giữ lại các thành phần cũ hơn.
Đọc nhật ký và chẩn đoán một lần chạy
Nhật ký INFO hiển thị các cài đặt tiếp nhận và hiệu lực, kết quả của yêu cầu văn bản, các chuyển đổi chờ/tắt máy và một bản tóm tắt hoạt động khoảng mỗi năm giây. Đọc thời gian xử lý và phát hàng đợi cùng nhau. Để biết chi tiết, hãy dùng --log_level=DEBUG trên máy chủ và --inference.log_level=DEBUG trên máy khách. Các phiên tương tác sẽ tắt tiếng các nhật ký máy khách dưới mức ERROR; hãy dùng một lần chạy không tương tác khi thu thập nhật ký thời gian trực tiếp.
Khi lưu nhật ký, hãy dùng 2>&1 | tee -i server.log (hoặc client.log). Tham số -i giúp tee tiếp tục chạy khi Ctrl+C tác động lên toàn bộ pipeline, nhờ đó vẫn ghi lại được các thông báo tắt an toàn.
| Quan sát | Kiểm tra hữu ích tiếp theo |
|---|---|
| Append gây ra các điểm lồi ngược | So sánh việc căn chỉnh trong cùng một cấu hình; khối đầy đủ tiếp theo có thể bắt đầu từ một quan sát cũ hơn. |
| Việc căn chỉnh diễn ra mượt mà nhưng tỷ lệ thành công của tác vụ lại giảm | Giảm mức nạp lại trong biên độ độ trễ để giảm tần suất thay thế. Điều chỉnh chu kỳ trước khi trộn. |
| Việc pha trộn trông thiếu quyết đoán | Rút ngắn cửa sổ của nó hoặc tăng trọng số đầu vào; so sánh mà không pha trộn ở nhịp độ làm việc. |
| Chờ lặp lại / Hết hành động | Kiểm tra thời gian phản hồi chậm, các yêu cầu bị mất/đóng băng và việc phát lại sau khi cắt bớt. Chỉ tăng dung lượng dự phòng nếu khoảng thời gian cho phép. |
| Thay đổi nạp lại không có tác dụng | Độ trễ sàn đo được có thể chiếm ưu thế; hãy kiểm tra refill hiệu dụng. |
| Lỗi nguồn cũ | Kiểm tra tuổi nguồn cũ nhất, chân trời và pha trộn. Các phản hồi mới không làm mới các người đóng góp cũ. |
BUSY sau khi khởi động lại client | Chờ cho đến khi hoàn tất việc dọn dẹp client vắng mặt và các tác vụ đang chạy. Các kết nối lại bị từ chối sẽ không gia hạn thời gian ân hạn sở hữu. |
| Lỗi không khớp hợp đồng | So sánh schema, chế độ và metadata phần mềm khởi động; khởi động lại hoặc cập nhật tiến trình không tương thích. |
DEBUG bao gồm quá trình phát lại của mỗi yêu cầu tại thời điểm gửi, tuổi quan sát và tiến độ con trỏ, cùng các bước đã cắt/xử lý được và mức độ chồng chéo cho từng kết quả. Những thông tin này mô tả tiến độ được chỉ định, không phải quá trình thực thi vật lý được đo lường.
Cấu hình và mạng
Giữ một tệp YAML triển khai duy nhất cho checkpoint, schema robot và cài đặt máy chủ; sử dụng các lệnh CLI lồng nhau để ghi đè cho các thí nghiệm. Gán tên triển khai khác nhau cho các thí nghiệm độc lập. Cả hai tiến trình đều ghi log phiên bản gói và giao thức; bước chấp nhận kiểm tra giao thức cùng các hợp đồng thực thi/dữ liệu, mà không yêu cầu phiên bản gói phải giống hệt nhau.
Schema, camera names and checkpoint requirements
server.yaml được bảo trì bao gồm tất cả các trường bắt buộc. features và action_feature khai báo shape, dtype và ngữ nghĩa; các vector state/action cũng khai báo thứ tự các thành phần. Ảnh sử dụng uint8 RGB, chiều cao × chiều rộng × 3. Ví dụ:
features:
- name: observation.state
shape: [6]
dtype: float32
names:
[
shoulder_pan.pos,
shoulder_lift.pos,
elbow_flex.pos,
wrist_flex.pos,
wrist_roll.pos,
gripper.pos,
]
semantics: so101-degrees-gripper-percent-v1
- name: observation.images.front
shape: [480, 640, 3]
dtype: uint8
kind: rgb
semantics: rgb-front-table-v1Sử dụng tên hướng checkpoint. Để ánh xạ camera robot có tên scene sang góc nhìn front của checkpoint, hãy đặt --rename_map='{"observation.images.scene":"observation.images.front"}' cho client. Việc đổi tên không thể thay đổi góc nhìn, độ phân giải hoặc hiệu chuẩn. Các camera bổ sung vẫn có thể khả dụng để ghi hình mà không cần gửi lên server.
Các chính sách được hỗ trợ sử dụng bộ xử lý đã lưu và dự đoán trực tiếp các khối từ quan sát hiện tại. Các chính sách phụ thuộc vào lịch sử, đầu ra của bộ điều khiển ẩn và các bước chuẩn bị chỉ khả dụng thông qua select_action() cần tích hợp bổ sung. Việc suy luận đồng bộ hoặc khởi động nóng thành công đơn thuần không chứng minh được chất lượng của tác vụ từ xa hay khả năng hỗ trợ ngôn ngữ/RTC.
Đối với checkpoint chỉ hỗ trợ chunk, server --execution.n_action_steps=30 rút ngắn lát thực thi của nó mà không cần chỉnh sửa checkpoint. Giá trị này không được vượt quá chân trời dự đoán và sẽ bị từ chối đối với các triển khai RTC. Tham số tùy chọn của client --inference.expected_artifact=... cố định nội dung model/processor và các cài đặt suy luận hiệu lực; chỉ tên triển khai không đủ để xác định danh tính checkpoint.
Independent deployments, bandwidth and connection loss
Ghép server --deployment=arm-a với client --inference.deployment=arm-a. Tên phải là các đoạn duy nhất gồm ký tự alphanumerics/dấu gạch dưới/dấu chấm/dấu gạch nối. Mỗi tiến trình server vẫn chỉ phục vụ một client hoạt động. Nếu nhiều instance quảng bá cùng một tên, hãy chọn --inference.instance=... hoặc sử dụng các tên khác nhau; quá trình khám phá không chọn một cách tùy ý.
Lượng truy cập được phân phạm vi bên dưới lerobot/inference/v1/deployments/{deployment}, sau đó theo phiên bản máy chủ và phiên. Query/reply xử lý khám phá, tiếp nhận và điều khiển; pub/sub truyền dữ liệu suy luận; liveliness theo dõi sự hiện diện. Các endpoint tường minh vô hiệu hóa khám phá multicast/gossip. Định danh sequence/generation và thời gian cục bộ của client chi phối chuyển động; đồng hồ đồng bộ trên host là không cần thiết.
Raw RGB là không mất mát và là mặc định. Hãy thử --inference.encoding=jpeg --inference.jpeg_quality=90 để giảm băng thông hình ảnh, sau đó so sánh thời gian phản hồi và chất lượng tác vụ. Chất lượng dao động từ 1 đến 100; các tensor tùy ý không bao giờ được mã hóa JPEG.
Liveliness có thể chỉ phát hiện kết nối bị hỏng sau khi thuê bao transport hết hạn. Một tệp Zenoh JSON5 được cung cấp thông qua --inference.zenoh_config_path của client hoặc --zenoh.config_file của server có thể điều chỉnh transport/link/tx/lease. Điều này không làm thay đổi hạn chót của action, thời gian ân hạn khi bị thiếu tài nguyên hay việc dọn dẹp quyền sở hữu của client vắng mặt. Tình trạng nghẽn khi quan sát sẽ loại bỏ dữ liệu thay vì chặn việc điều phối motor.
Việc khôi phục presence restored của Server hủy bỏ quá trình dọn dẹp quyền sở hữu; nó không thể khôi phục một client đã gặp lỗi. Việc đặt lại chính sách thất bại khiến triển khai không khả dụng ngay cả khi tiến trình của nó vẫn đang chạy; hãy khắc phục sự cố và khởi động lại nó.
Private connections through an authenticated router
Router cung cấp một điểm gặp gỡ có thể truy cập được cho các tiến trình robot và GPU, bao gồm nhiều thí nghiệm riêng biệt. Nó làm tăng độ trễ và tạo ra một điểm lỗi; nó không cung cấp khả năng vượt qua tường lửa tự động, lập lịch mô hình hay phục hồi chuyển động. TCP trần và ID phiên không xác thực các đối tác.
Sử dụng các cấu hình Zenoh được bảo trì: router.json5, server.json5 và robot.json5. Chúng sử dụng TLS, xác minh chứng chỉ lẫn nhau, vô hiệu hóa khám phá và ACL dựa trên vai trò. Cấp phát một CA riêng tư và các chứng chỉ router/server/robot riêng biệt dưới các đường dẫn đã cấu hình. Mỗi tiến trình chỉ cần khóa riêng tư của chính nó và chứng chỉ CA; giữ khóa CA ở nơi khác. Đối với triển khai trên LAN, thay thế localhost nhất quán bằng tên máy chủ của router và cấp phát một chứng chỉ bao gồm tên đó.
zenohd --config examples/remote_inference/zenoh/router.json5
uv run --no-sync lerobot-policy-server --config_path=server.yaml \
--zenoh.mode=client \
--zenoh.listen_endpoints='[]' \
--zenoh.connect_endpoints='[tls/localhost:7447]' \
--zenoh.config_file=examples/remote_inference/zenoh/server.json5Thêm vào lệnh rollout thông thường:
--inference.endpoint=tls/localhost:7447 \ --inference.zenoh_mode=client \ --inference.zenoh_config_path=examples/remote_inference/zenoh/robot.json5
Thay đổi các đường dẫn triển khai ACL cùng với tên triển khai. Tất cả các bên tham gia đều sử dụng chế độ client mà không có liên kết peer trực tiếp. Ví dụ tách biệt vai trò robot và server, nhưng việc chia sẻ chứng chỉ vai trò sẽ chia sẻ cả quyền hạn; hãy sử dụng các danh tính được ủy quyền riêng biệt cho các nhóm tin cậy khác nhau. ACL của Router không thể bảo vệ một tiến trình robot bị xâm phạm hoặc kiểm soát lưu lượng cục bộ bên trong của nó. Xem tài liệu TLS và ACL của Zenoh.
Phiên bản của binary zenohd và binding Python phải tương thích. Để kiểm tra router đã cài đặt so với binding đã cài đặt, bao gồm việc thực thi TLS và ACL:
LEROBOT_ZENOHD=/absolute/path/to/zenohd \ uv run --no-sync pytest tests/remote_inference/test_zenoh.py -q -rs
Các kiểm tra cũng cần openssl; các điều kiện tiên quyết không khả dụng sẽ được báo cáo là bỏ qua. Việc vận hành robot thông qua một router, một GPU được lưu trữ riêng tư hoặc một Hugging Face Space vẫn chưa được xác thực. Hãy đo lường thời gian hoàn thành toàn bộ và hành vi ngắt quãng trước khi vận hành robot thông qua một cấu hình mạng mới; một phương tiện truyền tải hoạt động đơn thuần không đảm bảo ngân sách chuyển động có thể sử dụng được.
Ngôn ngữ và thu âm
Sử dụng /vqa, /subtask và /autosteer thông qua interactive rollout. Chỉ bật language.enabled=true trên checkpoint có triển khai text generation; autosteering ngoài ra còn cần một checkpoint được huấn luyện cho subtask generation với goal/subtask prompting tương thích. Server sẽ hiển thị các lệnh này khi checkpoint khai báo khả năng tương ứng; việc các câu trả lời và subtask có hữu ích hay không phụ thuộc vào checkpoint.
Thao tác văn bản sẽ tạm dừng chuyển động và loại bỏ phần tiếp theo đã được đệm. VQA giữ lại chỉ lệnh của bạn và tiếp tục với một dự đoán mới, do đó robot có thể mất tiến độ tác vụ khi lập kế hoạch lại, ngay cả sau khi đã trả lời thành công. Việc giữ cho chuyển động đã đệm tiếp tục chạy trong khi truy vấn VQA mang tính thông tin đang được lên kế hoạch; xem công việc tương lai.
Quá trình ghi hình sử dụng định dạng tập dữ liệu cục bộ thông thường. Nhãn tác vụ tuân theo hành động được thực thi. Thông tin chẩn đoán được giữ trong nhật ký ứng dụng; chúng không được ghi vào tập dữ liệu hoặc tải lên. Khi có tập dữ liệu, hãy dùng --dataset.single_task cho chỉ thị ban đầu; nếu không, hãy dùng --task. Nên ưu tiên một trong hai để tránh xung đột cấu hình.
Sử dụng từ Python
Các engine và cấu hình dùng chung nằm trong lerobot.inference; client từ xa, engine và server nằm trong lerobot.remote_inference. Một vòng lặp điều khiển bên ngoài lerobot-rollout sẽ kết nối và chấp nhận một client, bọc nó trong một engine, phát các bản ghi và điều phối mọi nhịp motor thông qua dispatch_tick, áp dụng cùng hợp đồng về quyền, giữ và xác nhận như CLI:
import time
import numpy as np
from lerobot.inference import RemoteInferenceConfig, dispatch_tick
from lerobot.remote_inference import RemoteClient, RemoteInferenceEngine
from lerobot.utils.action_interpolator import ActionInterpolator
config = RemoteInferenceConfig(
endpoint="tcp/127.0.0.1:7447",
deployment="manipulation",
semantics="so101-degrees-gripper-percent-v1",
)
client = RemoteClient.connect(config)
caps = client.capabilities
client.admit(
features=caps.features,
action_feature=caps.action_feature,
semantics=config.semantics,
action_interval=caps.action_interval,
mode=config.mode,
)
engine = RemoteInferenceEngine(client, config, task="pick up the cube")
interpolator = ActionInterpolator(multiplier=1)
engine.start()
engine.resume()
try:
while running():
captured = time.monotonic()
engine.submit_observation(
{"observation.state": state_vector(), "observation.images.front": front_rgb()},
capture_time=captured,
)
# send() receives a torch tensor in the deployment's action order; hold() refreshes
# the last applied target. Returns None when the tick was held or starved.
dispatch_tick(engine, interpolator, send=robot_send, hold=robot_hold)
finally:
engine.stop() # revokes motion and closes the clientCác quan sát được lập chỉ mục theo tên tính năng hướng checkpoint và phải khớp với schema của máy chủ: các vector float32 theo thứ tự thành phần đã khai báo, các ảnh RGB uint8 có kích thước đã khai báo. tests/remote_inference/test_library_client.py chạy luồng này đối với một máy chủ loopback và là tham chiếu cho trình tự gọi. lerobot-rollout bổ sung thêm chuyển đổi driver, kiểm tra giữ vị trí, các lệnh tương tác và ghi hình trên cơ sở đó; lerobot-policy-server là điểm vào phục vụ và chỉ được cấu hình thông qua các ghi đè YAML và CLI của nó.
Migrating from lerobot[async]
Extra lerobot[async] đã ngừng hỗ trợ và các lệnh lerobot.async_inference được thay thế bằng lerobot[remote], lerobot-policy-server và lerobot-rollout --inference.type=remote. Các ngưỡng chunk-size và trọng số tổng hợp cũ không tương thích với refill, alignment và blending; hãy điều chỉnh lại từ tham số ở trên.
Vị trí import cũ lerobot.rollout.inference đã bị loại bỏ, thay thế bằng lerobot.inference và lerobot.remote_inference. Không có tùy chọn hold_mode: việc thực thi từ xa yêu cầu khai báo giữ vị trí của driver, và rollout sẽ tự động kiểm tra điều này.
Đối với Unitree G1 với SONIC, hãy làm theo công thức điều khiển từ xa G1 thay vì điều chỉnh các lệnh cũ; các bộ điều khiển di chuyển của G1 vẫn chưa được hỗ trợ.
Về kiến trúc, các hợp đồng thực thi và các phần mở rộng được lên kế hoạch, hãy xem tham chiếu thiết kế kỹ thuật.
Update on GitHub