Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.3K
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda