آموزش Ollama: اجرای مدلهای هوش مصنوعی روی سرور خودتان
نصب Ollama 0.34 روی لینوکس با systemd، اجرای مدل روی GPU، انتخاب مدل بر اساس VRAM، API سازگار با OpenAI، ایمن سازی دسترسی شبکه و نصب روی سرور آفلاین.
در این صفحه
- Ollama از چه بخشهایی تشکیل شده است
- پیش نیازها و GPUهای پشتیبانی شده
- نصب روی لینوکس
- روش اول: اسکریپت رسمی
- روش دوم: نصب دستی
- بررسی نصب
- نصب روی ویندوز و macOS
- دانلود و اجرای مدل
- مدل روی GPU اجرا میشود یا CPU؟
- کدام مدل با چه مقدار VRAM
- tagهای quantization
- طول context
- کار با API
- دسترسی از شبکه، بدون باز گذاشتن API
- تنظیمات سرویس با override
- Modelfile: مدل سفارشی با system prompt
- نصب روی سرور بدون اینترنت
- نصب Ollama
- وارد کردن مدل GGUF
- به روزرسانی
- مشکلات رایج
- قدم بعدی
Ollama یک نرم افزار متن باز (مجوز MIT) برای اجرای مدلهای زبانی با وزن باز روی سرور خودتان است. مدل را با یک دستور از کتابخانهی ollama.com دانلود میکند، روی GPU اجرا میکند (اگر GPU نباشد یا مدل در آن جا نشود، روی CPU) و یک API روی پورت 11434 در اختیار برنامهها میگذارد. نصب روی لینوکس چند دقیقه طول میکشد و Ollama به صورت سرویس systemd اجرا میشود. مهمترین نکتهی امنیتی: API محلی Ollama احراز هویت ندارد، پس پورت آن را مستقیم روی شبکه باز نکنید. برای انتخاب GPU و حساب حافظه، سخت افزار لازم برای اجرای LLM روی سرور را ببینید.
Ollama از چه بخشهایی تشکیل شده است
- موتور اجرا: بر پایهی llama.cpp و فرمت GGUF؛ روی Mac با Apple Silicon موتور MLX هم دارد. اگر مدل در VRAM جا نشود، بخشی از لایهها روی CPU اجرا میشود.
- کتابخانهی مدل: مدلها در ollama.com/library با نام
model:tagمعرفی میشوند، مثلllama3.3:70b؛ بدون tag،latestدانلود میشود. - API: یک REST API روی
127.0.0.1:11434، به اضافهی endpointهای سازگار با OpenAI زیر مسیر/v1.
پیش نیازها و GPUهای پشتیبانی شده
| سخت افزار | شرط Ollama |
|---|---|
| NVIDIA | compute capability 5.0 به بالا و درایور 550 یا جدیدتر؛ کارتهای 5.0 تا 6.2 درایور 570 به بعد میخواهند |
| AMD در لینوکس | درایور ROCm v7؛ از جمله Radeon RX 7900 و 9070، Radeon PRO W7900 و Instinct MI300X و MI350X |
| سایر GPUهای AMD و Intel | از طریق Vulkan |
| Apple | تراشههای سری M روی macOS 14 به بعد؛ Macهای Intel فقط با CPU |
| بدون GPU | اجرا روی CPU، به مراتب کندتر |
compute capability هر کارت در صفحهی CUDA GPUs سایت NVIDIA آمده است (مثلاً سری RTX 40 برابر 8.9 و H100 برابر 9.0). پیش از نصب، درایور NVIDIA را نصب کنید و با nvidia-smi مطمئن شوید کارت دیده میشود. هر مدل هم از چند گیگابایت تا صدها گیگابایت فضای دیسک میگیرد.
نصب روی لینوکس
روش اول: اسکریپت رسمی
دستور رسمی نصب curl -fsSL https://ollama.com/install.sh | sh است. روی سرور، اسکریپت را اول دانلود و بخوانید، بعد اجرا کنید:
curl -fsSL https://ollama.com/install.sh -o ollama-install.sh
less ollama-install.sh
sh ollama-install.shاسکریپت این کارها را انجام میدهد:
- فایل اجرایی را در
/usr/local/binو کتابخانهها را در/usr/local/lib/ollamaمیگذارد. - کاربر سیستمی
ollamaرا میسازد و آن را عضو گروههایrenderوvideoمیکند. - سرویس
/etc/systemd/system/ollama.serviceرا میسازد، فعال میکند و اجرا میکند. - اگر GPU از نوع AMD پیدا کند، بستهی ROCm را هم دانلود میکند. اگر GPU از نوع NVIDIA باشد ولی
nvidia-smiکار نکند، روی برخی توزیعها مخزن CUDA را اضافه و درایور NVIDIA را نصب میکند.
روش دوم: نصب دستی
curl -fsSL https://ollama.com/download/ollama-linux-amd64.tar.zst \
| sudo tar x -C /usr
# فقط اگر GPU از نوع AMD دارید:
curl -fsSL https://ollama.com/download/ollama-linux-amd64-rocm.tar.zst \
| sudo tar x -C /usrبرای سرور ARM64 فایل ollama-linux-arm64.tar.zst را بگیرید. بعد کاربر سرویس را بسازید:
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
sudo usermod -a -G ollama $(whoami)با GPU از نوع AMD، کاربر ollama را عضو گروههای render و video هم بکنید (sudo usermod -a -G render,video ollama). فایل /etc/systemd/system/ollama.service:
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="PATH=$PATH"
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now ollamaبررسی نصب
ollama -v
systemctl status ollama
journalctl -u ollama --no-pager -n 50Ollama هنگام شروع، GPUها و VRAM آزاد آنها را بررسی میکند. اگر GPU شناسایی نشود، دلیلش معمولاً در همین لاگ است.
نصب روی ویندوز و macOS
- ویندوز:
OllamaSetup.exeرا از ollama.com/download اجرا کنید. نصب در پوشهی کاربر و بدون دسترسی Administrator انجام میشود. حداقل Windows 10 22H2 و برای NVIDIA درایور 551.61 به بعد لازم است. متغیرها را در Edit environment variables for your account بگذارید و برنامه را دوباره اجرا کنید. - macOS: حداقل macOS 14 (Sonoma)؛ روی تراشههای سری M از GPU استفاده میکند. متغیرها با
launchctl setenvتنظیم میشوند.
دانلود و اجرای مدل
ollama pull qwen3.8:27b # فقط دانلود
ollama run qwen3.8:27b # اجرا و شروع گفتگو؛ اگر لازم باشد اول دانلود میکند
ollama list # مدلهای دانلود شده روی دیسک
ollama ps # مدلهایی که الان در حافظهاند
ollama show qwen3.8:27b # مشخصات مدل، از جمله context و quantization
ollama stop qwen3.8:27b # خارج کردن مدل از حافظه
ollama rm qwen3.8:27b # حذف مدل از دیسکدر گفتگوی تعاملی، /bye خارج میشود. با ollama run qwen3.8:27b --verbose بعد از هر پاسخ زمان بارگذاری مدل (load duration) و سرعت تولید (eval rate بر حسب توکن بر ثانیه) چاپ میشود؛ سادهترین راه برای سنجیدن سخت افزار.
مدل روی GPU اجرا میشود یا CPU؟
ستون PROCESSOR در ollama ps جواب را میدهد. نمونهی خروجی از مستندات Ollama:
NAME ID SIZE PROCESSOR CONTEXT UNTIL
gemma4:latest c6eb396dbd59 9.6 GB 100% GPU 131072 2 minutes from now100% GPU: کل مدل در VRAM است.100% CPU: مدل کامل در RAM اجرا میشود.- مقداری مثل
48%/52% CPU/GPU: بخشی از مدل روی CPU است و سرعت به شدت افت میکند.
کدام مدل با چه مقدار VRAM
حجمهای زیر اندازهی دانلود با tag پیش فرض (معمولاً q4_K_M) در کتابخانهی Ollama است:
| VRAM | مدلهای مناسب (حجم دانلود) |
|---|---|
| 8 GB | llama3.1:8b (4.9 GB)، qwen3.5:9b (6.6 GB) |
| 12 تا 16 GB | gemma4:12b (7.6 GB)، gpt-oss:20b (14 GB) |
| 24 GB | qwen3.8:27b (18 GB)، gemma4:31b (20 GB) |
| 32 GB | qwen3.6:35b (23 GB، از نوع MoE)، مدلهای 27 تا 31 میلیاردی با context بزرگتر |
| 48 GB | llama3.3:70b (43 GB، با context کوچک)، gemma4:31b-it-q8_0 (34 GB) |
| 80 تا 96 GB | gpt-oss:120b (65 GB)، llama3.3:70b-instruct-q8_0 (75 GB)، qwen3.5:122b (81 GB، فقط روی 96 GB) |
| چند GPU دیتاسنتری | deepseek-r1:671b و deepseek-v3.1:671b (هر کدام 404 GB) |
- حجم فایل فقط وزنهاست. KV cache برای context و درخواستهای همزمان جدا حافظه میگیرد؛ چند گیگابایت VRAM خالی بگذارید.
- طبق قاعدهای که در مدل زبانی بزرگ (LLM) چیست آمده، هر میلیارد پارامتر در 4 بیت حدود 0.5 GB جا میگیرد. فایلهای واقعی کمی بزرگترند، چون
q4_K_Mبه طور میانگین حدود 4.9 بیت برای هر وزن مصرف میکند؛ به همین دلیل مدل 70B به جای 35 GB حدود 43 GB است. - DeepSeek V4 (V4-Pro و V4-Flash) در کتابخانهی Ollama فعلاً فقط با tag
cloudعرضه میشود. برای اجرای محلی DeepSeek، نسخههای distill شدهیdeepseek-r1(از1.5bتا70b) یا مدل کامل 671B را بگیرید.
tagهای quantization
tag پیش فرض معمولاً 4 بیتی است. برای دقت دیگر، tag کامل را بدهید. حجمها برای Llama 3.3 70B:
| پسوند tag | دقت | حجم 70B |
|---|---|---|
q4_K_M (پیش فرض) |
حدود 4.9 بیت برای هر وزن | 43 GB |
q8_0 |
حدود 8.5 بیت؛ کیفیت بالاتر با تقریباً دو برابر حافظه | 75 GB |
fp16 یا bf16 |
دقت کامل | 141 GB |
q3_K_M و q2_K |
فشردهتر، کیفیت پایینتر | 34 و 26 GB |
ollama pull llama3.3:70b-instruct-q8_0برخی مدلهای جدید tagهایی مثل nvfp4، mxfp8 و mlx هم دارند. اینها برای موتور MLX و سخت افزار خاص ساخته شدهاند و روی هر سیستمی اجرا نمیشوند؛ اگر مطمئن نیستید، tag پیش فرض را بگیرید.
طول context
اگر context را تنظیم نکنید، Ollama بر اساس VRAM مقدار پیش فرض میگذارد: کمتر از 24 GiB برابر 4K، بین 24 تا 48 GiB برابر 32K و از 48 GiB به بالا 256K. مستندات Ollama برای agentها و ابزارهای کدنویسی دست کم 64000 توکن را توصیه میکند. چهار راه تنظیم:
- برای کل سرور: متغیر
OLLAMA_CONTEXT_LENGTH(بخش override در ادامه) - در هر درخواست API:
"options": {"num_ctx": 32768} - در گفتگوی تعاملی:
/set parameter num_ctx 32768 - در Modelfile:
PARAMETER num_ctx 32768
context بزرگتر حافظهی بیشتری برای KV cache میگیرد. اگر بعد از افزایش آن ستون PROCESSOR از 100% GPU به ترکیب CPU/GPU تغییر کرد، context را کم کنید.
کار با API
پاسخها به طور پیش فرض به صورت stream و توکن به توکن برمیگردند؛ "stream": false کل پاسخ را در یک JSON برمیگرداند.
curl http://localhost:11434/api/generate -d '{
"model": "qwen3.8:27b",
"prompt": "Write a bash one-liner that shows free disk space on all mounts.",
"stream": false
}'برای گفتگو با تاریخچه و system prompt از /api/chat استفاده کنید:
curl http://localhost:11434/api/chat -d '{
"model": "qwen3.8:27b",
"messages": [
{"role": "system", "content": "You are a Linux administrator. Answer briefly."},
{"role": "user", "content": "How do I list listening TCP ports?"}
],
"stream": false
}'endpoint سازگار با OpenAI:
curl http://localhost:11434/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8:27b",
"messages": [{"role": "user", "content": "Say this is a test"}]
}'در کتابخانههای OpenAI کافی است base_url را http://localhost:11434/v1/ بگذارید؛ API key اجباری است ولی Ollama آن را نادیده میگیرد. سرعت تولید را از تقسیم eval_count بر eval_duration (بر حسب نانوثانیه) در پاسخ API حساب کنید.
دسترسی از شبکه، بدون باز گذاشتن API
Ollama به طور پیش فرض فقط روی 127.0.0.1:11434 گوش میدهد و با متغیر OLLAMA_HOST میشود آن را روی کارتهای شبکه باز کرد. این کار را بدون لایهی محافظ انجام ندهید.
الگوی امن:
OLLAMA_HOSTرا روی مقدار پیش فرض (127.0.0.1) نگه دارید.- روی همان سرور یک reverse proxy مثل nginx با TLS و توکن بگذارید.
- در فایروال فقط پورت 443 را، آن هم برای شبکههای داخلی مجاز، باز کنید.
- endpointهای مدیریتی را در proxy ببندید؛ کاربران فقط به endpointهای اجرای مدل نیاز دارند.
نمونهی /etc/nginx/conf.d/ollama.conf:
map $http_authorization $ollama_token_ok {
default 0;
"Bearer REPLACE_WITH_LONG_RANDOM_TOKEN" 1;
}
server {
listen 443 ssl;
server_name ai.corp.example.com;
ssl_certificate /etc/nginx/tls/ai.corp.example.com.crt;
ssl_certificate_key /etc/nginx/tls/ai.corp.example.com.key;
allow 192.168.10.0/24;
deny all;
location ~ ^/api/(create|push|pull|delete|copy|blobs) {
return 403;
}
location / {
if ($ollama_token_ok = 0) {
return 401;
}
proxy_pass http://127.0.0.1:11434;
proxy_set_header Host localhost:11434;
proxy_buffering off;
proxy_read_timeout 300s;
}
}
- توکن را با
openssl rand -hex 32بسازید. کلاینتها آن را در هدرAuthorization: Bearer ...میفرستند؛ در کتابخانههای OpenAI همان مقدارapi_keyاست. proxy_buffering offتوکنها را بدون تأخیر به کلاینت میرساند.proxy_read_timeoutپیش فرض nginx شصت ثانیه است و بارگذاری مدل بزرگ ممکن است بیشتر طول بکشد.- دانلود و حذف مدل را روی خود سرور با
ollama pullوollama rmانجام دهید.
اگر Ollama را با Docker اجرا میکنید، پورت را فقط روی loopback منتشر کنید (-p 127.0.0.1:11434:11434)؛ طبق مستندات Docker، پورتی که با -p 11434:11434 منتشر شود از بیرون سرور هم در دسترس است. سخت سازی بقیهی سرور را هم فراموش نکنید؛ برای SSH، راهنمای سخت سازی SSH را ببینید.
تنظیمات سرویس با override
تنظیمها را در فایل override بنویسید، نه در خود ollama.service؛ اسکریپت نصب در هر به روزرسانی این فایل را از نو میسازد.
sudo systemctl edit ollama[Service]
Environment="OLLAMA_MODELS=/data/ollama/models"
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_NUM_PARALLEL=4"
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
Environment="OLLAMA_NO_CLOUD=1"sudo mkdir -p /data/ollama/models
sudo chown -R ollama:ollama /data/ollama
sudo systemctl daemon-reload
sudo systemctl restart ollama| متغیر | پیش فرض | کاربرد |
|---|---|---|
OLLAMA_HOST |
127.0.0.1:11434 |
آدرس و پورت سرویس |
OLLAMA_MODELS |
/usr/share/ollama/.ollama/models |
محل مدلها؛ کاربر ollama باید روی آن دسترسی خواندن و نوشتن داشته باشد |
OLLAMA_KEEP_ALIVE |
5m |
مدت ماندن مدل در حافظه بعد از آخرین درخواست؛ عدد منفی یعنی همیشه |
OLLAMA_NUM_PARALLEL |
1 |
درخواست همزمان برای هر مدل؛ حافظه به نسبت NUM_PARALLEL × CONTEXT_LENGTH بالا میرود |
OLLAMA_MAX_LOADED_MODELS |
سه برابر تعداد GPU | تعداد مدلهایی که همزمان در حافظه میمانند |
OLLAMA_MAX_QUEUE |
512 |
طول صف درخواست؛ بیش از آن خطای 503 برمیگردد |
OLLAMA_KV_CACHE_TYPE |
f16 |
q8_0 حدود نصف و q4_0 حدود یک چهارم حافظهی KV cache را میگیرد؛ با Flash Attention کار میکند |
OLLAMA_NO_CLOUD |
خاموش | خاموش کردن مدلهای cloud و جستجوی وب |
فهرست کامل متغیرها را ollama serve --help نشان میدهد. پشت proxy سازمانی فقط HTTPS_PROXY را تنظیم کنید؛ HTTP_PROXY ممکن است اتصال کلاینتها را مختل کند.
Modelfile: مدل سفارشی با system prompt
Modelfile مدل پایه، پارامترها و system prompt را تعریف میکند:
FROM qwen3.8:27b
PARAMETER temperature 0.3
PARAMETER num_ctx 16384
SYSTEM """
You are the internal assistant of the IT team at corp.example.com.
Answer in Persian. If you are not sure a command is correct, say so.
"""ollama create it-assistant -f Modelfile
ollama run it-assistantollama show --modelfile qwen3.8:27b Modelfile کامل یک مدل موجود را، از جمله TEMPLATE و پارامترهایش، نشان میدهد.
نصب روی سرور بدون اینترنت
نصب Ollama
روی سیستمی که اینترنت دارد، ollama-linux-amd64.tar.zst (و برای AMD بستهی rocm) را دانلود و به سرور منتقل کنید. روی سرور، با نصب بودن بستهی zstd:
sudo tar --zstd -xf ollama-linux-amd64.tar.zst -C /usrبعد کاربر و سرویس را مثل نصب دستی بسازید.
وارد کردن مدل GGUF
فایل GGUF مدل را از منتشر کنندهی رسمی آن بگیرید، checksum را بررسی کنید و منتقل کنید. Ollama هنگام import فایل GGUF را کوانتیزه نمیکند؛ نسخهای را بگیرید که از قبل کوانتیزه شده است (مثلاً Q4_K_M). کنار فایل یک Modelfile بسازید:
FROM ./model-Q4_K_M.gguf
PARAMETER num_ctx 16384اگر مدل در چند فایل تقسیم شده، نام فایلها را تغییر ندهید و از wildcard استفاده کنید: FROM ./model-*.gguf. سپس:
ollama create local-model -f Modelfile
ollama run local-modelبه روزرسانی
- نصب با اسکریپت: اسکریپت را دوباره دانلود، بررسی و اجرا کنید. مدلها دست نمیخورند و سرویس در پایان ری استارت میشود.
- نصب دستی: اول
sudo rm -rf /usr/lib/ollama، بعد tarball جدید را باز کنید و سرویس را ری استارت کنید. - نسخهی مشخص:
curl -fsSL https://ollama.com/install.sh | OLLAMA_VERSION=0.34.2 sh
پیش از به روزرسانی سرور عملیاتی، یادداشتهای انتشار را در GitHub بخوانید. به روزرسانی وصلههای امنیتی را هم میآورد؛ CVE-2026-7482 با نسخهی 0.17.1 بسته شد.
مشکلات رایج
- مدل روی CPU اجرا میشود: اگر PROCESSOR در
ollama psترکیب CPU/GPU است، مدل و context در VRAM جا نشدهاند؛ مدل کوچکتر، quantization پایینتر یاnum_ctxکمتر بگیرید. اگر100% CPUاست، GPU شناسایی نشده:nvidia-smiوjournalctl -u ollamaرا ببینید و درایور را به روز کنید (NVIDIA نسخهی 550 به بعد، AMD درایور ROCm v7). با درایور ROCm 6 یا قدیمیتر، شناسایی GPU با timeout شکست میخورد و Ollama سراغ CPU میرود. برای AMD عضویت کاربرollamaدر گروههایrenderوvideoرا هم بررسی کنید. - کمبود حافظه هنگام بارگذاری:
num_ctxوOLLAMA_NUM_PARALLELرا کم کنید، KV cache راq8_0کنید، یاOLLAMA_MAX_LOADED_MODELS=1بگذارید. اگر برنامهی دیگری هم از GPU استفاده میکند، باOLLAMA_GPU_OVERHEADبخشی از VRAM را (بر حسب بایت) کنار بگذارید. - اولین پاسخ دیر میآید: در اولین درخواست، مدل از دیسک به VRAM بارگذاری میشود (
load durationدر خروجی--verbose) و بعد از پنج دقیقه بیکاری دوباره از حافظه خارج میشود.OLLAMA_KEEP_ALIVEرا بیشتر کنید یا مدل را از قبل بارگذاری کنید:curl http://localhost:11434/api/generate -d '{"model": "qwen3.8:27b", "keep_alive": -1}'. prompt طولانی هم پیش از اولین توکن باید پردازش شود؛ سرعت این مرحله درprompt eval rateدیده میشود. - خطای 503: صف درخواستها پر شده است. اگر VRAM اجازه میدهد
OLLAMA_NUM_PARALLELرا بالا ببرید؛ برای دهها کاربر همزمان، بخش نرم افزار در سخت افزار لازم برای اجرای LLM روی سرور را ببینید.
قدم بعدی
ده سؤال واقعی از کار تیم را به دو یا سه مدل از جدول VRAM بدهید و کیفیت پاسخ و eval rate را کنار هم بگذارید؛ این آزمون بهتر از هر بنچمارکی مدل مناسب سخت افزار شما را نشان میدهد. برای مقایسه با سرویسهای ابری از نظر داده و دسترسی، مقایسهی ChatGPT، Claude، Gemini و DeepSeek را ببینید.
منابع
- Ollama Docs — Linux docs.ollama.com
- Ollama Docs — FAQ docs.ollama.com
- Ollama Docs — Hardware support docs.ollama.com
- Ollama Docs — Context length docs.ollama.com
- Ollama Docs — Modelfile Reference docs.ollama.com
- Ollama Docs — Importing a Model docs.ollama.com
- Ollama Docs — Authentication docs.ollama.com
- Ollama Docs — OpenAI compatibility docs.ollama.com
- Ollama Docs — Troubleshooting docs.ollama.com
- Ollama Releases (GitHub) github.com
- Ollama Model Library ollama.com
- llama.cpp — llama-quantize README github.com
- NVD — CVE-2026-7482 nvd.nist.gov
- Researchers Find 175,000 Publicly Exposed Ollama AI Servers (The Hacker News, January 2026) thehackernews.com
- nginx — Module ngx_http_proxy_module nginx.org
- Docker Docs — Port publishing and mapping docs.docker.com