arrow_forwardמדריכים / הרצת LLM מקומית
מעודכן לספטמבר 2026 23 דקות קריאה תשתית · Docker · Apple Silicon

הרצת LLM מקומית
פרטיות מלאה, בלי ענן, על החומרה שכבר יש לך

יש מקרים שבהם שליחת נתונים ל-API חיצוני פשוט אינה אפשרות — רשומות רפואיות, מסמכים משפטיים, קוד קניינী. המדריך הזה מסביר איך להריץ מודלים על המחשב שלך: מה החומרה באמת מאפשרת, איך קוונטיזציה עובדת, ואיך בונים סביבה מבודדת שאפשר לסמוך עליה.

RAM
האילוץ האמיתי
Q4_K_M
ברירת המחדל
0
בתים לענן

מתי מקומי הוא באמת התשובה

הרצה מקומית עולה בביצועים ובאיכות לעומת מודלי החזית. היא משתלמת כשיש סיבה מהותית, לא בגלל העיקרון:

ולעומת זאת: למשימות שדורשות היגיון מורכב, הפער מול מודלי החזית עדיין משמעותי. שקול ארכיטקטורה מעורבת — מקומי למה שרגיש, ענן לשאר.

מה החומרה שלך מאפשרת

האילוץ הבולם הוא כמעט תמיד זיכרון, לא מהירות. חישוב הגודל פשוט:

זיכרון נדרש ≈ (מספר פרמטרים × ביטים לפרמטר / 8) × 1.2

Llama 3.1 8B  ב-Q4  →  8 × 0.5 × 1.2  ≈ 5 GB
Llama 3.1 70B ב-Q4  →  70 × 0.5 × 1.2 ≈ 42 GB
Mistral 7B    ב-Q8  →  7 × 1.0 × 1.2  ≈ 8.4 GB

התוספת של 1.2 היא ה-KV cache — והיא גדלה עם אורך ההקשר.

Apple Silicon הוא מקרה מיוחד לטובה. ב-M-series הזיכרון מאוחד (unified memory): ה-GPU ניגש לכל ה-RAM. מק עם 64GB מריץ מודל 70B בנוחות, בעוד שכרטיס גרפי בעל 24GB VRAM — שעולה יותר — פשוט לא יכול. זו הסיבה שמק הפך לפלטפורמה מועדפת להרצה מקומית.

מק עם 16GB  → מודלי 8B בנוחות
מק עם 32GB  → 8B–14B, או 34B בקוונטיזציה נמוכה
מק עם 64GB+ → 70B ריאלי

RTX 3060 12GB → 8B ב-Q4
RTX 4090 24GB → 14B בנוחות, 34B דחוק
CPU בלבד     → עובד, אך איטי מאוד. שמור לעיבוד אצווה ברקע.

קוונטיזציה — מה באמת קורה

קוונטיזציה מקטינה את הדיוק של כל משקל: מ-16 ביט ל-4, למשל. המודל מתכווץ פי ארבעה ומאבד מעט איכות. הפורמטים הנפוצים:

Q8_0    ~50% מהגודל   איכות כמעט זהה למקור
Q6_K    ~40%          הפרש כמעט בלתי מורגש
Q4_K_M  ~28%          נקודת האיזון המומלצת — ברירת מחדל טובה
Q3_K_M  ~22%          ירידה מורגשת; רק כשאין מספיק זיכרון
Q2_K    ~16%          לרוב לא שווה את זה

כלל אצבע מעשי: מודל גדול יותר בקוונטיזציה נמוכה עדיף על מודל קטן בדיוק מלא. 13B ב-Q4 כמעט תמיד יעלה על 7B ב-Q8 באותה תפוסת זיכרון. לרקע על אימון והתאמה ראה מדריך LoRA.

Ollama — הדרך המהירה להתחיל

# התקנה
curl -fsSL https://ollama.com/install.sh | sh        # Linux
brew install ollama                                  # macOS

ollama pull llama3.1:8b
ollama run llama3.1:8b "הסבר מהי קוונטיזציה בשתי שורות"

ollama ps      # מה טעון בזיכרון כרגע
ollama list    # מה יש מקומית

Ollama חושף API תואם OpenAI, כך שרוב הקוד הקיים עובר בשינוי שורה אחת:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",                     # לא נבדק, אבל נדרש על ידי ה-SDK
)

resp = client.chat.completions.create(
    model="llama3.1:8b",
    messages=[{"role": "user", "content": "סכם את הטקסט הבא בשלוש נקודות..."}],
    temperature=0.2,
)
print(resp.choices[0].message.content)

התאמת המודל עם Modelfile

# Modelfile
FROM llama3.1:8b

PARAMETER temperature 0.2
PARAMETER num_ctx 8192          # הקשר גדול = יותר זיכרון

SYSTEM """אתה עוזר לניתוח מסמכים משפטיים בעברית.
ענה רק על סמך המסמך שסופק. אם התשובה אינה במסמך — אמור זאת במפורש."""
ollama create legal-he -f Modelfile
ollama run legal-he

llama.cpp — כשצריך שליטה

Ollama בנוי מעל llama.cpp. כשצריך לכוון ביצועים מדויק, עבוד ישירות מולו:

git clone https://github.com/ggerganov/llama.cpp && cd llama.cpp

# macOS — Metal מופעל כברירת מחדל
cmake -B build && cmake --build build --config Release

# Linux עם NVIDIA
cmake -B build -DGGML_CUDA=ON && cmake --build build --config Release

# שרת תואם OpenAI
./build/bin/llama-server \
  -m models/llama-3.1-8b-instruct-Q4_K_M.gguf \
  -c 8192 \          # גודל הקשר
  -ngl 99 \          # כמה שכבות ל-GPU; 99 = הכול
  --host 0.0.0.0 --port 8080

-ngl הוא הפרמטר שמשנה הכול. אם המודל לא נכנס כולו ל-GPU, הורד את המספר עד שהטעינה מצליחה — כל שכבה שנשארת ב-CPU מאטה משמעותית.

סביבה מבודדת עם Docker

הפרדה בקונטיינר נותנת שני דברים: שחזוריות, ויכולת להוכיח שאין יציאה לרשת — מה שנדרש בדרך כלל בביקורת.

# docker-compose.yml
services:
  ollama:
    image: ollama/ollama:latest
    volumes:
      - ./models:/root/.ollama
    networks: [internal]
    deploy:
      resources:
        reservations:
          devices:
            - { driver: nvidia, count: all, capabilities: [gpu] }

  app:
    build: .
    environment:
      OLLAMA_HOST: http://ollama:11434
    networks: [internal]
    depends_on: [ollama]

networks:
  internal:
    internal: true        # אין ניתוב החוצה. זו כל הנקודה.

internal: true הוא ההבדל בין "אנחנו לא שולחים לענן" לבין הוכחה שאי אפשר. הרשת חסומה ברמת Docker, כך שגם תלות שתנסה לדווח טלמטריה לא תצליח. משוך את המודלים מראש — אחרי ההרמה אין דרך להוריד.

# משיכה מראש, לפני הבידוד
docker compose run --rm ollama ollama pull llama3.1:8b
docker compose up -d

# אימות שאין יציאה
docker compose exec app curl -m 5 https://example.com || echo "מבודד ✓"

Apple Silicon — MLX לביצועים מיטביים

MLX היא ספריית אפל, מותאמת לזיכרון המאוחד. בדרך כלל מהירה יותר מ-llama.cpp על אותה חומרה:

pip install mlx-lm

# הרצה ישירה
mlx_lm.generate --model mlx-community/Meta-Llama-3.1-8B-Instruct-4bit \
                --prompt "הסבר מהו RAG" --max-tokens 512

# שרת תואם OpenAI
mlx_lm.server --model mlx-community/Meta-Llama-3.1-8B-Instruct-4bit --port 8080
from mlx_lm import load, generate

model, tokenizer = load("mlx-community/Meta-Llama-3.1-8B-Instruct-4bit")
prompt = tokenizer.apply_chat_template(
    [{"role": "user", "content": "סכם את המסמך המצורף"}],
    add_generation_prompt=True, tokenize=False)
print(generate(model, tokenizer, prompt=prompt, max_tokens=512))

RAG מקומי לחלוטין

אם הנתונים לא יוצאים, גם ה-embeddings חייבים להיווצר מקומית. השילוב הזה נותן צינור סגור מקצה לקצה:

from langchain_ollama import OllamaEmbeddings, ChatOllama
from langchain_chroma import Chroma
from langchain.chains import RetrievalQA

# הטמעות מקומיות — שום טקסט לא עוזב את המכונה
embeddings = OllamaEmbeddings(model="nomic-embed-text")
store = Chroma(persist_directory="./vectors", embedding_function=embeddings)

qa = RetrievalQA.from_chain_type(
    llm=ChatOllama(model="llama3.1:8b", temperature=0),
    retriever=store.as_retriever(search_kwargs={"k": 4}),
)
print(qa.invoke({"query": "מה תקופת ההתיישנות לפי המסמך?"}))

למבנה ה-RAG עצמו ולשיפור האיכות ראה מדריך RAG וRAG מתקדם.

בעיות נפוצות

סיכום מעשי

memory

המשך מכאן

הרצה מקומית היא הבסיס. השלב הבא הוא בדרך כלל התאמת מודל למשימה שלך, או בניית RAG מעליו.