{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## 08. N-Body Neural Force Fields" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# disable GPU. Remove this if you've compiled HOOMD for GPU\n", "import os\n", "os.environ['CUDA_VISIBLE_DEVICES'] = '-1'\n", "\n", "\n", "# import the hoomd, htf packages\n", "import hoomd\n", "import hoomd.htf as htf\n", "import tensorflow as tf\n", "import matplotlib.pyplot as plt\n", "from MDAnalysis import Universe" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build the SimModel\n", "\n", "Here we build a 2 hidden-layer N-body neural force fields. The inputs are the nearest N neighbors." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "class NlistNN(htf.SimModel):\n", " def setup(self, dim, top_neighs):\n", " self.dense1 = tf.keras.layers.Dense(dim)\n", " self.dense2 = tf.keras.layers.Dense(dim)\n", " self.last = tf.keras.layers.Dense(1)\n", " self.top_neighs = top_neighs\n", "\n", " def compute(self, nlist, positions, box):\n", " rinv = htf.nlist_rinv(nlist)\n", " # closest neighbors have largest value in 1/r, take top\n", " sorted_n = tf.reshape(tf.sort(rinv, axis=1, direction='DESCENDING'), [-1, self.nneighbor_cutoff])\n", " top_n = sorted_n[:, :self.top_neighs]\n", " # run through NN\n", " x = self.dense1(top_n)\n", " x = self.dense2(x)\n", " pair_energy = self.last(x)\n", " # get per-particle energy\n", " energy = tf.reduce_sum(pair_energy, axis=1)\n", " forces = htf.compute_nlist_forces(nlist, energy)\n", " # don't output last column of forces, pairwise energy, since it's meaningless here\n", " return forces[:,:3], energy\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training from a Trajectory File\n", "\n", "We will compile our model and then train against a trajectory. If this were a real example, we would be training against the forces in the trajectory but this trajectory (to save space) has no forces. Instead, we will train to make our forces match the positions of the trajctory, which makes no physical sense, but it has the correct dimensions." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 801/801 [00:02<00:00, 292.22it/s]\n", "100%|██████████| 801/801 [00:01<00:00, 548.24it/s]\n", "100%|██████████| 801/801 [00:01<00:00, 537.72it/s]\n" ] } ], "source": [ "model = NlistNN(128, dim=16, top_neighs=8)\n", "# when we compile, add a None loss so as to not train the second output\n", "# which is energy\n", "model.compile('Adam', ['MeanSquaredError', None])\n", "universe = Universe('test_topol.pdb', 'test_traj.trr')\n", "losses = []\n", "for epoch in range(3):\n", " for inputs, ts in htf.iter_from_trajectory(128, universe, r_cut=25, period=5):\n", " #labels = ts.forces\n", " labels = ts.positions\n", " loss = model.train_on_batch(inputs, labels)\n", " losses.append(loss)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(losses)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Inferrence with the Model\n", "\n", "Now we will run a particle simulation with our model." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "HOOMD-blue v2.9.0 CUDA (10.1) DOUBLE HPMC_MIXED SSE SSE2 SSE3 SSE4_1 SSE4_2 AVX AVX2 \n", "Compiled: 03/03/2021\n", "Copyright (c) 2009-2019 The Regents of the University of Michigan.\n", "-----\n", "You are using HOOMD-blue. Please cite the following:\n", "* J A Anderson, C D Lorenz, and A Travesset. \"General purpose molecular dynamics\n", " simulations fully implemented on graphics processing units\", Journal of\n", " Computational Physics 227 (2008) 5342--5359\n", "* J Glaser, T D Nguyen, J A Anderson, P Lui, F Spiga, J A Millan, D C Morse, and\n", " S C Glotzer. \"Strong scaling of general-purpose molecular dynamics simulations\n", " on GPUs\", Computer Physics Communications 192 (2015) 97--107\n", "-----\n", "no CUDA-capable device is detected\n", "HOOMD-blue is running on the CPU\n", "notice(2): Group \"all\" created containing 256 particles\n", "notice(2): Force mode is FORCE_MODE.tf2hoomd \n", "notice(2): Starting TensorflowCompute \n", "notice(2): completed reallocate\n", "notice(2): Setting flag indicating virial modification will occur\n", "notice(2): -- Neighborlist exclusion statistics -- :\n", "notice(2): Particles with 0 exclusions : 256\n", "notice(2): Neighbors included by diameter : no\n", "notice(2): Neighbors excluded when in the same body: no\n", "** starting run **\n", "Time 00:00:05 | Step 1000 / 1000 | TPS 179.119 | ETA 00:00:00\n", "Average TPS: 179.054\n", "---------\n", "-- Neighborlist stats:\n", "0 normal updates / 10 forced updates / 0 dangerous updates\n", "n_neigh_min: 62 / n_neigh_max: 68 / n_neigh_avg: 64.4219\n", "shortest rebuild period: 100\n", "-- Cell list stats:\n", "Dimension: 3, 3, 1\n", "n_min : 25 / n_max: 34 / n_avg: 28.4444\n", "** run complete **\n" ] } ], "source": [ "########### Hoomd-Sim Code ################\n", "hoomd.context.initialize('--mode=cpu')\n", "\n", "tfcompute = htf.tfcompute(model)\n", "\n", "# create a square lattice\n", "system = hoomd.init.create_lattice(unitcell=hoomd.lattice.sq(a=1.2),\n", " n=[16,16])\n", "nlist = hoomd.md.nlist.cell()\n", "# NVT ensemble\n", "hoomd.md.integrate.mode_standard(dt=1e-4)\n", "hoomd.md.integrate.nvt(group=hoomd.group.all(), kT=0.1, tau=0.5).randomize_velocities(seed=1)\n", "tfcompute.attach(nlist, r_cut=5, save_output_period=5)\n", "#run with our silly model\n", "hoomd.run(1e3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Analysis\n", "\n", "This model is not properly trained so there is not much analysis to do. We'll just take a look at the energy" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "e = tf.reduce_sum(tfcompute.outputs[0], axis=1)\n", "plt.plot(e)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.8" } }, "nbformat": 4, "nbformat_minor": 2 }