Mining happens in rounds. In each round, the next miner gets a turn to generate the next block- just the block data not the hash. They then allocate workloads to the other miners based on their speed. A workload is a range of nonce values. The miner who generates the block essentially hosts their own temporary mining pool.
How do you prevent sybil attack? Miner could create million identities so he'll always gets to mine a block.