Tried njobs=1, the error trace is smaller here so posting the whole thing:
Auto-assigning NUTS sampler...
Initializing NUTS using jitter+adapt_diag...
Sequential sampling (2 chains in 1 job)
NUTS: [sd_log__, switchpoints_logodds__, beta, alpha]
13%|\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u258e | 393/3000 [00:01<00:11, 233.55it/s]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-82-b868e0738426> in <module>()
1 with model_before_700:
----> 2 trace_before_700 = pm.sample(tune = 2000, draws = 1000, njobs = 1)
3
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/sampling.py in sample(draws, step, init, n_init, start, trace, chain_idx, chains, cores, tune, nuts_kwargs, step_kwargs, progressbar, model, random_seed, live_plot, discard_tuned_samples, live_plot_kwargs, compute_convergence_checks, use_mmap, **kwargs)
460 _log.info('Sequential sampling ({} chains in 1 job)'.format(chains))
461 _print_step_hierarchy(step)
--> 462 trace = _sample_many(**sample_args)
463
464 discard = tune if discard_tuned_samples else 0
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/sampling.py in _sample_many(draws, chain, chains, start, random_seed, step, **kwargs)
508 for i in range(chains):
509 trace = _sample(draws=draws, chain=chain + i, start=start[i],
--> 510 step=step, random_seed=random_seed[i], **kwargs)
511 if trace is None:
512 if len(traces) == 0:
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/sampling.py in _sample(chain, progressbar, random_seed, start, draws, step, trace, tune, model, live_plot, live_plot_kwargs, **kwargs)
552 try:
553 strace = None
--> 554 for it, strace in enumerate(sampling):
555 if live_plot:
556 if live_plot_kwargs is None:
/home/narendra/anaconda3/lib/python3.6/site-packages/tqdm/_tqdm.py in __iter__(self)
951 """, fp_write=getattr(self.fp, 'write', sys.stderr.write))
952
--> 953 for obj in iterable:
954 yield obj
955 # Update and possibly print the progressbar.
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/sampling.py in _iter_sample(draws, step, start, trace, chain, tune, model, random_seed)
650 step = stop_tuning(step)
651 if step.generates_stats:
--> 652 point, states = step.step(point)
653 if strace.supports_sampler_stats:
654 strace.record(point, states)
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/step_methods/arraystep.py in step(self, point)
220
221 if self.generates_stats:
--> 222 apoint, stats = self.astep(array)
223 point = self._logp_dlogp_func.array_to_full_dict(apoint)
224 return point, stats
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/step_methods/hmc/base_hmc.py in astep(self, q0)
113
114 if not np.isfinite(start.energy):
--> 115 self.potential.raise_ok()
116 raise ValueError('Bad initial energy: %s. The model '
117 'might be misspecified.' % start.energy)
/home/narendra/anaconda3/lib/python3.6/site-packages/pymc3/step_methods/hmc/quadpotential.py in raise_ok(self)
188 def raise_ok(self):
189 if np.any(self._stds == 0):
--> 190 raise ValueError('Mass matrix contains zeros on the diagonal. '
191 'Some derivatives might always be zero.')
192 if np.any(self._stds < 0):
ValueError: Mass matrix contains zeros on the diagonal. Some derivatives might always be zero.
Again, a few samples were drawn before the ValueError came up. The sampling was faster in this case while it happened, but since few samples were drawn before the ValueError, those might just be the initial tuning steps.