OK Folks heres the deal and the fix for your car.
Several previous posters all hit the problem. BUT This is the fix.
I have a 2005 Impala that had the same bad speedo. I turned the key off and on several times to get it back to zero.
There is a servo motor in the cluster. This motor runs on impulses from the
unit on the Transmission and a few other places in the car. The bearings in the servo motor DO AND THEY WILL GO BAD. There is no ready available solution for these bearings in the motor but to replace the entire cluster.
If you get a USED cluster from a junk yard it will not have the same mileage as the one in your car. It must be reprogrammed with the current mileage. Make sure you get a cluster from the year your car was made to insure that it will work and fit properly. DISCONNECT THE BATTERY!!!!!
If you go to a DEALER look to spend 500.00 to replace it. I have had it replaced with a new one.
In any case if you replace the cluster and all the connections are made and the unit is reinstalled in the dash, reconnect the battery and leave the key ON for 20-30 minutes. Try to start the car. The security light may come on and the vehicle will not crank. If the car does not start after you tried to reprogram the new cluster and the BCM do it again. It should start after.
If you have a Garmin or other GPS device with a speedo attached, your speedo cluster you installed should be accurate, or +- 1 mph.
If you have any questions feel free to send me a personal message.
John