CRIU ile CUDA Uygulamalarının Kontrol Noktası Belirlenmesi


CUDA için kontrol noktası ve geri yükleme işlevi, CUDA adlı bir komut satırı yardımcı programı aracılığıyla ortaya çıkarılmıştır. cuda-kontrol noktası. Bu yardımcı program, çalışan bir Linux işleminde CUDA durumunu şeffaf bir şekilde kontrol etmek ve geri yüklemek için kullanılabilir. Bunu şununla birleştirin: CRIU (Kullanıcı Alanında Kontrol Noktası/Geri Yükleme), CUDA uygulamalarını tam olarak kontrol noktasılamak için açık kaynaklı bir kontrol noktası oluşturma yardımcı programıdır.

Kontrol noktası genel bakışı

Şeffaf, işlem başına kontrol noktası, sanal makine kontrol noktası ve uygulama odaklı kontrol noktası arasında bir orta yol sunar. İşlem başına kontrol noktası, karmaşık bir uygulamanın durumunu kontrol noktası yapmak için kapsayıcılarla birlikte kullanılabilir ve aşağıdaki gibi kullanım durumlarını kolaylaştırır:

  • Periyodik kontrol noktalarıyla hata toleransı
  • Önceden kesilen görevin kontrol noktası olarak belirlenmesiyle tek bir düğümdeki daha düşük öncelikli işin önceden kesilmesi
  • Göç ile küme planlaması
Şekil 1. Kontrol noktası türleri

CRIU

CRIU (Kullanıcı Alanında Kontrol Noktası/Geri Yükleme) NVIDIA dışında sürdürülen, Linux için açık kaynaklı bir kontrol noktası oluşturma yardımcı programıdır ve işlem ağaçlarını kontrol edebilir ve geri yükleyebilir.

CRIU, işlevselliğini komut satırı programı aracılığıyla ortaya koyuyor criu ve bir işlemle ilişkili her çekirdek modu kaynağını kontrol noktası haline getirerek ve geri yükleyerek çalışır. Bu kaynaklar şunları içerir:

  • Anonim hafıza
  • İş Parçacığı
  • Düzenli dosyalar
  • Soketler
  • Kontrol noktası oluşturulmuş süreçler arasındaki borular

Bu kaynakların davranışı Linux tarafından belirlendiği ve altta yatan donanımdan bağımsız olduğu için, CRIU bunları nasıl kontrol edeceğini ve geri yükleyeceğini bilir.

Buna karşılık NVIDIA GPU'ları standart bir Linux çekirdeğinin ötesinde işlevsellik sağlıyor, dolayısıyla CRIU bunları yönetemiyor. cuda-checkpoint bu yeteneği ekler ve bir CUDA uygulamasını kontrol noktası haline getirmek ve geri yüklemek için CRIU ile birlikte kullanılabilir.

cuda-kontrol noktası

cuda-checkpoint kontrol noktaları oluşturur ve tek bir Linux işleminin CUDA durumunu geri yükler. 550 ve üzeri ekran sürücüsü sürümünü destekler ve şu adresten indirilebilir: /bin dizini.

localhost$ cuda-checkpoint --help

CUDA checkpoint and restore utility.
Toggles the state of CUDA within a process between suspended and running.
Version 550.54.09. Copyright (C) 2024 NVIDIA Corporation. All rights reserved.

    --toggle --pid 

The cuda-checkpoint ikili, PID tarafından belirtilen bir işlemin CUDA durumunu askıya alınmış ve çalışıyor arasında değiştirebilir. Çalışıyor-askıya alınmış geçişine bir geçiş denir askıya almak ve zıt geçişe bir geçiş denir sürdürmek.

Bir işlemin CUDA durumu başlangıçta çalışıyor. cuda-checkpoint Bir işlemde CUDA'yı askıya almak için kullanılır, şu adımları izler:

Çalışmayı başlatan, kaynakları yöneten veya başka şekillerde GPU durumunu etkileyen tüm CUDA sürücü API'leri kilitlenir.
Akış geri aramaları da dahil olmak üzere halihazırda gönderilen CUDA çalışması tamamlandı.
Aygıt belleği, CUDA sürücüsü tarafından yönetilen tahsislere göre ana bilgisayara kopyalanır.
Tüm CUDA GPU kaynakları serbest bırakıldı.
Tablo 1. cuda-checkpoint CUDA'yı askıya almak için kullanılır

cuda-checkpoint CPU iş parçacıklarını askıya almaz; bu, CUDA ile aşağıdaki yollardan biriyle güvenli bir şekilde etkileşime girmeye devam edebilir: CUDA devam ettirilene kadar engellenebilecek çalışma zamanı veya sürücü API'lerini çağırma veya CUDA tarafından tahsis edilen ana bilgisayar belleğine erişme cudaMallocHost ve geçerliliğini koruyan benzer API'ler.

Askıya alınmış bir CUDA işlemi artık işletim sistemi düzeyinde herhangi bir GPU donanımına doğrudan atıfta bulunmaz ve bu nedenle CRIU gibi bir CPU kontrol noktası yardımcı programı tarafından kontrol noktası oluşturulabilir.

Bir işlemin CUDA durumu kullanılarak sürdürüldüğünde cuda-checkpointşu adımları takip eder:

İşlem sonucunda GPU'lar tekrar elde edilir.
Aygıt belleği GPU'ya geri kopyalanır ve GPU bellek eşlemeleri orijinal adreslerine geri yüklenir.
Akışlar ve bağlamlar gibi CUDA nesneleri geri yüklenir.
CUDA sürücü API'leri kilidi açıldı.
Tablo 2. CUDA durumu kullanılarak devam ettirilir cuda-checkpoint

Bu noktada CUDA unblock çağrısını yapar ve CUDA GPU üzerinde tekrar çalışmaya başlayabilir.

Kontrol noktası örneği

Bu örnek şunu kullanır: cuda-checkpoint ve CRIU, CUDA uygulaması olarak adlandırılan bir kontrol noktasını kontrol etmek için counterHer seferinde counter bir paket alır, GPU belleğini artırır ve güncellenmiş değerle yanıt verir. örnek kod GitHub deposunda da mevcuttur.

#include 

Şunu inşa edebilirsiniz: counter uygulama kullanarak nvcc.

localhost$ nvcc counter.cu -o counter

Kaydet counter Sonraki komutlarda referans olması açısından PID:

Göndermek counter bir paket ve döndürülen değeri gözlemleyin. Başlangıç ​​değeri 100'dü ancak yanıt 101'dir, bu da GPU belleğinin başlatmadan bu yana değiştiğini gösterir.

localhost# echo hello | nc -u localhost 10000 -W 1
101

Kullanmak nvidia-smi bunu doğrulamak için counter GPU üzerinde çalışıyor:

localhost# nvidia-smi --query --display=PIDS | grep $PID
Process ID : 298027

Kullanmak cuda-checkpoint askıya almak counter CUDA durumu:

localhost# cuda-checkpoint --toggle --pid $PID

Kullanmak nvidia-smi bunu doğrulamak için counter artık bir GPU'da çalışmıyor:

localhost# nvidia-smi --query --display=PIDS | grep $PID

Kontrol noktası görüntüsünü tutacak bir dizin oluşturun:

Kullanmak criu kontrol noktasına counter:

localhost# criu dump --shell-job --images-dir demo --tree $PID
[1]+ Killed ./counter

Bunu onaylayın counter artık çalışmıyor:

localhost# ps --pid $PID
PID TTY TIME CMD

Kullanmak criu yenilemek counter:

localhost# criu restore --shell-job --restore-detached --images-dir demo

Kullanmak cuda-checkpoint devam etmek için counter CUDA durumu:

localhost# cuda-checkpoint --toggle --pid $PID

Şimdi counter tamamen geri yüklendi, başka bir paket gönder. Cevap 102'dir, bu da önceki GPU işlemlerinin doğru şekilde kalıcı hale getirildiğini gösterir.

localhost# echo hello | nc -u localhost 10000 -W 1
102

İşlevsellik

Ekran sürücüsü sürüm 550 itibariyle, denetim noktası ve geri yükleme işlevselliği hala etkin bir şekilde geliştirilmektedir. Özellikle, cuda-checkpoint aşağıdaki özelliklere sahiptir:

  • yalnızca x64.
  • Bir işlem ağacı üzerinde değil, tek bir işlem üzerinde işlem yapar.
  • UVM veya IPC belleği desteklemiyor.
  • GPU geçişini desteklemiyor.
  • Bir kontrol noktasını tamamlamadan önce önceden gönderilmiş CUDA çalışmasının bitmesini bekler.
  • Kontrol noktası veya geri yükleme sırasında bir hata (UVM tahsisinin varlığı gibi) ile karşılaşıldığında işlemi iyi durumda tutmaya çalışmaz.

Bu sınırlamalar sonraki ekran sürücüsü sürümlerinde ele alınacak ve cuda-checkpoint yardımcı programının kendisinin güncellenmesi gerekmeyecektir. cuda-checkpoint yardımcı program, sürücüde bulunan işlevselliği ortaya çıkarır.

Özet

The cuda-checkpoint yardımcı program, CRIU ile birleştirildiğinde, Linux uygulamalarının şeffaf işlem başına kontrol noktasını etkinleştirir. Daha fazla bilgi için bkz. /NVIDIA/cuda-kontrol noktası GitHub deposu.

Kontrol noktasını deneyin counter uygulamasını veya herhangi bir uyumlu CUDA uygulamasını kendi makinenizde çalıştırın!

Kaynak: Nvidia

Comments (0)
Yorum yap