MadMax - guydavis/machinaris GitHub Wiki

The Madmax plotter offers two modes:

  • diskplot: Requires a fast SSD for temporary space, about 256 GiB used per plot.
  • gpuplot: GPU plotting, this requires a recent Nvidia GPU with at least 8 GB of VRAM.

Machinaris uses an enhanced Plotman plotting manager to interface with plotting backends: bladebit and madmax. NOTE: Machinaris provides a full WebUI with plotting management, monitoring and remote control.

Config

Here is a good starting point for Plotman config when using madmax. Start with a single Madmax plot allowed at one time, dial up threads and buckets to match your hardware:

# Learn more about Plotman at https://github.com/ericaltendorf/plotman
# https://github.com/ericaltendorf/plotman/wiki/Configuration#versions
version: [2]

logging:
        # DO NOT CHANGE THIS IN-CONTAINER PATH USED BY MACHINARIS!
        plots: /root/.chia/plotman/logs

user_interface:
        use_stty_size: False

commands:
        interactive:
                autostart_plotting: False
                autostart_archiving: False
  
# Where to plot and log.
directories:

        # One or more directories to use as tmp dirs for plotting.  The
        # scheduler will use all of them and distribute jobs among them.
        # It assumes that IO is independent for each one (i.e., that each
        # one is on a different physical device).
        #
        # If multiple directories share a common prefix, reports will
        # abbreviate and show just the uniquely identifying suffix.
        # REMEMBER ALL PATHS ARE IN-CONTAINER, THEY MAP TO HOST PATHS
        tmp:
                - /plotting

        # Optional: tmp2 directory.  If specified, will be passed to the  madmax plotter as the '-2' param. 
        # If gpu-plotting, this will enable 128 GB partial RAM mode onto this SSD path
        # tmp2: /plotting2

        # Optional: tmp3 directory.  If specified, will be passed to the  madmax plotter as the '-3' param. 
        # If gpu-plotting, this will enable 64 GB partial RAM mode onto this SSD path
        # tmp3: /plotting3

        # One or more directories; the scheduler will use all of them.
        # These again are presumed to be on independent physical devices,
        # so writes (plot jobs) and reads (archivals) can be scheduled
        # to minimize IO contention.
        # REMEMBER ALL PATHS ARE IN-CONTAINER, THEY MAP TO HOST PATHS
        dst:
                - /plots

# See: https://github.com/guydavis/machinaris/wiki/Plotman#archiving
#archiving:
        #target: local_rsync
        #env:
                #site_root: /
                #site_path_filter: plots

# Plotting scheduling parameters
scheduling:
        # Run a job on a particular temp dir only if the number of existing jobs
        # before tmpdir_stagger_phase_major tmpdir_stagger_phase_minor
        # is less than tmpdir_stagger_phase_limit.
        # Phase major corresponds to the plot phase, phase minor corresponds to
        # the table or table pair in sequence, phase limit corresponds to
        # the number of plots allowed before [phase major, phase minor]
        tmpdir_stagger_phase_major: 5
        tmpdir_stagger_phase_minor: 0
        # Optional: default is 1
        tmpdir_stagger_phase_limit: 1

        # Don't run more than this many jobs at a time on a single temp dir.
        # Increase for staggered plotting by chia, leave at 1 for madmax sequential plotting
        tmpdir_max_jobs: 2

        # Don't run more than this many jobs at a time in total.
        # Increase for staggered plotting by chia, leave at 1 for madmax sequential plotting
        global_max_jobs: 2 

        # Don't run any jobs (across all temp dirs) more often than this, in minutes.
        global_stagger_m: 30

        # How often the daemon wakes to consider starting a new plot job, in seconds.
        polling_time_s: 20

        # Optional: Allows overriding some characteristics of certain tmp
        # directories. This contains a map of tmp directory names to
        # attributes. If a tmp directory and attribute is not listed here,
        # it uses the default attribute setting from the main configuration.
        #
        # Currently support override parameters:
        #     - tmpdir_max_jobs
        #tmp_overrides:
                # In this example, /plotting3 is larger than the other tmp
                # dirs and it can hold more plots than the default.
                #/plotting3:
                #        tmpdir_max_jobs: 5

# Configure the plotter.  See: https://github.com/guydavis/machinaris/wiki/Plotman#plotting
plotting:
        # See Keys page, for 'Farmer public key' value
        farmer_pk: REPLACE_WITH_THE_REAL_VALUE
        # ONLY FOR OLD SOLO PLOTS, COMMENT OUT IF PORTABLE PLOTTING!!!
        pool_pk: REPLACE_WITH_THE_REAL_VALUE
        # See 'Settings | Pools' page, for 'P2 singleton address' value, UNCOMMENT IF PORTABLE PLOTTING!!!
        #pool_contract_address: REPLACE_WITH_THE_REAL_VALUE

        # If you enable 'chia', plot in *parallel* with higher tmpdir_max_jobs and global_max_jobs
        # If you enable 'madmax', plot in *sequence* with very low tmpdir_max_jobs and global_max_jobs
        type: madmax

        madmax:
                # madMAx plotter; see https://github.com/guydavis/machinaris/wiki/MadMax
                k: 32                 # Default is 32 for Chia, but can do 33 or 34. Use 29,30,31 for Chives
                mode: diskplot        # Either enable diskplot or gpuplot. 
                n_threads: 4          # Default is 4, SLOWLY crank up if you have many cores
                n_buckets: 256        # Default is 256
                n_buckets3: 256       # Default is 256
                n_rmulti2: 1          # Default is 1
                network_port: 8444    # Default is 8444, but use 9699 for Chives
                compression: 1        # Compression level (default = 1, min = 1, max = 9)

WARNING: Do not try to run madmax with as many concurrent plots (tmpdir_max_jobs and global_max_jobs) as the official chia plotter. Your computer will explode!

Advanced Usage

Here are some advanced settings for Madmax.

Disable Building

Madmax is built when the container launches, so if you want to disable plotter build for fullnodes & plotters (only in Chia, Chives, and MMX, also not happening on harvesters regardless of blockchain), then you can set env var: madmax_skip_build with value true.

N-plots

While the default behavior is for Plotman (manager) to invoke Madmax in an infinite loop, asking for a single plot each time, it is possible to have Plotman ask Madmax to make exactly N plots.

Set a n: X value under the madmax: section of Setting | Plotting page. Only use case is:

  1. You have a drive where you know want exactly X more plots made, let it run overnight, no failed attempts due to lack of space.
  2. You set n: X, then start Plotman.
  3. Plotman invokes Madmax with n of X. Madmax starts plotting.
  4. You immediately stop Plotman and remove the n: from your Settings | Plotting page, returning to default of one at a time (infinitely).
  5. With Plotman stopped, Madmax will plot those X plots then stop itself. Another run of Madmax won't be started.

The downside is that Plotman will log those X plots as if it was one long job, which messes a bit with stats. No big deal though.

Chives

It is possible to set k values of 29,30,31 for plotting Chives. Please ensure you set network_port=9699 if you do so.

Stagmax

While generally Madmax should plot one at a time, it may be possible to plot concurrently. See this Stagmax video:

Digital Spaceport