LLM 를 LocalHost 에서 실행하는 경우, ollama 에서 필요한 모델을 찾아서 다운받아 사용하고 있습니다. Ollama 에서 직접 제공하지 않은 등록되어 있지 않은 모델을 사용할 때에는 huggingface.co 에서 필요한 모델을 찾은 뒤 ollama build 옵션을 선택하여 명령어를 확인할 수 있습니다. 해당 명령어를 Ubuntu 24 Cli 에 입력하면 설치를 진행합니다.

ollama run hf.co/mradermacher/Llama3.3-8B-Instruct-Thinking-Claude-4.5-Opus-High-Reasoning-i1-GGUF:Q4_K_M


HuggingFace 의 Build 모델의 설치

Python 으로 활용하기

OllamaOpenAI-style REST API 방식도 제공 합니다. 따라서 아래의 예제처럼 이미지 파일을 첨부하여 전달하는 방식으로도 구현이 가능 합니다. 반면 Whisper 와 같은 음성 (실시간 음성) 은 지원하지 않습니다.

import requests

res = requests.post(
    "http://localhost:11434/v1/chat/completions",
    json={
        "model": "llama4:scout",
        "messages": [{"role": "user", "content": "Describe this image"}],
        "images": ["./test.png"]
    }
)
print(res.json())

Error: pull model

용량이 큰 모델들을 설치 진행하다가 다음과 같은 오류가 발생하여 작업이 중단 되었습니다.

$ ollama run hf.co/microsoft/phi-4-gguf:Q4_K_S                

pulling manifest 
Error: pull model manifest: 429: {"error":"We had to rate limit your IP (1.0.100.111). To continue using our service, create a HF account or login to your existing account, and make sure you pass a HF_TOKEN if you're using the API."}

SSH 사용자 정보 등록

Huggingface 의 모델을 사용하기 위한 사용자 설정방법에 대하여 살펴보겠습니다. 참고로 별도의 요금부과는 없으니 안심하고 절차를 진행하면 됩니다. 우선 사용자 PC를 등록절차를 진행합니다. 현재 작업하는 시스템의 고유값인 ssh 암호값을 생성한 뒤 이를 Huggingface 의 사용자 정보게 등록합니다.

ssh 등록

HuggingFace Token 생성 후 서비스 연결

huggingface 를 어떠한 용도로 사용할 것인지를 지정하고, 해당 용도에 맞게 사용할 서비스를 연결하는 작업 입니다. 여기에서는 Ollama 로 해당 모델들을 Build 하는 용도로써 사용하는 과정에 대하여 살펴보겠습니다. 아래의 그림과 같이 용도와 Huggingface Token 값을 생성 합니다.

Token값 생성

이렇게 생성한 Token 값을 Ollama 의 설정파일에 OLLAMA_HF_TOKEN 내용으로 추가 합니다.

$ cat /etc/systemd/system/ollama.service.d/override.conf
[Service]
# 사용자님의 24코어를 강제로 지정하여 오버헤드 방지 (16)
Environment="OMP_NUM_THREADS=24" 
# 모델을 메모리에 상주시켜 응답 속도 향상 (예: 1시간 상주)
Environment="OLLAMA_KEEP_ALIVE=300m"
# Docker Container 에서도 접속 가능하도록 환경변수 추가
Environment="OLLAMA_HOST=0.0.0.0"

# 동시 실행 모델 수 제한 (메모리 파편화 방지)
Environment="OLLAMA_MAX_LOADED_MODELS=1"
# 병렬 요청 처리 제한
Environment="OLLAMA_NUM_PARALLEL=1"
# 무한정 요청을 쌓아두지 않고 거절하게 하여 프로세스 과부하를 막습니다.
Environment="OLLAMA_MAX_QUEUE=256"
# 큰 컨텍스트를 요구로 메모리 오류를 방지합니다.
Environment="OLLAMA_CONTEXT_LENGTH=6144"

# GPU 혼합 offload 안정성
Environment="OLLAMA_FLASH_ATTENTION=1"

# 프로세스가 멈췄을 때 systemd가 강제로 재시작하도록 유도
Restart=on-failure

# 파일 열기 제한 및 프로세스 제한 확장 (대규모 모델 구동 시 안정성 확보)
LimitNOFILE=65535
LimitNPROC=65535

# Huggingface Token
Environment="OLLAMA_HF_TOKEN=hf_ABC1234!@#$%!@%....."

그럼에도 위와 같은 오류가 발생한다.

해당 기기에서 과도한 용량의 서비스를 계속적으로 진행하다보니, 일시적인 제한이 걸리게 된 것입니다. 이때 빈번하게 실행하면 마지막 실행명령의 시점을 기준으로 일정시간이 지나야 절차가 진행가능하게 되어 있어서 대락 1시간 ~ 2시간 이후에 다시 시도를 하면 진행되는 경우가 대부분 입니다. 보다 안정적으로 진행하려면 반나절 정도 지나서 진행하면 거의 문제가 없이 진행되는 것을 알 수 있었습니다.

참고로 Huggingface 에 존재하지 않는 버젼을 진행하는 경우에도 위와같은 상황이 발생합니다. 저같은 경우에도 존재하지 않는 특정 양자화 버젼을 다운받아보려고 진행을 하려다가 위와 같은 오류가 발생하였고 일정 시간이 지난 뒤 공식적으로 지원하는 모델을 다운 받을 수 있었습니다.

이렇게 현재까지 설치되어있는 모델들 목록을 출력하면 다음과 같습니다.

➜  ~ ollama ls | sort -k2
# Multi Modal
gemma3:latest                                                     3.3 GB

# lama3.3 Model
lama3.3-8B-Instruct-Thinking-Claude-4.5-Opus-High-Reasoning-i1-GGUF:Q6_K
=>                                                                6.6 GB 

# Phi4
phi4-mini:latest                                                  2.5 GB
phi4-mini-reasoning:latest                                        3.2 GB
microsoft/phi-4-gguf:Q4_K_S                                       8.4 GB

# Qwen Coder
qwen2.5-coder:1.5b                                                986 MB
kirito1/qwen3-coder:latest                                        2.6 GB
freehuntx/qwen3-coder:8b                                          5.2 GB

# Qwen3
qwen3:4b                                                          2.5 GB
TeichAI/Qwen3-8B-GPT-5-Codex-Distill-GGUF:Q4_K_M                  5.0 GB
TeichAI/Qwen3-8B-DeepSeek-v3.2-Speciale-Distill-GGUF:Q4_K_M       5.0 GB
TeichAI/Qwen3-14B-Claude-Sonnet-4.5-Reasoning-Distill-GGUF:Q4_K_M 9.0 GB
TeichAI/Qwen3-14B-GPT-5.2-High-Reasoning-Distill-GGUF:Q4_K_M      9.0 GB

# NemoTraon by Nvidia
bartowski/nvidia_Nemotron-Cascade-14B-Thinking-GGUF:Q4_K_M        9.0 GB


모델의 활용

RTX 5070 Ti Mobile · VRAM 12GB 환경에서는 “작은 모델 여러 개를 역할별로 굴리는 전략”을 추천합니다. 아래는 VS Code + Opencode 기준으로 Autocomplete / Edit / Chat 역할별로 실전 모델을 추천하는 내용 입니다.

Autocomplete (가장 중요 ⚡)

✨ 목표: 0.2~0.4초 응답 / 끊김 없음

1순위 -🥇 qwen3-coder:4b VRAM: ~2.6GB ⭐⭐⭐⭐⭐

  • 토큰 예측 정확도 매우 높음
  • 짧은 코드 완성에 최적
  • GPU 캐시 유지 쉬움
  • VS Code 타이핑 흐름 안 끊김

👉 Autocomplete 1순위 (정답)

2순위 -🥈 kirito1/qwen3-coder:latest (≈ 4B)

  • 4B 계열 중 문맥 유지 조금 더 좋음
  • 체감 속도는 qwen3-coder:4b와 거의 동일

❌ 제외 모델들

| 모델 | 이유 | | ————– | —————- | | qwen3-coder:8b | Autocomplete엔 과함 | | phi-4 / llama | 코드 completion 약함 | | thinking 계열 | latency 폭증 |


Edit / Refactor / Fix (Ctrl+I, Apply Edit)

✨ 목표: 코드 이해 + 안정적 수정

1순위 - 🥇 Qwen3-8B-GPT-5-Codex-Distill (Q4_K_M) VRAM: ~5GB ⭐⭐⭐⭐⭐

  • Codex 계열 → edit 정확도 최고
  • diff / patch / refactor 강함
  • Python / TS / Shell 모두 안정적

👉 Edit 작업 최적 모델

2순위 - 🥈 qwen3-coder:8b

  • Edit도 잘함
  • 다만 Codex 계열보다 수정 안정성은 약간 ↓

3순위 - 🥉 phi-4 (Q4_K_S)

  • 코드 설명 + 간단 수정엔 좋음
  • 대규모 refactor는 비추천

Chat / 설계 / 디버깅 / 리뷰 (Thinking 필요)

✨ 목표: 설계·추론·원인 분석

1순위 -🥇 Qwen3-14B-Claude-Sonnet-4.5-Reasoning VRAM: ~9GB ⭐⭐⭐⭐⭐

  • Claude 계열 reasoning 스타일
  • 코드 리뷰, 설계, 버그 원인 분석 매우 강함
  • Opencode Chat에 가장 잘 맞음

👉 Chat 메인 모델 (강력 추천)

2순위 - 🥈 Nemotron-Cascade-14B-Thinking

  • 논리 깊이 좋음
  • 다만:
    • 응답이 다소 verbose
    • 코딩 감각은 Qwen보다 ↓

3순위 -🥉 Llama3.3-8B-Thinking

  • 추론은 좋음
  • CPU/GPU 대비 효율 낮음
  • Chat 보조용 정도

빠른 Chat (Thinking OFF)

가볍게 질문 / 간단 설명

✅ phi-4 (Q4_K_S)

  • 빠름
  • 기술 설명 깔끔
  • GPU 8GB 이하 환경에서도 안정

👉 Quick Chat 용


🧠 최종 추천 조합 (이대로 쓰면 끝)

  • VS Code / Opencode 권장 세팅
    Autocomplete → qwen3-coder:4b
    Edit / Fix   → Qwen3-8B-GPT-5-Codex-Distill
    Chat (Main)  → Qwen3-14B-Claude-Sonnet-Reasoning
    Chat (Quick) → phi-4
    
  • VRAM 사용:
    • Autocomplete: ~3GB
    • Edit: ~5GB
    • Chat: ~9GB 👉 동시 로딩 OK (12GB)

❌ 굳이 안 써도 되는 모델

  • qwen3-14b-gpt5 (Chat 중복)
  • Llama Thinking (효율 ↓)
  • Nemotron 일반 버전 (Cascade만 유지)


빌드한 학습모델 Python 활용하기

diffusion(diffusers)** 과 **stable_diffusion_cpp 비교

학습모델을 Python 에서 활용하는 예시들을 보면 크게 diffusionstable_diffusion_cpp 으로 나눠지는 것을 확인 할 수 있습니다.

항목 diffusers stable_diffusion_cpp
언어 Python C++
백엔드 PyTorch GGML / GGUF
GPU 활용 매우 강력 제한적
CPU-only ❌ 느림 ✅ 실용적
SDXL ✅ 완벽 ⚠ 부분
ControlNet
LoRA ⚠ 제한
커스터마이징 최고 낮음
배포 용이성 보통 매우 좋음
메모리 사용 작음

diffusers

개발작업에 사용하는 패키지 입니다. Pytorch 를 주요한 엔진으로 사용하고 있습니다. 때문에 커스터마이징, 생성품질, 생태계에서 최신 기능을 지원합니다. 최근에는 GGML / GGUF 포맷의 학습 데이터도 활용 가능해져서 stable_diffusion_cpp 의 상당 부분을 대체하고 있습니다.

Python
 └─ PyTorch
     └─ CUDA / ROCm / CPU

stable_diffusion_cpp

배포시에 적합한 패키지 입니다. C++ 를 기반으로 운영되어 상대적으로 저사항 모델에 적합합니다. 컨버팅이 필요한 만큼 커스터마이징, 생성품질, 생태계 등에 대하여 상대적으로 늦게 지원하는 단점이 있습니다.

Python (thin wrapper)
 └─ C++ (stable-diffusion.cpp)
     └─ CPU / Metal / Vulkan

결론

Python 에 대한 자유도가 높고, 양자화 모델도 지원하는 diffusers 를 활용해 보겠습니다.


Vision

Z-Image-Turbo

이미지를 생성하는 모델로써 최적화가 잘 되어있는 Z-Image-Turbo 에 대하여 살펴보겠습니다. Tongyi-MAI/Z-Image-Turbo 기본모델이 있고, 이를 양자화로 최적화된 jayn7/Z-Image-Turbo-GGUF 이 있습니다.

구분 기본 모델 (Tongyi-MAI) GGUF 모델 (jayn7)
파일 형식 .safetensors 또는 .bin .gguf
데이터 정밀도 FP16 또는 FP32 (고정밀도) Q4, Q5, Q8 등 (양자화/Quantized)
파일 용량 매우 크고 무거움 상대적으로 훨씬 작음
필요 메모리(VRAM) 높음 (고성능 그래픽카드 필수) 낮음 (낮은 VRAM 또는 일반 RAM으로도 가능)
실행 환경 PyTorch, Diffusers, 전문 WebUI 등 llama.cpp 기반 로더, GGUF 지원 UI 등

GGUF를 사용하는 이유 (양자화의 개념)

양자화란? 모델이 계산할 때 사용하는 숫자의 정밀도를 낮추는 것입니다. 예를 들어, 소수점 아래 열 번째 자리까지 계산하던 것을 첫 번째 자리까지만 계산하게 만드는 식입니다. 장점: 모델의 용량이 1/2에서 1/4까지 줄어들며, 그래픽카드의 메모리(VRAM)가 부족하더라도 시스템 메모리(RAM)를 빌려와 실행할 수 있습니다. 단점: 정밀도를 낮추기 때문에 아주 미세하게 이미지의 디테일이나 품질이 원본보다 떨어질 수 있습니다 (하지만 육안으로는 구분하기 힘든 경우가 많습니다).

결론

GGUF (주로 Q8_0 또는 Q5_K_M 버전)이 속도와 품질 사이의 균형이 가장 좋기 때문에 먼저 사용해 보겠습니다.