Я использую сэмплер PyMC3 на удаленном кластере с общим числом шагов настройки 3000, 3000 драм aws и 2 цепями. Данные, которые я пытаюсь уместить, состоят из ~ 6000 точек данных, и я устанавливаю 7 переменных (я думаю) для оптимизации сэмплером. Может быть, примерно через 20 шагов в выборке моя программа падает, потому что она достигает выделения виртуальной памяти 15G . Я могу увеличить выделение, но затем моя программа намного дольше остается в очереди заданий в кластере, прежде чем запускать, что не идеально.
Я относительно незнаком с тонкостями PyMC3 и Theano, но подозреваю, что один из этих двух ответственен. Я включил код для моей модели PyMC3 (которая включает в себя отдельную астрофизическую программу exopl anet) и код, в котором я настроил выборку. У меня уже включена сборка мусора Theano automati c, но, похоже, она мало помогает. Спасибо за любую помощь, которую вы можете оказать!
Это часть моего текущего сценария, использующего PyMC3 + Theano с другой астрофизической программой exopl anet:
import numpy as np
import pymc3 as pm
import exoplanet as xo
if mask is None:
mask = np.ones(len(x), dtype=bool)
with pm.Model() as model:
mean = pm.Normal("mean", mu=0.0, sd=1.0)
BoundedNormal_t0 = pm.Bound(pm.Normal, lower=t0_true-0.5, upper=t0_true+0.5)
t0 = BoundedNormal_t0("t0", mu=t0_true, sd=1.0, shape=1)
BoundedNormal_per = pm.Bound(pm.Normal, lower=(per_true*0.9), upper=(per_true*1.1))
period = BoundedNormal_per("period", mu=per_true, sd=1.0, shape=1)
u = pm.Uniform("u", lower=0.0, upper=1.0, shape=2)
rho = pm.Uniform("rho", lower=0.0, upper=1000, shape=1)
BoundedNormal_logr = pm.Bound(pm.Normal, lower=-10.0, upper=0.0)
logr = BoundedNormal_logr("logr", mu=np.log(rp_rs_true), sd=10.0, shape=1)
r = pm.Deterministic("r", tt.exp(logr))
b = xo.distributions.ImpactParameter("b", ror=r, shape=1)
# Set up a Keplerian orbit for the planets
orbit = xo.orbits.KeplerianOrbit(period=period, t0=t0, b=b, rho_star=rho)#, r_star=rstar)#, ecc=ecc, omega=omega)
# Compute the model light curve using starry
light_curves = xo.LimbDarkLightCurve(u).get_light_curve(
orbit=orbit, r=r, t=x[mask], texp=texp)
light_curve = pm.math.sum(light_curves, axis=-1) + mean
# The likelihood function assuming known Gaussian uncertainty
pm.Normal("obs", mu=light_curve, sd=yerr[mask], observed=y[mask], dtype='float32')
map_soln = xo.optimize(start=start)
map_soln = xo.optimize(start=map_soln, vars=[logr], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[b], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[period, t0], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[u], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[logr], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[b], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[rho], verbose=False)
map_soln = xo.optimize(start=map_soln, vars=[mean], verbose=False)
map_soln = xo.optimize(start=map_soln, verbose=False)
np.random.seed(42)
with model:
tr = pm.sample(chains=2
start=map_soln,
step=xo.get_dense_nuts_step(target_accept=0.95,start=map_soln),
tune=3000,
draws=3000)