Repository navigation
|
Hi, I'm one of the developers of JAXMg, which is a JAX library that allows users to call cuSOLVERMp routines for distributed linear algebra over multiple GPUs. JAXMg currently gets access to the underlying NCCL communicator through JAX/XLA’s internals. To ensure compatibility, we compile in the docker image that JAX provides, which pins a specific XLA version. The problem with this approach is that every new JAX release requires us to recompile and release a new version of JAXMg, since changes in the XLA backend can cause subtle API changes that cause all sorts of problems. This means the dependencies in our dependencies = [
"jax==0.11.1; sys_platform == 'linux'",
]
cuda12 = [
"jax[cuda12]==0.11.1",
"nvidia-cusolvermp-cu12==0.9.1.9318.post1",
]So we hard pin to a specific version of JAX per release (although the latest one happens to be backwards compatible with 0.11.1 as well).
Do you have any advice for how to deal with this? Are we stuck with this type of versioning due to the nature of this project? |
Replies: 2 comments 3 replies
|
It sounds like your project is tightly coupled with internal details of XLA, in which case I don't think it's possible to get around that hard version pinning. There may be one alternative: JAX internally solves this kind of skew issue by bumping some internal counters each time an incompatible change is made – look for uses of I should emphasize that these version trackers are not meant for public consumption, and there are no stability guarantees around using them – but since you're already depending on internal details of XLA, it could be useful to you. |
|
It's also possible we could support some sort of API here. We've previously had requests from users to provide their own NCCL communicator to XLA, this in a sense is the reverse. |
It sounds like your project is tightly coupled with internal details of XLA, in which case I don't think it's possible to get around that hard version pinning.
There may be one alternative: JAX internally solves this kind of skew issue by bumping some internal counters each time an incompatible change is made – look for uses of
ifrt_version(in python code) andJAX_IFRT_VERSION_NUMBERin the C code. If the problematic changes align with bumps in those version numbers, you may be able to depend on those in some cases.I should emphasize that these version trackers are not meant for public consumption, and there are no stability guarantees around using them – but since you're already depend…