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.

May 12, 2025 - 22:04
 0
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.

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:

Image description

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:

Deepseek

Fedora Server üzerinde aşağıdaki komutu girin:

watch -n .1 nvidia-smi

Ardından bir prompt girin:

Deepseek

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.