The unpredictability you're facing really seems to be due to the fact that the VMs you're running on GCP are on a host that has multiple tenants.
Due to that, both the underlying storage and CPU capabilities are shared among all customers that have tasks running on that node.
Even for local SSDs you'd require enough vCPUs to reach the maximum IOPS of that disk, as noted in their docs:
To reach the maximum IOPS limits, use a VM with 32 or more vCPUs.
If you really want to look into predictable performance, the best option would be a sole-tentant instance with local SSDs. Apart from that, you could try bigger instances with local SSDs, but knowing that it won't have guaranteed performance at all times.
Their benchmarking guide may also be helpful for your needs.