A big part of successful baserunning involves properly reading balls in the dirt. This drill will help your players to learn to properly judge the trajectory of a pitched ball that bounces in the dirt.
Station a baserunner at each base - first, second, and third. Runners should be independent of one another, since the responsibilities for each base differ slightly. Have a coach on the mound, pitching a variety of pitches - mix in balls and strikes, as well as pitches that will bounce.
Any time a pitch is about to bounce, the entire team must yell "Dirt!" This lets you know if everyone is paying attention, and players tend to like the excuse to yell.
Baserunners on first should automatically go if they know the ball is going to bounce - if they wait to see if the catcher has blocked the pitch, they are too late.
Runners on second should read the pitch and decide whether it is safe to go - if the ball gets away from the catcher, they should go, whereas if the catcher blocks the ball, they should stay put.
Similarly, the runner on third should read and react. Take a lead, get a good crow hop as the ball nears the plate, then react to the bounce of the ball.
Emphasize that each base is independent of one another; this is not a game situation in which a runner going from first automatically forces the runner from second. This is a drill to teach the different reactions needed from each base to a pitch in the dirt. Emphasize your runners' lead techniques, making sure that they don't lead too far, or are caught leaning the wrong way... it's not a bad idea to have your coach occasionally make a move to pick off one of the runner, just to keep them honest.
It's also a good idea to keep two catchers for this drill, to avoid tiring one out too much.