Chcę używać Celery do uruchamiania zadań na serwerze GPU z czterema kartami Tesli. Prowadzę pracownika selekcji z grupą czterech pracowników, tak aby każda karta zawsze wykonywała jedno zadanie.Otrzymuj identyfikator pracownika w Celery
Mój problem polega na tym, jak instruować pracowników, aby każdy z nich zgodził się na jedno GPU. Obecnie mogę polegać na założeniu, że procesy robocze powinny mieć ciągłych identyfikatory procesu:
device_id = os.getpid() % self.ndevices
Jednak to nie gwarantuje zawsze działa, to znaczy, gdy procesy robocze dostać ponownym uruchamianiu komputera w czasie. Idealnie chciałbym uzyskać identyfikator każdego pracownika bezpośrednio. Czy ktoś może mi powiedzieć, czy możliwe jest sprawdzenie pracownika w ramach zadania, czy może zaproponować inne rozwiązanie do dystrybucji zadań w układach GPU?
Chyba była niejasna z moim terminologii: I rzeczywiście mają jeden pracownik, który spawns cztery procesy. Czego oczekuję, to identyfikator procesu w Seler (0-3), a nie pid UNIX. Wydaje mi się, że posiadanie wielu pracowników firmy Seler z jednym procesem będzie skuteczne, ale będzie mniej wygodne. Nie ma znaczenia, gdzie mam dostęp do ID: można go sprawdzić na poziomie zadania lub być zmienną globalną dla każdego procesu. – oceanhug
Zgadzam się, nie jestem zbyt zadowolony z mojego rozwiązania, albo ... To jest OK, jeśli masz wdrożenie produkcyjne z niektórymi pracownikami zarządzanymi przez supervisora, ale wymaga to dedykowanej konfiguracji i nie zużyje dostępnych zasobów automatycznie w oparciu o pojedyncze rozwiązanie. --concurrency = xxx' argument. Tam * znajduje się * "current_app.pool", ale nie mogę powiedzieć, co z nim zrobić ... –
Edycja: znalazłem zupełnie nową odpowiedź \ o/ –