1.0.0-beta5
- Added model server - remote inference of SameDiff and DL4J models using JSON or (optionally) binary serialization
- Added Scala 2.12 support, dropped Scala 2.10 support. Modules with Scala dependencies are now released with Scala 2.11 and 2.12 versions
- Apache Spark 1.x support dropped (now only Spark 2.x is supported). Note: Spark version suffix dropped: For upgrading:
1.0.0-beta4_spark2 -> 1.0.0-beta5
- Added FastText support to deeplearning4j-nlp
- CUDA support for all ND4J/SameDiff Operations
- In 1.0.0-beta4, some operations were CPU only. Now, all operations have full CUDA support
- Added support for new data types in ND4J (and DL4J/SameDiff): BFLOAT16, UINT16, UINT32, UINT64
- ND4J: Implicit broadcasting support added to INDArray (already present in SameDiff - for example shape
[3,1]+[3,2]=[3,2]
) - CUDA 9.2, 10.0 and 10.1-Update2 still supported
- NOTE: For CUDA 10.1, CUDA 10.1 update 2 is recommended. CUDA 10.1 and 10.1 Update 1 will still run, but rare internal cuBLAS issues may be encountered in heavily multi-threaded code on some systems
- Dependency upgrades: Jackson (2.5.1 to 2.9.9/2.9.9.3), Commons Compress (1.16.1 to 1.18), Play Framework (2.4.8 to 2.7.3), Guava: (20.0 to 28.0-jre, and shaded to avoid dependency clashes)
- CUDA: now host (RAM) buffers are only allocated when required (previously: host buffers were always allocated), in addition to device (GPU) buffer
- Added model server (DL4J and SameDiff models, JSON and binary communication) - JsonModelServer, JsonRemoteInference, Link, Link
- BertIterator: added option to prepend token to the output (such as
[cls]
expected by some models) (Link) - Added trace level logging to MultiLayerNetwork and ComputationGraph assist with debugging certain issues (Link)
- LSTM and Dropout will now fall back on built-in implementations if an exception is encountered from cuDNN (same as Subsampling/ConvolutionLayer) (Link)
- Improved validation when initializing networks with a non rank-2 (shape [1, numParams]) array (Link)
- Fixed issue where some Keras import models could fail with
Could not read abnormally long HDF5 attribute
(Link) - Fixed a Keras import issue where updater learning rate schedule could be imported incorrectly (Link)
- MultiLayerNetwork/ComputationGraph will now log the original exception if a second exception occurs during workspace closing, instead of swallowing it (inference/fit operation try/finally blocks) (Link)
- Upgraded dependencies: Jackson (2.5.1 to 2.9.9/2.9.9.3), Commons Compress (1.16.1 to 1.18), Play Framework (2.4.8 to 2.7.3), Guava: (20.0 to 28.0-jre, shaded to avoid dependency clashes) (Link)
- Logging framework can now be configured for DL4J UI (due to Play framework dependency upgrade) (Link)
- Reduced amount of garbage produced by MnistDataFetcher (impacts MNIST and EMNIST DataSetIterators) (Link)
- DL4J AsyncDataSetIterator and AsyncMultiDataSetIterator moved to ND4J, use
org.nd4j.linalg.dataset.Async(Multi)DataSetIterator
instead - Saved models with custom layers from 1.0.0-alpha and before can no longer be loaded. Workaround: load in 1.0.0-beta4, and re-save the model (Link). Models without custom layers can still be loaded back to 0.5.0
- Apache Spark 1.x support dropped (now only Spark 2.x is supported). Note: Spark version suffix dropped: For upgrading, change versions as follows:
1.0.0-beta4_spark2 -> 1.0.0-beta5
- Scala 2.10 dropped, Scala 2.12 added (for modules with Scala dependencies)
- Some layers (such as LSTM) may run slower on 1.0.0-beta5 than 1.0.0-beta4 on CUDA when not using cuDNN, due to added synchronization. This synchronization will be removed in the next release after 1.0.0-beta5
- CUDA 10.1: Rare internal cuBLAS issues may be encountered in heavily multi-threaded code on some systems, when running CUDA 10.1 Update 1 (and maybe 10.1). CUDA 10.1 update 2 is recommended.
- Added model server (DL4J and SameDiff models, JSON and binary communication) - JsonModelServer, JsonRemoteInference, Link, Link
- CUDA: now host (RAM) buffers are only allocated when required (previously: host buffers were always allocated), in addition to device (GPU) buffer
- Improved SameDiff training API - added "in line" test set evaluation, returning History object with loss curve, etc (Link)
- Added c++ benchmark suite callable from Java - call using
Nd4j.getExecutioner().runLightBenchmarkSuit()
andNd4j.getExecutioner().runFullBenchmarkSuit()
(Link) - Added axis configuraiton for evaluation instances (Evaluation, RegressionEvaluation, ROC, etc - getAxis and setAxis methods) to allow different data formats (NCHW vs. NHWC for CNNs, for example) (Link)
- SameDiff: Added support to convert constants to placeholders, via SDVariable.convertToConstant() method (Link)
- SameDiff: Added GradCheckUtil.checkActivationGradients method to check activation gradients for SameDiff instance (not just parameter gradients as in existing gradient check methods) (Link)
- Added INDArray reduction methods with "keep dimensions" option - for example,
INDArray.mean(boloean, int... dimension)
(Link) - Added INDArray.toString(NDArrayStrings options), toStringFull() and toString overloads for easier control of array printing (Link)
- SameDiff: Placeholders must now only be provided if required to calculate the requested variables (Link)
- Fixed an issue where Evaluation class was incorrectly reporting macro-averaged precision for binary case (Link)
- Fixed an issue where [1,N] and [N,1] arrays were not considered a matrix (rank 2 array) according to INDArray.isMatrix() (Link)
- Fixed an issue with a small number of Nd4j.create methods not creating arrays corresponding to the java primitive (Link)
- Fixed an issue where some JVMs could warn about "Illegal reflective access" due to a (now removed) SameDiff dependency (Link)
- libnd4j: cuBLAS hgemm (FP16 gemm) wil only be called for devices with compute capability >= 5.3 due to cuBLAS limitations (Link)
- OldAddOp, OldSubOp, etc removed: Replace with AddOp, SubOp, etc
- Nd4j.trueScalar and trueVector removed; use Nd4j.scalar and Nd4j.createFromArray methods
- INDArray.javaTensorAlongDimension removed; use INDArray.tensorAlongDimension instead
- INDArray.lengthLong() removed; use INDArray.length() instead
- The Jackson version upgrade necessitated a change to how generic object serialization was performed; Arbiter JSON data stored in 1.0.0-beta4 or earlier format may not be readable in 1.0.0-beta5 (Link)
Last modified 9mo ago