Skip to main content

첫 실행 실습: 내 PC에서 LLM 답변을 받아보기

이제 정말 중요한 순간입니다. 앞 장까지는 무대를 만들었다면, 이번 장에서는 실제로 배우를 올립니다. 목표는 거창하지 않습니다.

내 컴퓨터에서 GGUF 모델을 불러오고, 프롬프트를 넣고, 답변을 받는 것.

이번 장은 이론보다 손맛이 먼저입니다. 터미널에 모델 로딩 로그가 지나가고, 잠시 뒤 첫 문장이 툭 튀어나오는 그 순간이 오면 감이 확 잡힙니다.

"아, 이게 진짜 내 PC에서 도는구나."

이번 장에서 할 일

이번 실습은 아래 세 가지만 성공하면 됩니다.

  • GGUF 모델을 준비한다.

  • llama-cli 또는 llama-server로 모델을 실행한다.

  • 프롬프트를 넣고 실제 응답을 확인한다.

여기서 가장 중요한 것은 완벽한 세팅이 아니라 첫 성공 경험입니다. 속도가 조금 느려도 괜찮고, 답변이 아주 똑똑하지 않아도 괜찮습니다. 지금은 일단 돌아가면 됩니다.

시작 전에 딱 세 가지만 확인하자

앞 장에서 설치를 마쳤다면, 아래 세 가지만 확인하세요.

  • llama-cli 또는 llama-server 실행 파일이 보인다.

  • 모델을 둘 폴더를 정해 두었다.

  • 인터넷 연결이 있거나, 이미 .gguf 파일을 준비해 두었다.

이 장의 예시는 명령어를 llama-cli, llama-server로 적겠습니다. 직접 빌드한 경우에는 여러분 환경에 맞게 아래처럼 바꿔 입력하면 됩니다.

  • macOS/Linux: ./build/bin/llama-cli

  • Windows: buildbinReleasellama-cli.exe 또는 설치 경로의 실행 파일

중요한 것은 명령 이름 자체보다 실제 실행 파일 경로를 알고 있는가입니다.

가장 빠른 성공 경로: -hf로 바로 실행하기

공식 README 기준으로 llama.cpp는 Hugging Face의 GGUF 저장소를 직접 지정해 모델을 내려받고 실행할 수 있습니다.1

예를 들어 공식 예시는 아래처럼 시작합니다.

llama-cli -hf ggml-org/gemma-3-1b-it-GGUF

이 방식이 초보자에게 좋은 이유는 단순합니다.

  • 파일을 어디에 받았는지 덜 헷갈린다.

  • 첫 실행 명령이 짧다.

  • 한 번 받은 뒤에는 Hugging Face 캐시를 재사용한다.1

즉, 첫 성공 경험을 만들기에는 -hf가 가장 편합니다.

1단계: 실행 파일이 보이는지 확인한다

먼저 도움말이 뜨는지부터 확인합니다.

llama-cli --help

정상이라면 옵션 목록이 길게 출력됩니다. 지금은 그 많은 옵션을 외울 필요가 없습니다. 오늘의 목표는 옵션 공부가 아니라 첫 응답 받기입니다.

2단계: 너무 큰 모델 말고, 작은 Instruct 모델로 시작한다

첫 실습에서는 작은 Instruct 모델이 훨씬 유리합니다. 큰 모델이 무조건 좋은 것이 아닙니다. 처음부터 7B, 14B, 32B에 손을 대면 다운로드도 오래 걸리고, 메모리 때문에 첫 시도에서 멈출 가능성도 커집니다.

처음에는 이 원칙 하나만 기억하면 됩니다.

처음엔 가장 똑똑한 모델보다, 가장 잘 켜지는 모델이 더 좋은 모델이다.

작은 모델은 품질 평가용보다 설치 확인용, 실행 감각 익히기용에 적합합니다.

3단계: 첫 프롬프트를 한 번에 실행한다

공식 예시 모델을 그대로 써서 아래처럼 실행해 보겠습니다.1

llama-cli -hf ggml-org/gemma-3-1b-it-GGUF -c 2048 -n 128 -p "안녕하세요. 당신이 지금 내 PC에서 실행 중인지 한국어로 짧게 설명해 주세요."

이 명령어를 아주 쉽게 풀면 이렇습니다.

  • -hf: Hugging Face 저장소에서 모델을 가져온다

  • -c 2048: 첫 실습용으로 컨텍스트를 작게 잡아 메모리 부담을 줄인다

  • -n 128: 답변 길이를 너무 길지 않게 제한한다

  • -p: 바로 넣을 프롬프트를 지정한다

처음 실행하면 보통 이런 순서로 진행됩니다.

  1. 모델 다운로드 시작

  2. GGUF 파일과 메타데이터 로딩

  3. 메모리 준비

  4. 생성 시작

  5. 터미널에 답변 출력

여기서 가장 중요한 것은 문장력이 아니라 실제로 응답이 나온다는 사실입니다. 내용이 조금 어색해도 괜찮습니다. 성공입니다.

첫 응답이 나왔을 때 무엇을 보면 좋을까

처음 성공하면 보통 답변만 보게 됩니다. 그런데 아래 세 가지를 함께 보면 앞으로 훨씬 덜 헤맵니다.

  • 다운로드가 처음 한 번만 일어났는가

  • 로딩 이후 실제 생성이 시작되었는가

  • 명령이 정상적으로 끝났는가

특히 두 번째 실행에서 다운로드 없이 바로 시작되면 좋은 신호입니다. 캐시가 잘 작동하고 있다는 뜻입니다.1

이제 대화형 모드로 들어가 보자

한 번성 실행이 끝났다면, 이제는 대화형으로 써 볼 차례입니다. 공식 README는 채팅 템플릿이 내장된 모델은 자동으로 conversation mode가 켜질 수 있다고 설명합니다.1 그래도 헷갈리면 -cnv를 명시해 주는 편이 안전합니다.

llama-cli -hf ggml-org/gemma-3-1b-it-GGUF -c 2048 -cnv

이제 터미널이 여러분의 입력을 기다립니다. 처음에는 아래처럼 짧은 질문부터 해 보세요.

  • 한국어로 자기소개해 줘.

  • 2와 2는 얼마야? 한 줄만 답해.

  • 온디바이스 LLM이 뭐야? 초등학생에게 설명하듯 말해 줘.

여기서 중요한 요령이 하나 있습니다.

처음에는 짧고 단순한 프롬프트를 넣으세요.

짧은 질문은 결과 확인이 빠르고, 느린 건지 멈춘 건지, 품질이 낮은 건지 구분하기 쉽습니다. 반대로 처음부터 "긴 보고서 써 줘"를 던지면 판단이 훨씬 어려워집니다.

로컬 파일로 실행하는 방법도 알아두자

인터넷이 제한된 환경이거나, 모델 파일을 직접 관리하고 싶다면 -m으로 로컬 .gguf 파일을 지정하면 됩니다.1

예를 들어 models 폴더에 모델을 넣었다면 이렇게 실행할 수 있습니다.

llama-cli -m ./models/my-model.gguf -c 2048 -n 128 -p "한국어로 한 문단 자기소개를 해 줘."

이 방식의 장점은 명확합니다.

  • 어떤 파일을 쓰는지 눈에 보인다

  • 폐쇄망이나 오프라인 환경에서 재현하기 쉽다

  • 운영 환경에서 경로 관리가 쉬워진다

초보자 관점에서는 이렇게 이해하면 좋습니다.

  • 첫 성공은 -hf

  • 정리된 운영은 -m

브라우저로 체감하기: llama-server 실행

터미널에서 답변을 받았다면, 이제 브라우저로도 확인해 보겠습니다. 공식 server README에 따르면 llama-server는 REST API와 웹 UI를 함께 제공합니다.2

이 단계가 중요한 이유는 단순합니다.

이제부터는 로컬 LLM이 '명령줄 도구'에서 '앱에 붙일 수 있는 서버'로 바뀌기 때문입니다.

1단계: 서버를 실행한다

llama-server -hf ggml-org/gemma-3-1b-it-GGUF -c 2048

정상이라면 서버가 올라오고, 보통 http://localhost:8080으로 접속할 수 있습니다.2

브라우저를 열고 아래 주소로 접속해 보세요.

http://localhost:8080

그러면 채팅 입력창이 있는 화면이 뜹니다. 이제부터는 정말 "내 PC 안의 챗봇"처럼 느껴질 것입니다.

2단계: 브라우저에서 첫 질문을 던진다

입력창에 아래처럼 간단한 문장을 넣어 보세요.

내 컴퓨터에서 돌아가는 로컬 LLM이 무엇인지 세 문장으로 설명해 줘.

답변이 돌아오면, 축하합니다. 여러분은 지금 로컬 LLM 서버를 실제로 사용하고 있습니다.

CLI가 "엔진 시동 확인"이라면, 서버 모드는 "직접 운전해 보기"에 가깝습니다.

API로도 한 번 불러 보자

공식 server README는 OpenAI 호환 chat completions 경로를 지원한다고 설명합니다.2

터미널을 하나 더 열고 아래처럼 호출해 보세요.

curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "local-chat",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "한국어로 인사 한 문장만 해 줘."
      }
    ],
    "temperature": 0.2,
    "max_tokens": 64
  }'

정상이라면 JSON 응답이 돌아오고, 그 안에 생성된 문장이 들어 있습니다.

여기까지 오면 여러분은 단순히 화면에서 채팅한 것이 아니라, 로컬 LLM을 API로 호출하는 첫 단계까지 온 셈입니다.

왜 -c 2048로 시작했을까

눈썰미 좋은 독자라면 이런 생각이 들 수 있습니다.

"왜 자꾸 컨텍스트를 2048로 작게 잡지?"

좋은 질문입니다. 공식 server README 기준으로 --ctx-size의 기본값 0은 모델 메타데이터 값을 따르도록 되어 있습니다.2 그런데 초보자의 첫 실행에서는 모델이 지원하는 최대 컨텍스트를 그대로 쓰는 것보다, 작은 값으로 안전하게 시작하는 편이 훨씬 덜 막힙니다.

쉽게 말하면 첫 시동은 좁은 골목에서 해 보는 편이 좋습니다. 처음부터 고속도로로 나가면 멋있어 보이긴 하지만, 차가 꺼졌을 때 뭐가 문제인지 구분하기 어렵습니다.

첫 성공을 더 확실하게 만드는 프롬프트 예시

처음에는 모델 성능 평가보다 동작 확인이 우선입니다. 그래서 아래 같은 질문이 좋습니다.

  • 지금 네가 어디서 실행되고 있는지 한 문장으로 말해 줘.

  • 대한민국의 수도는 어디야? 한 단어로만 답해.

  • 사과와 바나나의 차이를 두 문장으로 설명해 줘.

  • "로컬 실행 성공"이라는 문장을 영어로 번역해 줘.

이런 질문이 좋은 이유는 정답 판단이 쉽기 때문입니다. 모델이 이상한 답을 해도 바로 알아차릴 수 있고, 속도도 짧게 체감할 수 있습니다.

잘 안 될 때는 이렇게 본다

첫 실행에서 만나는 문제는 생각보다 뻔합니다. 오히려 그래서 좋습니다. 대개 해결도 뻔하기 때문입니다.

명령어를 쳤는데 not found가 뜬다

모델 문제가 아닙니다. 실행 파일 경로 문제입니다. 설치 방식에 따라 경로가 다를 수 있으니, 앞 장에서 확인한 실제 경로를 다시 보세요.

모델 로딩 중 메모리 부족으로 멈춘다

이럴 때는 아래 셋 중 하나를 줄이면 됩니다.

  • 더 작은 모델로 바꾼다

  • -c 값을 2048 또는 그 이하로 낮춘다

  • 처음에는 서버보다 CLI로 먼저 확인한다

특히 컨텍스트를 줄이는 것은 생각보다 효과가 큽니다.

다운로드는 됐는데 응답이 너무 느리다

정상일 수 있습니다. CPU만 쓰는 환경에서는 첫 토큰이 나오기까지 시간이 꽤 걸릴 수 있습니다. 지금 단계에서는 "느리다"보다 "나온다"가 더 중요합니다.

브라우저가 안 열린다

대개는 두 경우입니다.

  • 서버가 아직 완전히 뜨지 않았다

  • 8080 포트를 다른 프로그램이 쓰고 있다

잠깐 더 기다리거나, 포트 사용 상태를 확인해 보세요.

답변이 엉뚱하다

작은 모델에서는 흔한 일입니다. 지금은 모델의 깊이를 따질 단계가 아닙니다. 일단 동작 확인이 우선입니다. 이후 더 나은 모델을 쓰고, 프롬프트와 컨텍스트를 다듬으면 품질은 충분히 좋아집니다.

이 장에서 꼭 가져가야 할 감각

이번 장의 핵심은 명령어 자체가 아닙니다. 감각입니다.

첫째, GGUF 모델은 정말 내 PC에서 돌아간다는 감각입니다.

둘째, llama-cli는 가장 빠른 확인 도구이고, llama-server는 브라우저와 API까지 이어지는 출발점이라는 감각입니다.

셋째, 첫 실행에서는 큰 모델과 복잡한 옵션보다 작은 모델, 짧은 프롬프트, 낮은 컨텍스트가 성공 확률을 높인다는 감각입니다.

이 감각이 잡히면 다음 장부터 훨씬 편해집니다. 프롬프트를 바꾸고, 컨텍스트를 조절하고, KV 캐시를 이해할 때도 머릿속에 실제 경험이 남아 있기 때문입니다.

이제 여러분은 구경꾼이 아니다

이번 장 전까지 온디바이스 LLM은 조금 멋진 기술처럼 보였을 수 있습니다. 그런데 지금은 다릅니다. 여러분은 직접 모델을 실행했고, 프롬프트를 넣었고, 답변을 받았습니다.

이미 한 발 안으로 들어온 것입니다.

다음 장에서는 여기서 한 단계 더 나아가겠습니다. 단순히 돌아가는 것을 넘어서, 왜 어떤 프롬프트는 잘 되고 어떤 프롬프트는 흐트러지는지, 그리고 컨텍스트와 KV 캐시가 품질과 속도에 어떤 영향을 주는지를 차근차근 이해해 보겠습니다.

오늘의 성과는 간단하지만 강력합니다.

내 컴퓨터에서 LLM이 입을 열었다.

참고

2llama.cpp server README

책 목록

내 PC에서 시작하는 온디바이스 LLM 실전: llama.cpp로 배우는 로컬 AI 구축

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기