네, 헤드라인을 정확하게 읽으셨습니다. '또 다른 추론 엔진'이라고 했지만, 여러분께 반전이 있습니다! 이건 Llama.cpp보다 빠르지는 않습니다 :D
올봄에 제가 자체 에이전트 솔루션을 구축하고 싶어서 시작했습니다. 하드웨어 사양이 제한적이었거든요 (8GB RAM의 M1 Mac + 16GB RAM과 3070 8GB VRAM을 가진 게이밍 머신 I7-7700으로, 주로 Moonlight를 이용해 맥에서 게임할 때 사용합니다). 그래서 작은 모델에서도 작동하고, 제가 던지는 어떤 입력이라도 '소화'할 수 있는 무언가가 필요했습니다.
당연히 여러 벽에 부딪혔습니다. 작은 모델들은 성능이 형편없었고, 종종 컨텍스트 윈도우를 잃어버리거나 아예 답변을 하지 않는 경우가 많았기 때문입니다.
제 에이전트 솔루션에 JSON 파서까지 포함하도록 구성하고 llama.cpp와 Ollama 모두에서 작동시키려고 노력하던 중, 결국 추론 엔진 외부의 의존성(dependencies)을 구축하는 것에 지쳐버렸고, 이 여름 Xyntetik-Runner가 탄생했습니다 (네, Xyntetik... 또 시작이네요).
언어는 C를 선택했는데, 그 이유가 뭐냐고요? 그냥 그랬습니다. 전반적으로 코드를 작성한 경험이 매우 적었기 때문에, C가 맞는 선택처럼 느껴졌습니다. 사실인지 모르겠지만, 제가 자라온 동안 유능한 것은 모두 C로 되어야 한다고 끊임없이 주입받았기 때문에, 이게 일종의 습관처럼 남아버렸거든요.
여기서 해결하려고 했던 주요 문제는 잘린 툴 호출(truncated tool calling) 문제였지만, 여러 모델을 지원할 필요는 없었기 때문에 제가 가장 많이 사용하던 모델들과 충분히 잘 작동하도록 만들었습니다.
그러다가 뭔가 좀 열리면서 친구의 AI 머신에 접근하게 되었고 (24GB MIG 슬라이스를 얻은 Nvidia Blackwell 카드), 갑자기 좀 더 유능한 로컬 모델들을 실제로 사용할 수 있게 되었습니다. 그리고 저는 이 지점에서 불꽃이 시작되었다고 생각합니다... 저희가 작은 하드웨어에서도 더 많은 것을 할 수 있을지 보고 싶었어요. 반드시 빠르다는 의미는 아니었고 (0.00003 토큰/초도 아닙니다), 그보다는 일종의 '도전 과제'가 무엇인지 알고 싶었습니다.
그래서 제가 실제로 집중한 것은 무엇일까요:
- 잘린(Truncated) 툴 호출: 응답이 돌아올 때 복잡하거나 불필요한 기능 없이 바로 유효한 JSON을 반환합니다.
- 스키마 강제 적용(Schema enforcement): 더 이상 잘못된 토큰이 발생하지 않아 파싱 및 재시도 루프가 없습니다. 이는 에이전트 워크플로우에 매우 중요합니다.
- 러너는 유휴 상태일 때 메모리를 소모하지 않습니다. 노트북에서 엔진을 '켜' 놓기만 하고, 모델 호출 시에만 RAM이 사용됩니다.
- 러너는 제가 사용하는 4비트 파일에 직접 LoRa를 학습시킬 수 있습니다. FP16 복사본이 필요 없습니다.
- 러너는 Llama.cpp와 토큰이 동일합니다. Gemma4-Moe에서 테스트하여 토큰별 인증을 받았습니다.
- 저는 세 가지 다른 OS/HW(Metal, CUDA, Intel + AMD CPU)를 가지고 있기 때문에 어떤 환경에서도 작동할 수 있습니다.
이렇게 깊은 '토끼굴'에 빠지게 될 줄은 몰랐습니다. 필요에 따라 기능을 추가했고, 현대 AI의 과제에 큰 관심을 갖게 되었습니다 (그 이후로 정말 많은 것을 배웠지만, 여전히 제가 아무것도 모른다고 느껴질 때가 있습니다).
이 과정에서 저는 LoRa 어댑터, 체크섬 검증, 테스트를 위한 프로세스/킬 스위치 등 필요한 것들을 깨달았습니다. 이름을 대면 아마 테라바이트에 달하는 제 테스트 환경 속 어딘가에 그 원형이 있을 것입니다.
동시에 제가 개발하고 있는 에이전트 솔루션이 성장하기를 바랐기 때문에, 그것에 필요한 모든 기능들이 추가되었습니다.
따라서 방향은 두 가지입니다. 로컬에서 검증된 추론을 위한 엔터프라이즈 지원과 연구(Research) 분야입니다.
(Xyntetik-Kvist-14B에 대한 제 게시물을 기억하는 분들도 계실 겁니다. 이것이 바로 그 결과물이며, 네, 거기서 교훈을 얻었습니다. Fable과는 아무 관련이 없으니 이 글은 모두 저의 것이니, 사실은 여러분이 정보가 부족하고 잡담이 많은 것은 여러분 탓입니다! :D)
스위트/엔터프라이즈 부분은 아직 건설 중이며, 업계에 실제로 유용할 수 있는 무언가를 제공하기를 바랍니다.
하지만 Runner는 영원히 무료로 제공될 것입니다 (기침 Apache 2.0 기침) 왜냐하면 저는 세상이 이런 종류의 것이 필요하다고 생각하기 때문입니다. 세상은 Runner 자체를 필요로 하지는 않을지라도, 우리 모두가 이 진화를 추진하려고 노력하는 것이 중요합니다.
연구는 흥미로운 주제이며, 제 HF(Hugging Face)에는 현재 '인간 없는 기계'라고 불리는 현재 분기점들 주변에 점점 더 많은 내용을 게시하고 있습니다. Genesis라는 이름으로, 기계 간 언어(machine2Machine language)가 어떻게 작동하는지, 인간 교사나 루프 내의 언어가 없을 때 무슨 일이 발생하는지를 탐구합니다.
시간이 유일한 변수인 활발한 분기점이므로 시간이 있을 때 읽으면 흥미로울 것입니다.
가장 좋은 점은 제가 모든 작업에 Runner를 사용하기 때문에 직접 테스트(dogfood)하는 부분이 많다는 것입니다. 이는 버그, 기능 등이 나타나는 즉시 패치되고 수정된다는 것을 의미합니다.
어떤 입력, 피드백, 포크 또는 무엇이든 환영하며, 기꺼이 돕고, 발전시키거나, 아니면 제가 입을 다물기를 원하시면 그렇게 할 수도 있습니다…
그리고 링크들:
Runner: https://github.com/Joakimpalm-Zen/xyntetik-runner
HF: https://huggingface.co/Joakimpalm-Zen
메인 웹: https://xyntetik.com/
Runner는 Astra, Fable, Opus, Sol 및 우리가 보통 다루는 다른 모든 훌륭한 '사람들'의 도움을 받아 개발되었습니다.
그리고 마지막으로, 정말 지쳤으니 이제 잠자리에 들겠습니다. 무언가 있거나, 없거나, 또는 뭔가에 대해 알려주세요…
[링크] [댓글]