Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Good First Issue][JAX FE]: Support jax.lax.argmax operation for JAX #26574

Open
rkazants opened this issue Sep 12, 2024 · 2 comments · May be fixed by #26671
Open

[Good First Issue][JAX FE]: Support jax.lax.argmax operation for JAX #26574

rkazants opened this issue Sep 12, 2024 · 2 comments · May be fixed by #26671
Assignees
Labels
category: JAX FE OpenVINO JAX FrontEnd good first issue Good for newcomers no_stale Do not mark as stale

Comments

@rkazants
Copy link
Contributor

Context

OpenVINO component responsible for support of JAX/Flax models is called as JAX Frontend (JAX FE). JAX FE converts a JAX/Flax model represented by ClosedJAXpr graph object with operations from jax.lax opset to OpenVINO IR containing operations from OpenVINO opset.

In order to infer JAX/Flax models containing jax.lax.argmax operation by OpenVINO, JAX FE needs to be extended with this operation support.

What needs to be done?

For jax.lax.argmax operation support, you need to implement the corresponding loader into JAX FE op directory and to register it into the dictionary of Loaders. One loader is responsible for conversion (or decomposition) of one type of JAX operation.

Here is an example of loader implementation for jax.lax.reshape operation:

OutputVector translate_reshape(const NodeContext& context) {
    num_inputs_check(context, 1, 1);
    Output<Node> input = context.get_input(0);
    auto new_sizes = context.const_named_param<std::vector<int64_t>>("new_sizes");
    if (context.has_param("dimensions")) {
        auto dimensions = context.const_named_param<std::vector<int64_t>>("dimensions");
        // transpose the input first.
        auto permutation_node = std::make_shared<v0::Constant>(element::i64, Shape{dimensions.size()}, dimensions);
        input = std::make_shared<v1::Transpose>(input, permutation_node);
    }

    auto new_shape_node = std::make_shared<v0::Constant>(element::i64, Shape{new_sizes.size()}, new_sizes);
    Output<Node> res = std::make_shared<v1::Reshape>(input, new_shape_node, false);
    return {res};
};

In this example, translate_reshape expresses jax.lax.reshape using OpenVINO opset. Since jax.lax.reshape performs transposition and tensor reshaping according to JAX documentation, the resulted decomposition contains OpenVINO Transpose and Reshape operations. For Transpose and Reshape nodes, this conversion parses constant parameters dimensions to permute input tensor and new_size that is the target shape of the result.

Once you are done with implementation of the translator, you need to implement the corresponding layer tests test_argmax.py and put it into layer_tests/jax_tests directory. Example how to run some layer test:

export TEST_DEVICE=CPU
export JAX_TRACE_MODE=JAXPR
export 
cd openvino/tests/layer_tests/jax_tests
pytest test_reshape.py

Example Pull Requests

Resources

Contact points

  • @openvinotoolkit/openvino-jax-frontend-maintainers
  • @rkazants in GitHub and Discord

Ticket

No response

@rkazants rkazants added good first issue Good for newcomers no_stale Do not mark as stale category: JAX FE OpenVINO JAX FrontEnd labels Sep 12, 2024
@halm-zenger
Copy link

.take

Hi, I would like to work on this issue if that's ok. Thanks!

Copy link
Contributor

Thank you for looking into this issue! Please let us know if you have any questions or require any help.

@halm-zenger halm-zenger linked a pull request Sep 19, 2024 that will close this issue
@rkazants rkazants linked a pull request Sep 19, 2024 that will close this issue
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
category: JAX FE OpenVINO JAX FrontEnd good first issue Good for newcomers no_stale Do not mark as stale
Projects
Status: Assigned
Development

Successfully merging a pull request may close this issue.

2 participants