The stuff Hacker News actually recommends.

Laptops · Apple MacBook Pro

Apple MacBook Pro M4 Max

60owners with an opinion
61%of verdicts positive
27/17positive/negative since 2024
2 yrslongest happy owner
0happy after 3+ years

Praised for performance and value; criticized for noise.

What owners wrote

Likes itOwned 2 years
When I was in the market for a new machine, I had the same attitude. As I was about to hit "Buy" on a standard issue $2k MBP, my wife said, "What if we got you a top of the line machine?" I replied that it would make no sense unless I was going to start running local inference or training my own models locally... 2 years later, and this MacBook Pro M4 Max w/48GB is the best $4k I've ever spent!
Likes it
I saw a decent listing for a 16" 16gb m1 pro macbook the other day, and i was seriously considering spending those money. I have a 16" m4 max from work (36gb) and is an incredible machine (build quality, incredible display, overall feel). I also have a private macbook neo which should be similar to M1 in terms of performance but it's limited to 8gb of memory. The neo/M1 performances are sufficient for my needs (for private computing) and chances are the M1 pro actually performs better than my neo (if anything for the more abundant memory). I might to back to the listing and try to haggle the price even lower, considering a new generation of macbook pros has just been announced.
Doesn’t like it
I actually think a desktop makes sense if you want to run local LLMs. I have an M4 Max laptop left to me when I got laid off. It can run good-sized LLMs, but the system heats up, the fans blast off, and it rips through the battery in under an hour. I'd rather have a desktop set up as a private inference server that I could connect to remotely.
Likes it
Ok, I guess I have karma to burn for the inevitable downvotes.. "I've" been writing a compiler. It's pretty good - comparable to C++/gcc/clang in speed and has some (IMHO) nice features, amongst which: - it doesn't use header files, for library imports it reads the DWARF to get method/funciton signatures and types - it has the nicest interface I've ever seen for a GPU/CPU interconnect, just one line of code identifies the bit to convert to a GPU kernel, and I'm working on getting rid of that too. - the same language is used for the GPU and CPU, so the below is a full and complete GPU-driven Mandelbrot program. On my M4 Max MBP it operates in 0.7ms on the GPU, 94ms on all-cores (another option it can do) or 432ms on a single core. #use "Stdio.xc" #use "Par.xc" #define W 2048 i32 main(void) { u32 total = 0; par mandel :reduce(+ total) { for (u32 i in 0..W * W) { float cx = (float)(i % W) * (3.0f / W) - 2.0f; float cy = (float)(i / W) * (3.0f / W) - 1.5f; float x = 0.0f; float y = 0.0f; u32 k = 0; while (k - The 'par' line is the only thing that is a bit different from a 'C'-like language, all the data-hazards between CPU/GPU are taken care of, and there's no setup boilerplate. xc will compile the above straight out of the box. - Currently working on automatic division of labour be…
Likes it
No it doesn't But if I have to intervene at every fricking point along the way from frozen patty to cooked burger, if I have to tell the worker not to drop the patty on the floor and continue cooking it, which dials to turn on which machines, how long to leave the thing cooking at this stage, if I have to have the holistic knowledge (if not the details of the PID loop for the heating element), then it's a lot more than "calling for a burger". "I" wrote a compiler with help from Claude - it's not the first compiler I've written, probably won't be the last, but it's a damn sight easier to tell the machine to implement LICM or to specify the requirements of the SSA invariants rather than actually do it myself. Here’s the full and complete source of a GPU-powered Mandelbrot program: #use "Stdio.xc" #use "Par.xc" #import "../src/include/bench_time.xc" #define W 2048 #define SIZE (W * W) i32 main(void) { // Eight runs: the first carries one-off costs (a GPU builds its kernel // then), so the figure is the best run; the first is printed too. Auto // decides after its fourth (two on each device), and uses the rest. u32 total = 0; i64 best = 0; i64 first = 0; for (u32 rep in 0..8) { total = 0; i64 t0 = bench_now_us(); par mandel :reduce(+ total) { for (u32 i in 0..SIZE) { float cx = (float)(i % W) * (3.0f / 2048.0f) - 2.0f;…
Likes it
Yes, it’s very similar to that, except the ic has no imagination, vision, or drive. I wrote my first compiler about 35 years ago, and my first OS around the same time, well before LLMs were on the scene. I know exactly just how much work is involved with doing it well, which is why I’d never normally take on a project like this now I’m retired. But we do not live in normal times. The language “I” have created (and it’s not as though I just said to Claude “hey, write me a compiler”) is (even if I say so myself) pretty cool. Here’s the full source of a Mandelbrot program: #import "Stdio.xc" #import "Par.xc" #import "../src/include/bench_time.xc" #define W 2048 #define SIZE (W * W) i32 main(void) { // Eight runs: the first carries one-off costs (a GPU builds its kernel // then), so the figure is the best run; the first is printed too. Auto // decides after its fourth (two on each device), and uses the rest. u32 total = 0; i64 best = 0; i64 first = 0; for (u32 rep in 0..8) { total = 0; i64 t0 = bench_now_us(); par mandel :reduce(+ total) { for (u32 i in 0..SIZE) { float cx = (float)(i % W) * (3.0f / 2048.0f) - 2.0f; float cy = (float)(i / W) * (3.0f / 2048.0f) - 1.5f; float x = 0.0f; float y = 0.0f; u32 k = 0; while (k Just one line in tha…
Doesn’t like it
Man... I know this post will have some real "angry old man shaking his fists at the clouds" energy, but this latest OS update, even 27.0.1, is just so freakin' janky. Spaces... the windows don't layer right. So I can't always move them to a new space. When I bring up the various desktops, some windows just freeze at the original size and refuse to move. Similarly, the desktop previews for other desktops don't work. They start out working, but as soon as I resize a window, the previews in the virtual desktops go blank, so I can't see which desktops have files and applications running. Also, probably the most annoying, my laptop (M4 Max MBP) battery life is just gone from what it was a week ago. It used to last a day; now it's maybe 4 hours -- I've noticed the fan is on a lot more which is likely the cause. The laptop went from always being quiet, cool, to being warm when I pick it up. And yeah, I've tuned all the settings, fixed what I could, but Spaces and virtual desktops are just broke. As someone who has been using virtual desktops for as long as Apple has had this feature... man, it's just a total drain on productivity to try and shoehorn everything into one desktop. I hate it. Might as well be using a computer that isn't my own. And as someone who has used Mac for 40 years at this point... I'm just not used to Apple breaking this much. They were sticklers for detail, and that's why I love their products. But this latest OS feels untested. Do they only care about users us…
Neutral
Data points from my own usage, for whatever they're worth[1]. I'm just an individual contributor and hardly represent enterprise or large orgs: I've been on Kimi, with a little DeepSeek-V4-Pro, GLM 5.2/5.3, and MiMo thrown in, for probably about a year now. It's great here! 1) For DeepSeek, I recommend their Reasonix harness strongly, due to its alignment to DeepSeek's prefix cache. It means mostly (95%+) cache hit input tokens, so very cheap large-scale code analyses and things that require mega context windows (at the cost of some attentional drift, yes). Reasonix does require that you send data to China. This is fine. I mostly use this for big, expansive ingestion of open-source codebases to figure out how something really works, usually something that documentation doesn't quite reach. The economy of doing it this way versus American frontier model companies' token pricing cannot be overstated. I think I topped up $10 in June (2.5 months ago) and have still not burned through it, despite cycling untold tens of millions of tokens through it. My biggest annoyance is that DeepSeek does seem to be considerably rate-limited of late, at least during working hours in Beijing, which is a range that I gather to be quite expansive there. I'm not blasting it with anything, I'm just noting that the agent takes 10-20 minutes to do stuff that takes much less time if I'm willing to pay the OpenRouter premium. 2) For most everyday stuff outside of where Reasonix + DeepSeek just makes ove…
Neutral
Judging by my PCs (M4 Max Mac Studio; 2990WX desktop PC), Geekbench might flatter the Apple chips for multicore a bit I think: Geekbench 7 results: * AMD 2990WX: 1384 (single), 13052 (multi) ( https://browser.geekbench.com/v7/cpu/181239 ) * Apple M4 Max: 3552 (single), 29863 (multi) ( https://browser.geekbench.com/v7/cpu/390256 ) For parallelisable stuff that can occupy all cores for an extended period, the 2990WX typically takes about ~1.2x as long to do the same work/does ~0.83x the work per unit time, assuming code compiled with clang or gcc. Which isn't really coming across in the numbers here. CPUMark is a bit better: * AMD 2990WX: 2282 (single), 32040 (multi) ( https://www.cpubenchmark.net/cpu.php?cpu=AMD+Ryzen+Threadrip... ) * Apple M4 Max: 4590 (single), 43911 (multi) ( https://www.cpubenchmark.net/cpu.php?cpu=Apple+M4+Max+16+Cor... ) I haven't spent much time timing single core stuff, except - regarding clang, which looks like it contributes to the Geekbench 7 score, I did some measurements a few months ago suggesting that clang compiles for x64 more slowly than for ARM, all else being as equal as I could be bothered to try to make it: https://news.ycombinator.com/item?id=46938682 - and the single threaded test runs I did of my code suggest that the Geekbench 7 single core might be about right? (Whether the clang timing discrepancy is actually relevant to Geekbench, I've no idea, but I thought it interesting anyway.) If you need a benchmark that makes the PC look m…
Neutral
If you're going to run a benchmark, at least post the results. I was planning on writing up a different blog post about the terminal optimization journey, but I actually used `kitten __benchmark__ --render` quite a lot to optimize it: rune --version Rune v1.2.1 (HEAD is 40bf9cc1) Results: Only ASCII chars : 1.13s @ 177.2 MB/s Unicode chars : 1.44s @ 123.2 MB/s CSI codes with few chars : 2.95s @ 33.9 MB/s Long escape codes : 6.25s @ 125.5 MB/s Images : 2.76s @ 193.1 MB/s /Applications/Alacritty.app/Contents/MacOS/alacritty --version alacritty 0.13.1 (fe2a3c5) Results: Only ASCII chars : 1.97s @ 101.4 MB/s Unicode chars : 1.26s @ 140.3 MB/s CSI codes with few chars : 1.26s @ 79.3 MB/s Long escape codes : 5.22s @ 150.1 MB/s Images : 1.34s @ 399.3 MB/s ghostty --version Ghostty 1.3.2-main-+aa21caeaa Results: Only ASCII chars : 354.9ms @ 563.5 MB/s Unicode chars : 815.42ms @ 217.0 MB/s CSI codes with few chars : 1.23s @ 81.6 MB/s Long escape codes : 6.39s @ 122.8 MB/s Images : 680.84ms @ 783.4 MB/s Ran just now, on a Macbook Pro M4 Max 128Gb. Rune doesn't support the kitty graphics protocol, so ignore the Images bench results.
Likes it
I tested this on my Mac Studio M4 Max running Sequoia 15.7.9. The only browser I use other than Safari (which requires Tahoe for WebGPU) is Opera, so I tested it there. When I click the death ray, it freezes Opera completely, and pins my 40 core GPU at 100% indefinitely. However, contrary to what should happen, macOS continues merrily along. It lags a bit and some UI elements don't appear instantly, but I can summon the force quit menu and simply kill Opera, at which point the OS returns to normal. However, there *is* _something_ confused, as my GPU is sitting at 6W and full boost, yet with no active processes. Seems to suggest that something is orphaned yet still running. I am now going to log out and back in to see if I can fix it without rebooting. EDIT: fixed the 100% use, but not the power draw, by putting it to sleep and waking it back up. Interesting!
Neutral
For what it's worth, I've spent some time with Claude to develop a local runner for `llama.cpp`. I run Qwen3.6-35B-A3B-MTP (fast!) and Qwen3.8-27B (20 tokens/s). This was definitely worth the effort. Benchmarking and testing various approaches and various options really paid off. For example, one thing that surprised me was that MTP made things slower, not faster for Qwen3.8-27B. I use a 64GB MacBook Pro (M4 Max).
Neutral
It's worth noting that the 5090 (or the RTX Pro 6000 big brother with 92GB VRAM) will run rings around the Mac when it comes to compute. My old 3090 is typically significantly faster (almost 2x token/s) than my M4 Max 128GB machine, as long as the model fits in the 24GB of VRAM. In most situations it's a better idea to just buy tokens. But there are definitely cases when that's not an option. And then a machine like the M5 Ultra can allow you to do things locally for a fairly limited budget. And in a simpler package to manage than a machine with multiple GPUs.
Likes it
Depends on your perspective. People think nothing of spending 50-100K on a car that basically gets them to work. But the thing they use for day to day work then gets the evil eye when it costs more than 1K. It's slightly irrational. Not everybody needs a high end mac. But when you do, it sure is nice that you can get one. I don't actually own a car and my startup is bootstrapped and our salaries are modest. But the one thing we spend on is laptops. I have M4 max pro with 48GB. That thing was on the expensive side (~4.5Kish). But it delivers a lot of value and I spend most hours I'm awake using it. I like fast builds. I like that I can try out open source AI models. And I like just having the option to run those. We actually lease them and mine costs something like 105 euro/month. Including Apple Care. I don't need a Mac Studio but I could see some roles where that would not be a crazy expense. Even the tricked out version that basically only costs the same as a very modest car.
Likes it
I was in the same situation, I used maxed out 15'' M3 Max MacBook Pro docked to Studio Display closed on vertical stand behind the screen. It was fine for office work, but running local LLMs would definitely overheat it. The battery started degrading purely due to heat issues. And it was audible as well. I decided to get Mac Studio M4 Max, also all maxed out config and the cooling is so much better that I can run local LLMs like Gemma 3/4, gpt-oss 120b all day long without any heat issues or any audible fan noise. So for my use case it was the right decision. I subsequently added 15'' M5 Max MacBook Pro all maxed out to my collection and even though it is slightly faster on LLM inference (I get 100 tokens/s with Gemma 4 27b model), you just can't run LLMs longer than a few minutes. It starts overheating and gets really loud.
Neutral
I bought a 128GB M4 Max Mac Studio a while back, and for a while I thought like I had done really well to buy it when I did. The problem I'm having now is that no models are targeting RAM of that size. Everything is either much smaller, targeting laptops, or much larger, targeting hardware well out of reach of enthusiasts. Please, AI people, start making models targeting 128GB machines again. The last interesting one was Qwen 3.5 122B.
Doesn’t like it
These are very good! I'm hoping for speed improvements because the only problem running the 27B model on my Macbook pro (M4 Max) is the speed: 20 tokens per second. I benchmarked and MTP actually makes things slower, so I disabled MTP altogether. I'm hoping there will be some breakthroughs or optimizations that will allow me to run this at 30-50 tokens per second, which would make a big difference.
Doesn’t like it
On my M4 Max MacBook Pro, if I run or even load an LLM more than a couple times, even a small one, general desktop performance starts to get really, really bad until a reboot and I don't know why. Genuinely, everything starts feeling super sluggish, even long after the process has terminated -- cmd+tab gets slow, apps constantly hang for a few seconds at a time, the cursor position starts lagging and videos are slow to pause/play -- and the only way I've found to fix it is to reboot the entire machine. Clearing memory, restarting apps etc. doesn't work. Don't get me wrong, the performance and QoS system works really well while the model is still in memory, but after a few cycles of loading and unloading, performance just ends up getting bad in general. Doesn't matter if I'm loading it with llama.cpp, MLX, native Metal, if I start using the GPU for machine learning the machine just gets really upset. This sucks man... macOS is not supposed to need reboots like that, my Intel Mac could run for months on end without slowing down at all and I could push it as hard as I wanted. As far as I can tell, this behavior is new as of either macOS 26 or the 27 beta. Apple really has been betraying their true Unix roots lately.
Likes it
Me too. 35B A3B runs really fast on my MacBook Pro (M4 Max) and is suitable for real-time tasks like dictation post-processing. The dense model is not.
Neutral
I'm on M4 Max, so I don't have split parameters to tune. I can fit full context, I can fit the full model in unified memory, my only concern has been the very meager memory bandwidth of these chips. The only thing that can seem to feed the GPU is very large prefill batches, on the order of many thousands of tokens per batch, and that's with only a 9B model at 3 bpw.
Likes it
The solution to your noise and electricity costs are the ARM-based Macs. Not only are they whisper-quiet, they also sip the electricity. I just had an unplanned power outage two days ago, and my Dell Precision 7920 (44c/88t, 256Gb RAM) had about 20 minutes of UPS power vs the 148 minutes of my much more powerful Mac Studio M4 Max (16c, 128Gb RAM). Both were idling at the time. Even the first-gen ARM Mac Mini’s are something like ⅓ the power draw of the 2018 versions (the last of the Intel CPUs), and under load it can be as little as ¼ the power draw.
Doesn’t like it
I have an M4 Max and when I was trying out local LLM work with pi it has probably felt like the hottest I've ever felt any kind of Macbook be. I could feel the radiated heat off it even a few inches away. Honestly felt hotter than any Intel Macbook I've used. Because of that I stopped as I didn't want to harm my laptop in case I need to hold it for 10 years due to all the supply issues/price increases.
Likes it
> MacBook Pro M5 128GB RAM 614 GB/s of memory bandwidth > MacMini M4 with 64GB of RAM 273 GB/s of memory bandwidth (also only currently available with 48GB) When it comes to inference speed, you want your model to fit in memory, and then to have as much memory bandwidth as possible. In this case a hypothetical Mini with 1TB of memory would still be over 2x slower with 27-35B models. And FWIW I have an M4 Max MBP 128GB that I keep on a Roost laptop stand, with a separate keyboard/mouse/video. It does fire up the cooling jets when running local LLMs, but stays within tolerance for me on noise. I haven't heat-tested it on longer runs, but I imagine the risen airflow helps a ton.