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)\).
๋ฐ๋ผ์ ์ ํต์ ์ธ ์ ์ด ๋ฃจํ๋ ๋ค์๊ณผ ๊ฐ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- \( o_t \)๋ฅผ ์บก์ฒํฉ๋๋ค.
- \( \pi(ot) \)๋ฅผ ์คํํ์ฌ \( \mathbf{A}t = \pi(o_t) \)๋ฅผ ์ป์ต๋๋ค.
- \(\mathbf{A_t} \)๋ฅผ ํ์ ๋ฃ๊ณ ํ์์ ์ก์ ์ ๊ฐ์ ธ์ ์คํํ๊ธฐ ์์ํฉ๋๋ค.
- ํ๊ฐ ๋น์ด ์์ผ๋ฉด \( \mathbf{A}_{t+H} \)๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด 3๋จ๊ณ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
2๋จ๊ณ ๋์ ๋ก๋ด์ ์ ํด ์ํ์
๋๋ค. ์ง์ฐ ์๊ฐ์ ๋ชจ๋ธ ํฌ๊ธฐ๊ฐ ์ปค์ง์ ๋ฐ๋ผ ์ฆ๊ฐํ๋ฉฐ(๋ชจ๋ธ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ ์ ๋ ์ปค์ง๋ ๊ฒฝํฅ์ด ์์ต๋๋ค), ์ํธ ์์ฉ ์๊ฐ(์ผ๋ฐ์ ์ผ๋ก 1/fps ์ ๋)์ ๋น ๋ฅด๊ฒ ์ง๋ฐฐํ ์ ์์ต๋๋ค. ์๋ ๋์์(๋น์ฌ Discord ์ปค๋ฎค๋ํฐ ๐ค์์ ์ ๊ณต)์์ ๋ณผ ์ ์์ต๋๋ค.
์ด๋ (1) ์์ ์๋ฃ ์๊ฐ ์ธก๋ฉด์์ ์ฑ๋ฅ ์ ํ(๋ก๋ด์ ๋ค์ ์ก์ ๋ฉ์ด๋ฆฌ๊ฐ ๊ณ์ฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ)์ (2) (2.1) ์ก์ ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๋์ ๊ฐ๋ฐฉ ๋ฃจํ๋ก ๋๊ฒ ์๋ํ๊ณ (2.2) ๋ค์ ์ก์ ๋ฉ์ด๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์์ ํ ์ ํด ์ํ๋ก ์ธํด ๋ฐ์์ฑ ์ ํ๋ก ์ง์ ์ด์ด์ง๋๋ค.
(์ผ์ชฝ) ๊ฐ์กฐ ํ์๋ ์ ํด ๊ธฐ๊ฐ์ด ์๋ ์์ฐจ ์ถ๋ก . (์ค๋ฅธ์ชฝ) ๋ก์ปฌ ํ ์์ง์ผ๋ก ์ธํด ์ถ๋ก ์ด ํธ๋ฆฌ๊ฑฐ๋ ๋ ์คํ์ดํฌ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ก์ ์ ํ ์๊ฐ (์ถ๋ก ์ง์ฐ ์๊ฐ์ ์ฝ 100ms ~ 30fps์์ ~3 ํ๋ ์์ผ๋ก, 2021 MacBook Pro์์ ACT ๋ชจ๋ธ ์ฌ์ฉ).
2. ๋น๋๊ธฐ ์ถ๋ก , ์์ฝ
๋น์ฌ์ ์์คํ ์ ๊ณ์ฐ๊ณผ ์คํ์ ๊ฒน์ณ์ ์ ํด ๊ธฐ๊ฐ์ ์ ๊ฑฐํฉ๋๋ค.
RobotClient๋ ์ต์ ๊ด์ฐฐ์PolicyServer๋ก ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.- ์๋ฒ๊ฐ ์ถ๋ก ์ ์ํํ๋ ๋์ ํด๋ผ์ด์ธํธ๋ ํ์ฌ ํ์ ์ก์ ์ ์คํํฉ๋๋ค.
- ์ ์ก์ ์ด ๋์ฐฉํ์ฌ ํ์ ๋ณํฉ๋๊ณ ๋ฃจํ๊ฐ ๊ณ์๋ฉ๋๋ค.
ํต์ฌ ์์ด๋์ด๋ ๋ก๋ด์ด ์ด๋ฏธ ๋ช ๋ฒ์ ์๊ฐ ๋จ๊ณ ๋์ ๋ฌด์์ ํด์ผ ํ๋์ง ์๊ณ ์์ผ๋ฏ๋ก, ์๋ฒ์์ ์ ์ ํ ์ก์ ์ด ๊ณ์ฐ๋๋ ๋์ ๊ณ์ ์์ง์ผ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋น๋๊ธฐ ์ถ๋ก ์ ๋ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ, ๊ฐ๋ฅํ๋ค๋ฉด ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ๋ ์์ ํ ๋ณ๊ฐ์ ๊ธฐ๊ณ์์ ์คํํจ์ผ๋ก์จ ํ์ฌ ์ก์ ๋ฉ์ด๋ฆฌ์ ์คํ๊ณผ ๋ค์ ์ก์ ๋ฉ์ด๋ฆฌ์ ๊ณ์ฐ์ ์๊ฐ์ ์ผ๋ก ๊ฒน์นฉ๋๋ค.
์ด๋ ๋ ๋นก๋นกํ ์ ์ด ๋ฃจํ์ ์ถ๋ก ์ ๊ธฐ๋ค๋ฆฌ์ง ์๋ ๋ก๋ด์ผ๋ก ์ด์ด์ง๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ ์๋ฃ ์๊ฐ์ด ์ฝ 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) ๋ฏธ๋ง์ผ๋ก ๋จ์ด์ง๋ฉด ์ ๊ด์ฐฐ์ ๋ณด๋ด๊ธฐ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
์ต๋ ๋ฉ์ด๋ฆฌ ํฌ๊ธฐ์ ๋น์จ๋ก ํํ๋๋ ์ด ์๊ณ๊ฐ์ ๊ณ์ฐ ๋ถํ์ ๋ฐ์์ฑ์ ๊ท ํ ๋ง์ถ๋ ํธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด ์ญํ ์ ํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ๋ก์ปฌ ํ ์ํ์ ๋ฐ๋ผ ์๋ฒ๋ก ๊ด์ฐฐ์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ๊ด์ ์์ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ด ์งํ๋ฉ๋๋ค.
ํ ๋ชจ๋ํฐ๋ง: ํด๋ผ์ด์ธํธ๋ ์ก์ ํ ๊ธธ์ด๋ฅผ ๋ฉ์ด๋ฆฌ ํฌ๊ธฐ ์๊ณ๊ฐ ๋งค๊ฐ๋ณ์์ ์ง์์ ์ผ๋ก ๋น๊ตํฉ๋๋ค. ํ๊ฐ ์ด ์๊ณ๊ฐ ๋ฏธ๋ง์ผ๋ก ๋จ์ด์ง๋ฉด ์ ๊ด์ฐฐ์ ์ฒ๋ฆฌ์ฉ์ผ๋ก ๋ณด๋ด์ผ ํ๋ค๋ ์ ํธ๊ฐ ๋ฉ๋๋ค.
๊ด์ฐฐ ์คํธ๋ฆฌ๋ฐ: ์๊ณ๊ฐ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ํด๋ผ์ด์ธํธ๋ ํ์ฌ ๊ด์ฐฐ์ ์บก์ฒํ์ฌ gRPC๋ฅผ ํตํด
PolicyServer๋ก ์คํธ๋ฆฌ๋ฐํฉ๋๋ค. ์ค์ํ๊ฒ๋, ๊ด์ฐฐ์ ๋จ์ผ RPC๋ฅผ ํตํด ์ ์ก๋๋ ๊ฒ์ด ์๋๋ผ ์คํธ๋ฆฌ๋ฐ๋ฉ๋๋ค. ์๋ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก 4MB์ ์ต๋ ๋ฉ์์ง ํฌ๊ธฐ(๊ณ ํด์๋์์ ์ฌ๋ฌ ์นด๋ฉ๋ผ ์บก์ฒ ๊ฒฐ๊ณผ)๋ฅผ ์ด๊ณผํ๊ธฐ ๋๋ฌธ์ ๋๋ค.์ก์ ๋ฉ์ด๋ฆฌ ํตํฉ: ์๋ฒ์์ ์ ์ก์ ๋ฉ์ด๋ฆฌ๊ฐ ๋์ฐฉํ๋ฉด ํด๋ผ์ด์ธํธ๋ ์ด๋ฅผ ํ์ฌ ํ์ ๋๋จธ์ง ์ก์ ๊ณผ ๊ฒน์น๋ ๋ถ๋ถ์์ ๋ณํฉํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์ ์ ์ ์ง๊ณ๊ธฐ๊ฐ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ ๊ฒน์น๋ ํ์์คํ ์ ๋ํด
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\)๋ ๊ฐ ์๊ฐ ๋์ ํ์ ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ก์ ์์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ์์์ ์ธ๊ธํ ์์ฐจ ์ ํ ์ ์ด๋ฅผ ํผํ๋ ค๋ฉด ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ ์ฑ ์๋ฒ์ ๋ ๋ง์ ์ปดํจํ ์ ์ฌ์ฉํ์ฌ GPU์ ์๋ฒ๋ฅผ ํธ์คํ ํ๊ณ , ๋ ๋ง์ ๊ณ์ฐ ๋ฆฌ์์ค๋ฅผ ํ ๋นํ ๊ฒฐ๊ณผ๋ก \(\texttt{inference_time}\)์ ์ค์ ๋๋ค.
- ์๋ฒ์ ๊ด์ฐฐ์ ๋ ์์ฃผ ๋ณด๋ด๊ธฐ: ํ ๊ธธ์ด \(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
๋๊ธ
๋๊ธ ์ฐ๊ธฐ