Skip to main content

Website
Website
Docs
Docs
Demos
Demos
Design
Design
FAQ
FAQ


Convert Machine Learning Code Between Frameworks

Ivy enables you to:

  • Convert ML models, tools and libraries between frameworks while maintaining complete functionality using ivy.transpile
  • Create optimized graph-based models and functions in any native framework (PyTorch, TensorFlow, etc..) with ivy.trace_graph

Installing ivy

The easiest way to set up Ivy is to install it using pip:

pip install ivy
Docker Image

You can pull the Docker image for Ivy from:

docker pull ivyllc/ivy:latest
From Source

You can also install Ivy from source if you want to take advantage of the latest changes, but we can't ensure everything will work as expected 😅

git clone https://github.com/ivy-llc/ivy.git
cd ivy
pip install --user -e .

If you want to set up testing and various frameworks it's probably best to check out the Setting Up page, where OS-specific and IDE-specific instructions and video tutorials to do so are available!


Supported Frameworks

These are the frameworks that ivy.transpile currently supports conversions from and to. We're working hard on adding support for more frameworks, let us know on Discord if there are source/target frameworks that would be useful for you!

Framework Source Target
PyTorch 🚧
TensorFlow 🚧
JAX 🚧 🚧
NumPy 🚧 🚧

Getting started

Ivy's transpiler allows you convert code between different ML frameworks. Have a look at our Quickstart notebook to get a brief idea of the features!

Beyond that, based on the frameworks you want to convert code between, there are a few more examples further down this page 👇 which contain a number of models and libraries transpiled between PyTorch, JAX, TensorFlow and NumPy.


Using ivy

Here's some examples, to help you get started using Ivy! The examples page also features a wide range of demos and tutorials showcasing some more use cases for Ivy.

Transpiling any code from one framework to another
import ivy
import torch
import tensorflow as tf

def torch_fn(x):
    a = torch.mul(x, x)
    b = torch.mean(x)
    return x * a + b

tf_fn = ivy.transpile(torch_fn, source="torch", target="tensorflow")

tf_x = tf.convert_to_tensor([1., 2., 3.])
ret = tf_fn(tf_x)
Tracing a computational graph of any code
import ivy
import torch

def torch_fn(x):
    a = torch.mul(x, x)
    b = torch.mean(x)
    return x * a + b

torch_x = torch.tensor([1., 2., 3.])
graph = ivy.trace_graph(jax_fn, to="torch", args=(torch_x,))
ret = graph(torch_x)

How ivy works?

Let's take a look at how Ivy works as a transpiler in more detail to get an idea of why and where to use it.

When is Ivy's transpiler useful?

If you want to use building blocks published in other frameworks (neural networks, layers, array computing libraries, training pipelines...), you want to integrate code developed in various frameworks, or maybe straight up migrate code from one framework to another or even between versions of the same framework, the transpiler is definitely the tool for the job! You can use the converted code just as if it was code originally developed in that framework, applying framework-specific optimizations or tools, instantly exposing your project to all of the unique perks of a different framework.


Ivy's transpiler allows you to use code from any other framework (or from any other version of the same framework!) in your own code, by just adding one line of code.

This way, Ivy makes all ML-related projects available for you, independently of the framework you want to use to research, develop, or deploy systems. Feel free to head over to the docs for the full API reference, but the functions you'd most likely want to use are:

# Converts framework-specific code to a target framework of choice. See usage in the documentation
ivy.transpile()

# Traces an efficient fully-functional graph from a function, removing all wrapping and redundant code. See usage in the documentation
ivy.trace_graph()

ivy.transpile will eagerly transpile if a class or function is provided

import ivy
import torch
import tensorflow as tf

def torch_fn(x):
    x = torch.abs(x)
    return torch.sum(x)

x1 = torch.tensor([1., 2.])
x1 = tf.convert_to_tensor([1., 2.])

# Transpilation happens eagerly
tf_fn = ivy.transpile(test_fn, source="torch", target="tensorflow")

# tf_fn is now tensorflow code and runs efficiently
ret = tf_fn(x1)

ivy.transpile will lazily transpile if a module (library) is provided

import kornia

x2 = torch.rand(5, 3, 4, 4)

# Module is provided -> transpilation happens lazily
tf_kornia = ivy.transpile(kornia, source="torch", target="tensorflow")

# The transpilation is initialized here, and this function is converted to tensorflwo
ret = tf_kornia.color.rgb_to_grayscale(x2)

# Transpilation has already occurred, the tensorflow function runs efficiently
ret = tf_kornia.color.rgb_to_grayscale(x2)

ivy.trace_graph can be used eagerly or lazily

If you pass the necessary arguments for function tracing, the graph tracing step will happen instantly (eagerly). Otherwise, the graph tracing will happen only when the returned function is first invoked.

import ivy
import jax
ivy.set_backend("jax")

# Simple JAX function to transpile
def test_fn(x):
    return jax.numpy.sum(x)

x1 = ivy.array([1., 2.])
# Arguments are available -> tracing happens eagerly
eager_graph = ivy.trace_graph(test_fn, to="jax", args=(x1,))

# eager_graph now runs efficiently
ret = eager_graph(x1)
# Arguments are not available -> tracing happens lazily
lazy_graph = ivy.trace_graph(test_fn, to="jax")

# The traced graph is initialized, tracing will happen here
ret = lazy_graph(x1)

# Tracing has already happend, traced graph runs efficiently
ret = lazy_graph(x1)

If you want to learn more, you can find more information in the Ivy as a transpiler section of the docs!


Documentation

You can find Ivy's documentation on the Docs page, which includes:

  • Motivation: This contextualizes the problem Ivy is trying to solve by going over
  • Related Work: Which paints a picture of the role Ivy plays in the ML stack, comparing it to other existing solutions in terms of functionalities and abstraction level.
  • Design: A user-focused guide about the design decision behind the architecture and the main building blocks of Ivy.
  • Deep Dive: Which delves deeper into the implementation details of Ivy and is oriented towards potential contributors to the code base.

Contributing

We believe that everyone can contribute and make a difference. Whether it's writing code, fixing bugs, or simply sharing feedback, your contributions are definitely welcome and appreciated 🙌

Check out all of our Open Tasks, and find out more info in our Contributing guide in the docs! Or to immediately dive into a useful task, look for any failing tests on our Test Dashboard!


Community



Join our growing community on a mission to make conversions between frameworks simple and accessible to all! Whether you are a seasoned developer or just starting out, you'll find a place here! Join the Ivy community on our Discord 👾 server, which is the perfect place to ask questions, share ideas, and get help from both fellow developers and the Ivy Team directly.

See you there!


Citation

If you use Ivy for your work, please don't forget to give proper credit by including the accompanying paper 📄 in your references. It's a small way to show appreciation and help to continue to support this and other open source projects 🙌

@article{lenton2021ivy,
  title={Ivy: Templated deep learning for inter-framework portability},
  author={Lenton, Daniel and Pardo, Fabio and Falck, Fabian and James, Stephen and Clark, Ronald},
  journal={arXiv preprint arXiv:2102.02886},
  year={2021}
}

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ivy-0.0.9.8.tar.gz (16.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ivy-0.0.9.8-cp312-cp312-win_amd64.whl (30.7 MB view details)

Uploaded CPython 3.12Windows x86-64

ivy-0.0.9.8-cp312-cp312-manylinux_2_17_x86_64.whl (30.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

ivy-0.0.9.8-cp312-cp312-macosx_12_0_arm64.whl (17.2 MB view details)

Uploaded CPython 3.12macOS 12.0+ ARM64

ivy-0.0.9.8-cp311-cp311-win_amd64.whl (30.1 MB view details)

Uploaded CPython 3.11Windows x86-64

ivy-0.0.9.8-cp311-cp311-manylinux_2_17_x86_64.whl (30.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

ivy-0.0.9.8-cp311-cp311-macosx_12_0_arm64.whl (17.4 MB view details)

Uploaded CPython 3.11macOS 12.0+ ARM64

ivy-0.0.9.8-cp310-cp310-win_amd64.whl (29.7 MB view details)

Uploaded CPython 3.10Windows x86-64

ivy-0.0.9.8-cp310-cp310-manylinux_2_17_x86_64.whl (29.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

ivy-0.0.9.8-cp310-cp310-macosx_12_0_arm64.whl (17.3 MB view details)

Uploaded CPython 3.10macOS 12.0+ ARM64

ivy-0.0.9.8-cp39-cp39-win_amd64.whl (29.7 MB view details)

Uploaded CPython 3.9Windows x86-64

ivy-0.0.9.8-cp39-cp39-manylinux_2_17_x86_64.whl (29.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

ivy-0.0.9.8-cp38-cp38-win_amd64.whl (29.5 MB view details)

Uploaded CPython 3.8Windows x86-64

ivy-0.0.9.8-cp38-cp38-manylinux_2_17_x86_64.whl (29.5 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

Details for the file ivy-0.0.9.8.tar.gz.

File metadata

  • Download URL: ivy-0.0.9.8.tar.gz
  • Upload date:
  • Size: 16.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for ivy-0.0.9.8.tar.gz
Algorithm Hash digest
SHA256 a106b938704946baa7c7f0e359a87292aebbe71e11fb0eb9fac60840052dabad
MD5 b2ea1bf78cf53c3c64277b264139a6c6
BLAKE2b-256 d65c144570bf9a78f96bce178eb4d822af5a7d20fda3517faf09e2dfc6cc982a

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: ivy-0.0.9.8-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 30.7 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for ivy-0.0.9.8-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e68665e90065f381ed6fc324f4bd211eaa9e66a8cc889bf916eac83004d8e8e4
MD5 f67b55e885930c2f0fcdf309818cd135
BLAKE2b-256 f0fbae508eb004143d0236f245ba0b2cc81eea9647b793a1f79d89b40aae8a4e

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp312-cp312-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp312-cp312-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 578afadd7ebfcc0f1166c3e940aafdc61896f5ac331588a17c0b629bed53ae2b
MD5 d604d11ab9f9e5b95244e35fb02c2fe8
BLAKE2b-256 2647318f0e62075cf109d1e2153648cc764402e115ec0ae13255a7eaa25f7f03

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp312-cp312-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp312-cp312-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 cada1f7350fb10cc4e8355dbdb3a3834d47a675bd1ca88f41c5a23adb761ff69
MD5 0d843345de619ca4df00c9ec4eda198d
BLAKE2b-256 0b690456cb7b33befe2da99646ca4a9eda6f1e2da2c3d1c3ba67b153e96cc34e

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: ivy-0.0.9.8-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 30.1 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for ivy-0.0.9.8-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e60f7fb68b214970e5628e2c9d706d389c352f65c8d73d8ca18f02b6e62ebdfd
MD5 9697bb0225479d7c4d93d7b3884750ee
BLAKE2b-256 4a059bf69ff14cf79f2e68536271cb79cb9bb8573764ec59900fa0f9e67cab3e

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp311-cp311-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp311-cp311-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 6989075c70ca86742d814aad3804652c5ce5053238cb623482446463514ccf9a
MD5 e97ece605d59a4a150b610f35792d7a1
BLAKE2b-256 9ee4c6d64e57eb05d1bef9dbe5b68fdaf05c79f6fa8189708f4f79c1b1f10408

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp311-cp311-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp311-cp311-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 a3a8ccd40f6fd0257d3170c43dda1d99c3700773153b02471a753fb30ec7daee
MD5 6e50d8c05778b465943197fde378c2bf
BLAKE2b-256 591e179a0971c7636f88a10364ab8b2bb2166255913fa254525e0b1b5dd994f0

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: ivy-0.0.9.8-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 29.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for ivy-0.0.9.8-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ca9423995c22e381d3e6118b56ae832223d3ea280a4007afe4db9bb0c127bc69
MD5 fb3044f8f3089f178ab8d2416ee655ec
BLAKE2b-256 2ebae5ff43aaeac2bb70f4ad9562a9fa5bfef15c99de23f3cae2148b4af578de

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp310-cp310-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp310-cp310-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 1daff6e9b3d6fe233518794f6ec8fb6f9f5c2848c415b729a0830e0424cd1077
MD5 eeb3e4dc8275da6cb054816d6fd4ee9e
BLAKE2b-256 b679b3b0a1126623baab6ecd57f9a6ee26ff7f06503b1a371ad0fd1dff905e27

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp310-cp310-macosx_12_0_arm64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp310-cp310-macosx_12_0_arm64.whl
Algorithm Hash digest
SHA256 419f41106bfc8851a584cf7458623c032e75426bfac95a3ec0ec3e96b2be21d8
MD5 370bd0a8973949816884395c0a3abad0
BLAKE2b-256 ea23f9583402e73056335aed1d397db8277874353fc7ba1ac21eb99eddf4401e

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: ivy-0.0.9.8-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 29.7 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for ivy-0.0.9.8-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 10889e0831de39659bfa5d6af1b693a00c0e784899f70c0b1aa27da23c1a516d
MD5 be4d6517930683999ae363af89055fef
BLAKE2b-256 390abf7c3e992a73658c39a6e38b917dac9508269769a1ea6ab7b4f8da65dbd5

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp39-cp39-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp39-cp39-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 ec18693aa23f414776b7241e2dd4bcd7d1bfb5dde7414e513a9c723e4e18b4d3
MD5 2861454f4b24c642e04f3c764de7bf6e
BLAKE2b-256 65f150009a85a6649b0e0f816e9a2641c8eaa5181626d4af4bf824fdfdc61965

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: ivy-0.0.9.8-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 29.5 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.12

File hashes

Hashes for ivy-0.0.9.8-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 86d841dae2bdfd1140e7e5b4d8e53ceafe7c2644f5fa6ace03a3a07e2ba11e89
MD5 a87502a30e6cecec02d76691e7167799
BLAKE2b-256 bee04a4c9e49d023f3e52939303147342838dea19f470b3a15dcb5bc16b902c8

See more details on using hashes here.

File details

Details for the file ivy-0.0.9.8-cp38-cp38-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for ivy-0.0.9.8-cp38-cp38-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 6497addb39f5d5d6cf59c5c4788373af4c3aa14b138160a01ab6b1e6e2ee0db8
MD5 41836ab3feae70826b75b2d9e30f33c9
BLAKE2b-256 b27c18012b410f5fc3000091db4f83af39cdec114631db0281901a24d5b00d44

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.0.5

2 files

1.0.0.4

2 files

1.0.0.3

2 files

1.0.0.2

2 files

1.0.0.1

17 files

1.0.0.0

17 files

0.0.9.17

17 files

0.0.9.16

17 files

0.0.9.15

17 files

0.0.9.14

17 files

0.0.9.13

14 files

0.0.9.12

14 files

0.0.9.10

14 files

0.0.9.9

14 files

This release

0.0.9.8 This release

14 files

0.0.9.7

11 files

0.0.9.6

11 files

0.0.9.5

11 files

0.0.9.4

11 files

0.0.9.3

11 files

0.0.9.2

11 files

0.0.9.1

11 files

0.0.9.0

11 files

0.0.8.0

11 files

0.0.7.5

11 files

0.0.7.4

11 files

0.0.7.3

11 files

0.0.7.2

11 files

0.0.7.1

11 files

0.0.7.0

11 files

0.0.6.2

7 files

0.0.6.1

7 files

0.0.6.0

7 files

0.0.5.1

7 files

0.0.5.0

7 files

0.0.4.0

2 files

0.0.3.0

2 files

0.0.2.0

2 files

0.0.1.0

2 files

0.0.0

4 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page