Casper Ruud, rankad åtta i världen, vann första set med 6-3 men Alexander Zverev kom tillbaka. Världsfyran från Tyskland tog hem andra set med klara 6-1.
– Det var en spännande match. Det började bra för min del, men i andra set fick jag bita i det sura äpplet. Lite slarv och småmissar men trots det lyckas jag hämta upp det i tredje, säger Casper Ruud till NTB.
Norrmannen säkrade segern i tredje set som han vann med 6-3.
– Min största seger så här långt i karriären, säger Ruud.
Det var tredje gången Ruud och Zverev möttes. De två tidigare mötena har tysken vunnit och Ruud anser att Zvervev inte spelade på toppen av sin nivå.
– I ärlighetens namn har jag sett honom spela bättre än vad han gjorde i dag. Jag tog chansen nu när jag fick den och det är inte alltid lätt, säger Ruud.
– Jag fick lite gratis i dag jämfört med tidigare matcher.
Det är fjärde gången som Ruud når semifinal i en ATP-turnering. I semifinalen i Miami ställs han mot argentinaren Francisco Cerundolo, rankad 103 i världen.
– Det blir spännande och kul, vi har aldrig mötts. Det här är hans bästa vecka i karriären och även för mig är det en av mina bättre veckor. Jag hoppas kunna utnyttja att jag varit i semifinal tre gånger tidigare.