Takip et

GPU Droplet’lerde Nvidia Container Tools ve Miniconda Kullanımı: Kapsamlı Bir Rehber

GPU Droplet’lerde Nvidia Container Tools ve Miniconda Kullanımı: Kapsamlı Bir Rehber Giriş: GPU Droplet’ler, Konteynerizasyon ve Ortam Yönetimi

GPU Droplet’lerde Nvidia Container Tools ve Miniconda Kullanımı: Kapsamlı Bir Rehber

Giriş: GPU Droplet’ler, Konteynerizasyon ve Ortam Yönetimi

Günümüzde yapay zeka, makine öğrenimi ve derin öğrenme gibi alanlar hızla gelişmekte ve bu gelişim, yüksek performanslı bilgi işlem kaynaklarına olan ihtiyacı artırmaktadır. Özellikle büyük veri kümeleri üzerinde karmaşık modellerin eğitilmesi, grafik işlem birimlerinin (GPU’lar) sunduğu paralel işlem gücünü zorunlu kılmaktadır. Bulut sağlayıcıları, bu ihtiyacı karşılamak üzere GPU droplet’ler veya GPU sanal makineleri gibi hizmetler sunarak geliştiricilerin ve araştırmacıların bu güçlü donanımlara kolayca erişmesini sağlamaktadır. Ancak bu güçlü donanımı verimli, tekrar üretilebilir ve taşınabilir bir şekilde kullanmak, doğru yazılım araçlarının ve yapılandırmaların bir araya getirilmesini gerektirir. Bu noktada Nvidia Container Toolkit ve Miniconda gibi araçlar devreye girerek bu süreci önemli ölçüde kolaylaştırır.

GPU Droplet’lerin Yükselişi ve Önemi

GPU droplet’ler, genellikle NVIDIA GPU’ları ile donatılmış sanal özel sunuculardır (VPS). Bu droplet’ler, geleneksel CPU tabanlı sunuculara kıyasla on kat hatta yüz kat daha hızlı işlem yapabilme kapasitesine sahiptir. Bu hız farkı, özellikle matris çarpımı gibi yoğun matematiksel işlemlerin temelini oluşturan derin öğrenme algoritmaları için kritik öneme sahiptir.
GPU droplet’ler, aşağıdaki alanlarda yoğun olarak kullanılmaktadır:
* Derin Öğrenme Eğitimi: TensorFlow, PyTorch gibi kütüphanelerle büyük ölçekli sinir ağlarının eğitilmesi.
* Makine Öğrenimi: Karmaşık modellerin hızlandırılmış eğitimi ve çıkarımı (inference).
* Veri Bilimi: Büyük veri kümeleri üzerinde paralel veri işleme ve analiz.
* Bilimsel Simülasyonlar: Fizik, kimya, biyoloji gibi alanlarda yoğun hesaplama gerektiren simülasyonlar.
* Video İşleme ve Renderlama: Yüksek çözünürlüklü video işleme ve 3D renderlama.

Bu droplet’ler, geliştiricilere esneklik, ölçeklenebilirlik ve maliyet etkinliği sunar. İhtiyaç duyulduğunda hızlıca kurulabilir, kullanılabilir ve iş bittiğinde kapatılarak maliyetten tasarruf edilebilir.

Nvidia Container Toolkit Nedir ve Neden Önemlidir?

Docker gibi konteyner teknolojileri, uygulamaları bağımlılıklarıyla birlikte izole edilmiş, taşınabilir birimler halinde paketleyerek “bir kez inşa et, her yerde çalıştır” felsefesini benimser. Ancak standart Docker konteynerleri, ana makinedeki GPU’lara doğrudan erişemez. İşte bu noktada Nvidia Container Toolkit (eski adıyla nvidia-docker) devreye girer.
Nvidia Container Toolkit, Docker Engine’in, konteyner içindeki uygulamaların ana makinedeki NVIDIA GPU’larına ve ilgili sürücülere erişmesini sağlayan bir uzantısıdır. Temel olarak, konteyner içinden nvidia-smi gibi komutların çalışmasını ve CUDA tabanlı uygulamaların GPU’yu kullanmasını mümkün kılar.
Önemli faydaları şunlardır:
* GPU Erişimi: Konteyner içindeki uygulamaların GPU’yu kullanabilmesini sağlar.
* İzolasyon: Farklı projeler için farklı CUDA sürümleri veya kütüphane bağımlılıkları gerektiren ortamları izole eder.
* Tekrar Üretilebilirlik: Bir projenin tüm bağımlılıkları (GPU sürücüleri hariç) konteyner içinde paketlendiği için, aynı ortamın farklı makinelerde kolayca tekrar üretilmesini sağlar.
* Taşınabilirlik: Konteyner görüntüsü, aynı GPU mimarisine sahip herhangi bir sunucuda çalıştırılabilir.
* Performans: Konteynerler, sanal makinelere kıyasla daha az overhead ile neredeyse ana makine performansında çalışır.

Miniconda Nedir ve Neden Tercih Edilmelidir?

Python tabanlı geliştirme yaparken, farklı projelerin farklı Python versiyonlarına ve kütüphane bağımlılıklarına ihtiyaç duyması yaygın bir durumdur. Bu bağımlılık çakışmalarını yönetmek için sanal ortamlar kullanılır. Miniconda, bu sanal ortamları yönetmek için hafif ve esnek bir çözümdür. Anaconda’nın daha küçük bir versiyonu olup, sadece Conda paket yöneticisini ve Python’ı içerir. İhtiyaç duyulan diğer kütüphaneler (NumPy, SciPy, TensorFlow, PyTorch vb.) Conda aracılığıyla sonradan kurulur.
Miniconda’nın tercih edilme nedenleri:
* Ortam Yönetimi: Her proje için izole edilmiş sanal ortamlar oluşturarak bağımlılık çakışmalarını önler.
* Paket Yönetimi: Conda, pip’ten farklı olarak sadece Python paketlerini değil, aynı zamanda C, C++, R gibi dillerdeki kütüphaneleri ve sistem bağımlılıklarını da yönetebilir. Bu, özellikle CUDA, cuDNN gibi GPU ile ilgili kütüphanelerin doğru versiyonlarını kurarken büyük kolaylık sağlar.
* Hafiflik: Anaconda’nın aksine, Miniconda minimal bir kurulum sunar, bu da özellikle konteyner imaj boyutunu küçük tutmak için idealdir.
* Tekrar Üretilebilirlik: environment.yml dosyaları aracılığıyla ortam tanımlarını paylaşarak, aynı ortamın farklı makinelerde kolayca kurulmasını sağlar.

Neden Üçünü Birlikte Kullanmalıyız?

GPU droplet’ler, Nvidia Container Toolkit ve Miniconda’nın birleşimi, modern yapay zeka ve makine öğrenimi iş yükleri için güçlü, esnek ve tekrar üretilebilir bir geliştirme ve dağıtım platformu sunar.
* GPU Droplet: Gerekli yüksek performanslı donanımı sağlar.
* Nvidia Container Toolkit: GPU droplet’teki GPU’lara konteyner içinden erişimi mümkün kılar, böylece donanım ve yazılım arasında köprü kurar.
* Miniconda: Konteyner içindeki Python tabanlı uygulamalar için esnek ve izole edilmiş bağımlılık yönetimi sağlar.

Bu üçlünün birleşimiyle, geliştiriciler:
1. Farklı projeler için farklı CUDA/cuDNN/Python/TensorFlow/PyTorch versiyonlarını içeren izole edilmiş ortamları kolayca oluşturabilir.
2. Bu ortamları Docker konteynerleri aracılığıyla paketleyip herhangi bir GPU droplet’e taşıyabilir.
3. “Bağımlılık cehennemi” yaşamadan, aynı ortamın her yerde aynı şekilde çalışacağından emin olabilir.
4. Geliştirme, test ve üretim ortamları arasında sorunsuz geçiş yapabilir.

Bu rehberin geri kalanında, bu üç güçlü bileşeni bir araya getirerek GPU destekli bir geliştirme ortamını nasıl kuracağınızı adım adım anlatacağız.

Ön Hazırlıklar ve Sistem Gereksinimleri

Bu rehberde anlatılan adımları uygulayabilmek için bazı ön hazırlıklar ve temel sistem gereksinimleri bulunmaktadır.

GPU Droplet Seçimi ve Temel Kurulum

İlk adım, bir GPU droplet sağlamaktır. Çeşitli bulut sağlayıcıları bu hizmeti sunmaktadır:
* DigitalOcean: Genellikle “GPU Droplets” olarak adlandırılır.
* Vultr: “Cloud GPU” hizmeti sunar.
* AWS: “EC2 G instances” (örn. g4dn, g5).
* Google Cloud: “GPU instances”.
* Azure: “NV-series VMs”.

Sağlayıcı seçimi kişisel tercihlere, bütçeye ve coğrafi konuma bağlıdır. Çoğu sağlayıcı, Ubuntu işletim sistemini önceden yüklenmiş olarak sunar ki bu, bizim için idealdir. Bu rehberde Ubuntu 20.04 veya 22.04 LTS sürümünü varsayacağız.
Droplet’i oluştururken, yeterli CPU, RAM ve depolama alanı seçtiğinizden emin olun. Derin öğrenme projeleri genellikle bol miktarda RAM ve hızlı SSD depolama gerektirir.

SSH Erişimi ve Temel Linux Komutları

Droplet’iniz hazır olduğunda, ona SSH (Secure Shell) aracılığıyla bağlanmanız gerekecektir.
Genellikle şu komut kullanılır:

ssh root@

veya bir anahtar dosyası ile:

ssh -i /path/to/your/ssh_key.pem root@

Bağlandıktan sonra, sistemi güncellemek iyi bir başlangıçtır:

sudo apt update
sudo apt upgrade -y

Bu rehberde sudo komutunu sıkça kullanacağız. Eğer root kullanıcısı değilseniz, sudo grubuna dahil edilmiş bir kullanıcı ile işlem yapmanız gerekecektir.

Adım Adım Kurulum ve Yapılandırma

Şimdi GPU droplet’inizi Nvidia Container Toolkit ve Miniconda ile donatmak için gerekli adımları inceleyelim.

Adım 1: Nvidia Sürücülerini Yükleme

Nvidia GPU’larını kullanabilmek için en kritik adım, uygun sürücüleri yüklemektir.

Mevcut Sürücüleri Kontrol Etme

Bazı bulut sağlayıcıları, GPU droplet’leri önceden yüklü Nvidia sürücüleriyle birlikte sunabilir. Bunu kontrol etmek için nvidia-smi komutunu çalıştırabilirsiniz:

nvidia-smi

Eğer komut bulunamazsa veya “NVIDIA-SMI has failed” gibi bir hata alırsanız, sürücülerin yüklü olmadığını veya düzgün çalışmadığını gösterir.

Önerilen Sürücüleri Yükleme

Ubuntu’da Nvidia sürücülerini yüklemenin en kolay yolu ubuntu-drivers aracını kullanmaktır.
Önce software-properties-common paketini kurarak ek depolara erişimi sağlayın:

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update

Ardından, sisteminiz için önerilen sürücüleri listeleyin:

ubuntu-drivers devices

Bu komut, GPU modelinizi ve önerilen sürücü versiyonunu gösterecektir (örneğin, nvidia-driver-525).
Önerilen sürücüyü otomatik olarak yüklemek için:

sudo ubuntu-drivers install

Alternatif olarak, belirli bir sürücü versiyonunu yüklemek isterseniz:

sudo apt install nvidia-driver- -y

Örneğin: sudo apt install nvidia-driver-525 -y

Kurulum tamamlandıktan sonra, sistemin yeniden başlatılması genellikle gereklidir:

sudo reboot

Sürücü Kurulumunu Doğrulama

Sistem yeniden başlatıldıktan sonra tekrar SSH ile bağlanın ve nvidia-smi komutunu çalıştırın:

nvidia-smi

Eğer GPU bilgilerini (GPU modeli, sürücü versiyonu, CUDA versiyonu, bellek kullanımı vb.) gösteren bir tablo görüyorsanız, Nvidia sürücüleri başarıyla kurulmuş demektir.

Adım 2: Docker Kurulumu

Nvidia Container Toolkit’i kullanabilmek için öncelikle Docker Engine’in kurulu olması gerekir.

Docker Repositorisini Ekleme

Docker’ın resmi repositorisinden en güncel sürümü yüklemek en iyi yaklaşımdır.

# Gerekli paketleri yükleyin
sudo apt install ca-certificates curl gnupg lsb-release -y

Docker'ın GPG anahtarını ekleyin

sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Repositoriyi ayarlayın

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Paket listesini güncelleyin

sudo apt update

Docker Engine Kurulumu

Şimdi Docker Engine, Containerd ve Docker Compose’u kurabilirsiniz:

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

Kullanıcıyı Docker Grubuna Ekleme

sudo kullanmadan Docker komutlarını çalıştırabilmek için mevcut kullanıcınızı docker grubuna ekleyin. Bu, güvenlik açısından bazı riskler taşısa da, geliştirme ortamlarında yaygın bir uygulamadır.

sudo usermod -aG docker $USER

Bu değişikliğin etkili olması için oturumu kapatıp tekrar açmanız veya droplet’i yeniden başlatmanız gerekebilir:

newgrp docker # Geçici olarak grubu etkinleştirir

veya

sudo reboot

Docker Kurulumunu Doğrulama

Docker’ın doğru bir şekilde kurulup çalışıp çalışmadığını test edin:

docker run hello-world

Eğer “Hello from Docker!” mesajını görüyorsanız, Docker başarıyla kurulmuştur.

Adım 3: Nvidia Container Toolkit Kurulumu

Bu adım, Docker konteynerlerinin GPU’ya erişmesini sağlayacaktır.

Nvidia Container Toolkit Repositorisini Ekleme

Nvidia Container Toolkit’i yüklemek için Nvidia’nın resmi repositorisini eklememiz gerekir.

# GPG anahtarını ekleyin
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

Repositoriyi ekleyin

echo "deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/ubuntu/$(lsb_release -cs) stable" | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

Paket listesini güncelleyin

sudo apt update

Nvidia Container Toolkit Kurulumu

Şimdi nvidia-docker2 paketini kurun:

sudo apt install nvidia-container-toolkit -y

Docker Daemon’u Yeniden Başlatma

Nvidia Container Toolkit’in yapılandırmasının Docker tarafından algılanması için Docker daemon’u yeniden başlatmak gerekir:

sudo systemctl restart docker

Nvidia Container Toolkit Kurulumunu Doğrulama

GPU erişiminin çalıştığını test etmek için, Nvidia’nın resmi CUDA tabanlı bir Docker görüntüsünü çalıştırın ve içinde nvidia-smi komutunu çalıştırın:

docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

(CUDA versiyonunu ve Ubuntu versiyonunu kendi ihtiyaçlarınıza göre ayarlayabilirsiniz, nvidia/cuda:latest de kullanılabilir.)
Eğer bu komut, konteyner içinden GPU bilgilerini gösteren nvidia-smi çıktısını veriyorsa, Nvidia Container Toolkit başarıyla yapılandırılmıştır.

Miniconda ile GPU Destekli Docker Ortamı Oluşturma

Artık Docker ve Nvidia Container Toolkit kurulu olduğuna göre, Miniconda ile özel bir GPU destekli ortam oluşturabiliriz.

Dockerfile Oluşturma

Bir Dockerfile, Docker görüntüsünü inşa etmek için gerekli talimatları içerir. Aşağıda, Miniconda’yı kuran ve temel bir derin öğrenme ortamı oluşturan örnek bir Dockerfile bulunmaktadır.

# Dockerfile

Temel Görüntü: Nvidia CUDA ve Ubuntu tabanlı

Bu, GPU erişimi için gerekli CUDA kütüphanelerini içerir.

FROM nvidia/cuda:11.8.0-base-ubuntu22.04

Konteyner içindeki ortam değişkenlerini ayarla

ENV DEBIAN_FRONTEND=noninteractive ENV PATH="/opt/conda/bin:${PATH}"

Gerekli sistem paketlerini yükle

RUN apt update && apt install -y --no-install-recommends \ wget \ git \ bzip2 \ ca-certificates \ libgl1-mesa-glx \ libsm6 \ libxext6 \ && apt clean \ && rm -rf /var/lib/apt/lists/*

Miniconda'yı indir ve kur

Miniconda sürümünü ve Python sürümünü ihtiyacınıza göre güncelleyebilirsiniz.

ARG MINICONDA_VERSION="py310_23.1.0-1" ARG CONDA_DIR="/opt/conda" RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-${MINICONDA_VERSION}-Linux-x86_64.sh -O miniconda.sh && \ /bin/bash miniconda.sh -b -p ${CONDA_DIR} && \ rm miniconda.sh && \ ${CONDA_DIR}/bin/conda clean -tipsy && \ conda init bash

Conda ortamını oluştur ve bağımlılıkları yükle

environment.yml dosyasını kullanarak daha karmaşık ortamlar oluşturabilirsiniz.

Burada basit bir örnek gösterilmiştir.

COPY environment.yml /tmp/environment.yml RUN conda env create -f /tmp/environment.yml && \ conda clean -afy && \ rm /tmp/environment.yml

Conda ortamını etkinleştirmek için gerekli komutları ekle

Bu, konteyner her başlatıldığında 'myenv' ortamını otomatik olarak etkinleştirecektir.

SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]

Çalışma dizinini ayarla

WORKDIR /app

Konteyner başlatıldığında çalışacak varsayılan komut

Bu, ortamın etkinleştirildiğini ve kullanıma hazır olduğunu gösterir.

CMD ["conda", "run", "-n", "myenv", "bash"]

environment.yml dosyası:
Bu dosya, Conda ortamınızın bağımlılıklarını tanımlar. Dockerfile ile aynı dizinde olmalıdır.

name: myenv
channels:
  - defaults
  - conda-forge
  - nvidia # Nvidia GPU paketleri için
dependencies:
  - python=3.10
  - pip
  - numpy
  - pandas
  - scikit-learn
  - matplotlib
  - jupyter
  # GPU destekli TensorFlow veya PyTorch için özel paketler
  - tensorflow-gpu # TensorFlow için (CUDA ve cuDNN bağımlılıklarını otomatik çözer)
  # - pytorch::pytorch torchvision torchaudio cudatoolkit=11.8 -c pytorch # PyTorch için
  - pip:
    - opencv-python
    - tqdm

Önemli Notlar:
* FROM nvidia/cuda:...: CUDA sürümünü ve Ubuntu sürümünü GPU sürücülerinizle uyumlu olacak şekilde seçin. nvidia-smi çıktınızdaki CUDA sürümüne yakın bir sürüm tercih edin.
* MINICONDA_VERSION: En son Miniconda sürümünü Conda web sitesinden kontrol edin.
* environment.yml: Bu dosya, Conda ortamınızın kalbini oluşturur. Projenizin ihtiyaç duyduğu tüm Python paketlerini ve diğer bağımlılıkları buraya ekleyin. tensorflow-gpu veya pytorch gibi paketler, Conda’nın Nvidia kanalından geldiğinde CUDA ve cuDNN bağımlılıklarını otomatik olarak çözecektir.

Docker Görüntüsünü İnşa Etme

Dockerfile ve environment.yml dosyalarını aynı dizine kaydettikten sonra (örneğin my_gpu_project adında bir dizin), terminali bu dizinde açın ve aşağıdaki komutu çalıştırarak Docker görüntüsünü inşa edin:

docker build -t my_gpu_env:latest .

* -t my_gpu_env:latest: Görüntüye my_gpu_env adını ve latest etiketini verir.
* .: Dockerfile’ın mevcut dizinde olduğunu belirtir.

Bu işlem biraz zaman alabilir, çünkü Miniconda’yı indirecek, Conda ortamını oluşturacak ve tüm bağımlılıkları yükleyecektir.

Docker Kapsayıcısını Çalıştırma ve Test Etme

Görüntü başarıyla inşa edildikten sonra, GPU erişimiyle bir kapsayıcı çalıştırabilirsiniz:

docker run --gpus all -it --name my_gpu_container my_gpu_env:latest

* --gpus all: Bu, kapsayıcının ana makinedeki tüm GPU’lara erişmesini sağlar.
* -it: Etkileşimli bir terminal açar.
* --name my_gpu_container: Kapsayıcıya my_gpu_container adını verir.
* my_gpu_env:latest: Çalıştırılacak Docker görüntüsünün adı ve etiketi.

Bu komutu çalıştırdığınızda, doğrudan myenv Conda ortamının etkinleştirildiği kapsayıcı terminaline düşeceksiniz.

Kapsayıcıya Erişim ve Conda Ortamını Etkinleştirme

Eğer kapsayıcıdan çıktıysanız veya başka bir terminalden erişmek isterseniz:

docker exec -it my_gpu_container conda run -n myenv bash

GPU Erişimini Test Etme (TensorFlow/PyTorch Örneği)

Kapsayıcı içindeyken, Conda ortamınızın etkin olduğundan emin olun (terminalde (myenv) prefix’ini görmelisiniz). Şimdi bir Python betiği ile GPU erişimini test edebilirsiniz.

TensorFlow ile test:
Python yorumlayıcısını açın:

python

Aşağıdaki kodu çalıştırın:

import tensorflow as tf
print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU')))
print(tf.config.list_physical_devices('GPU'))

Eğer çıktı Num GPUs Available: 1 (veya daha fazla) ve GPU cihazınızın detaylarını gösteriyorsa, TensorFlow GPU’yu başarılı bir şekilde görüyor demektir.

PyTorch ile test (eğer environment.yml dosyanıza eklediyseniz):
Python yorumlayıcısını açın:

python

Aşağıdaki kodu çalıştırın:

import torch
print(torch.cuda.is_available())
print(torch.cuda.device_count())
print(torch.cuda.current_device())
print(torch.cuda.get_device_name(0))

Eğer çıktı True ve GPU sayısını ve adını gösteriyorsa, PyTorch GPU’yu başarılı bir şekilde görüyor demektir.

Bu testler, GPU droplet’iniz, Nvidia sürücüleriniz, Docker, Nvidia Container Toolkit ve Miniconda ortamınızın sorunsuz bir şekilde entegre olduğunu doğrular. Artık derin öğrenme modellerinizi bu ortamda güvenle geliştirebilir ve çalıştırabilirsiniz.

En İyi Uygulamalar ve İpuçları

GPU destekli Docker ve Conda ortamlarını kullanırken verimliliği ve tekrar üretilebilirliği artırmak için bazı en iyi uygulamalar mevcuttur.

Dockerfile Optimizasyonu

Dockerfile’ınızın boyutu ve inşa süresi, genel iş akışınız için önemlidir.

.dockerignore Kullanımı

Dockerfile ile aynı dizine .dockerignore adında bir dosya oluşturarak, Docker görüntüsüne dahil edilmesini istemediğiniz dosyaları ve dizinleri belirtebilirsiniz. Bu, inşa bağlamının boyutunu azaltır ve inşa süresini hızlandırır.
Örnek .dockerignore:

.git
.gitignore
__pycache__/
*.pyc
*.log
.vscode/
data/
notebooks/

Katmanlama ve Önbellekleme

Docker, her bir RUN, COPY, ADD komutunu ayrı bir katman olarak önbelleğe alır. Değişen katmanlar yeniden inşa edilirken, değişmeyenler önbellekten kullanılır.
* Değişme olasılığı en düşük olan komutları üste koyun: Sistem güncellemeleri, paket kurulumları gibi sık değişmeyen adımlar Dockerfile’ın üst kısımlarında olmalıdır.
* Sık değişen bağımlılıkları daha aşağıya taşıyın: Örneğin, environment.yml dosyanız sık değişiyorsa, onu Conda kurulumundan sonra kopyalayın ve kullanın.
Aynı RUN komutunda birden fazla işlem yapın: && kullanarak birden fazla komutu tek bir RUN katmanında birleştirmek, katman sayısını azaltır ve görüntü boyutunu optimize eder. Örnek: RUN apt update && apt install -y package1 package2 && rm -rf /var/lib/apt/lists/.

Çok Aşamalı İnşa (Multi-stage Builds)

Üretim ortamları için daha küçük ve güvenli görüntüler oluşturmak amacıyla çok aşamalı inşa kullanılabilir. İlk aşamada tüm derleme araçları ve bağımlılıklar kullanılır, ikinci aşamada ise sadece nihai uygulamanın çalışması için gerekli olanlar kopyalanır. Bu, gereksiz araçların nihai görüntüye dahil edilmesini engeller.
Örneğin, bir uygulamanın bağımlılıklarını yüklemek ve ardından sadece çalıştırılabilir dosyaları nihai bir görüntüye kopyalamak:

# Aşama 1: Bağımlılıkları kur ve derle
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 AS builder

... Miniconda ve Conda ortamı kurulumu ...

... Uygulamanızın derleme adımları ...

Aşama 2: Nihai çalışma zamanı ortamı

FROM nvidia/cuda:11.8.0-base-ubuntu22.04

... Miniconda ve Conda ortamı kurulumu (sadece çalışma zamanı için gerekli olanlar) ...

COPY --from=builder /app/dist /app/dist

... diğer çalışma zamanı ayarları ...

Veri Kalıcılığı ve Docker Volumes

Kapsayıcılar varsayılan olarak efemerdir; yani kapsayıcı silindiğinde içindeki tüm veriler kaybolur. Veri kalıcılığını sağlamak için Docker volumes kullanmalısınız.
* Bind Mounts: Ana makinedeki bir dizini kapsayıcı içindeki bir dizine bağlar. Bu, geliştirme sırasında kodunuzu ana makinede düzenlerken, değişikliklerin anında kapsayıcıda görünmesini sağlar.

docker run --gpus all -it -v /path/on/host:/path/in/container my_gpu_env:latest
    # Örnek: -v /home/user/my_project:/app

* Named Volumes: Docker tarafından yönetilen özel veri birimleridir. Veri kalıcılığı için daha sağlam ve taşınabilir bir çözümdür.

docker volume create my_data_volume
    docker run --gpus all -it -v my_data_volume:/app/data my_gpu_env:latest

Model ağırlıkları, veri kümeleri ve log dosyaları gibi önemli verileri kaybetmemek için volume’ları kullanmak şarttır.

Güvenlik Hususları

* Düşük Yetkili Kullanıcılar: Dockerfile içinde USER komutunu kullanarak root olmayan bir kullanıcı ile çalışmak güvenlik risklerini azaltır.
* Minimum Görüntü Boyutu: Gereksiz paketleri ve araçları dahil etmeyerek saldırı yüzeyini küçültün.
* Güncel Tutma: Temel görüntüleri, işletim sistemi paketlerini ve Conda/pip bağımlılıklarını düzenli olarak güncelleyin.

Performans İzleme

GPU droplet’inizde model eğitirken veya çıkarım yaparken GPU kullanımını izlemek önemlidir.
* Ana Makinede: nvidia-smi komutu ile GPU kullanımını, bellek kullanımını ve sıcaklığını izleyebilirsiniz.
* Kapsayıcı İçinde: Kapsayıcıya docker exec ile bağlanıp yine nvidia-smi çalıştırabilirsiniz.
* Prometheus/Grafana: Daha gelişmiş izleme için, ana makineye Prometheus Node Exporter ve Nvidia DCGM Exporter kurarak GPU metriklerini toplayıp Grafana ile görselleştirebilirsiniz.

Versiyon Kontrolü

Dockerfile’ınızı, environment.yml dosyanızı ve tüm proje kodunuzu Git gibi bir versiyon kontrol sistemiyle yönetin. Bu, değişiklikleri izlemenizi, farklı versiyonlar arasında geçiş yapmanızı ve işbirliği yapmanızı kolaylaştırır.

Sık Karşılaşılan Sorunlar ve Çözümleri

Bu karmaşık kurulum sürecinde bazı sorunlarla karşılaşmak olasıdır. İşte en yaygın olanlar ve çözümleri:

Nvidia Sürücü Sorunları

* nvidia-smi komutu bulunamadı veya hata verdi:
* Çözüm: Nvidia sürücülerinin doğru yüklendiğinden ve sistemin yeniden başlatıldığından emin olun. sudo ubuntu-drivers install komutunu tekrar çalıştırın ve sistemi yeniden başlatın. PATH değişkeninizin doğru ayarlandığından emin olun (genellikle otomatik yapılır).
* Sürücü yüklü ama nvidia-smi çıktısında GPU görünmüyor:
* Çözüm: Bu, genellikle donanım veya sanallaştırma katmanında bir sorun olduğunu gösterir. Bulut sağlayıcınızın GPU droplet’inin doğru yapılandırıldığından emin olun. Bazı durumlarda, daha eski veya daha yeni bir sürücü versiyonu denemek gerekebilir.

Docker Daemon Çalışmıyor

* Cannot connect to the Docker daemon hatası:
* Çözüm: Docker daemon’un çalışıp çalışmadığını kontrol edin: sudo systemctl status docker. Eğer çalışmıyorsa başlatın: sudo systemctl start docker. Ayrıca, kullanıcınızın docker grubunda olduğundan emin olun ve oturumu yeniden başlatın (sudo usermod -aG docker $USER ve newgrp docker veya reboot).

Nvidia Container Toolkit Yapılandırma Hataları

* docker run --gpus all hatası veya konteyner içinde nvidia-smi çalışmıyor:
* Çözüm:
1. Nvidia Container Toolkit’in kurulu olduğundan emin olun: sudo apt install nvidia-container-toolkit.
2. Docker daemon’u yeniden başlattığınızdan emin olun: sudo systemctl restart docker.
3. Nvidia Container Toolkit’in Docker yapılandırmasına doğru bir şekilde entegre olup olmadığını kontrol edin. /etc/docker/daemon.json dosyasında default-runtime olarak nvidia veya runtimes altında nvidia‘nın tanımlı olduğundan emin olun. Genellikle nvidia-container-toolkit kurulumu bunu otomatik yapar.
4. nvidia/cuda tabanlı bir görüntü ile test edin: docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi. Eğer bu çalışıyorsa, kendi Dockerfile’ınızda bir sorun olabilir.

Conda Ortamı Etkinleştirme Sorunları

* Kapsayıcı içinde Conda ortamı etkinleşmiyor veya paketler bulunamıyor:
* Çözüm:
1. Dockerfile’ınızdaki ENV PATH="/opt/conda/bin:${PATH}" satırının doğru olduğundan ve Miniconda’nın doğru dizine (/opt/conda) kurulduğundan emin olun.
2. conda init bash komutunun Dockerfile’da çalıştırıldığından emin olun.
3. environment.yml dosyanızın Dockerfile ile aynı dizinde olduğundan ve COPY komutunun doğru çalıştığından emin olun.
4. SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"] veya CMD ["conda", "run", "-n", "myenv", "bash"] komutlarının doğru Conda ortam adını (myenv) kullandığından emin olun.
5. Kapsayıcıya bağlandıktan sonra manuel olarak conda activate myenv komutunu çalıştırmayı deneyin.

Sonuç

GPU droplet’ler, Nvidia Container Toolkit ve Miniconda’nın birleşimi, modern yapay zeka ve makine öğrenimi geliştirme ve dağıtım süreçleri için vazgeçilmez bir üçlüdür. Bu rehberde, bu güçlü araçları bir araya getirerek, GPU destekli uygulamalarınızı izole edilmiş, tekrar üretilebilir ve taşınabilir Docker konteynerleri içinde nasıl çalıştıracağınızı adım adım öğrendiniz.

Nvidia sürücülerinin doğru kurulumundan başlayarak, Docker ve Nvidia Container Toolkit’in yapılandırılmasına, ardından Miniconda ile özelleştirilmiş bir derin öğrenme ortamı içeren bir Docker görüntüsünün oluşturulmasına kadar tüm süreci ele aldık. Ayrıca, Dockerfile optimizasyonu, veri kalıcılığı, güvenlik ve performans izleme gibi en iyi uygulamalarla birlikte sık karşılaşılan sorunlara yönelik çözümleri de inceledik.

Bu yapılandırma, geliştiricilerin “benim makinemde çalışıyor” sorununu ortadan kaldırarak, farklı ortamlarda tutarlı sonuçlar elde etmelerini sağlar. Aynı zamanda, bağımlılık yönetiminin karmaşıklığını azaltır ve projelerin ölçeklenebilirliğini artırır. Bu bilgi ve araçlarla donanmış olarak, GPU droplet’lerinizin tüm potansiyelini kullanarak en zorlu yapay zeka ve makine öğrenimi projelerinizi başarıyla hayata geçirebilirsiniz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version