Dört Tesla kartlı bir GPU sunucusunda işleri çalıştırmak için Kereceyi kullanmak istiyorum. Kereste çalışanını dört işçiden oluşan bir havuzla işletiyorum, böylece her kart her zaman bir iş çalıştırır.Celery'da işçi kimliğini alın
Sorunum, işçilere her bir hak talebine bir GPU nasıl yönlendirileceğidir.
device_id = os.getpid() % self.ndevices
Ancak, bu, her zaman çalışacağı garanti edilmez işçi süreçleri zamanla yeniden olsun yani: Şu anda çalışan işlemler tüm bitişik süreç kimlikleri edeceği varsayımına dayanır. İdeal olarak, her çalışanın kimliğini doğrudan almak istiyorum. Birisi işçiden bir görevin denetlenmesinin mümkün olup olmadığını veya işlerin GPU'larda dağıtılması için farklı bir çözüm önerisinde bulunabileceğini söyleyebilir mi?
from billiard import current_process
from celery import task
@task
def print_info():
# This will print an int in [0..concurrency[
print current_process().index
index
0-tabanlı olduğunu ve bir işçinin olursa: Eğer CELERYD_POOL = 'processes'
kullanıyorsanız
benim terminolojisine belirsiz olduğunu düşünüyorum. Benim aradığım şey, UNIX pidinden ziyade Kereviz (0-3) içindeki süreç kimliğidir. Birden fazla Kereviz işçisine sahip olduğumu sanıyorum, her biri işe yarayacak, ancak daha az kullanışlı olacaktı. Kimliğe nerede sahip olduğum önemli değil: Görev seviyesinde denetlenebilir veya her süreç için global bir değişken olabilir. – oceanhug
Anlaşılan, çözümümden çok memnun değilim ... Denetim otoritesi ile yönetilen bazı işçilerle bir üretim dağıtımınız varsa, ancak özel bir konfigürasyon gerektiriyorsa ve otomatik olarak tek bir tekil veriye dayalı kullanılabilir kaynakları kullanmazsanız sorun yoktur. --concurrency = xxx' argümanı. Orada * bir 'current_app.pool', ama ben onunla ne yapacağımı ayarlayamıyorum ... –
Edit: yepyeni bir cevap buldu \ o/ –