Both are good at what they do. I don't consider them to be direct competitors, except in that the general public thinks they are.
GitHub = social, more ideal for open source projects.
GitLab = internal single solution for dev shops.
So instead of a version control system that lets people try out different integrations, GitLab provides an opinionated (yet flexible with key integrations and the option to opt out of anything you don't want) way to run the entire software development and deployment lifecycle. You can start with planning your issues, then you create the code (usually in your editor of choice but there's a web IDE that makes quick fixes much faster in GitLab), then you store your code with our version control. Using the GitLab CI you can set up automated jobs that include all kinds of tests (we provide the Auto DevOps pipeline for a set of best practices to automatically do tests and security scans and also provide Prometheus metrics without you having to do a thing). Then comes the CD part, followed by monitoring via Prometheus and tracing with Jaeger. You can deploy the code to k8s clusters directly on GitLab making k8s a lot more accessible to developers and then run it on any cloud. Our GKE integration is pretty dope. I personally am working on bringing similar serverless functionality to the product soon as well. This is by no means an exhaustive list but I covered the main aspects from my perspective. You can learn more here - https://about.gitlab.com/features/
I spent a lot of time with Gitlab Auto DevOps but never really got it off the ground. I think I could make it work now but that Git + Gitlab + Docker + Kubernetes was just too much to learn in one go. It certainly didn't help that I started out with Amazon EKS instead of the recommended Google Cloud option.
In the future I would like see them add a hosted Maven repository (but I don't think that's in the stars) and if they are feeling adventurous I would like to see them explore visualizing the execution of multi-stage Dockerfiles as process pipelines the way they visualize .gitlab-ci.yml files today.
Perhaps these very subjective impressions from someone who doesn't have a lot of prior experience with either product will give you an idea of how these products differ. ;-)
When a place I used to work at mandated a switch away from GitHub to GitLab I was a bit annoyed and saw it as penny pinching, going for the cheaper but crappier option, but since using it daily for a while I am a convert. I have my own installs of the free version running in some places now as well, and I find that pretty painless.
Their CI tool is nice as well, dead easy to get started with.
Edit: I'm not usually bothered by downvotes but I'm curious about what kind of agenda whoever downvoted this has.