Every migration plan assumes a quiet period. Machine learning teams do not get one — there is always a model due, and "we are migrating this month" is not an answer anyone accepts.
So the plan has to be sequenced so that work continues throughout, and so that any phase can be abandoned without leaving you stranded. This is the same shape as a general workload exit, but the ordering is different, because in ML the data is heavier than the compute and the compute is easier to move than anyone expects.
Before anything moves, separate the estate into three buckets:
The third bucket determines whether this is a two-week job or a two-quarter one. A team running plain containers on GPU instances with data in object storage can move in a fortnight. A team whose pipeline is expressed in a vendor's orchestration format is rewriting that part regardless — decide early whether to port it to something portable, or accept staying.
One more inventory item, easily missed: CUDA and driver versions. Your container almost certainly assumes a driver stack. Check the target provides it before you promise a date.
Data is the long pole, so start it immediately and let it run in the background while everything else continues where it is.
Sequence:
Nothing has changed for the team at this point. Runs continue on the old platform against the old copy.
Pick a real, recent, non-trivial run — not a toy — and reproduce it end to end on the new platform. One run. Resist the urge to move the whole fleet.
The bar is not bit-for-bit identical output. Different driver versions, different kernel selection and non-deterministic reductions make that unrealistic and chasing it wastes weeks. The bar is: final metrics within run-to-run noise, and wall-clock time within a sensible margin.
This phase is where you find the real problems, and they are always the same ones: a base image that assumed a vendor-specific init, credentials injected by a metadata service that does not exist here, a dataloader path hard-coded to a bucket URL scheme, a library pinned to a driver version. All fixable, all invisible until you try.
Time-box it. If one run cannot be reproduced in two weeks, the blocker is structural and you need to know that now rather than after committing the team.
Run both platforms in parallel for a few weeks. New experiments go to the new platform; anything in flight finishes where it started.
What to compare — and it is not the hourly rate:
Shadow periods have a habit of becoming permanent, so set an end date at the start and hold it. Two platforms is the most expensive state in the whole exercise: you pay for both, and the team maintains two of everything.
The cutover is a policy change rather than an event. New experiments default to the new platform; in-flight runs finish where they are; a documented escape hatch exists for a week.
Two things to do on the same day: point the model registry and CI at the new artefact store, and change who has permission to launch on the old platform. Migrations do not fail at the switch, they fail because launching on the old thing stayed possible and convenient.
This is the phase teams skip, and it is where the savings actually live. Compute stops billing when you stop it. Storage does not.
Checklist:
Give it a named owner and a date. A migration that is 95% done bills like one that is 40% done.
In roughly the order they bite: driver and CUDA version drift; credentials from a metadata service that does not exist on the target; bucket URL schemes hard-coded in dataloaders; IAM policies nobody can fully enumerate; container registry authentication in CI; a managed feature store with no export; and per-run egress from a dataset that is still on the old platform, which quietly makes the shadow period cost more than either platform alone.
None of these are hard. All of them take a day each, and the plan should assume five of them.
Plain containers, data in object storage, no managed orchestration: two to four weeks, most of it waiting for bytes to copy. Add a vendor pipeline DSL or a managed feature store and it is a quarter, most of it rewriting. Anyone quoting you three weeks has not looked at your IAM policies yet.
Antyxsoft GPU instances are launching soon in Greece, Spain and the USA, with no egress charge on the data you move in or out. Join the waitlist and tell us what you plan to run.