아들과 함께 만들어보는 인공지능(LLM) 로봇 만들기 프로젝트 — EP 4. AI 로봇에 맞는 로컬 LLM 고르기, Qwen vs Llama vs Phi 비교

아들과 함께 만들어보는 인공지능(LLM) 로봇 만들기 프로젝트 — EP 4. AI 로봇에 맞는 로컬 LLM 고르기, Qwen vs Llama vs Phi 비교

모델을 골라야 했다.

로봇에 로컬 LLM을 붙이려면 어떤 모델을 쓸지 결정해야 한다. 클라우드 API를 쓰면 이 고민이 없다. GPT-4o나 Claude를 그냥 쓰면 된다. 하지만 우리 프로젝트는 LAN 내에서 로컬 LLM 서버를 돌리는 구조다. 어떤 오픈소스 모델이 이 용도에 맞는지 직접 테스트해야 했다.

평가 기준을 먼저 정했다.

하나는 도구 사용(tool use)이다. 로봇에게 "앞으로 가", "멈춰" 같은 명령을 구조화된 형태로 내리려면 모델이 JSON 함수 호출을 지원해야 한다. 자연어로 답하다가 갑자기 "move_forward()" 같은 텍스트를 섞어서 내놓으면 파싱이 어렵다.

다른 하나는 한국어 능력이다. 아들이 한국어로 지시하고, 나도 한국어로 디버깅 메시지를 보고 싶다. 영어로만 작동하는 모델은 쓰기 불편하다.

마지막은 비전(vision)이다. 지금 당장은 아니지만, 나중에 카메라 프레임을 입력으로 받아서 판단하는 기능이 필요하다. 비전을 지원하는 모델이면 나중에 교체 없이 확장이 된다.

이 세 기준으로 네 모델을 평가했다. Qwen2.5-7B-Instruct, Llama 3.1 8B Instruct, Phi-3.5 Mini Instruct, Gemma 2 9B Instruct.


도구 사용 테스트

같은 함수 정의를 줬다.

{
  "name": "robot_command",
  "description": "로봇에게 이동 명령을 내린다",
  "parameters": {
    "action": {
      "type": "string",
      "enum": ["forward", "backward", "left", "right", "stop"]
    },
    "speed": {
      "type": "integer",
      "minimum": 0,
      "maximum": 200
    }
  }
}

프롬프트: "로봇 앞에 20cm 거리에 장애물이 있어. 어떻게 해야 해?"

각 모델의 반응:

Qwen2.5-7B: 도구 호출 JSON을 정확하게 반환했다. {"action": "stop", "speed": 0}. 추가 설명 없이 바로 함수 호출 형태로 응답했다.

Llama 3.1 8B: 도구 호출을 지원하기는 하는데, 함수 이름 앞에 <tool_call> 태그를 붙이는 방식이었다. 파싱이 가능하지만 Qwen보다 처리가 한 단계 더 필요했다.

Phi-3.5 Mini: "장애물이 있으면 멈춰야 합니다. robot_command(action='stop', speed=0)을 호출하세요."라고 텍스트로 답했다. JSON 스키마를 요청했는데 텍스트 설명을 줬다. 파싱 가능하긴 하지만 신뢰성이 낮았다.

Gemma 2 9B: 가장 불안정했다. 같은 프롬프트에 세 번 물었는데, 한 번은 JSON을 줬고, 한 번은 텍스트로 설명했고, 한 번은 Python 코드 형태로 답했다. 일관성이 없다.


한국어 테스트

아들이 직접 테스트했다. 모델별로 같은 질문을 한국어로 입력했다.

"IR 센서로 로봇이 장애물을 20cm 앞에서 감지했어. 로봇한테 뭐라고 시켜야 해?"

Qwen2.5-7B: 한국어로 자연스럽게 답했다. "20cm 거리에서 장애물이 감지됐으니 로봇을 정지시키는 명령을 보내야 합니다." 도구 호출도 한국어 지시에서 정상 작동했다.

Llama 3.1 8B: 한국어 입력을 영어로 이해하고 영어로 답했다. 한국어 능력이 있긴 하지만 혼재가 생겼다.

Phi-3.5 Mini: 한국어 입력을 받았지만 중간중간 영어가 섞였다. "장애물이 감지됐으므로 stop command를 issue해야 합니다." 같은 식이었다.

Gemma 2 9B: 한국어 응답 품질은 Qwen과 비슷했다. 근데 tool use 일관성 문제가 있어서 탈락.

아들이 Qwen 응답을 보더니 "이게 제일 잘 이해해"라고 했다. 다른 모델들이 영어로 섞어서 답하니까 읽기 어렵다고 했다. 아들 기준으로도 Qwen이 1위였다.


비전 모델 검토

나중에 카메라 입력을 쓸 때를 위해 비전 지원 모델도 확인했다.

Qwen2.5-VL이 있다. Qwen 계열 멀티모달 버전이다. 7B 파라미터에 이미지 입력을 지원한다. 24GB 메모리에서 Q4_K_M 기준으로 충분히 올라간다.

Llama 계열은 Llama 3.2 Vision이 있다. 11B 버전은 24GB에서 빠듯하고, M4 24GB에서는 Q4로 겨우 올라가지만 속도가 많이 느려진다. M4 Pro 24GB에서는 괜찮다.

Phi-3.5도 비전 버전이 있다. Phi-3.5-Vision-Instruct. 4.2B 파라미터라 작고 빠른데, 비전 품질이 Qwen2.5-VL보다 많이 낮았다. 간단한 물체 인식은 되는데 장면 이해가 약하다.

지금 당장은 텍스트 모델로 충분하다. 카메라 입력은 EP 6 이후에 붙일 예정이다. 그때는 Qwen2.5-VL로 교체할 생각이다. 같은 Qwen 계열이라 하네스 수정이 최소화된다.


최종 선택과 탈락 이유

선택: Qwen2.5-7B-Instruct

도구 사용 일관성, 한국어 응답 품질, 비전 확장 경로 — 세 기준 모두 다른 모델보다 나았다. 7B 파라미터라 M4 Pro에서 112 tok/s가 나와서 속도도 충분하다.

탈락

  • Llama 3.1 8B: tool use 방식이 특이해서 파싱 레이어가 추가로 필요하고, 한국어 혼재가 거슬린다. Qwen보다 낮은 tok/s도 아쉽다.
  • Phi-3.5 Mini: tool use 신뢰성이 낮다. 일관되지 않은 응답 형식은 로봇 제어에 쓰기 위험하다.
  • Gemma 2 9B: tool use 일관성이 네 모델 중 가장 나빴다. 품질은 좋은데 예측 불가능하다.

실제 채점표

아들한테 각 모델이 한국어로 답한 걸 보여주고 "어떤 게 제일 알아듣기 쉬워?"라고 물었다.

아들이 채점한 결과:

모델 아들 점수 이유
Qwen2.5-7B ★★★★★ "한국어로 제대로 답함"
Llama 3.1 8B ★★★☆☆ "영어랑 섞여서 읽기 어려움"
Phi-3.5 Mini ★★☆☆☆ "설명이 너무 많음"
Gemma 2 9B ★★★☆☆ "가끔 이상하게 답함"

최종 선택이 아들 채점과 일치했다. Qwen으로 간다.


지금 harnss에 Qwen2.5-7B가 올라가있다. 다음은 이걸 실제로 로봇 서버에 연결하는 작업이다. 통신 레이어가 남아있다.

댓글

이 블로그의 인기 게시물

개발자는 코드를 쓰는 사람이 아니다 — AI 시대에 남는 자리는 '책임'에 있다

Harness Engineering in Practice — How Anthropic Designs AI Agents

What Is Harness Engineering — Designing the Reins for AI Agents