Releases: ludwig-ai/ludwig
v0.5.5
What's Changed
- Bump Ludwig From v0.5.4 -> v0.5.5 by @arnavgarg1 in #2340
- Bug fix: Use safe rename which works across filesystems when writing checkpoints
- Fixed default eval_batch_size when setting batch_size=auto
- Update R2 score to handle single sample computation
Full Changelog: v0.5.4...v0.5.5
v0.5.4
What's Changed
- Cherrypick fixes to 0.5 by @justinxzhao in #2257
- Update ludwig version to v0.5.4. by @justinxzhao in #2265
Full Changelog: v0.5.3...v0.5.4
v0.5.3
What's Changed
- Changed CheckpointManager to write the latest checkpoint to a consistent filename by @tgaddair in #2123
- fix: restore existing credentials when exiting use_credentials context manager by @jeffreyftang in #2112
- Torchscript-compatible TabNet by @geoffreyangus in #2126
- Add tests to ensure optional imports are optional by @tgaddair in #2116
- Added ray 1.13.0 and nightly wheel tests to CI by @tgaddair in #2128
- fix: Add
default
to top level ofNumericOrStringOptions
schema by @ksbrar in #2119 - Comprehensive configs for trainer and combiner. by @justinxzhao in #2118
- Set saved_weights_in_checkpoint immediately after creating model. Also adds test. by @dantreiman in #2131
- Fix Torchscript for exclusively binary feature inputs by @geoffreyangus in #2103
- Fixes NaN handling in boolean dtypes by @geoffreyangus in #2058
- [pre-commit.ci] pre-commit suggestions by @pre-commit-ci in #2135
- Parallelizes URL reads for images using Ray/Multithreading by @geoffreyangus in #2048
- Fixes dtype of SPLIT column if already provided in CSV by @geoffreyangus in #2140
- Fixes FILL_WITH_MEAN missing value strategy with appropriate cast by @geoffreyangus in #2141
- Remove
tune_batch_size
from tabnet config by @ksbrar in #2145 - Accept kwargs in read_xsv by @jeffreyftang in #2151
- Remove all torch packages from the nightly test requirements by @tgaddair in #2157
- [Torchscript] Add Set output feature by @geoffreyangus in #2161
- Cleaning hyperopt logging by @arnavgarg1 in #2162
- enh: Aim experient tracking for Ludwig by @osoblanco in #2097
- Update to packaging version instead of LooseVersion by @arnavgarg1 in #2173
- rmspe: add epsilon to avoid division by zero by @jppgks in #2139
- Fix creating tensor from copy of numpy array warning messages by @arnavgarg1 in #2170
- [Torchscript] Add Vector preprocessing and postprocessing by @geoffreyangus in #2160
- [Torchscript] Add H3 preprocessing by @geoffreyangus in #2164
- Expose dtype as a parameter of the read_xsv function instead of a purely hardcoded value by @jeffreyftang in #2177
- [Torchscript] Adds Sequence and Text feature postprocessing by @geoffreyangus in #2163
- [Torchscript] Add Date feature preprocessing by @geoffreyangus in #2178
- Added flag for writing per trial logs in hyperopt by @ShreyaR in #2149
- Replace ray.state.nodes() with ray.nodes(). by @justinxzhao in #2183
- HYPEROPT: Migrate Sampler functionality to Executor by @jimthompson5802 in #2165
- Changes for enabling checkpoint syncing for hyperopt by @ShreyaR in #2115
- Adds mechanism for calibrating probabilities for category and binary features by @dantreiman in #1949
- fix: Set divisions for proc_cols directly from original dataset by @jeffreyftang in #2187
- Avoid unneeded total_entropy calculation when sparsity=0 by @amholler in #2190
- Fix changing parameters on plateau. by @justinxzhao in #2191
- [Torchscript] Adds NaN handling to preprocessing modules by @geoffreyangus in #2179
- Fix postprocessing on binary feature columns with number dtype by @geoffreyangus in #2189
- automl: Use auto batch size by default with tabnet by @tgaddair in #2150
- Update ludwig version to v0.5.3. by @justinxzhao in #2184
New Contributors
- @arnavgarg1 made their first contribution in #2162
- @osoblanco made their first contribution in #2097
Full Changelog: v0.5.2...v0.5.3
v0.5.2
What's Changed
- Addresses
SettingWithCopyWarning
inread_csv_with_nan
by @geoffreyangus in #2053 - Update AutoML to check for imbalanced binary or category output features by @amholler in #2052
- fix: Pin
jsonschema
requirement by @ksbrar in #2059 - fix: Adjust custom JSON schema for
betas
field on optimizers by @ksbrar in #2056 - Use the smaller, unanimated GIF version so that it loads properly in PyPi by @justinxzhao in #2063
- Make text encoder trainable property default to False for pre-trained HF encoders by @dantreiman in #2060
- Pin protobuf to 3.20.1 to workaround FieldDescriptor error by @justinxzhao in #2062
- Use the smaller, unanimated GIF version so that it loads properly in PyPI by @justinxzhao in #2064
- Factor pytorch device setting code by @amholler in #2068
- fix: pin protobuf to 3.20.1 in tests by @jeffreyftang in #2070
- Update torch nightly and pin torchvision to fix CI by @tgaddair in #2072
- Added explicit encode, combine, decode functions to ECD by @tgaddair in #2073
- Revert "Adds rule of thumb for determining embeddings size" by @justinxzhao in #2069
- Unpin torchvision by @tgaddair in #2077
- Restrict torchmetrics<0.9 and whylogs<1.0 until compatibility fixed by @tgaddair in #2079
- Adding new export for Triton by @brightsparc in #2078
- Adds step tracking at epoch level by @geoffreyangus in #2081
- Fix ray hyperopt by @ShreyaR in #1999
- Adds regression test for #2081 by @geoffreyangus in #2084
- Complete PR comments for hyperopt refactoring by @jimthompson5802 in #2082
- Parallelizes URL reads using Ray / Multithreading by @geoffreyangus in #2040
- Set Hyperopt Executor Type default to RAY by @jimthompson5802 in #2093
- Fixes shape issue in
_BinaryPostprocessing
by @geoffreyangus in #2094 - Rename
sequence_size
->max_sequence_length
by @justinxzhao in #2086 - Fix type hints for dropout, dropout parameter references, and add docs for FCLayer and FCStack. by @justinxzhao in #2061
- Fix to_numpy_dataset() for Dask series by @hungcs in #2095
- Add DATA_TRAIN_HDF5_FP in training_set_metadata for ParquetPreprocessor by @hungcs in #2096
- Adds torchscript-compatible Audio input feature by @geoffreyangus in #1980
- Fix progress bar ray by @magdyksaleh in #2051
- Fixes binary feature postprocessing upcast by @geoffreyangus in #2101
- Fixes for large scale hyperopt by @ShreyaR in #2083
- Changes batch norm momentum defaults to 1-momentum by @dantreiman in #2100
- Add imbalanced tabular dataset for developing AutoML heuristics by @amholler in #2106
- Deflakes and refactors torchscript tests by @geoffreyangus in #2109
- Fixed combiner schema creation by @tgaddair in #2114
- Added ability to stop and resume hyperopt / automl runs by @tgaddair in #2108
- Use the Backend to check for dask dataframes, instead of a hard check. by @justinxzhao in #2113
- Rename 'bias' to 'use_bias' for consistency by @dantreiman in #2104
- Update ludwig version to v0.5.2. by @justinxzhao in #2098
New Contributors
- @magdyksaleh made their first contribution in #2051
Full Changelog: v0.5.1...v0.5.2
v0.5.1
What's Changed
- refactor: Rename, reorganize schema module by @ksbrar in #1963
- Fix redundant import by @tgaddair in #2019
- fix: Various marshmallow improvements. by @ksbrar in #1975
- fixes nans in dask df engine by @geoffreyangus in #2020
- Adds regression tests for #2020 by @geoffreyangus in #2021
- Removes pinned torchtext and torch for windows. by @dantreiman in #1998
- Add AutoML inference for audio by @hungcs in #2023
- Added support for batch size and learning rate tuning using Ray backend by @tgaddair in #2024
- Added split column for a deterministic output so flakes stop by @connor-mccorm in #2028
- Workaround test_tune_batch_size_lr flakiness by @tgaddair in #2030
- Fixed ordering of imports for comet test by @tgaddair in #2031
- Adds regression tests for #2007 by @geoffreyangus in #2018
- Improve performance of
DataFrameEngine.df_like
by @geoffreyangus in #2029 - Fixed infinite loop in tune_batch_size by @tgaddair in #2034
- Fixed learning rate tuning on gpu by @tgaddair in #2035
- Fix SIGINT handler to modify the number of remaining training steps. by @justinxzhao in #2032
- upgrade: Update jsonschema validator to latest spec. by @ksbrar in #2036
- Bumps py3.7 Ray version to 1.12.0 by @geoffreyangus in #2041
- Added blocking warning for experiment CLI, and visual warning for tra… by @connor-mccorm in #2043
- Adds ability to export scripted ECD model without pre-/post- processing modules by @geoffreyangus in #2042
- Convert nan to 0 in avg_num_tokens() by @hungcs in #2046
- Fixing the trainable parameter in pretrained encoders by @w4nderlust in #2047
- Fixes trainability of sparse embeddings by @w4nderlust in #2049
- Adds rule of thumb for determining embeddings size by @w4nderlust in #2050
- Refactor HyperOpt to use RayTune by @jimthompson5802 in #1994
Full Changelog: v0.5...v0.5.1
v0.5: Declarative Machine Learning, now on PyTorch
Ludwig v0.5 is a complete renovation of Ludwig from the ground up with a focus on parity, scalability, deployment, reliability, and documentation. Ludwig v0.5 migrates our entire backend from TensorFlow to PyTorch and introduces several new features and technical improvements, including:
- Step-based training and evaluation to enable frequent sub-epoch monitoring of model health and evaluation metrics. This is particularly useful for large datasets that may be trained using large models.
- Data balancing: upsampling and downsampling during preprocessing to better proportioned datasets.
- End-to-end torchscript to support low-level optimized model deployment, including preprocessing and post-processing, to go directly from example to predictions.
- Ludwig on Ray with RayDatasets enabling significant training speed boosts for reading large datasets while training Ludwig models on a Ray cluster.
- The addition of MLPMixer and ViTEncoder as image encoders for state-of-the-art deep learning on image data.
- AutoML for tabular and text classification, integrated with distributed hyperparameter search using RayTune.
- Scalability optimizations with Dask, Modin, and Ray, enabling Ludwig to preprocess, train, and evaluate over datasets hundreds of gigabytes in size in tens of minutes.
- Config validation using marshmallow schemas revealing configuration typos or bad values early and increasing reliability.
- More tests. We've quadrupled the number of unit tests and end-to-end integration tests and we've expanded our CI testing to run in distributed and GPU settings. This strengthens Ludwig's stability and helps build confidence in new changes going forward.
Our team is thoroughly invested in improving the declarative ML experience, and, as part of the v0.5 release, we've revamped the getting started guide, user guide, and developer documentation. We've also published a handful of end-to-end tutorials with thoroughly documented notebooks on text, tabular, image, and multimodal classification that provide a deep walkthrough of Ludwig's functionality.
Migrating to PyTorch
Ludwig's migration to PyTorch comes from a substantial 6 month undertaking involving 230+ commits, changes to 70k+ lines of code, and contributions from 40+ people.
PyTorch's pythonic design and emphasis on developer experience are well-aligned with Ludwig's principles of simplicity, modularity, and extensibility. Switching to use PyTorch as Ludwig’s backend of choice was strongly motivated by the increase in productivity in development, debugging, and iteration that the more pythonic PyTorch API affords us as well as the great ecosystem the PyTorch community has built around it. With Ludwig on PyTorch, we're thrilled to see what developers, researchers, and data scientists in the PyTorch and broader deep learning community can bring to Ludwig.
Feature and Performance Parity
Over the last several months, we've moved all Ludwig encoders, combiners, decoders, and metrics for every data modality that Ludwig supports, as well as all of the backend infrastructure on Horovod and Ray, to PyTorch.
At the same time, we wanted to make sure that the experience of Ludwig users continues to be performant and delightful. We've run extensive comparisons between Ludwig v0.5 (PyTorch-based) and Ludwig v0.4 on text, image, and tabular datasets, evaluating training speed, inference throughput, and model performance, to verify that there's been no degradation.
Our results reveal roughly the same high GPU utilization (~90%) on several datasets with significant improvements in distributed training speed and memory usage without impacting model accuracy nor time to convergence. We'll be publishing a blog with more details on benchmarking soon.
New Features
In addition to the PyTorch migration, Ludwig v0.5 is packed with new functionality, features, and additional changes that make v0.5 the most feature-rich and robust release of Ludwig yet.
Step-based training and evaluation
Ludwig's train loop is epoch-based by default, with one round of evaluation per epoch (one pass through the dataset).
for epoch in num_epochs:
for batch in training_data.batches:
train(batch)
save_model(model_dir)
evaluation(training_data)
evaluation(validation_data)
evaluation(test_data)
print_results()
This is an appropriate fit for tabular datasets, which are small, fit in memory, and train quickly. However, this can be awkward for unstructured datasets, which tend to be much larger, and train more slowly due to larger models. Now, with step-based training and evaluation, users can configure a more frequent sub-epoch evaluation cadence to more regularly monitor metrics and model health.
Use steps_per_checkpoint
to run evaluation every N training steps, or checkpoints_per_epoch
to run evaluation N times per epoch.
trainer:
steps_per_checkpoint: 1000
trainer:
checkpoints_per_epoch: 2
Note that it is invalid to specify both checkpoints_per_epoch
and steps_per_checkpoint
simultaneously.
To further speed up evaluation, users can skip evaluation on the training set by setting evaluate_training_set
to False.
trainer:
evaluate_training_set: false
Data balancing
Users working with imbalanced datasets can specify an oversampling or undersampling parameter which will balance the data during preprocessing.
In this example, Ludwig will oversample the minority class to achieve a 50% representation in the overall dataset.
preprocessing:
oversample_minority: 0.5
In this example, Ludwig will undersample the majority class to achieve a 70% representation in the overall dataset.
preprocessing:
undersample_majority: 0.7
Data balancing is only supported for binary output classes. Specifying both parameters at the same time is also not supported.
When developing models, it can be useful to iterate quickly with a smaller portion of the dataset. Ludwig supports this with a new preprocessing parameter, sample_ratio
, which subsamples the dataset.
preprocessing:
sample_ratio: 0.7
End-to-end torchscript
Users can export trained ludwig models to torchscript with ludwig export_torchscript
.
ludwig export_torchscript –model=/path/to/model
Models that use number, category, and text binary features now support torchscript-compatible preprocessing, enabling end-to-end torchscript compilation.
inputs = {
'cat_feature': ['foo', 'bar']
'num_feature': torch.tensor([42, 7])
'bin_feature1': torch.tensor([True, False])
'bin_feature2': ['No', 'Yes']
}
scripted_model = model.to_torchscript()
output = scripted_model(inputs)
End to end torchscript compilation is also supported for text features that use torchscript-enabled torchtext tokenizers. We are actively working on adding support for other data types.
AutoML for Text Classification
In v0.4, we introduced experimental AutoML functionalities into Ludwig.
Ludwig AutoML automatically creates deep learning models given a dataset, its label column, and a time budget. Ludwig AutoML infers the input and output feature types, chooses the model architecture, and specifies the parameters and ranges across which to perform hyperparameter search.
auto_train_results = ludwig.automl.auto_train(
dataset=my_dataset_df,
target=target_column_name,
time_limit_s=7200,
tune_for_memory=False
)
Our initial AutoML work focused on tabular datasets, since good performance on such datasets is a current area of interest in the DL community. In v0.5, we expand on this work to develop and validate Ludwig AutoML for text classification.
Config validation against Marshmallow Schemas
The combiner
and trainer
sections of Ludwig configurations are now validated against official Marshmallow schemas. This centralizes documentation, flags configuration typos or bad values, and helps catch regressions.
Better Test Coverage
We've quadrupled the number of unit and integration tests and we've established new testing guidelines for well-tested contributions going forward. This strengthens Ludwig's stability, iterability, and helps build confidence in new changes.
Backward Compatibility
Despite all of the code changes...
v0.5rc2
Fixes loss reporting consistency issues, and shape-based metric calculation errors with SET output features.
v0.5rc1
v0.4.1: Ray training, Ray datasets, experimental AutoML with auto config generation integrated with hyperopt on RayTune, image improvements, Python3.9/TF2.7
Summary
This release features experimental AutoML with auto config generation and auto-training integrated with hyperopt on RayTune, and integrations with Ray training and Ray datasets. We're still working on a comprehensive overhaul of the documentation, and all the new functionality will all available in the upcoming v0.5 too.
Aside from critical bugs and new datasets, v0.4.1 will be the last release of Ludwig using TensorFlow. Starting with v0.5+ (release coming soon), Ludwig will use PyTorch as the backend for tensor computation. We will release a blogpost detailing the rationale and impact of this decision, but we wanted to do one last TensorFlow release to make sure that all those committed to a TensorFlow ecosystem that have used Ludwig so far could enjoy the benefits of many bug fixes and improvements we did on the codebase that were not specific to PyTorch.
The next version v0.5 will also have several additional improvements that we’ll be excited to share in the coming weeks.
Additions
- Non-absolute image path support by @hungcs in #1224
- Add image dim inference to schema by @hungcs in #1225
- Additional Tabular Datasets by @amholler (#1226, #1230, #1237)
- Initial implementation of the end-to-end autotrain module by @ANarayan in #1219
- [automl] AutoML Extended public API by @tgaddair in #1235
- Add image dimension inference to automl by @hungcs in #1243
- [automl] Memory Aware Config Tuning by @ANarayan in #1257
- Added DataFrame wrapper type and fixed usage of optional imports by @tgaddair in #1371
- Added Dask kwargs to Ray backend by @tgaddair in #1380
- Configure Dask to determine parallelism automatically by default by @tgaddair in #1383
- Add Ray backend to Ray hyperopt by @Yard1 in #1269
- Add additional hyperopt callbacks by @hungcs in #1388
- Added preprocessing callbacks by @tgaddair in #1398
- Added Slack and Twitter badges by @tgaddair in #1399
- Add support for Ray Train and Ray Datasets in training by @tgaddair in #1391
- Add combiner schema validation by @ksbrar in #1347
- Publish unit test results by @tgaddair in #1414
- Publish test results for fork repos as well by @EnricoMi in #1442
- Build docker images for tf-legacy by @tgaddair in #1504
- Added init_config and render_config command-line utils (#1506) by @tgaddair in #1514
- Add experiment heuristics to automl module (variant of Avanika PR 1362) by @amholler in #1507
- Add random_seed to auto_train API to improve repeatability by @amholler in #1619
- Support use_reference_config option to AutoML to add initial trial from relevant best past model by @amholler in #1636
- Add remote checkpoint support to ray tune post search evaluation by @amholler in #1646
- [datasets] Add remote filesystem support to datasets module by @ANarayan in #1244
- Add sample training by @amholler in #1227
- Add support for Santander Customer Satisfaction dataset, along with s… by @amholler in #1238
Improvements
- Allow logging params to mlflow from any epoch by @tgaddair in #1211
- Changed remote fs behavior to upload at the end of each epoch by @tgaddair in #1210
- Add metric and loss modules for RMSE, RMSPE, and AUC by @ANarayan in #1214
- [hyperopt] fixed metric_score to use test split when available by @tgaddair in #1239
- Fixed metric selection to ignore config split if unavailable by @tgaddair in #1248
- Ray Tune Intermediate Checkpoint Cleaning by @ANarayan in #1255
- Do not initialize Ray if already initalized by @Yard1 in #1277
- Changed default combiner to concat from tabnet by @ShreyaR in #1278
- Ray data migration by @ShreyaR in #1260
- Fix automl to treat binary as categorical when missing values present by @tgaddair in #1292
- Add serialization for DatasetInfo and round avg_words to int by @hungcs in #1294
- Cast
max_length
to int inbuild_sequence_matrix::pad
by @Yard1 in #1295 - [automl] update model config parameter ranges by @ANarayan in #1298
- Change INFER_IMAGE_DIMENSIONS default to True by @hungcs in #1303
- Add HTTPS retries for image urls by @hungcs in #1304
- Return None for unreadable images and try to infer num channels by @hungcs in #1307
- Add gray image/avg image fallbacks for unreachable images by @hungcs in #1312
- Account for image extensions during image type inference by @hungcs in #1335
- Fixed schema validation to handle null preprocessing values for strings by @tgaddair in #1344
- Added default size and output_size for tabnet by @tgaddair in #1355
- Removed DaskBackend and moved tests to RayBackend by @tgaddair in #1412
- Perform preprocessing first before hyperopt when possible by @tgaddair in #1415
- Employ a fallback str2bool mapping from the feature column's distinct values when the feature's values aren't boolean-like. by @justinxzhao in #1471
- Remove trailing dot in income label field in adult_census… by @amholler in #1475
- Update Ludwig AutoML Feature Type Selection by @amholler in #1485
- Update infer_type tests to reflect interface and functionality updates by @amholler in #1493
- Skip converting to TensorDType if the column is binary by @tgaddair in #1547
- Remove TensorDType conversion for all scalar types by @tgaddair in #1560
- Update AutoML tabular model type choice to remove heuristic for concat by @amholler in #1548
- Better handle empty fields with distinct_values=[] by @hungcs in #1574
- Port #1476 ('dict' option for weights_initializer and bias_initializer) to tf_legacy by @ksbrar in #1599
- Modify combiners to accept input_features as a dict instead of a list by @jeffreyftang in #1618
- Update hyperopt: Choose best model from validation data; For stopped Ray Tune trials, run evaluate at search end by @amholler in #1612
- Keep search_alg type in dict to record in hyperopt_statistics.json by @amholler in #1626
- For ames_housing, remove test.csv from processing; it has no label column which prevents test split eval by @amholler in #1634
- Improve Ludwig resilience to Ray Tune issues by @amholler in #1660
- Handle download gzip files by @amholler in #1676
- Upgrade tf from 2.5.2 to 2.7.0. by @justinxzhao in #1713
- Add basic precommit to tf-legacy to pass precommit checks on tf-legacy PRs. by @justinxzhao in #1718
- For kdd datasets, do not include unlabeled test data by default by @amholler in #1704
- Use config which has been previously validated by @vreyespue in #1213
- Update Readme to activate directly the virtualenv by @vreyespue in #1212
- doc: Correct README.md link to Developer Guide by @jimthompson5802 in #1217
- Update pandas version by @w4nderlust in #1223
- Modify Kaggle datasets to not process test sets by @ANarayan in #1233
- Restructure dataframe preprocessing setup and change to avoid creatin… by @amholler in #1240
Bug fixes
- Fixed Keras imports by @w4nderlust in #1215
- Fix assert in tabnet to be tf assert_rank by @w4nderlust in #1222
- Fixed read_csv for Dask by @tgaddair in #1247
- Fix TensorFlow CUDA version misma...
v0.4: Distributed processing and training with Ray and Dask, Distributed hyperopt with RayTune, TabNet, Remote FS, MLflow for monitoring and serving, new Datasets
Changelog
Additions
- Integrate ray tune into hyperopt (#1001)
- Added Ames Housing Kaggle dataset (#1098)
- Added functionality to obtain subtrees in the SST dataset (#1108)
- Added comparator combiner (#1113)
- Additional Text Classification Datasets (#1121)
- Added Ray remote backend and Dask distributed preprocessing (#1090)
- Added TabNet combiner and needed modules (#1062)
- Added Higgs Boson dataset (#1157)
- Added GitHub workflow to push to Docker Hub (#1160)
- Added more tagging schemes for Docker images (#1161)
- Added Docker build matrix (#1162)
- Added category feature > 1 dim to TabNet (#1150)
- Added timeseries datasets (#1149)
- Add TabNet Datasets (#1153)
- Forest Cover Type, Adult Census Income and Rossmann Store Sales datasets (#1165)
- Added KDD Cup 2009 datasets (#1167)
- Added Ray GPU image (#1170)
- Added support for cloud object storage (S3, GCS, ADLS, etc.) (#1164)
- Perform inference with Dask when using the Ray backend (#1128)
- Added schema validation to config files (#1186)
- Added MLflow experiment tracking support (#1191)
- Added export to MLflow pyfunc model format (#1192)
- Added MLP-Mixer image encoder (#1178)
- Added TransformerCombiner (#1177)
- Added TFRecord support as a preprocessing cache format (#1194)
- Added higgs boson tabnet examples (#1209)
Improvements
- Abstracted Horovod params into the Backend API (#1080)
- Added allowed_origins to serving to support to allow cross-origin requests (#1091)
- Added callbacks to hook into the training loop programmatically (#1094)
- Added scheduler support to Ray Tune hyperopt and fixed GPU usage (#1088)
- Ray Tune: enforced that epochs equals max_t and early stopping is disabled (#1109)
- Added register_trainable logic to RayTuneExecutor (#1117)
- Replaced Travis CI with GitHub Actions (#1120)
- Split distributed tests into separate test suite (#1126)
- Removed unused regularizer parameter from training defaults
- Restrict docker built GA to only ludwig-ai repos (#1166)
- Harmonize return object for categorical, sequence generator and sequence tagger (#1171)
- Sourcing images from either file path or in-memory ndarrays (#1174)
- Refactored hyperopt results into object structure for easier programmatic usage (#1184)
- Refactored all contrib classes to use the Callback interface (#1187)
- Improved performance of Dask preprocessing by adding parallelism (#1193)
- Improved TabNetCombiner and Concat combiner (#1177)
- Added additional backend configuration options (#1195)
- Made should_shuffle configurable in Trainer (#1198)
Bugfixes
- Fix SST parentheses issue
- Fix serve.py adding a try around the form parsing (#1111)
- Fix #1104: add lengths to text encoder output with updated unit test (#1105)
- Fix sst2 substree logic to match glue sst2 dataset (#1112)
- Fix #1078: Avoid recreating cache when using image preproc (#1114)
- Fix checking is dask exists in figure_data_format_dataset
- Fixed bug in EthosBinary dataset class and model directory copying logic in RayTuneReportCallback (#1129)
- Fix #1070: error when saving model with image feature (#1119)
- Fixed IterableBatcher incompatibility with ParquetDataset and remote model serialization (#1138)
- Fix: passing backend and TF config parameters to model load path in experiment
- Fix: improved TabNet numerical stability + refactoring
- Fix #1147: passing bn_epsilon to AttentiveTransformer initialization in TabNet
- Fix #1093: loss value mismatch (#1103)
- Fixed CacheManager to correctly handle test_set and validation_set (#1189)
- Fixing TabNet sparsity loss issue (#1199)
Breaking changes
Most models trained with v0.3.3 would keep working in v0.4.
The main changes in v0.4 are additional options, so what worked previously should not be broken now.
One exception to this is that now there is a much strictier check of the validity of the model configuration.
This is great as it allows to catch errors earlier, although configurations that despite errors worked in the past may not work anymore.
The checks should help identify the issues in the configurations though, so errors should be easily ficable.
Contributors
@tgaddair @jimthompson5802 @ANarayan @kaushikb11 @mejackreed @ronaldyang @zhisbug @nimz @kanishk16