Ubuntu sunucularda özellikle yapay zekâ, CUDA, vLLM, Ollama veya Docker tabanlı uygulamalar çalıştırıldığında ekran kartı belleğinin hangi süreç tarafından kullanıldığını tespit etmek gerekebilir.
NVIDIA ekran kartlarında bu işlem için en temel araç nvidia-smi komutudur.
GPU kullanımını görüntüleme
Sistemdeki tüm NVIDIA ekran kartlarını ve bu kartları kullanan süreçleri görmek için şu komut çalıştırılır:
nvidia-smiBelirli bir ekran kartını incelemek için GPU numarası belirtilir:
nvidia-smi -i 1Buradaki 1, ikinci ekran kartını ifade eder.
Komut çıktısının alt kısmında Processes isimli bir tablo bulunur:
| GPU PID Type Process name GPU Memory |
| 1 17449 C VLLM::EngineCore 2110MiB |
| 1 1441625 C VLLM::EngineCore 90272MiB |Bu tabloda:
PID, işlemin sistemdeki süreç numarasıdır.Type, işlemin grafik veya hesaplama süreci olduğunu gösterir.Process name, uygulamanın veya sürecin adıdır.GPU Memory, sürecin kullandığı ekran kartı belleğidir.
C tipi süreçler CUDA veya hesaplama uygulamalarını, G tipi süreçler ise grafik arayüzü kullanan uygulamaları ifade eder.
GPU kullanımını anlık izleme
GPU süreçlerini sürekli izlemek için şu komut kullanılabilir:
watch -n 1 nvidia-smi -i 1Bu komut ekranı saniyede bir yeniler.
Daha ayrıntılı süreç takibi için:
nvidia-smi pmon -i 1 -s umÖrnek çıktı:
# gpu pid type sm mem fb command
1 17449 C - - 2110 VLLM::EngineCor
1 1441625 C - - 90272 VLLM::EngineCorBurada:
sm, GPU hesaplama birimlerinin kullanım oranını,mem, aktif bellek erişim oranını,fb, ayrılan ekran kartı belleğini,command, sürecin adını gösterir.
sm ve mem sütunlarında - görünmesi, işlemin ekran kartı belleğini ayırdığı fakat o anda aktif hesaplama yapmadığı anlamına gelebilir.
Örneğin bir yapay zekâ modeli VRAM üzerinde yüklü olarak beklerken GPU kullanımı yüzde sıfır olabilir.
PID üzerinden uygulamanın komutunu bulma
nvidia-smi çıktısından elde edilen PID ile sürecin ayrıntıları görüntülenebilir:
ps -fp 1441625Komut satırı kesiliyorsa tam komut şu şekilde okunabilir:
tr '\0' ' ' < /proc/1441625/cmdline
echoBirden fazla PID için:
for pid in 17449 1441625; do
echo "===== PID $pid ====="
tr '\0' ' ' < /proc/$pid/cmdline
echo
doneBu çıktı uygulamanın hangi model, port veya parametrelerle başlatıldığını gösterebilir.
Sürecin Docker container’ına ait olup olmadığını bulma
GPU kullanan uygulama Docker içinde çalışıyorsa yalnızca süreç adını görmek yeterli olmayabilir. Sürecin hangi container’a ait olduğunu tespit etmek için Linux cgroup bilgisi kullanılabilir.
Örneğin:
cat /proc/1441625/cgroupÇıktı şu şekilde olabilir:
0::/system.slice/docker-ad8eeb767630772d710db98fd43f5171d077320b77a9c7d28129db1209a90631.scopeBuradaki uzun hexadecimal ifade Docker container kimliğidir:
ad8eeb767630772d710db98fd43f5171d077320b77a9c7d28129db1209a90631Container adını ve kullanılan imajı görmek için:
docker inspect -f 'Ad={{.Name}} Image={{.Config.Image}} Durum={{.State.Status}}' \
ad8eeb767630772d710db98fd43f5171d077320b77a9c7d28129db1209a90631Daha kısa bir yöntem olarak container kimliğinin ilk 12 karakteri kullanılabilir:
docker ps --no-trunc | grep ad8eeb767630Birden fazla GPU sürecini container’larla eşleştirme
Birden fazla PID için şu komut kullanılabilir:
for pid in 17449 1441625; do
echo "===== PID $pid ====="
cat /proc/$pid/cgroup
echo
doneÖrnek çıktı:
===== PID 17449 =====
0::/system.slice/docker-f9ef466725c1030c37d3cc4032d1cce31f37366c252d51e241b948b4157a08a5.scope
===== PID 1441625 =====
0::/system.slice/docker-ad8eeb767630772d710db98fd43f5171d077320b77a9c7d28129db1209a90631.scopeBu durumda iki farklı GPU süreci iki farklı Docker container’ına aittir.
Container bilgilerini birlikte görüntülemek için:
docker inspect -f 'Ad={{.Name}} Image={{.Config.Image}} Durum={{.State.Status}}' \
f9ef466725c1030c37d3cc4032d1cce31f37366c252d51e241b948b4157a08a5 \
ad8eeb767630772d710db98fd43f5171d077320b77a9c7d28129db1209a90631Container’ın başlatma komutunu görüntüleme
Container’ın hangi komutla çalıştırıldığını öğrenmek için:
docker inspect -f 'Ad={{.Name}}
Image={{.Config.Image}}
Entrypoint={{json .Config.Entrypoint}}
Komut={{json .Config.Cmd}}' CONTAINER_IDBu yöntem özellikle aynı imajdan birden fazla vLLM, Ollama veya CUDA servisi çalıştırıldığında oldukça faydalıdır.
Kullanışlı toplu kontrol komutu
GPU kullanan süreçlerin PID, komut satırı ve Docker cgroup bilgilerini tek seferde görmek için şu betik kullanılabilir:
for pid in $(nvidia-smi --query-compute-apps=pid --format=csv,noheader,nounits); do
echo "========================================"
echo "PID: $pid"
echo
echo "Süreç:"
ps -p "$pid" -o pid,user,cmd --no-headers
echo
echo "Tam komut:"
tr '\0' ' ' < /proc/$pid/cmdline
echo
echo
echo "Cgroup:"
cat /proc/$pid/cgroup
echo
doneYalnızca belirli bir GPU için:
for pid in $(nvidia-smi -i 1 --query-compute-apps=pid --format=csv,noheader,nounits); do
echo "========================================"
echo "PID: $pid"
ps -p "$pid" -o pid,user,cmd --no-headers
cat /proc/$pid/cgroup
doneSonuç
Ubuntu’da ekran kartını hangi uygulamanın kullandığını bulmak için izlenecek temel sıra şöyledir:
nvidia-smiile GPU kullanan PID’ler bulunur.psveya/proc/PID/cmdlineile süreç komutu incelenir./proc/PID/cgroupile sürecin Docker container’ına ait olup olmadığı belirlenir.docker inspectile container adı, imajı ve başlatma komutu görüntülenir.
Bu yöntemle yalnızca GPU’yu hangi uygulamanın kullandığı değil, uygulamanın hangi Docker container’ında çalıştığı, hangi imajdan başlatıldığı ve ne kadar VRAM kullandığı da kolayca tespit edilebilir.