Differentiable Fortran with LFortran and Enzyme

(docs.pasteurlabs.ai)

31 points | by dionhaefner 3 hours ago

1 comments

  • dionhaefner 3 hours ago
    Author here — I work on Tesseract at Pasteur Labs, and I wrote this up because the "what if this was possible" was bugging me for way too long :)

    I was surprised by how well this worked, the LFortran + Enzyme stack seems to be a very clean way to get gradients through Fortran code via LLVM IR transformations. Pretty cool to see a 220-line Fortran heat solver turn into ~6,900-line reverse pass automatically if I dare say so.

    Would be awesome to see this applied to a real scientific codebase, and I hope that the demo is enough to convince people that it’s worth trying.

    • srean 2 hours ago
      Very interesting. Does LFortran have the same internal array layout as the standard C runtime ?

      A shared layout and a shared calling convention would be very nice.

      Sorry about my naive question. Haven't touched Fortran directly in three decades I think.

      EDIT: thanks for your reply. For some reason it has been flagged dead. So am responding here. You can mail dang hn at ycombinator dot co m about the flagging. He is very nice.

      • kmaitreys 5 minutes ago
        I would also like to know this. Fortran itself is column-major, so I would guess the internal layout isn't same for multi-dimensional arrays when compared to row-major C? I'm not sure how LFortran represents arrays internally though.
      • wombatpm 1 hour ago
        Lots of scientific code in Fortran has sparse arrays, so a NxN array that only has values on 5 diagonals will store that as 5xN array to save memory allowing you to run a larger problem.
        • srean 1 hour ago
          That's a very orthogonal issue.

          Sparse arrays are supported on C libraries too. I have done my time with CSC and CSR even inside Python that called out to C libraries.

      • dionhaefner 1 hour ago
        [dead]
      • dionhaefner 1 hour ago
        [flagged]
    • tanderson92 25 minutes ago
      When you say you 'wrote this up', you mean you had an AI write (at least) chunks of it.
      • dionhaefner 17 minutes ago
        Indeed, just like I let my compiler write (at least) chunks of my AD logic. Not great when the tool becomes a leaky abstraction, but overall net positive don't you think?
        • tanderson92 16 minutes ago
          Disagree; it irks me to read AI slop, and writing is meant to be persuasive and engaging to human readers.
          • dionhaefner 10 minutes ago
            Happy to take the blame for the lack of persuasian and engagement then :) Thanks for the feedback, although I’d like to believe there’s a way to have that cake and eat it too.