PyTensor Problem with PyMC-BART in Google Colab? (original) (raw)

Short Description

Hi all,

I’m trying to run the first BART model example from Bayesian Analysis with Python in Google Colab.

I’m getting some errors that I think are related to pytensor? I’m an absolute novice, so I have no idea. Also, apologies for all the text below; I just don’t know what’s relevant and what’s not.

When I run the following:

with pm.Model() as model_pen:
    σ = pm.HalfNormal("σ", 1)
    μ = pmb.BART("μ", X, Y, m=50)
    y = pm.Normal("y", mu=μ, sigma=σ, observed=Y)
    idata_pen = pm.sample()

I get a long series of errors. One in particular sorta repeats for while. See below.

----
/usr/local/lib/python3.10/site-packages/pytensor/tensor/random/op.py:84: FutureWarning: ndim_supp is deprecated. Provide signature instead.
  warnings.warn(
/usr/local/lib/python3.10/site-packages/pytensor/tensor/random/op.py:94: FutureWarning: ndims_params is deprecated. Provide signature instead.
  warnings.warn(
ERROR (pytensor.graph.rewriting.basic): Rewrite failure due to: constant_folding
ERROR (pytensor.graph.rewriting.basic): node: Cast{float32}(1)
ERROR (pytensor.graph.rewriting.basic): TRACEBACK:
ERROR (pytensor.graph.rewriting.basic): Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/pytensor/graph/rewriting/basic.py", line 1909, in process_node
    replacements = node_rewriter.transform(fgraph, node)
  File "/usr/local/lib/python3.10/site-packages/pytensor/graph/rewriting/basic.py", line 1081, in transform
    return self.fn(fgraph, node)
  File "/usr/local/lib/python3.10/site-packages/pytensor/tensor/rewriting/basic.py", line 1121, in constant_folding
    thunk = node.op.make_thunk(node, storage_map, compute_map, no_recycling=[])
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/op.py", line 119, in make_thunk
    return self.make_c_thunk(node, storage_map, compute_map, no_recycling)
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/op.py", line 84, in make_c_thunk
    outputs = cl.make_thunk(
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/basic.py", line 1182, in make_thunk
    cthunk, module, in_storage, out_storage, error_storage = self.__compile__(
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/basic.py", line 1103, in __compile__
    thunk, module = self.cthunk_factory(
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/basic.py", line 1627, in cthunk_factory
    module = cache.module_from_key(key=key, lnk=self)
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/cmodule.py", line 1255, in module_from_key
    module = lnk.compile_cmodule(location)
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/basic.py", line 1528, in compile_cmodule
    module = c_compiler.compile_str(
  File "/usr/local/lib/python3.10/site-packages/pytensor/link/c/cmodule.py", line 2654, in compile_str
    raise CompileError(
pytensor.link.c.exceptions.CompileError: Compilation failed (return status=1):
/usr/local/bin/g++ -shared -g -O3 -fno-math-errno -Wno-unused-label -Wno-unused-variable -Wno-write-strings -Wno-c++11-narrowing -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -fPIC -I/usr/local/lib/python3.10/dist-packages/numpy/core/include -I/usr/include/python3.10 -I/usr/local/lib/python3.10/site-packages/pytensor/link/c/c_code -L/usr/lib/x86_64-linux-gnu -L/usr/lib -fvisibility=hidden -o /root/.pytensor/compiledir_Linux-6.1.85+-x86_64-with-glibc2.35-x86_64-3.10.12-64/tmpa484ve2i/mbb1a558a69b3834cbd8bb5160f53dcb1edcf00af31190d19c71508ba0bcc380a.so /root/.pytensor/compiledir_Linux-6.1.85+-x86_64-with-glibc2.35-x86_64-3.10.12-64/tmpa484ve2i/mod.cpp -lpython3.10
In file included from /usr/include/python3.10/Python.h:8,
                 from /root/.pytensor/compiledir_Linux-6.1.85+-x86_64-with-glibc2.35-x86_64-3.10.12-64/tmpa484ve2i/mod.cpp:1:
/usr/include/python3.10/pyconfig.h:3:12: fatal error: x86_64-linux-gnu/python3.10/pyconfig.h: No such file or directory
    3 | #  include <x86_64-linux-gnu/python3.10/pyconfig.h>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

----

#### There's lots of other stuff, but here' the final error message:

----
ImportError: Version check of the existing lazylinker compiled file. Looking for version 0.212, but found None. Extra debug information: force_compile=False, _need_reload=True

During handling of the above exception, another exception occurred:

CompileError                              Traceback (most recent call last)
[/usr/local/lib/python3.10/site-packages/pytensor/link/c/cmodule.py](https://localhost:8080/#) in compile_str(module_name, src_code, location, include_dirs, lib_dirs, libs, preargs, py_module, hide_symbols)
   2652             # difficult to read.
   2653             # compile_stderr = compile_stderr.replace("\n", ". ")
-> 2654             raise CompileError(
   2655                 f"Compilation failed (return status={status}):\n{' '.join(cmd)}\n{compile_stderr}"
   2656             )

CompileError: Compilation failed (return status=1):
/usr/local/bin/g++ -shared -g -Wno-c++11-narrowing -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -DNPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION -m64 -fPIC -I/usr/local/lib/python3.10/dist-packages/numpy/core/include -I/usr/include/python3.10 -I/usr/local/lib/python3.10/site-packages/pytensor/link/c/c_code -L/usr/lib/x86_64-linux-gnu -L/usr/lib -fvisibility=hidden -o /root/.pytensor/compiledir_Linux-6.1.85+-x86_64-with-glibc2.35-x86_64-3.10.12-64/lazylinker_ext/lazylinker_ext.so /root/.pytensor/compiledir_Linux-6.1.85+-x86_64-with-glibc2.35-x86_64-3.10.12-64/lazylinker_ext/mod.cpp -lpython3.10
In file included from /usr/include/python3.10/Python.h:8,
                 from /usr/local/lib/python3.10/site-packages/pytensor/link/c/c_code/pytensor_mod_helper.h:4,
                 from /root/.pytensor/compiledir_Linux-6.1.85+-x86_64-with-glibc2.35-x86_64-3.10.12-64/lazylinker_ext/mod.cpp:1:
/usr/include/python3.10/pyconfig.h:3:12: fatal error: x86_64-linux-gnu/python3.10/pyconfig.h: No such file or directory
    3 | #  include <x86_64-linux-gnu/python3.10/pyconfig.h>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

----

Sorry for including so much text, but these errors are all way above my understanding, and I don’t know what’s relevant. Maybe the problem is colab? As in, I might not have the appropriate version of some library?

Anyway, all of my code is below.

My code

#downloads conda
!pip install -q condacolab
import condacolab
condacolab.install()

#makes sure I have pymc v5
!conda install -c conda-forge "pymc>=5"

#install pymc_bart
!conda install -c conda-forge pymc-bart

import arviz as az
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import pymc as pm
import pymc_bart as pmb

#data
penguins = pd.read_csv("https://raw.githubusercontent.com/thedarredondo/data-science-fundamentals/main/Data/penguins.csv").dropna()
Y = penguins["body_mass"]
pen = penguins
pen['sex'] = pen['sex'].replace(['male', 'female'],[0, 1])
pen['species'] = pen['species'].replace(['Adelie', 'Chinstrap', 'Gentoo'],[0, 1, 2])
X = pen[["flipper_length", "bill_depth", "bill_length"]]

#the textbook example
with pm.Model() as model_pen:
    σ = pm.HalfNormal("σ", 1)
    μ = pmb.BART("μ", X, Y, m=50)
    y = pm.Normal("y", mu=μ, sigma=σ, observed=Y)
    idata_pen = pm.sample()