Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.3K
Views
¿Cómo usar el multiprocesamiento PyTorch?

Estoy tratando de usar el método Pool de multiprocesamiento de python en pytorch para procesar una imagen. Aquí está el código:

 from multiprocessing import Process, Pool from torch.autograd import Variable import numpy as np from scipy.ndimage import zoom def get_pred(args): img = args[0] scale = args[1] scales = args[2] img_scale = zoom(img.numpy(), (1., 1., scale, scale), order=1, prefilter=False, mode='nearest') # feed input data input_img = Variable(torch.from_numpy(img_scale), volatile=True).cuda() return input_img scales = [1,2,3,4,5] scale_list = [] for scale in scales: scale_list.append([img,scale,scales]) multi_pool = Pool(processes=5) predictions = multi_pool.map(get_pred,scale_list) multi_pool.close() multi_pool.join()

Estoy recibiendo este error:

 `RuntimeError: Cannot re-initialize CUDA in forked subprocess. To use CUDA with multiprocessing, you must use the 'spawn' start method

` En esta línea:

 predictions = multi_pool.map(get_pred,scale_list)

¿Alguien puede decirme qué estoy haciendo mal?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Como se indica en la documentación de pytorch, la mejor práctica para manejar el multiprocesamiento es usar torch.multiprocessing en lugar de multiprocessing .

Tenga en cuenta que compartir tensores CUDA entre procesos solo se admite en Python 3, ya sea con spawn o forkserver como método de inicio.

Sin tocar su código, una solución para el error que recibió es reemplazar

 from multiprocessing import Process, Pool

con:

 from torch.multiprocessing import Pool, Process, set_start_method try: set_start_method('spawn') except RuntimeError: pass
over 4 years ago · Santiago Trujillo Report

0

Le sugiero que lea los documentos del módulo de multiprocesamiento, especialmente esta sección . Deberá cambiar la forma en que se crean los subprocesos llamando a set_start_method . Tomado de los documentos citados:

 import multiprocessing as mp def foo(q): q.put('hello') if __name__ == '__main__': mp.set_start_method('spawn') q = mp.Queue() p = mp.Process(target=foo, args=(q,)) p.start() print(q.get()) p.join()
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!