git: 73b74a5205b9 - main - misc/lbann: update 0.102-254 → 0.104

Yuri Victorovich <[email protected]> Sat, 01 Aug 2026 18:15:03 +0000
Newsgroups gmane.os.freebsd.devel.cvs.ports
Message-ID <[email protected]>
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=73b74a5205b9016c1a6221e432aaebe2a2c752fd

commit 73b74a5205b9016c1a6221e432aaebe2a2c752fd
Author:     Yuri Victorovich <[email protected]>
AuthorDate: 2026-08-01 18:11:09 +0000
Commit:     Yuri Victorovich <[email protected]>
CommitDate: 2026-08-01 18:11:24 +0000

    misc/lbann: update 0.102-254 → 0.104
    
    PR:             295214
    Submitted by:   Chad Jacob Milios <[email protected]> (initial version, additional changes were made on top of his patch to make it build)
---
 misc/lbann/Makefile                                | 23 +++++--
 misc/lbann/distinfo                                |  6 +-
 misc/lbann/files/patch-CMakeLists.txt              |  4 +-
 .../lbann/files/patch-cmake_modules_SetupMPI.cmake | 24 +++++++
 .../patch-include_lbann_comm__nb__request.hpp      | 10 +++
 .../files/patch-src_callbacks_memory__profiler.cpp | 11 ++++
 ...readers_unit__test_data__reader__HDF5__test.cpp | 16 +++++
 ...ers_unit__test_data__reader__common__catch2.cpp | 16 +++++
 ...ers_unit__test_data__reader__common__catch2.hpp | 16 +++++
 ...st_data__reader__smiles__fetch__datum__test.cpp | 25 +++++++
 ...st_data__reader__smiles__sample__list__test.cpp | 16 +++++
 ...aders_unit__test_data__reader__smiles__test.cpp | 16 +++++
 .../patch-src_execution__algorithms_CMakeLists.txt | 29 ++++++++
 .../patch-src_execution__algorithms_factory.cpp    | 25 +++++++
 ...ithms_unit__test_inference__algorithm__test.cpp | 25 +++++++
 ...it__test_training__algorithm__factory__test.cpp | 69 +++++++++++++++++++
 .../patch-src_models_unit__test_model__test.cpp    | 25 +++++++
 .../patch-src_models_unit__test_modify__test.cpp   | 25 +++++++
 .../files/patch-src_operators_math_binary.cpp      | 35 ++++++++++
 .../files/patch-src_operators_math_common.hpp      | 24 +++++++
 .../lbann/files/patch-src_operators_math_unary.cpp | 11 ++++
 ...patch-protobuf => patch-src_utils_protobuf.cpp} |  4 +-
 .../patch-src_utils_unit__test_CMakeLists.txt      | 26 ++++++++
 misc/lbann/pkg-plist                               | 77 +++++++++++++++-------
 24 files changed, 523 insertions(+), 35 deletions(-)

diff --git a/misc/lbann/Makefile b/misc/lbann/Makefile
index 82dde8802671..b2e2d1d249db 100644
--- a/misc/lbann/Makefile
+++ b/misc/lbann/Makefile
@@ -1,8 +1,6 @@
 PORTNAME=	lbann
 DISTVERSIONPREFIX=	v
-DISTVERSION=	0.102-254
-DISTVERSIONSUFFIX=	-g2e3012a9a
-PORTREVISION=	6
+DISTVERSION=	0.104
 CATEGORIES=	misc # machine-learning
 
 MAINTAINER=	[email protected]
@@ -11,12 +9,15 @@ WWW=		https://github.com/LLNL/lbann
 
 LICENSE=	APACHE20
 
-BROKEN=		many C++ errors, broken until the upstream would help, see https://github.com/LLNL/lbann/issues/2407
-
 BUILD_DEPENDS=	cereal>0:devel/cereal \
 		dihydrogen>0:math/dihydrogen \
 		zstr>0:archivers/zstr
-LIB_DEPENDS=	libconduit.so:science/conduit \
+LIB_DEPENDS=	libabsl_hash.so:devel/abseil \
+		libabsl_log_internal_message.so:devel/abseil \
+		libabsl_log_internal_nullguard.so:devel/abseil \
+		libabsl_spinlock_wait.so:devel/abseil \
+		libconduit.so:science/conduit \
+		libgcc_s.so:lang/gcc14 \
 		libhdf5.so:science/hdf5 \
 		libHydrogen_CXX.so:math/hydrogen \
 		libopenblas.so:math/openblas \
@@ -54,6 +55,16 @@ MPICH_USES=		mpi:mpich
 
 OPENMPI_USES=		mpi:openmpi
 
+PLIST_SUB=	VER=${DISTVERSION:C/\-.*//}
+
+post-test: # CMake/ctest does not register the Catch2 binaries; run them manually
+	@${ECHO_MSG} "===> Running LBANN sequential unit tests"
+	@cd ${BUILD_WRKSRC} && ${SETENV} ${TEST_ENV} ./unit_test/seq-catch-tests
+	@${ECHO_MSG} "===> Running LBANN MPI unit tests"
+	@cd ${BUILD_WRKSRC} && ${SETENV} ${TEST_ENV} ${MPIEXEC} -n 2 ./unit_test/mpi-catch-tests
+
+# tests as of 0.104: seq-catch-tests: All tests passed (38857 assertions in 82 test cases); mpi-catch-tests: All tests passed (18907 assertions in 185 test cases)
+
 post-install: # remove unnecessary files
 	@${RM} -r ${STAGEDIR}${PREFIX}/share/doc
 
diff --git a/misc/lbann/distinfo b/misc/lbann/distinfo
index 1d681fa7bd80..f866c5eb78b2 100644
--- a/misc/lbann/distinfo
+++ b/misc/lbann/distinfo
@@ -1,6 +1,6 @@
-TIMESTAMP = 1669925855
-SHA256 (LLNL-lbann-v0.102-254-g2e3012a9a_GH0.tar.gz) = e2a956216207fd745ed4eed0bfe763c5807ad4ab1d27417d6678738d07c2db35
-SIZE (LLNL-lbann-v0.102-254-g2e3012a9a_GH0.tar.gz) = 7973922
+TIMESTAMP = 1778513712
+SHA256 (LLNL-lbann-v0.104_GH0.tar.gz) = a847c7789082ab623ed5922ab1248dd95f5f89d93eed44ac3d6a474703bbc0bf
+SIZE (LLNL-lbann-v0.104_GH0.tar.gz) = 3745469
 SHA256 (KIwabuchi-havoqgt-100f63b_GH0.tar.gz) = 5f1c1bc00606ae9b7bd17e06ba89f6201e4d60b68860473b2453f190e45a4bd2
 SIZE (KIwabuchi-havoqgt-100f63b_GH0.tar.gz) = 12691923
 SHA256 (samadejacobs-moses-28932ce_GH0.tar.gz) = 2ffa21181289f9eb186909afa329bcbbc5ca72a6e7312f0d66c588d0d394b395
diff --git a/misc/lbann/files/patch-CMakeLists.txt b/misc/lbann/files/patch-CMakeLists.txt
index dbdb2efaaa6e..75070f40c702 100644
--- a/misc/lbann/files/patch-CMakeLists.txt
+++ b/misc/lbann/files/patch-CMakeLists.txt
@@ -1,9 +1,9 @@
 - workaround for the clang crash: https://github.com/llvm/llvm-project/issues/59308
 - clang crashes in debug info generation
 
---- CMakeLists.txt.orig	2022-12-06 02:37:48 UTC
+--- CMakeLists.txt.orig	2023-11-08 01:08:28 UTC
 +++ CMakeLists.txt
-@@ -725,7 +725,7 @@ if (LBANN_HAS_CUDA)
+@@ -800,7 +800,7 @@ endif (LBANN_HAS_CUDA)
  endif (LBANN_HAS_CUDA)
  
  # Fix the -g issue with Clang on OSX
diff --git a/misc/lbann/files/patch-cmake_modules_SetupMPI.cmake b/misc/lbann/files/patch-cmake_modules_SetupMPI.cmake
new file mode 100644
index 000000000000..193571681a29
--- /dev/null
+++ b/misc/lbann/files/patch-cmake_modules_SetupMPI.cmake
@@ -0,0 +1,24 @@
+-- Ensure the MPI C component is discovered, not just CXX. The dependency
+-- math/hydrogen already calls find_package(MPI COMPONENTS CXX) in its
+-- CMake config, which leaves MPI_C_FOUND unset. Because science/conduit
+-- exports targets (conduit_relay_mpi, conduit_relay_mpi_io,
+-- conduit_blueprint_mpi) that link against MPI::MPI_C, LBANN must also
+-- request the C component or CMake fails with:
+--   "The link interface of target ... contains: MPI::MPI_C but the target
+--    was not found."
+
+--- cmake/modules/SetupMPI.cmake.orig	2023-11-08 01:08:28 UTC
++++ cmake/modules/SetupMPI.cmake
+@@ -26,8 +26,10 @@
+ 
+ # This module configures MPI and ensures the library is setup properly
+ 
+-if (NOT MPI_CXX_FOUND)
+-  find_package(MPI REQUIRED COMPONENTS CXX)
++if (NOT MPI_CXX_FOUND OR NOT MPI_C_FOUND)
++  # Request C as well as CXX: science/conduit exports MPI targets that
++  # link against MPI::MPI_C, so the C component must be available.
++  find_package(MPI REQUIRED COMPONENTS C CXX)
+ endif ()
+ 
+ if (NOT TARGET MPI::MPI_CXX)
diff --git a/misc/lbann/files/patch-include_lbann_comm__nb__request.hpp b/misc/lbann/files/patch-include_lbann_comm__nb__request.hpp
new file mode 100644
index 000000000000..73579c04c65c
--- /dev/null
+++ b/misc/lbann/files/patch-include_lbann_comm__nb__request.hpp
@@ -0,0 +1,10 @@
+--- include/lbann/comm_nb_request.hpp.orig	2023-11-08 01:08:28 UTC
++++ include/lbann/comm_nb_request.hpp
+@@ -27,6 +27,7 @@
+ #ifndef LBANN_COMM_NB_REQUEST_HPP_INCLUDED
+ #define LBANN_COMM_NB_REQUEST_HPP_INCLUDED
+ 
++#include <mpi.h>
+ #include "lbann_config.hpp"
+ 
+ #ifdef LBANN_HAS_ALUMINUM
diff --git a/misc/lbann/files/patch-src_callbacks_memory__profiler.cpp b/misc/lbann/files/patch-src_callbacks_memory__profiler.cpp
new file mode 100644
index 000000000000..e3f6cd68f4c9
--- /dev/null
+++ b/misc/lbann/files/patch-src_callbacks_memory__profiler.cpp
@@ -0,0 +1,11 @@
+--- src/callbacks/memory_profiler.cpp.orig	2023-11-08 01:08:28 UTC
++++ src/callbacks/memory_profiler.cpp
+@@ -158,7 +158,7 @@ struct MemUsage
+   size_t total_mem;
+ 
+   MemUsage(const std::string& r, size_t m) : report(r), total_mem(m) {}
+-  bool operator<(const MemUsage& other) { return total_mem < other.total_mem; }
++  bool operator<(const MemUsage& other) const { return total_mem < other.total_mem; }
+ };
+ } // namespace
+ 
diff --git a/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__HDF5__test.cpp b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__HDF5__test.cpp
new file mode 100644
index 000000000000..efa876b2253b
--- /dev/null
+++ b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__HDF5__test.cpp
@@ -0,0 +1,16 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/data_readers/unit_test/data_reader_HDF5_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/data_readers/unit_test/data_reader_HDF5_test.cpp
+@@ -50,7 +50,6 @@
+ #include "./test_data/hdf5_hrrl_validate.sample_list"
+ #include "./test_data/hdf5_repack_data_and_schemas.yaml"
+ 
+-namespace pb = ::google::protobuf;
+ 
+ double get_bias_from_node_map(const lbann::hdf5_data_reader* reader,
+                               const std::string field_name);
diff --git a/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__common__catch2.cpp b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__common__catch2.cpp
new file mode 100644
index 000000000000..d99007bad613
--- /dev/null
+++ b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__common__catch2.cpp
@@ -0,0 +1,16 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf. Use the fully-qualified google::protobuf
+-- namespace so the unit tests build against the protobuf version available
+-- in the Ports tree.
+
+--- src/data_readers/unit_test/data_reader_common_catch2.cpp.orig	2026-08-01 17:43:19 UTC
++++ src/data_readers/unit_test/data_reader_common_catch2.cpp
+@@ -57,7 +57,7 @@ instantiate_data_readers(std::string prototext_in,
+                          lbann::generic_data_reader*& tournament_ptr)
+ {
+   lbann_data::LbannPB my_proto;
+-  if (!pb::TextFormat::ParseFromString(prototext_in, &my_proto)) {
++  if (!google::protobuf::TextFormat::ParseFromString(prototext_in, &my_proto)) {
+     throw "Parsing protobuf failed.";
+   }
+ 
diff --git a/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__common__catch2.hpp b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__common__catch2.hpp
new file mode 100644
index 000000000000..241bcecc0cdb
--- /dev/null
+++ b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__common__catch2.hpp
@@ -0,0 +1,16 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/data_readers/unit_test/data_reader_common_catch2.hpp.orig	2026-08-01 17:40:25 UTC
++++ src/data_readers/unit_test/data_reader_common_catch2.hpp
+@@ -36,7 +36,6 @@
+ 
+ #include "lbann/proto/lbann.pb.h"
+ #include <google/protobuf/text_format.h>
+-namespace pb = ::google::protobuf;
+ 
+ /** create a directory in /tmp; returns the pathname to the directory */
+ std::string create_test_directory(std::string base_name);
diff --git a/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__fetch__datum__test.cpp b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__fetch__datum__test.cpp
new file mode 100644
index 000000000000..927e9e6f47ce
--- /dev/null
+++ b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__fetch__datum__test.cpp
@@ -0,0 +1,25 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/data_readers/unit_test/data_reader_smiles_fetch_datum_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/data_readers/unit_test/data_reader_smiles_fetch_datum_test.cpp
+@@ -54,7 +54,6 @@
+ #include "test_data/smiles_reader_sample_list.txt"
+ #include "test_data/vocab.txt"
+ 
+-namespace pb = ::google::protobuf;
+ namespace utils = ::unit_test::utilities;
+ using lbann::file::join_path;
+ 
+@@ -107,7 +106,7 @@ TEST_CASE("SMILES functional black-box",
+ 
+   // Parse the data reader prototext
+   lbann_data::LbannPB my_proto;
+-  REQUIRE(pb::TextFormat::ParseFromString(smiles_reader_prototext, &my_proto));
++  REQUIRE(google::protobuf::TextFormat::ParseFromString(smiles_reader_prototext, &my_proto));
+ 
+   // Instantiate and load the data readers
+   std::map<lbann::execution_mode, std::shared_ptr<lbann::generic_data_reader>>
diff --git a/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__sample__list__test.cpp b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__sample__list__test.cpp
new file mode 100644
index 000000000000..a0ba91c7a179
--- /dev/null
+++ b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__sample__list__test.cpp
@@ -0,0 +1,16 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/data_readers/unit_test/data_reader_smiles_sample_list_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/data_readers/unit_test/data_reader_smiles_sample_list_test.cpp
+@@ -38,7 +38,6 @@
+ #include "lbann/data_readers/sample_list_impl.hpp"
+ #include "lbann/data_readers/sample_list_open_files_impl.hpp"
+ 
+-namespace pb = ::google::protobuf;
+ 
+ namespace {
+ 
diff --git a/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__test.cpp b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__test.cpp
new file mode 100644
index 000000000000..05a9483ed8e6
--- /dev/null
+++ b/misc/lbann/files/patch-src_data__readers_unit__test_data__reader__smiles__test.cpp
@@ -0,0 +1,16 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/data_readers/unit_test/data_reader_smiles_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/data_readers/unit_test/data_reader_smiles_test.cpp
+@@ -35,7 +35,6 @@
+ // The code being tested
+ #include "lbann/data_readers/data_reader_smiles.hpp"
+ 
+-namespace pb = ::google::protobuf;
+ 
+ TEST_CASE("SMILES string encoder", "[data_reader][smiles]")
+ {
diff --git a/misc/lbann/files/patch-src_execution__algorithms_CMakeLists.txt b/misc/lbann/files/patch-src_execution__algorithms_CMakeLists.txt
new file mode 100644
index 000000000000..877912c10d29
--- /dev/null
+++ b/misc/lbann/files/patch-src_execution__algorithms_CMakeLists.txt
@@ -0,0 +1,29 @@
+-- KFAC execution algorithm relies on the Aluminum (::Al) library, which
+-- is only available when LBANN_HAS_ALUMINUM is enabled. Skip compiling
+-- the KFAC implementation when Aluminum is disabled to avoid build errors
+-- from undefined ::Al types.
+
+--- src/execution_algorithms/CMakeLists.txt.orig	2026-08-01 17:36:16 UTC
++++ src/execution_algorithms/CMakeLists.txt
+@@ -27,7 +27,6 @@ set_full_path(THIS_DIR_SOURCES
+ set_full_path(THIS_DIR_SOURCES
+   execution_context.cpp
+   factory.cpp
+-  kfac.cpp
+   ltfb.cpp
+   sgd_execution_context.cpp
+   sgd_training_algorithm.cpp
+@@ -35,8 +34,12 @@ set_full_path(THIS_DIR_SOURCES
+   )
+ 
+ # Add the support class implementations
+-add_subdirectory(kfac)
+ add_subdirectory(ltfb)
++
++if (LBANN_HAS_ALUMINUM)
++  list(APPEND THIS_DIR_SOURCES kfac.cpp)
++  add_subdirectory(kfac)
++endif ()
+ 
+ # Propagate the files up the tree
+ set(SOURCES "${SOURCES}" "${THIS_DIR_SOURCES}" PARENT_SCOPE)
diff --git a/misc/lbann/files/patch-src_execution__algorithms_factory.cpp b/misc/lbann/files/patch-src_execution__algorithms_factory.cpp
new file mode 100644
index 000000000000..b5f1696ac303
--- /dev/null
+++ b/misc/lbann/files/patch-src_execution__algorithms_factory.cpp
@@ -0,0 +1,25 @@
+-- KFAC relies on the Aluminum (::Al) library. Only register the KFAC
+-- builder when LBANN is built with Aluminum support.
+
+--- src/execution_algorithms/factory.cpp.orig	2026-08-01 17:36:16 UTC
++++ src/execution_algorithms/factory.cpp
+@@ -24,7 +24,9 @@
+ // permissions and limitations under the license.
+ ////////////////////////////////////////////////////////////////////////////////
+ #include "lbann/execution_algorithms/factory.hpp"
++#ifdef LBANN_HAS_ALUMINUM
+ #include "lbann/execution_algorithms/kfac.hpp"
++#endif
+ #include "lbann/execution_algorithms/ltfb.hpp"
+ #include "lbann/execution_algorithms/sgd_training_algorithm.hpp"
+ #include "lbann/utils/make_abstract.hpp"
+@@ -41,7 +43,9 @@ lbann::TrainingAlgorithmFactory build_default_factory(
+   lbann::TrainingAlgorithmFactory fact;
+   fact.register_builder("SGD", lbann::make<lbann::SGDTrainingAlgorithm>);
+   fact.register_builder("LTFB", lbann::make<lbann::LTFB>);
++#ifdef LBANN_HAS_ALUMINUM
+   fact.register_builder("KFAC", lbann::make<lbann::KFAC>);
++#endif
+   return fact;
+ }
+ 
diff --git a/misc/lbann/files/patch-src_execution__algorithms_unit__test_inference__algorithm__test.cpp b/misc/lbann/files/patch-src_execution__algorithms_unit__test_inference__algorithm__test.cpp
new file mode 100644
index 000000000000..06869a8998a2
--- /dev/null
+++ b/misc/lbann/files/patch-src_execution__algorithms_unit__test_inference__algorithm__test.cpp
@@ -0,0 +1,25 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/execution_algorithms/unit_test/inference_algorithm_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/execution_algorithms/unit_test/inference_algorithm_test.cpp
+@@ -38,7 +38,6 @@
+ #include "lbann/proto/lbann.pb.h"
+ #include <google/protobuf/text_format.h>
+ 
+-namespace pb = ::google::protobuf;
+ 
+ namespace {
+ // This model is just an input layer into a softmax layer, so we can verify the
+@@ -65,7 +64,7 @@ auto make_model(lbann::lbann_comm& comm, int class_n)
+ auto make_model(lbann::lbann_comm& comm, int class_n)
+ {
+   lbann_data::LbannPB my_proto;
+-  if (!pb::TextFormat::ParseFromString(model_prototext, &my_proto))
++  if (!google::protobuf::TextFormat::ParseFromString(model_prototext, &my_proto))
+     throw "Parsing protobuf failed.";
+   // Construct a trainer so that the model can register the input layer
+   auto& trainer =
diff --git a/misc/lbann/files/patch-src_execution__algorithms_unit__test_training__algorithm__factory__test.cpp b/misc/lbann/files/patch-src_execution__algorithms_unit__test_training__algorithm__factory__test.cpp
new file mode 100644
index 000000000000..6d5c16685013
--- /dev/null
+++ b/misc/lbann/files/patch-src_execution__algorithms_unit__test_training__algorithm__factory__test.cpp
@@ -0,0 +1,69 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/execution_algorithms/unit_test/training_algorithm_factory_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/execution_algorithms/unit_test/training_algorithm_factory_test.cpp
+@@ -31,14 +31,12 @@
+ #include "lbann/utils/make_abstract.hpp"
+ 
+ #include <exception>
+-#include <google/protobuf/stubs/logging.h>
+ #include <lbann/execution_algorithms/factory.hpp>
+ 
+ #include "lbann/proto/training_algorithm.pb.h"
+ 
+ #include <google/protobuf/text_format.h>
+ 
+-namespace pb = ::google::protobuf;
+ 
+ #ifdef LBANN_USE_CATCH2_V3
+ static Catch::Matchers::StringContainsMatcher Contains(std::string const& str)
+@@ -62,7 +60,7 @@ parameters {
+ })proto";
+ 
+     lbann_data::TrainingAlgorithm algo_msg;
+-    REQUIRE(pb::TextFormat::ParseFromString(valid_prototext, &algo_msg));
++    REQUIRE(google::protobuf::TextFormat::ParseFromString(valid_prototext, &algo_msg));
+     REQUIRE(algo_msg.has_parameters());
+     REQUIRE(algo_msg.parameters().Is<lbann_data::SGD>());
+     REQUIRE(algo_msg.name() == "local sgd");
+@@ -87,11 +85,10 @@ parameters {
+     // Protobuf will log stuff to stderr when errors occur. We know
+     // these errors will occur, but they'll add potentially confusing
+     // output to the catch run, so we silence them in this section
+-    google::protobuf::LogSilencer tmp_silence_pb_logs;
+ 
+     lbann_data::TrainingAlgorithm algo_msg;
+     REQUIRE_FALSE(
+-      pb::TextFormat::ParseFromString(bad_domain_prototext, &algo_msg));
++      google::protobuf::TextFormat::ParseFromString(bad_domain_prototext, &algo_msg));
+   }
+   SECTION("Type URL error -- unknown class")
+   {
+@@ -105,10 +102,9 @@ parameters {
+   }
+ })proto";
+ 
+-    google::protobuf::LogSilencer tmp_silence_pb_logs;
+     lbann_data::TrainingAlgorithm algo_msg;
+     REQUIRE_FALSE(
+-      pb::TextFormat::ParseFromString(unknown_class_prototext, &algo_msg));
++      google::protobuf::TextFormat::ParseFromString(unknown_class_prototext, &algo_msg));
+   }
+ 
+   SECTION("Type URL error -- bad class parameters")
+@@ -123,10 +119,9 @@ parameters {
+   }
+ })proto";
+ 
+-    google::protobuf::LogSilencer tmp_silence_pb_logs;
+     lbann_data::TrainingAlgorithm algo_msg;
+     REQUIRE_FALSE(
+-      pb::TextFormat::ParseFromString(bad_class_prototext, &algo_msg));
++      google::protobuf::TextFormat::ParseFromString(bad_class_prototext, &algo_msg));
+   }
+ }
+ 
diff --git a/misc/lbann/files/patch-src_models_unit__test_model__test.cpp b/misc/lbann/files/patch-src_models_unit__test_model__test.cpp
new file mode 100644
index 000000000000..89f573cebeac
--- /dev/null
+++ b/misc/lbann/files/patch-src_models_unit__test_model__test.cpp
@@ -0,0 +1,25 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/models/unit_test/model_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/models/unit_test/model_test.cpp
+@@ -42,7 +42,6 @@
+ #include "lbann/proto/lbann.pb.h"
+ #include <google/protobuf/text_format.h>
+ 
+-namespace pb = ::google::protobuf;
+ 
+ namespace {
+ // model_prototext string is defined here as a "const std::string".
+@@ -53,7 +52,7 @@ auto make_model(lbann::lbann_comm& comm,
+                 const std::string& model_contents = model_prototext)
+ {
+   lbann_data::LbannPB my_proto;
+-  if (!pb::TextFormat::ParseFromString(model_contents, &my_proto))
++  if (!google::protobuf::TextFormat::ParseFromString(model_contents, &my_proto))
+     throw "Parsing protobuf failed.";
+   // Construct a trainer so that the model can register the input layer
+   auto& trainer =
diff --git a/misc/lbann/files/patch-src_models_unit__test_modify__test.cpp b/misc/lbann/files/patch-src_models_unit__test_modify__test.cpp
new file mode 100644
index 000000000000..a8528723a1c9
--- /dev/null
+++ b/misc/lbann/files/patch-src_models_unit__test_modify__test.cpp
@@ -0,0 +1,25 @@
+-- The "pb" namespace alias conflicts with the internal "pb" namespace used
+-- by newer versions of protobuf, and google/protobuf/stubs/logging.h has
+-- been removed. Use the fully-qualified google::protobuf namespace and
+-- drop the now-removed LogSilencer calls so the unit tests build against
+-- the protobuf version available in the Ports tree.
+
+--- src/models/unit_test/modify_test.cpp.orig	2026-08-01 17:40:25 UTC
++++ src/models/unit_test/modify_test.cpp
+@@ -41,7 +41,6 @@ using namespace lbann;
+ 
+ using namespace lbann;
+ 
+-namespace pb = ::google::protobuf;
+ 
+ namespace {
+ // model_prototext string is defined here as a "const std::string".
+@@ -50,7 +49,7 @@ auto make_model(lbann::lbann_comm& comm)
+ auto make_model(lbann::lbann_comm& comm)
+ {
+   lbann_data::LbannPB my_proto;
+-  if (!pb::TextFormat::ParseFromString(model_prototext, &my_proto))
++  if (!google::protobuf::TextFormat::ParseFromString(model_prototext, &my_proto))
+     throw "Parsing protobuf failed.";
+   // Construct a trainer so that the model can register the input layer
+   auto& trainer =
diff --git a/misc/lbann/files/patch-src_operators_math_binary.cpp b/misc/lbann/files/patch-src_operators_math_binary.cpp
new file mode 100644
index 000000000000..c0368fa665eb
--- /dev/null
+++ b/misc/lbann/files/patch-src_operators_math_binary.cpp
@@ -0,0 +1,35 @@
+--- src/operators/math/binary.cpp.orig	2023-11-08 01:08:28 UTC
++++ src/operators/math/binary.cpp
+@@ -395,8 +395,8 @@ struct LogicalAndOpImpl
+ {
+   DataT operator()(DataT const& x1, DataT const& x2) const noexcept
+   {
+-    bool const b1 = x1 != El::TypeTraits<DataT>::Zero() && !std::isnan(x1);
+-    bool const b2 = x2 != El::TypeTraits<DataT>::Zero() && !std::isnan(x2);
++    bool const b1 = x1 != El::TypeTraits<DataT>::Zero() && !internal::isnan(x1);
++    bool const b2 = x2 != El::TypeTraits<DataT>::Zero() && !internal::isnan(x2);
+     return (b1 && b2) ? El::TypeTraits<DataT>::One()
+                       : El::TypeTraits<DataT>::Zero();
+   }
+@@ -417,8 +417,8 @@ struct LogicalOrOpImpl
+ {
+   DataT operator()(DataT const& x1, DataT const& x2) const noexcept
+   {
+-    bool const b1 = x1 != El::TypeTraits<DataT>::Zero() && !std::isnan(x1);
+-    bool const b2 = x2 != El::TypeTraits<DataT>::Zero() && !std::isnan(x2);
++    bool const b1 = x1 != El::TypeTraits<DataT>::Zero() && !internal::isnan(x1);
++    bool const b2 = x2 != El::TypeTraits<DataT>::Zero() && !internal::isnan(x2);
+     return (b1 || b2) ? El::TypeTraits<DataT>::One()
+                       : El::TypeTraits<DataT>::Zero();
+   }
+@@ -439,8 +439,8 @@ struct LogicalXorOpImpl
+ {
+   DataT operator()(DataT const& x1, DataT const& x2) const noexcept
+   {
+-    bool const b1 = x1 != El::TypeTraits<DataT>::Zero() && !std::isnan(x1);
+-    bool const b2 = x2 != El::TypeTraits<DataT>::Zero() && !std::isnan(x2);
++    bool const b1 = x1 != El::TypeTraits<DataT>::Zero() && !internal::isnan(x1);
++    bool const b2 = x2 != El::TypeTraits<DataT>::Zero() && !internal::isnan(x2);
+     return (b1 || b2) && !(b1 && b2) ? El::TypeTraits<DataT>::One()
+                                      : El::TypeTraits<DataT>::Zero();
+   }
diff --git a/misc/lbann/files/patch-src_operators_math_common.hpp b/misc/lbann/files/patch-src_operators_math_common.hpp
new file mode 100644
index 000000000000..24caa1c19318
--- /dev/null
+++ b/misc/lbann/files/patch-src_operators_math_common.hpp
@@ -0,0 +1,24 @@
+--- src/operators/math/common.hpp.orig	2023-11-08 01:08:28 UTC
++++ src/operators/math/common.hpp
+@@ -29,8 +29,21 @@
+ #include "lbann/base.hpp"
+ #include "lbann/utils/profiling.hpp"
+ 
++#include <cmath>
++
+ namespace lbann {
+ namespace internal {
++
++template <typename T>
++inline bool isnan(T const& x)
++{
++  return std::isnan(x);
++}
++
++inline bool isnan(half_float::half const& x)
++{
++  return std::isnan(static_cast<float>(x));
++}
+ 
+ /** @brief A binary entrywise map c <- f(a,b).
+  */
diff --git a/misc/lbann/files/patch-src_operators_math_unary.cpp b/misc/lbann/files/patch-src_operators_math_unary.cpp
new file mode 100644
index 000000000000..9a94b2f5f2c0
--- /dev/null
+++ b/misc/lbann/files/patch-src_operators_math_unary.cpp
@@ -0,0 +1,11 @@
+--- src/operators/math/unary.cpp.orig	2023-11-08 01:08:28 UTC
++++ src/operators/math/unary.cpp
+@@ -44,7 +44,7 @@ struct LogicalNotOpImpl
+ {
+   DataT operator()(DataT const& x) const noexcept
+   {
+-    const auto& b = x != El::TypeTraits<DataT>::Zero() && !std::isnan(x);
++    const auto& b = x != El::TypeTraits<DataT>::Zero() && !internal::isnan(x);
+     return !b ? El::TypeTraits<DataT>::One() : El::TypeTraits<DataT>::Zero();
+   }
+   DataT operator()(DataT const& x, DataT const& /*dy*/) const noexcept
diff --git a/misc/lbann/files/patch-protobuf b/misc/lbann/files/patch-src_utils_protobuf.cpp
similarity index 95%
rename from misc/lbann/files/patch-protobuf
rename to misc/lbann/files/patch-src_utils_protobuf.cpp
index fae535a200d7..b6f1c26cc555 100644
--- a/misc/lbann/files/patch-protobuf
+++ b/misc/lbann/files/patch-src_utils_protobuf.cpp
@@ -1,4 +1,4 @@
---- src/utils/protobuf.cpp.orig	2022-11-12 00:17:51 UTC
+--- src/utils/protobuf.cpp.orig	2023-11-08 01:08:28 UTC
 +++ src/utils/protobuf.cpp
 @@ -41,9 +41,8 @@
  // should be refactored to use the specialized "zero-copy" streams
@@ -58,7 +58,7 @@
    return remove_scope_from_type(full_type);
  }
  
-@@ -171,7 +170,7 @@ void lbann::protobuf::text::fill(std::istream& is,
+@@ -171,7 +170,7 @@ void lbann::protobuf::text::fill(std::string const& st
  void lbann::protobuf::text::fill(std::string const& str,
                                   google::protobuf::Message& msg)
  {
diff --git a/misc/lbann/files/patch-src_utils_unit__test_CMakeLists.txt b/misc/lbann/files/patch-src_utils_unit__test_CMakeLists.txt
new file mode 100644
index 000000000000..400c46db24c2
--- /dev/null
+++ b/misc/lbann/files/patch-src_utils_unit__test_CMakeLists.txt
@@ -0,0 +1,26 @@
+-- python_test.cpp requires Python.h and embedded Python support.
+-- The port disables LBANN_WITH_EMBEDDED_PYTHON, so only build the test
+-- when embedded Python is actually enabled.
+
+--- src/utils/unit_test/CMakeLists.txt.orig	2026-08-01 17:42:04 UTC
++++ src/utils/unit_test/CMakeLists.txt
+@@ -36,7 +36,6 @@ set_full_path(THIS_DIR_SEQ_CATCH2_TEST_FILES
+   hash_test.cpp
+   output_helpers_test.cpp
+   protobuf_utils_test.cpp
+-  python_test.cpp
+   random_test.cpp
+   serialize_matrix_test.cpp
+   statistics_test.cpp
+@@ -46,6 +45,11 @@ set_full_path(THIS_DIR_SEQ_CATCH2_TEST_FILES
+   stubs/preset_env_accessor.hpp
+   stubs/preset_env_accessor.cpp
+   )
++
++if (LBANN_HAS_EMBEDDED_PYTHON)
++  list(APPEND THIS_DIR_SEQ_CATCH2_TEST_FILES
++    ${CMAKE_CURRENT_SOURCE_DIR}/python_test.cpp)
++endif ()
+ 
+ set_full_path(THIS_DIR_MPI_CATCH2_TEST_FILES
+   random_fill_test.cpp
diff --git a/misc/lbann/pkg-plist b/misc/lbann/pkg-plist
index 5a057642eeaa..2ebb35866c52 100644
--- a/misc/lbann/pkg-plist
+++ b/misc/lbann/pkg-plist
@@ -5,15 +5,11 @@ bin/lbann-cycgan
 bin/lbann-gan
 bin/lbann-help
 bin/lbann-inf
-etc/modulefiles/lbann/0.103.0
-etc/modulefiles/lbann/0.103.0.lua
-include/callbacks.pb.h
-include/data_coordinator.pb.h
-include/datatype.pb.h
-include/layers.pb.h
-include/lbann.pb.h
+etc/modulefiles/lbann/%%VER%%.0
+etc/modulefiles/lbann/%%VER%%.0.lua
 include/lbann/Elemental_extensions.hpp
 include/lbann/base.hpp
+include/lbann/callbacks/alternate_updates.hpp
 include/lbann/callbacks/callback.hpp
 include/lbann/callbacks/check_dataset.hpp
 include/lbann/callbacks/check_gradients.hpp
@@ -33,13 +29,15 @@ include/lbann/callbacks/dump_model_graph.hpp
 include/lbann/callbacks/dump_outputs.hpp
 include/lbann/callbacks/dump_weights.hpp
 include/lbann/callbacks/early_stopping.hpp
+include/lbann/callbacks/evaluate_progress.hpp
 include/lbann/callbacks/export_onnx.hpp
 include/lbann/callbacks/gpu_memory_usage.hpp
+include/lbann/callbacks/gradient_clipping.hpp
 include/lbann/callbacks/hang.hpp
-include/lbann/callbacks/imcomm.hpp
 include/lbann/callbacks/learning_rate.hpp
 include/lbann/callbacks/load_model.hpp
 include/lbann/callbacks/ltfb.hpp
+include/lbann/callbacks/memory_profiler.hpp
 include/lbann/callbacks/mixup.hpp
 include/lbann/callbacks/monitor_io.hpp
 include/lbann/callbacks/perturb_adam.hpp
@@ -49,6 +47,7 @@ include/lbann/callbacks/perturb_weights.hpp
 include/lbann/callbacks/print_model_description.hpp
 include/lbann/callbacks/print_statistics.hpp
 include/lbann/callbacks/profiler.hpp
+include/lbann/callbacks/progress_bar.hpp
 include/lbann/callbacks/replace_weights.hpp
 include/lbann/callbacks/save_images.hpp
 include/lbann/callbacks/save_model.hpp
@@ -62,10 +61,10 @@ include/lbann/callbacks/timer.hpp
 include/lbann/callbacks/variable_minibatch.hpp
 include/lbann/comm.hpp
 include/lbann/comm_impl.hpp
+include/lbann/comm_nb_request.hpp
 include/lbann/data_coordinator/buffered_data_coordinator.hpp
 include/lbann/data_coordinator/buffered_data_coordinator_impl.hpp
 include/lbann/data_coordinator/data_coordinator.hpp
-include/lbann/data_coordinator/data_coordinator_metadata.hpp
 include/lbann/data_coordinator/data_packer.hpp
 include/lbann/data_coordinator/io_data_buffer.hpp
 include/lbann/data_coordinator/io_data_buffer_impl.hpp
@@ -94,6 +93,7 @@ include/lbann/data_readers/data_reader_sample_list.hpp
 include/lbann/data_readers/data_reader_sample_list_impl.hpp
 include/lbann/data_readers/data_reader_smiles.hpp
 include/lbann/data_readers/data_reader_synthetic.hpp
+include/lbann/data_readers/metadata.hpp
 include/lbann/data_readers/sample_list.hpp
 include/lbann/data_readers/sample_list_conduit_io_handle.hpp
 include/lbann/data_readers/sample_list_hdf5.hpp
@@ -111,6 +111,7 @@ include/lbann/execution_algorithms/kfac.hpp
 include/lbann/execution_algorithms/kfac/execution_context.hpp
 include/lbann/execution_algorithms/kfac/kfac_block.hpp
 include/lbann/execution_algorithms/kfac/kfac_block_bn.hpp
+include/lbann/execution_algorithms/kfac/kfac_block_channelwise_fc.hpp
 include/lbann/execution_algorithms/kfac/kfac_block_fc_conv.hpp
 include/lbann/execution_algorithms/kfac/kfac_block_gru.hpp
 include/lbann/execution_algorithms/kfac/kfac_util.hpp
@@ -132,14 +133,19 @@ include/lbann/layers/activations/activation_layer_builders.hpp
 include/lbann/layers/activations/elu.hpp
 include/lbann/layers/activations/identity.hpp
 include/lbann/layers/activations/leaky_relu.hpp
+include/lbann/layers/activations/leaky_relu_impl.hpp
 include/lbann/layers/activations/log_softmax.hpp
 include/lbann/layers/activations/relu.hpp
+include/lbann/layers/activations/relu_impl.hpp
 include/lbann/layers/activations/softmax.hpp
+include/lbann/layers/activations/softmax_impl.hpp
 include/lbann/layers/data_type_distconv_adapter.hpp
 include/lbann/layers/data_type_layer.hpp
 include/lbann/layers/distconv_adapter.hpp
 include/lbann/layers/image/bilinear_resize.hpp
+include/lbann/layers/image/bilinear_resize_impl.hpp
 include/lbann/layers/image/composite_image_transformation.hpp
+include/lbann/layers/image/cutout.hpp
 include/lbann/layers/image/image_layer_builders.hpp
 include/lbann/layers/image/rotation.hpp
 include/lbann/layers/io/input_layer.hpp
@@ -155,33 +161,47 @@ include/lbann/layers/learning/entrywise_scale_bias.hpp
 include/lbann/layers/learning/fully_connected.hpp
 include/lbann/layers/learning/gru.hpp
 include/lbann/layers/loss/categorical_accuracy.hpp
+include/lbann/layers/loss/categorical_accuracy_impl.hpp
 include/lbann/layers/loss/cross_entropy.hpp
+include/lbann/layers/loss/cross_entropy_impl.hpp
 include/lbann/layers/loss/l1_norm.hpp
+include/lbann/layers/loss/l1_norm_impl.hpp
 include/lbann/layers/loss/l2_norm2.hpp
+include/lbann/layers/loss/l2_norm2_impl.hpp
 include/lbann/layers/loss/loss_layer_builders.hpp
 include/lbann/layers/loss/mean_absolute_error.hpp
+include/lbann/layers/loss/mean_absolute_error_impl.hpp
 include/lbann/layers/loss/mean_squared_error.hpp
+include/lbann/layers/loss/mean_squared_error_impl.hpp
 include/lbann/layers/loss/top_k_categorical_accuracy.hpp
+include/lbann/layers/loss/top_k_categorical_accuracy_impl.hpp
+include/lbann/layers/math/distconv/distconv_matmul.hpp
 include/lbann/layers/math/math_builders.hpp
 include/lbann/layers/math/matmul.hpp
 include/lbann/layers/misc/argmax.hpp
 include/lbann/layers/misc/argmin.hpp
 include/lbann/layers/misc/channelwise_mean.hpp
 include/lbann/layers/misc/channelwise_softmax.hpp
+include/lbann/layers/misc/channelwise_softmax_impl.hpp
 include/lbann/layers/misc/covariance.hpp
+include/lbann/layers/misc/covariance_impl.hpp
 include/lbann/layers/misc/dft_abs.hpp
 include/lbann/layers/misc/dist_embedding.hpp
+include/lbann/layers/misc/external.hpp
 include/lbann/layers/misc/mini_batch_index.hpp
 include/lbann/layers/misc/mini_batch_size.hpp
 include/lbann/layers/misc/misc_builders.hpp
 include/lbann/layers/misc/one_hot.hpp
+include/lbann/layers/misc/one_hot_impl.hpp
 include/lbann/layers/misc/rowwise_weights_norms.hpp
 include/lbann/layers/misc/rowwise_weights_norms_impl.hpp
 include/lbann/layers/misc/uniform_hash.hpp
 include/lbann/layers/misc/variance.hpp
+include/lbann/layers/misc/variance_impl.hpp
 include/lbann/layers/operator_layer.hpp
 include/lbann/layers/operator_layer_impl.hpp
 include/lbann/layers/regularizers/batch_normalization.hpp
+include/lbann/layers/regularizers/batch_normalization_impl.hpp
 include/lbann/layers/regularizers/dropout.hpp
 include/lbann/layers/regularizers/entrywise_batch_normalization.hpp
 include/lbann/layers/regularizers/instance_norm.hpp
@@ -197,11 +217,15 @@ include/lbann/layers/transform/crop.hpp
 include/lbann/layers/transform/cross_grid_sum.hpp
 include/lbann/layers/transform/cross_grid_sum_slice.hpp
 include/lbann/layers/transform/discrete_random.hpp
+include/lbann/layers/transform/distconv/distconv_gather.hpp
+include/lbann/layers/transform/distconv/distconv_nvshmem_vector_addressing.hpp
+include/lbann/layers/transform/distconv/distconv_scatter.hpp
 include/lbann/layers/transform/dummy.hpp
 include/lbann/layers/transform/evaluation.hpp
 include/lbann/layers/transform/gather.hpp
 include/lbann/layers/transform/gaussian.hpp
 include/lbann/layers/transform/hadamard.hpp
+include/lbann/layers/transform/identity_zero.hpp
 include/lbann/layers/transform/in_top_k.hpp
 include/lbann/layers/transform/permute.hpp
 include/lbann/layers/transform/pooling.hpp
@@ -209,7 +233,9 @@ include/lbann/layers/transform/reduction.hpp
 include/lbann/layers/transform/reshape.hpp
 include/lbann/layers/transform/scatter.hpp
 include/lbann/layers/transform/slice.hpp
+include/lbann/layers/transform/slice_impl.hpp
 include/lbann/layers/transform/sort.hpp
+include/lbann/layers/transform/sort_impl.hpp
 include/lbann/layers/transform/split.hpp
 include/lbann/layers/transform/stop_gradient.hpp
 include/lbann/layers/transform/sum.hpp
@@ -253,6 +279,7 @@ include/lbann/operators/math/binary_with_constant.hpp
 include/lbann/operators/math/clamp.hpp
 include/lbann/operators/math/math_builders.hpp
 include/lbann/operators/math/math_builders_impl.hpp
+include/lbann/operators/math/select.hpp
 include/lbann/operators/math/unary.hpp
 include/lbann/operators/operator.hpp
 include/lbann/optimizers/adagrad.hpp
@@ -264,16 +291,32 @@ include/lbann/optimizers/data_type_optimizer_impl.hpp
 include/lbann/optimizers/hypergradient_adam.hpp
 include/lbann/optimizers/hypergradient_adam_impl.hpp
 include/lbann/optimizers/optimizer.hpp
+include/lbann/optimizers/optimizer_impl.hpp
 include/lbann/optimizers/rmsprop.hpp
 include/lbann/optimizers/rmsprop_impl.hpp
 include/lbann/optimizers/sgd.hpp
 include/lbann/optimizers/sgd_impl.hpp
+include/lbann/proto/callbacks.pb.h
+include/lbann/proto/data_coordinator.pb.h
+include/lbann/proto/datatype.pb.h
 include/lbann/proto/datatype_helpers.hpp
 include/lbann/proto/factories.hpp
 include/lbann/proto/init_image_data_readers.hpp
+include/lbann/proto/layers.pb.h
+include/lbann/proto/lbann.pb.h
+include/lbann/proto/metrics.pb.h
+include/lbann/proto/model.pb.h
+include/lbann/proto/objective_functions.pb.h
 include/lbann/proto/operator_factory.hpp
 include/lbann/proto/operator_factory_impl.hpp
+include/lbann/proto/operators.pb.h
+include/lbann/proto/optimizers.pb.h
 include/lbann/proto/proto_common.hpp
+include/lbann/proto/reader.pb.h
+include/lbann/proto/trainer.pb.h
+include/lbann/proto/training_algorithm.pb.h
+include/lbann/proto/transforms.pb.h
+include/lbann/proto/weights.pb.h
 include/lbann/trainers/trainer.hpp
 include/lbann/transforms/normalize.hpp
 include/lbann/transforms/repack_HWC_to_CHW_layout.hpp
@@ -292,6 +335,7 @@ include/lbann/transforms/vision/cutout.hpp
 include/lbann/transforms/vision/grayscale.hpp
 include/lbann/transforms/vision/horizontal_flip.hpp
 include/lbann/transforms/vision/normalize_to_lbann_layout.hpp
+include/lbann/transforms/vision/pad.hpp
 include/lbann/transforms/vision/random_affine.hpp
 include/lbann/transforms/vision/random_crop.hpp
 include/lbann/transforms/vision/random_resized_crop.hpp
@@ -308,7 +352,6 @@ include/lbann/utils/cnpy_utils.hpp
 include/lbann/utils/commify.hpp
 include/lbann/utils/compiler_control.hpp
 include/lbann/utils/cufft_wrapper.hpp
-include/lbann/utils/cyg_profile.hpp
 include/lbann/utils/dataset.hpp
 include/lbann/utils/describable.hpp
 include/lbann/utils/description.hpp
@@ -388,6 +431,7 @@ include/lbann/utils/protobuf_utils.hpp
 include/lbann/utils/python.hpp
 include/lbann/utils/random.hpp
 include/lbann/utils/random_number_generators.hpp
+include/lbann/utils/reference_counter.hpp
 include/lbann/utils/running_statistics.hpp
 include/lbann/utils/serialization/cereal_utils.hpp
 include/lbann/utils/serialization/rooted_archive_adaptor.hpp
@@ -395,7 +439,6 @@ include/lbann/utils/serialization/serialize_half.hpp
 include/lbann/utils/serialization/serialize_matrices.hpp
 include/lbann/utils/serialization/serialize_matrices_impl.hpp
 include/lbann/utils/serialize.hpp
-include/lbann/utils/stack_profiler.hpp
 include/lbann/utils/stack_trace.hpp
 include/lbann/utils/statistics.hpp
 include/lbann/utils/summary.hpp
@@ -425,16 +468,6 @@ include/lbann/weights/weights.hpp
 include/lbann/weights/weights_helpers.hpp
 include/lbann/weights/weights_proxy.hpp
 include/lbann_config.hpp
-include/metrics.pb.h
-include/model.pb.h
-include/objective_functions.pb.h
-include/operators.pb.h
-include/optimizers.pb.h
-include/reader.pb.h
-include/trainer.pb.h
-include/training_algorithm.pb.h
-include/transforms.pb.h
-include/weights.pb.h
 lib/cmake/lbann/LBANNConfig.cmake
 lib/cmake/lbann/LBANNConfigVersion.cmake
 lib/cmake/lbann/LBANNTargets-%%CMAKE_BUILD_TYPE%%.cmake
@@ -464,7 +497,7 @@ lib/cmake/lbann/modules/SetupOpenMP.cmake
 lib/cmake/lbann/modules/SetupProtobuf.cmake
 lib/libLbannProto.so
 lib/liblbann.so
-lib/liblbann.so.0.103.0
+lib/liblbann.so.%%VER%%.0
 share/model_zoo/README.md
 share/model_zoo/data_readers/CANDLE/data_reader_candle_pilot2_3k_run16.prototext
 share/model_zoo/data_readers/CANDLE/pilot2/data_reader_candle_pilot2.prototext