fbpic VS autograd

Compare fbpic vs autograd and see what are their differences.

fbpic

Spectral, quasi-3D Particle-In-Cell code, for CPU and GPU (by fbpic)

autograd

Efficiently computes derivatives of numpy code. (by HIPS)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
fbpic autograd
2 6
165 6,797
-0.6% 0.7%
8.1 6.0
9 days ago 7 days ago
Python Python
GNU General Public License v3.0 or later MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

fbpic

Posts with mentions or reviews of fbpic. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2022-12-27.
  • Numba: A High Performance Python Compiler
    11 projects | news.ycombinator.com | 27 Dec 2022
    When I wrote my bachelor thesis years back I worked on a particle-in-cell code [1] that makes heavy use of numba for GPU kernels. At the time it was the most convenient way to do that from python. I remember spending weeks to optimizing these kernels to eek out every last bit of performance I could (which interestingly enough did eventually involve using atomic operations and introducing a lot of variables[2] instead of using arrays everywhere to keep things in registers instead of slower caches).

    I remember the team being really responsive to feature requests back then and I had a lot of fun working with it. IIRC compared to using numpy we managed to get speedups of up to 60x for the most critical pieces of code.

    [1]: https://github.com/fbpic/fbpic

  • Faster Python calculations with Numba: 2 lines of code, 13× speed-up
    5 projects | news.ycombinator.com | 18 Feb 2022
    We used numba to accelerate the code and most importantly write GPU kernels for the heavy parts. I remember spending hours optimising my code to eek out the most performance possible (which eventually meant using atomics and manually unrolling many loops because somehow this was giving us the best performance) but honestly I was really happy that I didn't need to write cuda kernels in C and generally it was pretty easy to work with. I remember back then the documentation was sometimes a little rough around the edges but the numba team was incredibly helpful and responsive. Overall I had a great time.

    [0] https://github.com/fbpic/fbpic

autograd

Posts with mentions or reviews of autograd. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-09-28.
  • JAX – NumPy on the CPU, GPU, and TPU, with great automatic differentiation
    12 projects | news.ycombinator.com | 28 Sep 2023
    Actually, that's never been a constraint for JAX autodiff. JAX grew out of the original Autograd (https://github.com/hips/autograd), so differentiating through Python control flow always worked. It's jax.jit and jax.vmap which place constraints on control flow, requiring structured control flow combinators like those.
  • Autodidax: Jax Core from Scratch (In Python)
    4 projects | news.ycombinator.com | 11 Feb 2023
    I'm sure there's a lot of good material around, but here are some links that are conceptually very close to the linked Autodidax.

    There's [Autodidact](https://github.com/mattjj/autodidact), a predecessor to Autodidax, which was a simplified implementation of [the original Autograd](https://github.com/hips/autograd). It focuses on reverse-mode autodiff, not building an open-ended transformation system like Autodidax. It's also pretty close to the content in [these lecture slides](https://www.cs.toronto.edu/~rgrosse/courses/csc321_2018/slid...) and [this talk](http://videolectures.net/deeplearning2017_johnson_automatic_...). But the autodiff in Autodidax is more sophisticated and reflects clearer thinking. In particular, Autodidax shows how to implement forward- and reverse-modes using only one set of linearization rules (like in [this paper](https://arxiv.org/abs/2204.10923)).

    Here's [an even smaller and more recent variant](https://gist.github.com/mattjj/52914908ac22d9ad57b76b685d19a...), a single ~100 line file for reverse-mode AD on top of NumPy, which was live-coded during a lecture. There's no explanatory material to go with it though.

  • Numba: A High Performance Python Compiler
    11 projects | news.ycombinator.com | 27 Dec 2022
    XLA is "higher level" than what Numba produces.

    You may be able to get the equivalent of jax via numba+numpy+autograd[1], but I haven't tried it before.

    IMHO, jax is best thought of as a numerical computation library that happens to include autograd, vmapping, pmapping and provides a high level interface for XLA.

    I have built a numerical optimisation library with it, and although a few things became verbose, it was a rather pleasant experience as the natural vmapping made everything a breeze, I didn't have to write the gradients for my testing functions, except for special cases that involved exponents and logs that needed a bit of delicate care.

    [1] https://github.com/HIPS/autograd

  • Run Your Own DALL·E Mini (Craiyon) Server on EC2
    16 projects | dev.to | 26 Jul 2022
    Next, we want the code in the https://github.com/hrichardlee/dalle-playground repo, and we want to construct a pip environment from the backend/requirements.txt file in that repo. We were almost able to use the saharmor/dalle-playground repo as-is, but we had to make one change to add the jax[cuda] package to the requirements.txt file. In case you haven’t seen jax before, jax is a machine-learning library from Google, roughly equivalent to Tensorflow or PyTorch. It combines Autograd for automatic differentiation and XLA (accelerated linear algebra) for JIT-compiling numpy-like code for Google’s TPUs or Nvidia’s CUDA API for GPUs. The CUDA support requires explicitly selecting the [cuda] option when we install the package.
  • Trade-Offs in Automatic Differentiation: TensorFlow, PyTorch, Jax, and Julia
    7 projects | news.ycombinator.com | 25 Dec 2021
    > fun fact, the Jax folks at Google Brain did have a Python source code transform AD at one point but it was scrapped essentially because of these difficulties

    I assume you mean autograd?

    https://github.com/HIPS/autograd

  • JAX - COMPARING WITH THE BIG ONES
    2 projects | /r/CryptocurrencyICO | 6 Sep 2021
    These four points lead to an enormous differentiation in the ecosystem: Keras, for example, was originally thought to be almost completely focused on point (4), leaving the other tasks to a backend engine. In 2015, on the other hand, Autograd focused on the first two points, allowing users to write code using only "classic" Python and NumPy constructs, providing subsequently many options for point (2). Autograd's simplicity greatly influenced the development of the libraries to follow, but it was penalized by the clear lack of the points (3) and (4), i.e. adequate techniques to speed up the code and sufficiently abstract modules for neural network development.

What are some alternatives?

When comparing fbpic and autograd you can also consider the following projects:

WarpX - WarpX is an advanced, time-based electromagnetic & electrostatic Particle-In-Cell code.

Enzyme - High-performance automatic differentiation of LLVM and MLIR.

simsopt - Simons Stellarator Optimizer Code

SwinIR - SwinIR: Image Restoration Using Swin Transformer (official repository)

pure_numba_alias_sampling - Pure numba version of Alias sampling algorithm from L. Devroye's, "Non-Uniform Random Random Variate Generation"

jaxonnxruntime - A user-friendly tool chain that enables the seamless execution of ONNX models using JAX as the backend.

ndarray_comparison - Benchmark of toy calculation on an n-dimensional array using python, numba, cython, pythran and rust

autodidact - A pedagogical implementation of Autograd

rust-numpy - PyO3-based Rust bindings of the NumPy C-API

nodevectors - Fastest network node embeddings in the west

qha - A Python package for calculating thermodynamic properties under quasi-harmonic approximation, using data from ab-initio calculations