
Zest는 리눅스 컴퓨터에서 대형 언어 모델을 실행하고 파일 작업까지 맡길 수 있는 앱이다. Lemonade 로컬 실행 엔진과 Pi 코딩 에이전트 도구를 AppImage 하나에 담았으며, 기술 설정을 줄여 모델과 대화하거나 문서·그림을 만들고 지정한 폴더의 파일을 읽고 수정하게 한다. 현재 리눅스 x86_64만 지원한다.
Zest는 오픈 웨이트 모델을 자신의 하드웨어에서 쓰려는 사람을 대상으로 한다. 채팅 입력은 기본적으로 컴퓨터 밖으로 나가지 않는다. 웹 검색 기능을 쓰려면 모델이 검색할 문구를 보여 주고 매번 허락을 받는다. 파일 작업은 선택한 폴더에서 이뤄지며, 변경 전 확인을 받도록 설정할 수 있다.
설치와 첫 실행
최신 릴리스에서 Zest-<version>-x86_64.AppImage를 내려받고 실행 권한을 준 뒤 실행한다.
chmod +x Zest-*-x86_64.AppImage
./Zest-*-x86_64.AppImage
시작 안내는 네 단계로 구성된다. Zest가 Lemonade 전용 사본을 시작하고, 그래픽 카드에 맞는 실행 프로그램을 내려받는다. NVIDIA는 CUDA, 대부분의 그래픽 카드는 Vulkan을 쓰며, 여의치 않으면 프로세서를 대체 경로로 사용한다. 이어 하드웨어에 맞는 모델을 세 단계로 제안한다. Quick은 빠르고 도구 사용에 적합하며 거의 모든 컴퓨터에서 쓸 수 있는 LFM2.5 8B A1B다. Balanced는 Qwen3.6 35B A3B MTP 또는 Gemma 4 26B A4B, Thorough는 Qwen3.6 27B MTP 또는 Gemma 4 31B MTP다. 모델을 내려받은 뒤 채팅을 시작한다. 모델은 다른 폴더를 고르지 않는 한 홈 폴더에서 작업한다.
이미 모델을 보유했거나 Lemonade를 직접 실행 중이라면 Advanced > Setup guide에서 상세 설정을 사용할 수 있다. 모델 저장 위치, 기존 모델 탐색, Lemonade 업데이트 등을 선택한다.
필요 조건은 리눅스 x86_64와 첫 실행 때 백엔드 및 모델을 내려받을 인터넷 연결이다. 내장 Lemonade는 glibc 2.38 이상이 필요하며 Ubuntu 24.04, Debian 13, Fedora 39 이상이 예시다. 시스템이 오래되면 Zest가 이를 알리고 직접 설치한 Lemonade에 연결할 수 있다. OpenSSL 3, zstd, libdrm 같은 시스템 라이브러리와 GPU 드라이버도 필요하다. 누락된 라이브러리는 Zest가 이름을 알려 준다. FUSE가 없다면 다음 명령으로 실행한다.
./Zest-*-x86_64.AppImage --appimage-extract-and-run
브라우저 탭을 닫으면 약 3분 뒤 Zest와 Lemonade가 종료된다. 실행 중 다시 실행하면 새 인스턴스를 띄우는 대신 페이지를 다시 연다.
채팅과 파일 작업
왼쪽 메뉴는 Chat, Models, Skills, Docs, Help, Advanced로 나뉜다. 처음 다섯 메뉴에는 일반 사용에 필요한 기능이 있고, 서버·하드웨어·엔진·전체 설정·설치 안내·테마는 Advanced에 모여 있다. 앱 안의 Docs는 쉬운 말로 사용법을 설명하며 내용은 zest/docs.md에 있다. Help에서는 자주 묻는 질문을 보고 시작 안내를 다시 실행할 수 있다.
Chat에서 질문을 입력하면 모델 응답이 실시간으로 표시된다. 제목 아래 막대는 응답할 모델, 컨텍스트 크기(기본 128k), 모델이 메모리에 올라와 있는지 보여 주며 Load, Unload, Reload 기능도 제공한다. 아직 메모리에 없는 모델은 첫 메시지를 보낼 때 로드되므로 첫 응답이 더 오래 걸릴 수 있다. 추론 모델의 생각 과정은 답변 위에 실시간으로 나타났다가 완료 후 접힌다. 마크다운과 코드 블록에는 복사 버튼이 있고, 상태 표시줄은 읽기·생각·쓰기·작업 중인 상태를 아이콘으로 보여 준다.
채팅은 Zest에 포함된 코딩 에이전트 도구 Pi를 사용한다. 각 채팅은 선택한 폴더에서 모델이 파일을 읽고 검색하고 편집하거나 명령을 실행하는 공동 작업이다. 폴더를 선택하지 않으면 홈 폴더를 사용하며, 채팅 상단에 작업 위치가 표시된다. Ask first 모드가 기본이며, 폴더가 없는 경우에도 시작할 수 있지만 작업(job)은 프로젝트 폴더가 필요하다. 모델은 변경 전에 확인을 요청하고, 도구 카드에 각 단계를 표시하며 편집 내용은 차이(diff)로 보여 준다. 채팅마다 Ask first, Edit freely, Do everything, Look only 중 신중함 수준을 정하고, 접근하거나 수정할 폴더를 추가하고, 모델과 컨텍스트 사용량을 확인하거나 작업 중 메모를 남길 수 있다.
큰 작업은 Start a job…을 누르고 완료 조건을 함께 적어 시작한다. 예를 들어 통과해야 할 테스트 명령을 지정할 수 있다. 작업은 백그라운드에서 여러 차례 진행하며 조건이 충족되거나, 설정된 반복 횟수·시간 제한에 도달하거나, 진척이 없으면 멈춘다. 기본값으로 폴더 사본에서 작업하고, Changes 탭에서 변경 사항을 검토한 뒤 원하는 내용만 적용한다. 작업 중에도 채팅을 이어 갈 수 있으며 채팅과 작업은 저장되어 나중에 이어서 사용할 수 있다. 자세한 내용은 docs/COWORK.md를 참고할 수 있다.
각 채팅은 폴더에서 파일을 읽고 검색하고 편집하고 명령을 실행할 수 있다. Ask first와 Edit freely 모드에서는 명령 실행 전에 확인을 요청한다. 프로젝트 소개에는 테스트가 실패하는 폴더의 코드와 테스트를 읽고 한 줄을 수정한 뒤 테스트를 다시 실행한 예가 나온다.
모델 선택과 관리
모델 관리는 Lemonade가 맡고 Zest가 선택 화면을 제공한다. 기본 저장 위치는 Hugging Face 캐시인 ~/.cache/huggingface/hub이며, HF_HOME이 지정돼 있으면 그 경로를 쓴다. 다른 AI 도구와 다운로드를 공유할 수 있고 새 모델을 저장할 폴더도 직접 지정할 수 있다. LM Studio, llama.cpp 캐시, GPT4All, Jan, Ollama, ~/models, ~/Downloads 등에서 기존 모델을 찾는다. 찾은 모델을 선택하면 원본을 복사하지 않고 파일 링크를 만들기 때문에 추가 디스크 공간을 쓰지 않는다. 원하는 폴더를 직접 추가할 수도 있다.
모델 카드의 Get it을 누르거나 Get from Hugging Face에 GGUF 모델 링크를 붙여 넣어 내려받는다. 저장소의 org/name 형식도 입력할 수 있으며, GGUF 버전과 파일 크기, 컴퓨터에서 실행 가능한지에 대한 쉬운 설명을 확인한다. 다운로드는 백그라운드에서 진행되고 진행률이 표시된다. Zest의 추천은 현재 그래픽 카드에서 실제로 사용 가능한 메모리를 기준으로 한다. 다른 프로그램이 메모리를 사용 중이면 이를 알리고 해당 프로그램 이름도 보여 준다.
Models의 My picks에는 제작자가 시험하고 추천한다고 밝힌 모델이 먼저 나오며, More models에는 Lemonade가 제공하는 모델 중 하드웨어에서 잘 실행될 것으로 판단한 나머지 모델이 표시된다. 카드에는 컴퓨터에서 편안하게 실행할 수 있는지에 대한 설명이 있다. 모델을 내려받은 뒤 Chat with it과 Settings를 사용할 수 있다. 삭제는 Details 아래에서 하며, 삭제 전에 확인하고 확보되는 디스크 공간을 알려 준다. 실행 중이면 먼저 모델을 언로드한다.
프로젝트가 제시하는 모델 선택 예시는 다음과 같다.
- LFM2.5 8B A1B는 빠르고 거의 모든 컴퓨터에서 실행되며 도구 호출을 잘하고 답변이 짧은 입문용 모델이다.
- Qwen3.6 35B A3B MTP는 일상 작업, 조사, 에이전트 작업을 위한 일반 추천 모델이다.
- Qwen3.6이 실행되지 않을 때는 빠른 GLM 4.7 Flash를 대안으로 제시하지만, 사실을 지어낼 수 있다는 경고가 붙는다.
- Gemma 4 31B MTP와 Qwen3.8 27B는 더 크고 느린 고밀도 모델이다. 좋은 답을 내지만 느리며, GPU와 RAM 64 GB가 있다면 Strata를 시도해 보라고 안내한다.
- Strata와 Maya는 대형 모델을 위한 별도 추론 엔진으로, Zest와 Lemonade 바깥에서 실행된다는 경고가 표시된다.
- 모델을 보완할 도구로 OpenChamber 앱과 obra/superpowers 스킬을 추천한다.
모델은 기본적으로 128k, 즉 131,072토큰 컨텍스트 크기로 로드된다. 컨텍스트 메뉴에서 채팅별 크기를 바꿀 수 있으며, 크기를 키우면 그래픽 메모리가 더 필요하다. 모델별 Settings에 저장한 크기는 Server 페이지를 통해 다른 앱이 해당 모델을 불러올 때 적용된다. 모델 설정에서는 백엔드와 장치를 고르고 llama-server의 flash attention, 캐시 정밀도, 시스템 RAM의 expert layers, GPU 분할, thinking, speculative decoding 등을 체크박스와 드롭다운으로 조절한다. 변경한 항목은 강조되며, 전달될 정확한 인수와 현재 llama-server가 이해하지 못하는 옵션도 표시된다. 설정을 저장한 뒤 이미 메모리에 올라온 모델은 채팅의 Reload를 눌러 적용한다.
스킬과 다른 앱 연결
스킬은 작업에 필요할 때 모델이 읽는 짧은 지침이다. 기본으로 포함된 Superpowers는 obra/superpowers를 줄인 사본으로, 원하는 바를 확인하고 계획을 세우고 먼저 시험하며 버그 원인을 찾고 수정한 뒤 작동을 입증하도록 안내한다. 다이어그램 스킬은 Mermaid를 작성해 채팅에 그림으로 표시하고 복사하거나 이미지로 저장하게 한다. 그림이 제대로 나오지 않으면 버튼으로 모델에 수정을 요청할 수 있다. 마크다운 작성 스킬도 포함된다.
Skills에서 GitHub 저장소나 저장소 내 폴더 링크를 붙여 새 스킬을 추가할 수 있다. Agent Skills 형식을 따르는 저장소를 지원하며, Hermes Atlas에서 여러 스킬 목록을 볼 수 있다. 스킬은 하나씩 또는 묶음으로 켜고 끌 수 있고, 폴더 대화에서 /를 입력해 고를 수 있다. 신뢰하는 사람의 스킬만 추가하라고 안내한다.
Advanced > Server는 모델을 OpenAI 호환 서버에 연결할 주소와 키, 복사해 쓸 설정을 제공한다. 예를 들어 opencode, Hermes 또는 OpenAI 호환 서버를 지원하는 채팅 앱·코딩 도우미·에이전트에서 사용할 수 있다. 기본 주소는 http://127.0.0.1:13308/v1이다. 키는 Show를 누르기 전까지 설정 화면과 코드 예시에서 숨겨진다.
서버 화면에는 실행 중인 요청별 앱 이름과 모델의 진행 상태, 최근 1분 동안 앱별 요청 타임라인, 요청 목록이 표시된다. 진행 상태 카드에는 모델이 생각한 시간과 답변 단어 수가 나타나며, Show what models are saying을 켜면 현재 생성 중인 문장도 볼 수 있다. 이 기능은 기본적으로 꺼져 있다. 켜면 요청을 열어 질문과 답변을 읽을 수 있지만 내용은 메모리에만 보관되고 Zest를 종료하면 사라진다. 요청 목록은 앱별로 필터링하며 앱 이름은 User-Agent 또는 앱이 보내는 X-Zest-App 헤더에서 가져온다. Lemonade 활동 로그도 같은 페이지에서 확인한다.
다른 앱은 Zest의 자체 페이지에 접속하지 않는다. Zest는 별도 포트 13308에 작은 서버를 열어 모델 목록, 채팅, completions, embeddings, responses, audio, images, reranking, 모델 로드·언로드 등 채팅형 /v1 API만 제공한다. API 키를 항상 요구하며 모델 내려받기·삭제·설치·설정 변경은 이 경로로 할 수 없다. 기본적으로 이 컴퓨터에서만 연결을 받는다. Other devices on my network를 켜면 로컬 네트워크에서도 연결되지만, 그 네트워크의 키 보유자는 모델을 사용할 수 있고 통신은 암호화되지 않는다. 신뢰하는 네트워크에서만 켜야 한다. 새 키를 만들면 이전 키는 즉시 무효가 된다.
업데이트와 고급 설정
Zest 자체를 업데이트하려면 새 AppImage를 내려받는다. AppImage에 포함된 Lemonade와 Pi는 앱 안에서 별도로 업데이트할 수 있다. Lemonade 업데이트는 Advanced > Setup guide에서 확인한다. 새 안정 버전이 있으면 내려받고 GitHub가 공개한 체크섬과 대조한 뒤 설치하고 Lemonade를 다시 시작할 수 있다. 앱 시작 때 업데이트를 확인하는 기능은 체크박스로 끌 수 있다. AppImage는 읽기 전용이므로 업데이트 파일은 사용자 데이터 폴더에 저장하고, 함께 제공된 버전은 덮어쓰지 않는다. 언제든 한 번 눌러 기본 버전으로 돌아갈 수 있다.
Pi는 Setup guide 아래쪽의 The agent helper에서 업데이트한다. 새 버전은 npm 레지스트리에서 내려받고 npm 체크섬을 확인한 뒤 압축을 풀어 Zest와 함께 작동하는지 한 번 실행해 검사한다. 검사를 통과한 버전만 설치 대상으로 제공한다. 이미 진행 중인 작업은 이전 Pi로 마무리하고, 다음 메시지부터 새 버전을 사용한다. Pi 업데이트도 사용자 데이터 폴더에 저장하며 기본 버전은 보존한다. Zest는 시험한 Pi와 같은 메이저 버전 안에서만 업데이트를 제공한다. 더 새로운 Node.js가 필요한 릴리스는 새 Zest가 나올 때까지 기다린다. Zest 시작 시 업데이트 확인 설정은 Lemonade와 Pi에 공통으로 적용된다.
Advanced 메뉴의 기능은 선택 사항이다. Hardware는 llama.cpp가 찾은 장치별 VRAM 사용량, 온도, 전력, 짧은 기록, 메모리를 점유한 프로세스를 보여 주며 사용할 장치와 순서를 지정한다. Engines는 엔진과 CUDA, ROCm, Vulkan, CPU 백엔드를 설명하고 llama.cpp, Whisper.cpp, StableDiffusion.cpp 등 Lemonade 엔진별 지원 백엔드를 표시해 설치·업데이트를 돕는다. All settings에서는 Lemonade 설정 전체를 검색하고 각 항목을 기본값으로 되돌릴 수 있다. Setup guide에서는 백엔드 추가, 기존 모델 가져오기, 모델 저장 위치 변경, Lemonade와 Pi 업데이트를 할 수 있다.
이미 Lemonade Server를 시스템 서비스 등으로 실행한다면 Advanced > Setup guide에서 A Lemonade I already run을 고르고 주소와 필요한 경우 API 키를 입력한다. Zest는 내장 Lemonade를 시작하지 않고 기존 서버를 사용하며, 나중에 한 번 눌러 내장 버전으로 돌아갈 수 있다. --lemonade HOST:PORT로 실행하면 설정을 저장하지 않고 같은 연결을 할 수 있다. 직접 실행하는 Lemonade는 Zest가 업데이트할 수 없어 패키지 관리자를 사용해야 한다. 시스템 서비스 권한에 따라 홈 폴더 안의 모델 파일을 읽지 못할 수도 있다.
테마는 Advanced > Themes에서 고른다. 설정은 해당 컴퓨터에 저장되고 색과 표면만 바뀌며 버튼·패널·메뉴 배치는 유지된다. 기본 Light Touch 외에 Braun T3, Teenage Engineering, Monokai Pro, GitHub Light, One Dark Pro, Dracula, Night Owl, SynthWave '84, Cobalt2, Nord, Gruvbox, GitHub Dark, Catppuccin 등이 포함돼 모두 15개 테마를 제공한다.
데이터와 개인정보
설정 파일에는 내장 Lemonade API 키와 다른 앱용 키가 포함되며 파일 모드는 600이다. 주요 데이터 경로는 다음과 같다.
- 설정:
~/.config/zest/settings.json - 내려받은 Lemonade 업데이트:
~/.local/share/zest/lemonade/<version>/ - 내장 Lemonade 설정과 설치 백엔드:
~/.local/share/zest/lemonade-data/ - Lemonade 로그:
~/.local/share/zest/lemond.log - 가져온 모델 링크:
~/.local/share/zest/imported-models/ - 내려받은 모델: Hugging Face 캐시 또는 사용자가 지정한 폴더
- 추가한 스킬과 활성화 상태:
~/.local/share/zest/skills/ - 내려받은 새 Pi 버전:
~/.local/share/zest/pi/<version>/ - 채팅, 작업 기록, 사용 폴더, 허용 명령, 검토 대기 중인 작업 사본, Pi 설정:
~/.local/share/zest/cowork/ - 화면 설정: 브라우저 로컬 저장소
XDG_CONFIG_HOME과 XDG_DATA_HOME 환경 변수도 따른다. 처음 상태로 되돌리려면 ~/.config/zest와 ~/.local/share/zest를 삭제한다. 사용자가 그 안에 별도 폴더를 지정하지 않았다면 내려받은 모델은 여기에 들어 있지 않는다.
채팅에 입력한 내용은 컴퓨터 밖으로 나가지 않는다. 예외는 사용자가 허용한 웹 검색뿐이며, 검색할 정확한 문구만 검색 제공자에게 전송한다. 채팅의 Details 패널에서 웹 검색을 영구적으로 끌 수 있다. 기본 제공자는 키가 필요 없는 DuckDuckGo지만 공식 검색 서비스가 없어 자동 검색을 거부할 수 있다. Zest는 검색마다 한 번만 요청하고 재시도하지 않는다. 실패하면 무료 Brave Search 또는 Tavily 키를 받아 같은 패널에 입력하라고 안내한다. 키는 이 컴퓨터의 Zest 설정 파일에 저장된다. 폴더 작업 때 Pi는 오프라인으로 시작하고 원격 측정과 업데이트 확인을 끈 채 Lemonade에만 연결한다. 사용자가 Pi에 자체 확장, MCP 서버, 웹 도구를 추가하면 네트워크에 연결할 수 있다.
Zest와 Lemonade가 연결하는 서비스는 기능에 따라 다르다.
html.duckduckgo.com,api.search.brave.com,api.tavily.com: 사용자가 웹 검색을 허용했을 때 선택한 제공자에 검색어를 보낸다.codeload.github.com: Skills에 저장소 링크를 붙여 넣었을 때 해당 스킬을 내려받는다.registry.npmjs.org: Pi 업데이트 확인과 다운로드에 사용한다. 자동 확인을 끌 수 있다.api.github.com,github.com: Lemonade 업데이트 확인·다운로드와 Lemonade가 설치할 백엔드 다운로드에 사용한다. 업데이트 자동 확인을 끌 수 있다.- Hugging Face: Lemonade가 사용자가 선택한 모델을 내려받고, Get from Hugging Face 기능이 공개 파일 목록을 읽는다. 로그인이 필요한 제한 모델은 아직 지원하지 않는다.
- 모델 선택 안내에 있는 벤치마크·커뮤니티 사이트는 사용자가 링크를 눌렀을 때 브라우저에서만 열린다. Zest가 직접 접속하지 않는다.
개발자 정보와 한계
소스에서 실행하려면 Python 3이 필요하며 외부 Python 패키지는 사용하지 않는다. 개발 기준 버전은 3.12다.
git clone https://github.com/yudhanjaya/Zest.git
cd Zest
python3 zest/server.py
채팅에서 다이어그램을 그리려면 Mermaid가 필요하다. ./packaging/fetch-vendor.sh를 한 번 실행해 26 MB 파일을 내려받으며 공개 체크섬과 대조한다. AppImage에는 Mermaid가 포함돼 있다. Pi 에이전트 기능에는 Node 22.19 이상이 필요하다. 다음 명령으로 설치하거나 ZEST_PI를 pi 실행 파일 경로로 지정한다.
npm install -g @earendil-works/pi-coding-agent
소스 체크아웃에는 Lemonade가 들어 있지 않다. 시작 화면 또는 Advanced > Setup guide에서 Download Lemonade를 선택하면 약 7 MB를 내려받거나, 이미 실행 중인 Lemonade에 연결한다. 앱은 기본적으로 http://127.0.0.1:13306/을 브라우저에서 연다. --no-browser로 자동 열기를 막을 수 있다.
실행 옵션과 기본값은 다음과 같다.
--port또는ZEST_PORT: Zest가 수신할 포트. 기본값은13306이다.--host또는ZEST_HOST: 수신 주소. 기본값은127.0.0.1이다.--lemonade HOST:PORT: 지정한 Lemonade를 사용하고 시작 안내를 건너뛴다. 키는LEMONADE_API_KEY로 지정하며, 없으면 Zest 설정에 저장된 선택을 사용한다.--no-browser: 브라우저 탭을 자동으로 열지 않는다.--app: 탭을 닫으면 자동 종료한다. AppImage에서 사용한다.ZEST_LEMONADE_DIR: 내장 Lemonade로 사용할lemond파일이 있는 폴더를 지정한다. 기본값은 없다.
보안상 Zest 자체 페이지에는 로그인 기능이 없고 Lemonade 설정을 변경할 수 있으므로 기본적으로 127.0.0.1에서만 연결을 받는다. DNS 재바인딩 방어를 위해 Host 헤더가 이 컴퓨터를 가리키지 않는 요청도 거부한다. 내장 Lemonade는 별도 포트에서 실행되고 Zest만 아는 무작위 API 키로 보호된다. 다른 앱은 자체 페이지가 아닌 별도의 키 보호 서버를 사용한다. --host 0.0.0.0은 신뢰하는 네트워크에서만 사용해야 한다.
Zest는 의존성 없는 소형 Python 프로그램(zest/server.py와 몇 개 모듈)과 HTML 페이지 하나(zest/index.html)로 구성된다. zest/gateway.py는 다른 앱의 연결 창구이자 요청 기록기다. Zest 채팅과 다른 앱 요청은 공통 함수를 거쳐 응답을 그대로 스트리밍하고, 대기·생각(reasoning_content 또는 <think> 태그 안의 텍스트)·작성 상태를 기록한다. zest/agent.py는 작업마다 pi --mode rpc 프로세스를 실행하고 Zest의 /api/v1 프록시를 통해 Lemonade에 연결한 뒤 JSON 이벤트를 서버 전송 이벤트로 페이지에 전달한다. zest/pi/zest-gate.js는 편집과 명령 실행 전에 Pi가 확인하도록 하는 확장이다. zest/hf.py는 Hugging Face 저장소의 파일 목록을 읽고 GGUF 파일을 양자화 방식별로 묶는다.
/api/* 요청은 Lemonade로 그대로 전달되므로 페이지에 CORS 변경이 필요하지 않다. 채팅은 OpenAI 호환 /api/v1/chat/completions 스트림을, 모델 다운로드는 Lemonade 백그라운드 작업을 사용한다. Lemonade 설정 변경도 자체 HTTP API인 /internal/config, /internal/set, 모델별 옵션용 /v1/models/{id}/options, 백엔드 설치용 /v1/install을 거친다. Zest는 lemonade 명령줄 도구에 의존하지 않는다. 내장 Lemonade는 프로젝트의 공식 embeddable 빌드이며 lemond <data folder> --port … --no-broadcast와 무작위 LEMONADE_API_KEY로 시작한다. 이전 Zest가 남긴 인스턴스가 있으면 새 인스턴스를 추가로 띄우지 않고 재사용한다.
장치 순서는 중요하다. llama.cpp는 nvidia-smi와 장치 번호를 다르게 매길 수 있고 CUDA에서는 가장 빠른 카드가 먼저 나오므로, Zest는 llama.cpp 실행 파일에서 직접 장치 목록을 가져온다. NVIDIA 실시간 GPU 정보는 nvidia-smi, AMD 정보는 리눅스 amdgpu 드라이버의 sysfs 파일에서 읽는다. AMD 정보에는 VRAM 사용량과 총량, 부하, 온도, 전력, 팬, 메모리를 점유한 프로세스가 포함된다. 로그는 Lemonade 자체 출력이며 시스템 서비스 로그는 journalctl -u lemond에서 확인할 수 있다.
실시간 장치 정보는 리눅스의 NVIDIA와 AMD를 지원한다. Intel 장치는 목록에 표시되고 선택할 수 있지만 실시간 사용량은 나오지 않으며, 적합성 표시기는 메모리가 비어 있다고 간주한다. AMD 수치는 커널에서 가져와 별도 도구가 필요 없지만, 실제 AMD 하드웨어에서는 아직 시험되지 않았다. 시뮬레이션한 amdgpu sysfs와 Radeon VII 두 대가 나온 스크린샷만으로 확인했으며, 같은 AMD 카드 두 대는 llama.cpp 장치 순서에 맞춰 연결하므로 사용량이 서로 바뀌어 표시될 수 있다. Hugging Face 모델 다운로드는 Lemonade에 사용자 지정 모델(user.<name>-<quant>, 체크포인트 org/repo:QUANT, llamacpp 레시피)로 전달한다. 이 API는 이전에 바뀐 적이 있으므로 Lemonade 버전에 맞는지 확인해야 한다. 하드웨어 페이지에 표시되는 프로세스 이름은 nvidia-smi 또는 AMD 드라이버에서 가져오며 전체 경로가 아니라 이름만 표시하고, 사용자 자신의 브라우저에만 나타난다. 백엔드가 설치된 뒤에야 장치 목록이 보인다. 실기기에서 시험한 환경은 NVIDIA GPU를 사용하는 리눅스다. Vulkan과 ROCm 경로는 Lemonade의 백엔드 정보를 따르지만 실제 하드웨어에서는 아직 시험하지 않았다.
AppImage는 다음 명령으로 빌드한다.
./packaging/build-appimage.sh
스크립트는 재배치 가능한 Python, Node.js, Pi 에이전트, Lemonade 공식 embeddable 빌드, appimagetool을 내려받는다. 모두 SHA-256으로 고정해 확인한 뒤 이미지를 만들고 dist/Zest-<version>-x86_64.AppImage와 체크섬을 기록한다. 최신 Lemonade를 포함하려면 스크립트 상단의 버전과 체크섬을 바꾼다. v로 시작하는 태그를 푸시하면 GitHub Actions가 같은 스크립트를 실행해 결과물을 릴리스에 첨부한다. 릴리스를 만들 때는 zest/server.py의 VERSION을 올리고 다음 명령을 실행한다.
git tag vX.Y.Z && git push --tags
Zest에는 Pi(MIT), Lemonade(Apache-2.0)가 수정 없이 AppImage에 포함되며 라이선스도 함께 들어간다. llama.cpp(MIT)와 기타 백엔드는 설치할 때 Lemonade가 내려받는다. Python은 PSF 라이선스의 python-build-standalone 재배치 빌드로 포함돼 시스템 Python이 필요 없다. Zest 자체는 MIT 라이선스를 따른다.
참고 자료: Pi, Lemonade, llama.cpp, Python, python-build-standalone.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요