- Fixed a minor NaN bug in the M2 statistic.
- Added statistics tests (this module is most prone to silent bugs).
- Improved Pipeline performance (fixed a thread contention bug, moved to multiproc fan-in fan-out)
- Added additional error handling in stats, added tests.
- Added framework-wide docs.
- Fixed a bug where configs weren't being forwarded properly for the Adam optimizer.
- Essentially everything changed since v0.10.0.
- Rework DDP, now handled via
icegraph.trainer.distributed.DistributedTrainer. - Refactored
Trainerfor a cleaner initialization. - Added compatibility with Corsika datasets.
- Added a lightweight file inspector for LMDB.
- Processing pipeline now profiles stages and saves stage metrics to the envelope.
- Callbacks are now passed as
Trainer.CallbackSpecfor cleaner API and backend. - All callback registration and hook call functionality has been moved to a new mixin
icegraph.trainer.callbacks.base.CallbackRegistryMixin - Some config file schema cleanup.
- Dataset dataloader samplers are now initialized lazily to avoid init before DDP.
- Removed
post_init_check()method fromTaskStrategy(method unused). - Other changes/bug fixes.
- Implemented DDP, see
icegraph.trainer.distributed. - Added precision-recall (PR) plotter for classification tasks and linked to
icegraph.trainer.callbacks.MulticlassMetricsCallback. - Fixed a major bug in the LMDBDatasetShardReader, now is safe under fork/forkserver/spawn and does not reinstantiate on every call.
- Added a simple logo.
- Refactored trainer directory for clarity.
- Removed
var.__module__ = __name__from all__init__.pyfiles. - Added terminal dashboard for training progress.
- Renamed
OperatortoStagefor clarity. - Renamed
IGDatatoDataModulefor clarity. - Made most callbacks task agnostic.
- Made program forkserver/spawn compatible, fork is unstable with CUDA.
Trainernow runs on a protocol based architecture.- Implemented
icegraph.data.processor.ClassNormalizerwhich handles automatic enumeration of classes for training. - Some minor
Pipelinearchitecture improvements. - Added
icegraph.typesfor future consolidation of IceGraph types. - Added ROC and Confusion Matrix plotters and an associated callback for the trainer.
- Reverted to MSE loss for now.
- Fixed error on validation RMSE/MSE reporting.
- Changed export callback to export on validation and test steps, ignoring training steps.
- Fixed plots, especially fills.
- Implemented Huber loss for a more robust loss function.
- Fixed data leakage by calculating normalization constants using only the training dataset.
- Moved from tqdm to rich for better looking progress bars.
- Somewhat fixed installer, needs more work and currently only functions on Ubuntu systems with GLIBC>=2.35.
- Flipped val and test in trainer, they were incorrectly labelled.
- Improved regression plots, added (somewhat functional) bias plots, still need work.
- Added the ability to include labels that are not targets, these are provided to the trainer during evaluation loops, useful for analysis and plotting via callbacks.
- Fixed a warning about non-writable tensors.
- API cleanup, some files moved and some renamed.
- Removed old
icegraph.pathutils.
- Renamed multiple files for clarity.
- Moved
icegraph.pathutilsintoicegraph.utils.pathutils.
- Fix multilabel training.
- Complete rewrite of processing pipeline, added
icegraph.data.pipeline.Pipelineobject for single pass data processing. All data processing is now handled by thePipelineobject which accepts an extractor, any number of processors, and a writer (collectively called "operators"). ThePipelinewill wire each stage together and stream data through. Custom operators are supported. - Added regression parity plots and associated callback.
- Moved from ReLU to LeakyReLU for activation function.
- Moved from log scaling to asinh scaling for future proofing and built-in compatibility with negative values.
- Normalization now occurs at runtime on GPU, and is not hard-coded into data so it can be modified on the fly without any reprocessing required.
- Updated example scripts and README.md.
- Fixed a bug with normalization in
FeatureProcessor. Normalization now happens at runtime on the accelerator. - Data is now stored in LMDB under the 'data' sub-database, added a new 'meta' sub-database which stores local sample statistics, schemas, and other info.
- Each file now stores local statistics, allowing for global statistics generation at runtime. This allows for on-the-fly changing to normalization schemes, and if a file is lost normalization is automatically modified to account for it without having to reprocess files.
- Added
DatasetRegistry.profile()which allows measurement of data throughput speeds. This helps with dataloader tuning. - Added the base class
icegraph.trainer.callbacks.NormCallback, which allows for creation of custom normalizers for training. - Packaged normalizers can be selected in config.yaml under
training:normalizer:. - Modified example scripts and README to reflect API changes.
LMDBMergeris marked as disabled until a future fix.- Added
icegraph.data.readers.LMDBConfiguredShardReaderwhich allows for very efficient, high-speed, and multiprocess safe reading of any number of LMDB files. API is the same for any number of files. This makes file merging all but unnecessary, and circumvents memory constraints by only holding a set number of environments open at one time. Must be pre-configured viaLMDBConfiguredShardReader.configure(). - Added
icegraph.data.readers.LMDBReaderfor simple LMDB file reads. - Suppressed some redundant warnings that cluttered CLI.
- Renamed
DatasetSplittertoSplitMapBuilderto reflect its change in functionality. Now generates a map file containing split info instead of splitting files on disk. - Removed stratified splitting until a future update.
IGDatamust now be configured viaIGData.configure()before instantiation of datasets.IGDatanow inherits fromtorch.utils.data.Datasetinstead oftorch_geometric.data.Dataset.- Features are now stored in LMDB as dense arrays, which allows for much faster load speeds and better manipulation. Column names are stored under the metadata sub-database
meta/schema:. - Most processes now accept sources as inputs, which can be a single file, a list of files, or a directory containing files.
- Added
icegraph.utils.Statistics, which handles calculation of statistics and stat merging. - Began building tests, very minimal at the moment.
- Some API changes (see README.md) and bug fixes.
- Fixed bug where if run outside of Icetray environment, got a cryptic attribute error. Now raises a descriptive import error.
- Added
CDFPlot,PDFPlot,ChargeDistPlot, and a new base classIGDistributionPlot. - Added a new subpackage
icegraph.data.pulsescontaining aPulsestype that holds some utility methods for pulse data analysis.
- Fixed a bug with multi-objective regression resulting in mismatched tensor sizes.
- Improved the
LMDBMerger, now runs around 3x faster.
- Refactored the
Trainerfor more future extensibility. Created aModelFactoryand reworked theTrainerto run on a callback architecture. - Fixed an issue with incorrect RMSE and MSE calculation during training. Both are now correct.
- Fixed the autodocs, this time they work as expected.
- Added more robust error handling throughout. Still work in progress for full error handling.
- Updated installation instructions in README.md.
- Improved and pruned the config system slightly, and added config validation via pydantic.
- Added TensorBoard support via the
TensorBoardCallbackcallback.
- Slightly renamed some
icegraph.datasubmodules for clarity. - Renamed
TransformToDataset->FeatureProcessor. - Added
icegraph.pathutilsfor more user friendly path handling. Trainernow runs test and saves model after each train epoch.- Added
default_dirto config.yaml; if no path is passed to any part of the pipeline, the system will automatically store and organize files here. - Modified examples scripts to reflect API changes.
- Removed program_metadata.yaml, it was completely pointless. Replaced with
icegraph.__version__. - Another attempt to fix autodocs.
- (Hopefully) fixed auto documentation. (Didn't work :(, will fix later)
- Added a minimal usage guide for non-parallelized workflows.
- Added example scripts under icegraph/examples for data processing and training.
- Added installation instructions and fixed some issues with installation.
- Moved internal configuration files to
icegraph.icegraph.config.defaults. - Replaced setup.py --> MANIFEST.in, setup.cfg, pyproject.toml.
- Many changes, backend class naming has been overhauled.
- Restructured the API, reduced the black-boxiness of the program.
- Added file merging utilities for LMDB and HDF5.
- Aggressively refactored some portions of code, especially in
icegraph.datamodule. - Added
GravNetmodel for training, along with a rudimentaryTrainerclass. - Removed old trainer models and modules.
- Config is now globally accessible via
IGConfig.register(), no longer need to pass downstream. icegraph.data.convertis now a placeholder submodule.- Many other minor changes.
- Reorganized the config file for clarity.
- Changed the feature plot to generate 3 1D histograms instead of 1 2D histogram.
- Added rudimentary feature plotting. Simply run
plot = FeaturePlot(dataset_registry, config), then callplot.plot_feature("<feature_name>", save_path="<save_path>").
HDF5ToParquet(since been replaced with FeatureProcessor) converter module no longer combines ID's into composite keys, leaving them as separate columns. This massively improves program speed as packing and unpacking ID's added significant overhead. This also allows for dataset splitting selection strings to target any existing column in the truth table.- Moved project version to a config file, project name is still an
IGConfigclass attribute as it is not expected to change. - DOM (x, y, z) positions are now included as parameters for training.
- Added more error handling, e.g. selection strings are now pre-verified before querying data.
- Added an option to specify the number of workers when multiprocessing under the global config file. The program will never try to start more workers than there are CPUs available.
- Some code cleanup.
- Parallelized the cache builder, runs much faster now.
- Added
icegraph.data.base.workersfor defining/handling multiprocessing workers. - Reordered module imports to match industry standards.
- Added more error handling.
- Added data caching for fast training, need to parallelize the cache builder.
- Other changes.
- Restructured the project: moved icegraph submodules converter, extractor and cache to
icegraph.data. - Added some plotting functionality, can generate very basic feature plots using the
icegraph.render.FeaturePlotclass. - Added
icegraph.geometrysubmodule, addedDetectorclass to geometry submodule to handle tasks related to the physical detector. - Created
icegraph.data.DatasetRegistrywhich handles generating training splits. - Splits are resolved via a naive string resolver, allowing for selections for each split based on Event number in config.yaml. There are plans to expand this functionality.
- Moved the base
IGDataclass toicegraph.data.base. - Other minor fixes/changes.
- Changed some class names to improve clarity.
- Other minor fixes to docs.
- Added sphinx automated documentation.
- Full datasets can now be loaded via
icegraph.dataset.Data.from_config(). - Added configuration handling via icegraph.config.Config.
- Significantly improved internal documentation.
- Condensed user configs to one file for usability, internal configs are separate.
- Slightly optimized caching for faster repeated conversions via
icegraph.cache.I3ConversionCache(since been renamed to IGConverterCache). - Other minor changes.
- Implementation of semantic versioning. See https://semver.org/.