
Lemonade 도입 정리 (EVO X2・Ubuntu 24.04)
요약
AMD Ryzen AI Max+ 395를 탑재한 GMKtec EVO-X2와 Ubuntu 24.04 환경에서 오픈 소스 로컬 AI 서버인 Lemonade를 구축하는 과정을 소개합니다. 이 시스템은 대용량 공유 메모리를 활용하여 고가 GPU가 필요했던 대규모 언어 모델(LLM) 및 이미지 생성, 음성 모델을 로컬 환경에서 구동할 수 있게 합니다. Lemonade는 AMD 환경에 특화되어 있으며, CLI와 WebUI를 통해 간편하게 사용 가능하고 OpenAI/Anthropic/Ollama 호환 API를 제공하는 것이 장점입니다.
핵심 포인트
- AMD Ryzen AI Max+ 395 기반의 GMKtec EVO-X2가 대용량 공유 메모리를 활용하여 로컬 LLM 구동을 지원합니다.
- Lemonade는 AMD 환경에 최적화된 오픈 소스 로컬 AI 서버로, LLM, 이미지 생성, 음성 모델 등을 통합 관리할 수 있습니다.
- Lemonade는 OpenAI, Anthropic, Ollama 등 주요 서비스와 호환되는 API를 제공하여 범용성이 높습니다.
- 시스템 설정 시 ROCm 및 amdgpu-install 패키지 설치가 필요하며, BIOS에서 UMA Frame Buffer Size 설정을 고려해야 합니다.
AMD의 Ryzen AI Max+ 395를 탑재한 GMKtec EVO-X2는, dGPU(외장 GPU)에는 미치지 못하지만 준수한 iGPU(내장 GPU)를 갖추고 있으며, 대용량 공유 메모리를 이용함으로써 지금까지 고가이며 메모리가 풍부한 GPU에서만 동작했던 대규모 모델을 로컬 환경에서 동작시키는 것이 가능합니다.
본 기사에서는 이러한 EVO-X2를 사용하여, 오픈 소스 AI 서버인 Lemonade를 도입하고 LLM(대규모 언어 모델)의 로컬 실행 환경을 구축하는 절차를 소개합니다.
- Lemonade는 LLM·이미지 생성·음성 모델(TTS·STT)을 로컬 하드웨어 위에서 직접 실행할 수 있는 오픈 소스 로컬 AI 서버입니다. AMD가 지원하고 있으며, AMD 환경에서의 동작에 특화되어 있습니다 (Apple Silicon에서도 일부 동작한다고 합니다). 제한은 있지만 NPU로 LLM을 실행할 수도 있습니다.
- 심플한 관리: CLI(명령줄 인터페이스)에서 모델의 Pull, Load, 실행을 완결하며, WebUI도 제공합니다.
- 광범위한 호환성: OpenAI·Anthropic·Ollama 호환 API를 제공합니다.
간단하게 패키지를 설치해 버리면 어느 정도 일차적인 사용이 가능한 상태가 된다는 점이 장점이라고 생각합니다.
반대로 세밀하게 튜닝하고 싶은 경우에는 설정에 수고가 들거나, Lemonade가 멋대로 설정하여 변경할 수 없는 부분도 있으므로 적합하지 않은 느낌입니다.
| PC | GMKtec EVO-X2 |
|---|---|
| CPU | AMD Ryzen AI Max+ 395 |
| iGPU | Radeon 8060S |
| RAM | LPDDR5x 128GB |
| OS | Ubuntu 24.04 LTS |
GPU 단독 성능으로는 Geforce RTX 5050보다 조금 느린 정도인 것 같습니다 (제조사의 홍보 문구에는 RTX 4070을 능가한다는 등의 설명이 있지만, 실용상의 성능은 전혀 그렇지 않습니다).
SDXL로 동일한 조건의 이미지 생성을 수행할 경우, 16GB의 VRAM(비디오 램)에 들어오는 출력 사이즈라면 가지고 있는 4070Ti Super 쪽이 4배~ 더 빠릅니다.
(소비 전력이 전혀 다르기 때문에 비교 대상은 아니지만, 퍼포먼스를 알고 싶은 분들을 위한 참고치로서)
Ubuntu 24.04의 경우, OEM 커널이 필요합니다.
# 시스템 업데이트
sudo apt update
sudo apt upgrade
...
24.04d 버전에서는 NIC(RTL8125?)의 인식이 불안정해진다고 하므로 24.04c를 설치합니다.
# 재부팅하여 적용
sudo reboot
uname -r
...
wget https://repo.radeon.com/amdgpu-install/25.35.1/ubuntu/noble/amdgpu-install_7.2.1.70201-1_all.deb
sudo apt -y install amdgpu-install_7.2.1.70201-1_all.deb
reboot
...
GPU가 올바르게 인식되고, ROCm이 동작하고 있는지 확인합니다.
rocminfo
rocm-smi
amd-ttm을 사용하면, VRAM 요구량에 따라 시스템 RAM에서 VRAM으로서 동적으로 할당할 수 있는 영역(GTT)의 크기를 강제로 변경하여, BIOS에서 설정 가능한 상한치(96GB)를 초과하여 VRAM을 확보할 수 있게 됩니다 (단, 그만큼 CPU가 사용하는 메모리 영역을 빼앗게 되므로, 필요한 메모리를 확보하지 못해 행(Hang) 상태에 빠질 가능성은 높아집니다).
BIOS의 **UMA Frame Buffer Size는 「최소 (최신 BIOS에서는 2GB)」**로 설정하는 것을 권장합니다.
BIOS에서 설정하는 VRAM 사이즈는 전용 영역으로서 iGPU 전용으로 예약되기 때문에, CPU가 인식하고 사용할 수 있는 RAM의 양이 그만큼 줄어듭니다.
쉽게 말하자면, CPU/GPU 어느 쪽에서도 사용할 수 있는 영역을 크게 잡아두는 편이 이득이라는 느낌입니다.
sudo apt install pipx -y
pipx ensurepath
※ pipx ensurepath 실행 후에는 터미널을 재시작해야 합니다.
pipx install amd-debug-tools
탑재된 메모리 용량에 맞춰 GPU가 이용 가능한 상한치를 설정합니다.
# 현재 설정 확인
amd-ttm
# 예: 128GB RAM 탑재 기기에서 108GB를 할당할 경우
...
설정 후, OS 재부팅이 필요합니다.
앞서 언급했듯이, 행업 (Hangup) 가능성이 있으므로 여유가 없는 설정은 권장되지 않지만, VRAM 사용량을 관리하고자 한다면
amd-ttm --set 123
amd-ttm
# 💻 Current TTM pages limit: 32243712 pages (123.00 GB)
...
와 같은 설정도 가능합니다 (실제로 제 환경에서는 LLM으로 112GB를 초과하는 VRAM을 확보하는 경우가 있지만, 행업 없이 동작합니다).
lemonade는 공식 PPA를 제공합니다.
# PPA 추가
sudo add-apt-repository ppa:lemonade-team/stable -y
sudo apt update
...
설치 후 모델을 로드하면 서버가 백그라운드에서 실행됩니다.
WebUI에는 http://localhost:13305를 통해 접속할 수 있습니다.
설정 파일은 조금 찾기 어렵지만,
/var/lib/lemonade/.cache/lemonade/config.json
에 있습니다.
sudo nano /var/lib/lemonade/.cache/lemonade/concig.json
# 설정 변경을 적용하고 재시작
sudo systemctl restart lemond
기본값은 ctx_size가 상당히 작게 설정되어 있으므로 확장해 두는 것이 좋습니다.
서버 포트를 변경하고 싶다면 port를 변경합니다.
또한, 외부 호스트에서 사용하는 경우에는 host를 0.0.0.0 등으로 설정해 둡니다.
큰 모델을 사용하는 경우에는 global_timeout도 늘려두는 것이 좋습니다.
설정 파일에 대한 상세한 도움말은 아래에 있습니다.
lemonade는 CLI를 통해 모델을 관리할 수 있습니다.
# 사용 가능한 모델 목록 표시 (프리셋)
lemonade list
# lemonade가 프리셋으로 가지고 있는 모델을 다운로드
...
HuggingFace에서 공개된 모델의 경우, 모델 카드 페이지에 있는 Use this model 드롭다운을 열면 가장 아래의 view all local apps 안에 Lemonade가 있으며, 이를 선택하면 다음과 같은 팝업이 표시됩니다. 이 팝업에서 양자화 (Quantization) 비트 수를 선택하여 명령어를 복사할 수 있습니다.
HuggingFace에서 pull한 모델 정보는 다음 파일에 등록됩니다.
/var/lib/lemonade/.cache/lemonade/user_models.json
llamacpp의 실행 옵션은 recipe_options의 llamacpp_args로 지정할 수 있지만, --jinja는 기본적으로 삽입되므로 직접 기술하면 에러가 발생합니다.
또한, ctx_size는 llamacpp_args에 포함되지 않고 독립적인 설정이 됩니다 (config.json의 설정값을 덮어씁니다).
{
"Qwen3.6-35B-A3B-GGUF": {
"checkpoint": "unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q8_K_XL",
...
recipe_opeions는 recipe_options.json이라는 별도의 파일로 분리할 수도 있습니다.
{
"user.Qwen2.5-Coder-1.5B": {
"ctx_size": 16384,
...
user_models.json에서 설정한 모델은 user. 접두사 (Prefix)를 붙이게 되어 있습니다.
lemonade run user.Qwen3.6-35B-A3B-GGUF
lemonade가 채택하고 있는 llamacpp 버전에 따라, 지원하지 않는 새로운 채팅 템플릿 (Chat Template) 구문을 사용하는 모델은 사용할 수 없는 경우가 있습니다.
(2026/5/17 현재, unsloth/Devstral-2-123B-Instruct-2512-GGUF는 로드하려고 해도 실패합니다)
Lemonade는 Anthropic의 API 호환 서버 기능을 제공하며, ClaudeCode에서 사용하는 것도 (일단은) 가능합니다.
export ANTHROPIC_AUTH_TOKEN=lemonade
export ANTHROPIC_BASE_URL=http://<lemonade 서버>:<포트 번호>
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
...
실제로 Claude Code에서 사용하는 것은 가능하지만, 빈번하게 멈추거나(Claude가 아무것도 출력하지 않고 추론이 종료됨—아마도 종료 토큰(End Token) 오작동), 툴 콜(Tool Call)이 제대로 작동하지 않는 등의 문제가 있으며, 추론 중에 에러로 인해 모델이 언로드(Unload)되어 버리는 경우도 있습니다(모델 언로드 후 다시 로드 필요).
로컬에서 돌아가는 모델은 애초에 그리 똑똑하지 않기 때문에 복잡한 지시를 내리면 엉뚱한 결과를 반환하는 경우도 많아, 솔직히 큰 기대는 하지 않는 편이 좋을 것입니다 (로컬 LLM만을 위해 현재 가격으로 메모리가 듬뿍 들어간 EVO X2나 Mac을 사는 것보다는 Claude의 Max 플랜을 구독하는 것이 더 이득일지도 모릅니다).
LLM 채팅 서버라는 의미에서는 Ollama나 llama를 사용해도 비슷한 일을 할 수 있지만, AMD의 지원을 받고 있다는 점에서 NPU를 비롯한 각종 대응 및 최적화도 기대할 수 있고, AMD 환경에서 간편하게 LLM 서버를 구축할 수 있다는 의미에서는 Lemonade를 사용하는 것도 괜찮은 선택이라고 생각합니다.
그 외의 차별점으로는 이미지 생성, STT(Speech-to-Text), TTS(Text-to-Speech)가 통합되어 있다는 점이 있지만, 현재로서는 사용성이 그리 좋아 보이지는 않아서 앞으로의 발전을 기대해야 할 것 같습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기