Gene innovation numbers in NEAT implementatoins
The innovation number is generated by a single, unique counter for all genomes. The purpose of the innovation number is to have an ID that indicates corresponding genes in two different genomes.

For example, a gene may originate in a genome due to mutation in generation 1. In future generations this gene may have been passed on to other genomes through crossover. So now we have multiple genomes with our gene in it. If two genomes with this gene are selected for crossover with each other, we want to know that this gene is identical in both genomes. We can tell that these genes are identical, because they have matching innovation numbers. If each genome had their own counter, then each genome would have its own unrelated gene for each innovation number. This tells us nothing about the nature of our network and negates the reason we added innovation number.

As an aside, here is a more thorough outline of NEAT straight from the author of the paper