View Source Changelog
v0.9.0 (2024-09-26)
Enhancements
- [Nx] Add 8-bit Floating Point numerical type
- [Nx] Added
s4ands2quantized integer types - [Nx] Add quantized int types (s2, s4, u2, u4)
Bug fixes
- [Nx.LinAlg] Minor range slicing fixes on QR decomposition
- [Nx] Nx.Defn.Grad now supports more vectorization cases
Deprecations and incompatibilities
- [Nx] Default integer type is now
s32 - [Nx] Interface breaking changes for
Nx.to_pointerandNx.from_pointer
v0.8.0 (2024-08-19)
Enhancements
- [Nx] Add
Nx.to_pointer/2andNx.from_pointer/5 - [Nx] Introduce
~VECsigil for 1d tensors - [Nx] Introduce
~MATsigil for 2d tensors - [Nx] Implement
stackas a callback for performance - [Nx] Make
takean optional callback - [Nx] Make
take_along_axisan optional callback - [Nx.LinAlg] Support
:keep_axesin eigh
Bug fixes
- [Nx] Fix a bug with
gatherwhenindiceshad more dimensions than the inputtensor - [Nx] Fix min/max value for 16 bit signed type
- [Nx] Fix argmax/argmin behaviour with NaNs
- [Nx.Serving] Fix a bug where streaming responses were never closing
Deprecations and incompatibilities
- [Nx] Deprecate
~Vin favor of~VEC - [Nx] Deprecate
~Min favor of~MAT - [Nx] Remove
Nx.map/2
v0.7.1 (2024-02-27)
- [Nx.LinAlg] Minor speed up to
Nx.LinAlg.qr/2default implementation
v0.7.0 (2024-02-22)
Enhancements
- [Nx] Add
Nx.fft2andNx.ifft2 - [Nx] Add
Nx.fill/2 - [Nx] Implement QR decomposition as optional callback
- [Nx] Support
:typeoption in argmin/argmax - [Nx] Default all sorting operations to unstable sorting (pass
stable: trueto change it) - [Nx.BinaryBackend] Improve performance of
Nx.concatenate/2 - [Nx.Defn] Support a mapping function in
print_value/2 - [Nx.Defn] Add
Nx.Defn.Compiler.__to_backend__/1callback - [Nx.LinAlg] Add
Nx.least_squares/2
Bug fixes
- [Nx.Constants] Fix min and max finite values for
:bf16 - [Nx.Defn] Do not discard arguments on optional grads
Incompatible changes
- [Nx] Default to non-stable sorting
- [Nx] Remove deprecated random_uniform, random_normal, shuffle
- [Nx.Defn]
Nx.Defn.rewrite_types/2has been removed
v0.6.4 (2023-11-13)
Enhancements
- [Nx] Allow non-scalar tensors on access
Bug fixes
- [Nx] Improve the
:axesoption ingather,indexed_add, andindexed_put - [Nx] Fix grad of
gather,indexed_add, andindexed_putwith axes - [Nx.BinaryBackend] Fix sorting of negative infinity
- [Nx.BinaryBackend] Always sort NaN last
- [Nx.Serving] Fix
Nx.Batchpadding with multi-device backends
v0.6.3 (2023-11-09)
Enhancements
- [Nx] Allow non-scalars as updates on
indexed_addandindexed_put - [Nx] Allow non-scalars as return of
gather - [Nx] Support the
:axesoption ingather,indexed_add, andindexed_put - [Nx] Add
Nx.covariance - [Nx] Support
:typein argsort - [Nx] Support
:stableoption in argsort for future compatibility - [Nx.Serving] Add
:weightoption for static load balancing
Bug fixes
- [Nx] Cast input types on slicing
- [Nx.Defn] Support vectorized tensors in grad
- [Nx.Defn] Fix bugs when diffing tensor expressions
- [Nx.Serving] Handle serving getting stuck on timer messages
v0.6.2 (2023-09-21)
Enhancements
- [Nx.Serving] Add
Nx.Serving.batch_size/2and perform batch splitting on run - [Nx.Serving] Support input streaming
v0.6.1 (2023-09-12)
Enhancements
- [Nx] Add multivariate normal distribution
- [Nx.Serving] Automatically split exceeding batch sizes
Bug fixes
- [Nx] Fix
Nx.pad/2with different backends - [Nx] Fix
Nx.clip/3with non-finite values - [Nx.Serving] Emit batches as they arrive in
Nx.Serving.streaming/2 - [Nx.Serving] Ensure batch key is preserved when a batch is split
v0.6.0 (2023-08-15)
Enhancements
- [Nx] Add constant creation helpers such as
u8,f32, etc - [Nx] Implement Bluestein's algorithm for
fftandifftin the binary backend - [Nx] Support range with steps when accessing tensors
- [Nx] Support vectorization via
Nx.vectorize/2,Nx.devectorize/2,Nx.revectorize/2,Nx.reshape_vectors/2, andNx.broadcast_vectors/2 - [Nx] Add
Nx.logsumexp/2 - [Nx] Add
Nx.split/3 - [Nx] Add
Nx.tri/2,Nx.triu/2,Nx.tril/2 - [Nx] Introduce a new serialization format that is more suitable to memory mapping
- [Nx.Defn] Consider Inspect.Opts limit when pretty printing Nx.Defn expressions
- [Nx.Serving] Support multiple batch keys in Nx.Serving
- [Nx.Serving] Support streaming in Nx.Serving
Bug fixes
- [Nx] Fix
from_numpywith 1-byte width arrays - [Nx] Fix cases where pretty printing large Nx.Defn expressions would take a long time
- [Nx] Fix
reduce_min/reduce_maxfor non-finite values
Deprecations
- [Nx.Serving] The post-processing function must now be a two-arity function that receives the
{output, metadata}as a pair or the stream
Breaking changes
- [Nx.Serving] The
nx.serving.postprocessingtelemetry event no longer receives the serving output or serving metadata as event metadata
v0.5.3 (2023-04-14)
Bug fixes
- [Nx.Defn] Fix compilation error when Elixir compiler has column tracking enabled
- [Nx.LinAlg] Fix cases where determinant could return NaN
- [Nx.LinAlg] Fix SVD when working with f16 and bf16
v0.5.2 (2023-03-21)
Enhancements
- [Nx.Random] Add
stop_gradtoNx.Randomcreation functions - [Nx.Serving] Reduce references sent through serving
Bug fixes
- [Nx] Fix
Nx.modewith:axisoption
v0.5.1 (2023-02-18)
Require Elixir v1.14.
Enhancements
- [Nx] Support any container or lazy container in
stack/concatenate - [Nx] Add
Nx.top_k/2 - [Nx] Add
Nx.to_list/1 - [Nx] Improve shape validation in
Nx.concatenate/2 - [Nx.Constants] Add
pi,e, andeuler_gamma - [Nx.Random] Raise if a non-unary rank tensor is given as probabilities to
Nx.Random.choice/4 - [Nx.Random] Make
samplesoptional inNx.Random.choice/3
v0.5.0 (2023-02-10)
Enhancements
- [Nx] Support serialization of containers
- [Nx] Rename
Nx.powertoNx.pow - [Nx] Add
Nx.reflectandNx.linspace - [Nx.Defn] Raise at compile time for invalid defn if/cond usage
- [Nx.LinAlg] Support
full_matrices?in SVD - [Nx.LinAlg] Add
Nx.LinAlg.matrix_rank - [Nx.Random] Add
Nx.Random.choiceandNx.Random.shuffle - [Nx.Serving] Add distributed² serving by distributing over devices (GPUs/CPUs) as well as nodes
- [Nx.Serving] Add telemetry to
Nx.Servingcallbacks
Backwards incompatible changes
- [Nx]
from_numpyandfrom_numpy_archivehave been replaced byload_numpy!andload_numpy_archive! - [Nx.Defn.Evaluator] Do not force GC on evaluator
v0.4.2 (2023-01-13)
Enhancements
- [Nx] Allow tensors to be given on
Nx.tensor/2 - [Nx] Add
Nx.with_default_backend/2 - [Nx] Add
:axesoption toNx.flatten/2 - [Nx] Add
:axesoption toNx.weighted_mean/2 - [Nx.Defn] Warn if
Nx.tensor/2first-argument is not constant inside defn - [Nx.LinAlg] Add
Nx.LinAlg.pinv/1 - [Nx.LinAlg] Optimize and handle more cases in
Nx.LinAlg.svd/1
Bug fixes
- [Nx] Respect fortran order in loading from numpy
- [Nx.Defn] Render containers in compile error type+shape mismatch
- [Nx.Defn] Restore pdict state after compilation
v0.4.1 (2022-12-07)
Enhancements
- [Nx] Add
Nx.BatchandNx.Serving - [Nx] Implement
Nx.Containerfor numbers, complex, and tensors for completeness - [Nx] Support batches in
Nx.eye/2
Bug fixes
- [Nx] Keep input tensor names on associative scan
- [Nx.BinaryBackend] Differentiate between complex and real output in
as_type - [Nx.BinaryBackend] Fix loss of precision in
Nx.complex/2 - [Nx.BinaryBackend] Preserve NaNs in
windowandreduceoperations - [Nx.Random] Do not return infinity on
normal/2for f16
v0.4.0 (2022-10-25)
Enhancements
- [Nx] Add
Nx.rename/2,Nx.median/2,Nx.weighted_mean/3, andNx.mode/2 - [Nx] Implement cumulative operations using associative scan for improved performance
- [Nx.Constants] Add
minandmax - [Nx.Defn] Allow lists and functions anywhere as arguments in
defn,jitandcompile - [Nx.Defn] Add
Nx.LazyContainerthat allows a data-structure to lazily define tensors - [Nx.Defn] Allow tensors and ranges as generators inside
while - [Nx.Defn] Add
debug_expr/2anddebug_expr_apply/3 - [Nx.Defn.Evaluator] Calculate cache lifetime to reduce memory usage on large numerical programs
- [Nx.LinAlg] Handle Hermitian matrices in
eigh - [Nx.LinAlg] Support batched operations in
adjoint,cholesky,determinant,eigh,invert,lu,matrix_power,solve,svd, andtriangular_solve - [Nx.Random] Support pseudo random number generators algorithms
Bug fixes
- [Nx] Perform
window_reduce/reduceoperations from infinity and negative infinity - [Nx.Defn] Ensure
defnpemits warnings when unused - [Nx.Defn] Warn on unused variables in
while
Deprecations
- [Nx] Deprecate tensor as shape in
Nx.eye/2andNx.iota/2 - [Nx] Deprecate
Nx.random_uniform/2andNx.random_normal/2
v0.3.0 (2022-08-13)
Enhancements
- [Nx] Improve support for non-finite values in
Nx.broadcast/2,Nx.all_close/2, and more - [Nx] Add
Nx.is_nan/1andNx.is_infinite/1 - [Nx] Support booleans in
Nx.tensor/2 - [Nx] Add
Nx.fft/2andNx.ifft/2 - [Nx] Rename
Nx.logistic/1toNx.sigmoid/1 - [Nx] Add
Nx.put_diagonal/3andNx.indexed_put/3 - [Nx] Add
:reverseto cummulative functions - [Nx] Add
Nx.to_batched/3which returns a stream - [Nx] Support batched tensors in
Nx.LinAlg.qr/1 - [Nx.Defn] Add
Nx.Defn.compile/3for precompiling expressions - [Nx.Defn] Add
deftransform/2anddeftransformp/2for easier to define transforms - [Nx.Defn] Add
div/2 - [Nx.Defn] Support
case/2,raise/1, andraise/2 - [Nx.Defn] Support booleans in
if,cond, and boolean operators - [Nx.Defn] Perform branch elimitation in
ifandcondand execute branches lazily - [Nx.Defn.Evaluator] Garbage collect after evaluation (it can be disabled by setting the
:garbage_collectcompiler option to false)
Deprecations
- [Nx]
Nx.to_batched_list/3is deprecated in favor ofNx.to_batched/3 - [Nx.Defn]
transform/2is deprecated in favor ofdeftransform/2anddeftransformp/2 - [Nx.Defn]
assert_shape/2andassert_shape_pattern/2are deprecated in favor ofcase/2+raise/2 - [Nx.Defn]
inspect_expr/1andinspect_value/1are deprecated in favor ofprint_expr/1andprint_value/1respectively
v0.2.1 (2022-06-04)
Enhancements
- [Nx] Improve support for non-finite values in
Nx.tensor/1 - [Nx] Use iovec on serialization to avoid copying binaries
- [Nx.BinaryBackend] Improve for complex numbers in
Nx.tensor/1 - [Nx.Defn] Improve for complex numbers inside
defn
Bug fixes
- [Nx] Properly normalize type in
Nx.from_binary/3 - [Nx.Defn] Raise on
Nx.Defn.Expras JIT argument - [Nx.Defn.Evaluator] Handle concatenate arguments on evaluator
v0.2.0 (2022-04-28)
This version requires Elixir v1.13+.
Enhancements
- [Nx] Support atom notation as the type option throughout the API (for example,
:u8,:f64, etc) - [Nx] Add support for complex numbers (c64, c128)
- [Nx] Add
Nx.cumulative_sum/2,Nx.cumulative_product/2,Nx.cumulative_min/2,Nx.cumulative_max/2 - [Nx] Add
Nx.conjugate/1,Nx.phase/1,Nx.real/1, andNx.imag/1 - [Nx] Initial support for NaN and Infinity
- [Nx] Add
:axisoption toNx.shuffle/2 - [Nx] Add
Nx.axis_index/2 - [Nx] Add
Nx.variance/2toNx.standard_deviation/2 - [Nx] Rename
Nx.slice_axis/3toNx.slice_along_axis/4 - [Nx.Backend] Add support for optional backends
- [Nx.Constants] Provide a convenient module to host constants
- [Nx.Defn] Improve error messages throughout the compiler
v0.1.0 (2022-01-06)
First release.