Skip to content

Remove the GPU fields from MachineGuest and MachinePresets #284

Open

Description

@dangra

Fly.io GPU machines are discontinued -- deprecated as of 31 July 2026 and unavailable since. The Machines API rejects any request that sets config.guest.gpu_kind or config.guest.gpus, so the GPU parts of this module now describe a product that cannot be provisioned.

Filing this to track the removal rather than to ask for it urgently. The fields are inert: any value a caller sets is refused by the API, so nothing here is broken today, and there is no rush.

Surface

All in machine_types.go:

  • MachineGuest.GPUs and MachineGuest.GPUKind (:468-469)
  • MachineGuest.SetSize copying both (:504-505)
  • MachineGuest.ToSize mapping GPU kinds back to size names (:516-522)
  • the four GPU entries in MachinePresets -- a100-40gb, a100-80gb, l40s, a10 (:575-578)
  • DefaultGPUVMSize (:35), which nothing in this module references

Worth deciding before doing it

This is exported API of a public module, so removal is a breaking change for anything compiling against it, flyctl most of all. A few specific consequences:

  • Dropping the MachinePresets entries makes a100-40gb and friends unknown sizes. SetSize would start returning 'a100-40gb' is an invalid machine size, choose one of: [...], which is arguably a better error than today's -- a size that resolves fine locally and is then refused by the API -- but it is a different error, and anyone matching on it would notice.
  • ToSize currently returns a GPU size name for a guest carrying a GPU kind. With the fields gone it would fall through to the CPU cases, so its behaviour changes for any old machine record still carrying one.
  • Callers that set the fields would stop compiling, which is the point, but it does mean this wants coordinating with a flyctl release rather than landing alone.

An alternative worth weighing: keep the preset names resolving but have them fail with an explicit "GPU machines are no longer available" message, so someone with an old script gets told why rather than getting a generic invalid-size list. That trades a little dead code for a much clearer failure.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions