GPU 없이 GLM 4.1V 9B Thinking 사용하는 방법

GPU 없이 GLM 4.1V 9B Thinking 사용하는 방법

GLM 4.1V 9B Thinking은 이미지를 보면서 동시에 추론 과정을 단계별로 설명할 수 있는 획기적인 AI 모델입니다. 이를 체인 오브 쏘트(CoT) 추론이라고 하며, GLM은 동급의 다른 비전-언어 모델보다 이 작업을 더 잘 수행합니다. 이 글에서는 더 큰 모델과 비교했을 때의 성능과, 값비싼 GPU 없이도 직접 사용해볼 수 있는 방법을 소개합니다.

GLM 4.1V 9B Thinking이 VLM 모델에 어떤 변화를 가져왔나요?

세계 최초로 체인 오브 쏘트(CoT) 추론을 지원하는 VLM 모델로서, GLM은 강력한 성능으로 인상을 주었을 뿐만 아니라, 훨씬 작은 9B 모델임에도 Qwen 2.5 72B에 필적하는 성능을 달성하여 인정받고 있습니다. 이제 GLM의 세부 사양과 벤치마크 결과를 자세히 살펴보겠습니다.

GLM 4.1V 9B Thinking의 특징

GLM 4.1V 9B의 특징

Hugging Face에서 바로 무료 체험을 시작할 수 있습니다!

Hugging Face에서 바로 무료 체험을 시작할 수 있습니다! Hugging Face에서 바로 무료 체험을 시작할 수 있습니다!

GLM 4.1V 9B Thinking이 이러한 개선을 어떻게 달성했나요?

  1. SFT 강화:
    학습 샘플에 명시적인 체인 오브 쏘트(CoT) 주석이 포함되어 있어 모델이 “먼저 생각하고, 그다음에 답변” 하도록 학습됩니다. 이는 추론 단계를 보여주지 않고 답변만 출력하는 기존 모델과 다릅니다.
  2. RLCS 강화:
    모델의 보상은 정답 여부뿐만 아니라 추론 과정과 설명의 질 도 평가하여, 더 일관되고 철저한 내적 사고를 장려합니다.
  3. 아키텍처 지원:
    ViT 비전 인코더가 MLP 프로젝터와 LLM 디코더로 연결되어, 모델이 시각적 입력으로부터 명시적인 추론 경로를 자연스럽게 생성 할 수 있습니다(단순 검색이나 패턴 매칭이 아님).
  4. 강력한 추론 기반:
    또 다른 핵심 요소: 기본 모델인 GLM‑4‑9B 0414는 이미 강력한 추론 능력을 갖추고 있습니다. 예를 들어:
    • 뛰어난 수학적 추론과 일반 작업 성능을 보여주며, 동급 오픈소스 모델 중 최상위권에 랭크됩니다.
    • 아키텍처와 학습 측면에서 GLM‑4‑9B는 자기회귀적 빈칸 채우기 사전 학습과 이후 파인튜닝을 통해 논리적 및 다단계 추론 능력을 강화했습니다.

자세한 내용은 논문을 참조하세요: GLM-4.1V-Thinking: Towards Versatile Multimodal Reasoning with Scalable Reinforcement Learning

GLM 4.1V 9B Thinking vs Qwen 2.5 VL 72B

**벤치마크 ** GLM 4.1V 9B Thinking Qwen 2.5 VL 72B ** 승자**
MMMU (이미지) 68.0 70.2 Qwen 2.5 VL
MMMU‑Pro 57.1 51.1 GLM
VideoMMMU 61.0 60.2 GLM
mvBench (비디오) 70.4 64.6 GLM
AITZ_EM (에이전트) 83.2 35.3* GLM
Agent (OSWorld) 14.9 8.8 GLM
Agent (AndroidWorld) 41.7 35.0 GLM
Agent (WebVoyageSom) 69.0 40.4 GLM
Agent (Webquest‑SingleQA) 72.1 60.5 GLM
Agent (Webquest‑MultiQA) 54.7 52.1 GLM
코딩 (Design2Code) 64.7 41.9 GLM
코딩 (Flame‑VLM‑Code) 72.5 46.3 GLM
OCRBench 84.2 85.1 Qwen 2.5 VL
VideoMME (텍스트 없음) 68.2 73.3 Qwen 2.5 VL
VideoMME (텍스트 포함) 73.6 79.1 Qwen 2.5 VL
MMVU 59.4 62.9 Qwen 2.5 VL

다음과 같은 경우 GLM 4.1V 9B Thinking을 선택하세요: 멀티모달 추론, 에이전트 기능, STEM 문제 해결 또는 코딩이 우선순위인 경우.

다음과 같은 경우 Qwen 2.5 VL 72B를 선택하세요: 문서/이미지/비디오 이해, 특히 OCR, 구조화된 추출 및 시각적 인식에 집중하는 경우.

더 자세한 내용을 확인하고 싶다면 이 글을 참조하세요: GLM 4.1V 9B Thinking vs Qwen2.5 VL 72B: 어떤 것이 어떤 시나리오에 적합할까요?

다른 주요 모델과의 비교도 제공합니다.

다른 주요 모델과의 비교도 제공합니다. 출처: THUDM

GLM 4.1V 9B Thinking 에 액세스하는 방법은?

1. 로컬에서 액세스

더욱 인상적인 점은 GLM 4.1V 9B Thinking이 단 90억 개의 파라미터만 가지고 있어, RTX 4090 또는 3090과 같은 GPU에서 실행할 수 있다는 것입니다. 몇 배 더 많은 파라미터를 가진 다른 모델과 비교할 때, GLM은 훨씬 작은 크기로 뛰어난 성능을 달성했으며, 이는 강화 학습의 힘을 분명히 보여줍니다.

강화 학습의 힘을 분명히 보여주는 성과 출처: THUDM

설치 가이드

설치:

pip install git+https://github.com/huggingface/transformers.git

기본 사용법:

from transformers import AutoProcessor, Glm4vForConditionalGeneration
import torch

MODEL_PATH = "THUDM/GLM-4.1V-9B-Thinking"

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "url": "https://upload.wikimedia.org/wikipedia/commons/f/fa/Grayscale_8bits_palette_sample_image.png"
            },
            {
                "type": "text",
                "text": "describe this image"
            }
        ],
    }
]

processor = AutoProcessor.from_pretrained(MODEL_PATH, use_fast=True)
model = Glm4vForConditionalGeneration.from_pretrained(
    pretrained_model_name_or_path=MODEL_PATH,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_dict=True,
    return_tensors="pt"
).to(model.device)

generated_ids = model.generate(**inputs, max_new_tokens=8192)
output_text = processor.decode(generated_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False)
print(output_text)

GPU를 구매하는 것이 너무 비싸다면, Novita AI의 비용 효율적이고 안정적인 클라우드 GPU를 활용할 수 있습니다. 예를 들어 RTX 4090은 시간당 $0.69, RTX 3090은 시간당 $0.21 에 불과합니다!

Novita AI의 고성능 GPU 사용해보기

2. 직접 API 통합

1단계: 로그인 및 모델 라이브러리 액세스

계정에 로그인하고 Model Library 버튼을 클릭하세요.

로그인 및 모델 라이브러리 액세스

GLM 4.1V 9B 지금 사용해보기!

2단계: 모델 선택

사용 가능한 옵션을 살펴보고 필요에 맞는 모델을 선택하세요.

모델 선택

3단계: 무료 체험 시작

선택한 모델의 기능을 탐색하기 위해 무료 체험을 시작하세요.

무료 체험 시작

4단계: API 키 받기

API로 인증하기 위해 새 API 키를 제공합니다. “Settings” 페이지로 이동하여 이미지에 표시된 대로 API 키를 복사하세요.

API 키 받기

5단계: API 설치

프로그래밍 언어에 맞는 패키지 관리자를 사용하여 API를 설치합니다.

설치 후, 필요한 라이브러리를 개발 환경에 임포트합니다. API 키로 API를 초기화하여 Novita AI LLM과 상호작용을 시작합니다. 다음은 Python 사용자를 위한 채팅 완료 API 예제입니다.

from openai import OpenAI
  
client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    api_key="session_kgNdXtDPt2zYc95i-nDWPaW4Zl_e7nf4VDpukuIVBKpko1-LE8xCasG4YK7c-3c1xnPzGYRuocFk_DhkPUUQyQ==",
)

model = "thudm/glm-4.1v-9b-thinking"
stream = True # or False
max_tokens = 4000
system_content = ""Be a helpful assistant""
temperature = 1
top_p = 1
min_p = 0
top_k = 50
presence_penalty = 0
frequency_penalty = 0
repetition_penalty = 1
response_format = { "type": "text" }

chat_completion_res = client.chat.completions.create(
    model=model,
    messages=[
        {
            "role": "system",
            "content": system_content,
        },
        {
            "role": "user",
            "content": "Hi there!",
        }
    ],
    stream=stream,
    max_tokens=max_tokens,
    temperature=temperature,
    top_p=top_p,
    presence_penalty=presence_penalty,
    frequency_penalty=frequency_penalty,
    response_format=response_format,
    extra_body={
      "top_k": top_k,
      "repetition_penalty": repetition_penalty,
      "min_p": min_p
    }
  )

if stream:
    for chunk in chat_completion_res:
        print(chunk.choices[0].delta.content or "", end="")
else:
    print(chat_completion_res.choices[0].message.content)
  
  

MCP와 GLM을 사용하여 간단한 이미지 인식 도구 구축하기

GLM의 기능을 활용하여(예: 시각 인식과 추론을 통합한 간단한 이미지 인식 도구 구축) Novita AI가 지원하는 MCP 기능을 사용할 수 있습니다. 다음은 샘플 코드입니다:

import os
import sys
from mcp.server.fastmcp import FastMCP
import requests
import uvicorn
from starlette.applications import Starlette
from starlette.routing import Mount

base_url = "https://api.novita.ai/v3"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {os.environ['NOVITA_API_KEY']}"
}

mcp = FastMCP("Novita_API")

@mcp.tool()
def list_models() -> str:
    """
    List all available models from the Novita API.
    """
    url = base_url + "/openai/models"
    response = requests.request("GET", url, headers=headers)
    data = response.json()["data"]

    text = ""
    for i, model in enumerate(data, start=1):
        text += f"Model id: {model['id']}\
"
        text += f"Model description: {model['description']}\
"
        text += f"Model type: {model['model_type']}\
\
"

    return text

@mcp.tool()
def get_model(model_id: str, message) -> str:
    """
    Provide a model ID and a message to get a response from the Novita API.
    """
    url = base_url + "/openai/chat/completions"
    payload = {
        "model": model_id,
        "messages": [
            {
                "content": message,
                "role": "user",
            }
        ],
        "max_tokens": 200,
        "response_format": {
            "type": "text",
        },
    }
    response = requests.request("POST", url, json=payload, headers=headers)
    content = response.json()["choices"][0]["message"]["content"]
    return content

@mcp.tool()
def vision_chat(model_id: str, image_url: str, question: str) -> str:
    """
    Use GLM-4.1V-9B-Thinking to answer a question about an image.
    """
    url = base_url + "/openai/chat/completions"
    payload = {
        "model": model_id,
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": image_url,
                        }
                    },
                    {
                        "type": "text",
                        "text": question,
                    }
                ]
            }
        ],
        "max_tokens": 500
    }
    response = requests.post(url, json=payload, headers=headers)
    return response.json()["choices"][0]["message"]["content"]

if __name__ == "__main__":
   # Run using stdio transport
   mcp.run(transport="stdio")

자세한 내용은 다음 글을 참조하세요: Novita AI로 첫 번째 MCP 서버 구축하는 방법!

GLM 4.1V 9B Thinking은 사용하기 쉽고 매우 똑똑하며 고급 하드웨어가 필요하지 않습니다. 몇 줄의 코드만으로 로컬 머신이나 클라우드에서 이미지 인식 및 추론 능력을 테스트할 수 있습니다. 멀티모달 AI가 얼마나 발전했는지 직접 확인하고 싶다면 GLM을 사용해보세요!

GLM 4.1V 9B Thinking의 특별한 점은 무엇인가요?

단순히 답변을 제공하는 것이 아니라 “보고” 추론 과정을 표시할 수 있는 최초의 모델입니다.

강력한 GPU가 없어도 GLM 4.1V 9B를 사용해볼 수 있나요?

네! 저렴한 클라우드 GPU를 사용하거나 Novita AI Playground에서 무료로 체험할 수 있습니다.

GLM 4.1V 9B Thinking을 내 프로젝트에 어떻게 통합할 수 있나요?

Python과 Hugging Face를 사용하여 로컬에서 실행하거나, Novita AI의 API를 통해 액세스하거나, 제공된 코드 샘플에 표시된 대로 MCP를 사용하여 자체 이미지 인식 도구를 구축할 수 있습니다.

Novita AI는 AI 야망을 실현하는 올인원 클라우드 플랫폼입니다. 통합 API, 서버리스, GPU 인스턴스 — 비용 효율적인 도구를 제공합니다. 인프라 걱정 없이 무료로 시작하여 AI 비전을 현실로 만드세요.

추천 읽을거리