Det vi lär oss längs vägen

Anteckningar om teknik, forskning och företagande.

← Alla artiklar

M5 Pro mot M4 Pro: vad en ny Mac mini gav vid träning

Vi flyttade ett träningsjobb från Mac mini M4 Pro 64 GB till M5 Pro 64 GB: 13 till 15 procent snabbare träning, ungefär 20 procent snabbare generering och oförändrad minnesåtgång.

Kapitel

De flesta mätningar av en ny Mac handlar om hur snabbt den svarar. Färre handlar om hur snabbt den lär sig. Den andra frågan spelar roll när arbetet på den egna datorn är att träna en modell snarare än att chatta med en.

Vi hade ett träningsjobb att flytta, så vi mätte både träning och generering på två Mac mini: den M4 Pro med 64 GB som arbetet dittills hade körts på, och den M5 Pro med 64 GB som ersatte den den 24 september.

Med samma träningsupplägg, data, slumpfrö och startvikter var M5 Pro 1,15× så snabb som M4 Pro per träningssteg. För hela jobbet var förhållandet 1,14×: 1 800 steg tog 2 h 35 min där M4 Pro behövde 2 h 55 min. Generering från samma sparade modell gick ungefär 1,2× så snabbt, och minnesåtgången var oförändrad. Båda datorerna har 20 GPU-kärnor.

En annan jämförelse satte vinsten i perspektiv. På M5 Pro fördubblades beräkningshastigheten i en fristående matrismultiplikation när vi ändrade precisionsinställningen. Ändå blev ett träningssteg bara ungefär 3 procent kortare. En snabbare beräkning gör inte nödvändigtvis hela jobbet lika mycket snabbare.

Jobbet vi flyttade

Arbetet gäller en språkmodell med 123 miljoner parametrar som kombinerar rekurrenta lager (gated linear attention) med lager med full attention och ett mixture-of-experts-MLP. Vi tränar den i MLX med AdamW, en batch på 4 × 1 024 token, omberäkning av lager för att spara minne och en utmatningsdel som beräknas i block.

Steget vi mätte är finjustering: 1 800 träningssteg från en förtränad, sparad modell på en blandning av uppgifter för verktygsanvändning och kopiering.

Det är ett litet jobb som vi kan köra flera gånger på datorerna vi har. Det visar vad just den här modellen vinner, inte vad en större modell skulle vinna.

Vad vi jämförde

Mac mini M4 ProMac mini M5 Pro
ModellidentifierareMac16,11Mac17,16
CPU14 kärnor18 kärnor
GPU20 kärnor, Metal 420 kärnor, Metal 4
Minne64 GB enhetligt minne64 GB enhetligt minne
macOS26.5 (25F71)27.0 (26A428)
Python och MLX3.12.13 och MLX 0.32.23.12.14 och MLX 0.32.2

Båda datorerna körde samma MLX-paket. Metal-biblioteket i paketet har samma SHA-256 på båda, så de använde samma binärfil.

I den kontrollerade jämförelsen körde M5 Pro M4 Pro-datorns träningsupplägg i 20 steg: samma dataordning, samma slumpfrö och samma startvikter. Vi valde full float32-precision på M5, som vi beskriver nedan. Tider och minnesåtgång för de fullständiga körningarna kommer från loggade mätvärden. Matristesterna var separata mätningar.1

Vad datorerna presterade

MätningM4 ProM5 ProHastighetsökning
Sekunder per träningssteg, hela körningen på 1 800 steg5,5434,8881,13×
Sekunder per träningssteg, samma data, slumpfrö och vikter (steg 2 till 19)5,5474,8321,15×
Hela träningsjobbet10 527 s (2 h 55 min)9 270 s (2 h 35 min)1,14×
Genereringskontroll efter träningen, 400 promptar210,3 s176,3 s1,19×
Validering på en fast delmängd14,6 s12,4 s1,18×
Generering från samma sparade modell, 400 promptar192,7 s157,9 s1,22×
Hela utvärderingen, fyra delmoment inklusive modellinläsning315 s257 s1,23×
Högsta minnesåtgång under träning9,42 GiB9,44 GiBoförändrad

För tiderna är hastighetsökningen M4-tiden delad med M5-tiden. Förhållandet 1,15× betyder ungefär 15 procent mer arbete per sekund, eller ungefär 13 procent kortare tid.

Raden för hela träningskörningen jämför samma dimensioner och inställningar på olika träningsdata. Av träningsraderna är det bara jämförelsen med 20 steg som har samma data, slumpfrö och startvikter. Den andra M5-körningen tog 4,846 i stället för 4,832 sekunder per steg, en skillnad på ungefär 0,3 procent. Båda stöder samma slutsats.

Ytterligare en detalj spelar roll för ett litet jobb. Tiderna per träningssteg är inte särskilt utspridda: i den fullständiga körningen låg M4 Pro mellan 5,45 och 5,65 sekunder från den 10:e till den 90:e percentilen, och M5 Pro mellan 4,82 och 4,96. Intervallen överlappar inte. De beskriver variation inom varje körning, inte konfidensintervall över upprepade jobb.

Hastighetsökning på M5 Pro: 14,8 procent per träningssteg med samma indata, 13,4 procent per steg över hela körningen, 13,6 procent för hela träningsjobbet och 22,0 procent för generering från samma sparade modell.

Hastighetsökningen beräknas som M4-tid delad med M5-tid, minus ett. De fullständiga träningsjobben använde olika data med samma dimensioner och inställningar. Den korta jämförelsen använde samma indata. Minnesåtgången var i stort sett oförändrad.

Varför träningen vinner mindre än matristesterna

En float32-matrismultiplikation på 2 048³ nådde 4 433 GFLOP/s på M4 Pro och 5 736 GFLOP/s på M5 Pro, ungefär 1,29×. Med M5 Pro-datorns standardinställning, som sänker precisionen, blev resultatet 11 548 GFLOP/s, ungefär 2,6× M4 Pro-datorns hastighet med full precision.

M4-värdet kom från ett tidigare test vid installationen, med ett annat mätprogram. Jämförelserna mellan datorerna ger därför en ungefärlig bakgrund. Den tydligare jämförelsen är inom M5: standardinställningen fördubblade hastigheten i matristestet, men kortade ett träningssteg med bara ungefär 3 procent.

Vår tolkning är att den snabbare matrisberäkningen bara täcker en liten del av arbetets totala tid. Rekurrenta lager, minnestrafik och arbetet med att starta varje operation är tänkbara bidrag. Matriserna i träningen skiljer sig också från det stora fristående testet. Vi har inte profilerat de bidragen var för sig.

Den praktiska slutsatsen är att ett hastighetsförhållande från ett matristest inte förutsäger träningsvinsten. Större modeller eller batcher skulle kunna utnyttja matrishårdvaran bättre, men det återstår att mäta. Det är inget resultat från den här jämförelsen.

En precisionsinställning att känna till på M5

När vi kontrollerade den nya datorn hittade vi något som en M5-ägare bör känna till innan resultat jämförs mellan Mac-datorer.

På M5 Pro kör MLX 0.32.2 den float32-matrismultiplikation vi testade med sänkt precision som standard. Miljövariabeln MLX_ENABLE_TF32 har standardvärdet 1. Värdet 0 begär full float32-precision.2 MLX-dokumentationen beskriver familjen av matrismultiplikationsoperationer, inklusive attention. Vilka som berörs beror på MLX:s backend och hårdvaran. En av utvecklarna bekräftar också att flaggan aktiverar TF32 när beräkningsvägen via neuralacceleratorerna, NAX, stöder operationen.3

Vårt M1 Max-test gav oförändrat resultat när vi växlade flaggan. M4 Pro-körningarna loggade värdet 1, men deras resultat stämde med M5 i fullprecisionsläget. Samma flaggvärde betydde alltså inte samma aritmetik på de två datorerna.

För tät float32-matrismultiplikation väljer 0 en GPU-implementation med full precision utanför NAX. Operationen fortsätter alltså inte på NAX med högre precision. FP16- och BF16-operationer kan fortfarande använda NAX, så flaggan stänger inte av acceleratorerna generellt.4

Det här mätte vi på M5 Pro:

Sänkt precision (standard)MLX_ENABLE_TF32=0
float32-matrismultiplikation, 2 048³11 548 GFLOP/s5 736 GFLOP/s
Relativt fel mot float64, 1 024³8,2e-41,5e-6

Feltestet använde en mindre matris än hastighetstestet. Måttet är den största absoluta avvikelsen delad med det största absoluta referensvärdet.

Två jämförelser på M5 Pro. Standardinställningen ger 11 548 i stället för 5 736 GFLOP/s i matristestet, 2,01 gånger hastigheten. Ett träningssteg med samma indata tar 4,706 i stället för 4,832 sekunder, en tidsminskning på 2,6 procent.

Båda jämförelserna gäller M5 Pro. Standardinställningen fördubblar hastigheten i matristestet, medan ett träningssteg med samma indata tar ungefär 3 procent kortare tid. Staplarna börjar vid noll. Varje diagram anger enhet och om högre eller lägre är snabbare.

Kostnaden för att stänga av den sänkta precisionen är verklig men liten: ungefär 3 procent på det här träningsjobbet på M5. Att lämna den på ändrade de numeriska resultaten. Med standardinställningen ändrades 9 av 1 600 utdata när vi utvärderade en sparad modell på nytt. Loggsannolikheter flyttades med upp till 0,56 nats, och träningsförlusten avvek från M4 Pro redan vid det första steget, med 2,6e-4.

Med MLX_ENABLE_TF32=0 återskapade M5 Pro M4 Pro-datorns utvärderingsresultat bit för bit. Av de första 20 träningsförlusterna var 16 bitidentiska och resten skilde sig med mindre än 1e-6. Full precision återställde exakt överensstämmelse för de testade utvärderingsresultaten och nära överensstämmelse för träningen. Det gav oss en stadigare grund för att jämföra tiden varje dator behövde.

Det fanns en praktisk fallgrop: vårt träningsprogram skrev till en början över värdet som begärdes i skalet. Vi upptäckte skillnaden i körningens logg och rättade konfigurationen innan vi mätte tiderna med full precision ovan. För oss hör inställningen nu hemma i varje körnings dokumenterade miljö. Kontrollera vad processen faktiskt använde, inte bara vad startkommandot begärde.

När standardinställningen passar

Att behålla MLX_ENABLE_TF32=1 kan vara en användbar avvägning för snabbare inferens i vardagen eller för träning, förutsatt att kontroller av den aktuella modellen visar godtagbar kvalitet och, vid träning, konvergens. Sänkt precision betyder inte i sig sämre svar, och träning kräver inte automatiskt att flaggan är avstängd.

Vi valde 0 för att jämföra det numeriska beteendet med den äldre datorn. Det är också användbart vid referensberäkningar och felsökning av små skillnader. Standardinställningen erbjuder fart; arbetsuppgiften avgör om avvägningen är värd det. Kostnaden på ungefär 3 procent gäller det här jobbet, inte full precision i allmänhet.

Vad resultaten inte säger

  • Det är ett arbetsflöde med en modellstorlek. Det här är inget allmänt chiptest. Det säger inget om inferens med stora modeller eller om träning som behöver mer av de 64 GB än det här jobbet gör.
  • Datorerna skiljer sig åt på fler sätt än chippet. De körde olika macOS-versioner, 26.5 respektive 27.0. Antal GPU-kärnor, minneskapacitet och MLX-paket matchar, men jämförelsen kan inte skilja operativsystemets bidrag från chippets.
  • En eller två körningar per mätpunkt. Vi skulle inte dra slutsatser av skillnader under 1 eller 2 procent i de här siffrorna.
  • Inget här mäter modellkvalitet. Vi mätte tid, inte om modellen blev bättre på sin uppgift.

Så mätte vi

InställningVärde
ModellHybridspråkmodell med 123 miljoner parametrar och ett mixture-of-experts-MLP
TräningsfasFinjustering, 1 800 steg från en förtränad, sparad modell
Batch4 × 1 024 token
OptimerareAdamW
RamverkMLX 0.32.2, Python 3.12.13 (M4 Pro) och 3.12.14 (M5 Pro)
Kontrollerad jämförelse20 steg, samma träningsupplägg, dataordning, slumpfrö och startvikter
MinneshanteringOmberäkning av lager och en utmatningsdel som beräknas i block
PrecisionFull float32 i praktiken; M4 loggade MLX_ENABLE_TF32=1, M5 loggade 0

Mätvärdena är avskrivna från körningarnas loggar och separata matristester. Träningsdata, den sparade modellen och körningsloggarna är interna, så källanteckningen är inte offentlig. Mätunderlaget listar de exakta värdena bakom tabellerna ovan. Det går alltså att kontrollera beräkningarna utan tillgång till våra datorer.1

Vad vi tar med oss

Om frågan är om den nya Mac mini-datorn gjorde träningen av vår lilla modell snabbare är svaret ja. M5 Pro gav oss 13 till 15 procent snabbare träning och ungefär 20 procent snabbare generering, med samma minnesåtgång och samma 20 GPU-kärnor. Hela jobbet blev klart ungefär 21 minuter tidigare. Det är användbar tid för ett nytt försök, även om jämförelsen inte kan skilja chippets bidrag från de olika macOS-versionernas.

Om frågan är hur mycket en snabbare matrisberäkning hjälper det här träningsjobbet är svaret betydligt mindre än det fristående testet antyder. På M5 fördubblade standardprecisionen hastigheten i matristestet, men kortade ett träningssteg med bara ungefär 3 procent. Arbetet avgör hur mycket av hårdvarans försprång som blir sparad tid.

Och om du jämför float32-beräkningar mellan Mac-datorer, kontrollera precisionsläget först. För det här jobbet kostade MLX_ENABLE_TF32=0 på M5 några procent och fick de numeriska resultaten att stämma nära överens igen. En användbar jämförelse börjar med att veta vad datorerna faktiskt räknade ut.

Fotnoter

  1. Mätunderlag (JSON, engelska). Tider, minnesåtgång, precisionskontroller och matristester för Mac mini M4 Pro 64 GB (Mac16,11) och Mac mini M5 Pro 64 GB (Mac17,16), med båda de korta M5-körningarna bevarade. Det är en avskrift av mätningarna, inte ett offentligt paket för att återskapa experimentet. ↩ ↩2

  2. MLX v0.32.2, mlx/utils.h, där MLX_ENABLE_TF32 har standardvärdet 1, och Numerical Precision, som beskriver hur full precision väljs och hur beteendet beror på hårdvaran. ↩

  3. ml-explore/mlx, issue 3235. En utvecklare svarade den 10 mars 2026 att TF32 stöds av NAX och att flaggan aktiverar det när det är tillgängligt för operationen. Ärendet stängdes samma dag. ↩

  4. MLX v0.32.2, matmul.cpp. Villkoret use_nax kräver enable_tf32() för float32-indata. Det här beskriver vägvalet i källkoden, inte en hårdvaruspårning av hela vårt träningsjobb. ↩

Läs vidareMöt din AI-motståndare: ett enda framåtpassText som bilder: vad en sida kostar ← Alla artiklar