Momentum swung firmly in Kerber's favour during the tie-break when Williams committed six unforced errors, including a backhand into the net that handed the German the set.
The match, which featured two former world number ones, ended when Williams sent a backhand long on match point.
Three-times Grand Slam champion Kerber, who is looking for a maiden title in Indian Wells, will next play Belinda Bencic after the Swiss beat world number five Karolina Pliskova 6-3 4-6 6-3 in the quarter-final earlier in the day.
Kerber said she struggled to impose her game on the American.
"I was really trying, in the first set especially, to find my rhythm and play my tennis but it was not so easy," she told reporters.
"To play against Venus, it's always tough. I'm happy I won the first set and then could move in and play a little bit better in the second set."
Belinda Bencic celebrates her win over Karolina Pliskova
Image credit: Getty Images
Bencic, who defeated world number one and defending champion Naomi Osaka on Tuesday, secured the win when Pliskova could not return a serve on match point.
The 22-year-old Swiss could have had an even easier time against the Czech but converted just four of her 16 break-point opportunities.
Last month's Dubai Duty Free Tennis Championships winner matched Pliskova's seven aces with seven of her own on the way to logging her 12th straight victory.
"She knows she has the big serve and big groundstrokes," she said of her friend and practice partner Pliskova.
"Obviously, my plan was to try to make her rally and try to be good in the defensive and also try to be dominant when I can."
Since the beginning of the year world number 23 Bencic has defeated six top-10 opponents and looks to have put behind her the injury woes that plagued her last year.
"It's been a dream. I wouldn't believe I win today," she told reporters.
"I'm not going to the court with any expectations I'm just trying to play."