🔳 l2hmc-qcd Example: 4D SU(3)
Training and evaluating the L2HMC sampler on 4D SU(3) lattice gauge theory: HMC baseline, 100 training steps, and a plaquette comparison against HMC.
A minimal end-to-end run of l2hmc-qcd
on four-dimensional lattice gauge theory. The model is a 27.9M-parameter
sampler on a lattice with 8 chains, trained for 100 steps at .
The arc is: run plain HMC as a baseline, train the learned sampler, evaluate it, then compare plaquette values between the two. The last figure is the payoff, the difference between evaluation and HMC.
Note
Console output below is shown as it was logged. The cell outputs come from a later re-run of the same notebook than the publication date suggests.
In [1]:
# %matplotlib inline
import matplotlib_inline
matplotlib_inline.backend_inline.set_matplotlib_formats('svg')
import os
os.environ['COLORTERM'] = 'truecolor'
import lovely_tensors as lt
lt.monkey_patch()
lt.set_config(color=False)
# automatically detect and reload local changes to modules
%load_ext autoreload
%autoreload 2
import ezpz
import numpy as np
import matplotlib.pyplot as plt
from l2hmc.utils.plot_helpers import FigAxes
import ambivalent
plt.style.use(ambivalent.STYLES['ambivalent'])
#set_plot_style()Out[1]:
Using device: cpuIn [2]:
import ezpz
from pathlib import Path
from typing import Optional
from rich import print
import lovely_tensors as lt
import matplotlib.pyplot as plt
import numpy as np
import torch
import yaml
# from l2hmc.utils.dist import setup_torch
seed = np.random.randint(2 ** 32)
print(f"seed: {seed}")
_ = ezpz.setup_torch(seed=seed)
torch.set_default_dtype(torch.float64)
# _ = setup_torch(precision='float64', backend='DDP', seed=seed, port='1234')
logger = ezpz.get_logger()
import l2hmc.group.su3.pytorch.group as g
# from l2hmc.utils.rich import get_console
from l2hmc.common import grab_tensor, print_dict
from l2hmc.configs import dict_to_list_of_overrides, get_experiment
from l2hmc.experiment.pytorch.experiment import Experiment, evaluate # noqaOut[2]:
seed: 979520535Out[2]:
Manually specifying seed=979520535
Using [1 / 1] available "mps" devices !!
[2025-12-31 11:21:26,289] [INFO] [real_accelerator.py:239:get_accelerator] Setting ds_accelerator to mps (auto detect)
[rank0]:W1231 11:21:26.555000 12897 torch/distributed/elastic/multiprocessing/redirects.py:29] NOTE: Redirects are currently not supported in Windows or MacOs.
In [3]:
from l2hmc.utils.plot_helpers import ( # noqa
plot_scalar,
plot_chains,
plot_leapfrogs
)
def savefig(fig: plt.Figure, fname: str, outdir: os.PathLike):
pngfile = Path(outdir).joinpath(f"pngs/{fname}.png")
svgfile = Path(outdir).joinpath(f"svgs/{fname}.svg")
pngfile.parent.mkdir(exist_ok=True, parents=True)
svgfile.parent.mkdir(exist_ok=True, parents=True)
fig.savefig(svgfile, transparent=True, bbox_inches='tight')
fig.savefig(pngfile, transparent=True, bbox_inches='tight', dpi=300)
def plot_metrics(metrics: dict, title: Optional[str] = None, **kwargs):
outdir = Path(f"./plots-4dSU3/{title}")
outdir.mkdir(exist_ok=True, parents=True)
for key, val in metrics.items():
fig, ax = plot_metric(val, name=key, **kwargs)
if title is not None:
ax.set_title(title)
console.log(f"Saving {key} to {outdir}")
savefig(fig, f"{key}", outdir=outdir)
plt.show()
def plot_metric(
metric: torch.Tensor,
name: Optional[str] = None,
**kwargs,
):
assert len(metric) > 0
if isinstance(metric[0], (int, float, bool, np.floating)):
y = np.stack(metric)
return plot_scalar(y, ylabel=name, **kwargs)
element_shape = metric[0].shape
if len(element_shape) == 2:
y = grab_tensor(torch.stack(metric))
return plot_leapfrogs(y, ylabel=name)
if len(element_shape) == 1:
y = grab_tensor(torch.stack(metric))
return plot_chains(y, ylabel=name, **kwargs)
if len(element_shape) == 0:
y = grab_tensor(torch.stack(metric))
return plot_scalar(y, ylabel=name, **kwargs)
raise ValueErrorLoad config + build Experiment
In [4]:
from rich import print
from l2hmc.configs import CONF_DIR
su3conf = Path(f"{CONF_DIR}/su3test.yaml")
with su3conf.open('r') as stream:
conf = dict(yaml.safe_load(stream))In [5]:
import json
from rich import print_json
print_json(json.dumps(conf, indent=4, sort_keys=True))
overrides = dict_to_list_of_overrides(conf)Out[5]:
{
"annealing_schedule": {
"beta_final": 6.0,
"beta_init": 6.0
},
"backend": "DDP",
"conv": "none",
"dynamics": {
"eps": 0.01,
"eps_fixed": false,
"group": "SU3",
"latvolume": [
4,
4,
4,
4
],
"merge_directions": true,
"nchains": 8,
"nleapfrog": 4,
"use_separate_networks": false,
"use_split_xnets": false,
"verbose": true
},
"framework": "pytorch",
"init_aim": false,
"init_wandb": false,
"learning_rate": {
"clip_norm": 1.0,
"lr_init": "1e-04"
},
"loss": {
"aux_weight": 0.0,
"charge_weight": 0.0,
"plaq_weight": 0.1,
"rmse_weight": 0.1,
"use_mixed_loss": true
},
"net_weights": {
"v": {
"q": 1.0,
"s": 1.0,
"t": 1.0
},
"x": {
"q": 1.0,
"s": 0.0,
"t": 1.0
}
},
"network": {
"activation_fn": "tanh",
"dropout_prob": 0.0,
"units": [
256
],
"use_batch_norm": false
},
"restore": false,
"save": false,
"steps": {
"log": 1,
"nepoch": 10,
"nera": 1,
"print": 1,
"test": 50
},
"use_tb": false,
"use_wandb": false
}In [6]:
ptExpSU3 = get_experiment(overrides=[*overrides], build_networks=True)
# console.print(ptExpSU3.config)
state = ptExpSU3.trainer.dynamics.random_state(6.0)
logger.info(f"checkSU(state.x): {g.checkSU(state.x)}")
logger.info(f"checkSU(state.x): {g.checkSU(g.projectSU(state.x))}")
assert isinstance(state.x, torch.Tensor)
assert isinstance(state.beta, torch.Tensor)
assert isinstance(ptExpSU3, Experiment)Out[6]:
[2025-12-31 11:21:31,796887][I][utils/dist:229:setup_torch_DDP] Caught MASTER_PORT:54505 from environment!
[2025-12-31 11:21:31,830180][I][utils/dist:229:setup_torch_DDP] Caught MASTER_PORT:54505 from environment!
[2025-12-31 11:21:31,831212][W][pytorch/trainer:470:warning] Using torch.float32 on cpu!
[2025-12-31 11:21:32,041943][W][pytorch/trainer:470:warning] Using `torch.optim.Adam` optimizer
[2025-12-31 11:21:32,043077][I][pytorch/trainer:308:count_parameters] num_params in model: 27880456
[2025-12-31 11:21:32,109548][W][pytorch/trainer:274:__init__] logging with freq 1 for wandb.watch
[2025-12-31 11:21:32,123708][I][ipykernel_12897/1455121896:5:<module>] checkSU(state.x): (tensor[8] f64 x∈[1.555e-14, 1.280e-13] μ=5.128e-14 σ=4.647e-14 [1.555e-14, 2.123e-14, 1.571e-14, 4.069e-14, 1.280e-13, 1.997e-14, 4.937e-14, 1.197e-13], tensor[8] f64 x∈[3.730e-13, 4.090e-12] μ=1.462e-12 σ=1.414e-12 [3.730e-13, 5.266e-13, 4.105e-13, 1.261e-12, 4.090e-12, 4.025e-13, 1.513e-12, 3.120e-12])
[2025-12-31 11:21:32,131367][I][ipykernel_12897/1455121896:6:<module>] checkSU(state.x): (tensor[8] f64 x∈[2.760e-16, 2.865e-16] μ=2.803e-16 σ=3.214e-18 [2.760e-16, 2.804e-16, 2.812e-16, 2.865e-16, 2.797e-16, 2.783e-16, 2.781e-16, 2.825e-16], tensor[8] f64 x∈[8.924e-16, 9.900e-16] μ=9.342e-16 σ=3.144e-17 [9.298e-16, 9.900e-16, 9.658e-16, 9.112e-16, 8.924e-16, 9.120e-16, 9.338e-16, 9.386e-16])
In [7]:
# from l2hmc.utils.plot_helpers import set_plot_style
# set_plot_style()
from l2hmc.common import get_timestamp
TSTAMP = get_timestamp()
OUTPUT_DIR = Path(f"./outputs/pt4dSU3/{TSTAMP}")
HMC_DIR = OUTPUT_DIR.joinpath('hmc')
EVAL_DIR = OUTPUT_DIR.joinpath('eval')
TRAIN_DIR = OUTPUT_DIR.joinpath('train')
HMC_DIR.mkdir(exist_ok=True, parents=True)
EVAL_DIR.mkdir(exist_ok=True, parents=True)
TRAIN_DIR.mkdir(exist_ok=True, parents=True)In [8]:
ptExpSU3.trainer.print_grads_and_weights()
logger.info(ptExpSU3.config)
#console.print(ptExpSU3.config)Out[8]:
[2025-12-31 11:21:32,255438][I][pytorch/trainer:2003:print_grads_and_weights] --------------------------------------------------------------------------------
[2025-12-31 11:21:32,256420][I][pytorch/trainer:2004:print_grads_and_weights] GRADS:
[2025-12-31 11:21:32,257261][I][l2hmc/common:97:print_dict] networks.xnet.input_layer.xlayer.weight: None None
None
networks.xnet.input_layer.xlayer.bias: None None
None
networks.xnet.input_layer.vlayer.weight: None None
None
networks.xnet.input_layer.vlayer.bias: None None
None
networks.xnet.scale.coeff: None None
None
show the remaining 500 lines
networks.xnet.scale.layer.weight: None None
None
networks.xnet.scale.layer.bias: None None
None
networks.xnet.transf.coeff: None None
None
networks.xnet.transf.layer.weight: None None
None
networks.xnet.transf.layer.bias: None None
None
networks.xnet.transl.weight: None None
None
networks.xnet.transl.bias: None None
None
networks.vnet.input_layer.xlayer.weight: None None
None
networks.vnet.input_layer.xlayer.bias: None None
None
networks.vnet.input_layer.vlayer.weight: None None
None
networks.vnet.input_layer.vlayer.bias: None None
None
networks.vnet.scale.coeff: None None
None
networks.vnet.scale.layer.weight: None None
None
networks.vnet.scale.layer.bias: None None
None
networks.vnet.transf.coeff: None None
None
networks.vnet.transf.layer.weight: None None
None
networks.vnet.transf.layer.bias: None None
None
networks.vnet.transl.weight: None None
None
networks.vnet.transl.bias: None None
None
xeps.0: None None
None
xeps.1: None None
None
xeps.2: None None
None
xeps.3: None None
None
veps.0: None None
None
veps.1: None None
None
veps.2: None None
None
veps.3: None None
None
[2025-12-31 11:21:32,260291][I][pytorch/trainer:2006:print_grads_and_weights] --------------------------------------------------------------------------------
[2025-12-31 11:21:32,260825][I][pytorch/trainer:2007:print_grads_and_weights] WEIGHTS:
[2025-12-31 11:21:32,266638][I][l2hmc/common:97:print_dict] networks.xnet.input_layer.xlayer.weight: torch.Size([256, 18432]) torch.float64
[[ 5.34675944e-03 4.83692293e-03 -1.95424055e-03 ... -3.19398849e-03
-5.18456944e-03 -4.53952094e-03]
[-2.11885804e-03 -1.92370769e-03 2.95698048e-03 ... -5.08499583e-03
5.75697440e-05 3.26761240e-03]
[-6.75815378e-03 6.55236560e-03 -4.85125066e-03 ... -1.52208833e-03
-7.36647905e-04 -2.70920219e-03]
...
[ 3.86352724e-03 -5.44473292e-03 1.40281815e-03 ... 1.66045988e-03
-4.66015396e-03 4.81116461e-03]
[-2.21214706e-03 2.17645985e-03 5.16413433e-03 ... 2.66270520e-03
-4.22490545e-03 1.29105152e-03]
[ 3.40661623e-03 -6.68222571e-03 5.55093943e-03 ... -4.75621507e-03
3.87005153e-03 -4.84463461e-03]]
networks.xnet.input_layer.xlayer.bias: torch.Size([256]) torch.float64
[-6.27517033e-03 6.95361315e-03 1.04622427e-03 7.10507091e-04
5.23612152e-03 2.78631701e-03 -3.01457626e-03 -4.28143761e-03
4.90115525e-03 5.15937100e-03 -4.35841365e-03 -8.57890304e-04
3.24145885e-03 -4.54073832e-03 9.09412751e-04 5.06349338e-03
5.83832986e-03 -7.32999115e-04 -2.91927300e-03 -5.95239466e-03
-2.83463229e-04 3.40724585e-03 -4.27246400e-03 -2.36005540e-03
-6.01281254e-03 -9.80733306e-05 -2.83395712e-03 4.79620543e-03
3.46183369e-03 5.38310159e-03 -5.16676674e-04 -4.46611003e-04
3.90250701e-04 -3.91831431e-03 -2.10376615e-03 -1.90057653e-03
-2.25908854e-03 3.32974203e-03 -6.17034798e-03 -6.28716239e-03
-3.63978305e-03 3.79417684e-03 -6.18155245e-03 1.50761324e-03
-5.17844886e-04 -2.53258366e-03 -3.31294943e-03 -4.99964697e-03
-5.43108752e-03 2.30949927e-03 3.31783522e-03 5.76088082e-03
5.93899551e-04 -8.58385733e-04 4.20150295e-03 1.91881767e-03
-4.75033052e-03 -5.65465782e-03 2.17072536e-03 1.57062351e-03
1.70226256e-03 -5.55621648e-03 -4.97943369e-03 -2.85564873e-03
3.24956885e-03 2.40812993e-03 9.49304142e-05 6.25551398e-04
3.37532221e-03 -3.71555435e-03 -3.65811248e-03 -1.90970851e-03
-5.84055061e-03 -1.77288178e-03 -5.14462256e-03 -2.08101310e-04
-3.64054758e-03 5.06071025e-03 -2.62913045e-03 4.39371404e-03
6.85886168e-03 3.74021338e-04 6.05892776e-03 5.82379514e-03
4.00962923e-03 4.78526045e-03 3.33326509e-03 4.48096790e-04
1.03145443e-03 5.77448451e-03 -4.85016574e-03 -5.34521125e-03
-7.19109674e-03 -3.62381072e-03 4.02300558e-03 -4.76852750e-03
-5.75595100e-04 1.13273367e-03 -6.36804826e-03 -2.49421139e-03
5.06406582e-03 -2.76633003e-03 4.32884018e-04 -1.37047438e-03
-6.16607788e-03 -6.20185183e-04 5.16693342e-03 1.51241266e-03
5.47467124e-03 1.23369684e-03 -6.57001308e-03 1.63753802e-03
-2.43274071e-03 -4.65292918e-03 -3.72726717e-03 -5.20192488e-03
1.78092346e-03 1.38503204e-03 6.62469027e-03 1.34443639e-03
-4.15628290e-03 2.49724992e-03 5.30780593e-03 -2.88438700e-03
-7.16932566e-03 -5.06165726e-04 -2.82615406e-03 4.36886967e-03
7.18662276e-03 -6.01757620e-03 6.34840734e-03 -6.52571799e-03
3.85476919e-03 4.59529603e-03 6.17834233e-03 6.36604273e-03
2.20458496e-03 -4.39877634e-03 -1.67971025e-03 -3.15999310e-03
6.23434215e-03 7.10909097e-04 2.47401101e-03 -1.16997083e-03
-5.03368052e-03 -3.69886155e-03 -7.95058792e-04 1.98559263e-03
-7.13431827e-03 -7.21540869e-03 -6.29473217e-03 2.03228012e-03
-6.62637959e-03 -3.76284147e-03 6.26101085e-03 -3.44837288e-03
-3.67713752e-03 -1.37108601e-03 -9.07445912e-04 4.72904453e-03
1.75460750e-03 3.04283676e-03 2.73589832e-03 -6.54431213e-03
-5.20551542e-03 -4.37575844e-03 2.24417449e-03 -3.34303622e-03
-3.25662809e-03 -4.96289462e-03 -5.50310187e-05 5.38711783e-03
-5.83262488e-03 -4.01208448e-03 3.18851118e-03 4.23947203e-03
2.27066823e-03 -4.87200915e-03 -6.70260226e-03 5.60406094e-03
6.42690689e-03 4.67194886e-03 7.16780595e-03 3.11963181e-03
-2.64557081e-03 7.04843643e-03 -3.62632783e-03 -1.27351965e-03
-6.13140432e-03 5.80536588e-03 -5.61190605e-03 -6.70240453e-03
-1.60449482e-03 -1.50436324e-03 -2.07081132e-03 -2.39192222e-03
1.89552440e-03 -1.24758879e-03 -3.63463130e-03 -6.51027626e-03
-6.78312494e-04 5.16051779e-03 1.54800285e-03 6.42429157e-03
5.16674219e-03 1.74328908e-03 1.74515415e-03 -7.45714487e-04
-7.09407018e-03 -2.28495549e-03 -6.81692804e-03 5.23045719e-03
6.05730196e-03 -6.65441992e-03 4.86871512e-04 2.57458171e-03
-6.80560892e-03 6.33736678e-03 2.74625043e-03 4.29353152e-04
7.29708528e-03 6.67311357e-04 6.74459102e-03 -4.35460386e-03
6.96138850e-03 1.83322686e-03 -5.98165282e-03 -5.23273300e-03
-2.78394758e-03 4.86379841e-03 7.12929835e-03 6.31638649e-03
8.46263464e-04 4.97016772e-03 -1.80937716e-03 -3.78782446e-03
-6.20744782e-03 6.95460355e-03 -5.58908030e-03 -6.55041816e-03
1.12782294e-03 -5.78133907e-03 6.95763098e-03 -2.85119940e-03
2.84811140e-03 -5.93072944e-03 1.68583282e-03 -7.24992565e-03
5.68267560e-03 6.84689886e-03 4.39475857e-03 -6.97825429e-03
-8.91775789e-04 -6.67257741e-03 -1.61668491e-03 -3.75113533e-03]
networks.xnet.input_layer.vlayer.weight: torch.Size([256, 18432]) torch.float64
[[-7.12676676e-03 -7.19851121e-03 1.92262912e-03 ... 2.99740846e-03
-6.84328585e-04 -4.82583241e-03]
[-3.14961727e-03 3.82433539e-03 -3.95051939e-03 ... -5.88200204e-03
-4.57862458e-03 -3.20982235e-03]
[-4.21806104e-03 -1.25481908e-04 5.94817079e-03 ... -5.02316903e-03
6.84295052e-03 2.60760743e-03]
...
[-2.21680824e-03 1.66057820e-03 -3.77699599e-04 ... -6.31401523e-03
5.11650858e-03 4.50395935e-03]
[-5.39315008e-03 5.18607555e-03 1.48544059e-03 ... 7.04561156e-04
1.51566670e-03 5.53408306e-05]
[-3.43699633e-03 1.99222704e-03 -1.56282397e-03 ... 6.05750745e-03
-3.89425094e-03 4.43250670e-03]]
networks.xnet.input_layer.vlayer.bias: torch.Size([256]) torch.float64
[-5.81100325e-03 1.49579324e-03 4.36190909e-03 -8.49009705e-04
3.20082334e-03 3.33662172e-04 3.72210486e-03 3.36646725e-04
-2.79477384e-03 -6.72874945e-04 -1.64154347e-03 -4.82888035e-03
6.90676624e-03 -3.02110972e-04 3.96760300e-03 -5.61636132e-03
-2.39514236e-03 -3.44068001e-03 3.37968481e-03 -3.55787200e-03
-6.41927648e-03 5.97348240e-03 1.17699203e-03 1.10076478e-03
3.95495686e-04 -8.75149301e-04 3.81136518e-03 -6.95569471e-03
-1.76999892e-03 1.94536865e-03 3.12176239e-03 2.26232017e-03
5.70797122e-03 6.74257010e-03 1.58784188e-03 -6.67101797e-03
4.92471858e-03 -1.51666511e-03 5.14992317e-03 -5.77413524e-03
5.18351693e-04 6.05529339e-03 1.94484472e-03 6.01653944e-04
5.76224003e-03 -6.63693330e-04 2.72043495e-04 6.09259139e-03
2.92145615e-03 -5.67479382e-03 -5.04856939e-03 -1.85294362e-03
-4.92016403e-03 1.15951571e-03 -5.92064524e-03 -5.83133850e-03
-3.53630946e-06 -2.10326706e-03 -7.15203438e-03 -6.31536469e-03
-3.31526629e-03 -9.60289769e-04 3.10126878e-03 4.15357640e-03
-1.67780877e-03 -5.71903840e-03 -2.64063366e-03 -6.39323026e-03
4.69715951e-03 -3.48593439e-03 -2.27659337e-03 6.04503624e-03
-4.42486534e-03 -7.07834336e-03 -1.92655029e-03 -6.76887369e-03
6.83783286e-03 5.93773781e-03 -4.70390414e-03 5.92430250e-03
6.55907843e-04 5.61126817e-03 2.19508551e-03 2.27235992e-03
-1.79687671e-03 -4.20857930e-03 4.35746392e-03 -3.87612316e-03
1.75987200e-03 4.47860400e-03 -3.79907482e-03 1.35710791e-03
8.34770794e-04 -6.52838672e-03 -3.49913718e-03 -1.98176737e-03
1.06956318e-03 -7.22346031e-03 -7.32897590e-03 -2.00379517e-03
-5.79203981e-03 -6.59006093e-03 1.85766437e-03 1.26477228e-03
1.90984646e-03 1.85917146e-03 -6.52360021e-03 -3.44633053e-03
6.34084601e-03 4.29533991e-03 3.01069033e-03 4.80555458e-03
1.98523202e-03 7.18889162e-03 3.16110353e-03 3.71906731e-03
4.11884425e-03 3.60782032e-03 4.71677219e-03 -1.75246703e-03
-7.20258612e-03 -1.18663910e-03 3.65708063e-03 2.36139368e-03
5.61236115e-03 6.03883927e-03 9.86989088e-04 5.39756484e-03
-2.88809907e-03 4.92643460e-03 5.72584324e-03 -1.00072258e-04
4.75075010e-03 -5.42301953e-03 -5.50286777e-03 -4.23181335e-03
-5.00206290e-03 2.31179056e-03 5.77771376e-03 -2.05031885e-03
-3.79753391e-03 -2.02208240e-03 -4.76410074e-03 4.69967661e-03
3.95167530e-03 -3.32674278e-03 3.20301886e-03 -1.69592547e-03
-2.47407681e-03 -4.48647311e-03 -1.33430405e-03 -3.10485161e-03
4.08367109e-03 5.42960445e-04 4.67226126e-03 -5.60178356e-03
-5.58829182e-03 -5.05671146e-04 -1.17512877e-03 -3.96469716e-03
-3.89058595e-04 -6.94514186e-03 6.93620456e-03 -7.09108200e-03
5.43657970e-03 -1.25804740e-03 3.59429964e-03 5.17882641e-03
1.69720440e-03 3.17525736e-03 2.37069314e-03 -5.97071529e-03
6.02570256e-03 -1.62189121e-03 -7.30589551e-03 -5.18544308e-03
-9.05009633e-06 1.21795597e-03 -2.79942242e-03 -1.53003817e-03
-3.16167416e-04 3.95207369e-03 -2.73971203e-03 1.46246212e-03
2.06979796e-03 1.72376759e-03 -5.93373821e-03 -3.68944697e-03
-3.36239942e-03 2.78614534e-03 -6.57564027e-04 1.24225566e-03
5.73989767e-03 4.66875792e-03 4.32675953e-03 -3.21244547e-03
3.24258732e-03 -4.62455540e-04 4.29971022e-03 1.66641612e-03
5.52830190e-03 3.39946874e-03 -1.22460755e-03 4.15048684e-03
2.67500142e-03 6.85066977e-03 -4.50405053e-03 2.24032132e-04
1.71352626e-03 -1.89684044e-03 3.65866190e-03 2.65098084e-03
2.53669151e-03 -5.01885465e-03 2.72457897e-03 7.05199284e-05
-6.95741127e-03 -8.47785301e-04 3.46805191e-03 -2.91773376e-03
2.80293003e-03 1.98990009e-03 7.05727061e-03 1.22565093e-03
-3.66011984e-03 -3.94921000e-03 1.90120912e-03 7.04296850e-03
-7.10052108e-03 3.30315363e-03 6.95394851e-03 -7.16002067e-03
9.27390759e-04 -6.57579302e-03 -1.58868947e-03 -9.59482732e-04
-4.87209777e-03 5.71631873e-03 -1.47150616e-03 -5.65429988e-03
-5.17372692e-03 -4.39452613e-03 -8.02427941e-04 -1.48906408e-03
5.83027720e-03 2.39593258e-04 6.93626532e-03 5.72961919e-03
1.80774082e-03 2.68778953e-04 -7.24801149e-03 4.82184413e-03
5.05562602e-03 -9.55384415e-04 -6.21657675e-03 -4.77821335e-03]
networks.xnet.scale.coeff: torch.Size([1, 9216]) torch.float64
[[0. 0. 0. ... 0. 0. 0.]]
networks.xnet.scale.layer.weight: torch.Size([9216, 256]) torch.float64
[[-0.02095451 -0.05686737 -0.03893118 ... 0.05419893 0.0257452
-0.00133821]
[-0.02743688 0.05120197 0.04050343 ... -0.02929596 -0.0450575
-0.05065678]
[-0.01840301 -0.0098871 -0.02471466 ... 0.03206798 0.01654802
0.03761009]
...
[-0.04001781 0.05912992 -0.04004282 ... -0.02828562 -0.04911551
0.04216614]
[ 0.04723775 0.04581999 0.04055526 ... 0.04715541 -0.05638147
0.02845275]
[-0.02562548 0.06007688 0.04966506 ... 0.01592266 -0.04651895
-0.06127886]]
networks.xnet.scale.layer.bias: torch.Size([9216]) torch.float64
[-0.00265899 -0.02646664 0.03583225 ... -0.05350547 0.01444305
-0.0579916 ]
networks.xnet.transf.coeff: torch.Size([1, 9216]) torch.float64
[[0. 0. 0. ... 0. 0. 0.]]
networks.xnet.transf.layer.weight: torch.Size([9216, 256]) torch.float64
[[ 0.0392582 0.01133145 -0.00443078 ... -0.00694468 -0.04578733
-0.00618808]
[ 0.05615496 -0.01601937 -0.02873052 ... -0.05706579 0.0437926
-0.00041895]
[-0.00176936 0.03888691 -0.00353543 ... 0.02984512 0.03756995
0.01251237]
...
[ 0.01746874 0.01352125 0.01913581 ... -0.04532026 0.05886173
0.03183112]
[-0.05524541 -0.00450545 -0.05198179 ... 0.04711227 0.02604322
0.04390161]
[-0.0428873 -0.05551796 -0.0498907 ... 0.05401175 -0.03260137
-0.00792571]]
networks.xnet.transf.layer.bias: torch.Size([9216]) torch.float64
[-0.05458491 -0.01676385 -0.03765772 ... 0.02738577 -0.01892707
-0.02420786]
networks.xnet.transl.weight: torch.Size([9216, 256]) torch.float64
[[-0.00059796 0.02023506 0.04343998 ... 0.03514851 -0.01630495
-0.00890796]
[-0.04728036 0.03806493 0.05296336 ... 0.0266868 -0.0065818
-0.00962656]
[ 0.01303425 0.01736576 0.02032784 ... -0.04457304 0.04189838
0.0209156 ]
...
[ 0.06086275 -0.04484688 -0.0108063 ... -0.03753984 -0.03285609
0.03000951]
[ 0.03888227 -0.0288917 -0.02127442 ... -0.05098336 -0.00381459
0.04144075]
[-0.05571851 -0.0217138 0.01634122 ... -0.06058459 0.03315463
0.04835562]]
networks.xnet.transl.bias: torch.Size([9216]) torch.float64
[-0.03604141 0.0033956 -0.03758735 ... -0.06090733 0.04404094
0.02962441]
networks.vnet.input_layer.xlayer.weight: torch.Size([256, 8192]) torch.float64
[[ 0.01075344 -0.00442174 0.00251958 ... 0.00492397 -0.00723896
-0.0004272 ]
[ 0.00524415 -0.00669573 -0.00382291 ... -0.00345527 0.01067931
-0.00826958]
[-0.00964919 -0.0032537 0.0037563 ... 0.00434237 -0.00959642
-0.00717453]
...
[ 0.00318632 0.00599625 -0.00861887 ... -0.00693228 -0.00052612
-0.0042748 ]
[ 0.00234905 0.00417852 -0.00023535 ... -0.00123312 0.01029455
0.00102762]
[ 0.00723328 0.00198979 -0.00973361 ... 0.0109373 0.01054264
-0.00025926]]
networks.vnet.input_layer.xlayer.bias: torch.Size([256]) torch.float64
[ 3.65765368e-03 7.52889404e-04 2.19535202e-03 1.05928379e-02
-5.27907654e-03 1.00805048e-02 7.18645468e-03 -2.34496113e-03
-5.25810350e-03 -1.56410156e-03 -1.04346141e-02 8.78774986e-03
6.54181545e-03 5.46104786e-03 9.17177501e-03 5.73304752e-04
1.06093989e-02 6.63006334e-03 5.64038580e-04 2.29994404e-03
-8.98301670e-03 -1.06577776e-02 4.88829584e-03 1.09470544e-02
6.67523736e-03 3.50467030e-03 5.29316476e-03 -8.25598089e-03
-4.68769576e-03 1.61229401e-03 -6.45519646e-03 -6.81931916e-03
1.81609243e-03 6.61088290e-03 -9.73094775e-03 -5.18776063e-03
-7.71264305e-03 -6.69103484e-03 6.88446148e-03 1.35166920e-03
-1.06029745e-02 -4.77408173e-03 -3.51771083e-03 -1.07309300e-03
4.33819696e-03 2.59667186e-04 7.10953085e-03 9.03992857e-03
-3.13335464e-03 -7.16588185e-03 3.33683424e-03 -9.29690362e-03
1.07786290e-02 -9.91258625e-03 9.25106728e-03 -3.49920262e-03
-5.29215516e-03 4.68906735e-03 7.75554395e-03 -6.76207309e-03
-4.11033416e-03 -7.73721478e-03 5.16251593e-03 -4.82089617e-03
-1.93034720e-03 -3.10007273e-03 7.05905445e-03 -1.01136198e-02
-1.67998314e-03 9.73590103e-03 -7.94840767e-03 5.57635641e-03
1.44441754e-03 9.34376009e-03 -1.79113160e-03 -6.35718756e-03
2.74752111e-03 -4.82123866e-03 -5.76294465e-03 -1.16578253e-03
9.45817519e-03 -7.82745685e-03 9.84889456e-04 -9.59940125e-03
8.61539045e-03 -5.39333035e-03 7.10928197e-03 -4.09380092e-03
-3.20566443e-03 -9.71518230e-03 -8.10141748e-03 -2.11276775e-03
-4.42284486e-03 -6.17518511e-03 2.67117133e-03 -2.76659962e-03
-1.98477917e-03 -5.76560532e-04 -1.28815405e-03 5.66437776e-03
1.13963535e-03 -2.57341364e-03 -5.03984089e-04 8.63722195e-03
-3.48637647e-03 -1.77934224e-03 9.67531142e-03 -5.76087788e-03
9.65725173e-03 1.07885178e-02 -1.10441093e-02 -3.96459251e-03
6.87847760e-03 -9.98344172e-03 -1.01713041e-02 8.50036878e-03
-3.45168590e-03 2.11342341e-04 1.05021858e-02 -8.32251691e-03
1.43120795e-03 -9.98084361e-03 8.80358826e-03 -4.73254332e-03
-4.95570499e-03 -1.08527411e-03 7.13057658e-03 9.77363689e-03
4.45465081e-03 8.04331748e-04 2.80160880e-03 4.79868584e-03
6.52720803e-03 1.04452236e-02 1.87116800e-03 1.36891441e-03
2.85036682e-04 -2.29261846e-04 -9.37595261e-03 4.22669738e-03
-2.47949035e-03 1.06982201e-02 -9.60002891e-03 -5.22237303e-03
-7.64500207e-03 4.23501930e-03 -4.28808762e-03 -4.95688093e-03
9.40643332e-03 -9.69459406e-03 -2.06042738e-03 -8.01400957e-03
-7.16914545e-03 -5.78335860e-03 3.16830068e-03 1.85287773e-03
3.44794088e-03 -2.53521317e-03 -2.88612026e-03 1.08717078e-02
-1.01225795e-02 -1.16604698e-03 8.81109877e-03 8.28532830e-03
4.70386194e-05 -6.58759441e-03 -8.23810479e-03 1.09216546e-02
-4.74572371e-04 4.00807825e-03 4.78623025e-03 1.94947609e-03
-9.74334295e-03 -9.46703942e-03 3.70376601e-03 -9.58514005e-03
7.45228575e-03 -3.56091409e-03 -2.80553589e-03 -5.66674128e-03
-7.76067314e-03 4.89830166e-04 -1.62618993e-03 -4.40534497e-03
6.90042828e-03 -9.82408405e-03 1.85752597e-03 1.08080062e-02
8.39088469e-03 1.09742793e-02 6.88680520e-04 -6.56556239e-03
-1.05793976e-02 -1.99911699e-03 -1.04233774e-02 -3.71954884e-03
5.80665833e-03 4.52455167e-03 -2.87010657e-03 -8.89923340e-04
-1.27505611e-03 3.29680859e-03 3.79651174e-03 1.70297572e-03
-4.82181477e-03 -7.18118341e-03 -8.05279960e-03 4.69676667e-03
-1.07514677e-02 -2.32309866e-03 -3.67052435e-03 9.03929223e-03
-8.69549328e-03 -8.17382828e-03 -5.21362891e-03 -9.59441144e-03
1.65561220e-03 1.08047942e-02 1.04196070e-02 -3.11544650e-03
-4.32341443e-04 -7.53758566e-03 8.06249460e-03 -8.43990577e-03
1.52394709e-03 2.06682696e-03 6.05708692e-03 -7.41710497e-03
-2.16264740e-03 6.18068046e-03 -8.20336450e-04 7.87180033e-03
1.05388638e-02 -8.91134740e-03 -1.64535156e-03 8.41596292e-03
-2.69686639e-03 -2.16841687e-04 -1.97642118e-03 3.65059992e-03
-1.15008831e-03 -4.80482279e-03 5.52545117e-03 4.98287296e-03
7.59982802e-03 4.27736245e-03 -2.95032108e-03 6.74438212e-03
-8.56251345e-03 -6.72417714e-04 1.70828986e-03 -6.03540616e-03
-1.33815357e-03 -8.68643801e-03 5.90444563e-03 -7.06679271e-03]
networks.vnet.input_layer.vlayer.weight: torch.Size([256, 8192]) torch.float64
[[-0.00619353 -0.00650042 -0.0026522 ... 0.0068372 -0.00948694
0.00933975]
[ 0.00215677 -0.00293593 0.00045273 ... 0.00930159 0.00635273
0.00558493]
[ 0.00510718 0.01042364 0.00752281 ... 0.00594208 -0.00378113
-0.01022276]
...
[-0.00215706 0.01074776 -0.0053496 ... -0.00486494 0.00463231
-0.01034707]
[-0.00526721 0.0079335 -0.00405221 ... -0.00447083 0.00074141
0.00684057]
[-0.0049713 0.00518988 0.00185278 ... -0.00432856 0.00915126
-0.00262938]]
networks.vnet.input_layer.vlayer.bias: torch.Size([256]) torch.float64
[ 2.13762449e-03 1.96605652e-03 6.51065477e-03 3.76194401e-03
8.96954576e-03 -7.08439098e-03 -7.25670396e-03 -5.70495530e-03
4.06333268e-03 1.04406584e-02 -3.83235173e-03 -7.33952637e-03
-5.29351791e-03 -5.25714481e-03 7.05018054e-03 6.26564984e-03
2.42288302e-03 -5.73755718e-04 -4.44751325e-03 2.13604945e-03
-9.06077714e-05 2.82506261e-03 1.09551970e-02 -2.07939099e-05
4.28672893e-03 -8.86046965e-03 -5.97895443e-03 -4.69618426e-03
3.88504948e-03 -7.01739313e-03 -6.04641960e-03 -1.22390387e-03
5.38292125e-03 9.30279333e-04 2.14687790e-03 8.39711493e-03
1.93013069e-03 -5.69972891e-03 -2.72835230e-03 8.53376442e-03
4.05306984e-03 1.00734868e-02 1.08723202e-02 9.30718181e-03
1.96371423e-03 1.69834729e-03 1.61681754e-03 -1.48227696e-03
-2.02284067e-03 -2.56382307e-04 -9.66598740e-03 2.81794949e-03
3.70924726e-03 5.45770201e-03 5.12074480e-03 7.84113339e-04
2.82443774e-03 -2.48666504e-04 -5.57756382e-04 6.97533931e-03
-2.23615685e-03 -7.59472457e-03 1.98532138e-03 9.72393380e-03
-8.40848664e-03 5.73930848e-03 9.97598133e-03 -1.14453065e-03
4.23704557e-03 -6.24509169e-03 8.09672610e-03 5.52673767e-03
-8.99589854e-03 4.85387916e-03 -2.98114377e-03 -6.83895228e-03
-7.80980072e-03 9.04972407e-03 1.02053264e-02 1.12930883e-03
-1.08619014e-03 1.84711892e-03 -8.96282866e-03 9.16434581e-03
-2.62860141e-03 2.02054714e-03 -2.26844671e-03 4.57214473e-04
7.53049084e-03 6.04271986e-03 -5.57139345e-03 9.30955541e-03
-8.40356786e-03 5.48084132e-03 -5.74979536e-03 -8.80177761e-03
5.48946735e-03 -1.39039777e-03 7.84330016e-04 -5.06551205e-03
-9.15713424e-03 -6.05675543e-03 7.15267996e-03 -7.13947212e-03
-8.42718899e-03 1.03367836e-02 3.49810632e-03 -4.13946322e-03
-6.61169824e-03 -1.23310170e-03 -2.37166030e-03 6.61362791e-04
-2.24169106e-03 -1.02455843e-02 9.93754619e-03 7.08702167e-03
4.13486853e-03 -5.56325476e-03 1.52901094e-03 6.85604576e-03
2.24056137e-04 -5.72657622e-03 5.16448154e-03 1.25766075e-03
-2.62160306e-03 5.31797957e-03 -8.30608530e-03 2.95403343e-03
-7.44531041e-03 -7.76523059e-04 7.02668965e-03 -3.62130172e-03
7.50971157e-03 -7.03695000e-03 -4.29562143e-04 1.02021298e-02
-6.49013756e-03 -9.02747232e-03 4.73964254e-03 -1.81288304e-03
7.25529326e-03 -8.88215620e-03 8.62196607e-03 1.06973448e-03
1.58030096e-03 8.09352615e-03 -1.06424178e-02 8.60145779e-03
7.78765040e-03 3.12443187e-03 -9.76149234e-03 -2.92733346e-03
-4.94684527e-03 2.54123825e-03 3.14158538e-03 1.29850463e-03
-7.10532065e-04 -1.75192591e-03 1.06236025e-02 1.43846255e-03
5.73505097e-03 -6.47254084e-04 -1.38229203e-05 6.10689968e-04
9.64015228e-03 -8.88051809e-03 -5.10172399e-04 -9.07101530e-03
-1.06343967e-02 1.03739849e-02 -3.29581307e-03 2.30808303e-03
6.19042182e-03 -1.01627108e-02 -5.90332461e-03 1.07983610e-02
9.19950237e-03 1.23110613e-03 -3.21699028e-03 5.49590810e-03
8.94747001e-03 3.44310787e-03 -9.38099103e-03 8.04877795e-03
-4.02444667e-03 7.01264797e-03 -3.79652055e-03 9.48597155e-03
-7.56496480e-03 1.00967279e-02 -4.17437588e-03 2.58722056e-03
6.36675284e-03 9.32221153e-03 2.80300077e-03 5.41941176e-03
3.34537557e-03 -5.73423342e-03 -6.67158697e-03 9.92357762e-03
-6.93243096e-03 -2.01520317e-03 5.88531536e-03 -3.85475341e-03
2.94204521e-03 -1.02806155e-03 -3.88829458e-03 -8.53240867e-03
1.09355988e-02 8.25391223e-03 8.80964756e-03 -2.91565964e-03
9.59728057e-03 7.75205289e-03 -7.38385104e-03 -3.29019614e-03
-4.57266092e-03 3.43399890e-04 6.45364195e-03 1.39322244e-03
-7.21065388e-03 -3.15960935e-03 -1.09171057e-02 -9.35888449e-03
-6.55749088e-03 1.10386011e-02 3.43351264e-03 -8.20875171e-03
-3.09228518e-03 1.76551474e-03 5.19667591e-03 1.03511356e-02
-3.15706153e-03 1.07906224e-02 -4.48335762e-03 -8.08389191e-03
-2.41927796e-03 1.09425138e-02 5.05842492e-04 4.76034417e-03
8.71695420e-04 -1.03555491e-02 -1.96903837e-03 -5.88446821e-03
-5.81500628e-03 7.83152856e-03 -1.01906154e-02 8.47155625e-03
-3.04322853e-03 -1.51121378e-03 -8.13083116e-03 -7.11132059e-03
-4.21085208e-03 -4.57075550e-04 -1.05307749e-05 6.18722644e-04]
networks.vnet.scale.coeff: torch.Size([1, 9216]) torch.float64
[[0. 0. 0. ... 0. 0. 0.]]
networks.vnet.scale.layer.weight: torch.Size([9216, 256]) torch.float64
[[-0.00761683 0.01649503 -0.03692442 ... 0.02964766 -0.00675128
-0.04392627]
[-0.00589 0.00963807 0.01736705 ... -0.00313597 -0.03191036
-0.04455411]
[ 0.04676324 -0.00047848 -0.03297401 ... 0.00322858 -0.04536244
0.00209783]
...
[-0.02007618 -0.03535818 -0.02410384 ... -0.05521103 0.01424467
0.05748986]
[ 0.05310956 -0.00700633 -0.02713637 ... 0.04775035 0.02916621
0.04902634]
[-0.01296662 -0.04693715 0.01220499 ... -0.00491532 0.01583796
-0.04115975]]
networks.vnet.scale.layer.bias: torch.Size([9216]) torch.float64
[-0.05532441 0.04261724 0.01327692 ... -0.02727258 -0.00564456
0.05526191]
networks.vnet.transf.coeff: torch.Size([1, 9216]) torch.float64
[[0. 0. 0. ... 0. 0. 0.]]
networks.vnet.transf.layer.weight: torch.Size([9216, 256]) torch.float64
[[-8.06922849e-05 -4.86478073e-02 -1.74624561e-02 ... 5.14657732e-02
1.11850013e-02 -2.96893353e-03]
[ 5.42348063e-02 -6.03741696e-02 7.92496492e-04 ... -6.04141558e-02
3.33679678e-02 4.60974095e-03]
[ 3.08612215e-02 4.24380905e-02 -3.32743200e-02 ... 1.54626832e-02
5.21812386e-02 3.67741292e-02]
...
[-5.65227179e-02 8.79422558e-03 7.17933897e-03 ... -5.81218986e-02
6.02176274e-02 6.21102000e-02]
[ 6.00315605e-02 -3.43763009e-02 -1.19883634e-02 ... -3.51821714e-02
3.69714337e-02 -5.36188244e-02]
[ 1.06812561e-02 2.56660157e-02 -1.52740900e-02 ... -1.88780392e-02
1.36668521e-02 2.64287697e-02]]
networks.vnet.transf.layer.bias: torch.Size([9216]) torch.float64
[-0.04448601 0.05444971 0.05047074 ... -0.02935933 -0.0370173
-0.03672931]
networks.vnet.transl.weight: torch.Size([9216, 256]) torch.float64
[[ 0.03190299 0.03209705 -0.00548753 ... -0.01850558 -0.03685719
-0.01781093]
[ 0.05555422 0.01567202 0.05491162 ... -0.01233239 -0.01591408
0.00792362]
[ 0.03025957 -0.02511794 -0.05441319 ... -0.03709203 -0.00967987
-0.05173925]
...
[ 0.06073248 0.05392621 -0.04660168 ... 0.00607929 -0.03720785
0.00577768]
[ 0.00502593 -0.01161339 0.04961748 ... 0.02408661 -0.03853835
-0.00770556]
[-0.00473506 0.04545451 -0.05643493 ... 0.04181123 -0.03172008
-0.05468202]]
networks.vnet.transl.bias: torch.Size([9216]) torch.float64
[ 0.02885058 -0.01754039 0.02482559 ... -0.014913 -0.02643838
-0.02004313]
xeps.0: torch.Size([]) torch.float64
0.01
xeps.1: torch.Size([]) torch.float64
0.01
xeps.2: torch.Size([]) torch.float64
0.01
xeps.3: torch.Size([]) torch.float64
0.01
veps.0: torch.Size([]) torch.float64
0.01
veps.1: torch.Size([]) torch.float64
0.01
veps.2: torch.Size([]) torch.float64
0.01
veps.3: torch.Size([]) torch.float64
0.01
[2025-12-31 11:21:32,293773][I][pytorch/trainer:2009:print_grads_and_weights] --------------------------------------------------------------------------------
[2025-12-31 11:21:32,294670][I][ipykernel_12897/3178487732:2:<module>] ExperimentConfig(wandb={'setup': {'id': None, 'group': None, 'config': None, 'save_code': True, 'sync_tensorboard': True, 'mode': 'online', 'resume': 'allow', 'entity': 'l2hmc-qcd', 'project': 'l2hmc-qcd', 'settings': {'start_method': 'thread'}, 'tags': ['beta_init=6.0', 'beta_final=6.0']}}, steps=Steps(nera=1, nepoch=10, test=50, log=1, print=1, extend_last_era=1), framework='pytorch', loss=LossConfig(use_mixed_loss=True, charge_weight=0.0, rmse_weight=0.1, plaq_weight=0.1, aux_weight=0.0), network=NetworkConfig(units=[256], activation_fn='tanh', dropout_prob=0.0, use_batch_norm=False), conv=ConvolutionConfig(filters=[], sizes=[], pool=[]), net_weights=NetWeights(x=NetWeight(s=0.0, t=1.0, q=1.0), v=NetWeight(s=1.0, t=1.0, q=1.0)), dynamics=DynamicsConfig(nchains=8, group='SU3', latvolume=[4, 4, 4, 4], nleapfrog=4, eps=0.01, eps_hmc=0.25, use_ncp=True, verbose=True, eps_fixed=False, use_split_xnets=False, use_separate_networks=False, merge_directions=True), learning_rate=LearningRateConfig(lr_init=0.0001, mode='auto', monitor='loss', patience=5, cooldown=0, warmup=1000, verbose=True, min_lr=1e-06, factor=0.98, min_delta=0.0001, clip_norm=1.0), annealing_schedule=AnnealingSchedule(beta_init=6.0, beta_final=6.0, dynamic=False), gradient_accumulation_steps=1, restore=False, save=False, c1=0.0, port='2345', compile=True, profile=False, init_aim=False, init_wandb=False, use_wandb=False, use_tb=False, debug_mode=False, default_mode=True, print_config=True, precision='float32', ignore_warnings=True, backend='DDP', seed=9992, ds_config_path='/Users/samforeman/projects/saforem2/l2hmc-qcd/src/l2hmc/conf/ds_config.yaml', name=None, width=200, nchains=None, compression=False)
HMC
In [9]:
xhmc, history_hmc = evaluate(
nsteps=50,
exp=ptExpSU3,
beta=6.0,
x=state.x,
eps=0.1,
nleapfrog=8,
job_type='hmc',
nlog=1,
nprint=50,
grab=True
)Out[9]:
[2025-12-31 11:21:32,364810][I][pytorch/experiment:117:evaluate] Running 50 steps of hmc at beta=6.0000
[2025-12-31 11:21:32,365632][I][pytorch/experiment:121:evaluate] STEP: 0
[2025-12-31 11:21:32,681523][I][pytorch/experiment:121:evaluate] STEP: 1
[2025-12-31 11:21:32,975018][I][pytorch/experiment:121:evaluate] STEP: 2
[2025-12-31 11:21:33,232529][I][pytorch/experiment:121:evaluate] STEP: 3
[2025-12-31 11:21:33,504799][I][pytorch/experiment:121:evaluate] STEP: 4
[2025-12-31 11:21:33,748820][I][pytorch/experiment:121:evaluate] STEP: 5
[2025-12-31 11:21:34,042226][I][pytorch/experiment:121:evaluate] STEP: 6
[2025-12-31 11:21:34,304752][I][pytorch/experiment:121:evaluate] STEP: 7
[2025-12-31 11:21:34,571303][I][pytorch/experiment:121:evaluate] STEP: 8
[2025-12-31 11:21:34,885570][I][pytorch/experiment:121:evaluate] STEP: 9
[2025-12-31 11:21:35,182088][I][pytorch/experiment:121:evaluate] STEP: 10
show the remaining 39 lines
[2025-12-31 11:21:35,435679][I][pytorch/experiment:121:evaluate] STEP: 11
[2025-12-31 11:21:35,679643][I][pytorch/experiment:121:evaluate] STEP: 12
[2025-12-31 11:21:36,648443][I][pytorch/experiment:121:evaluate] STEP: 13
[2025-12-31 11:21:37,338933][I][pytorch/experiment:121:evaluate] STEP: 14
[2025-12-31 11:21:37,989594][I][pytorch/experiment:121:evaluate] STEP: 15
[2025-12-31 11:21:38,600587][I][pytorch/experiment:121:evaluate] STEP: 16
[2025-12-31 11:21:38,974892][I][pytorch/experiment:121:evaluate] STEP: 17
[2025-12-31 11:21:39,268797][I][pytorch/experiment:121:evaluate] STEP: 18
[2025-12-31 11:21:39,530796][I][pytorch/experiment:121:evaluate] STEP: 19
[2025-12-31 11:21:39,815869][I][pytorch/experiment:121:evaluate] STEP: 20
[2025-12-31 11:21:40,106116][I][pytorch/experiment:121:evaluate] STEP: 21
[2025-12-31 11:21:40,373194][I][pytorch/experiment:121:evaluate] STEP: 22
[2025-12-31 11:21:40,624504][I][pytorch/experiment:121:evaluate] STEP: 23
[2025-12-31 11:21:40,957456][I][pytorch/experiment:121:evaluate] STEP: 24
[2025-12-31 11:21:41,224683][I][pytorch/experiment:121:evaluate] STEP: 25
[2025-12-31 11:21:41,456110][I][pytorch/experiment:121:evaluate] STEP: 26
[2025-12-31 11:21:41,716311][I][pytorch/experiment:121:evaluate] STEP: 27
[2025-12-31 11:21:42,038287][I][pytorch/experiment:121:evaluate] STEP: 28
[2025-12-31 11:21:42,345897][I][pytorch/experiment:121:evaluate] STEP: 29
[2025-12-31 11:21:42,589315][I][pytorch/experiment:121:evaluate] STEP: 30
[2025-12-31 11:21:42,880247][I][pytorch/experiment:121:evaluate] STEP: 31
[2025-12-31 11:21:43,155695][I][pytorch/experiment:121:evaluate] STEP: 32
[2025-12-31 11:21:43,434668][I][pytorch/experiment:121:evaluate] STEP: 33
[2025-12-31 11:21:43,671141][I][pytorch/experiment:121:evaluate] STEP: 34
[2025-12-31 11:21:43,979022][I][pytorch/experiment:121:evaluate] STEP: 35
[2025-12-31 11:21:44,227342][I][pytorch/experiment:121:evaluate] STEP: 36
[2025-12-31 11:21:44,482879][I][pytorch/experiment:121:evaluate] STEP: 37
[2025-12-31 11:21:44,766356][I][pytorch/experiment:121:evaluate] STEP: 38
[2025-12-31 11:21:45,073938][I][pytorch/experiment:121:evaluate] STEP: 39
[2025-12-31 11:21:45,333545][I][pytorch/experiment:121:evaluate] STEP: 40
[2025-12-31 11:21:45,604723][I][pytorch/experiment:121:evaluate] STEP: 41
[2025-12-31 11:21:45,974651][I][pytorch/experiment:121:evaluate] STEP: 42
[2025-12-31 11:21:46,332444][I][pytorch/experiment:121:evaluate] STEP: 43
[2025-12-31 11:21:46,642154][I][pytorch/experiment:121:evaluate] STEP: 44
[2025-12-31 11:21:47,019651][I][pytorch/experiment:121:evaluate] STEP: 45
[2025-12-31 11:21:47,270482][I][pytorch/experiment:121:evaluate] STEP: 46
[2025-12-31 11:21:47,588011][I][pytorch/experiment:121:evaluate] STEP: 47
[2025-12-31 11:21:47,917059][I][pytorch/experiment:121:evaluate] STEP: 48
[2025-12-31 11:21:48,199489][I][pytorch/experiment:121:evaluate] STEP: 49
In [10]:
dataset_hmc = history_hmc.get_dataset()
_ = history_hmc.plot_all(title='HMC')Out[10]:
In [11]:
xhmc = ptExpSU3.trainer.dynamics.unflatten(xhmc)
print(f"checkSU(x_eval): {g.checkSU(xhmc)}")
print(f"checkSU(x_eval): {g.checkSU(g.projectSU(xhmc))}")Out[11]:
checkSU(x_eval): (tensor[8] f64 x∈[2.502e-16, 5.331e-16] μ=4.279e-16 σ=1.346e-16 [2.502e-16, 5.244e-16, 5.210e-16,
2.808e-16, 5.331e-16, 5.305e-16, 5.168e-16, 2.662e-16], tensor[8] f64 x∈[7.632e-16, 1.578e-15] μ=1.246e-15
σ=3.609e-16 [7.632e-16, 1.513e-15, 1.578e-15, 8.960e-16, 1.497e-15, 1.480e-15, 1.454e-15, 7.840e-16])Out[11]:
checkSU(x_eval): (tensor[8] f64 x∈[2.436e-16, 3.161e-16] μ=2.897e-16 σ=3.147e-17 [2.436e-16, 3.149e-16, 3.161e-16,
2.702e-16, 3.107e-16, 3.075e-16, 3.091e-16, 2.455e-16], tensor[8] f64 x∈[7.665e-16, 9.669e-16] μ=8.918e-16
σ=8.773e-17 [7.839e-16, 9.658e-16, 9.669e-16, 7.665e-16, 9.371e-16, 9.338e-16, 9.663e-16, 8.140e-16])Training
In [12]:
import time
from l2hmc.utils.history import BaseHistory, summarize_dict
history_train = BaseHistory()
x = state.x
for step in range(100):
# log.info(f'HMC STEP: {step}')
tic = time.perf_counter()
x, metrics_ = ptExpSU3.trainer.train_step(
(x, state.beta)
)
toc = time.perf_counter()
metrics = {
'train_step': step,
'dt': toc - tic,
**metrics_,
}
if step % 5 == 0:
avgs = history_train.update(metrics)
summary = summarize_dict(avgs)
logger.info(summary)Out[12]:
[2025-12-31 11:21:53,926183][I][ipykernel_12897/30352159:21:<module>] train_step=0 dt=2.476 energy=28.872 logprob=28.636 logdet=0.236 sldf=0.149 sldb=-0.154 sld=0.236 xeps=0.010 veps=0.010 acc=0.202 sumlogdet=-0.022 beta=6.000 acc_mask=0.250 loss=91.790 plaqs=-0.000 sinQ=0.001 intQ=0.019 dQint=0.006 dQsin=0.000
[2025-12-31 11:22:04,277222][I][ipykernel_12897/30352159:21:<module>] train_step=5 dt=2.144 energy=-320.934 logprob=-321.240 logdet=0.306 sldf=0.180 sldb=-0.160 sld=0.306 xeps=0.010 veps=0.010 acc=1.000 sumlogdet=0.081 beta=6.000 acc_mask=1.000 loss=-682.159 plaqs=0.038 sinQ=0.000 intQ=0.006 dQint=0.022 dQsin=0.001
[2025-12-31 11:22:15,931363][I][ipykernel_12897/30352159:21:<module>] train_step=10 dt=2.276 energy=-734.319 logprob=-734.432 logdet=0.113 sldf=0.082 sldb=-0.104 sld=0.113 xeps=0.011 veps=0.010 acc=1.000 sumlogdet=-0.078 beta=6.000 acc_mask=1.000 loss=-561.834 plaqs=0.084 sinQ=0.001 intQ=0.015 dQint=0.019 dQsin=0.001
[2025-12-31 11:22:26,985074][I][ipykernel_12897/30352159:21:<module>] train_step=15 dt=2.453 energy=-1211.909 logprob=-1211.984 logdet=0.075 sldf=0.041 sldb=-0.034 sld=0.075 xeps=0.011 veps=0.010 acc=1.000 sumlogdet=0.027 beta=6.000 acc_mask=1.000 loss=-583.813 plaqs=0.128 sinQ=0.001 intQ=0.009 dQint=0.016 dQsin=0.001
[2025-12-31 11:22:38,760535][I][ipykernel_12897/30352159:21:<module>] train_step=20 dt=2.289 energy=-1519.041 logprob=-1519.097 logdet=0.056 sldf=0.042 sldb=-0.048 sld=0.056 xeps=0.012 veps=0.010 acc=0.880 sumlogdet=-0.022 beta=6.000 acc_mask=0.875 loss=-361.916 plaqs=0.164 sinQ=-0.000 intQ=-0.001 dQint=0.024 dQsin=0.002
[2025-12-31 11:22:50,090777][I][ipykernel_12897/30352159:21:<module>] train_step=25 dt=2.657 energy=-1783.602 logprob=-1783.604 logdet=0.002 sldf=-0.001 sldb=0.002 sld=0.002 xeps=0.012 veps=0.011 acc=0.967 sumlogdet=0.014 beta=6.000 acc_mask=1.000 loss=-463.398 plaqs=0.196 sinQ=-0.001 intQ=-0.009 dQint=0.010 dQsin=0.001
[2025-12-31 11:23:00,910782][I][ipykernel_12897/30352159:21:<module>] train_step=30 dt=2.121 energy=-1992.581 logprob=-1992.687 logdet=0.106 sldf=0.070 sldb=-0.076 sld=0.106 xeps=0.013 veps=0.011 acc=0.907 sumlogdet=-0.029 beta=6.000 acc_mask=0.875 loss=-390.638 plaqs=0.215 sinQ=0.001 intQ=0.020 dQint=0.025 dQsin=0.002
[2025-12-31 11:23:12,800585][I][ipykernel_12897/30352159:21:<module>] train_step=35 dt=2.863 energy=-2166.294 logprob=-2166.477 logdet=0.183 sldf=0.119 sldb=-0.127 sld=0.183 xeps=0.013 veps=0.011 acc=0.983 sumlogdet=-0.030 beta=6.000 acc_mask=1.000 loss=-419.961 plaqs=0.239 sinQ=-0.001 intQ=-0.011 dQint=0.018 dQsin=0.001
[2025-12-31 11:23:25,106273][I][ipykernel_12897/30352159:21:<module>] train_step=40 dt=2.729 energy=-2411.163 logprob=-2411.124 logdet=-0.039 sldf=-0.044 sldb=0.084 sld=-0.039 xeps=0.013 veps=0.011 acc=0.467 sumlogdet=0.072 beta=6.000 acc_mask=0.500 loss=117.772 plaqs=0.261 sinQ=-0.001 intQ=-0.014 dQint=0.010 dQsin=0.001
[2025-12-31 11:23:36,199067][I][ipykernel_12897/30352159:21:<module>] train_step=45 dt=2.253 energy=-2521.896 logprob=-2521.849 logdet=-0.047 sldf=-0.027 sldb=0.023 sld=-0.047 xeps=0.014 veps=0.011 acc=0.875 sumlogdet=-0.015 beta=6.000 acc_mask=0.875 loss=-110.950 plaqs=0.275 sinQ=-0.000 intQ=-0.001 dQint=0.016 dQsin=0.001
[2025-12-31 11:23:46,263515][I][ipykernel_12897/30352159:21:<module>] train_step=50 dt=1.960 energy=-2705.348 logprob=-2705.224 logdet=-0.125 sldf=-0.090 sldb=0.114 sld=-0.125 xeps=0.014 veps=0.012 acc=0.955 sumlogdet=0.072 beta=6.000 acc_mask=0.875 loss=-304.184 plaqs=0.289 sinQ=0.000 intQ=0.000 dQint=0.012 dQsin=0.001
[2025-12-31 11:23:57,308554][I][ipykernel_12897/30352159:21:<module>] train_step=55 dt=2.079 energy=-2851.051 logprob=-2850.890 logdet=-0.161 sldf=-0.099 sldb=0.092 sld=-0.161 xeps=0.013 veps=0.012 acc=0.883 sumlogdet=-0.051 beta=6.000 acc_mask=0.875 loss=-286.513 plaqs=0.304 sinQ=0.000 intQ=0.006 dQint=0.019 dQsin=0.001
show the remaining 8 lines
[2025-12-31 11:24:07,402194][I][ipykernel_12897/30352159:21:<module>] train_step=60 dt=1.962 energy=-2979.375 logprob=-2979.152 logdet=-0.223 sldf=-0.142 sldb=0.146 sld=-0.223 xeps=0.013 veps=0.013 acc=1.000 sumlogdet=0.027 beta=6.000 acc_mask=1.000 loss=-456.457 plaqs=0.322 sinQ=0.001 intQ=0.012 dQint=0.007 dQsin=0.001
[2025-12-31 11:24:18,182804][I][ipykernel_12897/30352159:21:<module>] train_step=65 dt=1.809 energy=-3174.287 logprob=-3174.011 logdet=-0.276 sldf=-0.179 sldb=0.200 sld=-0.276 xeps=0.013 veps=0.013 acc=1.000 sumlogdet=0.063 beta=6.000 acc_mask=1.000 loss=-478.375 plaqs=0.344 sinQ=-0.000 intQ=-0.004 dQint=0.019 dQsin=0.001
[2025-12-31 11:24:28,457927][I][ipykernel_12897/30352159:21:<module>] train_step=70 dt=1.881 energy=-3395.198 logprob=-3394.849 logdet=-0.348 sldf=-0.214 sldb=0.212 sld=-0.348 xeps=0.013 veps=0.014 acc=1.000 sumlogdet=-0.039 beta=6.000 acc_mask=1.000 loss=-399.666 plaqs=0.362 sinQ=-0.000 intQ=-0.000 dQint=0.019 dQsin=0.001
[2025-12-31 11:24:38,221877][I][ipykernel_12897/30352159:21:<module>] train_step=75 dt=1.766 energy=-3494.564 logprob=-3494.095 logdet=-0.469 sldf=-0.292 sldb=0.290 sld=-0.469 xeps=0.013 veps=0.014 acc=1.000 sumlogdet=-0.012 beta=6.000 acc_mask=1.000 loss=-480.226 plaqs=0.381 sinQ=-0.001 intQ=-0.015 dQint=0.015 dQsin=0.001
[2025-12-31 11:24:47,896467][I][ipykernel_12897/30352159:21:<module>] train_step=80 dt=1.986 energy=-3711.719 logprob=-3710.920 logdet=-0.799 sldf=-0.481 sldb=0.447 sld=-0.799 xeps=0.013 veps=0.015 acc=1.000 sumlogdet=-0.128 beta=6.000 acc_mask=1.000 loss=-521.006 plaqs=0.402 sinQ=-0.000 intQ=-0.002 dQint=0.015 dQsin=0.001
[2025-12-31 11:24:58,094056][I][ipykernel_12897/30352159:21:<module>] train_step=85 dt=2.155 energy=-3878.745 logprob=-3877.647 logdet=-1.097 sldf=-0.698 sldb=0.720 sld=-1.097 xeps=0.012 veps=0.015 acc=1.000 sumlogdet=0.054 beta=6.000 acc_mask=1.000 loss=-624.681 plaqs=0.421 sinQ=-0.001 intQ=-0.011 dQint=0.013 dQsin=0.001
[2025-12-31 11:25:08,390086][I][ipykernel_12897/30352159:21:<module>] train_step=90 dt=2.014 energy=-4033.966 logprob=-4032.690 logdet=-1.276 sldf=-0.798 sldb=0.806 sld=-1.276 xeps=0.012 veps=0.016 acc=1.000 sumlogdet=0.006 beta=6.000 acc_mask=1.000 loss=-473.295 plaqs=0.440 sinQ=0.000 intQ=0.007 dQint=0.013 dQsin=0.001
[2025-12-31 11:25:19,868897][I][ipykernel_12897/30352159:21:<module>] train_step=95 dt=3.220 energy=-4188.433 logprob=-4186.851 logdet=-1.581 sldf=-0.977 sldb=0.967 sld=-1.581 xeps=0.012 veps=0.016 acc=1.000 sumlogdet=-0.075 beta=6.000 acc_mask=1.000 loss=-855.853 plaqs=0.457 sinQ=-0.002 intQ=-0.023 dQint=0.013 dQsin=0.001
In [13]:
dataset_train = history_train.get_dataset()
_ = history_train.plot_all(
title='Train',
num_chains=x.shape[0],
)Out[13]:
Evaluation
In [14]:
# state = ptExpSU3.trainer.dynamics.random_state(6.0)
xeval, history_eval = evaluate(
nsteps=50,
exp=ptExpSU3,
beta=6.0,
# x=state.x,
job_type='eval',
nlog=1,
nprint=50,
grab=True,
)Out[14]:
[2025-12-31 11:25:33,856738][I][pytorch/experiment:117:evaluate] Running 50 steps of eval at beta=6.0000
[2025-12-31 11:25:33,857659][I][pytorch/experiment:121:evaluate] STEP: 0
[2025-12-31 11:25:34,678488][I][pytorch/experiment:121:evaluate] STEP: 1
[2025-12-31 11:25:35,427750][I][pytorch/experiment:121:evaluate] STEP: 2
[2025-12-31 11:25:36,065972][I][pytorch/experiment:121:evaluate] STEP: 3
[2025-12-31 11:25:36,645581][I][pytorch/experiment:121:evaluate] STEP: 4
[2025-12-31 11:25:37,547535][I][pytorch/experiment:121:evaluate] STEP: 5
[2025-12-31 11:25:38,426851][I][pytorch/experiment:121:evaluate] STEP: 6
[2025-12-31 11:25:39,666662][I][pytorch/experiment:121:evaluate] STEP: 7
[2025-12-31 11:25:40,341826][I][pytorch/experiment:121:evaluate] STEP: 8
[2025-12-31 11:25:40,985461][I][pytorch/experiment:121:evaluate] STEP: 9
[2025-12-31 11:25:41,645344][I][pytorch/experiment:121:evaluate] STEP: 10
show the remaining 39 lines
[2025-12-31 11:25:42,194912][I][pytorch/experiment:121:evaluate] STEP: 11
[2025-12-31 11:25:42,764705][I][pytorch/experiment:121:evaluate] STEP: 12
[2025-12-31 11:25:43,275870][I][pytorch/experiment:121:evaluate] STEP: 13
[2025-12-31 11:25:43,851714][I][pytorch/experiment:121:evaluate] STEP: 14
[2025-12-31 11:25:44,421339][I][pytorch/experiment:121:evaluate] STEP: 15
[2025-12-31 11:25:44,964130][I][pytorch/experiment:121:evaluate] STEP: 16
[2025-12-31 11:25:45,552488][I][pytorch/experiment:121:evaluate] STEP: 17
[2025-12-31 11:25:46,164194][I][pytorch/experiment:121:evaluate] STEP: 18
[2025-12-31 11:25:47,225381][I][pytorch/experiment:121:evaluate] STEP: 19
[2025-12-31 11:25:47,842171][I][pytorch/experiment:121:evaluate] STEP: 20
[2025-12-31 11:25:48,429123][I][pytorch/experiment:121:evaluate] STEP: 21
[2025-12-31 11:25:48,960584][I][pytorch/experiment:121:evaluate] STEP: 22
[2025-12-31 11:25:49,581181][I][pytorch/experiment:121:evaluate] STEP: 23
[2025-12-31 11:25:50,099422][I][pytorch/experiment:121:evaluate] STEP: 24
[2025-12-31 11:25:50,961738][I][pytorch/experiment:121:evaluate] STEP: 25
[2025-12-31 11:25:51,545624][I][pytorch/experiment:121:evaluate] STEP: 26
[2025-12-31 11:25:52,099838][I][pytorch/experiment:121:evaluate] STEP: 27
[2025-12-31 11:25:52,675233][I][pytorch/experiment:121:evaluate] STEP: 28
[2025-12-31 11:25:53,301810][I][pytorch/experiment:121:evaluate] STEP: 29
[2025-12-31 11:25:53,875922][I][pytorch/experiment:121:evaluate] STEP: 30
[2025-12-31 11:25:54,463485][I][pytorch/experiment:121:evaluate] STEP: 31
[2025-12-31 11:25:54,992865][I][pytorch/experiment:121:evaluate] STEP: 32
[2025-12-31 11:25:55,579307][I][pytorch/experiment:121:evaluate] STEP: 33
[2025-12-31 11:25:56,034962][I][pytorch/experiment:121:evaluate] STEP: 34
[2025-12-31 11:25:56,577969][I][pytorch/experiment:121:evaluate] STEP: 35
[2025-12-31 11:25:57,062464][I][pytorch/experiment:121:evaluate] STEP: 36
[2025-12-31 11:25:57,736172][I][pytorch/experiment:121:evaluate] STEP: 37
[2025-12-31 11:25:58,244818][I][pytorch/experiment:121:evaluate] STEP: 38
[2025-12-31 11:25:58,744849][I][pytorch/experiment:121:evaluate] STEP: 39
[2025-12-31 11:25:59,430863][I][pytorch/experiment:121:evaluate] STEP: 40
[2025-12-31 11:26:00,047119][I][pytorch/experiment:121:evaluate] STEP: 41
[2025-12-31 11:26:00,781785][I][pytorch/experiment:121:evaluate] STEP: 42
[2025-12-31 11:26:01,914011][I][pytorch/experiment:121:evaluate] STEP: 43
[2025-12-31 11:26:02,710218][I][pytorch/experiment:121:evaluate] STEP: 44
[2025-12-31 11:26:03,226897][I][pytorch/experiment:121:evaluate] STEP: 45
[2025-12-31 11:26:03,716020][I][pytorch/experiment:121:evaluate] STEP: 46
[2025-12-31 11:26:04,245102][I][pytorch/experiment:121:evaluate] STEP: 47
[2025-12-31 11:26:04,732341][I][pytorch/experiment:121:evaluate] STEP: 48
[2025-12-31 11:26:05,213580][I][pytorch/experiment:121:evaluate] STEP: 49
In [15]:
dataset_eval = history_eval.get_dataset()
_ = history_eval.plot_all(title='Eval')Out[15]:
In [16]:
xeval = ptExpSU3.trainer.dynamics.unflatten(xeval)
logger.info(f"checkSU(x_eval): {g.checkSU(xeval)}")
logger.info(f"checkSU(x_eval): {g.checkSU(g.projectSU(xeval))}")Out[16]:
[2025-12-31 11:26:09,856048][I][ipykernel_12897/2193937887:2:<module>] checkSU(x_eval): (tensor[8] f64 x∈[1.386e-16, 1.523e-16] μ=1.437e-16 σ=4.820e-18 [1.401e-16, 1.386e-16, 1.523e-16, 1.436e-16, 1.473e-16, 1.470e-16, 1.416e-16, 1.390e-16], tensor[8] f64 x∈[4.900e-16, 7.789e-16] μ=6.360e-16 σ=1.034e-16 [6.312e-16, 5.391e-16, 5.597e-16, 7.129e-16, 6.306e-16, 7.453e-16, 4.900e-16, 7.789e-16])
[2025-12-31 11:26:09,868908][I][ipykernel_12897/2193937887:3:<module>] checkSU(x_eval): (tensor[8] f64 x∈[1.351e-16, 1.500e-16] μ=1.409e-16 σ=4.762e-18 [1.420e-16, 1.388e-16, 1.392e-16, 1.500e-16, 1.351e-16, 1.446e-16, 1.413e-16, 1.365e-16], tensor[8] f64 x∈[4.802e-16, 7.133e-16] μ=6.128e-16 σ=1.057e-16 [7.131e-16, 5.905e-16, 4.802e-16, 7.133e-16, 4.960e-16, 7.133e-16, 5.094e-16, 6.869e-16])
In [17]:
import matplotlib.pyplot as plt
pdiff = dataset_eval.plaqs - dataset_hmc.plaqs
pdiff
import xarray as xr
fig, ax = plt.subplots(figsize=(12, 4))
(pdiff ** 2).plot(ax=ax) #, robust=True)
ax.set_title(r"$\left|\delta U_{\mu\nu}\right|^{2}$ (HMC - Eval)")
outfile = Path(EVAL_DIR).joinpath('pdiff.svg')
#%xmode fig.savefig(outfile.as_posix(), dpi=400, bbox_inches='tight')
plt.show()Out[17]: