Asynchronous Robot Inference: Decoupling Action Prediction and Execution

๐Ÿ“ ์š”์•ฝ

ํ˜„์žฌ ๋กœ๋ด‡ ์ •์ฑ…์€ ๋ฏธ๋ž˜ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ์˜ˆ์ธกํ•˜๋ฉด์„œ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์‹คํ–‰ ์‹œ ์ง€์—ฐ๊ณผ ๋ฐ˜์‘์„ฑ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์—์„œ๋Š” ์•ก์…˜ ์˜ˆ์ธก๊ณผ ์‹คํ–‰์„ ๋ถ„๋ฆฌํ•˜๋Š” ๋น„๋™๊ธฐ ์ถ”๋ก  ๊ธฐ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ์ง€์—ฐ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋” ์ ์‘์ ์ธ ์ œ์–ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ถ”๋ก ์€ `PolicyServer`์™€ `RobotClient`๋กœ ๊ตฌ์„ฑ๋œ 2๋‹จ๊ณ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๋กœ๋ด‡์ด ์ถ”๋ก ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์—†์• ๊ณ  ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์•ฝ 2๋ฐฐ ๋‹จ์ถ•ํ•˜๋ฉด์„œ๋„ ์ž‘์—… ์„ฑ๊ณต๋ฅ ์€ ๋น„์Šทํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ฒ•์€ ๋กœ๋ด‡ ์ •์ฑ…์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ์‹ค์ œ ๋กœ๋ด‡ ์‘์šฉ ๋ถ„์•ผ์—์„œ ์ค‘์š”ํ•œ ์ด์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


TL;DR ๋กœ๋ด‡ ์ •์ฑ…์€ ์ ์  ๋” ๋ณต์žกํ•ด์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋‹จ์ผ ๋‹ค์Œ ์•ก์…˜์„ ์˜ˆ์ธกํ•˜๋Š” ๋Œ€์‹  ๋ฏธ๋ž˜ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋กœ๋ด‡์ด ์ƒˆ๋กœ์šด ์•ก์…˜์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์œ ํœด ์ƒํƒœ๊ฐ€ ๋˜์–ด ์‹คํ–‰ ์‹œ ๋ˆˆ์— ๋„๋Š” ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ณ  ๋ฐ˜์‘์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ถ”๋ก ์€ ์ œ์–ด ๋ฃจํ”„๋ฅผ ์กฐ์ด๊ณ , ์•ก์…˜ ์˜ˆ์ธก๊ณผ ์•ก์…˜ ์‹คํ–‰์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ์ง€์—ฐ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋” ์ ์‘์ ์ธ ์ œ์–ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ๋Š” ๋น„๋™๊ธฐ ์ถ”๋ก ์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ๊ณผ ์‹ค์ œ ๋กœ๋ด‡ ์ •์ฑ…์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ

๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ผ ๋น„๋™๊ธฐ ์ถ”๋ก ์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

์ˆœ์ฐจ ์ถ”๋ก (์™ผ์ชฝ) ๋Œ€ ๋น„๋™๊ธฐ ์ถ”๋ก (์˜ค๋ฅธ์ชฝ). ์žฌ๊ณ„ํš ๋ฐ ๋” ๋นก๋นกํ•œ ์ œ์–ด ๋ฃจํ”„๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ์ถ”๋ก ์€ (1) ๋ณต๊ตฌ ์‹œ๋„๋ฅผ ํ•˜๊ณ , (2) ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์•ฝ 2๋ฐฐ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์ฐจ ์ถ”๋ก ์€ ๋ฌผ์ฒด๋ฅผ ์žก๋Š” ๋ฐ ์‹คํŒจํ•œ ํ›„์—๋„ ํ˜„์žฌ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•˜๋Š” ๋ฐ˜๋ฉด, ๋น„๋™๊ธฐ ์ถ”๋ก ์€ ์žฌ๊ณ„ํšํ•˜๊ณ  ์ƒˆ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ์„ค์ • ๋ชจ๋‘ ๋™์ผํ•œ ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค!

๋น„๋™๊ธฐ ์ถ”๋ก : ์‹ฌ์ธต ๋ถ„์„

๋น„๋™๊ธฐ ์ถ”๋ก ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ก์…˜ ์‹คํ–‰๊ณผ ์•ก์…˜ ์˜ˆ์ธก์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” [ACT], [OpenVLA], [PI0], [SmolVLA]์™€ ๊ฐ™์ด ํ˜„์žฌ ์ธ๊ธฐ ์žˆ๋Š” ๋ชจ๋ธ๋“ค์ด ๊ด€์ฐฐ \(ot\)๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๋‹จ์ผ ์•ก์…˜ \(at\) ๋Œ€์‹  ์•ก์…˜ ๋ฉ์–ด๋ฆฌ \(a_{t:t+H}\)๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝํ–ฅ์„ ๊ณ ๋ คํ•  ๋•Œ ํŠนํžˆ ๊ด€๋ จ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. LeRobot์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฅผ ์ง์ ‘ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ฉ์–ด๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด (1) ๋Ÿฐํƒ€์ž„ ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ž‘์—… ์‹คํ–‰ ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  (2) ๊ฐœ๋ฐฉ ๋ฃจํ”„๋กœ ๋„“๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜์‘์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ถ”๋ก ์€ ์•ก์…˜ ์˜ˆ์ธก๊ณผ ์•ก์…˜ ์‹คํ–‰์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋‘ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค. SmolVLA์—์„œ ๋น„๋™๊ธฐ ์ถ”๋ก ์„ ๋„์ž…ํ–ˆ์œผ๋ฉฐ, ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์•ฝ 2๋ฐฐ ๋‹จ์ถ•ํ•˜๊ณ  ์ž‘์—… ์„ฑ๊ณต๋ฅ ์€ ๋น„์Šทํ•˜๊ฒŒ ๋‚˜์™”์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ, ์ •์ฑ… ์ถ”๋ก ๊ณผ ์•ก์…˜ ์‹คํ–‰์„ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ, ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๊ธฐ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” 2๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • PolicyServer: ๊ฐ€์† ํ•˜๋“œ์›จ์–ด์—์„œ ํ˜ธ์ŠคํŒ…๋˜๋ฉฐ ์‹ค์ œ ๋กœ๋ด‡์— ํ• ๋‹น๋œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ณ„์‚ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • RobotClient: ์ˆ˜์‹ ๋œ ์•ก์…˜์„ ํ์— ๋„ฃ๊ณ  ๋‹ค์Œ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๊ณ„์‚ฐ๋˜๋Š” ๋™์•ˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

PolicyServer์™€ RobotClient ๊ฐ„์˜ ํ†ต์‹ ์€ gRPC์— ์˜์กดํ•˜๋ฉฐ, ์ด๋Š” ๋น„๊ต ๊ฐ€๋Šฅํ•œ REST API๋ณด๋‹ค ์•ฝ 5๋ฐฐ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒฐ๊ณผ๋กœ ๋กœ๋ด‡์€ ์ถ”๋ก ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ ์ถ”๋ก  ์ฒด๊ณ„

๋น„๋™๊ธฐ ์ถ”๋ก ์€ ๋‹ค์Œ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. (1) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๊ด€์ฐฐ์„ ์ถ”๋ก ์šฉ์œผ๋กœ ๋ณด๋‚ด๊ณ , ์ž ์‹œ ํ›„ ์ฒซ ๋ฒˆ์งธ ๋ฉ์–ด๋ฆฌ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. (2) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜„์žฌ ๋ฉ์–ด๋ฆฌ๋ฅผ ์†Œ์ง„ํ•˜์ง€ ์•Š์€ ๋™์•ˆ ๋‹ค๋ฅธ ๊ด€์ฐฐ์„ ์ฒ˜๋ฆฌ์šฉ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. (3) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ , ์ด๋ฅผ ์ด์ „์— ์‹คํ–‰ ์ค‘์ด๋˜ ๋ฉ์–ด๋ฆฌ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๊ณผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.


1. ์ˆœ์ฐจ ์ถ”๋ก ์ด ๋ถ€์กฑํ•œ ์ด์œ 

์ •์ฑ… \( \pi \)๊ฐ€ ํ˜„์žฌ ๊ด€์ฐฐ \( ot \)๋ฅผ \( H \)๊ฐœ์˜ ๋ฏธ๋ž˜ ์•ก์…˜ ์‹œํ€€์Šค๋กœ ๋งคํ•‘ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹์ ์œผ๋กœ, \(\pi : \mathcal{O} \;\mapsto\; \mathcal{A}, \mathbf{A}t = \begin{pmatrix} a{t}, & a{t+1}, & \dots & a{t+H} \end{pmatrix} = \pi(ot)\).

๋”ฐ๋ผ์„œ ์ „ํ†ต์ ์ธ ์ œ์–ด ๋ฃจํ”„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. \( o_t \)๋ฅผ ์บก์ฒ˜ํ•ฉ๋‹ˆ๋‹ค.
  2. \( \pi(ot) \)๋ฅผ ์‹คํ–‰ํ•˜์—ฌ \( \mathbf{A}t = \pi(o_t) \)๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
  3. \(\mathbf{A_t} \)๋ฅผ ํ์— ๋„ฃ๊ณ  ํ์—์„œ ์•ก์…˜์„ ๊ฐ€์ ธ์™€ ์‹คํ–‰ํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  4. ํ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด \( \mathbf{A}_{t+H} \)๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 3๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„ ๋™์•ˆ ๋กœ๋ด‡์€ ์œ ํœด ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ง€์—ฐ ์‹œ๊ฐ„์€ ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜๋ฉฐ(๋ชจ๋ธ์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ ์  ๋” ์ปค์ง€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค), ์ƒํ˜ธ ์ž‘์šฉ ์‹œ๊ฐ„(์ผ๋ฐ˜์ ์œผ๋กœ 1/fps ์ •๋„)์„ ๋น ๋ฅด๊ฒŒ ์ง€๋ฐฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๋™์˜์ƒ(๋‹น์‚ฌ Discord ์ปค๋ฎค๋‹ˆํ‹ฐ ๐Ÿค—์—์„œ ์ œ๊ณต)์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” (1) ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ์„ฑ๋Šฅ ์ €ํ•˜(๋กœ๋ด‡์€ ๋‹ค์Œ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๊ณ„์‚ฐ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ)์™€ (2) (2.1) ์•ก์…˜์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋™์•ˆ ๊ฐœ๋ฐฉ ๋ฃจํ”„๋กœ ๋„“๊ฒŒ ์ž‘๋™ํ•˜๊ณ  (2.2) ๋‹ค์Œ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ์™„์ „ํžˆ ์œ ํœด ์ƒํƒœ๋กœ ์ธํ•ด ๋ฐ˜์‘์„ฑ ์ €ํ•˜๋กœ ์ง์ ‘ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ˆœ์ฐจ ์ถ”๋ก  – ์œ ํœด ๊ธฐ๊ฐ„ ๊ฐ•์กฐ ํ‘œ์‹œ ์•ก์…˜ ์„ ํƒ ์‹œ๊ฐ„ – ์ŠคํŒŒ์ดํฌ๋Š” ์ถ”๋ก ์„ ๋‚˜ํƒ€๋ƒ„

(์™ผ์ชฝ) ๊ฐ•์กฐ ํ‘œ์‹œ๋œ ์œ ํœด ๊ธฐ๊ฐ„์ด ์žˆ๋Š” ์ˆœ์ฐจ ์ถ”๋ก . (์˜ค๋ฅธ์ชฝ) ๋กœ์ปฌ ํ ์†Œ์ง„์œผ๋กœ ์ธํ•ด ์ถ”๋ก ์ด ํŠธ๋ฆฌ๊ฑฐ๋  ๋•Œ ์ŠคํŒŒ์ดํฌ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์•ก์…˜ ์„ ํƒ ์‹œ๊ฐ„ (์ถ”๋ก  ์ง€์—ฐ ์‹œ๊ฐ„์€ ์•ฝ 100ms ~ 30fps์—์„œ ~3 ํ”„๋ ˆ์ž„์œผ๋กœ, 2021 MacBook Pro์—์„œ ACT ๋ชจ๋ธ ์‚ฌ์šฉ).


2. ๋น„๋™๊ธฐ ์ถ”๋ก , ์š”์•ฝ

๋‹น์‚ฌ์˜ ์‹œ์Šคํ…œ์€ ๊ณ„์‚ฐ๊ณผ ์‹คํ–‰์„ ๊ฒน์ณ์„œ ์œ ํœด ๊ธฐ๊ฐ„์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

  1. RobotClient๋Š” ์ตœ์‹  ๊ด€์ฐฐ์„ PolicyServer๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„๊ฐ€ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ๋Š” ํ˜„์žฌ ํ์˜ ์•ก์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ ์•ก์…˜์ด ๋„์ฐฉํ•˜์—ฌ ํ์— ๋ณ‘ํ•ฉ๋˜๊ณ  ๋ฃจํ”„๊ฐ€ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๋กœ๋ด‡์ด ์ด๋ฏธ ๋ช‡ ๋ฒˆ์˜ ์‹œ๊ฐ„ ๋‹จ๊ณ„ ๋™์•ˆ ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์„œ๋ฒ„์—์„œ ์‹ ์„ ํ•œ ์•ก์…˜์ด ๊ณ„์‚ฐ๋˜๋Š” ๋™์•ˆ ๊ณ„์† ์›€์ง์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ ์ถ”๋ก  ๋‹ค์ด์–ด๊ทธ๋žจ

๋น„๋™๊ธฐ ์ถ”๋ก ์€ ๋‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ, ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋„คํŠธ์›Œํฌ๋กœ ์—ฐ๊ฒฐ๋œ ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ธฐ๊ณ„์—์„œ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ํ˜„์žฌ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ์˜ ์‹คํ–‰๊ณผ ๋‹ค์Œ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ์˜ ๊ณ„์‚ฐ์„ ์‹œ๊ฐ„์ ์œผ๋กœ ๊ฒน์นฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋” ๋นก๋นกํ•œ ์ œ์–ด ๋ฃจํ”„์™€ ์ถ”๋ก ์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š” ๋กœ๋ด‡์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์ด ์•ฝ 2๋ฐฐ ๋‹จ์ถ•๋˜๊ณ  ์ž‘์—… ์„ฑ๊ณต๋ฅ ์€ ๋น„์Šทํ•˜๋ฉฐ, ๋” ๋นก๋นกํ•œ ๋ฃจํ”„์—์„œ ๋‚˜์˜ค๋Š” ๋” ์ ์‘์ ์ธ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค(์•„๋ž˜ ๋™์˜์ƒ ์ฐธ์กฐ).


3. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

| ๊ตฌ์„ฑ ์š”์†Œ | ์—ญํ•  | ๊ธฐ์ˆ  | |-----------|------|-------------| | RobotClient | ์˜จ๋ณด๋“œ์—์„œ ์‹คํ–‰, ๊ด€์ฐฐ ์ŠคํŠธ๋ฆฌ๋ฐ, ์•ก์…˜ ํ ์œ ์ง€, ์•ก์…˜ ์‹คํ–‰ | Python, gRPC | | PolicyServer | ์ •์ฑ… ํ˜ธ์ŠคํŒ…, ๋ฐฐ์น˜ ์ถ”๋ก  ์ˆ˜ํ–‰, ์•ก์…˜ ๋ฉ์–ด๋ฆฌ ๋ฐ˜ํ™˜ | Python, gRPC, ๊ฐ€์† ํ•˜๋“œ์›จ์–ด(GPU/TPU) ๊ฐ€๋Šฅ |

gRPC๋Š” HTTP/2 ๊ธฐ๋ฐ˜์ด๋ฉฐ ํ”„๋กœํ† ์ฝœ ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ €์ง€์—ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฉ”์‹œ์ง• ๋ฐ ์–‘๋ฐฉํ–ฅ ์ŠคํŠธ๋ฆผ์„ ๋‹ฌ์„ฑํ•˜์—ฌ ๋” ๋นก๋นกํ•œ ์ œ์–ด ๋ฃจํ”„์™€ 100ms ๋ฏธ๋งŒ์˜ ์™•๋ณต ์ง€์—ฐ ์‹œ๊ฐ„(๋กœ์ปฌ ๋„คํŠธ์›Œํฌ์—์„œ SmolVLA๋ฅผ NVIDIA RTX 4090์—์„œ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฒฝ์šฐ)์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

RobotClient๋Š” ์˜จ๋ณด๋“œ์—์„œ ์‹คํ–‰๋˜๋ฉฐ gRPC๋ฅผ ํ†ตํ•ด PolicyServer๋กœ ๊ด€์ฐฐ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค. PolicyServer๋Š” ์ˆ˜์‹ ๋œ ๊ด€์ฐฐ์„ ์ถ”๋ก ์— ์ ํ•ฉํ•˜๊ฒŒ ์ค€๋น„ํ•˜๊ณ  ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ RobotClient๋กœ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

Robot Client

ํด๋ผ์ด์–ธํŠธ ๊ด€์ 

ํด๋ผ์ด์–ธํŠธ ๊ด€์ ์—์„œ, ๊ด€์ฐฐ์€ ๋กœ์ปฌ ํ ์ƒํƒœ์— ๋”ฐ๋ผ ์„œ๋ฒ„๋กœ ์ŠคํŠธ๋ฆฌ๋ฐ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์‹ ๋œ ๋ฉ์–ด๋ฆฌ๋Š” ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•ก์…˜ ํ์™€ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์—์„œ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค.

RobotClient๋Š” ๋กœ์ปฌ ์•ก์…˜ ํ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ ์ „๋žต์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค: ํ ๊ธธ์ด๊ฐ€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ž„๊ณ„๊ฐ’(g in SmolVLA paper, chunk_size_threshold in the code) ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์ง€๋ฉด ์ƒˆ ๊ด€์ฐฐ์„ ๋ณด๋‚ด๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ๋Œ€ ๋ฉ์–ด๋ฆฌ ํฌ๊ธฐ์˜ ๋น„์œจ๋กœ ํ‘œํ˜„๋˜๋Š” ์ด ์ž„๊ณ„๊ฐ’์€ ๊ณ„์‚ฐ ๋ถ€ํ•˜์™€ ๋ฐ˜์‘์„ฑ์„ ๊ท ํ˜• ๋งž์ถ”๋Š” ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ

ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ์ปฌ ํ ์ƒํƒœ์— ๋”ฐ๋ผ ์„œ๋ฒ„๋กœ ๊ด€์ฐฐ์„ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ๊ด€์ ์—์„œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. ํ ๋ชจ๋‹ˆํ„ฐ๋ง: ํด๋ผ์ด์–ธํŠธ๋Š” ์•ก์…˜ ํ ๊ธธ์ด๋ฅผ ๋ฉ์–ด๋ฆฌ ํฌ๊ธฐ ์ž„๊ณ„๊ฐ’ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ง€์†์ ์œผ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ํ๊ฐ€ ์ด ์ž„๊ณ„๊ฐ’ ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์ง€๋ฉด ์ƒˆ ๊ด€์ฐฐ์„ ์ฒ˜๋ฆฌ์šฉ์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค๋Š” ์‹ ํ˜ธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

  2. ๊ด€์ฐฐ ์ŠคํŠธ๋ฆฌ๋ฐ: ์ž„๊ณ„๊ฐ’ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ํ˜„์žฌ ๊ด€์ฐฐ์„ ์บก์ฒ˜ํ•˜์—ฌ gRPC๋ฅผ ํ†ตํ•ด PolicyServer๋กœ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•˜๊ฒŒ๋„, ๊ด€์ฐฐ์€ ๋‹จ์ผ RPC๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ŠคํŠธ๋ฆฌ๋ฐ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ 4MB์˜ ์ตœ๋Œ€ ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ(๊ณ ํ•ด์ƒ๋„์—์„œ ์—ฌ๋Ÿฌ ์นด๋ฉ”๋ผ ์บก์ฒ˜ ๊ฒฐ๊ณผ)๋ฅผ ์ดˆ๊ณผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  3. ์•ก์…˜ ๋ฉ์–ด๋ฆฌ ํ†ตํ•ฉ: ์„œ๋ฒ„์—์„œ ์ƒˆ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์ด๋ฅผ ํ˜„์žฌ ํ์˜ ๋‚˜๋จธ์ง€ ์•ก์…˜๊ณผ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ์ž ์ •์˜ ์ง‘๊ณ„๊ธฐ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐ ๊ฒน์น˜๋Š” ํƒ€์ž„์Šคํ…์— ๋Œ€ํ•ด aggregate_fn(chunk1: torch.Tensor, chunk2: torch.Tensor) -> torch.Tensor ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์„ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒน์น˜๋Š” ๋ถ€๋ถ„(๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ํ•˜๋Š˜์ƒ‰์œผ๋กœ ํ‘œ์‹œ)์€ ์‹ ์ค‘ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์ง‘๊ณ„ ์ „๋žต์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ต์ฒด: ๊ฒน์น˜๋Š” ์•ก์…˜์„ ์ƒˆ ์˜ˆ์ธก์œผ๋กœ ๋‹จ์ˆœํžˆ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์ค‘์น˜ ๋ธ”๋ Œ๋”ฉ: ์‹œ๊ฐ„ ๊ฐ€์ค‘์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒน์น˜๋Š” ์•ก์…˜์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค(๊ฐ€๊นŒ์šด ์•ก์…˜์— ๋” ๋†’์€ ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ).

์ด ์‹œ์Šคํ…œ์€ ๋ฉ์–ด๋ฆฌ ํฌ๊ธฐ ์ž„๊ณ„๊ฐ’์„ ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„, ๋ชจ๋ธ ์ถ”๋ก  ์‹œ๊ฐ„ ๋ฐ ์›ํ•˜๋Š” ๋ฐ˜์‘์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งค์šฐ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‚ฎ์€ ์ž„๊ณ„๊ฐ’์€ ๋” ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ(๋ฐ ๋” ๋†’์€ ๊ณ„์‚ฐ ๋น„์šฉ)๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋ฐ˜๋ฉด, ๋†’์€ ์ž„๊ณ„๊ฐ’์€ ์ž ์žฌ์ ์ธ ํ ๋ถ€์กฑ์„ ๋Œ€๊ฐ€๋กœ ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ PolicyServer๋กœ๋ถ€ํ„ฐ ์•ก์…˜์„ ์ˆ˜์‹ ํ•˜๊ณ  ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ์‹คํ–‰์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ๋ฉ์–ด๋ฆฌ๊ฐ€ ์™„์ „ํžˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์งˆ ๋•Œ๊นŒ์ง€ ํ•ญ์ƒ ํ˜„์žฌ ๋ฉ์–ด๋ฆฌ๋ฅผ ์†Œ๋น„ํ•˜๋ฉด์„œ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜์‹  ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ณ„์† ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

Policy Server

RobotClient๋กœ๋ถ€ํ„ฐ ๊ด€์ฐฐ์„ ์ˆ˜์‹ ํ•˜๋ฉด PolicyServer๋Š” ์ˆ˜์‹ ๋œ ๊ด€์ฐฐ์„ ์ •๋ฆฌํ•˜์—ฌ ์ถ”๋ก ์— ์ ํ•ฉํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ์•„๋ž˜ ์ด๋ฏธ์ง€์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ํŒŒ์ดํ”„๋ผ์ธ

์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ๊ด€์ฐฐ ์ •๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์€ (1) ํ‚ค ์ผ์น˜ (2) ์‚ฌ์ „ ์ฒ˜๋ฆฌ ๋ฐ (3) ์ถ”๋ก  ์ค€๋น„์™€ ๊ด€๋ จ๋œ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

๊ด€์ฐฐ์ด ์ค€๋น„๋˜๋ฉด ์ถ”๋ก ์— ์‚ฌ์šฉ๋œ ๋งˆ์ง€๋ง‰ ๊ด€์ฐฐ๊ณผ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ด€์ฐฐ์ด ์ฒ˜๋ฆฌ๋˜์–ด ๋ถˆํ•„์š”ํ•œ ์ถ”๋ก ๊ณผ ์œ ์‚ฌํ•œ ์•ก์…˜ ์‹คํ–‰์ด ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๋ฃจํ”„๋กœ ์ด์–ด์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค(์ด๋Š” ๋‹ค์‹œ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ด€์ฐฐ์ด ๋‹ค์‹œ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์Šต๋‹ˆ๋‹ค). ๋กœ๋ด‡์˜ ๋ณ€ํ™”๋ฅผ ๊ทผ์‚ฌํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ด€์ ˆ ๊ณต๊ฐ„ ์œ ์‚ฌ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ด€์ฐฐ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•˜๊ฒŒ, ์ด ๋ฉ”ํŠธ๋ฆญ์€ ํ™˜๊ฒฝ์˜ ๋™์  ๋ณ€ํ™”(๊ฐ์ฒด ์œ„์น˜ ๋ณ€๊ฒฝ ๋˜๋Š” ๊ต๋ž€ ์ ์šฉ)์— ์ ์‘ํ•˜์ง€ ์•Š์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์œผ๋กœ ํŒ๋ช…๋˜์—ˆ์œผ๋ฉฐ ๋ถˆํ•„์š”ํ•œ ์ถ”๋ก ๊ณผ ์ƒํƒœ ๋ถ•๊ดด๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•˜๊ฒŒ๋„, RobotClient๋Š” ๊ต์ฐฉ ์ƒํƒœ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ๊ด€์ฐฐ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. must_go=True ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๋‚ธ ๊ด€์ฐฐ์€ ์œ ์‚ฌ์„ฑ ๋ฉ”ํŠธ๋ฆญ์— ๊ด€๊ณ„์—†์ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ •์ฑ… ์›Œํฌํ”Œ๋กœ์šฐ

์ •์ฑ… ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ๋Š” ์ˆ˜์‹ ๋œ ๊ด€์ฐฐ์„ ์ถ”๋ก ์— ์‚ฌ์šฉ๋œ ๋งˆ์ง€๋ง‰ ๊ด€์ฐฐ๊ณผ ๋น„๊ตํ•˜๊ณ , ์ถฉ๋ถ„ํžˆ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๋˜๋Š” `must_go`์ธ ๊ฒฝ์šฐ์—๋งŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, PolicyServer๊ฐ€ ํ•ญ์ƒ ์ตœ์‹  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ด€์ฐฐ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ๊ด€์ฐฐ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ์ˆ˜์‹  ๊ด€์ฐฐ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด PolicyServer์˜ ํ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ˆ˜์‹  ๊ด€์ฐฐ์ด ์„œ๋ฒ„๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ํ์— ๋„ฃ์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค(์•„๋ž˜ ์ฐธ์กฐ).

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ํ•‘

ํด๋ผ์ด์–ธํŠธ๋Š” 1/fps ์ดˆ๋งˆ๋‹ค ์„œ๋ฒ„์— ํ•‘ํ•˜์ง€๋งŒ, ์ด์ „ ๊ด€์ฐฐ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ด€์ฐฐ์€ ์ฒ˜๋ฆฌ์šฉ์œผ๋กœ ํ์— ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


4. ๋น„๋™๊ธฐ ์ถ”๋ก  ๋ถ„์„

๋ชจ๋“  ์‹ค์งˆ์ ์ธ ๋ชฉ์ ์„ ์œ„ํ•ด ๋น„๋™๊ธฐ ์ถ”๋ก ์—๋Š” ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‹œ๊ฐ„ ์ฒ™๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ™˜๊ฒฝ ๋‹จ๊ณ„ \(\texttt{environment_dt} = 1/\texttt{fps}\): ๋กœ๋ด‡์ด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • ์ถ”๋ก  ์ง€์—ฐ ์‹œ๊ฐ„ \(\texttt{inference_time}\): ์ˆœ๋ฐฉํ–ฅ ํŒจ์Šค + ๋„คํŠธ์›Œํฌ ์™•๋ณต. ๋„คํŠธ์›Œํฌ ์™•๋ณต์€ ์ •์ฑ… ์ถ”๋ก  ์‹œ๊ฐ„์— ๋น„ํ•ด ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋“  ์„ค์ •์—์„œ ๊ทธ๋ ‡์ง€๋Š” ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•˜๊ฒŒ๋„, ๋น„์œจ \( c = \frac{\texttt{environment_dt}}{\texttt{inference_time}} \) ์€ ๋‹ค๋ฅธ ๋™์ž‘์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

  • \(c \ll 1\): ํ™˜๊ฒฝ์ด ์ถ”๋ก ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ํ๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋น„์–ด ์ˆœ์ฐจ ์ œ์–ด๋กœ ํ‡ดํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • \(c \ge 1\): ์„œ๋ฒ„๊ฐ€ ๋”ฐ๋ผ์žก์Šต๋‹ˆ๋‹ค. ํ๋Š” ํ•ญ์ƒ (๊ฑฐ์˜) ์ฑ„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•˜๊ฒŒ๋„, \(c\)๋Š” ๊ฐ ์‹œ๊ฐ„ ๋™์•ˆ ํ์— ์žˆ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•ก์…˜ ์ˆ˜์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ˆœ์ฐจ ์ œํ•œ ์ œ์–ด๋ฅผ ํ”ผํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ •์ฑ… ์„œ๋ฒ„์— ๋” ๋งŽ์€ ์ปดํ“จํŒ…์„ ์‚ฌ์šฉํ•˜์—ฌ GPU์— ์„œ๋ฒ„๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ , ๋” ๋งŽ์€ ๊ณ„์‚ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ํ• ๋‹นํ•œ ๊ฒฐ๊ณผ๋กœ \(\texttt{inference_time}\)์„ ์ค„์ž…๋‹ˆ๋‹ค.
  2. ์„œ๋ฒ„์— ๊ด€์ฐฐ์„ ๋” ์ž์ฃผ ๋ณด๋‚ด๊ธฐ: ํ ๊ธธ์ด \(k\)๊ฐ€ ์ตœ๋Œ€ ํฌ๊ธฐ์˜ ๋ถ„์ˆ˜ \(g = k/H\) ๋ฏธ๋งŒ์œผ๋กœ ๋–จ์–ด์ง€๋ฉด ์ƒˆ ๊ด€์ฐฐ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  • \(g=0\)์€ ์ˆœ์ฐจ ์ถ”๋ก (ํ ๋น„์›€, ๋Œ€๊ธฐ)์„ ์žฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • \(g=1\)์€ ๊ฐ ํƒ€์ž„์Šคํ…๋งˆ๋‹ค ๊ด€์ฐฐ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค(์ตœ๋Œ€ ์ปดํ“จํŒ…, ์ตœ์†Œ ์ง€์—ฐ).

์‹คํ—˜(์•„๋ž˜ ํ”Œ๋กฏ ์ฐธ์กฐ)์— ๋”ฐ๋ฅด๋ฉด \(g\approx0.7\)์€ ๊ด€์ฐฐ์ด ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š์„ ๋•Œ(๋ชจ๋‘ must-go) ์ข‹์€ ์ ˆ์ถฉ์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. \(g=0.5\)๋กœ ์„ค์ •ํ•˜๊ณ  ๋ฌธ์„œ๋ฅผ ๋”ฐ๋ผ ํ•„์š”์— ๋งž๊ฒŒ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํ

๊ฐ ์‹œ๊ฐ„ ๋™์•ˆ ํ์— ์žˆ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์•ก์…˜ ์ˆ˜, g์˜ ํ•จ์ˆ˜. g ๊ฐ’์ด ํด์ˆ˜๋ก ์—…๋ฐ์ดํŠธ๊ฐ€ ๋” ๋นˆ๋ฒˆํ•ด์ง€๊ณ  ๊ณ„์‚ฐ ๋น„์šฉ์ด ๋” ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค. g ๊ฐ’์ด 0์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ์ˆœ์ฐจ ์ถ”๋ก (ํ ๋น„์›€, ๋Œ€๊ธฐ)์ด ์žฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์‹คํ—˜์—์„œ g~0.7์ด ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ž„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.


5. ์„ค์ •์—์„œ ๋น„๋™๊ธฐ ์‚ฌ์šฉํ•˜๊ธฐ

๋น„๋™๊ธฐ ์ถ”๋ก ์€ ๋กœ๋ด‡ ์ •์ฑ…์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. SmolVLA๋ฅผ ์‚ฌ์šฉํ•œ ์‹คํ—˜์—์„œ ๋น„๋™๊ธฐ ์ถ”๋ก ์€ ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์•ฝ 2๋ฐฐ ๋‹จ์ถ•ํ•˜๊ณ  ์ž‘์—… ์„ฑ๊ณต๋ฅ ์€ ๋น„์Šทํ•˜๋ฉฐ, ๋” ๋นก๋นกํ•œ ๋ฃจํ”„์—์„œ ๋‚˜์˜ค๋Š” ๋” ์ ์‘์ ์ธ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ ์ถ”๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ฑ…์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์‚ฌ์šฉ์ž ์ •์˜ ๋งค๊ฐœ๋ณ€์ˆ˜(์˜ˆ: ์ •์ฑ… ๊ฒฝ๋กœ ๋˜๋Š” ๋ฉ์–ด๋ฆฌ ํฌ๊ธฐ ์ž„๊ณ„๊ฐ’)์™€ ํ•จ๊ป˜ ํŠœํ† ๋ฆฌ์–ผ์„ ๋”ฐ๋ฅด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ถ”๋ก ์€ ์•ก์…˜ ๋ฉ์–ด๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” ์ •์ฑ…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค!


๊ฒฐ๋ก 

๊ฐ„๋‹จํ•˜์ง€๋งŒ ํšจ๊ณผ์ ์ธ ๋กœ๋ด‡ ์ •์ฑ… ์„ฑ๋Šฅ ๊ฐœ์„  ๋ฐฉ๋ฒ•์ธ ๋น„๋™๊ธฐ ์ถ”๋ก ์„ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. SmolVLA๋ฅผ ์‚ฌ์šฉํ•œ ์‹คํ—˜์—์„œ ๋น„๋™๊ธฐ ์ถ”๋ก ์€ ์ž‘์—… ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์•ฝ 2๋ฐฐ ๋‹จ์ถ•ํ•˜๊ณ  ์ž‘์—… ์„ฑ๊ณต๋ฅ ์€ ๋น„์Šทํ•˜๋ฉฐ, ๋” ๋นก๋นกํ•œ ๋ฃจํ”„์—์„œ ๋‚˜์˜ค๋Š” ๋” ์ ์‘์ ์ธ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๊ณต์œ ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉฐ, ๋กœ๋ด‡ ์ •์ฑ…์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. huggingface/lerobot์—์„œ ๋น„๋™๊ธฐ ์ถ”๋ก  ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•œ PR์„ ํ™˜์˜ํ•˜๋ฉฐ, Discord ์ปค๋ฎค๋‹ˆํ‹ฐ ๐Ÿค—์—์„œ ์ด์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์›๋ฌธ ์ถœ์ฒ˜: https://huggingface.co/blog/async-robot-inference

๋Œ“๊ธ€

์ด ๋ธ”๋กœ๊ทธ์˜ ์ธ๊ธฐ ๊ฒŒ์‹œ๋ฌผ

LeRobot v0.4.0: Supercharging OSS Robot Learning

SmolVLA: Efficient Vision-Language-Action Model trained on Lerobot Community Data

LeRobot goes to driving school: World’s largest open-source self-driving dataset