News for hackers. Stuff that matters.
Re:Meta LLM Compiler: neural optimizer and disassembler by munificent on Friday June 28, 2024 @02:25PM (#40823479)
It's technically correct that a language specification is rarely precise enough to require compiler output to be deterministic.

But it's pragmatically true that engineers will want to murder you if your compiler is non-deterministic. All sorts of build systems, benchmark harnesses, supply chain validation tools, and other bits of surrounding ecosystem will shit the bed if the compiler doesn't produce bitwise identical output on the same input and compiler flags.

Re:Meta LLM Compiler: neural optimizer and disassembler by foobazgt on Friday June 28, 2024 @03:12PM (#40824059)
Can vouch for this having fixed non-determinism bugs in a compiler. Nobody is happy if your builds aren't reproducible. You'll also suffer crazy performance problems as everything downstream rebuilds randomly and all your build caches randomly miss.
Re:Meta LLM Compiler: neural optimizer and disassembler by SushiHippie on Friday June 28, 2024 @03:53PM (#40824580)
NixOS with its nixpkgs [0] and cache [1] would also not work if compilers weren't reproducible. Though they won't use something like PGO or some specific optimization flags as these would very likely lead to unreproducible builds. For example most distros ship a PGO optimized build of Python while nixos does not.

[0] https://github.com/nixos/nixpkgs

[1] https://cache.nixos.org/

Re:Meta LLM Compiler: neural optimizer and disassembler by boomanaiden154 on Friday June 28, 2024 @04:37PM (#40825015)
PGO can be used in such situations, but the profile needs to be checked in. Same code + same profile -> same binary (assuming the compiler is deterministic, which is tested quite extensively).

There are several big projects that use PGO (like Chrome), and you can get a deterministic build at whatever revision using PGO as the profiles are checked in to the repository.

Re:Meta LLM Compiler: neural optimizer and disassembler by vlovich123 on Friday June 28, 2024 @07:04PM (#40826267)
It’s called autofdo although I’ve struggled to get it working well in Rust.
Re:Meta LLM Compiler: neural optimizer and disassembler by boomanaiden154 on Friday June 28, 2024 @07:25PM (#40826417)
It's not called AutoFDO. AutoFDO refers to a specific sampling-based profile technique out of Google (https://dl.acm.org/doi/abs/10.1145/2854038.2854044). Sometimes people will refer to that as PGO though (with PGO and FDO being somewhat synonymous, but PGO seeming to be the preferred term in the open source LLVM world). Chrome specifically uses instrumented PGO which is very much not AutoFDO.

PGO works just fine in Rust and has support built into the compiler (https://doc.rust-lang.org/rustc/profile-guided-optimization....).

Re:Meta LLM Compiler: neural optimizer and disassembler by vlovich123 on Friday June 28, 2024 @08:45PM (#40826942)
I wasn’t trying to conflate the two. PGO traditionally meant a trace build but as a term it’s pretty generic, at least to me to the general concept of “you have profile information that replaces generically tuned heuristics that the compiler uses). AutoFDO I’d classify as an extension to that concept to a more general PGO technique; kind of ThinLTO vs LTO. Specifically, it generates the “same” information to supplant compiler heuristics, but is more flexible in that the sample can be fed back into “arbitrary” versions of the code using normal sampling techniques instead of an instrumented trace. The reason sampling is better is that it more easily fits into capturing data from production which is much harder to accomplish for the tracing variant (due to perf overheads). Additionally, because it works across versions the amortized compile cost drops from 2x to 1x because you only need to reseed your profile data periodically.

I was under the impression they had switched to AutoFDO across the board but maybe that’s just for their cloud stuff and Chrome continues to run a representative workload since that path is more mature. I would guess that if it’s not being used already, they’re exploring how to make Chrome run AutoFDO for the same reason everyone started using ThinLTO - it brought most of the advantages while fixing the disadvantages that hampered adoption.

And yes, while PGO is available natively, AutoFDO isn’t quite as smooth.

Re:Meta LLM Compiler: neural optimizer and disassembler by boomanaiden154 on Friday June 28, 2024 @09:45PM (#40827257)
I'm not sure where you're getting your information from.

Chrome (and many other performance-critical workloads) is using instrumented PGO because it gives better performance gains, not because it's a more mature path. AutoFDO is only used in situations where collecting data with an instrumented build is difficult.

Re:Meta LLM Compiler: neural optimizer and disassembler by vlovich123 on Saturday June 29, 2024 @12:11PM (#40831567)
Last I looked AutoFDO builds were similar in performance to PGO as ThinLTO vs LTO is. I’d say that collecting data with an instrumented Chrome build is extremely difficult - you’re relying on your synthetic benchmark environment which is very very different from the real world (eg extensions aren’t installed, the patterns of websites being browsed is not realistic, etc). There’s also a 2x compile cost because you have to build Chrome twice in the exact same way + you have to run a synthetic benchmark on each build to generate the trace.

I’m just using an educated guess to say that at some point in the future Chrome will switch to AutoFDO, potentially using traces harvested from end user computers (potentially just from their employees even to avoid privacy complaints).

Re:Meta LLM Compiler: neural optimizer and disassembler by boomanaiden154 on Saturday June 29, 2024 @12:43PM (#40831783)
You can make the synthetic benchmarks relatively accurate, it just takes effort. The compile-time hit and additional effort is often worth it for the extra couple percent for important applications.

Performance is also pretty different on the scales that performance engineers are interested in for these sorts of production codes, but without the build system scalability problems that LTO has. The original AutoFDO paper shows an improvement of 10.5%->12.5% going from AutoFDO to instrumented PGO. That is pretty big. It's probably even bigger with newer instrumentation based techniques like CSPGO.

They also mention the exact reasons that AutoFDO will not perform as well, with issues in debug info and losing profile accuracy due to sampling inaccuracy.

I couldn't find any numbers for Chrome, but I am reasonably certain that they have tried both and continue to use instrumented PGO for the extra couple percent. There are other pieces of the Chrome ecosystem (specifically the ChromeOS kernel) that are already optimized using sampling-based profiling. It's been a while since I last talked to the Chromium toolchain people about this though. I also remember hearing them benchmark FEPGO vs IRPGO at some point and concluding that IRPGO was better.

Re:Meta LLM Compiler: neural optimizer and disassembler by c0balt on Friday June 28, 2024 @08:58PM (#40827017)
Yeah, and nixpkgs also, last time I checked, does patch GCC/ clang to ensure determinism. Many compilers and toolchain by default want to, e.g., embed build information that may leak from the build env in a non-deterministic/ non-reprodicible manner.
Re:Meta LLM Compiler: neural optimizer and disassembler by munificent on Friday June 28, 2024 @07:41PM (#40826545)
Yup. Even so much as inserting the build timestamp into the generated executable (which is strangely common) causes havoc with build caching.
Re:Meta LLM Compiler: neural optimizer and disassembler by Sophira on Friday June 28, 2024 @07:19PM (#40826377)
Plus, these models are entirely black boxes. Even given weights, we don't know how to look at them and meaningfully tell what's happening - and not only that, but training these models is likely not cheap at all.

Stable output is how we can verify that attacks like the one described in Reflections on Trusting Trust[0] don't happen.

[0] https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_Ref...

Re:Meta LLM Compiler: neural optimizer and disassembler by a_t48 on Friday June 28, 2024 @07:19PM (#40826379)
NVCC CUDA builds were nondeterministic last time I checked, it made certain things (trying to get very clever with generating patches) difficult. This was also hampered by certain libraries (maybe GTSAM?) wanting to write __DATE__ somewhere in the build output, creating endlessly changing builds.
Re:Meta LLM Compiler: neural optimizer and disassembler by sigmoid10 on Saturday June 29, 2024 @05:10AM (#40828876)
In parallel computing you run into nondeterminism pretty quickly anyways - especially with CUDA because of undetermined execution order and floating point accuracy.
Re:Meta LLM Compiler: neural optimizer and disassembler by a_t48 on Saturday June 29, 2024 @03:51PM (#40832951)
Yes, at runtime. Compiling CUDA doesn’t require a GPU, though, and doesn’t really use “parallel computing”. I think CUDA via clang gets this right and will produce the same build every time - it was purely an NVCC issue.
Re:Meta LLM Compiler: neural optimizer and disassembler by dheera on Friday June 28, 2024 @11:06PM (#40827595)
LLMs can be deterministic if you set the random seed and pin it to a certain version of the weights.

My bigger concern would be bugs in the machine code would be very, very difficult to track down.

Re:Meta LLM Compiler: neural optimizer and disassembler by azinman2 on Saturday June 29, 2024 @12:37AM (#40827904)
Just fix the random seed :)
Re:Meta LLM Compiler: neural optimizer and disassembler by skybrian on Saturday June 29, 2024 @11:09AM (#40831133)
I’m amused by the possibility of a compiler having a flag to set a random seed. (with a fixed default, of course).

If you hit a compiler bug, you could try a different seed to see what happens.

Or how about a code formatter with a random seed?

Tool developers could run unit tests with a different seed until they find a bug - or hide the problem by finding a lucky seed for which you have no provable bugs :)

Re:Meta LLM Compiler: neural optimizer and disassembler by skissane on Sunday June 30, 2024 @01:12AM (#40835283)
> But it's pragmatically true that engineers will want to murder you if your compiler is non-deterministic. All sorts of build systems, benchmark harnesses, supply chain validation tools, and other bits of surrounding ecosystem will shit the bed if the compiler doesn't produce bitwise identical output on the same input and compiler flags.

I think that’s rather true nowadays, but hasn’t always been thus. Back in the 20th century, non-deterministic compiler output was very common - even if only due to the common practice of embedding the compilation timestamp in the resulting executable - and very few ever cared. Whereas nowadays, there is a much bigger culture of hermetic/reproducible build processes, in which stuff like embedding compilation timestamps in the executable or object files is viewed as an antipattern.