Known Issues

The following is a list of known issues. To report another issue, please use the issue tracker.

Using Positions

Hoomd re-orders positions to improve performance. If you are using CG mappings that rely on ordering of positions, be sure to disable this:

c = hoomd.context.initialize()
c.sorter.disable()

Exploding Gradients

There is a bug in norms (https://github.com/tensorflow/tensorflow/issues/12071) that somtimes prevents optimizers to work well with TensorFlow norms. Note that this is only necessary if you’re summing up gradients, like what is commonly done in computing gradients in optimizers. This isn’t usually an issue for just computing forces. There are three ways to deal with this:

Small Training Rates

When Training something like a Lennard-Jones potential or other 1/r potential, high gradients are possible. You can prevent expoding gradients by using small learning rates and ensuring variables are initialized so that energies are finite.

Safe Norm

There is a workaround (safe_norm()) in HOOMD-TF. There is almost no performance penalty, so it is fine to replace tf.norm with safe_norm() throughout. This method adds a small amount to all the norms though, so if you rely on some norms being zero it will not work well.

Clipping Gradients

Another approach is to clip gradients instead of using safe_norm:

optimizer = tf.train.AdamOptimizer(1e-4)
gvs = optimizer.compute_gradients(cost)
capped_gvs = [(tf.clip_by_norm(grad, 1.0), var) for grad, var in gvs]
train_op = optimizer.apply_gradients(capped_gvs)

Neighbor Lists

Using a max-size neighbor list is non-ideal, especially in CG simulations where density is non-uniform.