logologo
BlogGeçmiş
Blog
Avatar
Ana YazarHatice Sebla Karabunar1 Mayıs 2025 10:59

Yapay Zeka Projelerinde Docker Kullanımı

fav gif
Kaydet
viki star outline

Docker, yazılım uygulamalarını birbirinden bağımsız ve taşınabilir konteynerlerde çalıştırmak için kullanılan açık kaynaklı bir platformudur. Sanal makinelerden farklı olarak, konteynerler işletim sistemi seviyesinde izole edilir ve daha hafif kaynak kullanımı sağlar. Özellikle yapay zeka (YZ) projelerinde Docker; taşınabilirlik, tekrar üretilebilirlik ve bağımlılık yönetimi konularında büyük avantaj sağlar. Örneğin Docker, makine öğrenimi süreçlerinde ortaya çıkan “ortamı tekrardan yaratma” (environment reproducibility) ve bağımlılık yönetimi sorunlarını çözerek işbirliği ve dağıtımı kolaylaştırır. Yani bir yerde sorunsuz çalışan kod, Docker imajı ile başka sistemlerde de aynı şekilde çalıştırılabilir hale gelir.

Docker Image ve Container Kavramları

  • Docker Image: Uygulamanın çalışması için gereken tüm dosyaları, kodları, kütüphaneleri ve ayarları içeren hazır bir pakettir. Örneğin Python ve gerekli kütüphanelerin kurulu olduğu bir imaj, makine öğrenimi kodunuzun her ortamda çalışmasını sağlar. İmajlar Docker Hub gibi kayıt defterlerinde saklanır.
  • Docker Container: Bir imajın çalıştırıldığı, izole edilmiş çalışma ortamıdır. İmaj içindeki kod ve bağımlılıklar bu container’da aktif olur. Container’lar ana işletim sistemiyle paylaşılabilir kaynakları kullanır ancak diğer container ve uygulamalardan izole çalışır. Yani container, “uygulamayı ayağa kaldıran” canlı bir birimdir.


Bu kavramlara ek olarak Dockerfile, bir imajın nasıl oluşturulacağını betimleyen metin dosyasıdır. Dockerfile içindeki FROM, RUN, COPY gibi komutlar ile bir imaj katman katman inşa edilir.

YZ Projelerinde Bağımlılık ve Ortam Problemleri

YZ projelerinde bağımlılık karmaşası sık görülen bir sorundur. Farklı projelerde Python, CUDA, C/C++ kütüphaneleri gibi birçok bileşen farklı versiyonlarda olabilir. Örneğin bir model TensorFlow 2 ile geliştirilirken, başka bir modeller Torch, scikit-learn, belirli GPU sürücüleri veya OpenCV gibi kütüphanelere ihtiyaç duyabilir. Bu farklılıklar, “bir ortamda çalışan kod başka ortamda neden çalışmıyor?” sorusunu gündeme getirir. Docker, bu sorunları her projenin kendine ait izole bir konteyner ortamında çözerek giderir. Konteyner içinde tüm bağımlılıklar ve ortam ayarları (örneğin Python versiyonu) sabitlenebilir. Böylece geliştirme, test ve üretim ortamları arasında tutarlılık sağlanır.


Sık karşılaşılan problemler şunlardır:


  • Kütüphane versiyon uyuşmazlıkları (örneğin aynı kütüphane farklı versiyonları).
  • CUDA/GPU sürücü uyumsuzlukları, farklı NVIDIA sürücü ve CUDA versiyonları.
  • Sisteme özel yol veya izin farkları (örneğin yol bağımlı dosya yolları).


Docker, bu sorunları kendi içinde çözer. Örneğin, projenin ihtiyaç duyduğu tüm Python paketlerini requirements.txt veya environment.yml ile imaja dahil edilebilir. CUDA gerektiren uygulamalar için NVIDIA’nın hazır CUDA tabanlı imajlarından yararlanılabilir (örn. nvidia/cuda:12.8.1-cudnn). Böylece bağımlılık zinciri her seferinde tutarlı hale gelir. Sonuç olarak, farklı makinelerde de “aynı kod, aynı sonuç” garantisi elde edilir.

Örnek: Python Makine Öğrenimi Projesi için Dockerfile

Basit bir Python tabanlı makine öğrenimi projesi için örnek bir Dockerfile aşağıda gösterilmiştir. Bu örnekte resmi Python imajı kullanılmış, öncelikle gerekli paketler kurulmuş, ardından proje dosyaları kopyalanıp çalıştırılmıştır:


# 1. Temel imaj olarak hafif bir Python sürümü kullanıyoruz
FROM python:3.9-slim
# 2. Çalışma dizinini ayarla
WORKDIR /app
# 3. Gereksinimler dosyasını kopyala ve paketleri yükle
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# 4. Proje dosyalarını kopyala
COPY . .
# 5. Container çalıştığında model eğitimi veya tahmin komutunu çalıştır
CMD ["python", "train.py"]


Bu Dockerfile’da adım adım şu işlemler yapılır:


  1. python:3.9-slim imajı çekilir; temel Python ortamı kurulur. (Slim versiyon, gereksiz araçlar kaldırılmış hafif imaj sağlar.)
  2. Çalışma dizini /app olarak belirlenir.
  3. requirements.txt içindeki Python paketleri (torch, numpy, scikit-learn, vs.) pip install ile yüklenir. --no-cache-dir ile pip önbelleği saklanmaz, böylece imaj boyutu düşer.
  4. Projedeki kaynak kodlar (.py dosyaları, model tanımları) kopyalanır.
  5. Container çalıştırıldığında train.py dosyası ile model eğitimi başlatılır.

docker build ve docker run Komutları

İmaj oluşturma: Dockerfile hazırlandıktan sonra bulunduğu klasörde şu komutla imaj inşa edilir:


	docker build -t benim-yz-projem .


Burada -t etiketi ile imaja bir isim ve etiket veriyoruz (örn. benim-yz-projem:latest). Nokta (.) son klasördeki Dockerfile’ı işaret eder. --no-cache bayrağı kullanılarak her seferinde temiz build yapılabilir; böylece eski katmanlar önbelleğe alınmaz ve bağımlılıklar güncel tutulur.


Container çalıştırma: Oluşturulan imajdan bir container ayağa kaldırmak için:


	docker run --name yz-container -d benim-yz-projem


Komutuyla benim-yz-projem imajından arka planda (-d) bir konteyner başlatılır ve ml-container adı verilir. Eğer bir port yönlendirme gerekiyorsa örneğin:


	docker run -d -p 8888:8888 --name yz-container -v $(pwd):/app benim-yz-projem


şeklinde de kullanılabilir. Bu örnekte -p ile container’daki 8888 portu ana makineye bağlanırken, -v ile mevcut dizin container içindeki /app dizinine mount edilmiştir.


docker run komutu ile container başlatıldıktan sonra içinde otomatik olarak CMD komutu (örneğin python train.py) çalışır. Eğitim veya inference ile ilgili komutları konteynır çalışırken başlatarak işler yapılır.

Kaynakça

Docker, Inc. “Best Practices for Writing Dockerfiles.” Docker Documentation. Erişim tarihi: 01.05.2025.https://docs.docker.com/build/building/best-practices/.


Medium. “Chapter 16: Docker for Data Science and Machine Learning.” Erişim tarihi: 01.05.2025.https://praneethreddybilakanti.medium.com/chapter-16-docker-for-data-science-and-machine-learning-8379cbe1d1db.


Medium. “End-to-End ML Pipeline Using Docker.” Erişim tarihi: 01.05.2025.https://medium.com/@sauravpattnaik2011/end-to-end-ml-pipeline-using-docker-fa4878abcc33.

Sen de Değerlendir!

0 Değerlendirme

Blog İşlemleri

KÜRE'ye Sor