I previously posted this question on
GitHub but I'm not sure if that was the more appropriate venue and I just found out about this group so I decided to cross-post here.
I'm currently building a library in Rust that leverages XLA and PJRT and while going through the APIs and the implementation of the Python bindings, I'm a little confused about the terminology and the various interfaces. Specifically, I ran into
get_tfrt_cpu_client and its implementation in the Python bindings and I have a couple of questions related to it:
- I see that this wrapping the PjRtClient from xla/pjrt into an ifrt::PjRtClient from xla/python/pjrt_ifrt when a distributed client is provided. What is the difference between the two? Specifically, the CPU PjRtClient from xla/pjrt seems to support a distributed setting so what do the Python bindings do differently and is it necessary or is it a by-product of an older implementation?
- I think I understand what PJRT is and its goals. However, I cannot find much information about IFRT and do not understand what that part of the codebase does. It also appears to be specific to the Python bindings. Is this true? And more generally, what does it offer on top of PJRT?
- I also see the term TFRT used sometimes in the codebase. I assume this stands for something like "TensorFlow Runtime" (?). Is this also a remnant of an older implementation or does it offer something on top of PJRT?