-
[Mac] llama.cpp 로컬에서 설치하고 간단하게 찍먹해보기HomeLAB/Mac(OSX, macOS) 2025. 2. 21. 20:53
맥북에서 로컬 LLM을 돌리는 프로그램으로 Ollama를 거쳐 LMStudio로 잘 사용하다가 나중에 GPU 서버에서 서빙하는 걸 연습도 해볼 겸 vLLM으로 알아보고 있었습니다. 하지만 맥의 GPU(Metal - MPS)를 사용할 수 없다는 결론이 나와서 llama.cpp로 알아보게 되었습니다.
제가 컨테이너 사랑꾼(...)이라 llama.cpp 또한 컨테이너로 실행하려고 했고 도커 이미지가 존재하기에 사용할 수 있었지만, 애플의 정책상 VM에서는 GPU 가속이 무슨 짓을 해도 안된다는 글을 발견해고 호스트에 설치하기로 생각했습니다. 원래는 가상 환경을 만들고 llama.cpp를 빌드해야 하지만, 따로 빌드할 필요 없이, brew로 빌드되어 있는 바이너리 파일을 간편하게 설치할 수 있었습니다.
0. 시스템 사양
Apple MacBook Pro 16
CPU: M3 MAX
RAM: 64GB
OS: macOS Sequoia 15.2
llama.cpp 버전: version: 4747 (c5d91a74) / built with Apple clang version 16.0.0 (clang-1600.0.26.6) for arm64-apple-darwin24.2.0
1. 준비 사항
준비해야 할 사항이 있습니다.
1. homebrew 설치 - https://brew.sh/ 에 있는 설치 명령어를 터미널에 입력하여 설치하세요.
2. 모델 준비 - https://huggingface.co/ 에서 GGUF 모델을 찾아 다운로드합니다. (제가 이번 글에서 사용할 모델은 https://huggingface.co/LGAI-EXAONE/EXAONE-3.5-32B-Instruct-GGUF 입니다.)
2. homebrew로 llama.cpp 설치
먼저, homebrew로 llama.cpp를 설치해 줍니다.
# https://formulae.brew.sh/formula/llama.cpp brew install llama.cpp
알아서 설치합니다. 설치가 완료된 뒤, 터미널에 llama- 까지 친 뒤, Tab을 눌러보면..
이렇게 다양한 llama.cpp에 있는 유틸리티가 설치된 것을 확인할 수 있습니다.
3. llama.cpp로 LLM 모델 써보기
여기서는 Ollama 느낌인 llama-simple-chat으로 터미널에서 잠깐 사용해 볼 겁니다.
# llama-simple-chat 사용 # llama-simple-chat -m ./EXAONE-3.5-32B-Instruct-Q4_K_M.gguf llama-simple-chat -m <모델 위치>
대부분의 모델들에게 처음에는 이거부터 물어봅니다. 짧은 답변이라 GPU를 오래 사용하진 않았으나, 답변할 때마다 GPU 사용량이 100% 언저리에서 놉니다.
4. llama.cpp와 OpenWebUI로 LLM 모델 사용해 보기
전반적인 세팅은 https://expbox77.tistory.com/10 을 참고하시면 됩니다. 로컬에서 llama-server로 LLM 서빙, OpenWebUI에서 채팅한다고 보시면 됩니다.
# 포트는 기본 8080이나, 저는 따로 사용하고 있어 예시에는 변경되어있습니다. # llama-server --port 12370 --model './EXAONE-3.5-32B-Instruct-Q4_K_M.gguf' llama-server --model <모델 경로>
모델의 로딩이 완료되면 아래와 같이 표시됩니다.
main: model loaded
main: chat template, chat_template: {% for message in messages %}{% if loop.first and message['role'] != 'system' %}{{ '[|system|][|endofturn|]' }}{% endif %}{{ '[|' + message['role'] + '|]' + message['content'] }}{% if message['role'] == 'user' %}{{ '' }}{% else %}{{ '[|endofturn|]' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '[|assistant|]' }}{% endif %}, example_format: '[|system|]You are a helpful assistant[|endofturn|]
[|user|]Hello
[|assistant|]Hi there[|endofturn|]
[|user|]How are you?
[|assistant|]'
main: server is listening on http://127.0.0.1:12370 - starting the main loop
srv update_slots: all slots are idlecurl로 모델이 제대로 로딩되었는지 확인합니다.
# curl --request GET \ # --url http://localhost:12370/health curl --request GET \ --url http://localhost:<포트(기본 8080)>/health # 결과 # {"status":"ok"} --> 모델 로드 완료 # {"status": "error"} --> 모델 로드 실패 # {"status": "loading model"} --> 모델 로드 중
이제 OpenWebUI랑 연결해 보겠습니다. 관리자 설정 - 설정 - 연결 - OpenAI API 연결 관리에서 연결 추가합니다.
OpenWebUI는 도커 컨테이너, llama-server는 로컬이니 이렇게 설정하시면 됩니다. Key는 아무것도 입력하지 않으면 저장이 안 됩니다. 하지만 api-key 설정을 안 해서 아무거나 입력해도 됩니다.
새 채팅으로 인사를 해봤습니다. 잘 반응하네요.
토큰은 내용에 따라서 13~16 초당 토큰을 왔다 갔다 하는데 이번에는 좀 잘 나왔네요. 원래 쓰던 LM Studio보다 비슷하거나 살짝 떨어지는데 그렇게 큰 차이는 아닌 것 같기도 하고 성능 튜닝을 좀 하면 나을 것 같습니다.
레퍼런스
https://github.com/Mozilla-Ocho/llamafile/blob/main/llama.cpp/server/README.md
'HomeLAB > Mac(OSX, macOS)' 카테고리의 다른 글
[Mac] Open Webui + LM Studio 설정하기 (0) 2025.02.01