강화학습 오픈소스 코드들을 살펴보다가, 아래와 같은 이상한 코드를 발견한 적 있다.
코드를 비동기함수로 동작시키는데, 무슨 코드를 어디로 보내는 것인지 싶었다.
async def run_script(sbx: AsyncSandbox, script: str, language: str) -> float:
execution = await sbx.run_code(script, language=language)
try:
return float(execution.text)
except (TypeError, ValueError):
return 0.0
except Exception as e:
print(f"Error from E2B executor run_script: {e}")
return 0.0
코드의 실행 결과는 float로, code script에 대한 결과가 reward로 작용하여 policy language model의 업데이트에 사용된다..
최근 LLM을 강화학습을 통해 학습시키는 방법론 중, self-play를 통해 코딩테스트 문제를 생성하고 직접 풀이하며 reward를 제공하는 방식(Absolute Zero: Reinforced Self-play Reasoning with Zero Data)와 같은 방법론들이 연구되면서, 논리적인 방식으로의 reasoning(Chain of Thought 와 비슷한 개념) 역량을 강화하는 방법론에 '코드 동작' 이 필수적으로 수행되고 있다.
이러한 연구들은 유닛테스트 통과율을 보상으로 삼아 LLM을 튜닝한다. 이게 가능하려면 직접 '코드'를 실행(execute) 해야하는데, 대표적인 오픈소스가 위 코드에서 사용한 E2B Sandbox인 것이다.
딥러닝 초창기엔 “BLEU”나 “exact-match” 같은 정적 지표로 모델을 평가했다. 이제는 “모델이 쓴 코드를 진짜로 돌려서 정답이면 +1” 하는 식이 대세인 것이다. 그 중 E2B Sandbox를 아주 간단하게 살펴보았다...
E2B는 Firecracker micro-VM 덕분에 125–170 ms 안에 완전 격리된 리눅스가 뜬다고 한다. 즉, 유료의 가상환경을 사용하며 원하는 스크립트만 별도의 가상환경 공간에서 빠르고 안전하게 수행하며 그 결과만을 가져올 수 있게 되는 것이다.
한 VM 안에서 asyncio.gather로 수십 개의 스니펫을 동시에 돌릴 수 있어, Open-r1 코드처럼 “한 스텝에 n 개의 보상” 구조에 딱 맞다. 무엇보다 VM이 따로 떠 있으니 데이터 유출 및 rm -rf / 같은 위험한 코드 생성 및 오류에서 비교적 자유로울 수 있다고 한다. 실제로 Perplexity 팀은 “매달 수백만 회 Sandbox를 띄운다”고 밝힌 바 있다.
또 다른 대표적인 Code Executor로는 QwQ 의 python_executor.py 인 것 같다. Absolute Zero를 연구한 Leap Lab에서도 해당 연구에서 이 executor를 사용했다고 언급한 바 있다.
QwQ의 python_executor.py는 Pebble ProcessPool로 워커 프로세스를 띄우고, 코드 문자열을 exec로 바로 실행한다. 타임아웃·stdout 캡처 정도만 넣어 뒀고, 위험 패턴은 정규식으로 얼추 걸러 낸다. 외부 VM 호출이 없으니, 아무래도 훨씬 호출 속도가 빠를 것이고, API를 사용하는 것이 아니기 때문에 추가 과금이 없다는 점이 가장 큰 장점이다—특히 랩 실습·데스크톱 프로토타입엔 최고다.
격리 수준 | Firecracker micro-VM (커널 분리) firecracker-microvm.github.io |
동일 OS 프로세스, exec/eval로 실행 GitHub |
부팅·레이턴시 | VM 생성 ≈150 ms | 프로세스 포크 수에 따라 다른 ms |
비용 | 분당 과금, API Key 필요 | 무료(로컬 CPU) |
언어 지원 | Python·JS/TS 등 다중 언어E2B | Python 전용 |
대표 사용처 | Perplexity “Advanced Data Analysis”E2B | QwQ 수학·코드 평가 스크립트 |
프로덕션 적합성 | 엔터프라이즈 보안 OK | README에서 “테스트 용” 경고GitHub |
음, 하지만 많은 연구자들이 E2B Sandbox를 사용하는 듯 한데, 이러한 데에는 안정성이 가장 큰 요소로 차지하는 것으로 추측할 수 있다. 코드 생성 및 실행 환경이 모델 학습하는 환경과 같은 커널, CPU 자원을 사용하기 때문에, 코드를 실행하고 리워드를 얻는 과정에서 병목현상이 발생할 수 있으며, 어떤 안정성 오류가 발생할지 모른다. 논문용 실험 및 간단한 테스트용으로는 로컬 환경에서의 python executor가 적합해보이며, Opensource 정도의 모델 학습이 필요한 경우에는 분리된 안정적인 VM 환경을 사용하는 편이 나을 듯 하다.
https://github.com/QwenLM/QwQ/blob/main/eval/eval/math_opensource_utils/python_executor.py