Skip to content

Play nicely with Elixir's releases. #71

@hickscorp

Description

@hickscorp

I've noticed that setting XLA_TARGET=xxx mix release compute will result in the libexla_extension.so being built with this name always, regardless of xxx.
This is a bit problematic, because it implies having as many releases defined as we want to target different architectures.
For example, our mix.exs file looks like this:

  defp releases(),
    do:
      [
        web: [
          version: "0.0.1",
          applications: [...]
        ],
        worker: [
          version: "0.0.1",
          applications: [...]
        ]
      ]
      |> add_compute_releases([:cuda120, :rocm])

  defp add_compute_releases(acc, xla_targets),
    do:
      xla_targets
      |> Enum.reduce(acc, fn xla_target, acc ->
        acc ++
          [
            {:"compute_#{xla_target}",
             [
               version: "0.0.1",
               applications: [...]
             ]}
          ]
      end)

This results in a list of releases available such as web, worker, compute_cuda120, compute_rocm.
This is a bit cumbersome, given that the only thing that changes between the two compute_xxx releases seems to be libexla_extension.so...

A few ideas here:

  • It would be really nice being able to indicate more than one XLA target architecture. Then upon starting the release, we would specify which one to use, and a different libexla_extension_xxx.so could be picked (via symlink?).
  • Not having to toy too much with ENV variables (XLA_TARGET) could be really nice. For example, being able to indicate the architectures directly in mix.exs, maybe even in the releases section...
  • Why not pluralizing XLA_RELEASE into XLA_RELEASES, telling XLA to build as many as requested, so that a release could embed many libexla_extension_xxx.so and do the switcheroo at boot?

Let me know if I misunderstood anything!

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