Understanding `CmdStanModel` Behavior with `os.fork`
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- python
- Área
- operating-systems, performance
Línea de trabajo
Comienza con la interacción entre CmdStanModel.sample, cpp_options={"STAN_THREADS": True} y la ruta de os.fork mostrada en el informe. Reproduce los dos casos con un ejemplo mínimo funcional y después compara la planificación de las cadenas tras el fork; se considera terminado cuando la discrepancia esté explicada y cualquier cambio necesario en el comportamiento o la documentación esté cubierto por una prueba de regresión.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I've run into a somewhat odd (and likely edge-case) situation where CmdStanModel.sample behaves unexpectedly after a call to os.fork. I'm providing pseudocode now in the hopes that there is a fairly simple explanation, but happy to make a minimum working example if need be.
Say I run something structured like the following:
import os
from cmdstanpy import CmdStanModel
def run_job():
# Compile the model
mod = CmdStanModel(stanfile, cpp_options={"STAN_THREADS": True})
# Run sampling on a detached child process
pid = os.fork()
if pid == 0:
os.setsid()
mod.sample(data = data, chains=4)
os._exit()
else:
return pid
Even though my CPU has 32 cores, this will only run two chains at once--specifically, Chains 1 and 3 run, then Chains 2 and 4 run. If, however, I remove the cpp_options={"STAN_THREADS": True} kwarg, then everything behaves as expected: all chains sample in parallel.
Is there any immediate explanation for this discrepancy in behavior?
- Lenguaje dominante
- Python
- Estrellas
- 198
- Forks
- 82
- Merge medio
- 4 d 11 h
- PR fusionados (30 d)
- 3
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de stan-dev/cmdstanpy
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
laplace_sample: expose CmdStan's diagnostic_file (the Hessian at the mode)Posiblemente ocupada @atarutin la tomó hace 1 día. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
-
Release 2.0Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 30/100
-
feature
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Todos los issues de stan-dev/cmdstanpy
Issues similares
-
enhancement good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
hatchet-dev/hatchet#5179 ·
Los mantenedores suelen responder en 1 día
-
Update Python support to 3.15Abiertopython-version
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
bug javascript P2-medium python release:v3.1
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
adrirubio/claude-deck#546 ·
Los mantenedores suelen responder en 1 día