Deepseek R1'i Yerel Olarak Çalıştırın: OpenWebUI + Ollama [Homelab]
Günümüzde yerel AI eğitimi ve kullanımı gibi konuların oldukça önem kazandığından önceki yazılarımda bahsetmiştim. Bu rehberde, önceki rehberimizde kurduğunuz "ekran kartlı VM" üzerinden web arayüzü kullanarak nasıl yerel Deepseek R1 modeli çalıştırabileceğinizi göreceksiniz. Çalışmayı yapmak için ekran kartı olan bir VM/host ihtiyacı bulunmamaktadır, GPU yerine CPU üzerinden çalışabileceğiniz yerler belirtilmiştir. Eğer CPU ile çalışacaksanız, NVIDIA ile ilgili adımları atlayabilir, doğrudan "Docker Compose ile Konteyner Orkestrasyonu" başlığından devam edebilirsiniz. Gereksinimler: Bu kılavuz boyunca standart bir Linux server OS kurulumu yapmış olduğunuzu varsayacağım. Bu rehber özelinde Fedora 41 Server Edition üzerinden ilerlenecektir. VM Özellikleri CPU: 4 vCPU Ekran Kartı: NVIDIA GTX 1050 Tİ RAM: 8GB Disk: 64GB Konuk İşletim Sistemi : Fedora 41 Server Edition Başlangıç Adım 1 : Fedora Server Üzerinde Gerekli Araçların Kurulması Temel olarak Docker Engine ve Docker Compose üzerinden süreçleri ilerleteceksiniz. Sunucunuza root veya sudoers grubuna üye bir kullanıcı ile "sudo" yetkisi olan bir kullanıcı ile SSH yapın. Adım 1.1 : Docker Kurulumu Docker, uygulamaları ve tüm bağımlılıklarını izole bir şekilde çalıştırmak için kullanılan, hafif ve taşınabilir konteyner teknolojisidir. Docker'ı sunucunuza kurmanız için Docker CE repolarını sisteminize ekleyin: sudo dnf -y install dnf-plugins-core sudo dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo Ardından Docker Engine son sürümünü yükleyin: sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin İşlem tamamlandıktan sonra Docker servisini başlatın ve aktif hale getirin: sudo systemctl enable --now docker Adım 1.2 :Docker'ı Root Olmayan Bir Kullanıcı Olarak Yönetmek Docker Engine bir TCP bağlantı noktasına değil, bir Unix soketine bağlanır. Varsayılan olarak, Unix soketine sahip olan root kullanıcıdır ve diğer kullanıcılar yalnızca "sudo" kullanarak erişebilir. Aşağıdaki işlemler ile kullanıcınızı "docker" grubuna ekleyerek kullanıcınıza yetki verebilir, "sudo" kullanmadan docker kullanabilirsiniz. *UYARI ! * Bu grup root seviyesinde kullanıcınızı yetkilendirebilir. Sistem güvenliğinizi nasıl etkilediğini öğrenmek istiyorsanız, Docker Daemon Attack Surface inceleyin. Aşağıdaki komut ile docker grubunu oluşturun: sudo groupadd docker Ardından kullanıcınızı gruba ekleyin: sudo usermod -aG docker $USER Oturumunuzu kapatıp açtıktan sonra değişiklikler etkili olacaktır, aşağıdaki komutu kullanarak da aktive edebilirsiniz: newgrp docker Ardından aşağıdaki komut ile Docker'ın başarı ile kurulduğunu kontrol edin: docker run hello-world Aşağıdaki gibi bir çıktı vermelidir: fserver@localhost:~$ docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world e6590344b1a5: Pull complete Digest: sha256:c41088499908a59aae84b0a49c70e86f4731e588a737f1637e73c8c09d995654 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ Adım 2 : SELinux'un Kapatılması SELinux (Security-Enhanced Linux), Linux sistemlerinde erişim kontrolünü daha sıkı ve ayrıntılı hale getirmek için kullanılan, zorunlu erişim kontrolü (MAC) sağlayan bir güvenlik modülüdür. Bazı sağıtımlarda AppArmor isimli sistem de benzer görevi üstlenebilir. NVIDIA ekran kartını containerlere aktarma konusunda sorunlu bir süreç yaşamamak adına test ortamımızda geçici olarak kapatacağız. Aşağıdaki komutu kullanarak SELinux yapılandırma dosyasına erişin: sudo vi /etc/selinux/config Ardından aşağdaki satırı; SELINUX=enforcing Bu şekilde değiştirin; SELINUX=disabled Ardından sunucunuzu yeniden başlatın: sudo reboot now Bu komut ile kontrol edin: fserver@localhost:~$ sestatus SELinux status: disabled NVIDIA Container Toolkit NVIDIA Container Toolkit, kullanıcıların GPU hızlandırmalı container oluşturmasına ve çalıştırmasına olanak tanıyan bir kütüphaneler bütünüdür.
![Deepseek R1'i Yerel Olarak Çalıştırın: OpenWebUI + Ollama [Homelab]](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx3fl5u71vq5caqojk3bb.png)
Günümüzde yerel AI eğitimi ve kullanımı gibi konuların oldukça önem kazandığından önceki yazılarımda bahsetmiştim. Bu rehberde, önceki rehberimizde kurduğunuz "ekran kartlı VM" üzerinden web arayüzü kullanarak nasıl yerel Deepseek R1 modeli çalıştırabileceğinizi göreceksiniz.
Çalışmayı yapmak için ekran kartı olan bir VM/host ihtiyacı bulunmamaktadır, GPU yerine CPU üzerinden çalışabileceğiniz yerler belirtilmiştir. Eğer CPU ile çalışacaksanız, NVIDIA ile ilgili adımları atlayabilir, doğrudan "Docker Compose ile Konteyner Orkestrasyonu" başlığından devam edebilirsiniz.
Gereksinimler:
Bu kılavuz boyunca standart bir Linux server OS kurulumu yapmış olduğunuzu varsayacağım. Bu rehber özelinde Fedora 41 Server Edition üzerinden ilerlenecektir.
VM Özellikleri
CPU: 4 vCPU
Ekran Kartı: NVIDIA GTX 1050 Tİ
RAM: 8GB
Disk: 64GB
Konuk İşletim Sistemi : Fedora 41 Server Edition
Başlangıç
Adım 1 : Fedora Server Üzerinde Gerekli Araçların Kurulması
Temel olarak Docker Engine ve Docker Compose üzerinden süreçleri ilerleteceksiniz.
Sunucunuza root veya sudoers grubuna üye bir kullanıcı ile "sudo" yetkisi
olan bir kullanıcı ile SSH yapın.
Adım 1.1 : Docker Kurulumu
Docker, uygulamaları ve tüm bağımlılıklarını izole bir şekilde çalıştırmak için kullanılan, hafif ve taşınabilir konteyner teknolojisidir.
Docker'ı sunucunuza kurmanız için Docker CE repolarını sisteminize ekleyin:
sudo dnf -y install dnf-plugins-core
sudo dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
Ardından Docker Engine son sürümünü yükleyin:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
İşlem tamamlandıktan sonra Docker servisini başlatın ve aktif hale getirin:
sudo systemctl enable --now docker
Adım 1.2 :Docker'ı Root Olmayan Bir Kullanıcı Olarak Yönetmek
Docker Engine bir TCP bağlantı noktasına değil, bir Unix soketine bağlanır. Varsayılan olarak, Unix soketine sahip olan root kullanıcıdır ve diğer kullanıcılar yalnızca "sudo" kullanarak erişebilir.
Aşağıdaki işlemler ile kullanıcınızı "docker" grubuna ekleyerek kullanıcınıza yetki verebilir, "sudo" kullanmadan docker kullanabilirsiniz.
*UYARI ! * Bu grup root seviyesinde kullanıcınızı yetkilendirebilir. Sistem güvenliğinizi nasıl etkilediğini öğrenmek istiyorsanız, Docker Daemon Attack Surface inceleyin.
Aşağıdaki komut ile docker grubunu oluşturun:
sudo groupadd docker
Ardından kullanıcınızı gruba ekleyin:
sudo usermod -aG docker $USER
Oturumunuzu kapatıp açtıktan sonra değişiklikler etkili olacaktır, aşağıdaki komutu kullanarak da aktive edebilirsiniz:
newgrp docker
Ardından aşağıdaki komut ile Docker'ın başarı ile kurulduğunu kontrol edin:
docker run hello-world
Aşağıdaki gibi bir çıktı vermelidir:
fserver@localhost:~$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:c41088499908a59aae84b0a49c70e86f4731e588a737f1637e73c8c09d995654
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Adım 2 : SELinux'un Kapatılması
SELinux (Security-Enhanced Linux), Linux sistemlerinde erişim kontrolünü daha sıkı ve ayrıntılı hale getirmek için kullanılan, zorunlu erişim kontrolü (MAC) sağlayan bir güvenlik modülüdür. Bazı sağıtımlarda AppArmor isimli sistem de benzer görevi üstlenebilir.
NVIDIA ekran kartını containerlere aktarma konusunda sorunlu bir süreç yaşamamak adına test ortamımızda geçici olarak kapatacağız.
Aşağıdaki komutu kullanarak SELinux yapılandırma dosyasına erişin:
sudo vi /etc/selinux/config
Ardından aşağdaki satırı;
SELINUX=enforcing
Bu şekilde değiştirin;
SELINUX=disabled
Ardından sunucunuzu yeniden başlatın:
sudo reboot now
Bu komut ile kontrol edin:
fserver@localhost:~$ sestatus
SELinux status: disabled
NVIDIA Container Toolkit
NVIDIA Container Toolkit, kullanıcıların GPU hızlandırmalı container oluşturmasına ve çalıştırmasına olanak tanıyan bir kütüphaneler bütünüdür.
Adım 1 : NVIDIA Container Toolkit Yüklenmesi
DNF repolarını yapılandırın:
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
Ardından NVIDIA Container Toolkit paketlerini yükleyin:
sudo dnf install -y nvidia-container-toolkit
Paketler yüklendikten sonra container runtime yapılandırmasını yapın:
sudo nvidia-ctk runtime configure --runtime=docker
Ardından Docker servisinizi restart edin:
sudo systemctl restart docker
Aşağıdaki komut ile işlemleri doğrulayın:
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
Çıktı aşağıdaki gibi olmalıdır:
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
0622fac788ed: Pull complete
Digest: sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233
estart dockerStatus: Downloaded newer image for ubuntu:latest
Mon May 12 19:01:45 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.144 Driver Version: 570.144 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1050 Ti Off | 00000000:01:00.0 Off | N/A |
| 0% 38C P8 N/A / 72W | 11MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
Tebrikler, başarı ile containerlerinizde NVIDIA kartınızı çalıştırdınız !
Docker Compose ile Konteyner Orkestrasyonu
Docker Compose, çoklu Docker konteynerini tek bir YAML dosyasıyla tanımlayıp birlikte çalıştırmayı sağlayan bir orkestrasyon aracıdır.
Bu araç ile tüm containerlerimizi ayağa kaldıracağız.
Adım 1 : Docker Compose Geliştirme Ortamını Yapılandırın
Kullanıcımın ev dizininde bir klasör açıyorum ve orada compose için bir YAML oluşturuyorum:
cd
mkdir localDeepseek
cd localDeepseek
touch docker-compose.yaml
Ardından burada containerlerimizi oluşturacağız.
Adım 1.1 : Ollama AI Backend Yapılandırması
Ollama, büyük dil modellerini (LLM) yerel olarak kolayca çalıştırmayı sağlayan, basit komutlarla model indirme ve yönetim imkanı sunan bir araçtır.
docker-compose.yaml dosyasını açın:
vi docker-compose.yaml
Ve Ollama containerini eklemek için dosyanın içini doldurun :
NOT ! YAML dosyası, girinti-çıkıntı duyarlıdır !
version: "3.8"
services:
ollama:
image: ollama/ollama
ports:
- 11434:11434 #ollama varsayılan olarak 11434/TCP kullandığından portları açıyoruz.
command: serve
volumes:
- ollama:/root/.ollama #Ollama modellerini depoladığımız noktayı volume olarak yönlendiriyoruz.
runtime: nvidia # NVIDIA GPU desteği için gerekli,!!! CPU için kaldırın!!!
volumes:
ollama:
Adım 1.2 : OpenWebUI ile Web Arayüzü Yapılandırması
OpenWebUI, kullanıcıların web tarayıcısı üzerinden yapay zeka modellerini yönetmesini ve etkileşimde bulunmasını sağlayan açık kaynaklı bir kullanıcı arayüzüdür.
docker-compose.yaml dosyasını açın ve OpenWebUI ile ilgili satırları ekleyin:
vi docker-compose.yaml
Ve Ollama containerini eklemek için dosyanın içini doldurun, son hali aşağıdaki gibi olmalıdır :
version: "3.8"
services:
ollama:
image: ollama/ollama
ports:
- 11434:11434 #ollama varsayılan olarak 11434/TCP kullandığından portları açıyoruz.
command: serve
volumes:
- ollama:/root/.ollama #Ollama modellerini depoladığımız noktayı volume olarak yönlendiriyoruz.
runtime: nvidia # NVIDIA GPU desteği için gerekli
webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- 8080:8080 # 8080 portundan dışarı açacağız.
environment:
- OLLAMA_BASE_URL=http://ollama:11434 #Docker Compose servis isminden DNS çözer. 11434 açmıştık, bağlantısını yapıyoruz.
volumes:
- open-webui:/app/backend/data #Verilerin kalıcı olması için Volume bağladık
depends_on:
- ollama # Ollama açılmadan webui açılmayacak.
volumes:
ollama:
open-webui:
Ardından dosyanızı kaydedin ve çıkın.
Adım 1.3 : Docker Compose ile Containerlerin Çalıştırılması
Aşağıdaki komut ile çalıştırın:
docker compose up -d
İlk çalıştırdığınızda imajlar ineceğinden internet hızınıza bağlı olarak uzun sürebilir.
Aşağıdaki komut ile healty olmasını bekleyin -unhealthy durumda başlayabilir, biraz bekleyin.-(up time 2 dk bulabiliyor):
watch -n .1 docker ps -a
Çıktı aşağıdaki gibi olmalıdır:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b747790b7431 ghcr.io/open-webui/open-webui:main "bash start.sh" 8 minutes ago Up 7 minutes (healthy) 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp localdeepseek-webui-1
561e6827843e ollama/ollama "/bin/ollama serve" 8 minutes ago Up 7 minutes 0.0.0.0:11434->11434/tcp, [::]:11434->11434/tcp localdeepseek-ollama-1
Ardından tarayıcınıza sunucuzun IP adresinden gidin:
http://:8080
Karşılama ekranında yönetici hesabınızı oluşturun ve ana ekrana gelin:
Tebrikler, web arayüzüne bağlandınız !
Deepseek R1 İndirilmesi ve Kullanımı
Çeşitli Deepseek modellerine Ollama sayfasından ulaşabilirsiniz.
DeepSeek-R1:1.5B, DeepSeek tarafından geliştirilen ve yaklaşık 1.5 milyar parametreye sahip, açık kaynaklı, küçük boyutlu bir büyük dil modelidir. Biz de hafif olması için rehberberimizde bu modeli kullanacağız.
Adım 1 : Docker Exec İle Ollama Üzerinden Modeli İndirin
Aşağıdaki komut ile ollama container ID öğrenin:
docker ps -a
Çıktıdaki Container ID ile aşağıdaki komutu çalıştırın:
docker exec ollama run deepseek-r1:1.5b
Model , 1.1 GB olduğu için internet hızınıza bağlı olarak zaman alabilir.
Adım 2 : WebUI Üzerinden Modeli Kullanın ve GPU'yu Kontrol Edin
Web arayüzüne geri dönün ve sayfayı yenileyin. Sol üstte modeli göreceksiniz:
Fedora Server üzerinde aşağıdaki komutu girin:
watch -n .1 nvidia-smi
Ardından bir prompt girin:
Ve komut penceresinden NVIDIA ekran kartının kullanıldığını doğrulayın:
Every 0.1s: nvidia-smi localhost.localdomain: Mon May 12 23:07:04 2025
Mon May 12 23:07:04 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.144 Driver Version: 570.144 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce GTX 1050 Ti Off | 00000000:01:00.0 Off | N/A |
| 0% 45C P8 N/A / 72W | 1537MiB / 4096MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 70689 C /usr/bin/ollama 1524MiB |
+-----------------------------------------------------------------------------------------+
*Tebrikler, Deepseek R1'i yerel olarak çalıştırdınız !
*
Sonuç
Rehber boyunca Proxmox üzerinde GPU Passthrough altyapısına uygun hale getirilmiş bir VM üzerinde Deepseek R1'i NVIDIA GPU ile yerel olarak çalıştırma adımlarını ele aldık.
Sonraki yazılarımda OpenWebUI ve Cloudflare Tunnel ile dışarıdan erişim ile ilgili rehberimi genişleteceğim, kaçırmak istemiyorsanız takipte kalın.