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.eq and jax.lax.ne operation for JAX #26571

Closed
rkazants opened this issue Sep 12, 2024 · 2 comments · Fixed by #26719
Closed

[Good First Issue][JAX FE]: Support jax.lax.eq and jax.lax.ne operation for JAX #26571

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

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.eq operation by OpenVINO, JAX FE needs to be extended with this operation support.

What needs to be done?

For jax.lax.eq 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_eq.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
@rkazants rkazants changed the title [Good First Issue][JAX FE]: Support jax.lax.eq operation for JAX [Good First Issue][JAX FE]: Support jax.lax.eq and jax.lax.ne operation for JAX Sep 12, 2024
@hub-bla
Copy link
Contributor

hub-bla commented Sep 21, 2024

.take

Copy link
Contributor

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

github-merge-queue bot pushed a commit that referenced this issue Sep 22, 2024
### Details:
 - support jax.lax.eq and jax.lax.ne operation
 - enable unit tests for new operations
### Tickets:
 - [None](#26571)
@mlukasze mlukasze added this to the 2024.5 milestone Sep 23, 2024
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
Archived in project
Development

Successfully merging a pull request may close this issue.

3 participants