damn - we don’t yet have the correct invocation needed to run MPI - cf discussion in this issue:
the implementation should be really pretty simple - PR’s welcome!
if you’re running reduce_sum
without MPI, there’s some documentation here:
https://cmdstanpy.readthedocs.io/en/latest/sample.html#example-high-level-parallelization-with-reduce-sum
it can be the entire process including model compilation - or you can compile the model and pass in the exe file location - here’s an example script to run a single chain per node on a cluster:
# Use CmdStanPy to run one chain
# Required args:
# - cmdstanpath
# - model_exe
# - seed
# - chain_id
# - output_dir
# - data_file
import os
import sys
from cmdstanpy import CmdStanModel, set_cmdstan_path, cmdstan_path
useage = """\
run_chain.py <cmdstan_path> <model_exe> <seed> <chain_id> <output_dir> (<data_path>)\
"""
def main():
if (len(sys.argv) < 5):
print("missing arguments")
print(useage)
sys.exit(1)
a_cmdstan_path = sys.argv[1]
a_model_exe = sys.argv[2]
a_seed = int(sys.argv[3])
a_chain_id = int(sys.argv[4])
a_output_dir = sys.argv[5]
a_data_file = None
if (len(sys.argv) > 5):
a_data_file = sys.argv[6]
set_cmdstan_path(a_cmdstan_path)
mod = CmdStanModel(exe_file=a_model_exe)
fit = mod.sample(chains=1, chain_ids=[a_chain_id], seed=a_seed, output_dir=a_output_dir, data=a_data_file)
print(fit)
if __name__ == "__main__":
main()