NEW코딩일지 · 11.05코퍼스 메인에 주장 연구실을 세웠다: 사유고2 주장 29만 개를 자동 등록하고 스파크 두 대가 반증 조건까지 검토한다
← 개발로그
·6분

Control Tower 개발로그 · 2화

Control Tower에 두 번째 스파크와 서버 속도를 붙이고, 스파크 업무를 예약하는 스파크테이블을 만들었다

9월 29일부터 10월 8일까지 집의 컴퓨터를 한 화면에서 보는 Control Tower를 고쳤다. 윈도우 에이전트는 창 없이 부팅 때 뜨고, 두 번째 DGX Spark가 붙어 다섯 대가 됐고, 모델 줄에 서버 전체 생성 속도가 뜬다. 10월 8일에는 스파크가 비는 대로 예약한 업무를 이어서 돌리는 스파크테이블을 만들었다.

▸ Control Tower#control-tower#dgx-spark#bun#scheduler#dashboard

Control Tower는 집에 있는 컴퓨터들의 상태와 로컬 LLM을 한 화면에서 보고 바꾸는 관제판이다. 9월 29일에 포트폴리오를 올릴 때는 네 대였다. 지금은 다섯 대가 붙어 있고, 보는 화면 말고 스파크에 일을 맡기는 화면이 하나 더 생겼다.

Control Tower 대시보드. 머리글에 5 hosts · 5 up · 0 down과 스파크테이블 링크. Mac Studio, Windows 5090, DGX Spark, DGX Spark 2, MacBook Pro 다섯 개의 띠에 cpu·ram·gpu·ssd 막대와 5분 그래프, 모델 목록. 두 스파크의 Flash Next 모델 줄에 처리 중 20·생성 241 tok/s, 처리 중 23·생성 250 tok/s가 보인다
10월 8일 오전. 다섯 대가 모두 연결돼 있고, 두 스파크는 각각 요청 20개와 23개를 처리하고 있다. 머리글의 기기 이름은 가렸다.

9월 29일, 윈도우 에이전트가 창 없이 부팅 때 뜨고 꺼지면 다시 뜬다

윈도우 PC에 깐 에이전트는 로그인할 때마다 검은 콘솔 창을 띄웠고, 그 창을 닫으면 에이전트도 같이 죽었다. 창을 숨기라는 옵션을 줬는데도 소용이 없었다. 윈도우 11은 콘솔을 Windows Terminal로 띄우는데, Windows Terminal이 그 옵션을 무시했다. 관리자 권한으로 설치하면 이제 부팅 때 창 없이 도는 예약 작업으로 등록하고, 그렇지 않으면 창 없는 콘솔로 로그인 때 띄운다. 에이전트가 죽으면 다시 띄우는 반복도 넣었다.

두 번째 스파크를 붙이자 모델을 돌리고 있는데도 쉬는 것으로 보였다

10월 2일 DGX Spark를 한 대 더 들이면서 대시보드에 카드를 붙이고, 1번과 같은 모델 전환기(Flash Next, 27B FP8, 27B NVFP4)를 달았다. 재부팅 직후 기기 이름으로 찾지 못하는 일이 있어서 두 스파크는 고정 주소로 찾게 했다.

그런데 2번 스파크는 요청 16개를 처리하는 중에도 모델이 돌고 있다는 표시가 뜨지 않았다. 에이전트는 docker에 물어서 모델 컨테이너가 떠 있는지 보는데, 2번의 에이전트가 docker를 쓸 권한이 없었다. 세팅하면서 계정을 docker 그룹에 넣었지만, 그 전에 이미 떠 있던 백그라운드 서비스 관리자는 재부팅 전까지 새 그룹을 모른다. 에이전트를 docker 그룹으로 띄우는 설정 하나를 더해 해결했다. 새 리눅스 기기를 붙일 때는 에이전트를 띄우기 전에 그룹부터 넣어야 한다는 것도 기록해 뒀다.

모델 줄에 서버 전체의 최근 1분 생성 속도를 띄웠다

10월 3일, 처리 중인 요청 수 옆에 속도도 넣을 수 있느냐고 물었다. 이제 돌고 있는 모델 줄이 “처리 중 16 · 생성 169 tok/s · 누적 …“처럼 읽힌다. 이 속도는 서버가 최근 1분 동안 모든 요청을 합쳐 만든 토큰 수다. 마우스를 올리면 프롬프트를 읽는 속도도 나온다. 새 프롬프트를 읽는 동안에는 생성 속도가 떨어지기 때문에 둘을 같이 봐야 한다. 상세 패널의 예전 속도 항목은 사실 요청 하나의 속도였는데, 16개가 동시에 돌면 초당 12토큰쯤으로 나와 헷갈렸다. 그 항목에는 “요청당”이라는 이름을 붙였다. 이 숫자를 붙이게 된 사정은 스파크 활용 4화에 있다.

10월 8일, 스파크가 비는 대로 예약한 업무를 이어서 돌리는 스파크테이블을 만들었다

스파크 두 대에는 매일 도는 자동화가 있고, 그 사이사이 내가 맡기는 긴 일이 있다. 스파크가 언제 비는지 지켜보다가 손으로 다음 일을 띄우는 게 번거로웠다. 그래서 식당 예약 앱처럼 스파크 업무를 미리 예약해 두고, 스파크가 비면 바로 이어서 하게 하자고 했다. Control Tower 안에 “스파크테이블”이라는 화면이 생겼다.

화면에서는 업무와 스파크만 고른다. 업무는 미리 등록해 둔 메뉴에서만 고를 수 있고, 명령을 직접 칠 수는 없다. 이 화면이 집의 네트워크에 열려 있어서다. 지금 메뉴는 네 가지다. 사유고2의 투자 책 146권으로 지식 연결망 만들기(약 2시간 30분), 795권 전체로 만들기(약 12시간), 자주 틀리는 반박·구체화 관계를 생각을 켜고 다시 판정하기(약 1시간), 새로 들어온 책의 구조 지도 만들기(약 1시간)다.

허브는 20초마다 두 스파크에 언어 모델 요청이 몇 개 돌고 있는지, 영상 대기열이 비었는지 확인한다. 스파크가 2분 동안 계속 비어 있으면 다음 예약을 시작한다. 1번 스파크는 아침 딥리서치와 저녁 카드릴스·딥리서치 시간(06:15~07:45, 16:40~19:40)에는 새 일을 시작하지 않는다. 예약은 스파크마다 순서대로 돌고, 두 대를 다 쓰는 예약은 두 대가 모두 빌 때 시작한다.

업무는 맥에서 따로 떼어 실행하고 로그와 종료 코드를 파일로 남긴다. 그래서 허브를 다시 켜도 돌던 업무를 이어서 지켜본다. 같은 날 오전에 기능을 계속 붙였다.

  • 진행 중인 업무의 시작 시각, 예상 완료, 남은 시간. 예약마다 앞 업무가 끝나는 시각에 이어 붙인 예상 시작과 완료.
  • 순서 바꾸기(맨 앞으로, 한 칸 위·아래), 지금 바로 실행, 줄 맨 앞에 넣는 우선 예약.
  • 일시정지와 다시 시작. 메뉴에 정지 방법이 있으면 그걸 쓰고, 없으면 프로세스를 멈춘다. 취소하면 스파크에 남은 작업기도 멈춘다.
  • 테이블 밖에서 돌고 있는 일도 보여 준다. 다른 곳에서 예약해 스파크를 빌려 쓰는 업무, 맥에서 돌고 있는 언내츄럴·딥리서치·카드릴스 같은 프로세스, 출처를 모르는 요청 수까지 스파크마다 표시한다.
  • 1번 스파크의 매일 자동화(06:20 딥리서치 오전판, 17:25 카드릴스, 18:10 딥리서치 오후판)는 맥의 예약 작업 설정에서 직접 읽어 와 다음 순서와 남은 시간을 보여 준다.
  • 맥 앱의 메뉴바 메뉴에서 ⌘T로 바로 연다.

테스트를 쓰다가 저장이 동시에 두 번 일어나면 임시 파일 이름이 겹쳐 저장이 실패하는 것을 찾았다. 저장을 한 줄로 세워서 고쳤다. 첫 실제 예약은 2번 스파크의 “지식 연결망: 투자 책 146권”이었다.

스파크테이블 화면. 왼쪽 스파크1 칸에 매일 자동화 06:20 AC 시황 딥리서치 오전판, 17:25 카드릴스 영상 제작(다음, 7시간 6분 후), 18:10 오후판과 지금 하는 일 지식 연결망: 투자 책 146권(빌려 씀, 08:36 시작, 예상 완료 11:06). 오른쪽 스파크2 칸에 같은 업무와 예약 2건(795권 전체 11:06→23:06, 반박·구체화 다시 판정 23:06→10/9 00:06)과 지금 실행·순서 버튼, 끝난 일. 아래에 메뉴 카드 네 장과 스파크2에 예약·두 대 모두에 예약·우선 예약 버튼
10월 8일 오전 10시 19분의 스파크테이블. 2번 스파크가 투자 책 146권 연결망을 돌리며 1번을 빌려 쓰고 있고, 그 뒤로 예약 두 건이 이어진다.

배운 것

공유하는 기계를 예약하려면 예약 밖에서 돌아가는 일까지 알아야 했다. 처음 만든 테이블은 자기가 띄운 업무만 알아서, 다른 세션이 스파크를 쓰고 있으면 왜 기다리는지 설명하지 못했다. 맥의 프로세스와 자동화 설정까지 읽게 하자 화면이 “지금 이 스파크가 무엇을 하고 있는가”에 답하기 시작했다.

그리고 네트워크에 열린 화면에는 명령 입력칸을 두지 않았다. 할 수 있는 일을 메뉴로 미리 정해 두면 누가 이 화면을 열어도 그 메뉴 밖의 일은 시킬 수 없다.

Control Tower 개발로그 · 전 2화

  1. 2화여러 AI와 함께 일하는 단톡방을 만들었다
  2. 2화Control Tower에 두 번째 스파크와 서버 속도를 붙이고, 스파크 업무를 예약하는 스파크테이블을 만들었다